From 73569b329e4ed2293a63e5a739d5fb0314fc4fd8 Mon Sep 17 00:00:00 2001
From: yangpeixing <yangpeixing@hnkhzn.com>
Date: 星期三, 01 四月 2026 15:25:45 +0800
Subject: [PATCH] 1

---
 WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/Task/TaskController.cs |   14 +++
 WCS/WIDESEAWCS_Client/config/buttons.js                                    |    9 ++
 WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs               |    6 +
 WCS/WIDESEAWCS_Server/WIDESEAWCS_ITaskInfoService/ITaskService.cs          |    8 ++
 WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs            |   25 ++++++
 WCS/WIDESEAWCS_Client/src/extension/taskinfo/task.js                       |  141 +++++++++++++++++++++--------------
 6 files changed, 144 insertions(+), 59 deletions(-)

diff --git a/WCS/WIDESEAWCS_Client/config/buttons.js b/WCS/WIDESEAWCS_Client/config/buttons.js
index 9c5b584..5ac3638 100644
--- a/WCS/WIDESEAWCS_Client/config/buttons.js
+++ b/WCS/WIDESEAWCS_Client/config/buttons.js
@@ -173,6 +173,15 @@
     onClick: function () {
     }
 },
+{
+    name: "浠� 鍔� 鎵� 鍔� 瀹� 鎴�",
+    icon: '',
+    class: '',
+    type: 'success',
+    value: 'TaskHandCompleted',
+    onClick: function () {
+    }
+},
 ]
 
 export default buttons
