From 8e42d0c1b7ae36cff2e7c69999117911a4b6f300 Mon Sep 17 00:00:00 2001
From: wanshenmean <cathay_xy@163.com>
Date: 星期四, 26 三月 2026 17:31:06 +0800
Subject: [PATCH] feat(WCS): 完善 WIDESEAWCS_Tasks 模块代码注释

---
 Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/StackerCraneTaskSelector.cs |  129 +++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 125 insertions(+), 4 deletions(-)

diff --git a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/StackerCraneTaskSelector.cs b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/StackerCraneTaskSelector.cs
index 605fcc6..caa4de8 100644
--- a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/StackerCraneTaskSelector.cs
+++ b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/StackerCraneTaskSelector.cs
@@ -1,4 +1,4 @@
-锘縰sing Newtonsoft.Json;
+using Newtonsoft.Json;
 using System.Diagnostics.CodeAnalysis;
 using WIDESEA_Core;
 using WIDESEAWCS_Common.HttpEnum;
@@ -13,19 +13,57 @@
 namespace WIDESEAWCS_Tasks
 {
     /// <summary>
-    /// 鍫嗗灈鏈轰换鍔¢�夋嫨鍣細灏佽浠诲姟鎸戦�変笌绔欏彴鍙敤鎬у垽鏂��
+    /// 鍫嗗灈鏈轰换鍔¢�夋嫨鍣� - 灏佽浠诲姟鎸戦�変笌绔欏彴鍙敤鎬у垽鏂�
     /// </summary>
+    /// <remarks>
+    /// 鏍稿績鑱岃矗锛�
+    /// 1. 鏍规嵁鍫嗗灈鏈轰笂涓�浠诲姟绫诲瀷閫夋嫨涓嬩竴涓悎閫傜殑浠诲姟
+    /// 2. 瀵瑰嚭搴撲换鍔¤繘琛岀Щ搴撴鏌ワ紙WMS 鍒ゆ柇锛�
+    /// 3. 鍒ゆ柇鍑哄簱绔欏彴鏄惁鍙敤锛堟槸鍚﹁鍗犵敤锛�
+    /// 4. 灏濊瘯閫夋嫨澶囬�夊嚭搴撶珯鍙�
+    ///
+    /// 浠诲姟閫夋嫨绛栫暐锛�
+    /// - 濡傛灉涓婁竴浠诲姟鏄嚭搴擄紝浼樺厛閫夋嫨鍏ュ簱浠诲姟
+    /// - 濡傛灉涓婁竴浠诲姟鏄叆搴擄紝浼樺厛閫夋嫨鍑哄簱浠诲姟
+    /// - 瀵逛簬鍑哄簱浠诲姟锛屽厛妫�鏌ユ槸鍚﹂渶瑕佺Щ搴�
+    /// </remarks>
     public class StackerCraneTaskSelector
     {
+        /// <summary>
+        /// 浠诲姟鏈嶅姟
+        /// </summary>
         private readonly ITaskService _taskService;
+
+        /// <summary>
+        /// 璺敱鏈嶅姟
+        /// </summary>
         private readonly IRouterService _routerService;
+
+        /// <summary>
+        /// 绉诲簱妫�鏌ュ鎵樺嚱鏁�
+        /// </summary>
+        /// <remarks>
+        /// 鐢ㄤ簬璋冪敤 WMS 鍒ゆ柇鍑哄簱浠诲姟鏄惁闇�瑕佸厛鎵ц绉诲簱銆�
+        /// </remarks>
         private readonly Func<int, Dt_Task?> _transferCheck;
 
+        /// <summary>
+        /// 鏋勯�犲嚱鏁帮紙浣跨敤 HTTP 瀹㈡埛绔府鍔╃被锛�
+        /// </summary>
+        /// <param name="taskService">浠诲姟鏈嶅姟</param>
+        /// <param name="routerService">璺敱鏈嶅姟</param>
+        /// <param name="httpClientHelper">HTTP 瀹㈡埛绔府鍔╃被</param>
         public StackerCraneTaskSelector(ITaskService taskService, IRouterService routerService, HttpClientHelper httpClientHelper)
             : this(taskService, routerService, taskNum => QueryTransferTask(httpClientHelper, taskNum))
         {
         }
 
+        /// <summary>
+        /// 鏋勯�犲嚱鏁帮紙浣跨敤濮旀墭鍑芥暟锛�
+        /// </summary>
+        /// <param name="taskService">浠诲姟鏈嶅姟</param>
+        /// <param name="routerService">璺敱鏈嶅姟</param>
+        /// <param name="transferCheck">绉诲簱妫�鏌ュ嚱鏁�</param>
         public StackerCraneTaskSelector(ITaskService taskService, IRouterService routerService, Func<int, Dt_Task?> transferCheck)
         {
             _taskService = taskService;
@@ -33,44 +71,69 @@
             _transferCheck = transferCheck;
         }
 
+        /// <summary>
+        /// 閫夋嫨鍚堥�傜殑浠诲姟
+        /// </summary>
+        /// <remarks>
+        /// 鏍规嵁鍫嗗灈鏈虹殑涓婁竴浠诲姟绫诲瀷鍜屽綋鍓嶇姸鎬侊紝閫夋嫨涓嬩竴涓簲璇ユ墽琛岀殑浠诲姟銆�
+        ///
+        /// 閫夋嫨绛栫暐锛�
+        /// 1. 濡傛灉娌℃湁涓婁竴浠诲姟绫诲瀷锛屾煡璇㈡櫘閫氫换鍔�
+        /// 2. 濡傛灉涓婁竴浠诲姟鏄嚭搴擄紝浼樺厛鏌ュ叆搴撲换鍔★紝鍐嶆煡鍑哄簱浠诲姟
+        /// 3. 濡傛灉涓婁竴浠诲姟鏄叆搴擄紝浼樺厛鏌ュ嚭搴撲换鍔�
+        /// 4. 瀵逛簬鍑哄簱浠诲姟锛岄渶瑕佸垽鏂珯鍙版槸鍚﹀彲鐢�
+        /// </remarks>
+        /// <param name="commonStackerCrane">鍫嗗灈鏈鸿澶囧璞�</param>
+        /// <returns>閫変腑鐨勪换鍔★紝濡傛灉娌℃湁鍙敤浠诲姟杩斿洖 null</returns>
         public Dt_Task? SelectTask(IStackerCrane commonStackerCrane)
         {
             Dt_Task? candidateTask;
+
+            // 鏍规嵁涓婁竴浠诲姟绫诲瀷鍐冲畾鏌ヨ绛栫暐
             if (commonStackerCrane.LastTaskType == null)
             {
+                // 娌℃湁涓婁竴浠诲姟绫诲瀷锛屾煡璇㈡櫘閫氫换鍔�
                 candidateTask = _taskService.QueryStackerCraneTask(commonStackerCrane.DeviceCode);
             }
             else if (commonStackerCrane.LastTaskType.GetValueOrDefault().GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)
             {
+                // 涓婁竴浠诲姟鏄嚭搴擄紝浼樺厛鏌ュ叆搴撲换鍔�
                 candidateTask = _taskService.QueryStackerCraneInTask(commonStackerCrane.DeviceCode);
+                // 濡傛灉娌℃湁鍏ュ簱浠诲姟锛屽啀鏌ヤ竴涓嬪嚭搴撲换鍔�
                 candidateTask ??= _taskService.QueryStackerCraneOutTask(commonStackerCrane.DeviceCode);
             }
             else
             {
+                // 涓婁竴浠诲姟鏄叆搴擄紙闈炲嚭搴擄級锛屼紭鍏堟煡鍑哄簱浠诲姟
                 candidateTask = _taskService.QueryStackerCraneOutTask(commonStackerCrane.DeviceCode);
             }
 
+            // 濡傛灉娌℃湁鍊欓�変换鍔★紝杩斿洖 null
             if (candidateTask == null)
             {
                 return null;
             }
 
+            // 濡傛灉涓嶆槸鍑哄簱浠诲姟锛岀洿鎺ヨ繑鍥�
             if (candidateTask.TaskType.GetTaskTypeGroup() != TaskTypeGroup.OutbondGroup)
             {
                 return candidateTask;
             }
 
+            // 灏濊瘯閫夋嫨鍑哄簱浠诲姟锛堝彲鑳介渶瑕佺Щ搴撴鏌ュ拰绔欏彴鍙敤鎬у垽鏂級
             Dt_Task? selectedTask = TrySelectOutboundTask(candidateTask);
             if (selectedTask != null)
             {
                 return selectedTask;
             }
 
+            // 鏌ユ壘鍏朵粬鍙敤鐨勫嚭搴撶珯鍙�
             var otherOutStationCodes = _routerService
                 .QueryNextRoutes(commonStackerCrane.DeviceCode, candidateTask.NextAddress, candidateTask.TaskType)
                 .Select(x => x.ChildPosi)
                 .ToList();
 
+            // 鏌ヨ鍏朵粬绔欏彴鐨勫嚭搴撲换鍔�
             var tasks = _taskService.QueryStackerCraneOutTasks(commonStackerCrane.DeviceCode, otherOutStationCodes);
             foreach (var alternativeTask in tasks)
             {
@@ -81,89 +144,147 @@
                 }
             }
 
+            // 娌℃湁鍙敤鍑哄簱浠诲姟锛屽皾璇曡繑鍥炲叆搴撲换鍔�
             return _taskService.QueryStackerCraneInTask(commonStackerCrane.DeviceCode);
         }
 
+        /// <summary>
+        /// 灏濊瘯閫夋嫨鍑哄簱浠诲姟
+        /// </summary>
+        /// <remarks>
+        /// 瀵瑰�欓�夊嚭搴撲换鍔¤繘琛岋細
+        /// 1. 绉诲簱妫�鏌ワ紙璋冪敤 WMS 鍒ゆ柇鏄惁闇�瑕佺Щ搴擄級
+        /// 2. 绔欏彴鍙敤鎬у垽鏂�
+        ///
+        /// 濡傛灉浠诲姟琚垽瀹氫负闇�瑕佺Щ搴擄紝鍒欒繑鍥炵Щ搴撳悗鐨勪换鍔°��
+        /// </remarks>
+        /// <param name="outboundTask">鍊欓�夊嚭搴撲换鍔�</param>
+        /// <returns>鍙�変腑鐨勪换鍔★紝鎴� null锛堢珯鍙颁笉鍙敤锛�</returns>
         private Dt_Task? TrySelectOutboundTask(Dt_Task outboundTask)
         {
-            // 鍙鏄嚭搴撲换鍔★紝蹇呴』鍏堣皟鐢╓MS鍒ゆ柇鏄惁闇�瑕佺Щ搴撱��
+            // 瀵逛簬鎵�鏈夊嚭搴撲换鍔★紝蹇呴』鍏堣皟鐢� WMS 鍒ゆ柇鏄惁闇�瑕佺Щ搴�
             var taskAfterTransferCheck = _transferCheck(outboundTask.TaskNum) ?? outboundTask;
             var taskGroup = taskAfterTransferCheck.TaskType.GetTaskTypeGroup();
 
+            // 濡傛灉鏄Щ搴撲换鍔℃垨鍑哄簱浠诲姟锛屽皾璇曚粠 WMS 娣诲姞浠诲姟
             if (taskGroup == TaskTypeGroup.RelocationGroup || taskGroup == TaskTypeGroup.OutbondGroup)
             {
                 TryAddTaskFromWms(taskAfterTransferCheck);
             }
 
+            // 濡傛灉鏄Щ搴撲换鍔★紝鐩存帴杩斿洖
             if (taskGroup == TaskTypeGroup.RelocationGroup)
             {
                 return taskAfterTransferCheck;
             }
 
+            // 濡傛灉涓嶆槸鍑哄簱浠诲姟锛岃繑鍥炲師浠诲姟
             if (taskGroup != TaskTypeGroup.OutbondGroup)
             {
                 return taskAfterTransferCheck;
             }
 
+            // 鍒ゆ柇鍑哄簱绔欏彴鏄惁鍙敤
             return IsOutTaskStationAvailable(taskAfterTransferCheck) ? taskAfterTransferCheck : null;
         }
 
+        /// <summary>
+        /// 璋冪敤 WMS 妫�鏌ョЩ搴�
+        /// </summary>
+        /// <remarks>
+        /// 閫氳繃 HTTP 璇锋眰璋冪敤 WMS 鐨勭Щ搴撴鏌ユ帴鍙c��
+        /// </remarks>
+        /// <param name="httpClientHelper">HTTP 瀹㈡埛绔府鍔╃被</param>
+        /// <param name="taskNum">浠诲姟鍙�</param>
+        /// <returns>濡傛灉闇�瑕佺Щ搴撹繑鍥炵Щ搴撲换鍔★紝鍚﹀垯杩斿洖 null</returns>
         private static Dt_Task? QueryTransferTask(HttpClientHelper httpClientHelper, int taskNum)
         {
+            // 璋冪敤 WMS 鐨勭Щ搴撴鏌ユ帴鍙�
             var response = httpClientHelper.Post<WebResponseContent>(
                 nameof(ConfigKey.TransferCheck),
                 taskNum.ToString());
 
+            // 妫�鏌ュ搷搴旀槸鍚︽垚鍔�
             if (response == null || !response.IsSuccess || response.Data == null || !response.Data.Status || response.Data.Data == null)
             {
                 return null;
             }
 
+            // 瑙f瀽杩斿洖鐨勪换鍔℃暟鎹�
             var taskJson = response.Data.Data.ToString();
             return string.IsNullOrWhiteSpace(taskJson) ? null : JsonConvert.DeserializeObject<Dt_Task>(taskJson);
         }
 
+        /// <summary>
+        /// 灏濊瘯浠� WMS 娣诲姞浠诲姟
+        /// </summary>
+        /// <remarks>
+        /// 濡傛灉浠诲姟涓嶅瓨鍦ㄤ簬鏈湴鏁版嵁搴擄紝浠� WMS 杩斿洖鐨勬暟鎹坊鍔犲埌鏈湴銆�
+        /// </remarks>
+        /// <param name="task">浠诲姟瀵硅薄</param>
         private void TryAddTaskFromWms(Dt_Task task)
         {
+            // 妫�鏌ヤ换鍔″彿鏄惁鏈夋晥
             if (task.TaskNum <= 0)
             {
                 return;
             }
 
+            // 妫�鏌ヤ换鍔℃槸鍚﹀凡瀛樺湪
             var existingTask = _taskService.QueryByTaskNum(task.TaskNum);
             if (existingTask != null)
             {
                 return;
             }
 
+            // 娣诲姞鍒版湰鍦版暟鎹簱
             _taskService.AddData(task);
         }
 
+        /// <summary>
+        /// 鍒ゆ柇鍑哄簱绔欏彴鏄惁鍙敤
+        /// </summary>
+        /// <remarks>
+        /// 妫�鏌ョ洰鏍囩珯鍙板搴旂殑杈撻�佺嚎鏄惁琚崰鐢ㄣ��
+        /// 濡傛灉绔欏彴涓婃湁璐х墿锛屽垯璇ョ珯鍙颁笉鍙敤銆�
+        /// </remarks>
+        /// <param name="task">鍑哄簱浠诲姟</param>
+        /// <returns>绔欏彴鍙敤杩斿洖 true</returns>
         private bool IsOutTaskStationAvailable([NotNull] Dt_Task task)
         {
+            // 纭畾浠诲姟绫诲瀷
             int taskType = 0;
             if (task.TaskType == (int)TaskOutboundTypeEnum.OutEmpty)
             {
+                // 绌烘墭鐩樺嚭搴�
                 taskType = 100;
             }
             else
                 taskType = task.TaskType;
+
+            // 鏌ヨ绔欏彴璺敱淇℃伅
             Dt_Router? router = _routerService.QueryNextRoute(task.Roadway, task.NextAddress, taskType);
             if (router == null)
             {
+                // 鏈壘鍒扮珯鍙拌矾鐢变俊鎭�
                 _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"鏈壘鍒扮珯鍙般�恵task.NextAddress}銆戜俊鎭紝鏃犳硶鏍¢獙绔欏彴");
                 return false;
             }
 
+            // 鏌ユ壘绔欏彴瀵瑰簲鐨勮澶�
             IDevice? device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == router.ChildPosiDeviceCode);
             if (device == null)
             {
+                // 鏈壘鍒拌澶�
                 _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"鏈壘鍒板嚭搴撶珯鍙般�恵router.ChildPosiDeviceCode}銆戝搴旂殑閫氳瀵硅薄锛屾棤娉曞垽鏂嚭搴撶珯鍙版槸鍚﹁鍗犵敤");
                 return false;
             }
 
+            // 杞崲涓鸿緭閫佺嚎璁惧
             CommonConveyorLine conveyorLine = (CommonConveyorLine)device;
+
+            // 妫�鏌ョ珯鍙版槸鍚﹁鍗犵敤
             return conveyorLine.IsOccupied(router.ChildPosi);
         }
     }
-}
\ No newline at end of file
+}

--
Gitblit v1.9.3