From 26784989e73fc36c6315e54939d1b13a50eb5020 Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期四, 26 三月 2026 21:03:00 +0800
Subject: [PATCH] #
---
src/main/java/com/zy/core/utils/StationOperateProcessUtils.java | 56 +++++++++++++++++++++++++++++++++++++++++++++-----------
1 files changed, 45 insertions(+), 11 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..e3ece21 100644
--- a/src/main/java/com/zy/core/utils/StationOperateProcessUtils.java
+++ b/src/main/java/com/zy/core/utils/StationOperateProcessUtils.java
@@ -382,10 +382,11 @@
boolean complete = false;
Integer targetDeviceNo = null;
+ StationThread stationThread = null;
BasStation basStation = basStationService.getOne(new QueryWrapper<BasStation>().eq("station_id", targetStaNo));
if (basStation != null) {
targetDeviceNo = basStation.getDeviceNo();
- StationThread stationThread = (StationThread) SlaveConnection.get(SlaveType.Devp, basStation.getDeviceNo());
+ stationThread = (StationThread) SlaveConnection.get(SlaveType.Devp, basStation.getDeviceNo());
if (stationThread != null) {
Map<Integer, StationProtocol> statusMap = stationThread.getStatusMap();
StationProtocol stationProtocol = statusMap.get(basStation.getStationId());
@@ -396,11 +397,26 @@
}
if (complete) {
+ attemptClearTaskPath(stationThread, wrkNo);
completeStationRunTask(wrkMast, targetDeviceNo);
}
}
} catch (Exception e) {
e.printStackTrace();
+ }
+ }
+
+ private void attemptClearTaskPath(StationThread stationThread, Integer taskNo) {
+ if (stationThread == null || taskNo == null || taskNo <= 0) {
+ return;
+ }
+ try {
+ boolean cleared = stationThread.clearPath(taskNo);
+ if (cleared) {
+ News.info("杈撻�佺珯鐐逛换鍔¤繍琛屽畬鎴愬悗娓呯悊娈嬬暀璺緞锛屽伐浣滃彿={}", taskNo);
+ }
+ } catch (Exception e) {
+ News.error("杈撻�佺珯鐐逛换鍔¤繍琛屽畬鎴愬悗娓呯悊娈嬬暀璺緞寮傚父锛屽伐浣滃彿={}", taskNo, e);
}
}
@@ -804,17 +820,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 +866,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