From d254250296297f391ae8bc1128122e3c9a71243e Mon Sep 17 00:00:00 2001
From: Ben Lin <maobin001@msn.com>
Date: 星期三, 14 五月 2025 01:34:55 +0800
Subject: [PATCH] 生成截料条码

---
 Tiger.Business.WMS/Transaction/Yada/Out_BIZ_WMS_PREP.cs             |   55 ++++++++++++++++++++++-----
 Tiger.Controllers.WMS/Controllers/WMSController.Out_BIZ_WMS_PREP.cs |   45 ++++++++++++++++++++++
 Tiger.IBusiness.WMS/Transaction/IOut_BIZ_WMS_PREP.cs                |    7 +++
 3 files changed, 96 insertions(+), 11 deletions(-)

diff --git a/Tiger.Business.WMS/Transaction/Yada/Out_BIZ_WMS_PREP.cs b/Tiger.Business.WMS/Transaction/Yada/Out_BIZ_WMS_PREP.cs
index 23f7840..830c306 100644
--- a/Tiger.Business.WMS/Transaction/Yada/Out_BIZ_WMS_PREP.cs
+++ b/Tiger.Business.WMS/Transaction/Yada/Out_BIZ_WMS_PREP.cs
@@ -290,13 +290,13 @@
             var action = new ApiAction<BIZ_WMS_PREP_DTL>();
             if (!CurPrepDtl.IsNullOrEmpty())
             {
-	            var prepDtl = MainDB.Queryable<BIZ_WMS_PREP_DTL>().Where(q => q.ID == CurPrepDtl.ID).First();
-	            prepDtl.Suggests = Suggests;
+                var prepDtl = MainDB.Queryable<BIZ_WMS_PREP_DTL>().Where(q => q.ID == CurPrepDtl.ID).First();
+                prepDtl.Suggests = Suggests;
                 prepDtl.Deliverys = MainDB.Queryable<BIZ_WMS_PREP_SN>().Where(q => q.ORDER_NO == CurPrepDtl.ORDER_NO && q.ORDER_LINE == CurPrepDtl.ORDER_LINE && q.STATUS == WMS_ITEM.STATUSs.OffShelf.GetValue()).ToList();
                 CurPrepDtl = prepDtl;
-	            CurPREP.Order.Details.RemoveAll(q => q.ID == CurPrepDtl.ID);
-	            CurPREP.Order.Details.Add(CurPrepDtl);
-	            action.Data = CurPrepDtl;
+                CurPREP.Order.Details.RemoveAll(q => q.ID == CurPrepDtl.ID);
+                CurPREP.Order.Details.Add(CurPrepDtl);
+                action.Data = CurPrepDtl;
             }
             return action;
         }
@@ -471,7 +471,8 @@
                 //    return action;
                 //}
                 CurInvItem = inv;
