From c8f338feee0b6003d8f069b1d37fd9b90dd1b7f4 Mon Sep 17 00:00:00 2001
From: 杨前锦 <1010338399@qq.com>
Date: 星期一, 07 七月 2025 17:31:38 +0800
Subject: [PATCH] 印尼佳通优化

---
 HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/api/ApiHelper.cs |  408 ++++++++++++++++++++++++++++++++++++----------------------
 1 files changed, 252 insertions(+), 156 deletions(-)

diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/api/ApiHelper.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/api/ApiHelper.cs
index 9fe06a7..9e1a722 100644
--- a/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/api/ApiHelper.cs
+++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/api/ApiHelper.cs
@@ -541,7 +541,7 @@
                         {
                             WMSHelper.addAlarmRecord("娴佺▼寮傚父", "楂�, $"璁惧鍙�{bufferLocConfig.deviceNo},鏌ヨ璁惧鐘舵�澶辫触锛岃鑱旂郴宸ヤ綔浜哄憳鏌ョ湅璁惧鏄惁姝e父");
                             throw new BusinessException($"璁惧鍙�{bufferLocConfig.deviceNo},鏌ヨ璁惧鐘舵�澶辫触锛岃鑱旂郴宸ヤ綔浜哄憳鏌ョ湅璁惧鏄惁姝e父");
-                        }*/
+                        }*/               
                     }
                     else
                     {
@@ -753,7 +753,7 @@
                     return responseResult;
                 }
 
-                middleLoc = WMSHelper.GetMinTaskTransfeLoc(startLoc.S_AREA_CODE, 2 , 2);
+                middleLoc = WMSHelper.GetMinTaskTransfeLoc(startLoc.S_AREA_CODE, 2 );
                 if (middleLoc == null) {
                     WMSHelper.addAlarmRecord("娴佺▼寮傚父", "楂�, $"MES鍙枡浠诲姟{mesTask.ID},绔嬪簱鎺ラ┏浣嶅彲鑳藉浜庨攣瀹氭垨绂佺敤鐘舵�锛岃鏌ョ湅");
                     responseResult.code = 1;
@@ -980,7 +980,7 @@
         /// <summary>
         /// AGV鐢宠缁堢偣
         /// 椤哄簭 RFID楠岃瘉 -> RFID涓庝换鍔″彿楠岃瘉 -> 鐗╂枡鍚堟牸鐘舵�楠岃瘉 -> 铏氭嫙缁堢偣
-        /// 鐢宠绫诲瀷锛�1.铏氭嫙缁堢偣 2.RFID涓庝换鍔′笉鍖归厤 3.鐗╂枡鐘舵�涓嶅悎鏍�+        /// 鐢宠绫诲瀷锛�1.姝e父 2.寮傚父
         /// 鍏ュ簱绛栫暐锛氬厛璁$畻搴撳尯鐨勫绉巼锛屽啀璁$畻搴撳尯瀵瑰簲鐨勫叆搴撶珯鍙扮殑浠诲姟鏁帮紝閮藉彇鏈�皬鐨�         /// 
         /// 1.纭畾浠诲姟鏄惁鍦ㄦ墽琛屼腑
@@ -1036,7 +1036,8 @@
             {
                 WMSHelper.addAlarmRecord("绯荤粺閿欒","楂�, $"AGV鐢宠缁堢偣锛學MS鍐呴儴閿欒锛岄敊璇師鍥狅細{ex.Message}", "AGV");
             }
-            return null;
+            LogHelper.Info($"鍙樻洿AGV缁堢偣锛歿applyDest}", "AGV");
+            return applyDest;
         }
 
         /// <summary>
@@ -1050,9 +1051,7 @@
         /// <returns></returns>
         public static string applyAgvDestXC(string applyType, WMSTask mst, WCSTask cst)
         {
-            string destLoc = null;
-            Location agvEndLoc = null;
-            Location wmsEndLoc = null;
+            Location endLoc = null;
             if (applyType == "1")
             {
                 if (mst.S_TYPE == "浣欐枡/绌哄伐瑁呭叆搴�)
@@ -1069,8 +1068,7 @@
                                 // 鍙栨秷浠诲姟
                                 ApiHelper.cancelTask(awaitTask.S_CODE);
                                 // 淇敼缁堢偣
-                                agvEndLoc = LocationHelper.GetLoc(awaitTask.S_END_LOC);
-                                wmsEndLoc = agvEndLoc;
+                                endLoc = LocationHelper.GetLoc(awaitTask.S_END_LOC);
                                 mst.S_TYPE = "鍙枡鍑哄簱浠诲姟";
                             }
                         }
@@ -1078,36 +1076,33 @@
                 }
             }
 
-            if (agvEndLoc == null)
+            if (endLoc == null)
             {
                 string msg = "";
-                if (applyType == "2" || applyType == "3" || applyType == "4")
+                if (applyType == "2")
                 {
                     cst.S_TYPE = cst.S_TYPE + "銆愬紓甯搞�";
                     msg = "宸ヨ寮傚父";
                 }
 
                 // TODO 鍙嶉鏂滆绔嬪簱寮傚父锛岃姹傛枩瑁佸叆搴撶粓鐐�-                agvEndLoc = null;
-
+                string locCode = "XCCRKZTKQ-1-1";
+                endLoc = LocationHelper.GetLoc(locCode);
             }
 
-            if (agvEndLoc != null)
+            if (endLoc != null)
             {
-                destLoc = agvEndLoc.S_CODE;
-
-                cst.S_END_LOC = agvEndLoc.S_CODE;
-                cst.S_END_AREA = agvEndLoc.S_AREA_CODE;
+                cst.S_END_LOC = endLoc.S_CODE;
+                cst.S_END_AREA = endLoc.S_AREA_CODE;
                 WCSHelper.UpdateEndLoc(cst);
-            }
 
-            if (wmsEndLoc != null)
-            {
-                mst.S_END_LOC = wmsEndLoc.S_CODE;
-                mst.S_END_AREA = wmsEndLoc.S_AREA_CODE;
+                mst.S_END_LOC = endLoc.S_CODE;
+                mst.S_END_AREA = endLoc.S_AREA_CODE;
                 WMSHelper.UpdateTaskEnd(mst);
+
+                return endLoc.S_CODE;
             }
-            return destLoc;
+            return null;
         }
 
         /// <summary>
