From e4921e003cc293fea714bdaf74dc6a6b6b750295 Mon Sep 17 00:00:00 2001
From: wanshenmean <cathay_xy@163.com>
Date: 星期六, 25 四月 2026 16:20:51 +0800
Subject: [PATCH] Merge branch 'xiaoyang' into dev

---
 Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineNewJob/ConveyorLineDispatchHandler.cs |   94 ++++++++++++++++++++++++++++++++---------------
 1 files changed, 64 insertions(+), 30 deletions(-)

diff --git a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineNewJob/ConveyorLineDispatchHandler.cs b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineNewJob/ConveyorLineDispatchHandler.cs
index a113186..a567ad2 100644
--- a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineNewJob/ConveyorLineDispatchHandler.cs
+++ b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineNewJob/ConveyorLineDispatchHandler.cs
@@ -1,5 +1,6 @@
 using MapsterMapper;
 using Serilog;
+using System.Threading.Tasks;
 using WIDESEAWCS_Common.TaskEnum;
 using WIDESEAWCS_Core;
 using WIDESEAWCS_ITaskInfoService;
@@ -171,20 +172,41 @@
 
             QuartzLogHelper.LogInfo(_logger, $"RequestInNextAddress锛氬叆搴撲笅涓�鍦板潃锛屼换鍔″彿: {task.TaskNum}锛屽瓙璁惧: {childDeviceCode}", conveyorLine.DeviceCode);
 
-            //// 濡傛灉涓嶆槸绌烘墭鐩樹换鍔★紝澶勭悊鐩爣鍦板潃
-            //if (task.TaskType != (int)TaskOutboundTypeEnum.OutEmpty)
-            //{
+            bool isEmptyTask = task.TaskType == (int)TaskOutboundTypeEnum.OutEmpty;
 
-            Dt_Router routers = _routerService.QueryNextRoute(task.NextAddress, task.TargetAddress);
-            if (routers == null) throw new Exception($"鏈壘鍒拌澶囪矾鐢变俊鎭�");
+            // 纭畾鐩爣鍦板潃
+            string targetAddress;
+            if (isEmptyTask)
+            {
+                targetAddress = "2125";
+                QuartzLogHelper.LogDebug(_logger, $"瀛愯澶�: {childDeviceCode}锛屽叆搴撲笅涓�鐩爣鍦板潃: {2125}", conveyorLine.DeviceCode);
+            }
+            else
+            {
+                Dt_Router routers = _routerService.QueryNextRoute(task.NextAddress, task.TargetAddress);
+                if (routers == null) throw new Exception($"鏈壘鍒拌澶囪矾鐢变俊鎭�");
+                targetAddress = routers.ChildPosi;
+            }
 
-            _targetAddressSelector.HandleInboundNextAddress(conveyorLine, routers.ChildPosi, childDeviceCode);
-            //}
+            // 澶勭悊鐩爣鍦板潃锛欳hildPosi == "2125" 鏃惰烦杩� HandleInboundNextAddress
+            if (targetAddress == "2125")
+            {
+                conveyorLine.SetValue(ConveyorLineDBNameNew.Target, "2125", childDeviceCode);
+            }
+            else if (!_targetAddressSelector.HandleInboundNextAddress(conveyorLine, targetAddress, childDeviceCode))
+            {
+                return;
+            }
 
-            // 鏇存柊浠诲姟褰撳墠浣嶇疆
-            _ = _taskService.UpdatePosition(task.TaskNum, task.CurrentAddress);
-
-            // 璁剧疆 WCS_STB 鏍囧織锛岃〃绀� WCS 宸插鐞�
+            // 鏇存柊浠诲姟褰撳墠浣嶇疆鍜� WCS_ACK
+            if (isEmptyTask)
+            {
+                _ = _taskService.UpdatePosition(task.TaskNum, task.CurrentAddress, "2125");
+            }
+            else
+            {
+                _ = _taskService.UpdatePosition(task.TaskNum, task.CurrentAddress);
+            }
             conveyorLine.SetValue(ConveyorLineDBNameNew.WCS_ACK, (short)1, childDeviceCode);
         }
 
@@ -227,29 +249,42 @@
         /// <param name="conveyorLine">杈撻�佺嚎璁惧瀵硅薄</param>
         /// <param name="command">PLC 鍛戒护鏁版嵁</param>
         /// <param name="childDeviceCode">瀛愯澶囩紪鐮�</param>
