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

---
 src/main/java/com/zy/common/utils/NavigateUtils.java |   54 ++++++++++++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 50 insertions(+), 4 deletions(-)

diff --git a/src/main/java/com/zy/common/utils/NavigateUtils.java b/src/main/java/com/zy/common/utils/NavigateUtils.java
index 29a69ac..98da343 100644
--- a/src/main/java/com/zy/common/utils/NavigateUtils.java
+++ b/src/main/java/com/zy/common/utils/NavigateUtils.java
@@ -2165,10 +2165,7 @@
             }
         }
         long stepStartNs = System.nanoTime();
-        Map<Integer, StationTaskTraceVo> fallbackTraceMap = Collections.emptyMap();
-        if (traceMap.isEmpty()) {
-            fallbackTraceMap = loadFallbackActiveTraceMap(null, statusMap, traceMap.keySet());
-        }
+        Map<Integer, StationTaskTraceVo> fallbackTraceMap = buildProtocolFallbackTraceMap(statusMap, traceMap.keySet());
         if (stepCostMap != null) {
             stepCostMap.put("loadFallbackTraces", elapsedMillis(stepStartNs));
         }
@@ -2188,6 +2185,55 @@
                 || StationTaskTraceRegistry.STATUS_REROUTED.equals(status);
     }
 
+    private Map<Integer, StationTaskTraceVo> buildProtocolFallbackTraceMap(Map<Integer, StationProtocol> statusMap,
+                                                                            Set<Integer> existingTaskNoSet) {
+        if (statusMap == null || statusMap.isEmpty()) {
+            return Collections.emptyMap();
+        }
+        Map<Integer, StationTaskTraceVo> result = new LinkedHashMap<>();
+        for (StationProtocol protocol : statusMap.values()) {
+            if (protocol == null || protocol.getTaskNo() == null || protocol.getTaskNo() <= 0) {
+                continue;
+            }
+            if (!Boolean.TRUE.equals(protocol.isLoading())) {
+                continue;
+            }
+            if (existingTaskNoSet != null && existingTaskNoSet.contains(protocol.getTaskNo())) {
+                continue;
+            }
+            Integer stationId = protocol.getStationId();
+            Integer targetStaNo = protocol.getTargetStaNo();
+            if (stationId == null || targetStaNo == null || stationId.equals(targetStaNo)) {
+                continue;
+            }
+            List<Integer> path = new ArrayList<>();
+            path.add(stationId);
+            path.add(targetStaNo);
+            List<Integer> pendingStationIds = new ArrayList<>();
+            pendingStationIds.add(targetStaNo);
+            StationTaskTraceVo vo = new StationTaskTraceVo();
+            vo.setTaskNo(protocol.getTaskNo());
+            vo.setThreadImpl("PROTOCOL_FALLBACK");
+            vo.setStatus(StationTaskTraceRegistry.STATUS_RUNNING);
+            vo.setTraceVersion(1);
+            vo.setStartStationId(stationId);
+            vo.setCurrentStationId(stationId);
+            vo.setFinalTargetStationId(targetStaNo);
+            vo.setFullPathStationIds(path);
+            vo.setIssuedStationIds(path);
+            vo.setPassedStationIds(Collections.emptyList());
+            vo.setPendingStationIds(pendingStationIds);
+            vo.setLatestIssuedSegmentPath(path);
+            vo.setSegmentList(Collections.emptyList());
+            vo.setIssuedSegmentCount(0);
+            vo.setTotalSegmentCount(1);
+            vo.setUpdatedAt(System.currentTimeMillis());
+            vo.setEvents(Collections.emptyList());
+            result.put(protocol.getTaskNo(), vo);
+        }
+        return result;
+    }
+
     private Map<Integer, StationTaskTraceVo> loadFallbackActiveTraceMap(Integer currentTaskNo,
                                                                         Map<Integer, StationProtocol> statusMap,
                                                                         Set<Integer> existingTaskNoSet) {

--
Gitblit v1.9.1