From 4ecfe88d40b1a4f42cd8bc569b679768806e289f Mon Sep 17 00:00:00 2001
From: xiazhengtongxue <133085197+xiazhengtongxue@users.noreply.github.com>
Date: 星期六, 25 四月 2026 16:25:52 +0800
Subject: [PATCH] 1

---
 Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/Task/TaskController.cs           |   12 ++++++
 Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService/TaskService.Complete.cs |   33 ++++++++++++++++
 Code/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_AGV.cs                     |   10 +++++
 Code/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/appsettings.json                             |    7 ++-
 Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_ITaskInfoService/ITaskService.cs                    |    9 ++++
 5 files changed, 67 insertions(+), 4 deletions(-)

diff --git a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_ITaskInfoService/ITaskService.cs b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_ITaskInfoService/ITaskService.cs
index 6696d46..2921306 100644
--- a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_ITaskInfoService/ITaskService.cs
+++ b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_ITaskInfoService/ITaskService.cs
@@ -225,6 +225,13 @@
         /// <param name="roadway">宸烽亾鍙�</param>
         /// <param name="targetAddress">鐩爣鍦板潃</param>
         /// <returns>瀛樺湪杩斿洖 true</returns>
-        bool HasExecutingTaskToTarget(string roadway, string targetAddress);
+        bool HasExecutingTaskToTarget(string roadway, string targetAddress);
+
+        /// <summary>
+        /// 浠诲姟鍙栨秷
+        /// </summary>
+        /// <param name="taskNum"></param>
+        /// <returns></returns>
+        WebResponseContent CancelTask(int taskNum);
     }
 }
diff --git a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/Task/TaskController.cs b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/Task/TaskController.cs
index a027af3..5b2143f 100644
--- a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/Task/TaskController.cs
+++ b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/Task/TaskController.cs
@@ -1,6 +1,7 @@
 锘縰sing Microsoft.AspNetCore.Authorization;
 using Microsoft.AspNetCore.Http;
 using Microsoft.AspNetCore.Mvc;
+using System.Threading.Channels;
 using WIDESEAWCS_Core;
 using WIDESEAWCS_Core.BaseController;
 using WIDESEAWCS_DTO.TaskInfo;
@@ -53,6 +54,17 @@
         public WebResponseContent RollbackTaskStatusToLast(int taskNum)
         {
             return Service.RollbackTaskStatusToLast(taskNum);
+        }
+
+        /// <summary>
+        /// 浠诲姟鍙栨秷
+        /// </summary>
+        /// <param name="taskNum"></param>
+        /// <returns></returns>
+        [HttpPost, Route("CancelTask"), AllowAnonymous]
+        public WebResponseContent CancelTask(int taskNum)
+        {
+            return Service.CancelTask(taskNum);
         }
     }
 }
diff --git a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService/TaskService.Complete.cs b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService/TaskService.Complete.cs
index 9b13ce6..11c75a0 100644
--- a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService/TaskService.Complete.cs
+++ b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService/TaskService.Complete.cs
@@ -1,6 +1,7 @@
 using MapsterMapper;
 using SqlSugar;
 using System.Diagnostics.CodeAnalysis;
+using System.Threading.Tasks;
 using WIDESEA_Core;
 using WIDESEAWCS_Common.TaskEnum;
 using WIDESEAWCS_Core;
@@ -176,5 +177,37 @@
         List<Dt_Task> tasks = BaseDal.QueryData(x => taskKeys.Contains(x.TaskId));
         BaseDal.DeleteAndMoveIntoHty(tasks, OperateTypeEnum.浜哄伐鍒犻櫎);
         return WebResponseContent.Instance.OK($"鎴愬姛鍒犻櫎{tasks.Count}鏉℃暟鎹�");
+    }
+
+    /// <summary>
+    /// 浠诲姟鍙栨秷
+    /// </summary>
+    /// <param name="taskNum"></param>
+    /// <returns></returns>
+    public WebResponseContent CancelTask(int taskNum)
+    {
+        WebResponseContent content = new WebResponseContent();
+        try
+        {
+            if (taskNum <= 0) return content.Error("浠诲姟缂栧彿鏃犳晥");
+
+            Dt_Task task = BaseDal.QueryFirst(x => x.TaskNum == taskNum);
+            if (task == null) return content.OK("浠诲姟涓嶅瓨鍦紝寮哄埗鍙栨秷");
+
+            task.TaskStatus = (int)TaskOutStatusEnum.OutCancel;
+
+            if (task.TaskStatus == (int)TaskInStatusEnum.InNew || task.TaskStatus == (int)TaskOutStatusEnum.OutNew)
+            {
+                bool deleteResult = BaseDal.DeleteAndMoveIntoHty(task, OperateTypeEnum.鑷姩鍒犻櫎);
+                if (!deleteResult) return content.Error("鍒犻櫎浠诲姟澶辫触");
+                return content.OK();
+            }
+            
+        }
+        catch (Exception ex)
+        {
+            content.Error($"WCS浠诲姟鍙栨秷鎺ュ彛澶辫触锛寋ex.Message}");
+        }
+        return content.Error("褰撳墠浠诲姟鍦ㄦ墽琛屼腑锛�");
     }
 }
