From f3b64d003bc3458af3dd434e6187d3aba23a64aa Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期四, 26 三月 2026 14:35:44 +0800
Subject: [PATCH] #
---
src/main/java/com/zy/core/utils/StationOperateProcessUtils.java | 38 ++++++++++++++++++++++++++++----------
1 files changed, 28 insertions(+), 10 deletions(-)
diff --git a/src/main/java/com/zy/core/utils/StationOperateProcessUtils.java b/src/main/java/com/zy/core/utils/StationOperateProcessUtils.java
index 9ab571c..71153a4 100644
--- a/src/main/java/com/zy/core/utils/StationOperateProcessUtils.java
+++ b/src/main/java/com/zy/core/utils/StationOperateProcessUtils.java
@@ -804,17 +804,19 @@
if (taskNo == null || taskNo <= 0 || stationId == null) {
return RerouteExecutionResult.skip("invalid-station-task");
}
- boolean runBlockReroute = context.sceneType() == RerouteSceneType.RUN_BLOCK_REROUTE;
- if (runBlockReroute) {
- // 绔欑偣杩涘叆鍫靛鍚庯紝璁惧渚у彲鑳藉凡缁忔妸涔嬪墠棰勪笅鍙戠殑鍒嗘鍛戒护娓呮帀浜嗐��
- // 鍏堜綔搴熸湰鍦� session/segment 鐘舵�侊紝鍐嶆寜鏂拌矾绾块噸鍙戯紝閬垮厤琚棫鐘舵�佸弽鍚戝崱浣忋��
- if (context.cancelSessionBeforeDispatch() && stationMoveCoordinator != null) {
- stationMoveCoordinator.cancelSession(taskNo);
- }
- if (context.resetSegmentCommandsBeforeDispatch()) {
- resetSegmentMoveCommandsBeforeReroute(taskNo);
- }
+ if (stationMoveCoordinator != null) {
+ return stationMoveCoordinator.withTaskDispatchLock(taskNo,
+ () -> executeReroutePlanWithTaskLock(context, plan, stationProtocol, taskNo, stationId));
}
+ return executeReroutePlanWithTaskLock(context, plan, stationProtocol, taskNo, stationId);
+ }
+
+ private RerouteExecutionResult executeReroutePlanWithTaskLock(RerouteContext context,
+ RerouteCommandPlan plan,
+ StationProtocol stationProtocol,
+ Integer taskNo,
+ Integer stationId) {
+ boolean runBlockReroute = context.sceneType() == RerouteSceneType.RUN_BLOCK_REROUTE;
if (context.checkRecentDispatch()
&& shouldSkipIdleRecoverForRecentDispatch(taskNo, stationId)) {
return RerouteExecutionResult.skip("recent-dispatch");
@@ -848,6 +850,22 @@
return RerouteExecutionResult.skip("out-order-lock");
}
+ if (context.cancelSessionBeforeDispatch() && stationMoveCoordinator != null) {
+ // 鍒囪矾鍓嶅厛鎶婃棫 session 缃负 CANCEL_PENDING锛岃宸茬粡鎺掗槦涓殑鏃у垎娈电嚎绋嬪湪鏈�缁堝彂閫佸墠鍋滀笅銆�
+ stationMoveCoordinator.markCancelPending(taskNo, "reroute_pending");
+ }
+
+ if (runBlockReroute) {
+ // 绔欑偣杩涘叆鍫靛鍚庯紝璁惧渚у彲鑳藉凡缁忔妸涔嬪墠棰勪笅鍙戠殑鍒嗘鍛戒护娓呮帀浜嗐��
+ // 鍏堜綔搴熸湰鍦� session/segment 鐘舵�侊紝鍐嶆寜鏂拌矾绾块噸鍙戯紝閬垮厤琚棫鐘舵�佸弽鍚戝崱浣忋��
+ if (context.cancelSessionBeforeDispatch() && stationMoveCoordinator != null) {
+ stationMoveCoordinator.cancelSession(taskNo);
+ }
+ if (context.resetSegmentCommandsBeforeDispatch()) {
+ resetSegmentMoveCommandsBeforeReroute(taskNo);
+ }
+ }
+
if (!runBlockReroute
&& context.cancelSessionBeforeDispatch() && stationMoveCoordinator != null) {
stationMoveCoordinator.cancelSession(taskNo);
--
Gitblit v1.9.1