From b7308bba3d7ffad271ce7fc7a93c8c45d76be87d Mon Sep 17 00:00:00 2001
From: 杨前锦 <1010338399@qq.com>
Date: 星期五, 13 六月 2025 17:21:03 +0800
Subject: [PATCH] 优化印尼佳通-硫化胚胎出入库逻辑策略优化

---
 HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/api/ApiHelper.cs |  439 ++++++++++++++++++++++++++++++++++--------------------
 1 files changed, 279 insertions(+), 160 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 176e9dc..49ea593 100644
--- a/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/api/ApiHelper.cs
+++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/api/ApiHelper.cs
@@ -228,43 +228,53 @@
         public static ResponseResult offLineProcess(OffLineRequest model) {
             ResponseResult responseResult = new ResponseResult();
 
-            // 鏌ヨ璧风偣璐т綅鏄惁瀛樺湪宸插瓨鍦ㄤ换鍔★紝闃叉浠诲姟閲嶅鍙戣捣
-            var existWmsTask = WMSHelper.GetWmsTaskByStart(model.loc);
-            if (existWmsTask == null)
+            var areaCodes = Settings.areaPropertyList.Select(a => a.areaCode).ToList();
+            var isExistCntr = LocationHelper.checkAreaExistCntr(areaCodes,model.cntrNo);
+            if (!isExistCntr)
             {
-                // 鏌ヨ瀵瑰簲鏈哄彴鐨勭墿鏂欎笅绾块厤缃俊鎭�-                var logicConfig = WMSHelper.getLogicConfigByJtCode(model.jtNo);
-                if (logicConfig != null)
+                // 鏌ヨ璧风偣璐т綅鏄惁瀛樺湪宸插瓨鍦ㄤ换鍔★紝闃叉浠诲姟閲嶅鍙戣捣
+                var existWmsTask = WMSHelper.GetWmsTaskByStart(model.loc);
+                if (existWmsTask == null)
                 {
-                    Container container = ContainerHelper.GetCntr(model.cntrNo);
-                    if (container == null || !model.isNormal)
+                    // 鏌ヨ瀵瑰簲鏈哄彴鐨勭墿鏂欎笅绾块厤缃俊鎭�+                    var logicConfig = WMSHelper.getLogicConfigByJtCode(model.jtNo);
+                    if (logicConfig != null)
                     {
-                        ContainerHelper.AddCntr(model.cntrNo);
-                        ContainerHelper.UpdateCntrState(model.cntrNo, 1);
-                        WMSHelper.addRfidAnomalyRecord(model.cntrNo, 1, model.loc, null);
-                    }
+                        Container container = ContainerHelper.GetCntr(model.cntrNo);
+                        if (container == null || !model.isNormal)
+                        {
+                            ContainerHelper.AddCntr(model.cntrNo);
+                            ContainerHelper.UpdateCntrState(model.cntrNo, 1);
+                            WMSHelper.addRfidAnomalyRecord(model.cntrNo, 1, model.loc, null);
+                        }
 
-                    // 鏍规嵁鐗╂枡涓嬬嚎閰嶇疆淇℃伅锛屽垽鏂换鍔$被鍨嬫槸鐩磋繛涓嬬嚎杩樻槸闈炵洿杩炰笅绾�-                    if (logicConfig.S_TASK_TYPE == "1" || logicConfig.S_TASK_TYPE == "2")
-                    {
-                        triggerItemOffLineFlow(model.loc, model.cntrNo, logicConfig);
+                        // 鏍规嵁鐗╂枡涓嬬嚎閰嶇疆淇℃伅锛屽垽鏂换鍔$被鍨嬫槸鐩磋繛涓嬬嚎杩樻槸闈炵洿杩炰笅绾�+                        if (logicConfig.S_TASK_TYPE == "1" || logicConfig.S_TASK_TYPE == "2")
+                        {
+                            triggerItemOffLineFlow(model.loc, model.cntrNo, logicConfig);
+                        }
+                        else
+                        {
+                            // 婊℃枡涓嬬嚎锛堥潪鐩磋繛锛�+                            triggerItemOffLineFlow4(model.loc, model.cntrNo, logicConfig);
+                        }
                     }
                     else
                     {
-                        // 婊℃枡涓嬬嚎锛堥潪鐩磋繛锛�-                        triggerItemOffLineFlow4(model.loc, model.cntrNo, logicConfig);
+                        WMSHelper.addAlarmRecord("娴佺▼寮傚父", "楂�, $"鏈哄彴鍙穥model.jtNo},娌℃湁鍙敤鐨勯�杈戠嚎璺�璇疯仈绯荤鐞嗕汉鍛�);
+                        throw new BusinessException($"鏈哄彴鍙穥model.jtNo},娌℃湁鍙敤鐨勯�杈戠嚎璺紝璇疯仈绯荤鐞嗕汉鍛�);
                     }
                 }
                 else
                 {
-                    WMSHelper.addAlarmRecord("娴佺▼寮傚父", "楂�, $"鏈哄彴鍙穥model.jtNo},娌℃湁鍙敤鐨勯�杈戠嚎璺�璇疯仈绯荤鐞嗕汉鍛�);
-                    throw new BusinessException($"鏈哄彴鍙穥model.jtNo},娌℃湁鍙敤鐨勯�杈戠嚎璺紝璇疯仈绯荤鐞嗕汉鍛�);
+                    WMSHelper.addAlarmRecord("娴佺▼寮傚父", "浣�, $"涓嬬嚎璐т綅锛歿model.loc}宸叉湁浠诲姟锛岃鍕块噸澶嶄笅鍙戜换鍔�);
+                    throw new BusinessException($"涓嬬嚎璐т綅锛歿model.loc}宸叉湁浠诲姟锛岃鍕块噸澶嶄笅鍙戜换鍔�);
                 }
             }
             else 
             {
-                WMSHelper.addAlarmRecord("娴佺▼寮傚父", "浣�, $"涓嬬嚎璐т綅锛歿model.loc}宸叉湁浠诲姟锛岃鍕块噸澶嶄笅鍙戜换鍔�);
-                throw new BusinessException($"涓嬬嚎璐т綅锛歿model.loc}宸叉湁浠诲姟锛岃鍕块噸澶嶄笅鍙戜换鍔�);
+                WMSHelper.addAlarmRecord("娴佺▼寮傚父", "楂�, $"宸ヨ锛歿model.cntrNo}宸插叆搴擄紝璇峰嬁閲嶅鍏ュ簱");
+                throw new BusinessException($"宸ヨ锛歿model.cntrNo}宸插叆搴擄紝璇峰嬁閲嶅鍏ュ簱");
             }
             return responseResult;
         }
