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