#
Junjie
昨天 8b81231cd06f4d28295b5c15b6bb30a306f94e47
src/main/java/com/zy/core/utils/DualCrnOperateProcessUtils.java
@@ -91,6 +91,10 @@
                continue;
            }
            if(dualCrnProtocol.getTaskSend() != 0 || dualCrnProtocol.getTaskSendTwo() != 0) {
                continue;
            }
            this.crnExecute(basDualCrnp, dualCrnThread);
        }
    }
@@ -105,24 +109,47 @@
            return;
        }
        Object clearLock = redisUtil.get(RedisKeyType.CLEAR_DUAL_CRN_TASK_LIMIT.key + basDualCrnp.getCrnNo());
        if (clearLock != null) {
            return;
        }
        // 如果最近一次是出库模式
        if (dualCrnProtocol.getLastIo().equals("O")) {
            processLoveMove(basDualCrnp, dualCrnThread);
            processIn(basDualCrnp, dualCrnThread);
            processOut(basDualCrnp, dualCrnThread);
            boolean executeResult1 = processLoveMove(basDualCrnp, dualCrnThread);
            if (executeResult1) {
                return;
            }
            boolean executeResult2 = processIn(basDualCrnp, dualCrnThread);
            if (executeResult2) {
                return;
            }
            boolean executeResult3 = processOut(basDualCrnp, dualCrnThread);
            if (executeResult3) {
                return;
            }
        }
        // 如果最近一次是入库模式
        else if (dualCrnProtocol.getLastIo().equals("I")) {
            processLoveMove(basDualCrnp, dualCrnThread);
            processOut(basDualCrnp, dualCrnThread);
            processIn(basDualCrnp, dualCrnThread);
            boolean executeResult1 = processLoveMove(basDualCrnp, dualCrnThread);
            if (executeResult1) {
                return;
            }
            boolean executeResult2 = processOut(basDualCrnp, dualCrnThread);
            if (executeResult2) {
                return;
            }
            boolean executeResult3 = processIn(basDualCrnp, dualCrnThread);
            if (executeResult3) {
                return;
            }
        }
    }
    private void processIn(BasDualCrnp basDualCrnp, DualCrnThread dualCrnThread) {
    private boolean processIn(BasDualCrnp basDualCrnp, DualCrnThread dualCrnThread) {
        List<WrkMast> inTaskList = getInTaskList(basDualCrnp);
        if (inTaskList.isEmpty()) {
            return;
            return false;
        }
        WrkMast stationOneWrkMast = inTaskList.get(0);
@@ -158,13 +185,15 @@
            MessageQueue.offer(SlaveType.DualCrn, crnNo, new Task(2, list));
            News.info("双工位堆垛机命令下发成功,堆垛机号={},任务数据={}", crnNo, JSON.toJSON(list));
            dualCrnProtocol.setLastIo("I");
            return true;
        }
        return false;
    }
    private void processOut(BasDualCrnp basDualCrnp, DualCrnThread dualCrnThread) {
    private boolean processOut(BasDualCrnp basDualCrnp, DualCrnThread dualCrnThread) {
        List<WrkMast> outTaskList = getOutTaskList(basDualCrnp);
        if (outTaskList.isEmpty()) {
            return;
            return false;
        }
        WrkMast stationOneWrkMast = null;
@@ -214,13 +243,15 @@
            MessageQueue.offer(SlaveType.DualCrn, crnNo, new Task(2, list));
            News.info("双工位堆垛机命令下发成功,堆垛机号={},任务数据={}", crnNo, JSON.toJSON(list));
            dualCrnProtocol.setLastIo("O");
            return true;
        }
        return false;
    }
    private void processLoveMove(BasDualCrnp basDualCrnp, DualCrnThread dualCrnThread) {
    private boolean processLoveMove(BasDualCrnp basDualCrnp, DualCrnThread dualCrnThread) {
        List<WrkMast> locMoveTaskList = getLocMoveTaskList(basDualCrnp);
        if (locMoveTaskList.isEmpty()) {
            return;
            return false;
        }
        WrkMast stationOneWrkMast = null;
@@ -270,7 +301,9 @@
            MessageQueue.offer(SlaveType.DualCrn, crnNo, new Task(2, list));
            News.info("双工位堆垛机命令下发成功,堆垛机号={},任务数据={}", crnNo, JSON.toJSON(list));
            dualCrnProtocol.setLastIo("O");
            return true;
        }
        return false;
    }
    private List<WrkMast> getInTaskList(BasDualCrnp basDualCrnp) {
@@ -655,12 +688,14 @@
                continue;
            }
            if(dualCrnProtocol.getTaskNo() > 0 && dualCrnProtocol.getStatus() == DualCrnStatusType.WAITING.id) {
            if(dualCrnProtocol.getTaskNo() > 0 && dualCrnProtocol.getTaskSend() == 0 && dualCrnProtocol.getStatus() == DualCrnStatusType.WAITING.id) {
                executeFinish(basDualCrnp, dualCrnThread, dualCrnProtocol, dualCrnProtocol.getTaskNo(), 1);
                continue;
            }
            if(dualCrnProtocol.getTaskNoTwo() > 0 && dualCrnProtocol.getStatusTwo() == DualCrnStatusType.WAITING.id) {
            if(dualCrnProtocol.getTaskNoTwo() > 0 && dualCrnProtocol.getTaskSendTwo() == 0 && dualCrnProtocol.getStatusTwo() == DualCrnStatusType.WAITING.id) {
                executeFinish(basDualCrnp, dualCrnThread, dualCrnProtocol, dualCrnProtocol.getTaskNoTwo(), 2);
                continue;
            }
        }
    }