-                CurSn = CurInvItem.Items.Select(q => new BIZ_WMS_PREP_SN() {
+                CurSn = CurInvItem.Items.Select(q => new BIZ_WMS_PREP_SN()
+                {
                     ORDER_NO = CurPREP.Order.ORDER_NO,
                     ORDER_LINE = CurPrepDtl.ORDER_LINE,
                     SN = q.SN,
@@ -527,13 +528,13 @@
                     //action.LocaleMsg = Biz.L($"鏉$爜[{0}]鎵弿鎴愬姛锛屽鏂欑墿鏂橻{1}]闇�姹俒{2}]杩橀渶澶囨枡[{3}]锛岃閫夋嫨瑕佽秴鍙戣繕鏄埅鏂欙紵");
                     action.LocaleMsg = Biz.L($"WMS.Out_BIZ_WMS_PREP.ScanItem.Success{(isNeedCut ? "" : "Confirm")}", CurInvItem.SN, CurInvItem.ItemInfo.ITEM_CODE, CurPREP.BizType.GetActReqQty(CurPrepDtl), actQty, CurSn.Sum(q => q.QTY_DLVY));
                     action.Data.Command = "ConfirmExceed";
-                    action.Data.Data = new  
+                    action.Data.Data = new
                     {
                         isExceed,
                         isNeedCut,
                         CurSn,
                     };
-                } 
+                }
                 else
                 {
                     input.Data = CurSn.ToJson();
@@ -686,7 +687,7 @@
                 whUnit = whUnit.IsNullOrEmpty(await MainDB.Queryable<V_WH_UNIT>().Where(t => (t.SHELF_CODE.ToUpper() == Code || t.LOCATION_CODE.ToUpper() == Code) && t.AUTH_ORG == OrgCode).IncludesAllFirstLayer().FirstAsync());
 
                 // 鎵弿璐ф灦浠g爜锛屼笖涓烘櫤鑳借揣鏋�
-                if (!whUnit.IsNullOrEmpty() && whUnit.SHELF_CODE  == Code)
+                if (!whUnit.IsNullOrEmpty() && whUnit.SHELF_CODE == Code)
                 {
                     CurScanShelf.Shelf = whUnit.Shelf;
                     CurScanShelf.WarehouseCode = whUnit.WH_CODE;
@@ -728,7 +729,7 @@
                     CurScanShelf.Location = whUnit.Location;
                     CurScanShelf.WarehouseCode = whUnit.WH_CODE;
                     CurScanShelf.RegionCode = whUnit.REGION_CODE;
-                    CurScanShelf.ShelfCode = whUnit .SHELF_CODE;
+                    CurScanShelf.ShelfCode = whUnit.SHELF_CODE;
                     CurScanShelf.LocationCode = whUnit.LOCATION_CODE;
                     CurScanShelf.IsSmartRack = false;
                 }
@@ -753,6 +754,38 @@
                 action.CatchExceptionWithLog(ex, Biz.L("WMS.Default.ScanShelf.ScanException", Code));
             }
             return action;
+        }
+
+
+
+        /// <summary>
+        /// 鐢熸垚鎴枡鏉$爜
+        /// </summary>
+        /// <param name="input"></param>
+        /// <returns></returns>
+        public async Task<ApiAction<ScanOutput>> GenerateSNs(BaseInput input)
+        {
+            var action = new ApiAction<ScanOutput>(new ScanOutput());
+            try
+            {
+                var snlist = input.Options["Snlist"].ToString().JsonToObject<List<BIZ_WMS_PREP_SN>>();
+                List<string> SnList = new();
+                foreach (var sn in snlist)
+                {
+                    var metaSn = $"{DI.Resolve<ICodeRuleCache>()["CuttingBarcode"]?.Generate(sn.SN, "/").Data.ToString() ?? ""}" ;
+                    SnList.Add(metaSn);
+                    sn.ReserveSN = sn.SN;
+                    sn.DeliverySN = metaSn;
+                }
+                // 杩斿洖鏁版嵁
+                action.Data.Data = new { Snlist = snlist, Sns = SnList };
+                action.LocaleMsg = Biz.L("鐢熸垚鎴枡鏉$爜鎴愬姛");
+            }
+            catch (Exception ex)
+            {
+                action.CatchExceptionWithLog(ex, Biz.L("WMS.Default.Scan.ScanException", input.SN));
+            }
+            return SetOutPutMqttMsg(action, input.Locale);
         }
 
         /// <summary>
@@ -802,7 +835,7 @@
             var range = input.Data.ToInt32().GetEnum<BIZ_WMS_PREP_BTH.BATCH_RANGEs>();
             //浠庢暟鎹簱鏇存柊褰撳墠鍗曟嵁鐨勬墍鏈変俊鎭�
             CurPREP.Order = MainDB.Queryable<BIZ_WMS_PREP>().Where(q => q.ID == CurPREP.Order.ID).IncludesAllFirstLayer().First();
-            var action = await CurPREP.Order.BIZ_TYPE.GetEnum<BIZ_WMS_PREP.BIZ_TYPEs>() .GenerateDlvyBatch(this, range);
+            var action = await CurPREP.Order.BIZ_TYPE.GetEnum<BIZ_WMS_PREP.BIZ_TYPEs>().GenerateDlvyBatch(this, range);
             return action;
         }
 
