From ed266efb662c5b8460ecc22e31a070a718f35f9c Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期二, 31 三月 2026 16:08:59 +0800
Subject: [PATCH] #地图编辑路径联通性导致算法计算失败问题修复

---
 src/main/java/com/zy/common/utils/NavigateUtils.java |   41 +++++++++++++++++++++++++++++++++++------
 1 files changed, 35 insertions(+), 6 deletions(-)

diff --git a/src/main/java/com/zy/common/utils/NavigateUtils.java b/src/main/java/com/zy/common/utils/NavigateUtils.java
index e867aa7..ee68fc0 100644
--- a/src/main/java/com/zy/common/utils/NavigateUtils.java
+++ b/src/main/java/com/zy/common/utils/NavigateUtils.java
@@ -32,6 +32,7 @@
 import org.springframework.stereotype.Component;
 
 import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.core.common.SpringUtils;
@@ -1224,13 +1225,14 @@
                     graph.computeIfAbsent(stationId, key -> new LinkedHashSet<>());
                     List<NavigateNode> nextNodeList = navigateSolution.extend_current_node(stationMap, node);
                     for (NavigateNode nextNode : safeList(nextNodeList)) {
-                        Integer nextStationId = extractStationId(nextNode);
-                        if (nextStationId == null || stationId.equals(nextStationId)) {
-                            continue;
+                        for (Integer nextStationId : resolveConnectedStationIds(stationId, nextNode)) {
+                            if (nextStationId == null || stationId.equals(nextStationId)) {
+                                continue;
+                            }
+                            graph.computeIfAbsent(nextStationId, key -> new LinkedHashSet<>());
+                            graph.get(stationId).add(nextStationId);
+                            graph.get(nextStationId).add(stationId);
                         }
-                        graph.computeIfAbsent(nextStationId, key -> new LinkedHashSet<>());
-                        graph.get(stationId).add(nextStationId);
-                        graph.get(nextStationId).add(stationId);
                     }
                 }
             }
@@ -1238,6 +1240,33 @@
         return graph;
     }
 
+    private Set<Integer> resolveConnectedStationIds(Integer currentStationId, NavigateNode nextNode) {
+        Set<Integer> stationIdSet = new LinkedHashSet<>();
+        if (nextNode == null || nextNode.getNodeValue() == null) {
+            return stationIdSet;
+        }
+        try {
+            JSONObject value = JSON.parseObject(nextNode.getNodeValue());
+            if (value == null) {
+                return stationIdSet;
+            }
+            Integer directStationId = value.getInteger("stationId");
+            if (directStationId != null && !directStationId.equals(currentStationId)) {
+                stationIdSet.add(directStationId);
+            }
+            JSONArray bridgeStationIds = value.getJSONArray("bridgeStationIds");
+            if (bridgeStationIds != null) {
+                for (Integer bridgeStationId : bridgeStationIds.toJavaList(Integer.class)) {
+                    if (bridgeStationId != null && !bridgeStationId.equals(currentStationId)) {
+                        stationIdSet.add(bridgeStationId);
+                    }
+                }
+            }
+        } catch (Exception ignore) {
+        }
+        return stationIdSet;
+    }
+
     private List<Integer> loadStationLevList() {
         List<Integer> levList = new ArrayList<>();
         if (basStationService == null) {

--
Gitblit v1.9.1