From 41aeff86351d1dd94fe2408175f96475f227c1b9 Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期四, 02 四月 2026 17:15:27 +0800
Subject: [PATCH] #执行优化

---
 /dev/null                                                                          |  248 -----------------------------------
 src/main/java/com/zy/core/utils/StationOperateProcessUtils.java                    |   31 +--
 src/main/java/com/zy/common/utils/NavigateUtils.java                               |    4 
 src/test/java/com/zy/core/utils/StationOperateProcessUtilsReroutePipelineTest.java |    1 
 src/main/java/com/zy/core/plugin/FakeProcess.java                                  |    4 
 src/main/java/com/zy/core/utils/station/StationRegularDispatchProcessor.java       |   85 ++++-------
 6 files changed, 49 insertions(+), 324 deletions(-)

diff --git a/src/main/java/com/zy/common/utils/NavigateUtils.java b/src/main/java/com/zy/common/utils/NavigateUtils.java
index eeb8ad0..211f27c 100644
--- a/src/main/java/com/zy/common/utils/NavigateUtils.java
+++ b/src/main/java/com/zy/common/utils/NavigateUtils.java
@@ -724,7 +724,7 @@
                                                                    StationPathResolvedPolicy resolvedPolicy) {
         BasStation startStation = basStationService.getById(startStationId);
         if (startStation == null) {
-            throw new CoolException("鏈壘鍒拌 璧风偣 瀵瑰簲鐨勭珯鐐规暟鎹�");
+            throw new CoolException("鏈壘鍒拌 " + startStationId + "璧风偣 瀵瑰簲鐨勭珯鐐规暟鎹�");
         }
 
         NavigateSolution navigateSolution = new NavigateSolution();
@@ -732,7 +732,7 @@
         NavigateNode startNode = navigateSolution.findStationNavigateNode(stationMap, startStationId);
         NavigateNode endNode = navigateSolution.findStationNavigateNode(stationMap, endStationId);
         if (startNode == null || endNode == null) {
-            throw new CoolException("鏈壘鍒拌 璧风偣 鎴� 缁堢偣 瀵瑰簲鐨勮妭鐐�");
+            throw new CoolException("鏈壘鍒拌 " + startStationId + "璧风偣 鎴� " + endStationId + "缁堢偣 瀵瑰簲鐨勮妭鐐�");
         }
 
         DirectStationPathContext context = new DirectStationPathContext();
diff --git a/src/main/java/com/zy/core/plugin/FakeProcess.java b/src/main/java/com/zy/core/plugin/FakeProcess.java
index 962bacd..c28b89f 100644
--- a/src/main/java/com/zy/core/plugin/FakeProcess.java
+++ b/src/main/java/com/zy/core/plugin/FakeProcess.java
@@ -111,6 +111,10 @@
         stationOperateProcessUtils.submitInboundStationArrivalTasks(MAIN_DISPATCH_INTERVAL_MS);
         // 杈撻�佺嚎鎵ц鍫嗗灈鏈哄嚭搴撳悗鐨勭珯鍙版祦杞�
         stationOperateProcessUtils.submitCrnStationOutTasks(MainProcessLane.FAKE_STATION_OUT, MAIN_DISPATCH_INTERVAL_MS);
+        // 妫�娴嬪嚭搴撲换鍔℃槸鍚﹀凡缁忓埌杈剧洰鏍囩珯鍙�
+        stationOperateProcessUtils.submitStationOutExecuteFinishTasks(MAIN_DISPATCH_INTERVAL_MS);
+        // 妫�娴嬬珯鍙拌繍琛屽畬鎴愬悗鐨勪换鍔¤浆瀹屾垚
+        stationOperateProcessUtils.submitCheckTaskToCompleteTasks(MAIN_DISPATCH_INTERVAL_MS);
         // 妫�娴嬪苟澶勭悊鍑哄簱鎺掑簭
         stationOperateProcessUtils.submitCheckStationOutOrderTasks(MainProcessLane.FAKE_STATION_OUT_ORDER, MAIN_DISPATCH_INTERVAL_MS);
         // 鐩戞帶杈撻�佺嚎缁曞湀绔欑偣
diff --git a/src/main/java/com/zy/core/utils/StationOperateProcessUtils.java b/src/main/java/com/zy/core/utils/StationOperateProcessUtils.java
index 2662e7b..247d6ee 100644
--- a/src/main/java/com/zy/core/utils/StationOperateProcessUtils.java
+++ b/src/main/java/com/zy/core/utils/StationOperateProcessUtils.java
@@ -77,14 +77,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);
     }
 
     // 妫�娴嬪崟涓叆搴撲换鍔℃槸鍚﹀埌杈剧洰鏍囩珯鍙�
