diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Consts/WmsWareHouseConst.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Consts/WmsWareHouseConst.cs index 83daa894..53b76564 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Consts/WmsWareHouseConst.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Consts/WmsWareHouseConst.cs @@ -23,6 +23,10 @@ namespace Tnb.WarehouseMgr.Entities.Consts /// public const string WMS_PRETASK_H_ENCODE = "PreTaskGen"; /// + /// 载具移入生成Encode + /// + public const string WMS_CARRYMOINSTK_ENCODE = "CarryMoInStk"; + /// /// 任务执行ENCODE /// public const string WMS_TASK_EXECUTE_ENCODE = "WmsTaskRequest"; diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs index ffae366f..812656cc 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs @@ -270,7 +270,7 @@ namespace Tnb.WarehouseMgr } //获取所有未下发的预任务申请 - var preTasks = await _db.Queryable().InnerJoin((a, b) => a.startlocation_id == b.location_id) + var preTasks = await _db.Queryable().InnerJoin((a, b) => a.startlocation_id == b.location_id && a.carry_id == b.id) .InnerJoin((a, b, c) => a.area_id == c.id) .Where(a => a.status == WmsWareHouseConst.PRETASK_BILL_STATUS_DXF_ID) .OrderBy(a => new { priority = SqlFunc.Desc(a.priority), a.bill_code }) @@ -279,15 +279,20 @@ namespace Tnb.WarehouseMgr move_num = c.move_num }, true) .ToListAsync(); + var ids = preTasks.Select(x => x.id).Distinct().ToList(); + var preTaskCodes = await _db.Queryable().Where(it => ids.Contains(it.bill_id)).ToListAsync(); if (preTasks.Count > 0) { //根据预任务管理区分组,获取到所有分组后的预任务,遍历每个预任务 是否为任务链,通过管理区ID var preTaskGroups = preTasks.GroupBy(g => g.area_code).ToList(); List disTasks = new(); + List distaskCodes = new(); foreach (var itGroup in preTaskGroups) { var moveNum = itGroup.First().move_num; var items = itGroup.Adapt>(); + + items.ForEach(x => SnowflakeIdHelper.NextId()); items.ForEach(x => { x.status = WmsWareHouseConst.TASK_BILL_STATUS_DZX_ID; @@ -325,14 +330,34 @@ namespace Tnb.WarehouseMgr await _taskChainAttrHandle(items, areaPreTasks, moveNum); } } + if (preTaskCodes?.Count > 0) + { + foreach (var disTask in items) + { + var curPreTaskCodes = preTaskCodes.FindAll(x => x.bill_id == disTask.pretask_id); + var curDisTaskCodes = curPreTaskCodes.Adapt>(); + curPreTaskCodes.ForEach(x => + { + x.id = SnowflakeIdHelper.NextId(); + x.bill_id = disTask.id; + x.create_time = DateTime.Now; + }); + distaskCodes.AddRange(curDisTaskCodes); + } + } + disTasks.AddRange(items); } try { await _db.Ado.BeginTranAsync(); - disTasks.ForEach(x => x.id = SnowflakeIdHelper.NextId()); + //disTasks.ForEach(x => x.id = SnowflakeIdHelper.NextId()); var row = await _db.Insertable(disTasks).ExecuteCommandAsync(); + if (preTaskCodes?.Count > 0) + { + row = await _db.Insertable(distaskCodes).ExecuteCommandAsync(); + } if (row > 0) { var preTaskIds = preTasks.Select(x => x.id).ToList(); @@ -462,7 +487,7 @@ namespace Tnb.WarehouseMgr { carryStatus = ((int)EnumCarryStatus.空闲).ToString(); } - var cStatus =carryStatus.ParseToInt(); + var cStatus = carryStatus.ParseToInt(); await _db.Updateable().SetColumns(it => new BasLocation { is_use = cStatus, is_lock = 0 }).Where(it => it.id == multis[i].endlocation_id).ExecuteCommandAsync(); } //更新业务主表的单据状态 diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsInStockService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsInStockService.cs index d26a486a..ff57cc39 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsInStockService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsInStockService.cs @@ -12,7 +12,9 @@ using NPOI.SS.Formula.Functions; using SqlSugar; using Tnb.BasicData.Entities; using Tnb.WarehouseMgr.Entities; +using Tnb.WarehouseMgr.Entities.Attributes; using Tnb.WarehouseMgr.Entities.Consts; +using Tnb.WarehouseMgr.Entities.Dto; using Tnb.WarehouseMgr.Entities.Dto.Inputs; using Tnb.WarehouseMgr.Interfaces; @@ -21,8 +23,10 @@ namespace Tnb.WarehouseMgr /// /// 入库申请服务 /// + [ServiceModule(BizTypeId)] public class WmsInStockService : BaseWareHouseService, IWmsInStockService { + private const string BizTypeId = "26191496816421"; private readonly ISqlSugarClient _db; private readonly IDictionaryDataService _dictionaryDataService; private readonly IUserManager _userManager; @@ -155,5 +159,56 @@ namespace Tnb.WarehouseMgr return barCode; } + + public override async Task ModifyAsync(WareHouseUpInput input) + { + if (input == null) throw new ArgumentNullException("input"); + //更具distaskCode的barcode 更新 instockcode 的 is_end 为 1 + try + { + await _db.Ado.BeginTranAsync(); + + if (input.distaskCodes?.Count > 0) + { + var barCodes = input.distaskCodes.Select(x => x.barcode); + await _db.Updateable().SetColumns(it => new WmsInstockCode { is_end = 1 }).Where(it => barCodes.Contains(it.barcode)).ExecuteCommandAsync(); + var instockCodes = await _db.Queryable().Where(it => barCodes.Contains(it.barcode)).Select(it => new + { + id = it.bill_d_id, + barcode_qty = it.codeqty, + }).ToListAsync(); + var dic = instockCodes.GroupBy(g => g.id).ToDictionary(x => x.Key, x => x.Select(d => d.barcode_qty).ToList()); + var ids = instockCodes.Select(it => it.id).ToList(); + var instockDetails = await _db.Queryable().Where(it => ids.Contains(it.id)).ToListAsync(); + + foreach (var item in instockDetails) + { + if (dic.ContainsKey(item.id)) + { + item.qty += dic[item.id].Sum(x => x); + if (item.qty >= item.pr_qty) + { + item.line_status = WmsWareHouseConst.BILLSTATUS_COMPLETE_ID; + } + } + } + await _db.Updateable(instockDetails).ExecuteCommandAsync(); + var allInstockDetails = await _db.Queryable().Where(it => it.bill_id == input.requireId).ToListAsync(); + if (allInstockDetails.All(x => x.line_status == WmsWareHouseConst.BILLSTATUS_COMPLETE_ID)) + { + await _db.Updateable().SetColumns(it => new WmsInstockH { status = WmsWareHouseConst.BILLSTATUS_COMPLETE_ID }).Where(it => it.id == input.requireId).ExecuteCommandAsync(); + //如果是自动单据,需要回更上层系统 + } + } + + await _db.Ado.CommitTranAsync(); + } + catch (Exception) + { + await _db.Ado.RollbackTranAsync(); + throw; + } + } + } } diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsOutStockService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsOutStockService.cs index d7ddf2b2..1641dc39 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsOutStockService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsOutStockService.cs @@ -286,17 +286,21 @@ namespace Tnb.WarehouseMgr try { + + await _db.Ado.BeginTranAsync(); + var carryId = input.carryIds[^input.carryIds.Count]; var carry = await _db.Queryable().SingleAsync(it => it.id == carryId); if (carry != null) { + var otds = await _db.Queryable().Where(it => it.bill_id == input.requireId).ToListAsync(); var outStatus = carry.out_status.ToEnum(); if (outStatus == EnumOutStatus.全部出) { //当前载具对应的所有条码插入 var carryCodes = await _db.Queryable().Where(it => it.carry_id == carryId).ToListAsync(); var outStockCodes = carryCodes.Adapt>(); - var otds = await _db.Queryable().Where(it => it.bill_id == input.requireId).ToListAsync(); + outStockCodes.ForEach(x => { var billDId = otds?.Find(xx => xx.material_id == x.material_id && xx.code_batch == x.code_batch)?.id; @@ -340,7 +344,20 @@ namespace Tnb.WarehouseMgr if (input.distaskCodes?.Count > 0) { var osCodes = input.distaskCodes.Adapt>(); - osCodes.ForEach(x => x.id = SnowflakeIdHelper.NextId()); + osCodes.ForEach(x => + { + var billDId = otds?.Find(xx => xx.material_id == x.material_id && xx.code_batch == x.code_batch)?.id; + if (billDId.IsNullOrEmpty()) + { + billDId = otds?.Find(xx => xx.material_id == x.material_id)?.id; + } + x.id = SnowflakeIdHelper.NextId(); + x.bill_id = input.requireId; + x.bill_d_id = billDId; + x.org_id = _userManager.User.OrganizeId; + x.create_id = _userManager.UserId; + x.create_time = DateTime.Now; + }); await _db.Insertable(osCodes).ExecuteCommandAsync(); var carryCodes = await _db.Queryable().Where(it => input.carryIds.Contains(it.carry_id)).ToListAsync(); @@ -386,17 +403,19 @@ namespace Tnb.WarehouseMgr [nameof(WmsPointH.location_id)] = outStockH.location_id, [nameof(WmsCarryD.carry_id)] = input.carryIds.First(), [nameof(WmsHandleH.biz_type)] = input.bizTypeId, - [nameof(WmsHandleH.bill_code)] = outStockH.bill_code, + [nameof(WmsHandleH.bill_code)] = _billRullService.GetBillNumber(WmsWareHouseConst.WMS_CARRYMOINSTK_ENCODE).GetAwaiter().GetResult(), }; await _wmsCarryMoveInStockService.CarryMoveIn(visulDevInput); } } + + await _db.Ado.CommitTranAsync(); } } catch (Exception ex) { - + await _db.Ado.RollbackTranAsync(); throw; } } diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsPDAInStockService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsPDAInStockService.cs index 8a5b86ab..59d85c04 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsPDAInStockService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsPDAInStockService.cs @@ -150,6 +150,7 @@ namespace Tnb.WarehouseMgr } } } + //生成预任务,同时如果包含条码信息同时插入条码记录 var isOk = await _wareHouseService.GenPreTask(preTasks, pretaskCodes); if (isOk)