Junjie
1 天以前 852664df1caf38831793b341edcada9dd7b6c22a
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输送命令生成耗时较长,deviceNo={}, 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("输送线堵塞重规划planner完成,taskNo={}, 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) {