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