From decd02709b7ef82502b6f574823720b41df4132b Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期二, 24 三月 2026 16:49:42 +0800
Subject: [PATCH] refactor: add station reroute shared types
---
src/main/java/com/zy/core/utils/StationOperateProcessUtils.java | 65 ++++++++++++++++++++++++++++++++
1 files changed, 65 insertions(+), 0 deletions(-)
diff --git a/src/main/java/com/zy/core/utils/StationOperateProcessUtils.java b/src/main/java/com/zy/core/utils/StationOperateProcessUtils.java
index 94b122b..706c497 100644
--- a/src/main/java/com/zy/core/utils/StationOperateProcessUtils.java
+++ b/src/main/java/com/zy/core/utils/StationOperateProcessUtils.java
@@ -1434,6 +1434,9 @@
}
StationTaskIdleTrack idleTrack = touchStationTaskIdleTrack(stationProtocol.getTaskNo(), stationProtocol.getStationId());
+ if (shouldSkipIdleRecoverForRecentDispatch(stationProtocol.getTaskNo(), stationProtocol.getStationId())) {
+ return;
+ }
if (idleTrack == null || !idleTrack.isTimeout(STATION_IDLE_RECOVER_SECONDS)) {
return;
}
@@ -1519,6 +1522,29 @@
}
return Objects.equals(wrkMast.getWrkSts(), WrkStsType.INBOUND_STATION_RUN.sts)
|| Objects.equals(wrkMast.getWrkSts(), WrkStsType.STATION_RUN.sts);
+ }
+
+ private boolean shouldSkipIdleRecoverForRecentDispatch(Integer taskNo, Integer stationId) {
+ if (stationMoveCoordinator == null || taskNo == null || taskNo <= 0 || stationId == null) {
+ return false;
+ }
+ StationMoveSession session = stationMoveCoordinator.loadSession(taskNo);
+ if (session == null || !session.isActive() || session.getLastIssuedAt() == null) {
+ return false;
+ }
+ if (!Objects.equals(stationId, session.getCurrentStationId())
+ && !Objects.equals(stationId, session.getDispatchStationId())) {
+ return false;
+ }
+ long elapsedMs = System.currentTimeMillis() - session.getLastIssuedAt();
+ long thresholdMs = STATION_IDLE_RECOVER_SECONDS * 1000L;
+ if (elapsedMs >= thresholdMs) {
+ return false;
+ }
+ saveStationTaskIdleTrack(new StationTaskIdleTrack(taskNo, stationId, System.currentTimeMillis()));
+ News.info("杈撻�佺珯鐐逛换鍔″垰瀹屾垚鍛戒护涓嬪彂锛屽凡璺宠繃鍋滅暀閲嶇畻銆傜珯鐐瑰彿={}锛屽伐浣滃彿={}锛岃窛涓婃涓嬪彂={}ms锛宺outeVersion={}",
+ stationId, taskNo, elapsedMs, session.getRouteVersion());
+ return true;
}
private void resetSegmentMoveCommandsBeforeReroute(Integer taskNo) {
@@ -1914,6 +1940,45 @@
return pathLenFactor;
}
+ enum RerouteSceneType {
+ RUN_BLOCK_REROUTE,
+ IDLE_RECOVER,
+ OUT_ORDER,
+ WATCH_CIRCLE
+ }
+
+ static final class RerouteDecision {
+ private final boolean skip;
+ private final String skipReason;
+ private final Integer targetStationId;
+
+ private RerouteDecision(boolean skip, String skipReason, Integer targetStationId) {
+ this.skip = skip;
+ this.skipReason = skipReason;
+ this.targetStationId = targetStationId;
+ }
+
+ static RerouteDecision skip(String reason) {
+ return new RerouteDecision(true, reason, null);
+ }
+
+ static RerouteDecision proceed(Integer targetStationId) {
+ return new RerouteDecision(false, null, targetStationId);
+ }
+
+ boolean skip() {
+ return skip;
+ }
+
+ String skipReason() {
+ return skipReason;
+ }
+
+ Integer targetStationId() {
+ return targetStationId;
+ }
+ }
+
private static class OutOrderDispatchDecision {
private final Integer targetStationId;
private final boolean circle;
--
Gitblit v1.9.1