@@ -1164,7 +1159,7 @@
                         wmsEndLoc = WMSHelper.getInStockEndLoc(null, container.N_DETAIL_COUNT == 0 ? 0 : 1, container.N_TYPE);
                         if (wmsEndLoc != null)
                         {
-                            agvEndLoc = WMSHelper.GetMinTaskTransfeLoc(wmsEndLoc.S_AREA_CODE, 1, 2);  // 1.绔嬪簱鎺ラ┏浣�1.鍏ュ簱 2.闈炵洿杩�+                            agvEndLoc = WMSHelper.GetMinTaskTransfeLoc(wmsEndLoc.S_AREA_CODE, 1);  
                             if (agvEndLoc != null)
                             {
                                 LogHelper.Info($"鍒涘缓绔嬪簱绔欏彴鍒扮珛搴撶殑棰勫垱寤轰换鍔★紝agv缁堢偣璐т綅:{agvEndLoc.S_CODE},绔嬪簱缁堢偣璐т綅:{wmsEndLoc.S_CODE}", "AGV");
@@ -1240,7 +1235,7 @@
                         wmsEndLoc = WMSHelper.getInStockEndLoc(null, container.N_DETAIL_COUNT == 0 ? 0 : 1, container.N_TYPE);
                         if (wmsEndLoc != null)
                         {
-                            agvEndLoc = WMSHelper.GetMinTaskTransfeLoc(wmsEndLoc.S_AREA_CODE, 1, 2);  // 1.绔嬪簱鎺ラ┏浣�1.鍏ュ簱 2.闈炵洿杩�+                            agvEndLoc = WMSHelper.GetMinTaskTransfeLoc(wmsEndLoc.S_AREA_CODE, 1); 
                             if (agvEndLoc != null)
                             {
                                 LogHelper.Info($"鍒涘缓绔嬪簱绔欏彴鍒扮珛搴撶殑棰勫垱寤轰换鍔★紝agv缁堢偣璐т綅:{agvEndLoc.S_CODE},绔嬪簱缁堢偣璐т綅:{wmsEndLoc.S_CODE}", "AGV");
@@ -1251,7 +1246,7 @@
                                     S_OP_CODE = mst.S_CODE,
                                     S_CODE = WCSHelper.GenerateTaskNo(),
                                     S_CNTR_CODE = cst.S_CNTR_CODE,
-                                    S_TYPE = cst.S_TYPE + "銆愬紓甯搞�",
+                                    S_TYPE = "寮傚父宸ヨ鍏ュ簱",
                                     S_START_LOC = agvEndLoc.S_CODE,
                                     S_START_AREA = agvEndLoc.S_AREA_CODE,
                                     S_END_LOC = wmsEndLoc.S_CODE,
@@ -1288,25 +1283,9 @@
                         return null;
                     }
                 }
-            }
 
-            if (agvEndLoc != null && wmsEndLoc != null)
-            {
-                destLoc = agvEndLoc.S_CODE;
-                cst.S_END_LOC = agvEndLoc.S_CODE;
-                cst.S_END_AREA = agvEndLoc.S_AREA_CODE;
-                WCSHelper.UpdateEndLoc(cst);
-
-                mst.S_END_LOC = wmsEndLoc.S_CODE;
-                mst.S_END_AREA = wmsEndLoc.S_AREA_CODE;
-                WMSHelper.UpdateTaskEnd(mst);
-            }
-
-            // 閲嶆柊鍙戣捣鏂颁换鍔�-            if (applyType != "1")
-            {
                 var mesTask = WMSHelper.GetLjMesTaskByAgvorderId(mst.S_CODE);
-                if (mesTask != null) 
+                if (mesTask != null)
                 {
                     if (mst.S_TYPE.Contains("鍙枡鍑哄簱浠诲姟"))
                     {
@@ -1321,7 +1300,7 @@
                         var logicConfig = WMSHelper.getLogicConfigByJtCode(mesTask.EQP);
                         if (logicConfig != null)
                         {
-                            triggerItemOffLineFlow4(mesTask.POSITION_ID, mst.S_CNTR_CODE, logicConfig ,mesTask);
+                            triggerItemOffLineFlow4(mesTask.POSITION_ID, mst.S_CNTR_CODE, logicConfig, mesTask);
                         }
                         else
                         {
@@ -1329,6 +1308,18 @@
                         }
                     }
                 }
+            }
+
+            if (agvEndLoc != null && wmsEndLoc != null)
+            {
+                destLoc = agvEndLoc.S_CODE;
+                cst.S_END_LOC = agvEndLoc.S_CODE;
+                cst.S_END_AREA = agvEndLoc.S_AREA_CODE;
+                WCSHelper.UpdateEndLoc(cst);
+
+                mst.S_END_LOC = wmsEndLoc.S_CODE;
+                mst.S_END_AREA = wmsEndLoc.S_AREA_CODE;
+                WMSHelper.UpdateTaskEnd(mst);
             }
             return destLoc;
         }
