From 36746596927952a6b860129a62eec9059bf083a7 Mon Sep 17 00:00:00 2001 From: Rodney Chen <rodney.chen@hotmail.com> Date: 星期六, 26 四月 2025 18:06:27 +0800 Subject: [PATCH] 优化了备料逻辑 --- Tiger.Business.WMS/Transaction/Old/OutTransfer.cs | 78 +++++++++++++++++++-------------------- 1 files changed, 38 insertions(+), 40 deletions(-) diff --git a/Tiger.Business.WMS/Transaction/Old/OutTransfer.cs b/Tiger.Business.WMS/Transaction/Old/OutTransfer.cs index dbd6da8..e7dd561 100644 --- a/Tiger.Business.WMS/Transaction/Old/OutTransfer.cs +++ b/Tiger.Business.WMS/Transaction/Old/OutTransfer.cs @@ -61,9 +61,9 @@ var action = new ApiAction<ProdReqOutput>(); try { - req = await Biz.Db.Queryable<BIZ_WMS_TRANSFER>().Where(x => x.BILLCODE == input.ReqNo).Includes(q => q.DtlsWithGhost, d => d.ItemInfo).IncludesAllFirstLayer().FirstAsync(); + req = await Biz.Db.Queryable<BIZ_WMS_TRANSFER>().Where(x => x.ORDER_NO == input.ReqNo).Includes(q => q.Details, d => d.ItemInfo).IncludesAllFirstLayer().FirstAsync(); //楠岃瘉鏄庣粏鏄惁姝g‘ - if (!req.Dtls.Any()) + if (!req.Details.Any()) { action.IsSuccessed = false; action.LocaleMsg = new("WMS.ProdMReq.SelectOrder.DtlsException", input.ReqNo); @@ -71,9 +71,9 @@ } //濡傛灉鏄墜宸ュ垱寤虹殑璋冩嫧鍗� - isManual = req.STATUS == BIZ_WMS_TRANSFER.STATUSs.MANUAL.GetValue(); + isManual = req.STATUS == BIZ_WMS_TRANSFER.STATUSs.Imported.GetValue(); - Biz.Db.Deleteable<WMS_ITEM_POOL>().Where(q => q.TRANS_CODE == req.BILLCODE).ExecuteCommand(); + Biz.Db.Deleteable<WMS_ITEM_POOL>().Where(q => q.TRANS_CODE == req.ORDER_NO).ExecuteCommand(); //濡傛灉涓婁竴娆℃帹鑽愭湁鏁版嵁锛屽垯鍏堢伃鎺変寒鐨勭伅 if (Suggests.Any()) { @@ -82,8 +82,8 @@ var begin = DateTime.Now; var ElapsedTime = 0.0; - var sumDtls = req.Dtls.Where(q => q.LINESTATUS != BIZ_WMS_TRANSFER.STATUSs.COMPLETE.GetValue()) - .GroupBy(x => new { x.ITEM_CODE }).Select(x => new { ItemCode = x.Key.ITEM_CODE.ToString(), WarehouseCode = x.Max(t => t.OUTWAREHOUSECODE), actQty = x.Sum(t => t.PRQTY - t.OUTQTY), lockObj = new object() }); + var sumDtls = req.Details.Where(q => q.STATUS != BIZ_WMS_TRANSFER.STATUSs.Finished.GetValue()) + .GroupBy(x => new { x.ITEM_CODE }).Select(x => new { ItemCode = x.Key.ITEM_CODE.ToString(), WarehouseCode = x.Max(t => t.OUT_WH_CODE), actQty = x.Sum(t => t.QTY_REQ - t.QTY_OUT), lockObj = new object() }); var dic = sumDtls.ToDictionary(k => k, v => new Result<List<SuggestItem>>()); foreach (var item in dic) { @@ -92,7 +92,7 @@ { lock (item.Key.lockObj) { - dic[item.Key] = WMS_ITEM_Biz.WmsItem.Suggest(req.BILLCODE, item.Key.ItemCode, item.Key.WarehouseCode, null, null, null, input.AuthOption, item.Key.actQty); + dic[item.Key] = WMS_ITEM_Biz.WmsItem.Suggest(req.ORDER_NO, item.Key.ItemCode, item.Key.WarehouseCode, null, null, null, input.AuthOption, item.Key.actQty); } }); } @@ -120,7 +120,7 @@ var actQty = sumDtls.ToList().Where(x => x.ItemCode.Trim() == inv.Item.ITEM_CODE.Trim()).Select(x => x.actQty).FirstOrDefault(); if (actQty > 0) { - inv.poolItem = inv.Item.GetPoolItem(input.AuthOption.OrgCode, nameof(req), req.BILLCODE, null, actQty, false); + inv.poolItem = inv.Item.GetPoolItem(input.AuthOption.OrgCode, nameof(req), req.ORDER_NO, null, actQty, false); } else { @@ -169,7 +169,7 @@ await Share.Shelf.LightMulti(TransID, light.Color, locs); action.Data = new ProdReqOutput() { - ReqNo = req.BILLCODE, + ReqNo = req.ORDER_NO, ReqType = light.ReqType.GetValue() }; action.LocaleMsg = Biz.L("浜伅鎴愬姛锛屼寒鐏鑹瞇{0}]", light.Color.GetDesc()); @@ -206,11 +206,11 @@ var action = new ApiAction(); try { - var dtls = req.Dtls.GroupBy(x => new { x.BILLLINE, x.ITEM_CODE, x.ItemInfo.ITEM_NAME }).Select(x => new ProdReqDtl() { BillLine = x.Key.BILLLINE.ToInt32(), ItemCode = x.Key.ITEM_CODE, ItemName = x.Key.ITEM_NAME, Status = "", Items = new List<ProdReqDtlItems>() }).ToList(); + var dtls = req.Details.GroupBy(x => new { x.ORDER_LINE, x.ITEM_CODE, x.ItemInfo.ITEM_NAME }).Select(x => new ProdReqDtl() { BillLine = x.Key.ORDER_LINE.ToInt32(), ItemCode = x.Key.ITEM_CODE, ItemName = x.Key.ITEM_NAME, Status = "", Items = new List<ProdReqDtlItems>() }).ToList(); foreach (var d in dtls) { d.Items = Suggests.Where(x => x.Item.ITEM_CODE == d.ItemCode).Select(x => new ProdReqDtlItems { WHCode = x.Warehouse.WH_CODE, LocationCode = x.Location.LOCATION_CODE, SN = x.Item.SN, QTY = x.Item.QTY }).ToList(); - d.Status = $"{(double)req.Dtls.Where(x => x.ITEM_CODE == d.ItemCode).Sum(x => x.OUTQTY)} / {(double)req.Dtls.Where(x => x.ITEM_CODE == d.ItemCode).Sum(x => x.PRQTY)} {Suggests.FirstOrDefault()?.Item?.UNIT} (杩橀渶{d.Items.Count}涓�)"; + d.Status = $"{(double)req.Details.Where(x => x.ITEM_CODE == d.ItemCode).Sum(x => x.QTY_OUT)} / {(double)req.Details.Where(x => x.ITEM_CODE == d.ItemCode).Sum(x => x.QTY_REQ)} {Suggests.FirstOrDefault()?.Item?.UNIT} (杩橀渶{d.Items.Count}涓�)"; } action.Data = itemcode.IsNullOrEmpty() ? dtls.OrderBy(q => q.BillLine) : dtls.Where(x => x.ItemCode == itemcode).FirstOrDefault()?.Items.OrderBy(q => q.SN); } @@ -230,7 +230,7 @@ var action = new ApiAction(); try { - action.Data = $"鐗╂枡{itemcode}锛氬凡涓嬫灦[{(double)req.Dtls.Where(x => x.ITEM_CODE == itemcode).Sum(x => x.OUTQTY)}]锛屽叡{(double)req.Dtls.Where(x => x.ITEM_CODE == itemcode).Sum(x => x.PRQTY)} {Suggests.FirstOrDefault()?.Item?.UNIT}"; + action.Data = $"鐗╂枡{itemcode}锛氬凡涓嬫灦[{(double)req.Details.Where(x => x.ITEM_CODE == itemcode).Sum(x => x.QTY_OUT)}]锛屽叡{(double)req.Details.Where(x => x.ITEM_CODE == itemcode).Sum(x => x.QTY_REQ)} {Suggests.FirstOrDefault()?.Item?.UNIT}"; } catch (Exception ex) { @@ -318,10 +318,10 @@ } //浠撳簱鍗℃帶 - if (!req.Dtls.Any(q => q.ITEM_CODE == CurInv.ItemInfo.ITEM_CODE && q.OUTWAREHOUSECODE == CurInv.Warehouse.WH_CODE)) + if (!req.Details.Any(q => q.ITEM_CODE == CurInv.ItemInfo.ITEM_CODE && q.OUT_WH_CODE == CurInv.Warehouse.WH_CODE)) { action.IsSuccessed = false; - action.LocaleMsg = Biz.L($"鏉$爜[{CurInv.Barcode.SN}]鐨勬枡鍙锋垨鑰呬粨搴撹窡鍗曟嵁[{req.BILLCODE}]涓婄殑涓嶄竴鑷�"); + action.LocaleMsg = Biz.L($"鏉$爜[{CurInv.Barcode.SN}]鐨勬枡鍙锋垨鑰呬粨搴撹窡鍗曟嵁[{req.ORDER_NO}]涓婄殑涓嶄竴鑷�"); return action; } @@ -382,8 +382,8 @@ //2.鏄惁瓒呭彂 isExceed = false; - req = await Biz.Db.Queryable<BIZ_WMS_TRANSFER>().Where(x => x.BILLCODE == req.BILLCODE).Includes(q => q.DtlsWithGhost, d => d.ItemInfo).IncludesAllFirstLayer().FirstAsync(); - dtls = req.Dtls.Where(x => x.ITEM_CODE == CurInv.ItemInfo.ITEM_CODE).ToList(); + req = await Biz.Db.Queryable<BIZ_WMS_TRANSFER>().Where(x => x.ORDER_NO == req.ORDER_NO).Includes(q => q.Details, d => d.ItemInfo).IncludesAllFirstLayer().FirstAsync(); + dtls = req.Details.Where(x => x.ITEM_CODE == CurInv.ItemInfo.ITEM_CODE).ToList(); if (dtls.IsNullOrEmpty()) { action.IsSuccessed = false; @@ -392,13 +392,13 @@ } //濡傛灉鐘舵�佸畬鎴� - if (dtls.Where(x => x.LINESTATUS == BIZ_WMS_TRANSFER.STATUSs.COMPLETE.GetValue()).Count() == dtls.Count) + if (dtls.Where(x => x.STATUS == BIZ_WMS_TRANSFER.STATUSs.Finished.GetValue()).Count() == dtls.Count) { action.IsSuccessed = false; action.LocaleMsg = Biz.L("鏂欏凡缁忓彂瀹�"); return action; } - var actQty = dtls.Sum(x => x.OUTQTY > x.PRQTY ? 0 : x.PRQTY - x.OUTQTY); + var actQty = dtls.Sum(x => x.QTY_OUT > x.QTY_REQ ? 0 : x.QTY_REQ - x.QTY_OUT); cutQty = 0; if (actQty < CurInv.CurPkg.QTY) { @@ -411,26 +411,26 @@ double curQty = CurInv.CurPkg.QTY; foreach (var d in dtls) { - var actPrQty = d.PRQTY - d.OUTQTY; + var actPrQty = d.QTY_REQ - d.QTY_OUT; if (actPrQty > 0 && curQty > 0) { if (actPrQty >= curQty) { - d.OUTQTY += curQty; + d.QTY_OUT += curQty; curQty = 0; } else { - d.OUTQTY = d.PRQTY; + d.QTY_OUT = d.QTY_REQ; curQty -= actPrQty; } - d.LINESTATUS = d.OUTQTY >= d.PRQTY ? BIZ_WMS_TRANSFER.STATUSs.COMPLETE.GetValue() : BIZ_WMS_TRANSFER.STATUSs.WORKING.GetValue(); + d.STATUS = d.QTY_OUT >= d.QTY_REQ ? BIZ_WMS_TRANSFER.STATUSs.Finished.GetValue() : BIZ_WMS_TRANSFER.STATUSs.Storing.GetValue(); //d.OUTWAREHOUSECODE = CurInv.Warehouse.WH_CODE; } } if (isExceed) { - if (CurInv.ItemInfo.DLVY_TYPE == BAS_ITEM.DLVY_TYPEs.ByDemand.GetValue() || req.BILLCODE.Substring(2, 4) == "5408" || req.BILLCODE.Substring(2, 4) == "5409") + if (CurInv.ItemInfo.DLVY_TYPE == BAS_ITEM.DLVY_TYPEs.ByDemand.GetValue() || req.ORDER_NO.Substring(2, 4) == "5408" || req.ORDER_NO.Substring(2, 4) == "5409") { isCutting = true; isExceed = false; @@ -444,8 +444,8 @@ else { //鏈�澶ф暟閲忔槑缁嗚鐢ㄤ簬璋冩嫧锛岃琛屽彂鏂欐暟閲忓姞涓婂簲鎴枡鏁伴噺 - var tfdtl = dtls.OrderBy(q => q.BILLLINE.ToDecimal()).Last(); - tfdtl.OUTQTY += cutQty; + var tfdtl = dtls.OrderBy(q => q.ORDER_LINE.ToDecimal()).Last(); + tfdtl.QTY_OUT += cutQty; } } @@ -543,7 +543,7 @@ CutQty = CurInv.CurPkg.QTY - cutQty, isCutting = isCutting, isExceed = isExceed, - ReqNo = req.BILLCODE, + ReqNo = req.ORDER_NO, regionCode = CurInv.Region.REGION_CODE, locationCode = CurInv.Location?.LOCATION_CODE, }; @@ -578,38 +578,36 @@ SN = CurInv.CurPkg.SN, ITEM_CODE = CurInv.ItemInfo.ITEM_CODE, QTY = CurInv.CurPkg.QTY, - META_SN = CurInv.Barcode.MetaSn, - BILLCODE = req.BILLCODE, - BILLDATE = req.BILLDATE, + ORDER_NO = req.ORDER_NO, //BILLLINE = tfdtl.BILLLINE }; //4.鏇存柊涓氬姟鍗曟嵁锛孊IZ_WMS_TRANSFER銆丅IZ_WMS_TRANSFER_DTL銆丅IZ_WMS_TRANSFER_SN 鍒ゆ柇鏄庣粏琛岀姸鎬佹槸鍚﹀畬鎴� - var isComplete = !req.Dtls.Any(x => x.LINESTATUS != BIZ_WMS_TRANSFER.STATUSs.COMPLETE.GetValue() && x.LINESTATUS != BIZ_WMS_TRANSFER.STATUSs.MANUALCOMPLETE.GetValue() && x.PRQTY > 0); + var isComplete = !req.Details.Any(x => x.STATUS != BIZ_WMS_TRANSFER.STATUSs.Finished.GetValue() && x.STATUS != BIZ_WMS_TRANSFER.STATUSs.Picked.GetValue() && x.QTY_REQ > 0); his_isComplete = isComplete; if (isComplete) { //detail鍏ㄩ儴瀹屾垚浜� - req.STATUS = isManual ? BIZ_WMS_TRANSFER.STATUSs.MANUALCOMPLETE.GetValue() : BIZ_WMS_TRANSFER.STATUSs.COMPLETE.GetValue(); + req.STATUS = isManual ? BIZ_WMS_TRANSFER.STATUSs.Picked.GetValue() : BIZ_WMS_TRANSFER.STATUSs.Finished.GetValue(); } else { - req.STATUS = BIZ_WMS_TRANSFER.STATUSs.WORKING.GetValue(); + req.STATUS = BIZ_WMS_TRANSFER.STATUSs.Storing.GetValue(); } //濡傛灉鏄疉gv if (CurReqType == ReqType.IsAgv) { - req.STATUS = isManual ? BIZ_WMS_TRANSFER.STATUSs.MANUALCOMPLETE.GetValue() : BIZ_WMS_TRANSFER.STATUSs.COMPLETE.GetValue(); + req.STATUS = isManual ? BIZ_WMS_TRANSFER.STATUSs.Picked.GetValue() : BIZ_WMS_TRANSFER.STATUSs.Finished.GetValue(); } //5.鍑哄簱涓嬫灦 foreach (var item in CurInv.Items) { item.TRANS_CODE = nameof(BIZ_WMS_TRANSFER); - item.TRANS_NO = req.BILLCODE; - item.TRANS_LINE = string.Join(",", dtls.Select(x => x.BILLLINE)); + item.TRANS_NO = req.ORDER_NO; + item.TRANS_LINE = string.Join(",", dtls.Select(x => x.ORDER_LINE)); item.SOURCE_CODE = "WORK_ORDER"; - item.SOURCE_ORDER = dtls.First().SOURCECODE; + item.SOURCE_ORDER = dtls.First().SOURCE_ORDER; } Result<TakeDownInfo> downResult = WMS_ITEM_Biz.WmsItem.TakeDown(CurInv, input.AuthOption, WMS_ITEM.STATUSs.Sended, !isCutting); if (!downResult.IsSuccessed) @@ -650,7 +648,7 @@ //6. 瀵规帴MES銆丄gv - action.LocaleMsg = Biz.L($"璋冩嫧鍑哄簱瀹屾垚锛屽崟鍙穂{req.BILLCODE}]锛屾潯鐮乕{CurInv.SN}]锛岀姸鎬乕{req.STATUS.GetEnumDesc<BIZ_WMS_TRANSFER.STATUSs>()}]"); + action.LocaleMsg = Biz.L($"璋冩嫧鍑哄簱瀹屾垚锛屽崟鍙穂{req.ORDER_NO}]锛屾潯鐮乕{CurInv.SN}]锛岀姸鎬乕{req.STATUS.GetEnumDesc<BIZ_WMS_TRANSFER.STATUSs>()}]"); action.Data = new ProdReqOutput() { SN = CurInv.SN, @@ -659,7 +657,7 @@ CutQty = CurInv.CurPkg.QTY - cutQty, isCutting = isCutting, isExceed = isExceed, - ReqNo = req.BILLCODE, + ReqNo = req.ORDER_NO, regionCode = CurInv.Region.REGION_CODE, locationCode = CurInv.Location?.LOCATION_CODE, }; @@ -694,9 +692,9 @@ { //needSaveHistoryLog = true; CloseLight(LocationHis).Wait(); - if (!(req?.BILLCODE ?? "").IsNullOrEmpty()) + if (!(req?.ORDER_NO ?? "").IsNullOrEmpty()) { - Biz.Db.Deleteable<WMS_ITEM_POOL>().Where(x => x.TRANS_NO == req.BILLCODE).ExecuteCommand(); + Biz.Db.Deleteable<WMS_ITEM_POOL>().Where(x => x.TRANS_NO == req.ORDER_NO).ExecuteCommand(); } Biz.Db.Deleteable<WMS_ITEM_POOL>().Where(q => CurPoolList.Select(q => q.SN).Contains(q.SN)).ExecuteCommand(); //淇濆瓨鎿嶄綔鏃ュ織 -- Gitblit v1.9.3