diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Consts/WmsWareHouseConst.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Consts/WmsWareHouseConst.cs index 53b76564..2528b66c 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Consts/WmsWareHouseConst.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Consts/WmsWareHouseConst.cs @@ -10,6 +10,8 @@ namespace Tnb.WarehouseMgr.Entities.Consts { public class WmsWareHouseConst { + public const string WAREHOUSE_ZC_ID = "2"; + /// /// 出入库单据状态TypeID /// @@ -93,7 +95,7 @@ namespace Tnb.WarehouseMgr.Entities.Consts /// /// 单据状态-已呼叫 /// - public const string BILLSTATUS_CALLED_ID = "25065138925589"; + public const string BILLSTATUS_CALLED_ID = "26169430480933"; /// /// 单据状态-待配送 /// diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsKittingoutD.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsKittingoutD.cs index e88b2244..bc66a4e0 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsKittingoutD.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsKittingoutD.cs @@ -24,10 +24,6 @@ public partial class WmsKittingoutD : BaseEntity /// public string bill_id { get; set; } = string.Empty; - /// - /// 行号 - /// - public int bill_line { get; set; } /// /// 物品ID @@ -67,7 +63,7 @@ public partial class WmsKittingoutD : BaseEntity /// /// 实际数量(件数) /// - public decimal real_qty { get; set; } + public decimal qty { get; set; } /// /// 实际箱数 diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsSetsortingD.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsSetsortingD.cs index 03a02914..dc728335 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsSetsortingD.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsSetsortingD.cs @@ -24,11 +24,6 @@ public partial class WmsSetsortingD : BaseEntity /// public string bill_id { get; set; } = string.Empty; - /// - /// 行号 - /// - public int bill_line { get; set; } - /// /// 物品ID /// diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsSetSortingService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsSetSortingService.cs index 3a9df542..eecf8edf 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsSetSortingService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsSetSortingService.cs @@ -55,96 +55,124 @@ namespace Tnb.WarehouseMgr .ToListAsync(); var items = await _db.Queryable().Where(it => it.status == WmsWareHouseConst.BILLSTATUS_ON_ID).ToListAsync(); var onFlag = items?.Count > 0; - if (setSortings?.Count > 0 && !onFlag) + try { - var singleSorting = setSortings[^setSortings.Count]; - var setSortingDList = await _db.Queryable().Where(it => it.bill_id == singleSorting.id).ToListAsync(); - if (setSortingDList?.Count > 0) + await _db.Ado.BeginTranAsync(); + + if (setSortings?.Count > 0 && !onFlag) { - List carryMats = new(); - List carryCodes = new(); - List carryIds = new(); - foreach (var os in setSortingDList) + var singleSorting = setSortings[^setSortings.Count]; + var setSortingDList = await _db.Queryable().Where(it => it.bill_id == singleSorting.id).ToListAsync(); + if (setSortingDList?.Count > 0) { - var carryCodesPart = await _db.Queryable().InnerJoin((a, b) => a.id == b.carry_id) - .Where((a, b) => b.material_id == os.material_id && a.is_lock == 0 && !string.IsNullOrEmpty(a.location_id) && a.status == (int)EnumCarryStatus.占用) - .WhereIF(!string.IsNullOrEmpty(os.code_batch), (a, b) => b.code_batch == os.code_batch) - .Select() - .ToListAsync(); - if (carryCodesPart?.Count > 0) + List carryMats = new(); + List carryCodes = new(); + List carryIds = new(); + foreach (var os in setSortingDList) { - carryCodes.AddRange(carryCodesPart); - var codeQty = carryCodes.Sum(x => x.codeqty); - if (codeQty < os.pr_qty) + var carryCodesPart = await _db.Queryable().InnerJoin((a, b) => a.id == b.carry_id).InnerJoin((a, b, c) => a.location_id == c.id) + .Where((a, b, c) => b.material_id == os.material_id && a.is_lock == 0 && !string.IsNullOrEmpty(a.location_id) && a.status == (int)EnumCarryStatus.占用 && c.wh_id == os.warehouse_id) + .WhereIF(!string.IsNullOrEmpty(os.code_batch), (a, b) => b.code_batch == os.code_batch) + .Select() + .ToListAsync(); + if (carryCodesPart?.Count > 0) { - throw new AppFriendlyException($"需要出库[{os.pr_qty}],实际库存{codeQty},数量不足", 500); + carryCodes.AddRange(carryCodesPart); + var codeQty = carryCodes.Sum(x => x.codeqty); + if (codeQty < os.pr_qty) + { + throw new AppFriendlyException($"需要出库[{os.pr_qty}],实际库存{codeQty},数量不足", 500); + } + List curCarryCodes = new(); + for (int i = 0; i < carryCodesPart.Count; i++) + { + if (os.pr_qty > carryCodesPart[i].codeqty) + { + os.pr_qty -= carryCodesPart[i].codeqty; + curCarryCodes.Add(carryCodesPart[i]); + } + else if (os.pr_qty <= carryCodesPart[i].codeqty) + { + carryCodesPart[i].codeqty = os.pr_qty; + curCarryCodes.Add(carryCodesPart[i]); + break; + } + } + var partCarryMats = curCarryCodes.Adapt>(); + for (int i = 0; i < partCarryMats.Count; i++) + { + partCarryMats[i].need_qty = carryCodesPart[i].codeqty; + } + + carryMats.AddRange(partCarryMats); } - var partCarryMats = carryCodesPart.Adapt>(); - for (int i = 0; i < partCarryMats.Count; i++) + } + if (carryMats.Count > 0) + { + carryMats.ForEach(x => x.id = SnowflakeIdHelper.NextId()); + carryMats = carryMats.OrderBy(o => o.create_time).GroupBy(g => new { g.carry_id, g.material_id, g.code_batch }) + .Select(x => + { + WmsCarryMat? carryMat = x.FirstOrDefault()!; + carryMat.need_qty = x.Sum(d => d.need_qty); + return carryMat; + }) + .ToList(); + await _db.Insertable(carryMats).ExecuteCommandAsync(); + var dic = carryMats.DistinctBy(x => x.carry_id).ToDictionary(x => x.carry_id, x => x.need_qty); + + carryIds = carryMats.Select(x => x.carry_id).Distinct().ToList(); + await _db.Updateable().SetColumns(it => new WmsCarryH { out_status = ((int)EnumOutStatus.全部出).ToString(), collocation_scheme_id = singleSorting.collocation_scheme_id, collocation_scheme_code = singleSorting.collocation_scheme_code }).Where(it => carryIds.Contains(it.id)).ExecuteCommandAsync(); + //天益项目不需要 + //await _db.Updateable().SetColumns(it => new WmsCarryH { out_status = ((int)EnumOutStatus.分拣出).ToString() }).Where(it => sortingOutIds.Contains(it.id)).ExecuteCommandAsync(); + } + var carrys = await _db.Queryable().Where(it => carryIds.Contains(it.id)).ToArrayAsync(); + if (carrys?.Length > 0) + { + List preTasks = new(); + List locIds = new(); + string firstLocationId = "27010980724501", secondLocationId = "27010987857941"; + if (carrys.Length > 6) { - partCarryMats[i].need_qty = carryCodesPart[i].codeqty; + var leftCarrys = carrys[..6]; + var rightCarrys = carrys[6..]; + await _genPreTask(leftCarrys, locIds, firstLocationId, singleSorting.id, singleSorting.bill_code, preTasks); + await _genPreTask(rightCarrys, locIds, secondLocationId, singleSorting.id, singleSorting.bill_code, preTasks); } - - carryMats.AddRange(partCarryMats); - } - } - if (carryMats.Count > 0) - { - carryMats.ForEach(x => x.id = SnowflakeIdHelper.NextId()); - carryMats = carryMats.OrderBy(o => o.create_time).GroupBy(g => new { g.carry_id, g.material_id, g.code_batch }) - .Select(x => - { - WmsCarryMat? carryMat = x.FirstOrDefault()!; - carryMat.need_qty = x.Sum(d => d.need_qty); - return carryMat; - }) - .ToList(); - await _db.Insertable(carryMats).ExecuteCommandAsync(); - var dic = carryMats.DistinctBy(x => x.carry_id).ToDictionary(x => x.carry_id, x => x.need_qty); - - carryIds = carryMats.Select(x => x.carry_id).Distinct().ToList(); - await _db.Updateable().SetColumns(it => new WmsCarryH { out_status = ((int)EnumOutStatus.全部出).ToString() }).Where(it => carryIds.Contains(it.id)).ExecuteCommandAsync(); - //天益项目不需要 - //await _db.Updateable().SetColumns(it => new WmsCarryH { out_status = ((int)EnumOutStatus.分拣出).ToString() }).Where(it => sortingOutIds.Contains(it.id)).ExecuteCommandAsync(); - } - var carrys = await _db.Queryable().Where(it => carryIds.Contains(it.id)).ToArrayAsync(); - if (carrys?.Length > 0) - { - List preTasks = new(); - List locIds = new(); - string firstLocationId = "27010980724501", secondLocationId = "27010987857941"; - if (carrys.Length > 6) - { - var leftCarrys = carrys[..6]; - var rightCarrys = carrys[6..]; - await _genPreTask(leftCarrys, locIds, firstLocationId, singleSorting.id, singleSorting.bill_code, preTasks); - await _genPreTask(rightCarrys, locIds, secondLocationId, singleSorting.id, singleSorting.bill_code, preTasks); - } - else - { - await _genPreTask(carrys, locIds, firstLocationId, singleSorting.id, singleSorting.bill_code, preTasks); - } - List pretaskCodes = new(); - foreach (var pt in preTasks) - { - var partCodes = carryCodes.FindAll(x => x.carry_id == pt.carry_id).Distinct().ToList(); - var curPreTaskCodes = partCodes.Adapt>(); - curPreTaskCodes.ForEach(x => + else { - x.id = SnowflakeIdHelper.NextId(); - x.bill_id = pt.id; - x.create_time = DateTime.Now; - }); - pretaskCodes.AddRange(curPreTaskCodes); + await _genPreTask(carrys, locIds, firstLocationId, singleSorting.id, singleSorting.bill_code, preTasks); + } + List pretaskCodes = new(); + foreach (var pt in preTasks) + { + var partCodes = carryCodes.FindAll(x => x.carry_id == pt.carry_id).Distinct().ToList(); + var curPreTaskCodes = partCodes.Adapt>(); + curPreTaskCodes.ForEach(x => + { + x.id = SnowflakeIdHelper.NextId(); + x.bill_id = pt.id; + x.create_time = DateTime.Now; + }); + pretaskCodes.AddRange(curPreTaskCodes); + } + await _wareHouseService.GenPreTask(preTasks, pretaskCodes); + await _db.Updateable().SetColumns(it => new WmsSetsortingH { status = WmsWareHouseConst.BILLSTATUS_ON_ID }).ExecuteCommandAsync(); + GenPreTaskUpInput genPreTaskAfterUpInput = new(); + genPreTaskAfterUpInput.CarryIds = preTasks.Select(x => x.carry_id).ToList(); + genPreTaskAfterUpInput.LocationIds = new HashSet(locIds).ToList(); + await _wareHouseService.GenInStockTaskHandleAfter(genPreTaskAfterUpInput, it => new WmsCarryH { is_lock = 1, carry_status = ((int)EnumCarryStatus.齐套分拣).ToString() }, it => new BasLocation { is_use = (int)EnumCarryStatus.齐套分拣, is_lock = 1 }); } - var isOk = await _wareHouseService.GenPreTask(preTasks, pretaskCodes); - GenPreTaskUpInput genPreTaskAfterUpInput = new(); - genPreTaskAfterUpInput.CarryIds = preTasks.Select(x => x.carry_id).ToList(); - genPreTaskAfterUpInput.LocationIds = new HashSet(locIds).ToList(); - await _wareHouseService.GenInStockTaskHandleAfter(genPreTaskAfterUpInput, it => new WmsCarryH { is_lock = 1, carry_status = ((int)EnumCarryStatus.齐套分拣).ToString() }, it => new BasLocation { is_use = (int)EnumCarryStatus.齐套分拣 }); - } + } } + + await _db.Ado.CommitTranAsync(); + } + catch (Exception ex) + { + await _db.Ado.RollbackTranAsync(); + throw; } } @@ -179,7 +207,7 @@ namespace Tnb.WarehouseMgr preTask.end_floor = ePoint?.floor.ToString(); preTask.bill_code = _billRullService.GetBillNumber(WmsWareHouseConst.WMS_PRETASK_H_ENCODE).GetAwaiter().GetResult(); preTask.status = WmsWareHouseConst.PRETASK_BILL_STATUS_DXF_ID; - preTask.biz_type = WmsWareHouseConst.BIZTYPE_WMSOUTSTOCK_ID; + preTask.biz_type = WmsWareHouseConst.BIZTYPE_WMSSETSORTING_ID; preTask.task_type = WmsWareHouseConst.WMS_PRETASK_OUTSTOCK_TYPE_ID; preTask.carry_id = carry.id; preTask.carry_code = carry.carry_code; @@ -211,8 +239,21 @@ namespace Tnb.WarehouseMgr { await _db.Ado.BeginTranAsync(); - await _db.Updateable().SetColumns(it => new WmsCarryH { carry_status = ((int)EnumCarryStatus.齐套).ToString(), location_id = null, location_code = null }).ExecuteCommandAsync(); - await _db.Updateable().SetColumns(it => new BasLocation { is_use = (int)EnumCarryStatus.空闲 }).ExecuteCommandAsync(); + var carryId = input.carryIds[^input.carryIds.Count]; + var carry = await _db.Queryable().SingleAsync(it => it.id == carryId); + if (carry != null) + { + if (carry.location_id.IsNotEmptyOrNull()) + { + await _db.Updateable().SetColumns(it => new BasLocation { is_use = (int)EnumCarryStatus.空闲 }).Where(it => it.id == carry.location_id).ExecuteCommandAsync(); + } + carry.out_status = ((int)EnumOutStatus.正常).ToString(); + carry.carry_status = ((int)EnumCarryStatus.齐套).ToString(); + carry.location_id = null; + carry.location_code = null; + await _db.Updateable(carry).UpdateColumns(it => new { it.out_status,it.carry_status, it.location_id, it.location_code }).ExecuteCommandAsync(); + await _db.Deleteable().Where(it => it.carry_id == carryId).ExecuteCommandAsync(); + } await _db.Ado.CommitTranAsync(); } diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmskittingOutService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmskittingOutService.cs index fb6afb1e..2cadd38c 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmskittingOutService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmskittingOutService.cs @@ -83,6 +83,7 @@ namespace Tnb.WarehouseMgr if (!isCalled) { var setSortingH = ko.Adapt(); + setSortingH.warehouse_id = WmsWareHouseConst.WAREHOUSE_ZC_ID; setSortingH.id = SnowflakeIdHelper.NextId(); setSortingH.kittingout_id = ko.id; setSortingH.seq = ko.seq; @@ -91,11 +92,13 @@ namespace Tnb.WarehouseMgr setSortingH.create_time = DateTime.Now; await _db.Insertable(setSortingH).ExecuteCommandAsync(); - var kittingOutDetails = await _db.Queryable().Where(it => it.bill_id == setSortingH.id).ToListAsync(); + var kittingOutDetails = await _db.Queryable().Where(it => it.bill_id == ko.id).ToListAsync(); var setSortDetails = kittingOutDetails.Adapt>(); setSortDetails.ForEach(x => { x.id = SnowflakeIdHelper.NextId(); + x.bill_id = setSortingH.id; + x.warehouse_id = setSortingH.warehouse_id; x.org_id = _userManager.User.OrganizeId; x.create_id = _userManager.UserId; x.create_time = DateTime.Now;