@@ -1357,7 +1348,7 @@
                         if (locCntrRels.Count > 0)
                         {
                             cntrCode = locCntrRels[0].S_CNTR_CODE;
-                            middleLoc = WMSHelper.GetTransfeRelevanceLoc(startLoc.S_AREA_CODE, 1, 2);
+                            middleLoc = WMSHelper.GetMinTaskTransfeLoc(startLoc.S_AREA_CODE, 2);
                             if (middleLoc != null)
                             {
                                 // 1.鍒涘缓鎴愭柊鏈哄彨鏂欎綔涓�@@ -1456,136 +1447,164 @@
         /// <param name="mesTaskId"></param>
         public static void callMaterialXC(string materialCode, string endLocCode, int mesTaskId)
         {
-            // 1.鏌ヨ鐜甫搴撶墿鏂欏簱瀛�-            DateTime inStockTimeXc = DateTime.MinValue;
-            List<CntrItemRel> cntrItemRelsXc = new List<CntrItemRel>();
-            if (cntrItemRelsXc.Count > 0) 
-            {
-                inStockTimeXc = cntrItemRelsXc[0].T_INBOUND_TIME;
-            }
-
-            // 2.鏌ヨ涓浆搴撳簱瀛�-            DateTime inStockTime = DateTime.MinValue;
-            var cntrItemRels = WMSHelper.getZZKInventoryInfo(materialCode);
-            if (cntrItemRels.Count > 0) 
-            {
-                inStockTime = cntrItemRels[0].T_INBOUND_TIME;   
-            }
-
-            // 3.鏍规嵁鍏堣繘鍏堝嚭璁$畻鍑哄簱鐨勭墿鏂欐槸鐜甫搴�杩樻槸涓浆搴�             var mesTask = WMSHelper.GetLjMesTaskById(mesTaskId);
-            if (inStockTime >= inStockTimeXc)
+            if (mesTask != null) 
             {
-                //鏂滆鐗╂枡鍑哄簱
-                if (cntrItemRelsXc.Count > 0) 
+                // 1.鏌ヨ鐜甫搴撶墿鏂欏簱瀛樻渶鏃╁叆搴撴椂闂�+                DateTime inStockTimeXc = DateTime.MinValue;
+
+                // 2.鏌ヨ涓浆搴撳簱瀛�+                DateTime inStockTime = WMSHelper.getZZKInventoryInfo(materialCode);
+
+                // 3.鏍规嵁鍏堣繘鍏堝嚭璁$畻鍑哄簱鐨勭墿鏂欐槸鐜甫搴�杩樻槸涓浆搴�+                if (inStockTime >= inStockTimeXc)
                 {
-                    // 4.灏哅ES浠诲姟鍐欏叆鐜甫搴撲换鍔′腑闂磋〃
-                    WMSHelper.addLjXcTask(mesTask);
-                }
-            }
-            else 
-            {
-                //涓浆搴撶墿鏂欏嚭搴�-                if (cntrItemRels.Count > 0) 
-                {
-                    var cntrItemRel = cntrItemRels[0];
-                    var locCntrRel = LocationHelper.GetLocCntrByCntr(cntrItemRel.S_CNTR_CODE);
-                    if (locCntrRel != null) 
+                    Location endLoc = WMSHelper.getCallMaterialLocCode(mesTask.EQP);
+                    if (endLoc != null) 
                     {
-                      var endLoc = LocationHelper.GetLoc(locCntrRel.S_LOC_CODE);
-                        if (endLoc != null)
+                        // 4.鍒涘缓鏂滆-鎴愭柊鏈哄彨鏂欎綔涓�+                        var wmsTask = new WMSTask()
+                        {
+                            S_CODE = WMSHelper.GenerateTaskNo(),
+                            S_CNTR_CODE = "",
+                            S_START_LOC = "铏氭嫙璧风偣",
+                            S_START_AREA = "铏氭嫙搴撳尯",
+                            S_END_LOC = endLoc.S_CODE,
+                            S_END_AREA = endLoc.S_AREA_CODE,
+                            S_TYPE = "鍙枡鍑哄簱浠诲姟",
+                            S_OP_DEF_CODE = mesTask.ID.ToString(),
+                            S_OP_DEF_NAME = "鎴愬瀷鏈哄彨鏂欏嚭搴撲换鍔�鏂滆)",
+                            T_START_TIME = DateTime.Now,
+                            N_B_STATE = 0
+                        };
+                        if (WMSHelper.CreateWmsTask(wmsTask))
+                        {
+                            WCSTask wcsTask = new WCSTask()
+                            {
+                                S_OP_NAME = wmsTask.S_OP_DEF_NAME,
+                                S_OP_CODE = wmsTask.S_CODE,
+                                S_CODE = WCSHelper.GenerateTaskNo(),
+                                S_CNTR_CODE = wmsTask.S_CNTR_CODE,
+                                S_TYPE = wmsTask.S_TYPE,
+                                S_START_LOC = wmsTask.S_START_LOC,
+                                S_START_AREA = wmsTask.S_START_AREA,
+                                S_END_LOC = endLoc.S_CODE,
+                                S_END_AREA = endLoc.S_AREA_CODE,
+                                S_SCHEDULE_TYPE = "AGV",
+                                N_PRIORITY = 10,
+                                T_START_TIME = DateTime.Now,
+                                N_B_STATE = -1,
+                                S_B_STATE = "棰勫垱寤�,
+                            };
+
+                            if (WCSHelper.CreateTask(wcsTask))
+                            {
+                                // 璧风偣銆佺粓鐐瑰姞閿�+                                LocationHelper.LockLoc(wcsTask.S_START_LOC, 2);
+                                LocationHelper.LockLoc(wcsTask.S_END_LOC, 1);
+
+                                // 5.灏哅ES浠诲姟鍐欏叆鏂滆浠诲姟涓棿琛�+                                mesTask.AGVORDER_ID = wcsTask.S_CODE;
+                                WMSHelper.addLjXcTask(mesTask);
+                            }
+                        }
+                    }
+                }
+                else
+                {
+                    //涓浆搴撶墿鏂欏嚭搴�+                    Location startLoc = WMSHelper.getOutStockStartLoc(null, materialCode);
+                    if (startLoc != null)
+                    {
+                        var locCntrRels = LocationHelper.GetLocCntr(startLoc.S_CODE);
+                        if (locCntrRels != null && locCntrRels.Count > 0)
                         {
                             Location middleLoc = null;
-                            Location startLoc = WMSHelper.getOutStockStartLoc(null, materialCode);
-                            if (startLoc != null)
+                            Location endLoc = WMSHelper.getCallMaterialLocCode(mesTask.EQP);
+                            if (endLoc != null)
                             {
-                                var locCntrRels = LocationHelper.GetLocCntr(startLoc.S_CODE);
-                                if (locCntrRels.Count > 0)
+                                middleLoc = WMSHelper.GetMinTaskTransfeLoc(startLoc.S_AREA_CODE, 2);
+                                if (middleLoc != null)
                                 {
-                                    var cntrCode = cntrItemRel.S_CNTR_CODE;
-                                    middleLoc = WMSHelper.GetTransfeRelevanceLoc(startLoc.S_AREA_CODE, 1, 2);
-                                    if (middleLoc != null)
+                                    // 1.鍒涘缓鎴愭柊鏈哄彨鏂欎綔涓�+                                    var wmsTask = new WMSTask()
                                     {
-                                        // 1.鍒涘缓鎴愭柊鏈哄彨鏂欎綔涓�-                                        var wmsTask = new WMSTask()
+                                        S_CNTR_CODE = locCntrRels[0].S_CNTR_CODE,
+                                        S_CODE = WMSHelper.GenerateTaskNo(),
+                                        S_START_LOC = startLoc.S_CODE,
+                                        S_START_AREA = startLoc.S_AREA_CODE,
+                                        S_END_LOC = endLoc.S_CODE,
+                                        S_END_AREA = endLoc.S_AREA_CODE,
+                                        S_TYPE = "鍙枡鍑哄簱浠诲姟",
+                                        S_OP_DEF_CODE = mesTaskId.ToString(),
+                                        S_OP_DEF_NAME = "鎴愬瀷鏈哄彨鏂欏嚭搴撲换鍔�,
+                                        T_START_TIME = DateTime.Now,
+                                    };
+                                    if (WMSHelper.CreateWmsTask(wmsTask))
+                                    {
+                                        WCSTask wcsTask = new WCSTask()
                                         {
-                                            S_CNTR_CODE = cntrCode,
-                                            S_CODE = WMSHelper.GenerateTaskNo(),
+                                            S_OP_NAME = wmsTask.S_OP_DEF_NAME,
+                                            S_OP_CODE = wmsTask.S_CODE,
+                                            S_CODE = WCSHelper.GenerateTaskNo(),
+                                            S_CNTR_CODE = wmsTask.S_CNTR_CODE,
+                                            S_TYPE = wmsTask.S_TYPE,
                                             S_START_LOC = startLoc.S_CODE,
                                             S_START_AREA = startLoc.S_AREA_CODE,
-                                            S_END_LOC = endLoc.S_CODE,
-                                            S_END_AREA = endLoc.S_AREA_CODE,
-                                            S_TYPE = "鍙枡鍑哄簱浠诲姟",
-                                            S_OP_DEF_CODE = mesTaskId.ToString(),
-                                            S_OP_DEF_NAME = "鎴愬瀷鏈哄彨鏂欏嚭搴撲换鍔�,
+                                            S_END_LOC = middleLoc.S_CODE,
+                                            S_END_AREA = middleLoc.S_AREA_CODE,
+                                            S_SCHEDULE_TYPE = "WCS",
+                                            N_PRIORITY = 10,
                                             T_START_TIME = DateTime.Now,
                                         };
-                                        if (WMSHelper.CreateWmsTask(wmsTask))
+
+                                        if (WCSHelper.CreateTask(wcsTask))
                                         {
-                                            WCSTask wcsTask = new WCSTask()
-                                            {
-                                                S_OP_NAME = wmsTask.S_OP_DEF_NAME,
-                                                S_OP_CODE = wmsTask.S_CODE,
-                                                S_CODE = WCSHelper.GenerateTaskNo(),
-                                                S_CNTR_CODE = wmsTask.S_CNTR_CODE,
-                                                S_TYPE = wmsTask.S_TYPE,
-                                                S_START_LOC = startLoc.S_CODE,
-                                                S_START_AREA = startLoc.S_AREA_CODE,
-                                                S_END_LOC = middleLoc.S_CODE,
-                                                S_END_AREA = middleLoc.S_AREA_CODE,
-                                                S_SCHEDULE_TYPE = "WCS",
-                                                N_PRIORITY = 10,
-                                                T_START_TIME = DateTime.Now,
-                                            };
+                                            // 璧风偣銆佺粓鐐瑰姞閿�+                                            LocationHelper.LockLoc(wcsTask.S_START_LOC, 2);
+                                            LocationHelper.LockLoc(wcsTask.S_END_LOC, 1);
 
-                                            if (WCSHelper.CreateTask(wcsTask))
-                                            {
-                                                // 璧风偣銆佺粓鐐瑰姞閿�-                                                LocationHelper.LockLoc(wcsTask.S_START_LOC, 2);
-                                                LocationHelper.LockLoc(wcsTask.S_END_LOC, 1);
-
-                                                // 鏇存柊浣滀笟浠诲姟鐘舵�
-                                                wmsTask.N_B_STATE = 1;
-                                                WMSHelper.UpdateTaskState(wmsTask);
-                                            }
-
-                                            // 棰勫垱寤轰簩娈典换鍔�-                                            WCSTask twoWcsTask = new WCSTask()
-                                            {
-                                                S_OP_NAME = wmsTask.S_OP_DEF_NAME,
-                                                S_OP_CODE = wmsTask.S_CODE,
-                                                S_CODE = WCSHelper.GenerateTaskNo(),
-                                                S_CNTR_CODE = wmsTask.S_CNTR_CODE,
-                                                S_TYPE = wmsTask.S_TYPE,
-                                                S_START_LOC = middleLoc.S_CODE,
-                                                S_START_AREA = middleLoc.S_AREA_CODE,
-                                                S_END_LOC = endLoc.S_CODE,
-                                                S_END_AREA = endLoc.S_AREA_CODE,
-                                                S_SCHEDULE_TYPE = "AGV",
-                                                N_PRIORITY = 10,
-                                                T_START_TIME = DateTime.Now,
-                                                N_B_STATE = -1
-                                            };
-                                            WCSHelper.CreateTask(twoWcsTask);
-                                            WMSHelper.readLjMesCallItemTask(wmsTask.S_CODE, mesTaskId);
+                                            // 鏇存柊浣滀笟浠诲姟鐘舵�
+                                            wmsTask.N_B_STATE = 1;
+                                            WMSHelper.UpdateTaskState(wmsTask);
                                         }
-                                    }
-                                    else
-                                    {
-                                        WMSHelper.addAlarmRecord("娴佺▼寮傚父", "楂�, $"鎴愬瀷鏈哄彨鏂欏け璐ワ紝搴撳尯{startLoc.S_AREA_CODE}鏈煡璇㈠埌鍙敤鐨勬帴椹充綅");
+
+                                        // 棰勫垱寤轰簩娈典换鍔�+                                        WCSTask twoWcsTask = new WCSTask()
+                                        {
+                                            S_OP_NAME = wmsTask.S_OP_DEF_NAME,
+                                            S_OP_CODE = wmsTask.S_CODE,
+                                            S_CODE = WCSHelper.GenerateTaskNo(),
+                                            S_CNTR_CODE = wmsTask.S_CNTR_CODE,
+                                            S_TYPE = wmsTask.S_TYPE,
+                                            S_START_LOC = middleLoc.S_CODE,
+                                            S_START_AREA = middleLoc.S_AREA_CODE,
+                                            S_END_LOC = endLoc.S_CODE,
+                                            S_END_AREA = endLoc.S_AREA_CODE,
+                                            S_SCHEDULE_TYPE = "AGV",
+                                            N_PRIORITY = 10,
+                                            T_START_TIME = DateTime.Now,
+                                            N_B_STATE = -1
+                                        };
+                                        WCSHelper.CreateTask(twoWcsTask);
+                                        WMSHelper.readLjMesCallItemTask(wmsTask.S_CODE, mesTaskId);
                                     }
                                 }
                                 else
                                 {
-                                    WMSHelper.addAlarmRecord("娴佺▼寮傚父", "楂�, $"鎴愬瀷鏈哄彨鏂欏け璐ワ紝寮�璐т綅:{startLoc.S_CODE}寮傚父锛岀己灏戝鍣ㄤ俊鎭�);
+                                    WMSHelper.addAlarmRecord("娴佺▼寮傚父", "楂�, $"鎴愬瀷鏈哄彨鏂欏け璐ワ紝搴撳尯{startLoc.S_AREA_CODE}鏈煡璇㈠埌鍙敤鐨勬帴椹充綅");
                                 }
                             }
                             else
                             {
-                                mesTask.AWAIT_MSG = "搴撳瓨涓嶈冻";
-                                WMSHelper.updateLjMesTask(mesTask);
-                                WMSHelper.addAlarmRecord("娴佺▼寮傚父", "楂�, $"鎴愬瀷鏈哄彨鏂欏け璐ワ紝鐗╂枡:{materialCode}搴撳瓨涓嶈冻");
+                                WMSHelper.addAlarmRecord("娴佺▼寮傚父", "楂�, $"鎴愬瀷鏈哄彨鏂欏け璐ワ紝寮�璐т綅:{startLoc.S_CODE}寮傚父锛岀己灏戝鍣ㄤ俊鎭�);
                             }
+                        }
+                        else
+                        {
+                            mesTask.AWAIT_MSG = "搴撳瓨涓嶈冻";
+                            WMSHelper.updateLjMesTask(mesTask);
+                            WMSHelper.addAlarmRecord("娴佺▼寮傚父", "楂�, $"鎴愬瀷鏈哄彨鏂欏け璐ワ紝鐗╂枡:{materialCode}搴撳瓨涓嶈冻");
                         }
                     }
                 }
@@ -1635,7 +1654,7 @@
                 S_START_AREA = startLoc.S_AREA_CODE,
                 S_END_LOC = endLoc.S_CODE,
                 S_END_AREA = endLoc.S_AREA_CODE,
-                S_TYPE = "浣欐枡/绌哄伐瑁呭叆搴撲换鍔� + suffix,
+                S_TYPE = "浣欐枡/绌哄伐瑁呭叆搴撲换鍔�,
                 S_OP_DEF_CODE = mesTask.ID.ToString(),
                 S_OP_DEF_NAME = "浣欐枡/绌哄伐瑁呭叆搴� + suffix,
                 T_START_TIME = DateTime.Now
@@ -1704,7 +1723,7 @@
                         S_OP_CODE = mst.S_CODE,
                         S_CODE = WCSHelper.GenerateTaskNo(),
                         S_CNTR_CODE = cst.S_CNTR_CODE,
-                        S_TYPE = "涓嶅悎鏍煎搧鍥炲簱",
+                        S_TYPE = "涓嶅悎鏍煎搧鍏ュ簱浠诲姟",
                         S_START_LOC = startLoc.S_CODE,
                         S_START_AREA = startLoc.S_AREA_CODE,
                         S_END_LOC = agvEndLoc.S_CODE,
@@ -1728,7 +1747,7 @@
                 wmsEndLoc = WMSHelper.getInStockEndLoc(null, container.N_DETAIL_COUNT == 0 ? 0 : 1, container.N_TYPE);
                 if (wmsEndLoc != null)
                 {
-                    agvEndLoc = WMSHelper.GetMinTaskTransfeLoc(wmsEndLoc.S_AREA_CODE, 1, 2);  // 1.绔嬪簱鎺ラ┏浣�1.鍏ュ簱 2.闈炵洿杩�+                    agvEndLoc = WMSHelper.GetMinTaskTransfeLoc(wmsEndLoc.S_AREA_CODE, 1); 
                     if (agvEndLoc != null)
                     {
                         // 棰勫厛鐢熸垚鍏ュ簱绔欏彴-绔嬪簱缁堢偣鐨勬惉杩愪换鍔�@@ -1738,7 +1757,7 @@
                             S_OP_CODE = mst.S_CODE,
                             S_CODE = WCSHelper.GenerateTaskNo(),
                             S_CNTR_CODE = cst.S_CNTR_CODE,
-                            S_TYPE = "涓嶅悎鏍煎搧鍥炲簱",
+                            S_TYPE = "涓嶅悎鏍煎搧鍏ュ簱浠诲姟",
                             S_START_LOC = startLoc.S_CODE,
                             S_START_AREA = startLoc.S_AREA_CODE,
                             S_END_LOC = agvEndLoc.S_CODE,
@@ -1762,7 +1781,7 @@
                             S_OP_CODE = mst.S_CODE,
                             S_CODE = WCSHelper.GenerateTaskNo(),
                             S_CNTR_CODE = cst.S_CNTR_CODE,
-                            S_TYPE = "涓嶅悎鏍煎搧鍥炲簱",
+                            S_TYPE = "涓嶅悎鏍煎搧鍏ュ簱浠诲姟",
                             S_START_LOC = agvEndLoc.S_CODE,
                             S_START_AREA = agvEndLoc.S_AREA_CODE,
                             S_END_LOC = wmsEndLoc.S_CODE,
@@ -2082,7 +2101,7 @@
             {
                 var transfeRelevance = WMSHelper.GetTransfeRelevance(model.locCode);  // 鎺ラ┏浣嶅睘鎬�                 LogHelper.Info($"鍘熺珯鍙板睘鎬э細{JsonConvert.SerializeObject(transfeRelevance)}", "WMS");
-                if (transfeRelevance != null && transfeRelevance.N_PROPERTY == 2)
+                if (transfeRelevance != null)
                 {
                     if (model.signalType == "1")
                     {
@@ -2134,6 +2153,83 @@
             return result;
         }
 
+        /// <summary>
+        /// 鏂滆鐗╂枡鍑哄簱浠诲姟
+        /// </summary>
+        /// <param name="model"></param>
+        /// <returns></returns>
+        public static ResponseResult createXcItemOutStockTask(XcItemOutStockModel model)
+        {
+            ResponseResult responseResult = new ResponseResult();
+            Location startLoc = LocationHelper.GetLoc(model.startLoc);
+            if (startLoc == null)
+            {
+                WMSHelper.addAlarmRecord("娴佺▼寮傚父", "楂�, $"鎴愬瀷鏈哄彨鏂欏嚭搴�鏂滆)锛岃捣鐐�{model.startLoc}鍦╓MS绯荤粺涓笉瀛樺湪");
+                responseResult.code = 201;
+                responseResult.msg = $"璧风偣:{model.startLoc}鍦╓MS绯荤粺涓笉瀛樺湪";
+                return responseResult;
+            }
+            Location endLoc = WMSHelper.getCallMaterialLocCode(model.eqNo);
+            if (endLoc != null)
+            {
+                var wmsTask = WMSHelper.GetWmsTaskByCntr(model.palletId);
+                if (wmsTask == null)
+                {
+                    ContainerHelper.AddCntr(model.palletId);
+
+                    // 1.鍒涘缓鏂滆-鎴愭柊鏈哄彨鏂欎綔涓�+                    wmsTask = new WMSTask()
+                    {
+                        S_CNTR_CODE = model.palletId,
+                        S_CODE = WMSHelper.GenerateTaskNo(),
+                        S_START_LOC = startLoc.S_CODE,
+                        S_START_AREA = startLoc.S_AREA_CODE,
+                        S_END_LOC = endLoc.S_CODE,
+                        S_END_AREA = endLoc.S_AREA_CODE,
+                        S_TYPE = "鍙枡鍑哄簱浠诲姟",
+                        S_OP_DEF_CODE = model.reqId,
+                        S_OP_DEF_NAME = "鎴愬瀷鏈哄彨鏂欏嚭搴撲换鍔�鏂滆)",
+                        T_START_TIME = DateTime.Now,
+                    };
+                    if (WMSHelper.CreateWmsTask(wmsTask))
+                    {
+                        WCSTask wcsTask = new WCSTask()
+                        {
+                            S_OP_NAME = wmsTask.S_OP_DEF_NAME,
+                            S_OP_CODE = wmsTask.S_CODE,
+                            S_CODE = WCSHelper.GenerateTaskNo(),
+                            S_CNTR_CODE = wmsTask.S_CNTR_CODE,
+                            S_TYPE = wmsTask.S_TYPE,
+                            S_START_LOC = startLoc.S_CODE,
+                            S_START_AREA = startLoc.S_AREA_CODE,
+                            S_END_LOC = endLoc.S_CODE,
+                            S_END_AREA = endLoc.S_AREA_CODE,
+                            S_SCHEDULE_TYPE = "AGV",
+                            N_PRIORITY = 10,
+                            T_START_TIME = DateTime.Now,
+                        };
+
+                        if (WCSHelper.CreateTask(wcsTask))
+                        {
+                            // 璧风偣銆佺粓鐐瑰姞閿�+                            LocationHelper.LockLoc(wcsTask.S_START_LOC, 2);
+                            LocationHelper.LockLoc(wcsTask.S_END_LOC, 1);
+
+                            // 鏇存柊浣滀笟浠诲姟鐘舵�
+                            wmsTask.N_B_STATE = 1;
+                            WMSHelper.UpdateTaskState(wmsTask);
+                        }
+                    }
+                }
+            }
+            else 
+            {
+                responseResult.code = 201;
+                responseResult.msg = $"鎴愬瀷鏈烘満鍙�{model.eqNo}娌℃湁绌轰綑鐨勫彨鏂欒揣浣�;
+            }
+            return responseResult;
+        }
+
         //----------------------------------------------------------------------------------------------------------------------------
         public class LocModel
         {

--
Gitblit v1.9.1