From d42ad8b01195def2a9309930e14f90ff13ad47b1 Mon Sep 17 00:00:00 2001
From: 杨前锦 <1010338399@qq.com>
Date: 星期四, 19 六月 2025 17:24:28 +0800
Subject: [PATCH] 印尼佳通出入库策略优化

---
 HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/api/ApiHelper.cs |  189 ++++++++++++++++++++++++++++++++++++-----------
 1 files changed, 145 insertions(+), 44 deletions(-)

diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/api/ApiHelper.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/api/ApiHelper.cs
index 959c9e7..c63c661 100644
--- a/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/api/ApiHelper.cs
+++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/api/ApiHelper.cs
@@ -4,6 +4,7 @@
 using HH.WCS.Mobox3.YNJT_PT.process;
 using HH.WCS.Mobox3.YNJT_PT.util;
 using HH.WCS.Mobox3.YNJT_PT.wms;
+using MySqlX.XDevAPI.Common;
 using Newtonsoft.Json;
 using Newtonsoft.Json.Linq;
 using SqlSugar;
@@ -52,7 +53,7 @@
                     N_IS_URGENT = model.isUrgent,
                     T_OFF_TIME = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
                     N_IS_FULL = model.isFull,
-
+                    S_LOC = model.loc
                 };
                 WMSHelper.addOffLineRecord(record);
             }
@@ -118,6 +119,26 @@
                                                 var itemBarcodeInfo = WMSHelper.GetGreenTireInformation(ext.barcode);
                                                 if (itemBarcodeInfo != null)
                                                 {
+                                                    itemBarcodeInfo.N_URGENT_FLAG = offLineRecord.N_IS_URGENT;
+                                                    // 璁$畻鐢熸晥鏃堕棿銆佸け鏁堟椂闂�+                                                    var overage = WMSHelper.getOverage(itemBarcodeInfo.BARCODE);
+                                                    LogHelper.Info($"璁$畻鐢熸晥鏃堕棿銆佸け鏁堟椂闂达紝杩斿洖鍊硷細{JsonConvert.SerializeObject(overage)}", "WMS");
+                                                    if (overage != null)
+                                                    {
+                                                        DateTime txndate = DateTime.Parse(itemBarcodeInfo.TXNDATE);
+                                                        DateTime minTime = txndate.AddHours(overage.MINHOUR);
+                                                        DateTime maxTime = txndate.AddDays(overage.OVERAGE);
+                                                        itemBarcodeInfo.S_EFFECTIVE_TIME = minTime.ToString("yyyy-MM-dd HH:mm:ss");
+                                                        itemBarcodeInfo.S_EXPIRATION_TIME = maxTime.ToString("yyyy-MM-dd HH:mm:ss");
+                                                    }
+                                                    else
+                                                    {
+                                                        response.code = 1;
+                                                        response.msg = $"鏈煡璇㈠埌鐗╂枡瀛樻斁鏃堕棿閰嶇疆淇℃伅锛屾潯褰㈢爜锛歿itemBarcodeInfo.BARCODE}";
+                                                        return response;
+                                                    }
+
+                                                    ContainerHelper.addCntrItemRel(rfid, itemBarcodeInfo);
                                                     barcodeList.Add(ext);
                                                 }
                                                 else
@@ -203,9 +224,9 @@
                                                 wmsTask.N_B_STATE = 1;
                                                 WMSHelper.UpdateTaskState(wmsTask);
 
-                                                // 缁戝畾瀹瑰櫒鐗╂枡淇℃伅
+                                                /*// 缁戝畾瀹瑰櫒鐗╂枡淇℃伅
                                                 var itemBarcodeInfo = WMSHelper.GetGreenTireInformation(ext.barcode);
-                                                WMSHelper.bindBarcodeItemInfo(wmsTask.S_CNTR_CODE, itemBarcodeInfo);
+                                                WMSHelper.bindBarcodeItemInfo(wmsTask.S_CNTR_CODE, itemBarcodeInfo);*/
                                             }
                                         }
                                     }
