From 852664df1caf38831793b341edcada9dd7b6c22a Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期三, 06 五月 2026 19:28:33 +0800
Subject: [PATCH] #dfs

---
 src/main/java/com/zy/core/utils/StationOperateProcessUtils.java |   38 ++++++++++++++++++++++++++++++--------
 1 files changed, 30 insertions(+), 8 deletions(-)

diff --git a/src/main/java/com/zy/core/utils/StationOperateProcessUtils.java b/src/main/java/com/zy/core/utils/StationOperateProcessUtils.java
index 75e9350..9a2f7ff 100644
--- a/src/main/java/com/zy/core/utils/StationOperateProcessUtils.java
+++ b/src/main/java/com/zy/core/utils/StationOperateProcessUtils.java
@@ -32,6 +32,7 @@
 import org.springframework.stereotype.Component;
 
 import java.util.Date;
+import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.Objects;
@@ -301,22 +302,43 @@
     public void submitCrnStationOutTasks(MainProcessLane lane, long minIntervalMs) {
         List<WrkMast> wrkMasts = wrkMastService.list(new QueryWrapper<WrkMast>()
                 .eq("wrk_sts", WrkStsType.OUTBOUND_RUN_COMPLETE.sts)
-                .isNotNull("crn_no"));
+                .isNotNull("crn_no")
+                .orderByAsc("io_time", "wrk_no"));
+        MainProcessLane pendingConfirmLane = resolveStationOutPendingConfirmLane(lane);
+        LinkedHashSet<Integer> sourceStationIdSet = new LinkedHashSet<>();
         for (WrkMast wrkMast : wrkMasts) {
-            Integer laneKey = wrkMast == null ? null : wrkMast.getSourceStaNo();
-            if (laneKey == null) {
-                laneKey = wrkMast == null ? null : wrkMast.getWrkNo();
+            if (wrkMast == null || wrkMast.getWrkNo() == null) {
+                continue;
             }
             mainProcessTaskSubmitter.submitKeyedSerialTask(
-                    lane,
-                    laneKey,
-                    "crnStationOutExecute",
+                    pendingConfirmLane,
+                    wrkMast.getWrkNo(),
+                    "confirmPendingCrnStationOutDispatch",
                     minIntervalMs,
-                    () -> crnStationOutExecute(wrkMast)
+                    () -> stationOutboundDispatchProcessor.confirmPendingCrnStationOutDispatch(wrkMast)
+            );
+            if (wrkMast.getSourceStaNo() != null) {
+                sourceStationIdSet.add(wrkMast.getSourceStaNo());
+            }
+        }
+        for (Integer sourceStationId : sourceStationIdSet) {
+            mainProcessTaskSubmitter.submitKeyedSerialTask(
+                    lane,
+                    sourceStationId,
+                    "dispatchNextCrnStationOutTask",
+                    minIntervalMs,
+                    () -> stationOutboundDispatchProcessor.dispatchNextCrnStationOutTask(sourceStationId)
             );
         }
     }
 
+    private MainProcessLane resolveStationOutPendingConfirmLane(MainProcessLane lane) {
+        if (lane == MainProcessLane.FAKE_STATION_OUT) {
+            return MainProcessLane.FAKE_STATION_OUT_PENDING_CONFIRM;
+        }
+        return MainProcessLane.STATION_OUT_PENDING_CONFIRM;
+    }
+
     public void submitDualCrnStationOutTasks(long minIntervalMs) {
         submitDualCrnStationOutTasks(MainProcessLane.DUAL_STATION_OUT, minIntervalMs);
     }

--
Gitblit v1.9.1