From 71a5ae03389119dc6975d7cfb87e63601f3c5305 Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期四, 02 四月 2026 16:52:22 +0800
Subject: [PATCH] #算法优化

---
 src/main/java/com/zy/core/thread/impl/ZyStationV5Thread.java |   46 ++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 46 insertions(+), 0 deletions(-)

diff --git a/src/main/java/com/zy/core/thread/impl/ZyStationV5Thread.java b/src/main/java/com/zy/core/thread/impl/ZyStationV5Thread.java
index 0f8f76c..09e1b79 100644
--- a/src/main/java/com/zy/core/thread/impl/ZyStationV5Thread.java
+++ b/src/main/java/com/zy/core/thread/impl/ZyStationV5Thread.java
@@ -197,10 +197,12 @@
             return getCommand(StationCommandType.MOVE, taskNo, stationId, targetStationId, palletSize, pathLenFactor);
         }
 
+        long startNs = System.nanoTime();
         StationTaskLoopService taskLoopService = loadStationTaskLoopService();
         StationTaskLoopService.LoopEvaluation loopEvaluation = taskLoopService == null
                 ? new StationTaskLoopService.LoopEvaluation(taskNo, stationId, StationTaskLoopService.LoopIdentitySnapshot.empty(), 0, 0, false)
                 : taskLoopService.evaluateLoop(taskNo, stationId, true);
+        long loopEvalNs = System.nanoTime();
         log.info("杈撻�佺嚎鍫靛閲嶈鍒掔幆绾胯瘑鍒紝taskNo={}, stationId={}, scopeType={}, localStationCount={}, sourceLoopStationCount={}",
                 taskNo,
                 stationId,
@@ -208,6 +210,7 @@
                 loopEvaluation.getLoopIdentity().getLocalStationCount(),
                 loopEvaluation.getLoopIdentity().getSourceLoopStationCount());
         List<List<NavigateNode>> candidatePathList = calcCandidatePathNavigateNodes(taskNo, stationId, targetStationId, pathLenFactor);
+        long candidatePathNs = System.nanoTime();
         List<StationCommand> candidateCommandList = new ArrayList<>();
         for (List<NavigateNode> candidatePath : candidatePathList) {
             StationCommand rerouteCommand = buildMoveCommand(taskNo, stationId, targetStationId, palletSize, candidatePath);
@@ -216,6 +219,7 @@
             }
             candidateCommandList.add(rerouteCommand);
         }
+        long buildCommandNs = System.nanoTime();
 
         StationV5RunBlockReroutePlanner.PlanResult planResult = runBlockReroutePlanner.plan(
                 taskNo,
@@ -223,6 +227,17 @@
                 loopEvaluation,
                 candidateCommandList
         );
+        long planNs = System.nanoTime();
+        logRunBlockRerouteCost(taskNo,
+                stationId,
+                targetStationId,
+                candidatePathList == null ? 0 : candidatePathList.size(),
+                candidateCommandList.size(),
+                startNs,
+                loopEvalNs,
+                candidatePathNs,
+                buildCommandNs,
+                planNs);
         if (candidateCommandList.isEmpty()) {
             log.warn("杈撻�佺嚎鍫靛閲嶈鍒掑け璐ワ紝鍊欓�夎矾寰勪负绌猴紝taskNo={}, planCount={}, stationId={}, targetStationId={}",
                     taskNo, planResult.getPlanCount(), stationId, targetStationId);
@@ -423,4 +438,35 @@
             return null;
         }
     }
+
+    private void logRunBlockRerouteCost(Integer taskNo,
+                                        Integer stationId,
+                                        Integer targetStationId,
+                                        int candidatePathCount,
+                                        int candidateCommandCount,
+                                        long startNs,
+                                        long loopEvalNs,
+                                        long candidatePathNs,
+                                        long buildCommandNs,
+                                        long planNs) {
+        long totalMs = nanosToMillis(planNs - startNs);
+        if (totalMs < 1000L) {
+            return;
+        }
+        log.warn("杈撻�佺嚎鍫靛閲嶈鍒掕�楁椂杈冮暱, taskNo={}, stationId={}, targetStationId={}, total={}ms, loopEval={}ms, candidatePath={}ms, buildCommand={}ms, planner={}ms, candidatePathCount={}, candidateCommandCount={}",
+                taskNo,
+                stationId,
+                targetStationId,
+                totalMs,
+                nanosToMillis(loopEvalNs - startNs),
+                nanosToMillis(candidatePathNs - loopEvalNs),
+                nanosToMillis(buildCommandNs - candidatePathNs),
+                nanosToMillis(planNs - buildCommandNs),
+                candidatePathCount,
+                candidateCommandCount);
+    }
+
+    private long nanosToMillis(long nanos) {
+        return nanos <= 0L ? 0L : nanos / 1_000_000L;
+    }
 }

--
Gitblit v1.9.1