From 720e0926fa1c94b952c26e111206c5d6e1ed5ba2 Mon Sep 17 00:00:00 2001
From: lsh <lsh@163.com>
Date: 星期二, 21 四月 2026 15:59:49 +0800
Subject: [PATCH] Merge branch 'master' of http://47.97.1.152:5880/r/zy-wcs-master

---
 src/main/java/com/zy/core/utils/station/StationDispatchLoadSupport.java |   51 +++++++++++++++++++++++++++++++++++++--------------
 1 files changed, 37 insertions(+), 14 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 d7a77a4..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;
@@ -143,27 +144,49 @@
             List<NavigateNode> nodes = wrkMast == null
                     ? 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) {
         if (wrkNo == null || wrkNo <= 0 || loopHitResult == null || !loopHitResult.isThroughLoop()) {
             return;

--
Gitblit v1.9.1