From d0cbacfe348c5702f5e6a2d929f7e16f37d276de Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期一, 06 四月 2026 22:11:13 +0800
Subject: [PATCH] #出库检测站台空闲超时后的恢复处理

---
 src/main/java/com/zy/core/utils/StationOperateProcessUtils.java |   64 ++++++++++++++++++++++---------
 1 files changed, 45 insertions(+), 19 deletions(-)

diff --git a/src/main/java/com/zy/core/utils/StationOperateProcessUtils.java b/src/main/java/com/zy/core/utils/StationOperateProcessUtils.java
index 2662e7b..5c852ad 100644
--- a/src/main/java/com/zy/core/utils/StationOperateProcessUtils.java
+++ b/src/main/java/com/zy/core/utils/StationOperateProcessUtils.java
@@ -26,6 +26,7 @@
 import java.util.Date;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 
 @Component
 public class StationOperateProcessUtils {
@@ -77,14 +78,9 @@
         stationOutboundDispatchProcessor.dualCrnStationOutExecute();
     }
 
-    //妫�娴嬭緭閫佺珯鐐瑰嚭搴撲换鍔℃墽琛屽畬鎴�
-    public synchronized void stationOutExecuteFinish() {
-        stationRegularDispatchProcessor.stationOutExecuteFinish();
-    }
-
     // 妫�娴嬪崟涓嚭搴撲换鍔℃槸鍚﹀埌杈剧洰鏍囩珯鍙�
-    public void stationOutExecuteFinish(WrkMast wrkMast) {
-        stationRegularDispatchProcessor.stationOutExecuteFinish(wrkMast);
+    public void stationOutExecuteFinish(StationObjModel stationObjModel) {
+        stationRegularDispatchProcessor.stationOutExecuteFinish(stationObjModel);
     }
 
     // 妫�娴嬪崟涓叆搴撲换鍔℃槸鍚﹀埌杈剧洰鏍囩珯鍙�
@@ -206,7 +202,9 @@
                 if (stationProtocol == null
                         || !stationProtocol.isAutoing()
                         || !stationProtocol.isLoading()
-                        || stationProtocol.getTaskNo() <= 0) {
+                        || stationProtocol.getTaskNo() <= 0
+                        || !stationProtocol.isInEnable()
+                ) {
                     continue;
                 }
                 mainProcessTaskSubmitter.submitKeyedSerialTask(
@@ -248,17 +246,17 @@
     }
 
     public void submitStationOutExecuteFinishTasks(MainProcessLane lane, long minIntervalMs) {
-        List<WrkMast> wrkMasts = wrkMastService.list(new QueryWrapper<WrkMast>()
-                .eq("wrk_sts", WrkStsType.STATION_RUN.sts)
-                .isNotNull("sta_no"));
-        for (WrkMast wrkMast : wrkMasts) {
-            mainProcessTaskSubmitter.submitKeyedSerialTask(
-                    lane,
-                    wrkMast.getStaNo(),
-                    "stationOutExecuteFinish",
-                    minIntervalMs,
-                    () -> stationOutExecuteFinish(wrkMast)
-            );
+        List<BasDevp> basDevps = basDevpService.list(new QueryWrapper<>());
+        for (BasDevp basDevp : basDevps) {
+            for (StationObjModel stationObjModel : basDevp.getOutStationList$()) {
+                mainProcessTaskSubmitter.submitKeyedSerialTask(
+                        lane,
+                        stationObjModel.getStationId(),
+                        "stationOutExecuteFinish",
+                        minIntervalMs,
+                        () -> stationOutExecuteFinish(stationObjModel)
+                );
+            }
         }
     }
 
@@ -426,6 +424,9 @@
                 if (stationId == null) {
                     continue;
                 }
+                if (!isIdleRecoverCandidateStation(basDevp, stationId)) {
+                    continue;
+                }
                 if (!stationProtocol.isAutoing()
                         || !stationProtocol.isLoading()
                         || stationProtocol.getTaskNo() <= 0
@@ -463,7 +464,32 @@
         return stationRerouteProcessor.shouldUseRunBlockDirectReassign(wrkMast, stationId, runBlockReassignLocStationList);
     }
 
+    public boolean isIdleRecoverCandidateStation(BasDevp basDevp, Integer stationId) {
+        if (basDevp == null || stationId == null) {
+            return false;
+        }
+        return !containsStation(basDevp.getBarcodeStationList$(), stationId)
+                && !containsStation(basDevp.getInStationList$(), stationId)
+                && !containsStation(basDevp.getOutStationList$(), stationId);
+    }
+
+    private boolean containsStation(List<StationObjModel> stationList, Integer stationId) {
+        if (stationList == null || stationList.isEmpty() || stationId == null) {
+            return false;
+        }
+        for (StationObjModel stationObjModel : stationList) {
+            if (stationObjModel != null && Objects.equals(stationObjModel.getStationId(), stationId)) {
+                return true;
+            }
+        }
+        return false;
+    }
+
     private boolean shouldSkipIdleRecoverForRecentDispatch(Integer taskNo, Integer stationId) {
         return stationRerouteProcessor.shouldSkipIdleRecoverForRecentDispatch(taskNo, stationId);
     }
+
+    public void attemptClearTaskPath(StationThread stationThread, Integer taskNo) {
+        stationRegularDispatchProcessor.attemptClearTaskPath(stationThread, taskNo);
+    }
 }

--
Gitblit v1.9.1