From 96adc295cb04fd135d63d3a907f2732274f90965 Mon Sep 17 00:00:00 2001
From: wanshenmean <cathay_xy@163.com>
Date: 星期二, 21 四月 2026 01:11:21 +0800
Subject: [PATCH] feat: 添加MES异步上传辅助服务并重构相关代码

---
 Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/StackerCraneCommandBuilder.cs |  100 ++++++++++++++++++++------------------------------
 1 files changed, 40 insertions(+), 60 deletions(-)

diff --git a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/StackerCraneCommandBuilder.cs b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/StackerCraneCommandBuilder.cs
index edf399a..ae7cb04 100644
--- a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/StackerCraneCommandBuilder.cs
+++ b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/StackerCraneCommandBuilder.cs
@@ -1,6 +1,7 @@
 using Microsoft.Extensions.Logging;
 using System;
 using System.Diagnostics.CodeAnalysis;
+using WIDESEAWCS_Common.Constants;
 using WIDESEAWCS_Common.TaskEnum;
 using WIDESEAWCS_Core.LogHelper;
 using WIDESEAWCS_ITaskInfoService;
@@ -36,11 +37,6 @@
         private readonly IRouterService _routerService;
 
         /// <summary>
-        /// 鍫嗗灈鏈哄懡浠ら厤缃�
-        /// </summary>
-        private readonly StackerCraneCommandConfig _config;
-
-        /// <summary>
         /// 鏃ュ織璁板綍鍣�
         /// </summary>
         private readonly ILogger _logger;
@@ -55,12 +51,10 @@
         public StackerCraneCommandBuilder(
             ITaskService taskService,
             IRouterService routerService,
-            StackerCraneCommandConfig config,
             ILogger logger)
         {
             _taskService = taskService;
             _routerService = routerService;
-            _config = config;
             _logger = logger;
         }
 
@@ -98,22 +92,20 @@
         /// </remarks>
         /// <param name="roadway">宸烽亾缂栫爜</param>
         /// <returns>鍛戒护绫诲瀷锛圫tandard 鎴� Formation锛�</returns>
-        private string GetCommandType(string roadway)
-        {
-            foreach (var mapping in _config.RoadwayCommandMapping)
-            {
-                if (roadway.Contains(mapping.Key))
-                {
-                    _logger.LogDebug("GetCommandType锛氬尮閰嶅贩閬� {Roadway}锛屽懡浠ょ被鍨�: {CommandType}", roadway, mapping.Value);
-                    QuartzLogger.Debug($"GetCommandType锛氬尮閰嶅贩閬� {roadway}锛屽懡浠ょ被鍨�: {mapping.Value}", roadway);
-                    return mapping.Value;
-                }
-            }
+        //private string GetCommandType(string roadway)
+        //{
+        //    foreach (var mapping in _config.RoadwayCommandMapping)
+        //    {
+        //        if (roadway.Contains(mapping.Key))
+        //        {
+        //            QuartzLogHelper.LogDebug(_logger, "GetCommandType锛氬尮閰嶅贩閬� {Roadway}锛屽懡浠ょ被鍨�: {CommandType}", $"GetCommandType锛氬尮閰嶅贩閬� {roadway}锛屽懡浠ょ被鍨�: {mapping.Value}", roadway, roadway, mapping.Value);
+        //            return mapping.Value;
+        //        }
+        //    }
 
-            _logger.LogDebug("GetCommandType锛氬贩閬� {Roadway} 鏈尮閰嶏紝浣跨敤榛樿鍛戒护绫诲瀷: {DefaultType}", roadway, _config.DefaultCommandType);
-            QuartzLogger.Debug($"GetCommandType锛氬贩閬� {roadway} 鏈尮閰嶏紝浣跨敤榛樿鍛戒护绫诲瀷: {_config.DefaultCommandType}", roadway);
-            return _config.DefaultCommandType;
-        }
+        //    QuartzLogHelper.LogDebug(_logger, "GetCommandType锛氬贩閬� {Roadway} 鏈尮閰嶏紝浣跨敤榛樿鍛戒护绫诲瀷: {DefaultType}", $"GetCommandType锛氬贩閬� {roadway} 鏈尮閰嶏紝浣跨敤榛樿鍛戒护绫诲瀷: {_config.DefaultCommandType}", roadway, roadway, _config.DefaultCommandType);
+        //    return _config.DefaultCommandType;
+        //}
 
         /// <summary>
         /// 鍒涘缓鏍囧噯鍛戒护