@@ -369,8 +379,8 @@
                         }
                         else
                         {
-                            WMSHelper.addAlarmRecord("娴佺▼寮傚父", "涓�, $"绌哄伐瑁呭嚭搴撶珯鍙�{logicConfig.S_LKKTJBLOC},娌℃湁绌哄伐瑁�);
-                            photoStatus = false;
+                            kgzCntrCode = "铏氭嫙瀹瑰櫒";
+                            WMSHelper.addAlarmRecord("娴佺▼寮傚父", "浣�, $"绌哄伐瑁呭嚭搴撶珯鍙�{logicConfig.S_LKKTJBLOC},娌℃湁绌哄伐瑁�);
                         }
                     }
 
@@ -917,7 +927,6 @@
                                 // 鏇存柊鍑哄簱浠诲姟涓棿琛ㄧ姸鎬�                                 WMSHelper.updateLotOutTask(cst.S_CNTR_CODE, "2");
                             }
-
                         }
                     }
                 }
@@ -941,45 +950,27 @@
                 if (mst != null && mst.N_B_STATE < 2) {
 
                     int emptyFlag = 0;  // 瀹瑰櫒绌烘弧鏍囪瘑
-                    Container cntr = ContainerHelper.GetCntr(cst.S_CNTR_CODE);
-                    if (cntr != null && cntr.N_DETAIL_COUNT > 0) {
+                    var cntrItemRels = ContainerHelper.GetCntrItemRel(cst.S_CNTR_CODE);
+                    if (cntrItemRels.Count > 0) {
                         emptyFlag = 1;
                     }
 
                     // 1锛氬爢鍨涙満鏀捐揣寮傚父鐢宠鏂扮粓鐐�                     if (model.applyType == 1) {
                         // 鎶ヨ锛氭祦绋嬪紓甯�-                        WMSHelper.addAlarmRecord("娴佺▼寮傚父", "浣�, $"鍫嗗灈鏈烘斁璐у紓甯革紝寮傚父璐т綅锛歿cst.S_END_LOC}");
+                        WMSHelper.addAlarmRecord("娴佺▼寮傚父", "涓�, $"鍫嗗灈鏈烘斁璐у紓甯革紝浠诲姟鍙凤細{cst.S_CODE}锛屽紓甯歌揣浣嶏細{cst.S_END_LOC}");
 
                         // 1.灏嗗紓甯歌揣浣嶄笂閿侊紝骞舵姤璀�                         LocationHelper.LockLoc(cst.S_END_LOC, 3);
 
                         // 2.鏌ヨ鏂扮殑鍏ュ簱缁堢偣
-                        Location endLoc = WMSHelper.getInStockEndLoc(cst.S_END_AREA, emptyFlag);
+                        Location endLoc = WMSHelper.getInStockEndLoc(cst.S_END_AREA, emptyFlag );
                         cst.S_END_LOC = endLoc.S_CODE;
                         WCSHelper.UpdateEndLoc(cst);
 
                         LocationHelper.LockLoc(endLoc.S_CODE, 1);
                         applyDest.destLoc = endLoc.S_CODE;
                     }
-                    else if (model.applyType == 2)
-                    {
-                        if (cst.S_END_LOC == "铏氭嫙搴撲綅")
-                        {
-                            var transfeRelevance = WMSHelper.GetTransfeRelevance(model.loc);  // 鎺ラ┏浣嶅叧鑱斿睘鎬�-                            if (transfeRelevance != null)
-                            {
-                                // 1.鏌ヨ鏂扮殑鍏ュ簱缁堢偣
-                                Location endLoc = WMSHelper.getInStockEndLoc(transfeRelevance.S_RELE_AREA, emptyFlag);
-                                cst.S_END_LOC = endLoc.S_CODE;
-                                WCSHelper.UpdateEndLoc(cst);
-
-                                LocationHelper.LockLoc(endLoc.S_CODE, 1);
-                                applyDest.destLoc = endLoc.S_CODE;
-                            }
-                        }
-                    }
-
                 }
             }
             result.data = applyDest;