\ No newline at end of file
diff --git a/WCS/WIDESEAWCS_Client/src/extension/taskinfo/task.js b/WCS/WIDESEAWCS_Client/src/extension/taskinfo/task.js
index b5d52af..7facb51 100644
--- a/WCS/WIDESEAWCS_Client/src/extension/taskinfo/task.js
+++ b/WCS/WIDESEAWCS_Client/src/extension/taskinfo/task.js
@@ -45,53 +45,53 @@
             let AgvZHTaskResendBtn = this.buttons.find(x => x.value == 'AgvZHTaskResend');
             if (AgvZHTaskResendBtn) {
                 AgvZHTaskResendBtn.onClick = function () {
-                this.$confirm("鏄惁纭閲嶅彂闃荤剨AGV鍑哄簱浠诲姟","鎵嬪姩浠诲姟閲嶅彂璀﹀憡",{
-                    confirmButtonText: "纭畾",
-                    cancelButtonText: "鍙栨秷",
-                    type: "warning",
-                    center: true,
+                    this.$confirm("鏄惁纭閲嶅彂闃荤剨AGV鍑哄簱浠诲姟", "鎵嬪姩浠诲姟閲嶅彂璀﹀憡", {
+                        confirmButtonText: "纭畾",
+                        cancelButtonText: "鍙栨秷",
+                        type: "warning",
+                        center: true,
                     }).then(() => {
                         let rows = this.$refs.table.getSelected();
                         if (rows.length == 0) return this.$error("璇烽�夋嫨鏁版嵁!");
                         if (rows.length > 1) return this.$error("璇烽�夋嫨涓�鏉℃暟鎹�!");
                         var param = rows[0].taskNum;
                         this.http
-                        .post("api/ZH_AGV/AgvZHTaskResend?taskNum="+param, "鏁版嵁澶勭悊涓�...")
-                        .then((x) => {
-                            if (x.status) {
-                            this.$Message.success('鎵嬪姩浠诲姟閲嶅彂鎴愬姛');
-                            this.refresh();
-                        } else {
-                            return this.$error(x.message);
-                        }
-                        });
+                            .post("api/ZH_AGV/AgvZHTaskResend?taskNum=" + param, "鏁版嵁澶勭悊涓�...")
+                            .then((x) => {
+                                if (x.status) {
+                                    this.$Message.success('鎵嬪姩浠诲姟閲嶅彂鎴愬姛');
+                                    this.refresh();
+                                } else {
+                                    return this.$error(x.message);
+                                }
+                            });
                     });
                 }
             }
-            
+
             let StackerCraneTaskResendingBtn = this.buttons.find(x => x.value == 'StackerCraneTaskResending');
             if (StackerCraneTaskResendingBtn) {
                 StackerCraneTaskResendingBtn.onClick = function () {
-                this.$confirm("鏄惁纭閲嶅彂鍫嗗灈鏈轰换鍔�","鎵嬪姩浠诲姟閲嶅彂璀﹀憡",{
-                    confirmButtonText: "纭畾",
-                    cancelButtonText: "鍙栨秷",
-                    type: "warning",
-                    center: true,
+                    this.$confirm("鏄惁纭閲嶅彂鍫嗗灈鏈轰换鍔�", "鎵嬪姩浠诲姟閲嶅彂璀﹀憡", {
+                        confirmButtonText: "纭畾",
+                        cancelButtonText: "鍙栨秷",
+                        type: "warning",
+                        center: true,
                     }).then(() => {
                         let rows = this.$refs.table.getSelected();
                         if (rows.length == 0) return this.$error("璇烽�夋嫨鏁版嵁!");
                         if (rows.length > 1) return this.$error("璇烽�夋嫨涓�鏉℃暟鎹�!");
                         var param = rows[0].taskNum;
                         this.http
-                        .post("api/Task/StackerCraneTaskResending?taskNum="+param, "鏁版嵁澶勭悊涓�...")
-                        .then((x) => {
-                            if (x.status) {
-                            this.$Message.success('鎵嬪姩浠诲姟閲嶅彂鎴愬姛');
-                            this.refresh();
-                        } else {
-                            return this.$error(x.message);
-                        }
-                        });
+                            .post("api/Task/StackerCraneTaskResending?taskNum=" + param, "鏁版嵁澶勭悊涓�...")
+                            .then((x) => {
+                                if (x.status) {
+                                    this.$Message.success('鎵嬪姩浠诲姟閲嶅彂鎴愬姛');
+                                    this.refresh();
+                                } else {
+                                    return this.$error(x.message);
+                                }
+                            });
                     });
                 }
             }
@@ -99,26 +99,26 @@
             let StackerCraneTaskPriorityBtn = this.buttons.find(x => x.value == 'StackerCraneTaskPriority');
             if (StackerCraneTaskPriorityBtn) {
                 StackerCraneTaskPriorityBtn.onClick = function () {
-                this.$confirm("鏄惁浼樺厛鎵ц璇ュ爢鍨涙満浠诲姟","鎵嬪姩浼樺厛浠诲姟璀﹀憡",{
-                    confirmButtonText: "纭畾",
-                    cancelButtonText: "鍙栨秷",
-                    type: "warning",
-                    center: true,
+                    this.$confirm("鏄惁浼樺厛鎵ц璇ュ爢鍨涙満浠诲姟", "鎵嬪姩浼樺厛浠诲姟璀﹀憡", {
+                        confirmButtonText: "纭畾",
+                        cancelButtonText: "鍙栨秷",
+                        type: "warning",
+                        center: true,
                     }).then(() => {
                         let rows = this.$refs.table.getSelected();
                         if (rows.length == 0) return this.$error("璇烽�夋嫨鏁版嵁!");
                         if (rows.length > 1) return this.$error("璇烽�夋嫨涓�鏉℃暟鎹�!");
                         var param = rows[0].taskNum;
                         this.http
-                        .post("api/Task/StackerCraneTaskPriority?taskNum="+param, "鏁版嵁澶勭悊涓�...")
-                        .then((x) => {
-                            if (x.status) {
-                            this.$Message.success('鎵嬪姩浼樺厛浠诲姟鎴愬姛');
-                            this.refresh();
-                        } else {
-                            return this.$error(x.message);
-                        }
-                        });
+                            .post("api/Task/StackerCraneTaskPriority?taskNum=" + param, "鏁版嵁澶勭悊涓�...")
+                            .then((x) => {
+                                if (x.status) {
+                                    this.$Message.success('鎵嬪姩浼樺厛浠诲姟鎴愬姛');
+                                    this.refresh();
+                                } else {
+                                    return this.$error(x.message);
+                                }
+                            });
                     });
                 }
             }
@@ -126,26 +126,53 @@
             let RGVTaskResendingBtn = this.buttons.find(x => x.value == 'RGVTaskResending');
             if (RGVTaskResendingBtn) {
                 RGVTaskResendingBtn.onClick = function () {
-                this.$confirm("鏄惁纭閲嶅彂RGV浠诲姟","鎵嬪姩浠诲姟閲嶅彂璀﹀憡",{
-                    confirmButtonText: "纭畾",
-                    cancelButtonText: "鍙栨秷",
-                    type: "warning",
-                    center: true,
+                    this.$confirm("鏄惁纭閲嶅彂RGV浠诲姟", "鎵嬪姩浠诲姟閲嶅彂璀﹀憡", {
+                        confirmButtonText: "纭畾",
+                        cancelButtonText: "鍙栨秷",
+                        type: "warning",
+                        center: true,
                     }).then(() => {
                         let rows = this.$refs.table.getSelected();
                         if (rows.length == 0) return this.$error("璇烽�夋嫨鏁版嵁!");
                         if (rows.length > 1) return this.$error("璇烽�夋嫨涓�鏉℃暟鎹�!");
                         var param = rows[0].taskNum;
                         this.http
-                        .post("api/Task/RGVTaskResending?taskNum="+param, "鏁版嵁澶勭悊涓�...")
-                        .then((x) => {
-                            if (x.status) {
-                            this.$Message.success('浠诲姟閲嶅彂瀹屾垚');
-                            this.refresh();
-                        } else {
-                            return this.$error(x.message);
-                        }
-                        });
+                            .post("api/Task/RGVTaskResending?taskNum=" + param, "鏁版嵁澶勭悊涓�...")
+                            .then((x) => {
+                                if (x.status) {
+                                    this.$Message.success('浠诲姟閲嶅彂瀹屾垚');
+                                    this.refresh();
+                                } else {
+                                    return this.$error(x.message);
+                                }
+                            });
+                    });
+                }
+            }
+
+            let TaskHandCompletedBtn = this.buttons.find(x => x.value == 'TaskHandCompleted');
+            if (TaskHandCompletedBtn) {
+                TaskHandCompletedBtn.onClick = function () {
+                    this.$confirm("鏄惁纭瀹屾垚浠诲姟", "鎵嬪姩浠诲姟瀹屾垚璀﹀憡", {
+                        confirmButtonText: "纭畾",
+                        cancelButtonText: "鍙栨秷",
+                        type: "warning",
+                        center: true,
+                    }).then(() => {
+                        let rows = this.$refs.table.getSelected();
+                        if (rows.length == 0) return this.$error("璇烽�夋嫨鏁版嵁!");
+                        if (rows.length > 1) return this.$error("璇烽�夋嫨涓�鏉℃暟鎹�!");
+                        var param = rows[0].taskNum;
+                        this.http
+                            .post("api/Task/ManualTaskCompleted?taskNum=" + param, "鏁版嵁澶勭悊涓�...")
+                            .then((x) => {
+                                if (x.status) {
+                                    this.$Message.success('浠诲姟鎵嬪姩瀹屾垚');
+                                    this.refresh();
+                                } else {
+                                    return this.$error(x.message);
+                                }
+                            });
                     });
                 }
             }
diff --git a/WCS/WIDESEAWCS_Server/WIDESEAWCS_ITaskInfoService/ITaskService.cs b/WCS/WIDESEAWCS_Server/WIDESEAWCS_ITaskInfoService/ITaskService.cs
index f9c9942..bf25d6f 100644
--- a/WCS/WIDESEAWCS_Server/WIDESEAWCS_ITaskInfoService/ITaskService.cs
+++ b/WCS/WIDESEAWCS_Server/WIDESEAWCS_ITaskInfoService/ITaskService.cs
@@ -311,5 +311,13 @@
         /// <param name="palletCode"></param>
         /// <returns></returns>
         WebResponseContent LedShowTask(string StationCode, string PalletCode, int TaskType);
+
+        /// <summary>
+        /// 浠诲姟鎵嬪姩瀹屾垚
+        /// </summary>
+        /// <param name="taskNum"></param>
+        /// <returns></returns>
+        Task<WebResponseContent> ManualTaskCompleted(int taskNum);
+
     }
 }
diff --git a/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/Task/TaskController.cs b/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/Task/TaskController.cs
index da98ce6..4798bb5 100644
--- a/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/Task/TaskController.cs
+++ b/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/Task/TaskController.cs
@@ -120,6 +120,8 @@
         //        return WebResponseContent.Instance.Error(ex.Message);
         //    }
         //}
+
+
         [HttpPost, HttpGet, Route("RecWMSTaskCompleted"), AllowAnonymous]
         public WebResponseContent RecWMSTaskCompleted(int taskNum)
         {
@@ -180,5 +182,17 @@
                 return WebResponseContent.Instance.Error(ex.Message);
             }
         }
+
+        /// <summary>
+        /// 浠诲姟鎵嬪姩瀹屾垚
+        /// </summary>
+        /// <param name="taskNum"></param>
+        /// <returns></returns>
+        [HttpGet, HttpPost, Route("ManualTaskCompleted"), AllowAnonymous]
+        public async Task<WebResponseContent> ManualTaskCompleted(int taskNum)
+        {
+            return await Service.ManualTaskCompleted(taskNum);
+        }
+
     }
 }
diff --git a/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs b/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs
index ff6d505..64341d2 100644
--- a/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs
+++ b/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs
@@ -1019,5 +1019,30 @@
                 return WebResponseContent.Instance.Error(ex.Message);
             }
         }
+
+        /// <summary>
+        /// 浠诲姟鎵嬪姩瀹屾垚
+        /// </summary>
+        /// <param name="taskNum"></param>
+        /// <returns></returns>
+        /// <exception cref="NotImplementedException"></exception>
+        public async Task<WebResponseContent> ManualTaskCompleted(int taskNum)
+        {
+            try
+            {
+                string url = "http://localhost:9290";
+                if (string.IsNullOrEmpty(url))
+                {
+                    return await Task.FromResult(WebResponseContent.Instance.Error($"鏈壘鍒癢CSApi鍦板潃,璇锋鏌ラ厤缃枃浠�"));
+                }
+                string response = HttpHelper.Post($"{url}/api/Task/TaskCompleted?taskNum=" + taskNum,taskNum.ToString());
+
+                return await Task.FromResult(JsonConvert.DeserializeObject<WebResponseContent>(response) ?? WebResponseContent.Instance.Error("杩斿洖閿欒"));
+            }
+            catch (Exception ex)
+            {
+                return await Task.FromResult(WebResponseContent.Instance.Error(ex.Message));
+            }
+        }
     }
 }