@@ -128,8 +120,8 @@
             return new StackerCraneTaskCommand
             {
                 TaskNum = task.TaskNum,   // 浠诲姟鍙�
-                WorkType = 1,             // 浣滀笟绫诲瀷
-                //WorkAction = 1            // 浣滀笟鎸囦护锛氬紑濮嬫墽琛�
+                WorkType = StackerCraneConst.WorkTypeInbound,  // 浣滀笟绫诲瀷锛氬叆搴�
+                //WorkAction = StackerCraneWorkActionEnum.StartTask  // 浣滀笟鎸囦护锛氬紑濮嬫墽琛�
             };
         }
 
@@ -148,10 +140,10 @@
             {
                 Barcode = task.PalletCode,   // 鎵樼洏鏉$爜
                 TaskNum = task.TaskNum,      // 浠诲姟鍙�
-                WorkType = 1,               // 浣滀笟绫诲瀷
-                WorkAction = 1,             // 浣滀笟鎸囦护锛氬紑濮嬫墽琛�
-                FireAlarm = 0,              // 鐏锛氭甯�
-                HeartBeat = 0,              // 蹇冭烦
+                WorkType = StackerCraneConst.WorkTypeInbound,  // 浣滀笟绫诲瀷锛氬叆搴�
+                WorkAction = (short)StackerCraneWorkActionEnum.StartTask,  // 浣滀笟鎸囦护锛氬紑濮嬫墽琛�
+                FireAlarm = StackerCraneConst.FireAlarmNormal,  // 鐏锛氭甯�
+                HeartBeat = StackerCraneConst.HeartBeatInitial,  // 蹇冭烦
                 FieldName = string.Empty     // 淇濈暀瀛楁
             };
         }
@@ -171,8 +163,7 @@
             // 鑾峰彇浠诲姟绫诲瀷鍒嗙粍
             TaskTypeGroup taskTypeGroup = task.TaskType.GetTaskTypeGroup();
 
-            _logger.LogDebug("BuildCommand锛氫换鍔″彿: {TaskNum}锛屼换鍔$被鍨嬪垎缁�: {TaskTypeGroup}", task.TaskNum, taskTypeGroup);
-            QuartzLogger.Debug($"BuildCommand锛氫换鍔″彿: {task.TaskNum}锛屼换鍔$被鍨嬪垎缁�: {taskTypeGroup}", task.Roadway);
+            QuartzLogHelper.LogDebug(_logger, "BuildCommand锛氫换鍔″彿: {TaskNum}锛屼换鍔$被鍨嬪垎缁�: {TaskTypeGroup}", $"BuildCommand锛氫换鍔″彿: {task.TaskNum}锛屼换鍔$被鍨嬪垎缁�: {taskTypeGroup}", task.Roadway, task.TaskNum, taskTypeGroup);
 
             // 鏍规嵁浠诲姟绫诲瀷鍒嗗彂鏋勫缓
             return taskTypeGroup switch
