From 45052042f06689096093fc86cae36560b2eeb1f0 Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期四, 02 四月 2026 15:38:48 +0800
Subject: [PATCH] #优化运行速度

---
 src/main/java/com/zy/core/utils/station/StationOutboundDispatchProcessor.java |  198 ++++++++++++++++++++++++++-----------------------
 1 files changed, 105 insertions(+), 93 deletions(-)

diff --git a/src/main/java/com/zy/core/utils/station/StationOutboundDispatchProcessor.java b/src/main/java/com/zy/core/utils/station/StationOutboundDispatchProcessor.java
index 644090a..b5d654e 100644
--- a/src/main/java/com/zy/core/utils/station/StationOutboundDispatchProcessor.java
+++ b/src/main/java/com/zy/core/utils/station/StationOutboundDispatchProcessor.java
@@ -53,114 +53,126 @@
 
     public void crnStationOutExecute() {
         try {
-            DispatchLimitConfig baseLimitConfig =
-                    stationDispatchLoadSupport.getDispatchLimitConfig(null, null);
-            int[] currentStationTaskCountRef = new int[]{stationDispatchLoadSupport.countCurrentStationTask()};
-            LoadGuardState loadGuardState =
-                    stationDispatchLoadSupport.buildLoadGuardState(baseLimitConfig);
-
             List<WrkMast> wrkMasts = wrkMastService.list(new QueryWrapper<WrkMast>()
                     .eq("wrk_sts", WrkStsType.OUTBOUND_RUN_COMPLETE.sts)
                     .isNotNull("crn_no"));
-            List<Integer> outOrderList = stationOutboundDecisionSupport.getAllOutOrderList();
-
             for (WrkMast wrkMast : wrkMasts) {
-                Object infoObj = redisUtil.get(RedisKeyType.CRN_OUT_TASK_COMPLETE_STATION_INFO.key + wrkMast.getWrkNo());
-                if (infoObj == null) {
-                    News.info("鍑哄簱浠诲姟{}鏁版嵁缂撳瓨涓嶅瓨鍦�", wrkMast.getWrkNo());
-                    continue;
-                }
+                crnStationOutExecute(wrkMast);
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
 
-                StationObjModel stationObjModel = JSON.parseObject(infoObj.toString(), StationObjModel.class);
-                StationThread stationThread = (StationThread) SlaveConnection.get(SlaveType.Devp, stationObjModel.getDeviceNo());
-                if (stationThread == null) {
-                    continue;
-                }
+    public void crnStationOutExecute(WrkMast wrkMast) {
+        try {
+            if (wrkMast == null || wrkMast.getWrkNo() == null) {
+                return;
+            }
 
-                Map<Integer, StationProtocol> stationMap = stationThread.getStatusMap();
-                StationProtocol stationProtocol = stationMap.get(stationObjModel.getStationId());
-                if (stationProtocol == null) {
-                    continue;
-                }
+            Object infoObj = redisUtil.get(RedisKeyType.CRN_OUT_TASK_COMPLETE_STATION_INFO.key + wrkMast.getWrkNo());
+            if (infoObj == null) {
+                News.info("鍑哄簱浠诲姟{}鏁版嵁缂撳瓨涓嶅瓨鍦�", wrkMast.getWrkNo());
+                return;
+            }
 
-                Object lock = redisUtil.get(RedisKeyType.STATION_OUT_EXECUTE_LIMIT.key + stationProtocol.getStationId());
-                if (lock != null) {
-                    continue;
-                }
+            StationObjModel stationObjModel = JSON.parseObject(infoObj.toString(), StationObjModel.class);
+            if (stationObjModel == null || stationObjModel.getDeviceNo() == null || stationObjModel.getStationId() == null) {
+                return;
+            }
 
-                if (stationProtocol.isAutoing()
-                        && stationProtocol.isLoading()
-                        && stationProtocol.getTaskNo() == 0) {
-                    Double pathLenFactor = stationOutboundDecisionSupport.resolveOutboundPathLenFactor(wrkMast);
-                    OutOrderDispatchDecision dispatchDecision =
-                            stationOutboundDecisionSupport.resolveOutboundDispatchDecision(
-                                    stationProtocol.getStationId(),
-                                    wrkMast,
-                                    outOrderList,
-                                    pathLenFactor
-                            );
-                    Integer moveStaNo = dispatchDecision == null ? null : dispatchDecision.getTargetStationId();
-                    if (moveStaNo == null) {
-                        continue;
-                    }
+            StationThread stationThread = (StationThread) SlaveConnection.get(SlaveType.Devp, stationObjModel.getDeviceNo());
+            if (stationThread == null) {
+                return;
+            }
 
-                    DispatchLimitConfig limitConfig =
-                            stationDispatchLoadSupport.getDispatchLimitConfig(stationProtocol.getStationId(), moveStaNo);
-                    LoopHitResult loopHitResult =
-                            stationDispatchLoadSupport.findPathLoopHit(
-                                    limitConfig,
-                                    stationProtocol.getStationId(),
-                                    moveStaNo,
-                                    loadGuardState,
-                                    wrkMast,
-                                    pathLenFactor
-                            );
-                    if (stationDispatchLoadSupport.isDispatchBlocked(
-                            limitConfig,
-                            currentStationTaskCountRef[0],
-                            loadGuardState,
-                            loopHitResult.isThroughLoop())) {
-                        return;
-                    }
+            Map<Integer, StationProtocol> stationMap = stationThread.getStatusMap();
+            StationProtocol stationProtocol = stationMap == null ? null : stationMap.get(stationObjModel.getStationId());
+            if (stationProtocol == null) {
+                return;
+            }
 
-                    StationCommand command = stationOutboundDecisionSupport.buildOutboundMoveCommand(
-                            stationThread,
-                            wrkMast,
+            Object lock = redisUtil.get(RedisKeyType.STATION_OUT_EXECUTE_LIMIT.key + stationProtocol.getStationId());
+            if (lock != null) {
+                return;
+            }
+
+            if (!(stationProtocol.isAutoing()
+                    && stationProtocol.isLoading()
+                    && stationProtocol.getTaskNo() == 0)) {
+                return;
+            }
+
+            Double pathLenFactor = stationOutboundDecisionSupport.resolveOutboundPathLenFactor(wrkMast);
+            List<Integer> outOrderList = stationOutboundDecisionSupport.getAllOutOrderList();
+            OutOrderDispatchDecision dispatchDecision =
+                    stationOutboundDecisionSupport.resolveOutboundDispatchDecision(
                             stationProtocol.getStationId(),
-                            moveStaNo,
+                            wrkMast,
+                            outOrderList,
                             pathLenFactor
                     );
-                    if (command == null) {
-                        News.taskInfo(wrkMast.getWrkNo(), "鑾峰彇杈撻�佺嚎鍛戒护澶辫触");
-                        continue;
-                    }
+            Integer moveStaNo = dispatchDecision == null ? null : dispatchDecision.getTargetStationId();
+            if (moveStaNo == null) {
+                return;
+            }
 
-                    Date now = new Date();
-                    wrkMast.setWrkSts(WrkStsType.STATION_RUN.sts);
-                    wrkMast.setSystemMsg("");
-                    wrkMast.setIoTime(now);
-                    wrkMast.setModiTime(now);
-                    if (wrkMastService.updateById(wrkMast)) {
-                        wrkAnalysisService.markOutboundStationStart(wrkMast, now);
-                        boolean offered = offerDevpCommandWithDedup(stationObjModel.getDeviceNo(), command, "crnStationOutExecute");
-                        if (offered && stationMoveCoordinator != null) {
-                            stationMoveCoordinator.recordDispatch(
-                                    wrkMast.getWrkNo(),
-                                    stationProtocol.getStationId(),
-                                    "crnStationOutExecute",
-                                    command,
-                                    false
-                            );
-                        }
-                        News.info("杈撻�佺珯鐐瑰嚭搴撳懡浠や笅鍙戞垚鍔燂紝绔欑偣鍙�={}锛屽伐浣滃彿={}锛屽懡浠ゆ暟鎹�={}",
-                                stationProtocol.getStationId(), wrkMast.getWrkNo(), JSON.toJSONString(command));
-                        redisUtil.set(RedisKeyType.STATION_OUT_EXECUTE_LIMIT.key + stationProtocol.getStationId(), "lock", 5);
-                        redisUtil.del(RedisKeyType.CRN_OUT_TASK_COMPLETE_STATION_INFO.key + wrkMast.getWrkNo());
-                        currentStationTaskCountRef[0]++;
-                        loadGuardState.reserveLoopTask(loopHitResult.getLoopNo());
-                        stationDispatchLoadSupport.saveLoopLoadReserve(wrkMast.getWrkNo(), loopHitResult);
-                    }
+            DispatchLimitConfig limitConfig =
+                    stationDispatchLoadSupport.getDispatchLimitConfig(stationProtocol.getStationId(), moveStaNo);
+            int currentStationTaskCount = stationDispatchLoadSupport.countCurrentStationTask();
+            LoadGuardState loadGuardState = stationDispatchLoadSupport.buildLoadGuardState(limitConfig);
+            LoopHitResult loopHitResult =
+                    stationDispatchLoadSupport.findPathLoopHit(
+                            limitConfig,
+                            stationProtocol.getStationId(),
+                            moveStaNo,
+                            loadGuardState,
+                            wrkMast,
+                            pathLenFactor
+                    );
+            if (stationDispatchLoadSupport.isDispatchBlocked(
+                    limitConfig,
+                    currentStationTaskCount,
+                    loadGuardState,
+                    loopHitResult.isThroughLoop())) {
+                return;
+            }
+
+            StationCommand command = stationOutboundDecisionSupport.buildOutboundMoveCommand(
+                    stationThread,
+                    wrkMast,
+                    stationProtocol.getStationId(),
+                    moveStaNo,
+                    pathLenFactor
+            );
+            if (command == null) {
+                News.taskInfo(wrkMast.getWrkNo(), "鑾峰彇杈撻�佺嚎鍛戒护澶辫触");
+                return;
+            }
+
+            Date now = new Date();
+            wrkMast.setWrkSts(WrkStsType.STATION_RUN.sts);
+            wrkMast.setSystemMsg("");
+            wrkMast.setIoTime(now);
+            wrkMast.setModiTime(now);
+            if (wrkMastService.updateById(wrkMast)) {
+                wrkAnalysisService.markOutboundStationStart(wrkMast, now);
+                boolean offered = offerDevpCommandWithDedup(stationObjModel.getDeviceNo(), command, "crnStationOutExecute");
+                if (offered && stationMoveCoordinator != null) {
+                    stationMoveCoordinator.recordDispatch(
+                            wrkMast.getWrkNo(),
+                            stationProtocol.getStationId(),
+                            "crnStationOutExecute",
+                            command,
+                            false
+                    );
                 }
+                News.info("杈撻�佺珯鐐瑰嚭搴撳懡浠や笅鍙戞垚鍔燂紝绔欑偣鍙�={}锛屽伐浣滃彿={}锛屽懡浠ゆ暟鎹�={}",
+                        stationProtocol.getStationId(), wrkMast.getWrkNo(), JSON.toJSONString(command));
+                redisUtil.set(RedisKeyType.STATION_OUT_EXECUTE_LIMIT.key + stationProtocol.getStationId(), "lock", 5);
+                redisUtil.del(RedisKeyType.CRN_OUT_TASK_COMPLETE_STATION_INFO.key + wrkMast.getWrkNo());
+                loadGuardState.reserveLoopTask(loopHitResult.getLoopNo());
+                stationDispatchLoadSupport.saveLoopLoadReserve(wrkMast.getWrkNo(), loopHitResult);
             }
         } catch (Exception e) {
             e.printStackTrace();

--
Gitblit v1.9.1