diff --git a/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs b/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs
index 711f6ef..93f3e86 100644
--- a/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs
+++ b/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs
@@ -2592,11 +2592,11 @@
         private void DWANDYSUpdateOutboundOrderDetails(Dt_StockInfo stockInfo, Dt_OutboundOrder inboundOrder, ref List<Dt_OutboundOrderDetail> inboundOrderDetails)
         {
             List<Dt_OutboundOrderDetail> newOutboundOrderDetails = inboundOrderDetails;
+            int CompeletedNum = inboundOrder.Details.Where(x => x.OrderDetailStatus == OrderDetailStatusEnum.Over.ObjToInt()).Count();
             foreach (var newOutboundOrderDetail in newOutboundOrderDetails)
             {
                 string BatchNo = newOutboundOrderDetail.BatchNo;
                 //inboundOrderDetail = inboundOrder.Details.FirstOrDefault(x => x.BatchNo == stockInfo.Details.FirstOrDefault()?.BatchNo&&x.LPNNo==stockInfo.PalletCode);
-
                 foreach (var item in stockInfo.Details)
                 {
                     if (newOutboundOrderDetail == null) continue;
@@ -2610,15 +2610,17 @@
                         if (newOutboundOrderDetail.OverOutQuantity == newOutboundOrderDetail.OrderQuantity)
                         {
                             newOutboundOrderDetail.OrderDetailStatus = OrderDetailStatusEnum.Over.ObjToInt();
+                            CompeletedNum++;
                         }
                         else if (newOutboundOrderDetail.OrderDetailStatus == OrderDetailStatusEnum.New.ObjToInt())
                         {
                             newOutboundOrderDetail.OrderDetailStatus = OutboundStatusEnum.鍑哄簱涓�.ObjToInt();
+                   
                             inboundOrder.OrderStatus = OutboundStatusEnum.鍑哄簱涓�.ObjToInt();
                         }
                     }
                 }
-                if (newOutboundOrderDetails.All(x => x.OrderDetailStatus == OrderDetailStatusEnum.Over.ObjToInt()))
+                if (inboundOrder.Details.Count == CompeletedNum)
                 {
                     inboundOrder.OrderStatus = OutboundStatusEnum.鍑哄簱瀹屾垚.ObjToInt();
                 }

--
Gitblit v1.9.3