Junjie
昨天 9c5b9144ed8ed3190a21c4cb66b80e1ed9b7c954
#预调度优化
20个文件已删除
1个文件已修改
3319 ■■■■■ 已修改文件
src/main/java/com/zy/core/utils/CrnOperateProcessUtils.java 140 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/test/java/com/zy/asrs/controller/StationControllerTest.java 99 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/test/java/com/zy/asrs/service/impl/BasMapEditorServiceImplTest.java 135 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/test/java/com/zy/asrs/service/impl/WrkAnalysisServiceImplTest.java 75 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/test/java/com/zy/asrs/task/WrkMastSchedulerCrnMoveTest.java 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/test/java/com/zy/common/utils/NavigatePerformanceBenchmarkTest.java 354 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/test/java/com/zy/common/utils/NavigateUtilsTest.java 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/test/java/com/zy/core/dispatch/StationCommandDispatcherTest.java 100 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/test/java/com/zy/core/network/real/ZyStationV4RealConnectTest.java 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/test/java/com/zy/core/plugin/store/StoreInTaskPolicyTest.java 104 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/test/java/com/zy/core/thread/impl/ZyStationV5ThreadTest.java 92 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/test/java/com/zy/core/thread/impl/station/StationSegmentExecutorTest.java 106 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/test/java/com/zy/core/thread/impl/station/StationSegmentPlannerTest.java 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/test/java/com/zy/core/thread/impl/v5/StationV5RunBlockReroutePlannerTest.java 110 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/test/java/com/zy/core/thread/support/RecentStationArrivalTrackerTest.java 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/test/java/com/zy/core/utils/StationOperateProcessUtilsReroutePipelineTest.java 995 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/test/java/com/zy/core/utils/StationRerouteProcessorTest.java 133 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/test/java/com/zy/core/utils/station/StationDispatchRuntimeStateSupportTest.java 139 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/test/java/com/zy/core/utils/station/StationOutboundDispatchProcessorTest.java 202 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/test/java/com/zy/core/utils/station/StationRegularDispatchProcessorTest.java 240 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/test/java/com/zy/core/utils/station/model/StationModelTypePlacementTest.java 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/utils/CrnOperateProcessUtils.java
@@ -77,14 +77,13 @@
    private static final String CRN_OUT_REQUIRE_STATION_OUT_ENABLE_CONFIG = "crnOutRequireStationOutEnable";
    public synchronized void crnIoExecute() {
        Set<Integer> crnMoveBlockedCrnNos = executeCrnMoveTask();
        List<BasCrnp> basCrnps = basCrnpService.list(new QueryWrapper<>());
        for (BasCrnp basCrnp : basCrnps) {
            crnIoExecute(basCrnp, crnMoveBlockedCrnNos);
            crnIoExecute(basCrnp);
        }
    }
    public void crnIoExecute(BasCrnp basCrnp, Set<Integer> crnMoveBlockedCrnNos) {
    public void crnIoExecute(BasCrnp basCrnp) {
        if (basCrnp == null || basCrnp.getCrnNo() == null) {
            return;
        }
@@ -92,16 +91,16 @@
        if (systemConfigMapObj != null) {
            HashMap<String, String> systemConfigMap = (HashMap<String, String>) systemConfigMapObj;
            if (systemConfigMap.get("crnRunMethod").equals("solver")) {
                plannerExecute(basCrnp, crnMoveBlockedCrnNos);
                plannerExecute(basCrnp);
            }else {
                crnIoExecuteNormal(basCrnp, crnMoveBlockedCrnNos);
                crnIoExecuteNormal(basCrnp);
            }
        }
    }
    //入出库  ===>>  堆垛机入出库作业下发
    private void crnIoExecuteNormal(BasCrnp currentCrn, Set<Integer> crnMoveBlockedCrnNos) {
        if (currentCrn == null || currentCrn.getCrnNo() == null || crnMoveBlockedCrnNos.contains(currentCrn.getCrnNo())) {
    private void crnIoExecuteNormal(BasCrnp currentCrn) {
        if (currentCrn == null || currentCrn.getCrnNo() == null) {
            return;
        }
@@ -118,7 +117,12 @@
        long runningCount = wrkMastService.count(new QueryWrapper<WrkMast>()
                .eq("crn_no", crnNo)
                .in("wrk_sts", WrkStsType.INBOUND_RUN.sts, WrkStsType.OUTBOUND_RUN.sts, WrkStsType.LOC_MOVE_RUN.sts, WrkStsType.CRN_MOVE_RUN.sts));
                .in("wrk_sts",
                        WrkStsType.INBOUND_RUN.sts
                        , WrkStsType.OUTBOUND_RUN.sts
                        , WrkStsType.LOC_MOVE_RUN.sts
                        , WrkStsType.CRN_MOVE_RUN.sts
                ));
        if (runningCount > 0) {
            return;
        }
@@ -135,6 +139,12 @@
        Object clearLock = redisUtil.get(RedisKeyType.CLEAR_CRN_TASK_LIMIT.key + crnNo);
        if (clearLock != null) {
            return;
        }
        //执行移动任务
        boolean executed = executeCrnMoveTask(crnThread, crnProtocol);
        if (executed) {
            return;
        }
@@ -745,16 +755,15 @@
    }
    public synchronized void plannerExecute() {
        Set<Integer> crnMoveBlockedCrnNos = executeCrnMoveTask();
        List<BasCrnp> basCrnps = basCrnpService.list(new QueryWrapper<>());
        for (BasCrnp basCrnp : basCrnps) {
            plannerExecute(basCrnp, crnMoveBlockedCrnNos);
            plannerExecute(basCrnp);
        }
    }
    private void plannerExecute(BasCrnp basCrnp, Set<Integer> crnMoveBlockedCrnNos) {
    private void plannerExecute(BasCrnp basCrnp) {
        int nowSec = (int) (System.currentTimeMillis() / 1000);
        if (basCrnp == null || basCrnp.getCrnNo() == null || crnMoveBlockedCrnNos.contains(basCrnp.getCrnNo())) {
        if (basCrnp == null || basCrnp.getCrnNo() == null) {
            return;
        }
            String key = RedisKeyType.PLANNER_SCHEDULE.key + "CRN-" + basCrnp.getCrnNo();
@@ -903,76 +912,20 @@
        return false;
    }
    private Set<Integer> executeCrnMoveTask() {
        List<WrkMast> pendingTaskQueue = wrkMastService.list(new QueryWrapper<WrkMast>()
                .eq("io_type", WrkIoType.CRN_MOVE.id)
                .eq("wrk_sts", WrkStsType.NEW_CRN_MOVE.sts)
                .orderByAsc("appe_time")
                .orderByAsc("wrk_no"));
        Set<Integer> blockedCrnNoSet = new HashSet<>();
        for (WrkMast wrkMast : pendingTaskQueue) {
            if (wrkMast != null && wrkMast.getCrnNo() != null) {
                blockedCrnNoSet.add(wrkMast.getCrnNo());
            }
        }
        if (blockedCrnNoSet.isEmpty()) {
            return blockedCrnNoSet;
        }
        List<BasCrnp> basCrnps = basCrnpService.list(new QueryWrapper<>());
        Map<Integer, CrnThread> dispatchThreadMap = new HashMap<>();
        Map<Integer, CrnProtocol> dispatchProtocolMap = new HashMap<>();
        for (BasCrnp basCrnp : basCrnps) {
            if (basCrnp == null || basCrnp.getCrnNo() == null) {
                continue;
            }
            Integer crnNo = basCrnp.getCrnNo();
            CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, crnNo);
            if (crnThread == null) {
                continue;
            }
            CrnProtocol crnProtocol = crnThread.getStatus();
            if (crnProtocol == null) {
                continue;
            }
            long runningCount = wrkMastService.count(new QueryWrapper<WrkMast>()
                    .eq("crn_no", crnNo)
                    .in("wrk_sts",
                            WrkStsType.INBOUND_RUN.sts,
                            WrkStsType.OUTBOUND_RUN.sts,
                            WrkStsType.LOC_MOVE_RUN.sts,
                            WrkStsType.CRN_MOVE_RUN.sts));
            if (runningCount > 0) {
                continue;
            }
            if (!Objects.equals(crnProtocol.getMode(), CrnModeType.AUTO.id)
                    || !Objects.equals(crnProtocol.getTaskNo(), 0)
                    || !Objects.equals(crnProtocol.getStatus(), CrnStatusType.IDLE.id)
                    || !Objects.equals(crnProtocol.getLoaded(), 0)
                    || !Objects.equals(crnProtocol.getForkPos(), 0)
                    || !Objects.equals(crnProtocol.getAlarm(), 0)) {
                continue;
            }
            Object clearLock = redisUtil.get(RedisKeyType.CLEAR_CRN_TASK_LIMIT.key + crnNo);
            if (clearLock != null) {
                continue;
            }
            dispatchThreadMap.put(crnNo, crnThread);
            dispatchProtocolMap.put(crnNo, crnProtocol);
        }
        if (dispatchThreadMap.isEmpty()) {
            return blockedCrnNoSet;
    private boolean executeCrnMoveTask(CrnThread crnThread, CrnProtocol crnProtocol) {
        long runningCount = wrkMastService.count(new QueryWrapper<WrkMast>()
                .eq("crn_no", crnProtocol.getCrnNo())
                .in("wrk_sts",
                        WrkStsType.INBOUND_RUN.sts,
                        WrkStsType.OUTBOUND_RUN.sts,
                        WrkStsType.LOC_MOVE_RUN.sts,
                        WrkStsType.CRN_MOVE_RUN.sts));
        if (runningCount > 0) {
            return false;
        }
        List<WrkMast> taskQueue = wrkMastService.list(new QueryWrapper<WrkMast>()
                .in("crn_no", new ArrayList<>(dispatchThreadMap.keySet()))
                .eq("crn_no", crnProtocol.getCrnNo())
                .eq("io_type", WrkIoType.CRN_MOVE.id)
                .eq("wrk_sts", WrkStsType.NEW_CRN_MOVE.sts)
                .orderByAsc("appe_time")
@@ -983,36 +936,38 @@
                continue;
            }
            Integer crnNo = wrkMast.getCrnNo();
            CrnThread crnThread = dispatchThreadMap.get(crnNo);
            if (crnThread == null || dispatchProtocolMap.get(crnNo) == null) {
            if (crnProtocol.getBay() == Utils.getBay(wrkMast.getLocNo())) {
                Date now = new Date();
                wrkMast.setWrkSts(WrkStsType.COMPLETE_CRN_MOVE.sts);
                wrkMast.setSystemMsg("堆垛机已在目标点,任务直接完成");
                wrkMast.setIoTime(now);
                wrkMast.setModiTime(now);
                if (wrkMastService.updateById(wrkMast)) {
                    wrkAnalysisService.markCraneStart(wrkMast, now);
                }
                continue;
            }
            CrnCommand moveCommand = crnThread.getMoveCommand(wrkMast.getLocNo(), wrkMast.getWrkNo(), crnNo);
            CrnCommand moveCommand = crnThread.getMoveCommand(wrkMast.getLocNo(), wrkMast.getWrkNo(), crnProtocol.getCrnNo());
            if (moveCommand == null) {
                continue;
            }
            Date now = new Date();
            wrkMast.setWrkSts(WrkStsType.CRN_MOVE_RUN.sts);
            wrkMast.setCrnNo(crnNo);
            wrkMast.setSystemMsg("");
            wrkMast.setIoTime(now);
            wrkMast.setModiTime(now);
            if (wrkMastService.updateById(wrkMast)) {
                wrkAnalysisService.markCraneStart(wrkMast, now);
                MessageQueue.offer(SlaveType.Crn, crnNo, new Task(2, moveCommand));
                MessageQueue.offer(SlaveType.Crn, crnProtocol.getCrnNo(), new Task(2, moveCommand));
                News.info("堆垛机移动命令下发成功,堆垛机号={},工作号={},目标位={},任务数据={}",
                        crnNo, wrkMast.getWrkNo(), wrkMast.getLocNo(), JSON.toJSON(moveCommand));
                return blockedCrnNoSet;
                        crnProtocol.getCrnNo(), wrkMast.getWrkNo(), wrkMast.getLocNo(), JSON.toJSON(moveCommand));
                return true;
            }
        }
        return blockedCrnNoSet;
    }
    public Set<Integer> executeCrnMoveTaskAndGetBlockedCrnNos() {
        return executeCrnMoveTask();
        return false;
    }
    public void submitCrnIoTasks(long minIntervalMs) {
@@ -1020,7 +975,6 @@
    }
    public void submitCrnIoTasks(MainProcessLane lane, long minIntervalMs) {
        Set<Integer> blockedCrnNos = executeCrnMoveTaskAndGetBlockedCrnNos();
        List<BasCrnp> basCrnps = basCrnpService.list(new QueryWrapper<>());
        for (BasCrnp basCrnp : basCrnps) {
            Integer crnNo = basCrnp == null ? null : basCrnp.getCrnNo();
@@ -1032,7 +986,7 @@
                    crnNo,
                    "crnIoExecute",
                    minIntervalMs,
                    () -> crnIoExecute(basCrnp, blockedCrnNos)
                    () -> crnIoExecute(basCrnp)
            );
        }
    }
src/test/java/com/zy/asrs/controller/StationControllerTest.java
File was deleted
src/test/java/com/zy/asrs/service/impl/BasMapEditorServiceImplTest.java
File was deleted
src/test/java/com/zy/asrs/service/impl/WrkAnalysisServiceImplTest.java
File was deleted
src/test/java/com/zy/asrs/task/WrkMastSchedulerCrnMoveTest.java
File was deleted
src/test/java/com/zy/common/utils/NavigatePerformanceBenchmarkTest.java
File was deleted
src/test/java/com/zy/common/utils/NavigateUtilsTest.java
File was deleted
src/test/java/com/zy/core/dispatch/StationCommandDispatcherTest.java
File was deleted
src/test/java/com/zy/core/network/real/ZyStationV4RealConnectTest.java
File was deleted
src/test/java/com/zy/core/plugin/store/StoreInTaskPolicyTest.java
File was deleted
src/test/java/com/zy/core/thread/impl/ZyStationV5ThreadTest.java
File was deleted
src/test/java/com/zy/core/thread/impl/station/StationSegmentExecutorTest.java
File was deleted
src/test/java/com/zy/core/thread/impl/station/StationSegmentPlannerTest.java
File was deleted
src/test/java/com/zy/core/thread/impl/v5/StationV5RunBlockReroutePlannerTest.java
File was deleted
src/test/java/com/zy/core/thread/support/RecentStationArrivalTrackerTest.java
File was deleted
src/test/java/com/zy/core/utils/StationOperateProcessUtilsReroutePipelineTest.java
File was deleted
src/test/java/com/zy/core/utils/StationRerouteProcessorTest.java
File was deleted
src/test/java/com/zy/core/utils/station/StationDispatchRuntimeStateSupportTest.java
File was deleted
src/test/java/com/zy/core/utils/station/StationOutboundDispatchProcessorTest.java
File was deleted
src/test/java/com/zy/core/utils/station/StationRegularDispatchProcessorTest.java
File was deleted
src/test/java/com/zy/core/utils/station/model/StationModelTypePlacementTest.java
File was deleted