\ No newline at end of file
diff --git a/Code/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_AGV.cs b/Code/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_AGV.cs
index c0cb8f1..b59b92f 100644
--- a/Code/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_AGV.cs
+++ b/Code/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_AGV.cs
@@ -19,6 +19,7 @@
 
         public string AGV_OutTaskComplete = WIDESEA_Core.Helper.AppSettings.Configuration["AGV_OutTaskComplete"];
         public string WCS_ReceiveTask = WIDESEA_Core.Helper.AppSettings.Configuration["WCS_ReceiveTask"];
+        public string WCS_CancelTask = WIDESEA_Core.Helper.AppSettings.Configuration["WCS_CancelTask"]; 
 
         /// <summary>
         /// 鏋佸嵎搴撳嚭鍏ュ簱鐢宠
@@ -611,6 +612,11 @@
         private async Task<AGVResponse> CancelAgvInboundTask(Dt_Task task)
         {
             AGVResponse response = new AGVResponse();
+
+            var httpResponse = _httpClientHelper.Post<WebResponseContent>(WCS_ReceiveTask, task.TaskNum.ToString());
+            if (httpResponse == null || httpResponse.Data == null || !httpResponse.Data.Status)
+                return response.Error(httpResponse?.Data?.Message ?? "涓嬪彂WCS鍙栨秷澶辫触");
+
             task.TaskStatus = (int)TaskInStatusEnum.InCancel;
             
             _unitOfWorkManage.BeginTran();
@@ -644,6 +650,10 @@
         private async Task<AGVResponse> CancelAgvOutboundTaskAsync(Dt_Task task)
         {
             AGVResponse response = new AGVResponse();
+            var httpResponse = _httpClientHelper.Post<WebResponseContent>(WCS_ReceiveTask, task.TaskNum.ToString());
+            if (httpResponse == null || httpResponse.Data == null || !httpResponse.Data.Status)
+                return response.Error(httpResponse?.Data?.Message ?? "涓嬪彂WCS澶辫触");
+
             var stockInfo = await _stockInfoService.GetStockInfoAsync(task.PalletCode);
             if (stockInfo == null)
                 return response.Error($"鏈壘鍒版墭鐩榹task.PalletCode}鐨勫簱瀛樹俊鎭�");
diff --git a/Code/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/appsettings.json b/Code/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/appsettings.json
index 8151757..699797f 100644
--- a/Code/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/appsettings.json
+++ b/Code/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/appsettings.json
@@ -62,7 +62,7 @@
   "DBSeedEnable": false,
   "PDAVersion": "4",
   "WebSocketPort": 9296,
-  "AutoOutboundTask": { 
+  "AutoOutboundTask": {
     "Enable": true, /// 鏄惁鍚敤鑷姩鍑哄簱浠诲姟
     "CheckIntervalSeconds": 300, /// 妫�鏌ラ棿闅旓紙绉掞級
     "TargetAddresses": { /// 鎸夊贩閬撳墠缂�閰嶇疆鐩爣鍦板潃锛堟敮鎸佸鍑哄簱鍙o級
@@ -76,6 +76,7 @@
   },
 
 
-  "A0GV_OutTaskComplete": "http://localhost:9999/OutTaskComplete", // 涓婃姤AGV鍑哄簱杈撻�佺嚎瀹屾垚
-  "WCS_ReceiveTask": "http://localhost:9292/api/Task/ReceiveTask" // WMS杈撻�佺嚎浠诲姟涓嬪彂
+  "AGV_OutTaskComplete": "http://localhost:9999/OutTaskComplete", // 涓婃姤AGV鍑哄簱杈撻�佺嚎瀹屾垚
+  "WCS_ReceiveTask": "http://localhost:9292/api/Task/ReceiveTask", // WMS杈撻�佺嚎浠诲姟涓嬪彂
+  "WCS_CancelTask": "http://localhost:9292/api/Task/ReceiveTask" // WCS浠诲姟鍙栨秷
 }
\ No newline at end of file

--
Gitblit v1.9.3