From 89433d782a834ae4ab1835a0b70fa16340bbbd49 Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期一, 13 四月 2026 19:41:20 +0800
Subject: [PATCH] #算法耗时优化

---
 src/main/java/com/zy/core/utils/station/StationDispatchLoadSupport.java |   57 ++++++++++++++++++++++++++++++++++++++++-----------------
 1 files changed, 40 insertions(+), 17 deletions(-)

diff --git a/src/main/java/com/zy/core/utils/station/StationDispatchLoadSupport.java b/src/main/java/com/zy/core/utils/station/StationDispatchLoadSupport.java
index 55d951c..ac7c568 100644
--- a/src/main/java/com/zy/core/utils/station/StationDispatchLoadSupport.java
+++ b/src/main/java/com/zy/core/utils/station/StationDispatchLoadSupport.java
@@ -24,6 +24,7 @@
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
+import java.util.ArrayList;
 import java.util.List;
 import java.util.Locale;
 import java.util.Map;
@@ -141,27 +142,49 @@
 
         try {
             List<NavigateNode> nodes = wrkMast == null
-                    ? navigateUtils.calcByStationId(sourceStationId, targetStationId)
+                    ? navigateUtils.calcOptimalPathByStationId(sourceStationId, targetStationId, null, null)
                     : calcOutboundNavigatePath(wrkMast, sourceStationId, targetStationId, pathLenFactor);
-            if (nodes == null || nodes.isEmpty()) {
-                return LoopHitResult.noHit();
-            }
-
-            for (NavigateNode node : nodes) {
-                Integer stationId = getStationIdFromNode(node);
-                if (stationId == null) {
-                    continue;
-                }
-                Integer loopNo = loadGuardState.getStationLoopNoMap().get(stationId);
-                if (loopNo != null) {
-                    return new LoopHitResult(true, loopNo, stationId);
-                }
-            }
+            return findPathLoopHitByNavigateNodes(nodes, loadGuardState);
         } catch (Exception ignore) {
             return LoopHitResult.noHit();
         }
+    }
 
+    public LoopHitResult findPathLoopHitByNavigatePath(List<Integer> navigatePath,
+                                                       LoadGuardState loadGuardState) {
+        if (navigatePath == null || navigatePath.isEmpty()) {
+            return LoopHitResult.noHit();
+        }
+        if (loadGuardState == null || loadGuardState.getStationLoopNoMap().isEmpty()) {
+            return LoopHitResult.noHit();
+        }
+
+        for (Integer stationId : navigatePath) {
+            if (stationId == null) {
+                continue;
+            }
+            Integer loopNo = loadGuardState.getStationLoopNoMap().get(stationId);
+            if (loopNo != null) {
+                return new LoopHitResult(true, loopNo, stationId);
+            }
+        }
         return LoopHitResult.noHit();
+    }
+
+    public LoopHitResult findPathLoopHitByNavigateNodes(List<NavigateNode> nodes,
+                                                        LoadGuardState loadGuardState) {
+        if (nodes == null || nodes.isEmpty()) {
+            return LoopHitResult.noHit();
+        }
+
+        List<Integer> navigatePath = new ArrayList<>();
+        for (NavigateNode node : nodes) {
+            Integer stationId = getStationIdFromNode(node);
+            if (stationId != null) {
+                navigatePath.add(stationId);
+            }
+        }
+        return findPathLoopHitByNavigatePath(navigatePath, loadGuardState);
     }
 
     public void saveLoopLoadReserve(Integer wrkNo, LoopHitResult loopHitResult) {
@@ -213,9 +236,9 @@
         Double normalizedFactor = normalizePathLenFactor(pathLenFactor);
         Integer currentTaskNo = wrkMast == null ? null : wrkMast.getWrkNo();
         if (currentTaskNo == null) {
-            return navigateUtils.calcByStationId(sourceStationId, targetStationId, normalizedFactor);
+            return navigateUtils.calcOptimalPathByStationId(sourceStationId, targetStationId, null, normalizedFactor);
         }
-        return navigateUtils.calcByStationId(sourceStationId, targetStationId, currentTaskNo, normalizedFactor);
+        return navigateUtils.calcOptimalPathByStationId(sourceStationId, targetStationId, currentTaskNo, normalizedFactor);
     }
 
     private Integer getStationIdFromNode(NavigateNode node) {

--
Gitblit v1.9.1