@@ -199,14 +190,17 @@
         /// <returns>濉厖濂界殑鍛戒护瀵硅薄</returns>
         private T? BuildInboundCommand<T>(Dt_Task task, T command) where T : class
         {
-            _logger.LogInformation("BuildInboundCommand锛氭瀯寤哄叆搴撳懡浠わ紝浠诲姟鍙�: {TaskNum}", task.TaskNum);
-            QuartzLogger.Info($"BuildInboundCommand锛氭瀯寤哄叆搴撳懡浠わ紝浠诲姟鍙�: {task.TaskNum}", task.Roadway);
+            QuartzLogHelper.LogInfo(_logger, "BuildInboundCommand锛氭瀯寤哄叆搴撳懡浠わ紝浠诲姟鍙�: {TaskNum}", $"BuildInboundCommand锛氭瀯寤哄叆搴撳懡浠わ紝浠诲姟鍙�: {task.TaskNum}", task.Roadway, task.TaskNum);
 
-            // 纭畾浠诲姟绫诲瀷锛堢┖鎵樼洏鐢ㄧ壒娈婄被鍨� 100锛�
+            // 纭畾浠诲姟绫诲瀷锛堢┖鎵樼洏鐢ㄧ壒娈婄被鍨嬶級
             int taskType = 0;
             if (task.TaskType == (int)TaskOutboundTypeEnum.OutEmpty)
             {
-                taskType = 100;
+                taskType = StackerCraneConst.EmptyPalletTaskType;
+            }
+            else if(task.TaskType == (int)TaskInboundTypeEnum.InEmpty)
+            {
+                taskType = StackerCraneConst.EmptyInPalletTaskType;
             }
             else
                 taskType = task.TaskType;
@@ -216,8 +210,7 @@
             if (router == null)
             {
                 // 鏈壘鍒扮珯鍙帮紝鏇存柊寮傚父淇℃伅
-                _logger.LogError("BuildInboundCommand锛氭湭鎵惧埌绔欏彴銆恵CurrentAddress}銆戜俊鎭紝浠诲姟鍙�: {TaskNum}", task.CurrentAddress, task.TaskNum);
-                QuartzLogger.Error($"BuildInboundCommand锛氭湭鎵惧埌绔欏彴銆恵task.CurrentAddress}銆戜俊鎭�", task.Roadway);
+                QuartzLogHelper.LogError(_logger, "BuildInboundCommand锛氭湭鎵惧埌绔欏彴銆恵CurrentAddress}銆戜俊鎭紝浠诲姟鍙�: {TaskNum}", $"BuildInboundCommand锛氭湭鎵惧埌绔欏彴銆恵task.CurrentAddress}銆戜俊鎭�", task.Roadway, task.CurrentAddress, task.TaskNum);
                 _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"鏈壘鍒扮珯鍙般�恵task.CurrentAddress}銆戜俊鎭紝鏃犳硶鑾峰彇瀵瑰簲鐨勫爢鍨涙満鍙栬揣绔欏彴淇℃伅");
                 return null;
             }
@@ -230,8 +223,7 @@
             // 瑙f瀽鐩爣鍦板潃锛堝簱浣嶅湴鍧�锛�
             if (!TryParseAddress(task.NextAddress, out short endRow, out short endColumn, out short endLayer))
             {
-                _logger.LogError("BuildInboundCommand锛氬叆搴撲换鍔$粓鐐瑰湴鍧�瑙f瀽澶辫触锛岀粓鐐�: {NextAddress}锛屼换鍔″彿: {TaskNum}", task.NextAddress, task.TaskNum);
-                QuartzLogger.Error($"BuildInboundCommand锛氬叆搴撲换鍔$粓鐐瑰湴鍧�瑙f瀽澶辫触锛岀粓鐐�: {task.NextAddress}", task.Roadway);
+                QuartzLogHelper.LogError(_logger, "BuildInboundCommand锛氬叆搴撲换鍔$粓鐐瑰湴鍧�瑙f瀽澶辫触锛岀粓鐐�: {NextAddress}锛屼换鍔″彿: {TaskNum}", $"BuildInboundCommand锛氬叆搴撲换鍔$粓鐐瑰湴鍧�瑙f瀽澶辫触锛岀粓鐐�: {task.NextAddress}", task.Roadway, task.NextAddress, task.TaskNum);
                 _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"鍏ュ簱浠诲姟缁堢偣閿欒锛岀粓鐐癸細銆恵task.NextAddress}銆�");
                 return null;
             }
@@ -241,9 +233,7 @@
             SetCommandProperty(command, "EndColumn", endColumn);
             SetCommandProperty(command, "EndLayer", endLayer);
 
