From 2825b82e8a4eca618ab3c2306de2db74a2ecbd1d Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期一, 06 四月 2026 15:54:58 +0800
Subject: [PATCH] #任务取消优化

---
 src/main/java/com/zy/asrs/controller/OpenController.java    |   23 ++++++++++-
 src/main/java/com/zy/asrs/controller/WrkMastController.java |    2 
 src/main/java/com/zy/common/service/CommonService.java      |   52 ++++++++++++++++++-------
 3 files changed, 59 insertions(+), 18 deletions(-)

diff --git a/src/main/java/com/zy/asrs/controller/OpenController.java b/src/main/java/com/zy/asrs/controller/OpenController.java
index 062ca37..b9436ce 100644
--- a/src/main/java/com/zy/asrs/controller/OpenController.java
+++ b/src/main/java/com/zy/asrs/controller/OpenController.java
@@ -27,12 +27,15 @@
 import com.zy.core.thread.StationThread;
 import com.zy.system.entity.Config;
 import com.zy.system.service.ConfigService;
+import com.zy.system.service.HighPrivilegeGrantService;
 
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.bind.annotation.*;
+
+import jakarta.servlet.http.HttpServletRequest;
 
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -60,6 +63,10 @@
     private ConfigService configService;
     @Autowired
     private DeviceConfigService deviceConfigService;
+    @Autowired
+    private HighPrivilegeGrantService highPrivilegeGrantService;
+    @Autowired
+    private HttpServletRequest request;
 
     // 绉诲簱浠诲姟
     @PostMapping("/createLocMoveTask")
@@ -137,7 +144,13 @@
         if (param == null) {
             return R.error("鍙傛暟涓嶈兘涓虹┖");
         }
-        boolean completeTask = commonService.cancelTask(param);
+        boolean directCancel = false;
+        try {
+            highPrivilegeGrantService.assertGranted(request.getHeader("token"), "鍙栨秷浠诲姟");
+            directCancel = true;
+        } catch (CoolException ignore) {
+        }
+        boolean completeTask = commonService.cancelTask(param, directCancel);
         if (completeTask) {
             return R.ok();
         }
@@ -163,7 +176,13 @@
         if (param == null) {
             return R.error("鍙傛暟涓嶈兘涓虹┖");
         }
-        CancelTaskBatchResult result = commonService.cancelTaskBatch(param);
+        boolean directCancel = false;
+        try {
+            highPrivilegeGrantService.assertGranted(request.getHeader("token"), "鍙栨秷浠诲姟");
+            directCancel = true;
+        } catch (CoolException ignore) {
+        }
+        CancelTaskBatchResult result = commonService.cancelTaskBatch(param, directCancel);
         return R.ok().add(result);
     }
 
diff --git a/src/main/java/com/zy/asrs/controller/WrkMastController.java b/src/main/java/com/zy/asrs/controller/WrkMastController.java
index 9ef23d0..535c355 100644
--- a/src/main/java/com/zy/asrs/controller/WrkMastController.java
+++ b/src/main/java/com/zy/asrs/controller/WrkMastController.java
@@ -90,7 +90,7 @@
             return R.error("鍙傛暟涓嶈兘涓虹┖");
         }
         highPrivilegeGrantService.assertGranted(request.getHeader("token"), "鍙栨秷浠诲姟");
-        return commonService.cancelTask(param) ? R.ok() : R.error("浠诲姟鍙栨秷澶辫触");
+        return commonService.cancelTask(param, true) ? R.ok() : R.error("浠诲姟鍙栨秷澶辫触");
     }
 
     private <T> void convert(Map<String, Object> map, QueryWrapper<T> wrapper){
diff --git a/src/main/java/com/zy/common/service/CommonService.java b/src/main/java/com/zy/common/service/CommonService.java
index 9169502..c34ef3d 100644
--- a/src/main/java/com/zy/common/service/CommonService.java
+++ b/src/main/java/com/zy/common/service/CommonService.java
@@ -124,7 +124,7 @@
         return true;
     }
 
