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_TaskInfoService/RobotTaskService.cs |   91 +++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 91 insertions(+), 0 deletions(-)

diff --git a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/RobotTaskService.cs b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/RobotTaskService.cs
index 1e60a39..c7d972f 100644
--- a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/RobotTaskService.cs
+++ b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/RobotTaskService.cs
@@ -29,6 +29,7 @@
 using WIDESEAWCS_Common.TaskEnum;
 using WIDESEAWCS_Core;
 using WIDESEAWCS_Core.BaseServices;
+using WIDESEAWCS_Core.Enums;
 using WIDESEAWCS_Core.Helper;
 using WIDESEAWCS_Core.Utilities;
 using WIDESEAWCS_DTO.Stock;
@@ -70,6 +71,23 @@
             _httpClientHelper = httpClientHelper;
             _taskExecuteDetailService = taskExecuteDetailService;
             _logger = logger;
+        }
+        public override WebResponseContent DeleteData(object[] keys)
+        {
+            List<int> taskKeys = new List<int>();
+            for (int i = 0; i < keys.Length; i++)
+            {
+                taskKeys.Add(Convert.ToInt32(keys[i]));
+            }
+            List<Dt_RobotTask> tasks = BaseDal.QueryData(x => taskKeys.Contains(x.RobotTaskId));
+            BaseDal.DeleteAndMoveIntoHty(tasks, OperateTypeEnum.浜哄伐鍒犻櫎);
+            return WebResponseContent.Instance.OK($"鎴愬姛鍒犻櫎{tasks.Count}鏉℃暟鎹�");
+
+        }
+        public bool DeleteRobotTask(int id)
+        {
+            Dt_RobotTask task = BaseDal.QueryFirst(x => x.RobotTaskId == id);
+            return BaseDal.DeleteAndMoveIntoHty(task, OperateTypeEnum.鑷姩瀹屾垚);
         }
 
         public WebResponseContent ReceiveWMSTask([NotNull] WMSTaskDTO taskDTO, StockDTO stockDTO)
@@ -157,6 +175,79 @@
         }
 
         /// <summary>
