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 | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++----
1 files changed, 50 insertions(+), 4 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 17bd7f8..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;
}
@@ -351,7 +366,7 @@
if (navigateUtils == null) {
return new ArrayList<>();
}
- return navigateUtils.calcByStationId(startStationId, targetStationId, taskNo, pathLenFactor);
+ return navigateUtils.calcOptimalPathByStationId(startStationId, targetStationId, taskNo, pathLenFactor);
}
private List<List<NavigateNode>> calcCandidatePathNavigateNodes(Integer taskNo,
@@ -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