-    public boolean cancelTask(CancelTaskParam param) {
+    public boolean cancelTask(CancelTaskParam param, boolean allowDirectCancel) {
         WrkMast wrkMast = null;
         Integer wrkNo = param.getWrkNo();
         String taskNo = param.getTaskNo();//wms浠诲姟鍙�
@@ -141,24 +141,42 @@
             throw new CoolException("浠诲姟涓嶅瓨鍦�");
         }
 
-        boolean cancelSuccess = false;
-        if (wrkMast.getIoType().equals(WrkIoType.IN.id) && !wrkMast.getWrkSts().equals(WrkStsType.NEW_INBOUND.sts)) {
-            cancelSuccess = true;
-        } else if (wrkMast.getIoType().equals(WrkIoType.OUT.id) && !wrkMast.getWrkSts().equals(WrkStsType.NEW_OUTBOUND.sts)) {
-            cancelSuccess = true;
-        } else if (wrkMast.getIoType().equals(WrkIoType.LOC_MOVE.id) && !wrkMast.getWrkSts().equals(WrkStsType.NEW_LOC_MOVE.sts)) {
-            cancelSuccess = true;
-        } else if (wrkMast.getIoType().equals(WrkIoType.CRN_MOVE.id) && !wrkMast.getWrkSts().equals(WrkStsType.NEW_CRN_MOVE.sts)) {
-            cancelSuccess = true;
+        if (allowDirectCancel) {
+            boolean updated = wrkMastService.update(null, new UpdateWrapper<WrkMast>()
+                    .eq("wrk_no", wrkMast.getWrkNo())
+                    .set("mk", "taskCancel")
+                    .set("modi_time", new Date()));
+            if (!updated) {
+                throw new CoolException("浠诲姟鍙栨秷澶辫触");
+            }
+            return true;
         }
 
-        if (cancelSuccess) {
+        Long expectedWrkSts;
+        if (wrkMast.getIoType().equals(WrkIoType.IN.id)) {
+            expectedWrkSts = WrkStsType.NEW_INBOUND.sts;
+        } else if (wrkMast.getIoType().equals(WrkIoType.OUT.id)) {
+            expectedWrkSts = WrkStsType.NEW_OUTBOUND.sts;
+        } else if (wrkMast.getIoType().equals(WrkIoType.LOC_MOVE.id)) {
+            expectedWrkSts = WrkStsType.NEW_LOC_MOVE.sts;
+        } else if (wrkMast.getIoType().equals(WrkIoType.CRN_MOVE.id)) {
+            expectedWrkSts = WrkStsType.NEW_CRN_MOVE.sts;
+        } else {
+            throw new CoolException("浠诲姟绫诲瀷涓嶆敮鎸佸彇娑�");
+        }
+
+        if (!expectedWrkSts.equals(wrkMast.getWrkSts())) {
             throw new CoolException("浠诲姟宸叉墽琛岋紝鍙栨秷澶辫触");
         }
 
-        wrkMast.setMk("taskCancel");
-        wrkMast.setModiTime(new Date());
-        wrkMastService.updateById(wrkMast);
+        boolean updated = wrkMastService.update(null, new UpdateWrapper<WrkMast>()
+                .eq("wrk_no", wrkMast.getWrkNo())
+                .eq("wrk_sts", expectedWrkSts)
+                .set("mk", "taskCancel")
+                .set("modi_time", new Date()));
+        if (!updated) {
+            throw new CoolException("浠诲姟鐘舵�佸凡鍙樺寲锛屽彇娑堝け璐�");
+        }
         return true;
     }
 
@@ -264,6 +282,10 @@
     }
 
     public CancelTaskBatchResult cancelTaskBatch(CancelTaskBatchParam param) {
+        return cancelTaskBatch(param, false);
+    }
+
+    public CancelTaskBatchResult cancelTaskBatch(CancelTaskBatchParam param, boolean allowDirectCancel) {
         if (param == null) {
             throw new CoolException("鍙傛暟涓嶈兘涓虹┖");
         }
@@ -283,7 +305,7 @@
 
             boolean cancelStatus = false;
             try {
-                cancelStatus = cancelTask(cancelTaskParam);
+                cancelStatus = cancelTask(cancelTaskParam, allowDirectCancel);
             } catch (Exception e) {
             }
 

--
Gitblit v1.9.1