-        public void RequestOutbound(CommonConveyorLine conveyorLine, ConveyorLineTaskCommandNew command, string childDeviceCode)
+        public Task RequestOutbound(CommonConveyorLine conveyorLine, ConveyorLineTaskCommandNew command, string childDeviceCode)
         {
             // 鏌ヨ寰呭鐞嗕换鍔�
             Dt_Task? task = _taskFilter.QueryPendingTask(conveyorLine.DeviceCode, childDeviceCode);
-            if (task != null)
+            if (task == null) return Task.CompletedTask;
+
+            // 纭畾鐩爣鍦板潃锛氱┖鎵樼洏浠诲姟浣跨敤 "2201"锛屽叾浠栦换鍔′娇鐢� NextAddress
+            var isEmptyTask = task.TaskType == (int)TaskOutboundTypeEnum.OutEmpty;
+            var targetAddress = task.CurrentAddress == "2217" ? (isEmptyTask ? "2201" : task.NextAddress) : task.NextAddress;
+
+            // 澶勭悊鐗规畩鍦板潃 2217锛岄渶瑕佽皟鐢ㄧ洰鏍囧湴鍧�閫夋嫨鍣�
+            if (task.CurrentAddress == "2217" && !_targetAddressSelector.HandleOutboundNextAddress(conveyorLine, targetAddress, childDeviceCode))
             {
-                // 璁剧疆浠诲姟鍙�
-                conveyorLine.SetValue(ConveyorLineDBNameNew.TaskNo, task.TaskNum, childDeviceCode);
-
-                // 璁剧疆鎵樼洏鏉$爜
-                conveyorLine.SetValue(ConveyorLineDBNameNew.Barcode, task.PalletCode, childDeviceCode);
-
-                // 璁剧疆鐩爣鍦板潃
-                conveyorLine.SetValue(ConveyorLineDBNameNew.Target, task.NextAddress, childDeviceCode);
-
-                // 鍥炲 ACK 纭
-                conveyorLine.SetValue(ConveyorLineDBNameNew.WCS_ACK, (short)1, childDeviceCode);
-
-                // 鏇存柊浠诲姟鐘舵��
-                _taskService.UpdateTaskStatusToNext(task);
-
-                QuartzLogHelper.LogInfo(_logger, "RequestOutbound锛氬嚭搴撲换鍔″凡涓嬪彂锛屼换鍔″彿: {TaskNum}锛屽瓙璁惧: {ChildDeviceCode}", $"鍑哄簱浠诲姟宸蹭笅鍙戯紝浠诲姟鍙�: {task.TaskNum}", conveyorLine.DeviceCode, task.TaskNum, childDeviceCode);
+                return Task.CompletedTask; ;
             }
+
+            // 璁剧疆浠诲姟鍙枫�佹墭鐩樻潯鐮併�佺洰鏍囧湴鍧�銆乄CS_ACK
+            conveyorLine.SetValue(ConveyorLineDBNameNew.TaskNo, task.TaskNum, childDeviceCode);
+            conveyorLine.SetValue(ConveyorLineDBNameNew.Barcode, task.PalletCode, childDeviceCode);
+            conveyorLine.SetValue(ConveyorLineDBNameNew.Target, targetAddress, childDeviceCode);
+            conveyorLine.SetValue(ConveyorLineDBNameNew.WCS_ACK, (short)1, childDeviceCode);
+
+            // 鏇存柊浠诲姟鐘舵�佹垨浣嶇疆
+            if (isEmptyTask && task.NextAddress == "2217")
+            {
+                task.TaskStatus = task.TaskStatus.GetNextNotCompletedStatus<TaskOutStatusEnum>();
+                task.NextAddress = "2201";
+                _taskService.Repository.UpdateData(task);
+            }
+            else
+            {
+                _taskService.UpdateTaskStatusToNext(task);
+            }
+
+            QuartzLogHelper.LogInfo(_logger, "RequestOutbound锛氬嚭搴撲换鍔″凡涓嬪彂锛屼换鍔″彿: {TaskNum}锛屽瓙璁惧: {ChildDeviceCode}", $"鍑哄簱浠诲姟宸蹭笅鍙戯紝浠诲姟鍙�: {task.TaskNum}", conveyorLine.DeviceCode, task.TaskNum, childDeviceCode);
+            return Task.CompletedTask;
         }
 
         /// <summary>
@@ -257,7 +292,6 @@
         /// </summary>
         /// <remarks>
         /// 褰撳嚭搴撲换鍔℃墽琛屽埌鏌愪釜涓棿绔欑偣鏃惰皟鐢ㄣ��
-        /// 鏍规嵁涓嬩竴鍦板潃鍒ゆ柇鏄惁闇�瑕佷笌鎷樻潫鏈�/鎻掓嫈閽夋満绛夎澶囦氦浜掋��
         /// </remarks>
         /// <param name="conveyorLine">杈撻�佺嚎璁惧瀵硅薄</param>
         /// <param name="command">PLC 鍛戒护鏁版嵁</param>

--
Gitblit v1.9.3