@@ -213,8 +234,8 @@
                                 else
                                 {
                                     // 寮傚父鎵樼洏鎺掗櫎
-                                    var middleLoc = WMSHelper.getMinTaskMiddleLoc(1);  // 1.寮傚父鎺掑嚭浣�-                                    endLoc = WMSHelper.getAbnormalAreaEmptyLoc(Settings.abnormalArea);
+                                    var middleLoc = WMSHelper.getMinTaskMiddleLoc(1);  // 1.鎺掑嚭浣�+                                    endLoc = WMSHelper.getOnlneLoc(2);  // 2.绌烘墭涓婄嚎浣嶏紙鎺掑嚭鐨勬墭鐩橀兘鍑哄簱鍒扮┖鎵樹笂绾夸綅杩涜澶勭悊锛�                                     if (endLoc != null && middleLoc != null)
                                     {
                                         var wmsTask = new WMSTask()
@@ -287,6 +308,7 @@
 
         /// <summary>
         /// 璇荤爜璇锋眰
+        /// 鍦烘櫙锛�.
         /// </summary>
         public static ResponseResult readCodeRequest(NotifyDeviceSignalModel model) 
         {
@@ -295,63 +317,74 @@
             {
                 verifyResult = true
             };
-            var wmsTask = WMSHelper.GetWmsTask(model.taskNo);
-            if (wmsTask != null)
+            var wcsTask = WCSHelper.GetTask(model.taskNo);
+            var wmsTask = WMSHelper.GetWmsTask(wcsTask.S_OP_CODE);
+            if (wcsTask != null && wmsTask != null)
             {
-                if (wmsTask.S_TYPE != "寮傚父鎵樼洏鍑哄簱浠诲姟") 
+                Location endLoc = LocationHelper.GetLoc(wmsTask.S_END_LOC);   // 鍘熺粓鐐�+                if (wcsTask.S_TYPE == "婊℃枡涓嬬嚎鍏ュ簱浠诲姟")
                 {
-                    Location endLoc = null;
-                    Location middleLoc = null;
                     // 鍒ゆ柇rfid鏄惁寮傚父
-                    if (model.cntrNo != wmsTask.S_CNTR_CODE)
+                    if (model.cntrNo != wcsTask.S_CNTR_CODE)
                     {
-                        endLoc = LocationHelper.GetLoc(wmsTask.S_END_LOC);
-                        var connectLoc = Settings.connectLocList.Where(a => a.roadway == endLoc.N_ROADWAY && a.type == 1).FirstOrDefault();
-                        middleLoc = LocationHelper.GetLoc(connectLoc.locCode);
-                        endLoc = WMSHelper.getAbnormalAreaEmptyLoc(Settings.abnormalArea);
+                        // 鏌ヨ鎺掑嚭鍙�+                        Location middleLoc = WMSHelper.getMinTaskMiddleLoc(1, 0, endLoc.N_ROADWAY);
+                        // 鏌ヨ鏂扮粓鐐�+                        endLoc = WMSHelper.getOnlneLoc(2);
+
+                        wcsTask.S_END_LOC = middleLoc.S_CODE;
+                        wcsTask.S_END_AREA = middleLoc.S_AREA_CODE;
+                        WCSHelper.updateTaskEnd(wcsTask);
+
                         wmsTask.S_END_LOC = endLoc.S_CODE;
                         wmsTask.S_END_AREA = endLoc.S_AREA_CODE;
                         WMSHelper.UpdateTaskEnd(wmsTask);
 
-                        var wcsTask = WCSHelper.GetTaskBySrcNo(wmsTask.S_CODE);
-                        if (wcsTask != null)
-                        {
-                            wcsTask.S_END_LOC = middleLoc.S_CODE;
-                            wcsTask.S_END_AREA = middleLoc.S_AREA_CODE;
-                            WCSHelper.updateTaskEnd(wcsTask);
-                        }
-
                         readCodeFeedbackResponse.verifyResult = false;
                         readCodeFeedbackResponse.endLoc = middleLoc.S_CODE;
-                        response.data = readCodeFeedbackResponse;
+                    }
+                }
+                else if (wcsTask.S_TYPE == "鑳氳儙鍙枡鍑哄簱浠诲姟")
+                {
+                    if (model.cntrNo != wcsTask.S_CNTR_CODE)
+                    {
+                        // 璁$畻鎺掑嚭鍙�+                        endLoc = WMSHelper.getCallOutLoc(endLoc.N_ROW);
+
+                        wcsTask.S_END_LOC = endLoc.S_CODE;
+                        wcsTask.S_END_AREA = endLoc.S_AREA_CODE;
+                        WCSHelper.updateTaskEnd(wcsTask);
+
+                        wmsTask.S_END_LOC = endLoc.S_CODE;
+                        wmsTask.S_END_AREA = endLoc.S_AREA_CODE;
+                        WMSHelper.UpdateTaskEnd(wmsTask);
+
+                        readCodeFeedbackResponse.verifyResult = false;
+                        readCodeFeedbackResponse.endLoc = endLoc.S_CODE;
                     }
                     else 
                     {
-                        var cntrItemRels = ContainerHelper.GetCntrItemRel(wmsTask.S_CNTR_CODE);
-                        if (cntrItemRels.Count > 0) 
+                        var cntrItemRels = ContainerHelper.GetCntrItemRel(wcsTask.S_CNTR_CODE);
+                        if (cntrItemRels.Count > 0)
                         {
-                            if (cntrItemRels[0].S_ITEM_STATE != "OK") 
+                            if (cntrItemRels[0].S_ITEM_STATE != "OK")
                             {
-                                middleLoc = WMSHelper.getMinTaskMiddleLoc(1);  // 1.寮傚父鎺掑嚭浣�-                                endLoc = WMSHelper.getAbnormalAreaEmptyLoc(Settings.abnormalArea);
+                                endLoc = WMSHelper.getMinTaskMiddleLoc(1,endLoc.N_ROADWAY); ;
+
+                                wcsTask.S_END_LOC = endLoc.S_CODE;
+                                wcsTask.S_END_AREA = endLoc.S_AREA_CODE;
+                                WCSHelper.updateTaskEnd(wcsTask);
+
                                 wmsTask.S_END_LOC = endLoc.S_CODE;
                                 wmsTask.S_END_AREA = endLoc.S_AREA_CODE;
                                 WMSHelper.UpdateTaskEnd(wmsTask);
 
-                                var wcsTask = WCSHelper.GetTaskBySrcNo(wmsTask.S_CODE);
-                                if (wcsTask != null)
-                                {
-                                    wcsTask.S_END_LOC = middleLoc.S_CODE;
-                                    wcsTask.S_END_AREA = middleLoc.S_AREA_CODE;
-                                    WCSHelper.updateTaskEnd(wcsTask);
-                                }
-
                                 readCodeFeedbackResponse.verifyResult = false;
-                                readCodeFeedbackResponse.endLoc = middleLoc.S_CODE;
-                                response.data = readCodeFeedbackResponse;
+                                readCodeFeedbackResponse.endLoc = endLoc.S_CODE;
                             }
                         }
                     }
+                      
                 }
             }
             else 
@@ -361,6 +394,63 @@
             }
             response.data = readCodeFeedbackResponse;
             return response;
+        }
+
+        /// <summary>
+        /// 鐢宠鏂扮粓鐐�+        /// </summary>
+        /// <param name="model"></param>
+        /// <returns></returns>
+        public static ResponseResult applyDest(ApplyDestModel model) 
+        {
+            ResponseResult response = new ResponseResult();
+            ApplyDest applyDest = new ApplyDest();
+            var wcsTask = WCSHelper.GetTask(model.taskNo);
+            if (wcsTask != null)
+            {
+                var wmsTask = WMSHelper.GetWmsTask(wcsTask.S_OP_CODE);
+                if (wcsTask != null)
+                {
+                    string itemCode = null;
+                    var endLoc = LocationHelper.GetLoc(wcsTask.S_END_LOC);
+                    var cntrItemRels = ContainerHelper.GetCntrItemRel(wcsTask.S_CNTR_CODE);
+                    if (cntrItemRels.Count > 0)
+                    {
+                        itemCode = cntrItemRels[0].S_ITEM_CODE;
+                    }
+
+                    if (model.applyType == 1)
+                    {
+                        LocationHelper.LockLoc(wcsTask.S_END_LOC, 3);  // 灏嗗師璐т綅閿佸畾锛堝叾浠栭攣锛�+                        var endLocGroup = WMSHelper.getInStockEndLoc(1, itemCode, endLoc.N_ROADWAY);
+                        if (endLocGroup.endLocList.Count > 0)
+                        {
+                            endLoc = endLocGroup.endLocList[0];
+                            applyDest.endLoc = endLoc.S_CODE;
+                        }
+                    }
+                    else if (model.applyType == 2)
+                    {
+                        var endLocGroup = WMSHelper.getInStockEndLoc(1, cntrItemRels[0].S_ITEM_CODE, 0, endLoc.N_ROADWAY);
+                        if (endLocGroup.endLocList.Count > 0)
+                        {
+                            endLoc = endLocGroup.endLocList[0];
+                            applyDest.endLoc = endLoc.S_CODE;
+                        }
+                    }
+                }
+            }
+            else 
+            {
+                response.code = 1;
+                response.msg = $"浠诲姟:{model.taskNo}涓嶅瓨鍦�;
+            }
+            return response;
+        }
+
+        public class ApplyDest 
+        {
+            public string endLoc { get; set; }
         }
 
         /// <summary>
@@ -444,9 +534,9 @@
                                     S_START_AREA = startLoc.S_AREA_CODE,
                                     S_END_LOC = endLoc.S_CODE,
                                     S_END_AREA = endLoc.S_AREA_CODE,
-                                    S_TYPE = "婊℃枡涓嬬嚎鍏ュ簱浠诲姟",
+                                    S_TYPE = "鑳氳儙鍙枡鍑哄簱浠诲姟",
                                     S_OP_DEF_CODE = model.reqId,
-                                    S_OP_DEF_NAME = "鎴愬瀷鏈烘弧鏂欎笅绾垮叆搴�,
+                                    S_OP_DEF_NAME = "纭寲鏈哄懠鍙儦鑳庡嚭搴�,
                                     N_PRIORITY = 1,
                                     T_START_TIME = DateTime.Now,
                                     S_GROUP_NO = groupNo,
@@ -642,7 +732,7 @@
             if (locCntrs.Count == 1)
             {
                 Location startLoc = LocationHelper.GetLoc(locCntrs[0].S_LOC_CODE);
-                var connectLoc = Settings.connectLocList.Where(a => a.roadway == startLoc.N_ROADWAY && a.type == 1).First();
+                var connectLoc = Settings.connectLocList.Where(a => a.roadway == startLoc.N_ROADWAY).First();
                 Location middleLoc = LocationHelper.GetLoc(connectLoc.locCode);
                 Location endLoc = LocationHelper.GetLoc("");
                 if (endLoc != null)
@@ -767,11 +857,21 @@
 
                         if (model.status == 2 || model.status == 8)
                         {
-                            if (mst != null)
+                            if (mst != null && mst.N_B_STATE != 2)
                             {
-                                if (mst.N_B_STATE != 2)
+                                if (mst.S_END_LOC != cst.S_END_LOC)
                                 {
                                     WCSCore.createLastTask(cst.S_END_LOC, mst);
+                                }
+                                else 
+                                {
+                                    mst.N_B_STATE = 2;
+                                    WMSHelper.UpdateTaskState(mst);
+                                }
+
+                                if (mst.S_TYPE == "鍛煎彨绌烘墭鍑哄簱") 
+                                {
+                                    LocationHelper.UnBindingLoc(mst.S_END_LOC, new List<string>() { mst.S_CNTR_CODE });
                                 }
                             }
                         }
@@ -958,6 +1058,7 @@
 
         public class OffLineModel
         {
+            public string loc { get; set; } // 涓嬬嚎浣�             public string rfid { get; set; } // 鎵樼洏鍙�             public string deviceNo { get; set; } // 鏈哄彴鍙�             public int isUrgent { get; set; } // N_IS_URGENT 鏄惁鍔犳�锛�.鍚�1.鏄級

--
Gitblit v1.9.1