@@ -1066,18 +1057,22 @@
             {
                 if (mst.S_TYPE == "浣欐枡/绌哄伐瑁呭叆搴�)
                 {
-                    var mesTask = WMSHelper.GetLjMesTaskById(int.Parse(mst.S_OP_DEF_CODE));
-                    if (mesTask.QTY != 0)
+                    var bo = int.TryParse(mst.S_OP_DEF_CODE, out int mesId);
+                    if (bo) 
                     {
-                        var awaitTask = WMSHelper.GetAwaitWmsTaskByMaterialCode(mesTask.MATERIAL_CODE);
-                        if (awaitTask != null)
+                        var mesTask = WMSHelper.GetLjMesTaskById(mesId);
+                        if (mesTask.QTY != 0)
                         {
-                            // 鍙栨秷浠诲姟
-                            ApiHelper.cancelTask(awaitTask.S_CODE);
-                            // 淇敼缁堢偣
-                            agvEndLoc = LocationHelper.GetLoc(awaitTask.S_END_LOC);
-                            wmsEndLoc = agvEndLoc;
-                            mst.S_TYPE = "鍙枡鍑哄簱浠诲姟";
+                            var awaitTask = WMSHelper.GetAwaitWmsTaskByMaterialCode(mesTask.MATERIAL_CODE);
+                            if (awaitTask != null)
+                            {
+                                // 鍙栨秷浠诲姟
+                                ApiHelper.cancelTask(awaitTask.S_CODE);
+                                // 淇敼缁堢偣
+                                agvEndLoc = LocationHelper.GetLoc(awaitTask.S_END_LOC);
+                                wmsEndLoc = agvEndLoc;
+                                mst.S_TYPE = "鍙枡鍑哄簱浠诲姟";
+                            }
                         }
                     }
                 }
@@ -1199,7 +1194,7 @@
                             }
                             else
                             {
-                                WMSHelper.addAlarmRecord("娴佺▼寮傚父", "楂�, $"AGV鐢宠缁堢偣澶辫触锛屾湭鏌ヨ鍒扮珛搴撴帴椹充綅");
+                                WMSHelper.addAlarmRecord("娴佺▼寮傚父", "楂�, $"AGV鐢宠缁堢偣澶辫触锛岀珛搴�{wmsEndLoc.S_AREA_CODE}鏈厤缃珛搴撴帴椹充綅");
                                 return null;
                             }
                         }
@@ -1342,118 +1337,112 @@
         /// 鎴愭柊鏈哄彨鏂�         /// </summary>
         /// <param name="materialCode"></param>
-        /// <param name="endLocCode"></param>
+        /// <param name="jtNo"></param>
         /// <param name="mesTaskId"></param>
-        public static void callMaterial(string materialCode, string endLocCode, int mesTaskId)
+        public static void callMaterial(string materialCode, string jtNo, int mesTaskId)
         {
-            var oldWmsTask = WMSHelper.GetWmsTaskByEnd(endLocCode);
-            if (oldWmsTask == null) {
-                string cntrCode = "";
-                Location endLoc = LocationHelper.GetLoc(endLocCode);
+            string cntrCode = "";
+            var mesTask = WMSHelper.GetLjMesTaskById(mesTaskId);
+
+            if (mesTask != null)
+            {
+                Location endLoc = WMSHelper.getCallMaterialLocCode(jtNo);
                 if (endLoc != null)
                 {
                     Location middleLoc = null;
                     Location startLoc = WMSHelper.getOutStockStartLoc(null, materialCode);
-                    if (startLoc == null)
-                    {
-                        var mesTask = WMSHelper.GetLjMesTaskById(mesTaskId);
-                        if (mesTask != null)
-                        {
-                            mesTask.RECEIVE_MSG = "娌℃湁搴撳瓨";
-                            WMSHelper.updateLjMesTask(mesTask);
-                        }
-                        WMSHelper.addAlarmRecord("娴佺▼寮傚父", "楂�, $"鍙枡澶辫触锛岀墿鏂�{materialCode}娌℃湁搴撳瓨");
-                        return;
-                    }
-                    else 
+                    if (startLoc != null)
                     {
                         var locCntrRels = LocationHelper.GetLocCntr(startLoc.S_CODE);
                         if (locCntrRels.Count > 0)
                         {
                             cntrCode = locCntrRels[0].S_CNTR_CODE;
-                        }
-                        else 
-                        {
-                            WMSHelper.addAlarmRecord("娴佺▼寮傚父", "楂�, $"鏌ヨ鐗╂枡寮傚父锛岃揣浣�{startLoc.S_CODE}缂哄皯瀹瑰櫒淇℃伅");
-                            return;
-                        }
-                    }
-
-                    middleLoc = WMSHelper.GetTransfeRelevanceLoc(startLoc.S_AREA_CODE, 1 , 2);
-
-                    if (middleLoc != null)
-                    {
-                        // 1.鍒涘缓鎴愭柊鏈哄彨鏂欎綔涓�-                        var wmsTask = new WMSTask()
-                        {
-                            S_CNTR_CODE = cntrCode,
-                            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()
+                            middleLoc = WMSHelper.GetTransfeRelevanceLoc(startLoc.S_AREA_CODE, 1, 2);
+                            if (middleLoc != null)
                             {
-                                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 + "-WCS",
-                                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,
-                            };
+                                // 1.鍒涘缓鎴愭柊鏈哄彨鏂欎綔涓�+                                var wmsTask = new WMSTask()
+                                {
+                                    S_CNTR_CODE = cntrCode,
+                                    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_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,
+                                    };
 
-                            if (WCSHelper.CreateTask(wcsTask))
-                            {
-                                // 璧风偣銆佺粓鐐瑰姞閿�-                                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);
+                                        // 鏇存柊浣滀笟浠诲姟鐘舵�
+                                        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);
+                                }
                             }
-
-                            // 棰勫垱寤轰簩娈典换鍔�-                            WCSTask twoWcsTask = new WCSTask()
+                            else
                             {
-                                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);
+                                WMSHelper.addAlarmRecord("娴佺▼寮傚父", "楂�, $"鎴愬瀷鏈哄彨鏂欏け璐ワ紝搴撳尯{startLoc.S_AREA_CODE}鏈煡璇㈠埌鍙敤鐨勬帴椹充綅");
+                            }
+                        }
+                        else
+                        {
+                            WMSHelper.addAlarmRecord("娴佺▼寮傚父", "楂�, $"鎴愬瀷鏈哄彨鏂欏け璐ワ紝寮�璐т綅:{startLoc.S_CODE}寮傚父锛岀己灏戝鍣ㄤ俊鎭�);
                         }
                     }
-                    else 
+                    else
                     {
-                        WMSHelper.addAlarmRecord("娴佺▼寮傚父", "楂�, $"搴撳尯{startLoc.S_AREA_CODE}鏈煡璇㈠埌鍙敤鐨勬帴椹充綅");
-                    }
+                        mesTask.AWAIT_MSG = "搴撳瓨涓嶈冻";
+                        WMSHelper.updateLjMesTask(mesTask);
+                        WMSHelper.addAlarmRecord("娴佺▼寮傚父", "楂�, $"鎴愬瀷鏈哄彨鏂欏け璐ワ紝鐗╂枡:{materialCode}搴撳瓨涓嶈冻");
+                    }  
                 }
             }
+            
         }
         
         /// <summary>
@@ -1465,14 +1454,142 @@
         /// <param name="materialCode"></param>
         /// <param name="endLocCode"></param>
         /// <param name="mesTaskId"></param>
-        public static void callMaterialHDK(string materialCode, string endLocCode, int mesTaskId)
+        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.鏌ヨ涓浆搴撳簱瀛橈紝鏍规嵁鍏ュ簱鏃堕棿 杩涜鍏堝叆鍏堝嚭
+            // 2.鏌ヨ涓浆搴撳簱瀛�+            DateTime inStockTime = DateTime.MinValue;
+            var cntrItemRels = WMSHelper.getZZKInventoryInfo(materialCode);
+            if (cntrItemRels.Count > 0) 
+            {
+                inStockTime = cntrItemRels[0].T_INBOUND_TIME;   
+            }
 
-            // 3.灏哅ES浠诲姟鍐欏叆鐜甫搴撲换鍔′腑闂磋〃
-            WMSHelper.addLjXcTask(mesTaskId);
+            // 3.鏍规嵁鍏堣繘鍏堝嚭璁$畻鍑哄簱鐨勭墿鏂欐槸鐜甫搴�杩樻槸涓浆搴�+            var mesTask = WMSHelper.GetLjMesTaskById(mesTaskId);
+            if (inStockTime >= inStockTimeXc)
+            {
+                //鏂滆鐗╂枡鍑哄簱
+                if (cntrItemRelsXc.Count > 0) 
+                {
+                    // 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) 
+                    {
+                      var endLoc = LocationHelper.GetLoc(locCntrRel.S_LOC_CODE);
+                        if (endLoc != null)
+                        {
+                            Location middleLoc = null;
+                            Location startLoc = WMSHelper.getOutStockStartLoc(null, materialCode);
+                            if (startLoc != null)
+                            {
+                                var locCntrRels = LocationHelper.GetLocCntr(startLoc.S_CODE);
+                                if (locCntrRels.Count > 0)
+                                {
+                                    var cntrCode = cntrItemRel.S_CNTR_CODE;
+                                    middleLoc = WMSHelper.GetTransfeRelevanceLoc(startLoc.S_AREA_CODE, 1, 2);
+                                    if (middleLoc != null)
+                                    {
+                                        // 1.鍒涘缓鎴愭柊鏈哄彨鏂欎綔涓�+                                        var wmsTask = new WMSTask()
+                                        {
+                                            S_CNTR_CODE = cntrCode,
+                                            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_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,
+                                            };
+
+                                            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);
+                                        }
+                                    }
+                                    else
+                                    {
+                                        WMSHelper.addAlarmRecord("娴佺▼寮傚父", "楂�, $"鎴愬瀷鏈哄彨鏂欏け璐ワ紝搴撳尯{startLoc.S_AREA_CODE}鏈煡璇㈠埌鍙敤鐨勬帴椹充綅");
+                                    }
+                                }
+                                else
+                                {
+                                    WMSHelper.addAlarmRecord("娴佺▼寮傚父", "楂�, $"鎴愬瀷鏈哄彨鏂欏け璐ワ紝寮�璐т綅:{startLoc.S_CODE}寮傚父锛岀己灏戝鍣ㄤ俊鎭�);
+                                }
+                            }
+                            else
+                            {
+                                mesTask.AWAIT_MSG = "搴撳瓨涓嶈冻";
+                                WMSHelper.updateLjMesTask(mesTask);
+                                WMSHelper.addAlarmRecord("娴佺▼寮傚父", "楂�, $"鎴愬瀷鏈哄彨鏂欏け璐ワ紝鐗╂枡:{materialCode}搴撳瓨涓嶈冻");
+                            }
+                        }
+                    }
+                }
+            }
         }
 
         /// <summary>
@@ -1483,12 +1600,12 @@
         /// 3.鍒涘缓浣欐枡鍥炲簱浣滀笟锛屽垱寤篴gv鎼繍浠诲姟锛岃櫄鎷熺粓鐐�         /// </summary>
         /// <param name="locCode">鎴愬瀷鏈哄彨鏂欑粓鐐�/param>
-        public static void returnMaterialOrEmptyTray(string locCode) 
+        /// <param name="jtNo">鎴愬瀷鏈哄彨鏂欑粓鐐�/param>
+        public static void returnMaterialOrEmptyTray(string locCode ,string jtNo) 
         {
             if (locCode != null)
             {
-                // 2.鏌ヨmes浠诲姟涓棿琛�-                var mesTask = WMSHelper.getLjMesTaskByLoc(locCode);
+                var mesTask = WMSHelper.getLjMesTaskByJtNo(jtNo);
                 if (mesTask != null)
                 {
                     createReturnTask(locCode, mesTask);
@@ -1665,10 +1782,11 @@
                     }
                 }
 
-                if (cst.S_TYPE == "鍙枡鍑哄簱浠诲姟")
+                var bo = int.TryParse(mst.S_OP_DEF_CODE, out int mesId);
+                if (bo) 
                 {
-                    var mesTask = WMSHelper.GetLjMesTaskByAgvorderId(mst.S_CODE);
-                    callMaterial( mesTask.MATERIAL_CODE, mesTask.POSITION_ID, mesTask.ID);
+                    var mesTask = WMSHelper.GetLjMesTaskById(mesId);
+                    callMaterial(mesTask.MATERIAL_CODE, mesTask.POSITION_ID, mesTask.ID);
                 }
             }
             return result;
@@ -2019,7 +2137,8 @@
         //----------------------------------------------------------------------------------------------------------------------------
         public class LocModel
         {
-            public string locCode { get; set; }
+            public string locCode { get; set; }  // 杩旀枡璐т綅缂栧彿
+            public string jtNo { get; set; } // 鏈哄彴鍙�         }
 
         public class ApplyDest {

--
Gitblit v1.9.1