-            _logger.LogInformation("BuildInboundCommand锛氬叆搴撳懡浠ゆ瀯寤烘垚鍔燂紝璧风偣: {StartRow}-{StartColumn}-{StartLayer}锛岀粓鐐�: {EndRow}-{EndColumn}-{EndLayer}锛屼换鍔″彿: {TaskNum}",
-                router.SrmRow, router.SrmColumn, router.SrmLayer, endRow, endColumn, endLayer, task.TaskNum);
-            QuartzLogger.Info($"BuildInboundCommand锛氬叆搴撳懡浠ゆ瀯寤烘垚鍔燂紝璧风偣: {router.SrmRow}-{router.SrmColumn}-{router.SrmLayer}锛岀粓鐐�: {endRow}-{endColumn}-{endLayer}", task.Roadway);
+            QuartzLogHelper.LogInfo(_logger, "BuildInboundCommand锛氬叆搴撳懡浠ゆ瀯寤烘垚鍔燂紝璧风偣: {StartRow}-{StartColumn}-{StartLayer}锛岀粓鐐�: {EndRow}-{EndColumn}-{EndLayer}锛屼换鍔″彿: {TaskNum}", $"BuildInboundCommand锛氬叆搴撳懡浠ゆ瀯寤烘垚鍔燂紝璧风偣: {router.SrmRow}-{router.SrmColumn}-{router.SrmLayer}锛岀粓鐐�: {endRow}-{endColumn}-{endLayer}", task.Roadway, router.SrmRow, router.SrmColumn, router.SrmLayer, endRow, endColumn, endLayer, task.TaskNum);
 
             return command;
         }
@@ -263,14 +253,13 @@
         /// <returns>濉厖濂界殑鍛戒护瀵硅薄</returns>
         private T? BuildOutboundCommand<T>(Dt_Task task, T command) where T : class
         {
-            _logger.LogInformation("BuildOutboundCommand锛氭瀯寤哄嚭搴撳懡浠わ紝浠诲姟鍙�: {TaskNum}", task.TaskNum);
-            QuartzLogger.Info($"BuildOutboundCommand锛氭瀯寤哄嚭搴撳懡浠わ紝浠诲姟鍙�: {task.TaskNum}", task.Roadway);
+            QuartzLogHelper.LogInfo(_logger, "BuildOutboundCommand锛氭瀯寤哄嚭搴撳懡浠わ紝浠诲姟鍙�: {TaskNum}", $"BuildOutboundCommand锛氭瀯寤哄嚭搴撳懡浠わ紝浠诲姟鍙�: {task.TaskNum}", task.Roadway, task.TaskNum);
 
             // 纭畾浠诲姟绫诲瀷
             int taskType = 0;
             if (task.TaskType == (int)TaskOutboundTypeEnum.OutEmpty)
             {
-                taskType = 100;
+                taskType = StackerCraneConst.EmptyPalletTaskType;
             }
             else
                 taskType = task.TaskType;
@@ -279,8 +268,7 @@
             Dt_Router? router = _routerService.QueryNextRoute(task.Roadway, task.TargetAddress, taskType);
             if (router == null)
             {
-                _logger.LogError("BuildOutboundCommand锛氭湭鎵惧埌绔欏彴銆恵TargetAddress}銆戜俊鎭紝浠诲姟鍙�: {TaskNum}", task.TargetAddress, task.TaskNum);
-                QuartzLogger.Error($"BuildOutboundCommand锛氭湭鎵惧埌绔欏彴銆恵task.TargetAddress}銆戜俊鎭�", task.Roadway);
+                QuartzLogHelper.LogError(_logger, "BuildOutboundCommand锛氭湭鎵惧埌绔欏彴銆恵TargetAddress}銆戜俊鎭紝浠诲姟鍙�: {TaskNum}", $"BuildOutboundCommand锛氭湭鎵惧埌绔欏彴銆恵task.TargetAddress}銆戜俊鎭�", task.Roadway, task.TargetAddress, task.TaskNum);
                 _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"鏈壘鍒扮珯鍙般�恵task.TargetAddress}銆戜俊鎭紝鏃犳硶鑾峰彇瀵瑰簲鐨勫爢鍨涙満鏀捐揣绔欏彴淇℃伅");
                 return null;
             }
