From f398a14e78be869dbe96746bada7be3fc2b0b223 Mon Sep 17 00:00:00 2001
From: pengmn <pmn@HanInfo>
Date: 星期一, 23 六月 2025 17:47:24 +0800
Subject: [PATCH] 杭氧

---
 HH.WCS.Mobox3.HangYang/core/WCSCore.cs |  178 +++++++++++++++++++++++++++++++++++++++--------------------
 1 files changed, 117 insertions(+), 61 deletions(-)

diff --git a/HH.WCS.Mobox3.HangYang/core/WCSCore.cs b/HH.WCS.Mobox3.HangYang/core/WCSCore.cs
index 8f4b425..a02ebea 100644
--- a/HH.WCS.Mobox3.HangYang/core/WCSCore.cs
+++ b/HH.WCS.Mobox3.HangYang/core/WCSCore.cs
@@ -13,57 +13,92 @@
     {
         public static void OperateAgvTaskStatus(AgvTaskState model)
         {
-            var TN_Task = WCSHelper.GetTask(model.No);
-            if (TN_Task != null)
+            if (model == null) return;
+
+            var task = WCSHelper.GetTask(model.No);
+            if (task == null) return;
+
+            if (model.State > 7) return;
+
+            // 鐘舵�涓庢搷浣滅殑鏄犲皠瀛楀吀
+            var stateActions = new Dictionary<int, Action>
             {
-                if (model.State <= 7)
-                {
+                [1] = () => WCSHelper.Begin(task),
+                [2] = () => HandleTaskCompletion(task),
+                [3] = () => WCSHelper.UpdateStatus(task, "寮�鍙栬揣"),
+                [4] = () => HandlePickCompletion(task),
+                [5] = () => WCSHelper.UpdateStatus(task, "寮�鍗歌揣"),
+                [6] = () => HandleUnloadCompletion(task),
+                [7] = () => HandleTaskFailure(task)
+            };
 
-                    //鏈変换鍔″彿璇锋眰
-                    switch (model.State)
-                    {
-                        case 1:
-                            WCSHelper.Begin(TN_Task);
-                            break;
-                        #region MyRegion
-                        case 3:
-                            WCSHelper.UpdateStatus(TN_Task, "寮�鍙栬揣");
-                            break;
-                        case 4:
-                            WCSHelper.UpdateStatus(TN_Task, "鍙栬揣瀹屾垚");
-                            TaskProcess.OperateStatus(TN_Task, 4);
-                            break;
-                        case 5:
-                            WCSHelper.UpdateStatus(TN_Task, "寮�鍗歌揣");
-                            break;
-                        case 6:
-                            WCSHelper.UpdateStatus(TN_Task, "鍗歌揣瀹屾垚");
-                            TaskProcess.OperateStatus(TN_Task, 6);
-                            break;
-                        #endregion
-                        case 2:
-                            WCSHelper.End(TN_Task);
-                            //鏍规嵁浠诲姟绫诲瀷鏇存柊浣滀笟鐘舵�鍜岀粓鐐�-                            var taskList = Settings.CompleteTasks;
-                            if (taskList.taskType.Contains(TN_Task.S_TYPE))
-                            {
-                                //瀹屾垚浣滀笟
-                                WMSHelper.UpdateWmsTask(TN_Task, 3);
-                            }
-                            WMSHelper.AddChange(TN_Task);
-                            WMSHelper.DeleteChange(TN_Task);
-                            break;
-                        case 7:
-                            TaskProcess.OperateStatus(TN_Task, 7);
-                            WCSHelper.Fail(TN_Task);
-                            break;
-                    }
-                    WCSHelper.AddActionRecord(model.No, model.State, model.ForkliftNo, model.ExtData);
-
-                }
-
+            if (stateActions.TryGetValue(model.State, out var action))
+            {
+                action.Invoke();
+                WCSHelper.AddActionRecord(model.No, model.State, model.ForkliftNo, model.ExtData);
             }
         }
+
+        // 澶勭悊浠诲姟瀹屾垚閫昏緫
+        private static void HandleTaskCompletion(WCSTask task)
+        {
+            WCSHelper.End(task);
+
+            // 鏍规嵁浠诲姟绫诲瀷澶勭悊涓嶅悓鐨勫畬鎴愰�杈�+            if (Settings.CompleteTasks.taskType.Contains(task.S_TYPE))
+            {
+                WMSHelper.UpdateWmsTask(task, 2);
+                WMSHelper.UpdateDistributionCntrState(2, 3, task.S_CNTR_CODE);
+            }
+
+            if (new List<string> { "鏂欑鍏ュ簱", "鎵樼洏鍏ュ簱" }.Contains(task.S_TYPE))
+            {
+                ContainerHelper.UpdateCntrItem(task.S_CNTR_CODE);
+            }
+
+            // 澶勭悊鍖哄煙鍙樻洿
+            HandleAreaChange(task);
+        }
+
+        // 澶勭悊鍙栬揣瀹屾垚閫昏緫
+        private static void HandlePickCompletion(WCSTask task)
+        {
+            WCSHelper.UpdateStatus(task, "鍙栬揣瀹屾垚");
+            TaskProcess.OperateStatus(task, 4);
+        }
+
+        // 澶勭悊鍗歌揣瀹屾垚閫昏緫
+        private static void HandleUnloadCompletion(WCSTask task)
+        {
+            WCSHelper.UpdateStatus(task, "鍗歌揣瀹屾垚");
+            TaskProcess.OperateStatus(task, 6);
+        }
+
+        // 澶勭悊浠诲姟澶辫触閫昏緫
+        private static void HandleTaskFailure(WCSTask task)
+        {
+            TaskProcess.OperateStatus(task, 7);
+            WCSHelper.Fail(task);
+        }
+
+        // 澶勭悊鍖哄煙鍙樻洿閫昏緫
+        private static void HandleAreaChange(WCSTask task)
+        {
+            var areas = new List<string> { "TPLKQ", "LXLKQ" };
+            var area = new List<string> { "閰嶇洏鍑哄簱", "閰嶇洏缂撳瓨" };
+
+            if (areas.Contains(task.S_START_AREA) && !area.Contains(task.S_TYPE))
+            {
+                WMSHelper.DeleteChange(task);
+            }
+
+            if (areas.Contains(task.S_END_AREA))
+            {
+                WMSHelper.AddChange(task);
+            }
+        }
+
+
 
         /// <summary>
         /// 浠诲姟鍒嗗彂锛屾牴鎹皟搴︾被鍨嬪彂缁欎笉鍚岀殑璋冨害绯荤粺
@@ -85,6 +120,10 @@
 
 
         #region 鏉哀浠诲姟鏈嶅姟
+        private static readonly object _jobLock = new object();
+
+
+
         /// <summary>
         /// 寰幆浣滀笟鐢熸垚浠诲姟
         /// </summary>
@@ -92,18 +131,32 @@
         {
             try
             {
-                //鏌ヨ浠诲姟
-                //鑾峰彇鎵�湁绛夊緟鐨勪綔涓�-                var list = WMSHelper.GetWmsTaskListByState("绛夊緟"); ;
-                if (list.Count > 0)
+                lock (_jobLock)
                 {
-
-                    list.ForEach(task =>
+                    //鏌ヨ浠诲姟
+                    //鑾峰彇鎵�湁绛夊緟鐨勪綔涓�+                    var list = WMSHelper.GetWmsTaskListByState("绛夊緟");
+                    if (list.Count > 0)
                     {
-                        //鐢熸垚鍏ュ簱浠诲姟
-                        TaskProcess.CreateInTask(task);
-                    });
+                        list.ForEach(async task =>
+                        {
+                            //鐢熸垚鍏ュ簱浠诲姟
+                            await TaskProcess.CreateInTask(task);
+                        });
+                    }
+                    //鏌ヨ浠诲姟
+                    //鑾峰彇鎵�湁鎵ц鐨勪綔涓�+                    var exelist = WMSHelper.GetWmsTaskListByState("鎵ц");
+                    if (exelist.Count > 0)
+                    {
+                        exelist.ForEach(task =>
+                        {
+                            //鐢熸垚浠庡垎鎷f殏瀛樺尯鍒伴泦璐ф墭鐩樹綅鐨勪换鍔′换鍔�+                            TaskProcess.exeCreateInTask(task);
+                        });
+                    }
                 }
+                    
             }
             catch (Exception ex)
             {
@@ -119,7 +172,6 @@
             }
 
         }
-
 
         /// <summary>
         /// 寰幆鎺ラ┏浣嶇敓鎴愬叆搴撲换鍔�@@ -157,12 +209,16 @@
         {
             try
             {
-                //鏌ヨ宸查厤鐩樼殑閰嶇洏鍗�-                var list = WMSHelper.GetPickingListByState("閰嶈揣瀹屾垚");
-                if (list.Count > 0)
+                lock (_jobLock)
                 {
-                    TaskProcess.GenerateFromPicking(list);
+                    //鏌ヨ宸查厤鐩樼殑閰嶇洏鍗�+                    var list = WMSHelper.GetPickingListByState(1);
+                    if (list.Count > 0)
+                    {
+                        TaskProcess.GenerateFromPicking(list);
+                    }
                 }
+                    
             }
             catch (Exception ex)
             {

--
Gitblit v1.9.1