From 9f28e3b27caa23982a8e02fbed1b032d9245e0f7 Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期一, 13 四月 2026 08:32:52 +0800
Subject: [PATCH] #输送命令优化

---
 src/main/java/com/zy/core/utils/station/StationRerouteProcessor.java |   49 +++++++++++++++++++++++++++----------------------
 1 files changed, 27 insertions(+), 22 deletions(-)

diff --git a/src/main/java/com/zy/core/utils/station/StationRerouteProcessor.java b/src/main/java/com/zy/core/utils/station/StationRerouteProcessor.java
index 985ab4c..381aa84 100644
--- a/src/main/java/com/zy/core/utils/station/StationRerouteProcessor.java
+++ b/src/main/java/com/zy/core/utils/station/StationRerouteProcessor.java
@@ -80,6 +80,9 @@
             if (basDevp == null || basDevp.getDevpNo() == null || stationId == null) {
                 return;
             }
+            if (shouldSkipRunBlockStation(basDevp, stationId)) {
+                return;
+            }
             StationThread stationThread = (StationThread) SlaveConnection.get(SlaveType.Devp, basDevp.getDevpNo());
             if (stationThread == null) {
                 return;
@@ -114,7 +117,15 @@
             redisUtil.set(RedisKeyType.CHECK_STATION_RUN_BLOCK_LIMIT_.key + stationProtocol.getTaskNo(), "lock", 30);
 
             if (shouldUseRunBlockDirectReassign(wrkMast, stationProtocol.getStationId(), runBlockReassignLocStationList)) {
-                executeRunBlockDirectReassign(basDevp, stationThread, stationProtocol, wrkMast);
+                if (stationMoveCoordinator != null) {
+                    stationMoveCoordinator.withTaskDispatchLock(stationProtocol.getTaskNo(),
+                            () -> {
+                                executeRunBlockDirectReassign(basDevp, stationThread, stationProtocol, wrkMast);
+                                return null;
+                            });
+                } else {
+                    executeRunBlockDirectReassign(basDevp, stationThread, stationProtocol, wrkMast);
+                }
                 return;
             }
 
@@ -422,6 +433,14 @@
                 && !containsStation(basDevp.getOutStationList$(), stationId);
     }
 
+    private boolean shouldSkipRunBlockStation(BasDevp basDevp, Integer stationId) {
+        if (basDevp == null || stationId == null) {
+            return false;
+        }
+        return containsStation(basDevp.getBarcodeStationList$(), stationId)
+                || containsStation(basDevp.getInStationList$(), stationId);
+    }
+
     private boolean containsStation(List<StationObjModel> stationList, Integer stationId) {
         if (stationList == null || stationList.isEmpty() || stationId == null) {
             return false;
@@ -471,28 +490,11 @@
             return RerouteExecutionResult.skip("out-order-lock");
         }
 
-        if (context.cancelSessionBeforeDispatch() && stationMoveCoordinator != null) {
-            stationMoveCoordinator.markCancelPending(taskNo, "reroute_pending");
-        }
-
-        if (runBlockReroute) {
-            if (context.cancelSessionBeforeDispatch() && stationMoveCoordinator != null) {
-                stationMoveCoordinator.cancelSession(taskNo);
-            }
-            if (context.resetSegmentCommandsBeforeDispatch()) {
-                stationDispatchRuntimeStateSupport.signalSegmentReset(taskNo, STATION_MOVE_RESET_WAIT_MS);
-            }
-        }
-
-        if (!runBlockReroute
-                && context.cancelSessionBeforeDispatch() && stationMoveCoordinator != null) {
-            stationMoveCoordinator.cancelSession(taskNo);
-        }
         if (!isBlank(context.executionLockKey())
                 && !stationDispatchRuntimeStateSupport.tryAcquireLock(context.executionLockKey(), context.executionLockSeconds())) {
                 return RerouteExecutionResult.skip("scene-lock");
         }
-        if (!runBlockReroute && context.resetSegmentCommandsBeforeDispatch()) {
+        if (context.resetSegmentCommandsBeforeDispatch()) {
             stationDispatchRuntimeStateSupport.signalSegmentReset(taskNo, STATION_MOVE_RESET_WAIT_MS);
         }
 
@@ -504,6 +506,10 @@
         boolean offered = offerDevpCommandWithDedup(context.dispatchDeviceNo(), plan.command(), plan.dispatchScene());
         if (!offered) {
             return RerouteExecutionResult.skip("dispatch-dedup");
+        }
+        if (context.cancelSessionBeforeDispatch() && stationMoveCoordinator != null) {
+            stationMoveCoordinator.markCancelPending(taskNo, "reroute_pending");
+            stationMoveCoordinator.cancelSession(taskNo);
         }
 
         applyRerouteDispatchEffects(context, plan, clearedCommandCount);
@@ -632,9 +638,6 @@
                     currentTaskBufferCommandCount);
             return;
         }
-        if (stationMoveCoordinator != null) {
-            stationMoveCoordinator.cancelSession(wrkMast.getWrkNo());
-        }
         String response = wmsOperateUtils.applyReassignTaskLocNo(wrkMast.getWrkNo(), stationProtocol.getStationId());
         if (Cools.isEmpty(response)) {
             News.taskError(wrkMast.getWrkNo(), "璇锋眰WMS閲嶆柊鍒嗛厤搴撲綅鎺ュ彛澶辫触锛屾帴鍙f湭鍝嶅簲锛侊紒锛乺esponse锛歿}", response);
@@ -716,6 +719,8 @@
             return;
         }
         if (stationMoveCoordinator != null) {
+            stationMoveCoordinator.markCancelPending(wrkMast.getWrkNo(), "reroute_pending");
+            stationMoveCoordinator.cancelSession(wrkMast.getWrkNo());
             stationMoveCoordinator.recordDispatch(
                     wrkMast.getWrkNo(),
                     stationProtocol.getStationId(),

--
Gitblit v1.9.1