@@ -293,8 +281,7 @@
             // 瑙f瀽璧峰鍦板潃锛堝簱浣嶅湴鍧�锛�
             if (!TryParseAddress(task.CurrentAddress, out short startRow, out short startColumn, out short startLayer))
             {
-                _logger.LogError("BuildOutboundCommand锛氬嚭搴撲换鍔¤捣鐐瑰湴鍧�瑙f瀽澶辫触锛岃捣鐐�: {CurrentAddress}锛屼换鍔″彿: {TaskNum}", task.CurrentAddress, task.TaskNum);
-                QuartzLogger.Error($"BuildOutboundCommand锛氬嚭搴撲换鍔¤捣鐐瑰湴鍧�瑙f瀽澶辫触锛岃捣鐐�: {task.CurrentAddress}", task.Roadway);
+                QuartzLogHelper.LogError(_logger, "BuildOutboundCommand锛氬嚭搴撲换鍔¤捣鐐瑰湴鍧�瑙f瀽澶辫触锛岃捣鐐�: {CurrentAddress}锛屼换鍔″彿: {TaskNum}", $"BuildOutboundCommand锛氬嚭搴撲换鍔¤捣鐐瑰湴鍧�瑙f瀽澶辫触锛岃捣鐐�: {task.CurrentAddress}", task.Roadway, task.CurrentAddress, task.TaskNum);
                 _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"鍑哄簱浠诲姟璧风偣閿欒锛岃捣鐐癸細銆恵task.CurrentAddress}銆�");
                 return null;
             }
@@ -304,9 +291,7 @@
             SetCommandProperty(command, "StartColumn", startColumn);
             SetCommandProperty(command, "StartLayer", startLayer);
 
-            _logger.LogInformation("BuildOutboundCommand锛氬嚭搴撳懡浠ゆ瀯寤烘垚鍔燂紝璧风偣: {StartRow}-{StartColumn}-{StartLayer}锛岀粓鐐�: {EndRow}-{EndColumn}-{EndLayer}锛屼换鍔″彿: {TaskNum}",
-                startRow, startColumn, startLayer, router.SrmRow, router.SrmColumn, router.SrmLayer, task.TaskNum);
-            QuartzLogger.Info($"BuildOutboundCommand锛氬嚭搴撳懡浠ゆ瀯寤烘垚鍔燂紝璧风偣: {startRow}-{startColumn}-{startLayer}锛岀粓鐐�: {router.SrmRow}-{router.SrmColumn}-{router.SrmLayer}", task.Roadway);
+            QuartzLogHelper.LogInfo(_logger, "BuildOutboundCommand锛氬嚭搴撳懡浠ゆ瀯寤烘垚鍔燂紝璧风偣: {StartRow}-{StartColumn}-{StartLayer}锛岀粓鐐�: {EndRow}-{EndColumn}-{EndLayer}锛屼换鍔″彿: {TaskNum}", $"BuildOutboundCommand锛氬嚭搴撳懡浠ゆ瀯寤烘垚鍔燂紝璧风偣: {startRow}-{startColumn}-{startLayer}锛岀粓鐐�: {router.SrmRow}-{router.SrmColumn}-{router.SrmLayer}", task.Roadway, startRow, startColumn, startLayer, router.SrmRow, router.SrmColumn, router.SrmLayer, task.TaskNum);
 
             return command;
         }
@@ -326,14 +311,12 @@
         /// <returns>濉厖濂界殑鍛戒护瀵硅薄</returns>
         private T? BuildRelocationCommand<T>(Dt_Task task, T command) where T : class
         {
-            _logger.LogInformation("BuildRelocationCommand锛氭瀯寤虹Щ搴撳懡浠わ紝浠诲姟鍙�: {TaskNum}", task.TaskNum);
-            QuartzLogger.Info($"BuildRelocationCommand锛氭瀯寤虹Щ搴撳懡浠わ紝浠诲姟鍙�: {task.TaskNum}", task.Roadway);
+            QuartzLogHelper.LogInfo(_logger, "BuildRelocationCommand锛氭瀯寤虹Щ搴撳懡浠わ紝浠诲姟鍙�: {TaskNum}", $"BuildRelocationCommand锛氭瀯寤虹Щ搴撳懡浠わ紝浠诲姟鍙�: {task.TaskNum}", task.Roadway, task.TaskNum);
 
             // 瑙f瀽鐩爣鍦板潃
             if (!TryParseAddress(task.NextAddress, out short endRow, out short endColumn, out short endLayer))
             {
-                _logger.LogError("BuildRelocationCommand锛氱Щ搴撲换鍔$粓鐐瑰湴鍧�瑙f瀽澶辫触锛岀粓鐐�: {NextAddress}锛屼换鍔″彿: {TaskNum}", task.NextAddress, task.TaskNum);
-                QuartzLogger.Error($"BuildRelocationCommand锛氱Щ搴撲换鍔$粓鐐瑰湴鍧�瑙f瀽澶辫触锛岀粓鐐�: {task.NextAddress}", task.Roadway);
+                QuartzLogHelper.LogError(_logger, "BuildRelocationCommand锛氱Щ搴撲换鍔$粓鐐瑰湴鍧�瑙f瀽澶辫触锛岀粓鐐�: {NextAddress}锛屼换鍔″彿: {TaskNum}", $"BuildRelocationCommand锛氱Щ搴撲换鍔$粓鐐瑰湴鍧�瑙f瀽澶辫触锛岀粓鐐�: {task.NextAddress}", task.Roadway, task.NextAddress, task.TaskNum);
                 _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"绉诲簱浠诲姟缁堢偣閿欒锛岀粓鐐癸細銆恵task.NextAddress}銆�");
                 return null;
             }
