From 41aeff86351d1dd94fe2408175f96475f227c1b9 Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期四, 02 四月 2026 17:15:27 +0800
Subject: [PATCH] #执行优化

---
 src/main/java/com/zy/core/thread/impl/ZyStationV5Thread.java |   52 +++++++++++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 49 insertions(+), 3 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 5166a7b..09e1b79 100644
--- a/src/main/java/com/zy/core/thread/impl/ZyStationV5Thread.java
+++ b/src/main/java/com/zy/core/thread/impl/ZyStationV5Thread.java
@@ -177,7 +177,7 @@
     }
 
     @Override
-    public synchronized StationCommand getRunBlockRerouteCommand(Integer taskNo,
+    public StationCommand getRunBlockRerouteCommand(Integer taskNo,
                                                                  Integer stationId,
                                                                  Integer targetStationId,
                                                                  Integer palletSize) {
@@ -185,7 +185,7 @@
     }
 
     @Override
-    public synchronized StationCommand getRunBlockRerouteCommand(Integer taskNo,
+    public StationCommand getRunBlockRerouteCommand(Integer taskNo,
                                                                  Integer stationId,
                                                                  Integer targetStationId,
                                                                  Integer palletSize,
@@ -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);
@@ -249,7 +264,7 @@
     }
 
     @Override
-    public synchronized boolean clearPath(Integer taskNo) {
+    public boolean clearPath(Integer taskNo) {
         if (taskNo == null || taskNo <= 0) {
             return false;
         }
@@ -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