@@ -678,28 +713,13 @@
            return;
        }
        Object commandListObj = redisUtil.get(RedisKeyType.DUAL_CRN_COMMAND_.key + basDualCrnp.getCrnNo());
        if (commandListObj == null) {
            News.error("双工位堆垛机处于等待确认且任务完成状态,但未找到命令。堆垛机号={},工作号={}", basDualCrnp.getCrnNo(), taskNo);
            return;
        }
        List<SendDualCrnCommandParam> dualCrnCommandParamList = JSON.parseArray(commandListObj.toString(), SendDualCrnCommandParam.class);
        SendDualCrnCommandParam taskCommand = null;
        for (SendDualCrnCommandParam sendDualCrnCommandParam : dualCrnCommandParamList) {
            DualCrnCommand dualCrnCommand = sendDualCrnCommandParam.getCommands().get(0);
            if(dualCrnCommand.getTaskNo() == taskNo){
                taskCommand = sendDualCrnCommandParam;
                break;
            }
        }
        if (taskCommand == null) {
            News.error("双工位堆垛机处于等待确认且任务完成状态,但未找到命令。堆垛机号={},工作号={}", basDualCrnp.getCrnNo(), taskNo);
            return;
        int idx = 10;
        Object idxObj = redisUtil.get(RedisKeyType.DUAL_CRN_COMMAND_IDX.key + wrkMast.getWrkNo());
        if(idxObj != null) {
            idx = (Integer) idxObj;
        }
        Integer idx = taskCommand.getCommandIdx();
        List<DualCrnCommand> commandList = taskCommand.getCommands();
        if (idx >= commandList.size()) {
        if (idx >= 2) {
            Long updateWrkSts = null;
            if (wrkMast.getWrkSts() == WrkStsType.INBOUND_RUN.sts) {
                updateWrkSts = WrkStsType.COMPLETE_INBOUND.sts;
@@ -739,7 +759,7 @@
                return;
            }
            DualCrnCommand resetCommand = dualCrnThread.getResetCommand(dualCrnProtocol.getCrnNo(), station);
            DualCrnCommand resetCommand = dualCrnThread.getResetCommand(taskNo, dualCrnProtocol.getCrnNo(), station);
            boolean offer = MessageQueue.offer(SlaveType.DualCrn, dualCrnProtocol.getCrnNo(), new Task(3, resetCommand));
            if (offer) {
                wrkMast.setWrkSts(updateWrkSts);
@@ -751,9 +771,10 @@
                redisUtil.set(RedisKeyType.DUAL_CRN_IO_EXECUTE_FINISH_LIMIT.key + basDualCrnp.getCrnNo() + "_" + taskNo, "lock", 10);
            }
        }else {
            DualCrnCommand resetCommand = dualCrnThread.getResetCommand(dualCrnProtocol.getCrnNo(), station);
            DualCrnCommand resetCommand = dualCrnThread.getResetCommand(taskNo, dualCrnProtocol.getCrnNo(), station);
            MessageQueue.offer(SlaveType.DualCrn, dualCrnProtocol.getCrnNo(), new Task(3, resetCommand));
            News.info("双工位堆垛机命令完成确认成功,堆垛机号={},工作号={}", basDualCrnp.getCrnNo(), taskNo);
            redisUtil.set(RedisKeyType.DUAL_CRN_IO_EXECUTE_FINISH_LIMIT.key + basDualCrnp.getCrnNo() + "_" + taskNo, "lock", 10);
        }
    }