+        /// 鍦ㄦ湰鍦扮洿鎺ュ垱寤烘満姊版墜浠诲姟锛屼笉璋冪敤WMS鎺ュ彛銆�
+        /// 鏍规嵁鐩爣鍦板潃瑙f瀽浠诲姟绫诲瀷锛屾瀯寤轰换鍔℃暟鎹苟鍐欏叆鏁版嵁搴撱��
+        /// </summary>
+        /// <param name="task">鍑哄簱浠诲姟瀹炰綋</param>
+        /// <returns>鎿嶄綔缁撴灉</returns>
+        public WebResponseContent CreateLocalRobotTask(Dt_Task task)
+        {
+            WebResponseContent content = new();
+            try
+            {
+                // 鏍规嵁鐩爣鍦板潃瑙f瀽浠诲姟绫诲瀷閰嶇疆閿�
+                string configKey = ResolveRobotTaskConfigKey(task.TargetAddress);
+
+                // 鏋勫缓Stock鏁版嵁
+                StockDTO stock = BuildRobotTaskStock(task, configKey);
+
+                // 鑾峰彇鎶撳彇鍜屾斁缃湴鍧�鐨勭嚎浣撻厤缃紙濡傛灉鏈夛級
+                var section = App.Configuration.GetSection("RobotAddressRules").GetSection(stock?.TargetLineNo ?? string.Empty).GetChildren().Select(c => c.Value).ToArray();
+                if (section.Length < 2)
+                    return WebResponseContent.Instance.Error($"鏈壘鍒扮嚎浣揫{stock?.TargetLineNo}]鐨勫湴鍧�閰嶇疆");
+
+                int taskType = MapConfigKeyToRobotTaskType(configKey);
+                // 鍒涘缓鏈湴鏈哄櫒浜轰换鍔�
+                Dt_RobotTask robotTask = new()
+                {
+                    RobotTaskNum = Random.Shared.Next(),
+                    RobotSourceAddress = section[0]!,
+                    RobotTargetAddress = section[1]!,
+                    RobotSourceAddressLineCode = stock?.SourceLineNo ?? string.Empty,
+                    RobotTargetAddressLineCode = stock?.TargetLineNo ?? string.Empty,
+                    RobotRoadway = stock?.TargetLineNo == "11068" ? "娉ㄦ恫缁勭洏鏈烘鎵�" : "鎹㈢洏鏈烘鎵�" ?? string.Empty, // todo
+                    RobotSourceAddressPalletCode = stock?.SourcePalletNo ?? string.Empty,
+                    RobotTargetAddressPalletCode = stock?.TargetPalletNo ?? string.Empty,
+                    RobotTaskType = taskType,
+                    RobotTaskState = (int)TaskRobotStatusEnum.RobotNew,
+                    RobotGrade = task.Grade,
+                    Creater = "WCS_Local",
+                    RobotTaskTotalNum = taskType == (int)RobotTaskTypeEnum.GroupPallet ? 48 : 1,
+                    CreateDate = DateTime.Now
+                };
+
+                BaseDal.AddData(robotTask);
+
+                _taskExecuteDetailService.AddTaskExecuteDetail(new List<int> { robotTask.RobotTaskNum }, "鏈湴鍒涘缓鏈哄櫒浜轰换鍔�");
+
+                QuartzLogHelper.LogInfo(_logger, $"鏈湴鍒涘缓鏈哄櫒浜轰换鍔℃垚鍔�,浠诲姟鍙�:銆恵robotTask.RobotTaskNum}銆�,婧愬湴鍧�:銆恵robotTask.RobotSourceAddress}銆�,鐩爣鍦板潃:銆恵robotTask.RobotTargetAddress}銆�,浠诲姟绫诲瀷:銆恵configKey}銆�", "RobotTaskService");
+
+                content = WebResponseContent.Instance.OK("鏈湴鍒涘缓鏈哄櫒浜轰换鍔℃垚鍔�", robotTask);
+            }
+            catch (Exception ex)
+            {
+                QuartzLogHelper.LogError(_logger, $"鏈湴鍒涘缓鏈哄櫒浜轰换鍔″け璐�,浠诲姟鍙�:銆恵task.TaskNum}銆�,閿欒淇℃伅:{ex.Message}", "RobotTaskService");
+                content = WebResponseContent.Instance.Error($"鏈湴鍒涘缓鏈哄櫒浜轰换鍔″け璐�,閿欒淇℃伅:{ex.Message}");
+            }
+            return content;
+        }
+
+        /// <summary>
+        /// 灏嗛厤缃敭鏄犲皠鍒版満姊版墜浠诲姟绫诲瀷鏋氫妇鍊笺��
+        /// </summary>
+        /// <param name="configKey">閰嶇疆閿悕绉�</param>
+        /// <returns>浠诲姟绫诲瀷鏋氫妇鍊�</returns>
+        public int MapConfigKeyToRobotTaskType(string? configKey)
+        {
+            return configKey switch
+            {
+                nameof(ConfigKey.CreateRobotGroupPalletTask) => (int)RobotTaskTypeEnum.GroupPallet,
+                nameof(ConfigKey.CreateRobotSplitPalletTask) => (int)RobotTaskTypeEnum.SplitPallet,
+                _ => (int)RobotTaskTypeEnum.ChangePallet
+            };
+        }
+
+        /// <summary>
         /// 鏍规嵁杈撻�佺嚎鐩爣鍦板潃瑙f瀽鏈烘鎵嬩换鍔℃帴鍙c��
         /// 瑙勫垯锛�
         /// 1. 浠庨厤缃鍙栫簿纭湴鍧�鏄犲皠锛圓ddressMap锛�

--
Gitblit v1.9.3