@@ -346,8 +329,7 @@
             // 瑙f瀽璧峰鍦板潃
             if (!TryParseAddress(task.CurrentAddress, out short startRow, out short startColumn, out short startLayer))
             {
-                _logger.LogError("BuildRelocationCommand锛氱Щ搴撲换鍔¤捣鐐瑰湴鍧�瑙f瀽澶辫触锛岃捣鐐�: {CurrentAddress}锛屼换鍔″彿: {TaskNum}", task.CurrentAddress, task.TaskNum);
-                QuartzLogger.Error($"BuildRelocationCommand锛氱Щ搴撲换鍔¤捣鐐瑰湴鍧�瑙f瀽澶辫触锛岃捣鐐�: {task.CurrentAddress}", task.Roadway);
+                QuartzLogHelper.LogError(_logger, "BuildRelocationCommand锛氱Щ搴撲换鍔¤捣鐐瑰湴鍧�瑙f瀽澶辫触锛岃捣鐐�: {CurrentAddress}锛屼换鍔″彿: {TaskNum}", $"BuildRelocationCommand锛氱Щ搴撲换鍔¤捣鐐瑰湴鍧�瑙f瀽澶辫触锛岃捣鐐�: {task.CurrentAddress}", task.Roadway, task.CurrentAddress, task.TaskNum);
                 _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"绉诲簱浠诲姟璧风偣閿欒锛岃捣鐐癸細銆恵task.CurrentAddress}銆�");
                 return null;
             }
@@ -357,9 +339,7 @@
             SetCommandProperty(command, "StartColumn", startColumn);
             SetCommandProperty(command, "StartLayer", startLayer);
 
-            _logger.LogInformation("BuildRelocationCommand锛氱Щ搴撳懡浠ゆ瀯寤烘垚鍔燂紝璧风偣: {StartRow}-{StartColumn}-{StartLayer}锛岀粓鐐�: {EndRow}-{EndColumn}-{EndLayer}锛屼换鍔″彿: {TaskNum}",
-                startRow, startColumn, startLayer, endRow, endColumn, endLayer, task.TaskNum);
-            QuartzLogger.Info($"BuildRelocationCommand锛氱Щ搴撳懡浠ゆ瀯寤烘垚鍔燂紝璧风偣: {startRow}-{startColumn}-{startLayer}锛岀粓鐐�: {endRow}-{endColumn}-{endLayer}", task.Roadway);
+            QuartzLogHelper.LogInfo(_logger, "BuildRelocationCommand锛氱Щ搴撳懡浠ゆ瀯寤烘垚鍔燂紝璧风偣: {StartRow}-{StartColumn}-{StartLayer}锛岀粓鐐�: {EndRow}-{EndColumn}-{EndLayer}锛屼换鍔″彿: {TaskNum}", $"BuildRelocationCommand锛氱Щ搴撳懡浠ゆ瀯寤烘垚鍔燂紝璧风偣: {startRow}-{startColumn}-{startLayer}锛岀粓鐐�: {endRow}-{endColumn}-{endLayer}", task.Roadway, startRow, startColumn, startLayer, endRow, endColumn, endLayer, task.TaskNum);
 
             return command;
         }

--
Gitblit v1.9.3