diff --git a/Tiger.Controllers.WMS/Controllers/WMSController.Out_BIZ_WMS_PREP.cs b/Tiger.Controllers.WMS/Controllers/WMSController.Out_BIZ_WMS_PREP.cs
index dbed44a..2d8fa62 100644
--- a/Tiger.Controllers.WMS/Controllers/WMSController.Out_BIZ_WMS_PREP.cs
+++ b/Tiger.Controllers.WMS/Controllers/WMSController.Out_BIZ_WMS_PREP.cs
@@ -261,5 +261,50 @@
             trans?.AddHistory(Request, action);
             return Ok(response);
         }
+
+        /// <summary>
+        /// 鐢熸垚鎴枡鏉$爜
+        /// </summary>
+        /// <param name="action"></param>
+        /// <returns></returns>
+        [HttpPost]
+        [Route("api/[controller]/Out_PREP/GenerateSNs")]
+        public async Task<IActionResult> Out_BIZ_WMS_PREP_GenerateSNsAsync([FromBody] ApiAction<BaseInput> action)
+        {
+            ApiAction response;
+            IOut_BIZ_WMS_PREP trans = null;
+            try
+            {
+                if (iBiz.WMS.Context.GetTransDic().ContainsKey(action.ID))
+                {
+                    trans = iBiz.WMS.Context.GetTransDic()[action.ID] as IOut_BIZ_WMS_PREP;
+                    if (!trans.IsFinished)
+                    {
+                        if (action.IsAsync)
+                        {
+                            response = action.GetResponse(await trans.GenerateSNs(action.Data));
+                        }
+                        else
+                        {
+                            lock (trans.TransLock) { response = action.GetResponse(trans.GenerateSNs(action.Data).Result); }
+                        }
+                    }
+                    else
+                    {
+                        response = action.GetResponse($"Transaction Error: 澶囨枡浠诲姟涓嬫灦浜嬪姟[ID:{action.ID}]宸茬粡鍏抽棴锛岃閲嶆柊鎵撳紑澶囨枡浠诲姟涓嬫灦鍔熻兘", false);
+                    }
+                }
+                else
+                {
+                    response = action.GetResponse($"Transaction Error: 澶囨枡浠诲姟涓嬫灦浜嬪姟[ID:{action.ID}]鏁版嵁涓㈠け锛岃閲嶆柊鎵撳紑澶囨枡浠诲姟涓嬫灦鍔熻兘", false);
+                }
+            }
+            catch (System.Exception ex)
+            {
+                response = action.GetResponse().CatchExceptionWithLog(ex);
+            }
+            trans?.AddHistory(Request, action);
+            return Ok(response);
+        }
     }//endClass
 }
\ No newline at end of file
diff --git a/Tiger.IBusiness.WMS/Transaction/IOut_BIZ_WMS_PREP.cs b/Tiger.IBusiness.WMS/Transaction/IOut_BIZ_WMS_PREP.cs
index a881564..766e2cd 100644
--- a/Tiger.IBusiness.WMS/Transaction/IOut_BIZ_WMS_PREP.cs
+++ b/Tiger.IBusiness.WMS/Transaction/IOut_BIZ_WMS_PREP.cs
@@ -39,6 +39,13 @@
         /// <returns></returns>
         public Task<ApiAction> GenerateDlvyBatch(BaseInput input);
 
+        /// <summary>
+        /// 鐢熸垚鎴枡鏉$爜
+        /// </summary>
+        /// <param name="input"></param>
+        /// <returns></returns>
+        public Task<ApiAction<ScanOutput>> GenerateSNs(BaseInput input);
+
         public bool Close(bool needSaveHistoryLog = false);
     }
 }

--
Gitblit v1.9.3