Files
tnb.server/WarehouseMgr/Tnb.WarehouseMgr/WmsPurchaseService.cs
2024-07-17 14:12:22 +08:00

229 lines
9.0 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Sockets;
using System.Text;
using System.Threading.Tasks;
using JNPF.Common.Core.Manager;
using JNPF.Common.Dtos.VisualDev;
using JNPF.Common.Security;
using JNPF.DependencyInjection;
using JNPF.FriendlyException;
using JNPF.Logging;
using JNPF.Systems.Interfaces.System;
using JNPF.VisualDev;
using Mapster;
using Microsoft.AspNetCore.Mvc;
using Newtonsoft.Json;
using NPOI.OpenXmlFormats;
using NPOI.OpenXmlFormats.Dml.Diagram;
using Org.BouncyCastle.Utilities.Net;
using SqlSugar;
using Tnb.BasicData.Entities;
using Tnb.Common.Utils;
using Tnb.QcMgr.Entities;
using Tnb.QcMgr.Entities.Enums;
using Tnb.QcMgr.Interfaces;
using Tnb.WarehouseMgr.Entities;
using Tnb.WarehouseMgr.Entities.Consts;
using Tnb.WarehouseMgr.Entities.Dto;
using Tnb.WarehouseMgr.Entities.Dto.Inputs;
using Tnb.WarehouseMgr.Interfaces;
namespace Tnb.WarehouseMgr
{
/// <summary>
/// 采购收货
/// </summary>
[OverideVisualDev(ModuleConsts.MODULE_WMSPURCHASE_ID)]
public class WmsPurchaseService : WmsPurchaseAndSaleCommonService<WmsPurchaseD>, IWmsPurchaseService
{
private readonly IBillRullService _billRullService;
private readonly ISqlSugarClient _db;
private readonly IUserManager _userManager;
public WmsPurchaseService(ISqlSugarRepository<WmsPurchaseH> repo, IUserManager userManager, IQcCheckPlanService qcCheckPlanService, IBillRullService billRullService)
: base(repo, userManager, qcCheckPlanService)
{
_db = repo.AsSugarClient();
_userManager = userManager;
_billRullService = billRullService;
}
private async Task<dynamic> xxx(VisualDevModelDataCrInput input)
{
PurchaseAndReceiveUpInput input2 = new();
var input3 = input.data.ToObject<PurchaseAndReceiveUpInput>();
input3.details = input.data["tablefield177"].ToObject<List<WmsPurchaseD>>();
var sss = JsonConvert.SerializeObject(input3);
return await Task.FromResult(sss);
}
/// <summary>
/// 采购收货
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost]
public async Task<dynamic> Purchase(PurchaseAndReceiveUpInput input)
{
var blFlag = true;
try
{
await _db.Ado.BeginTranAsync();
WmsInstockH? instock = null;
var purchaseDs = await PurchaseAndSaleUpdate(input);
List<WmsInstockD> instockDs = new();
if (purchaseDs?.Count > 0)
{
instock = input.Adapt<WmsInstockH>();
instock.id = SnowflakeIdHelper.NextId();
instock.bill_code = await _billRullService.GetBillNumber(WmsWareHouseConst.WMS_INSTOCK_ENCODE);
instock.create_id = _userManager.UserId;
instock.create_time = DateTime.Now;
instock.org_id = _userManager.User.OrganizeId;
if (instock.source_code != null) {
instock.sync_status = WmsWareHouseConst.SYNC_STATUS__NOTSYNC;
}
else {
instock.sync_status = WmsWareHouseConst.SYNC_STATUS_NONEEDSYNC;
}
instock.audit_status = 0;
instock.print_status = "0";
instock.is_check = 0;
await _db.Insertable(instock).ExecuteCommandAsync();
instockDs = purchaseDs.Adapt<List<WmsInstockD>>();
instockDs.ForEach(instockD =>
{
instockD.bill_id =instock.id;
instockD.create_id = _userManager.UserId;
instockD.create_time = DateTime.Now;
instockD.org_id = _userManager.User.OrganizeId;
});
await _db.Insertable(instockDs).ExecuteCommandAsync();
}
//通知Mes接口
//_ = SyncMesData(instock.id, instockDs.Select(x => x.material_id).ToList(), EnumTriggerEvent.入厂检按物料编号);
await _db.Ado.CommitTranAsync();
}
catch (Exception ex)
{
blFlag = false;
await _db.Ado.RollbackTranAsync();
Log.Error("采购收货失败", ex);
throw;
}
return await Task.FromResult(blFlag);
}
/// <summary>
/// 根据主表Id获取采购收货明细
/// </summary>
/// <param name="id">主表Id</param>
/// <returns></returns>
[HttpGet("id")]
public async Task<dynamic> GetPurchaseDetailByBillId(string id)
{
return await GetDetailsByPkId(id);
}
/// <summary>
/// 审核反审核
/// </summary>
/// <param name="input">
///
/// </param>
/// <returns></returns>
[HttpPost]
public async Task<bool> Audit(PurchaseAndSaleAuditUpInput input)
{
return await Audit<WmsPurchaseH>(input);
}
/// <summary>
/// mes 检验完后通知wms采购 回调接口
/// </summary>
/// <param name="input">
/// </param>
/// <returns></returns>
[HttpPost]
public async Task<dynamic> MesCheckdPurchaseCallback(MesCheckdCallbackUpinput input)
{
return await UpdateChackStatus<WmsInstockH>(input);
}
[HttpPost]
public async Task BarCodePrint(BarCodeInput input)
{
if (input == null)
{
throw new AppFriendlyException(nameof(input), 500);
}
List<string> barcodes = new();
try
{
await _db.Ado.BeginTranAsync();
if (_db.Queryable<WmsTempCode>().Where(it => input.BillId == it.require_id).Any())
{
throw new AppFriendlyException("条码已生成", 500);
};
WmsPurchaseD WmsPurchaseD = await _db.Queryable<WmsPurchaseD>().Where(it => input.BillId == it.id).FirstAsync();
List<WmsTempCode> wmsTempCodes = new();
decimal? minPacking = (await _db.Queryable<BasMaterial>().FirstAsync(it => it.id == WmsPurchaseD.material_id))?.minpacking;
int codeNum = 0;
if (minPacking.HasValue && minPacking.Value > 0)
{
int mod = (int)(WmsPurchaseD.purchase_arriveqty % minPacking.Value);
codeNum = (int)(mod > 0 ? (WmsPurchaseD.purchase_arriveqty / minPacking.Value) + 1 : WmsPurchaseD.purchase_arriveqty / minPacking.Value);
for (int j = 0; j < codeNum; j++)
{
int index = j + 1;
//string code = $"{WmsPurchaseD.material_code}-{WmsPurchaseD.code_batch}-{index.ToString().PadLeft(4, '0')}";
// 变更加流水号
string watercode = await _billRullService.GetBillNumber(WmsWareHouseConst.WMS_PURCHASE_MAT_ENCODE);
string code = $"CGSH{watercode}";
WmsTempCode barCode = new()
{
material_id = WmsPurchaseD.material_id,
material_code = WmsPurchaseD.material_code,
barcode = code,
code_batch = WmsPurchaseD.code_batch,
material_specification = WmsPurchaseD.material_specification,
container_no = WmsPurchaseD.container_no,
codeqty = minPacking,
unit_id = WmsPurchaseD.unit_id,
is_lock = 0,
is_end = 0,
require_id = WmsPurchaseD.id,
require_code = WmsPurchaseD.id,
create_id = _userManager.UserId,
create_time = DateTime.Now
};
if (index == codeNum)
barCode.codeqty = mod == 0 ? minPacking : mod;
wmsTempCodes.Add(barCode);
}
await _db.Insertable(wmsTempCodes).ExecuteCommandAsync();
}
await _db.Ado.CommitTranAsync();
barcodes.AddRange(wmsTempCodes.Select(p => p.barcode).ToList());
if (barcodes?.Count > 0)
{
var ip= _db.Queryable<BasFactoryConfig>().Where(p=>p.key== "printerip").FirstAsync().Result.value;
base.BarCodePrint(barcodes, 1, ip);
}
}
catch (Exception)
{
await _db.Ado.RollbackTranAsync();
throw;
}
}
}
}