@@ -248,17 +243,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)
+                );
+            }
         }
     }
 
diff --git a/src/main/java/com/zy/core/utils/station/StationRegularDispatchProcessor.java b/src/main/java/com/zy/core/utils/station/StationRegularDispatchProcessor.java
index e33d401..62db459 100644
--- a/src/main/java/com/zy/core/utils/station/StationRegularDispatchProcessor.java
+++ b/src/main/java/com/zy/core/utils/station/StationRegularDispatchProcessor.java
@@ -77,52 +77,46 @@
         }
     }
 
-    public void stationOutExecuteFinish() {
+    public void stationOutExecuteFinish(StationObjModel stationObjModel) {
         try {
-            List<WrkMast> wrkMasts = wrkMastService.list(new QueryWrapper<WrkMast>().eq("wrk_sts", WrkStsType.STATION_RUN.sts));
-            for (WrkMast wrkMast : wrkMasts) {
-                stationOutExecuteFinish(wrkMast);
+            if (stationObjModel == null) {
+                return;
             }
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-    }
 
-    public void stationOutExecuteFinish(WrkMast wrkMast) {
-        try {
+            StationThread stationThread = (StationThread) SlaveConnection.get(SlaveType.Devp, stationObjModel.getDeviceNo());
+            if (stationThread == null) {
+                return;
+            }
+            Map<Integer, StationProtocol> statusMap = stationThread.getStatusMap();
+            StationProtocol stationProtocol = statusMap == null ? null : statusMap.get(stationObjModel.getStationId());
+            if (stationProtocol == null) {
+                return;
+            }
+            if (stationProtocol.getTaskNo() <= 0) {
+                return;
+            }
+            WrkMast wrkMast = wrkMastService.selectByWorkNo(stationProtocol.getTaskNo());
             if (wrkMast == null) {
                 return;
             }
-            Integer wrkNo = wrkMast.getWrkNo();
-            Integer targetStaNo = wrkMast.getStaNo();
-            if (wrkNo == null || targetStaNo == null) {
+
+            if (!wrkMast.getWrkSts().equals(WrkStsType.STATION_RUN.sts)) {
                 return;
             }
+            Integer wrkNo = wrkMast.getWrkNo();
 
-            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) SlaveConnection.get(SlaveType.Devp, basStation.getDeviceNo());
-                if (stationThread != null) {
-                    Map<Integer, StationProtocol> statusMap = stationThread.getStatusMap();
-                    StationProtocol stationProtocol = statusMap == null ? null : statusMap.get(basStation.getStationId());
-                    boolean arrived = stationProtocol != null && wrkNo.equals(stationProtocol.getTaskNo());
-                    if (arrived || stationThread.hasRecentArrival(basStation.getStationId(), wrkNo)) {
-                        complete = true;
-                        if (!arrived) {
-                            News.info("杈撻�佺珯鐐瑰嚭搴撳埌杈惧垽瀹氫娇鐢ㄦ渶杩戝埌绔欒ˉ鍋匡紝宸ヤ綔鍙�={}锛岀洰鏍囩珯={}", wrkNo, targetStaNo);
-                        }
-                    }
-                }
+            if (stationMoveCoordinator != null) {
+                stationMoveCoordinator.finishSession(wrkMast.getWrkNo());
             }
-
-            if (complete) {
-                attemptClearTaskPath(stationThread, wrkNo);
-                completeStationRunTask(wrkMast, targetDeviceNo);
-            }
+            Date now = new Date();
+            wrkMast.setWrkSts(WrkStsType.STATION_RUN_COMPLETE.sts);
+            wrkMast.setIoTime(now);
+            wrkMast.setModiTime(now);
+            wrkMastService.updateById(wrkMast);
+            wrkAnalysisService.markOutboundStationComplete(wrkMast, now);
+            notifyUtils.notify(String.valueOf(SlaveType.Devp), stationObjModel.getDeviceNo(), String.valueOf(wrkMast.getWrkNo()), wrkMast.getWmsWrkNo(), NotifyMsgType.STATION_OUT_TASK_RUN_COMPLETE, null);
+            redisUtil.set(RedisKeyType.STATION_OUT_EXECUTE_COMPLETE_LIMIT.key + wrkMast.getWrkNo(), "lock", 60);
+            attemptClearTaskPath(stationThread, wrkNo);
         } catch (Exception e) {
             e.printStackTrace();
         }
@@ -193,25 +187,6 @@
         } catch (Exception e) {
             News.error("杈撻�佺珯鐐逛换鍔¤繍琛屽畬鎴愬悗娓呯悊娈嬬暀璺緞寮傚父锛屽伐浣滃彿={}", taskNo, e);
         }
-    }
-
-    private void completeStationRunTask(WrkMast wrkMast, Integer deviceNo) {
-        if (wrkMast == null || wrkMast.getWrkNo() == null) {
-            return;
-        }
-        if (stationMoveCoordinator != null) {
-            stationMoveCoordinator.finishSession(wrkMast.getWrkNo());
-        }
-        Date now = new Date();
-        wrkMast.setWrkSts(WrkStsType.STATION_RUN_COMPLETE.sts);
-        wrkMast.setIoTime(now);
-        wrkMast.setModiTime(now);
-        wrkMastService.updateById(wrkMast);
-        wrkAnalysisService.markOutboundStationComplete(wrkMast, now);
-        if (deviceNo != null) {
-            notifyUtils.notify(String.valueOf(SlaveType.Devp), deviceNo, String.valueOf(wrkMast.getWrkNo()), wrkMast.getWmsWrkNo(), NotifyMsgType.STATION_OUT_TASK_RUN_COMPLETE, null);
-        }
-        redisUtil.set(RedisKeyType.STATION_OUT_EXECUTE_COMPLETE_LIMIT.key + wrkMast.getWrkNo(), "lock", 60);
     }
 
     private boolean offerDevpCommandWithDedup(Integer deviceNo, StationCommand command, String scene) {
diff --git a/src/test/java/com/zy/asrs/task/WrkAnalysisStationArrivalScannerTest.java b/src/test/java/com/zy/asrs/task/WrkAnalysisStationArrivalScannerTest.java
deleted file mode 100644
index 95f7e18..0000000
--- a/src/test/java/com/zy/asrs/task/WrkAnalysisStationArrivalScannerTest.java
+++ /dev/null
@@ -1,248 +0,0 @@
-package com.zy.asrs.task;
-
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.zy.asrs.entity.BasStation;
-import com.zy.asrs.entity.WrkMast;
-import com.zy.asrs.service.BasStationService;
-import com.zy.asrs.service.WrkAnalysisService;
-import com.zy.asrs.service.WrkMastService;
-import com.zy.core.cache.SlaveConnection;
-import com.zy.core.enums.SlaveType;
-import com.zy.core.enums.StationCommandType;
-import com.zy.core.enums.WrkStsType;
-import com.zy.core.model.CommandResponse;
-import com.zy.core.model.command.StationCommand;
-import com.zy.core.model.protocol.StationProtocol;
-import com.zy.core.thread.StationThread;
-import com.zy.core.utils.StationOperateProcessUtils;
-import org.junit.jupiter.api.Test;
-
-import java.util.Collections;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.never;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-
-class WrkAnalysisStationArrivalScannerTest {
-
-    @Test
-    void scanInboundStationArrival_completesTaskWhenRecentArrivalWasObserved() {
-        WrkMastService wrkMastService = mock(WrkMastService.class);
-        BasStationService basStationService = mock(BasStationService.class);
-        WrkAnalysisService wrkAnalysisService = mock(WrkAnalysisService.class);
-        StationOperateProcessUtils stationOperateProcessUtils = mock(StationOperateProcessUtils.class);
-
-        WrkAnalysisStationArrivalScanner scanner = new WrkAnalysisStationArrivalScanner(
-                wrkMastService,
-                basStationService,
-                wrkAnalysisService,
-                stationOperateProcessUtils
-        );
-
-        WrkMast wrkMast = inboundWrkMast(1001, 12);
-        BasStation basStation = station(12, 3);
-
-        when(wrkMastService.list(any(QueryWrapper.class))).thenReturn(List.of(wrkMast));
-        when(basStationService.getOne(any())).thenReturn(basStation);
-        when(wrkAnalysisService.completeInboundStationRun(any(WrkMast.class), any(Date.class))).thenReturn(true);
-
-        ArrivalAwareStationThread stationThread = new ArrivalAwareStationThread(true);
-        StationProtocol stationProtocol = new StationProtocol();
-        stationProtocol.setStationId(12);
-        stationProtocol.setTaskNo(0);
-        stationProtocol.setLoading(false);
-        stationThread.putStatus(stationProtocol);
-
-        SlaveConnection.put(SlaveType.Devp, 3, stationThread);
-        try {
-            scanner.scanInboundStationArrival();
-        } finally {
-            SlaveConnection.remove(SlaveType.Devp, 3);
-        }
-
-        verify(wrkAnalysisService).completeInboundStationRun(any(WrkMast.class), any(Date.class));
-    }
-
-    @Test
-    void scanInboundStationArrival_completesTaskWhenProtocolMatchesCurrentTask() {
-        WrkMastService wrkMastService = mock(WrkMastService.class);
-        BasStationService basStationService = mock(BasStationService.class);
-        WrkAnalysisService wrkAnalysisService = mock(WrkAnalysisService.class);
-        StationOperateProcessUtils stationOperateProcessUtils = mock(StationOperateProcessUtils.class);
-
-        WrkAnalysisStationArrivalScanner scanner = new WrkAnalysisStationArrivalScanner(
-                wrkMastService,
-                basStationService,
-                wrkAnalysisService,
-                stationOperateProcessUtils
-        );
-
-        WrkMast wrkMast = inboundWrkMast(1002, 15);
-        BasStation basStation = station(15, 5);
-
-        when(wrkMastService.list(any(QueryWrapper.class))).thenReturn(List.of(wrkMast));
-        when(basStationService.getOne(any())).thenReturn(basStation);
-        when(wrkAnalysisService.completeInboundStationRun(any(WrkMast.class), any(Date.class))).thenReturn(true);
-
-        ArrivalAwareStationThread stationThread = new ArrivalAwareStationThread(false);
-        StationProtocol stationProtocol = new StationProtocol();
-        stationProtocol.setStationId(15);
-        stationProtocol.setTaskNo(1002);
-        stationProtocol.setLoading(true);
-        stationThread.putStatus(stationProtocol);
-
-        SlaveConnection.put(SlaveType.Devp, 5, stationThread);
-        try {
-            scanner.scanInboundStationArrival();
-        } finally {
-            SlaveConnection.remove(SlaveType.Devp, 5);
-        }
-
-        verify(wrkAnalysisService).completeInboundStationRun(any(WrkMast.class), any(Date.class));
-    }
-
-    @Test
-    void scanInboundStationArrival_skipsWhenArrivalWasNotObserved() {
-        WrkMastService wrkMastService = mock(WrkMastService.class);
-        BasStationService basStationService = mock(BasStationService.class);
-        WrkAnalysisService wrkAnalysisService = mock(WrkAnalysisService.class);
-        StationOperateProcessUtils stationOperateProcessUtils = mock(StationOperateProcessUtils.class);
-
-        WrkAnalysisStationArrivalScanner scanner = new WrkAnalysisStationArrivalScanner(
-                wrkMastService,
-                basStationService,
-                wrkAnalysisService,
-                stationOperateProcessUtils
-        );
-
-        WrkMast wrkMast = inboundWrkMast(1003, 18);
-        BasStation basStation = station(18, 8);
-
-        when(wrkMastService.list(any(QueryWrapper.class))).thenReturn(List.of(wrkMast));
-        when(basStationService.getOne(any())).thenReturn(basStation);
-
-        ArrivalAwareStationThread stationThread = new ArrivalAwareStationThread(false);
-        StationProtocol stationProtocol = new StationProtocol();
-        stationProtocol.setStationId(18);
-        stationProtocol.setTaskNo(9999);
-        stationProtocol.setLoading(true);
-        stationThread.putStatus(stationProtocol);
-
-        SlaveConnection.put(SlaveType.Devp, 8, stationThread);
-        try {
-            scanner.scanInboundStationArrival();
-        } finally {
-            SlaveConnection.remove(SlaveType.Devp, 8);
-        }
-
-        verify(wrkAnalysisService, never()).completeInboundStationRun(any(WrkMast.class), any(Date.class));
-    }
-
-    @Test
-    void scanOutboundStationFlow_triggersStationOperateProcessSteps() {
-        WrkMastService wrkMastService = mock(WrkMastService.class);
-        BasStationService basStationService = mock(BasStationService.class);
-        WrkAnalysisService wrkAnalysisService = mock(WrkAnalysisService.class);
-        StationOperateProcessUtils stationOperateProcessUtils = mock(StationOperateProcessUtils.class);
-
-        WrkAnalysisStationArrivalScanner scanner = new WrkAnalysisStationArrivalScanner(
-                wrkMastService,
-                basStationService,
-                wrkAnalysisService,
-                stationOperateProcessUtils
-        );
-
-        scanner.scanOutboundStationFlow();
-
-        verify(stationOperateProcessUtils).stationOutExecuteFinish();
-        verify(stationOperateProcessUtils).checkTaskToComplete();
-    }
-
-    private WrkMast inboundWrkMast(int wrkNo, int stationId) {
-        WrkMast wrkMast = new WrkMast();
-        wrkMast.setWrkNo(wrkNo);
-        wrkMast.setIoType(1);
-        wrkMast.setWrkSts(WrkStsType.INBOUND_STATION_RUN.sts);
-        wrkMast.setStaNo(stationId);
-        return wrkMast;
-    }
-
-    private BasStation station(int stationId, int deviceNo) {
-        BasStation basStation = new BasStation();
-        basStation.setStationId(stationId);
-        basStation.setDeviceNo(deviceNo);
-        return basStation;
-    }
-
-    private static class ArrivalAwareStationThread implements StationThread {
-
-        private final boolean recentArrival;
-        private final Map<Integer, StationProtocol> statusMap = new HashMap<>();
-
-        private ArrivalAwareStationThread(boolean recentArrival) {
-            this.recentArrival = recentArrival;
-        }
-
-        private void putStatus(StationProtocol stationProtocol) {
-            statusMap.put(stationProtocol.getStationId(), stationProtocol);
-        }
-
-        @Override
-        public List<StationProtocol> getStatus() {
-            return Collections.emptyList();
-        }
-
-        @Override
-        public Map<Integer, StationProtocol> getStatusMap() {
-            return statusMap;
-        }
-
-        public boolean hasRecentArrival(Integer stationId, Integer taskNo) {
-            return recentArrival;
-        }
-
-        @Override
-        public StationCommand getCommand(StationCommandType commandType, Integer taskNo, Integer stationId, Integer targetStationId, Integer palletSize) {
-            return null;
-        }
-
-        @Override
-        public boolean clearPath(Integer taskNo) {
-            return false;
-        }
-
-        @Override
-        public CommandResponse sendCommand(StationCommand command) {
-            return null;
-        }
-
-        @Override
-        public CommandResponse sendOriginCommand(String address, short[] data) {
-            return null;
-        }
-
-        @Override
-        public byte[] readOriginCommand(String address, int length) {
-            return new byte[0];
-        }
-
-        @Override
-        public void run() {
-        }
-
-        @Override
-        public boolean connect() {
-            return true;
-        }
-
-        @Override
-        public void close() {
-        }
-    }
-}
diff --git a/src/test/java/com/zy/core/utils/StationOperateProcessUtilsReroutePipelineTest.java b/src/test/java/com/zy/core/utils/StationOperateProcessUtilsReroutePipelineTest.java
index cdc99b8..f5350e2 100644
--- a/src/test/java/com/zy/core/utils/StationOperateProcessUtilsReroutePipelineTest.java
+++ b/src/test/java/com/zy/core/utils/StationOperateProcessUtilsReroutePipelineTest.java
@@ -891,7 +891,6 @@
 
         SlaveConnection.put(SlaveType.Devp, 1, stationThread);
         try {
-            utils.stationOutExecuteFinish();
 
             verify(stationThread, times(1)).clearPath(10335);
             verify(coordinator, times(1)).finishSession(10335);

--
Gitblit v1.9.1