From 852664df1caf38831793b341edcada9dd7b6c22a Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期三, 06 五月 2026 19:28:33 +0800
Subject: [PATCH] #dfs

---
 src/main/java/com/zy/core/thread/impl/ZyStationV5Thread.java |   59 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 58 insertions(+), 1 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 d563265..e0209e4 100644
--- a/src/main/java/com/zy/core/thread/impl/ZyStationV5Thread.java
+++ b/src/main/java/com/zy/core/thread/impl/ZyStationV5Thread.java
@@ -50,6 +50,7 @@
     private static final int EXECUTOR_QUEUE_WARN_THRESHOLD = 20;
     private static final int EXECUTOR_ACTIVE_WARN_THRESHOLD = 48;
     private static final long SEGMENT_EXECUTE_WARN_MS = 10_000L;
+    private static final long COMMAND_BUILD_WARN_MS = 500L;
     private static final int QUEUE_DRAIN_BATCH_SIZE = 32;
     private static final long QUEUE_IDLE_SLEEP_MS = 20L;
 
@@ -254,8 +255,25 @@
         stationCommand.setCommandType(commandType);
 
         if (commandType == StationCommandType.MOVE && !stationId.equals(targetStationId)) {
+            long startNs = System.nanoTime();
+            long calcPathStartNs = startNs;
             List<NavigateNode> nodes = calcPathNavigateNodes(taskNo, stationId, targetStationId, pathLenFactor);
-            return fillMoveCommandPath(stationCommand, nodes, taskNo, stationId, targetStationId);
+            long calcPathCostMs = nanosToMillis(System.nanoTime() - calcPathStartNs);
+            long fillCommandStartNs = System.nanoTime();
+            StationCommand builtCommand = fillMoveCommandPath(stationCommand, nodes, taskNo, stationId, targetStationId);
+            long fillCommandCostMs = nanosToMillis(System.nanoTime() - fillCommandStartNs);
+            long totalCostMs = nanosToMillis(System.nanoTime() - startNs);
+            if (totalCostMs >= COMMAND_BUILD_WARN_MS) {
+                log.warn("V5杈撻�佸懡浠ょ敓鎴愯�楁椂杈冮暱锛宒eviceNo={}, taskNo={}, stationId={}, targetStaNo={}, calcPath={}ms, fillCommand={}ms, total={}ms",
+                        deviceConfig == null ? null : deviceConfig.getDeviceNo(),
+                        taskNo,
+                        stationId,
+                        targetStationId,
+                        calcPathCostMs,
+                        fillCommandCostMs,
+                        totalCostMs);
+            }
+            return builtCommand;
         }
         return stationCommand;
     }
@@ -293,8 +311,16 @@
                 loopEvaluation.getLoopIdentity().getScopeType(),
                 loopEvaluation.getLoopIdentity().getLocalStationCount(),
                 loopEvaluation.getLoopIdentity().getSourceLoopStationCount());
+        log.info("杈撻�佺嚎鍫靛閲嶈鍒掑�欓�夎矾寰勮绠楀紑濮嬶紝taskNo={}, stationId={}, targetStationId={}, pathLenFactor={}",
+                taskNo, stationId, targetStationId, pathLenFactor);
         List<List<NavigateNode>> candidatePathList = calcCandidatePathNavigateNodes(taskNo, stationId, targetStationId, pathLenFactor);
         long candidatePathNs = System.nanoTime();
+        log.info("杈撻�佺嚎鍫靛閲嶈鍒掑�欓�夎矾寰勮绠楀畬鎴愶紝taskNo={}, stationId={}, targetStationId={}, candidatePathCount={}, costMs={}",
+                taskNo,
+                stationId,
+                targetStationId,
+                candidatePathList == null ? null : candidatePathList.size(),
+                nanosToMillis(candidatePathNs - loopEvalNs));
         List<StationCommand> candidateCommandList = new ArrayList<>();
         for (List<NavigateNode> candidatePath : candidatePathList) {
             StationCommand rerouteCommand = buildMoveCommand(taskNo, stationId, targetStationId, palletSize, candidatePath);
@@ -304,6 +330,14 @@
             candidateCommandList.add(rerouteCommand);
         }
         long buildCommandNs = System.nanoTime();
+        log.info("杈撻�佺嚎鍫靛閲嶈鍒掑�欓�夊懡浠ゆ瀯寤哄畬鎴愶紝taskNo={}, stationId={}, targetStationId={}, candidatePathCount={}, candidateCommandCount={}, costMs={}, firstCommandPath={}",
+                taskNo,
+                stationId,
+                targetStationId,
+                candidatePathList == null ? null : candidatePathList.size(),
+                candidateCommandList.size(),
+                nanosToMillis(buildCommandNs - candidatePathNs),
+                JSON.toJSONString(firstCommandPath(candidateCommandList)));
 
         StationV5RunBlockReroutePlanner.PlanResult planResult = runBlockReroutePlanner.plan(
                 taskNo,
@@ -312,6 +346,14 @@
                 candidateCommandList
         );
         long planNs = System.nanoTime();
+        log.info("杈撻�佺嚎鍫靛閲嶈鍒抪lanner瀹屾垚锛宼askNo={}, stationId={}, targetStationId={}, planCount={}, selected={}, issuedRouteCount={}, costMs={}",
+                taskNo,
+                stationId,
+                targetStationId,
+                planResult == null ? null : planResult.getPlanCount(),
+                planResult != null && planResult.getCommand() != null,
+                planResult == null || planResult.getIssuedRoutePathList() == null ? null : planResult.getIssuedRoutePathList().size(),
+                nanosToMillis(planNs - buildCommandNs));
         logRunBlockRerouteCost(taskNo,
                 stationId,
                 targetStationId,
@@ -331,7 +373,11 @@
         StationCommand rerouteCommand = planResult.getCommand();
         if (rerouteCommand != null) {
             if (taskLoopService != null) {
+                log.info("杈撻�佺嚎鍫靛閲嶈鍒掕褰曠幆绾垮紑濮嬶紝taskNo={}, stationId={}, targetStationId={}",
+                        taskNo, stationId, targetStationId);
                 taskLoopService.recordLoopIssue(loopEvaluation, "RUN_BLOCK_REROUTE");
+                log.info("杈撻�佺嚎鍫靛閲嶈鍒掕褰曠幆绾垮畬鎴愶紝taskNo={}, stationId={}, targetStationId={}",
+                        taskNo, stationId, targetStationId);
             }
             log.info("杈撻�佺嚎鍫靛閲嶈鍒掗�変腑鍊欓�夎矾绾匡紝taskNo={}, planCount={}, stationId={}, targetStationId={}, route={}",
                     taskNo, planResult.getPlanCount(), stationId, targetStationId, JSON.toJSONString(rerouteCommand.getNavigatePath()));
@@ -347,6 +393,17 @@
         return null;
     }
 
+    private List<Integer> firstCommandPath(List<StationCommand> candidateCommandList) {
+        if (candidateCommandList == null || candidateCommandList.isEmpty()) {
+            return new ArrayList<>();
+        }
+        StationCommand firstCommand = candidateCommandList.get(0);
+        if (firstCommand == null || firstCommand.getNavigatePath() == null) {
+            return new ArrayList<>();
+        }
+        return firstCommand.getNavigatePath();
+    }
+
     @Override
     public boolean clearPath(Integer taskNo) {
         if (taskNo == null || taskNo <= 0) {

--
Gitblit v1.9.1