#
cpT
7 天以前 633d680fdaba504255a12f190a8284c0a9e12de6
#
3个文件已修改
129 ■■■■■ 已修改文件
src/main/java/com/zy/core/enums/RedisKeyType.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/thread/impl/ZySiemensDualCrnThread.java 55 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/utils/DualCrnOperateProcessUtils.java 73 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/enums/RedisKeyType.java
@@ -10,6 +10,7 @@
    LIFT_FLAG("lift_"),
    DUAL_CRN_COMMAND_("dual_crn_command_"),
    DUAL_CRN_COMMAND_IDX("dual_crn_command_idx_"),
    QUEUE_CRN("queue_crn_"),
    QUEUE_DUAL_CRN("queue_dual_crn_"),
src/main/java/com/zy/core/thread/impl/ZySiemensDualCrnThread.java
@@ -85,6 +85,11 @@
                    if (step == 2) {
                        List<SendDualCrnCommandParam> commandList = (List<SendDualCrnCommandParam>) task.getData();
                        for (SendDualCrnCommandParam sendDualCrnCommandParam : commandList) {
                            DualCrnCommand dualCrnCommand = sendDualCrnCommandParam.getCommands().get(0);
                            redisUtil.set(RedisKeyType.DUAL_CRN_COMMAND_IDX.key + dualCrnCommand.getTaskNo(), sendDualCrnCommandParam.getCommandIdx(), 60 * 60 * 24);
                        }
                        redisUtil.set(RedisKeyType.DUAL_CRN_COMMAND_.key + crnProtocol.getCrnNo(), JSON.toJSONString(commandList, SerializerFeature.DisableCircularReferenceDetect), 60 * 60 * 24);
                    } else if (step == 3) {
                        sendCommand((DualCrnCommand) task.getData());
@@ -109,28 +114,21 @@
                        continue;
                    }
//                    if (crnProtocol.getLoaded() == 1 && crnProtocol.getLoadedTwo() == 1) {
//                        Object wait = redisUtil.get(RedisKeyType.DUAL_CRN_PICK_WAIT_NEXT_TASK.key + crnProtocol.getCrnNo());
//                        if (wait != null) {
//                            redisUtil.del(RedisKeyType.DUAL_CRN_PICK_WAIT_NEXT_TASK.key + crnProtocol.getCrnNo());
//                        }
//                    }
                    if (!((crnProtocol.getStatusType().equals(DualCrnStatusType.IDLE) || crnProtocol.getStatusType().equals(DualCrnStatusType.FETCH_COMPLETE))
                            && (crnProtocol.getStatusTypeTwo().equals(DualCrnStatusType.IDLE) || crnProtocol.getStatusTypeTwo().equals(DualCrnStatusType.FETCH_COMPLETE)))
                    ) {
                        continue;
                    }
                    Object commandListObj = redisUtil.get(RedisKeyType.DUAL_CRN_COMMAND_.key + crnProtocol.getCrnNo());
                    if (commandListObj == null) {
                        continue;
                    }
                    List<SendDualCrnCommandParam> commandList = JSON.parseArray(commandListObj.toString(), SendDualCrnCommandParam.class);
                    List<SendDualCrnCommandParam> newCommandList = new ArrayList<>();
                    for (SendDualCrnCommandParam commandParam : commandList) {
                        SendDualCrnCommandParam processed = processStation(commandParam);
                        if(processed != null) {
                            newCommandList.add(processed);
                        }
                        processStation(commandParam);
                    }
                    redisUtil.set(RedisKeyType.DUAL_CRN_COMMAND_.key + crnProtocol.getCrnNo(), JSON.toJSONString(newCommandList, SerializerFeature.DisableCircularReferenceDetect), 60 * 60 * 24);
                    Thread.sleep(100);
                } catch (Exception e) {
                    log.error("DualCrnCommand Fail", e);
@@ -140,12 +138,17 @@
        commandThread.start();
    }
    private SendDualCrnCommandParam processStation(SendDualCrnCommandParam commandParam) {
    private void processStation(SendDualCrnCommandParam commandParam) {
        Integer station = commandParam.getStation();
        Integer idx = commandParam.getCommandIdx();
        List<DualCrnCommand> commandList = commandParam.getCommands();
        DualCrnCommand firstCommand = commandList.get(0);
        Object idxObj = redisUtil.get(RedisKeyType.DUAL_CRN_COMMAND_IDX.key + firstCommand.getTaskNo());
        if(idxObj == null) {
            return;
        }
        Integer idx = (Integer) idxObj;
        if (idx >= commandList.size()) {
            return commandParam;
            return;
        }
        DualCrnCommand dualCommand = commandList.get(idx);
@@ -167,17 +170,17 @@
        if (idx == 0) {
            if(send) {
                idx++;
                commandParam.setCommandIdx(idx);
                redisUtil.set(RedisKeyType.DUAL_CRN_COMMAND_IDX.key + firstCommand.getTaskNo(), idx, 60 * 60 * 24);
                sendCommand(dualCommand);
                redisUtil.set(RedisKeyType.DUAL_CRN_PICK_WAIT_NEXT_TASK.key + crnProtocol.getCrnNo(), "lock", 5);
            }
            return commandParam;
            return;
        }else {
            if (dualCommand.getTaskMode() == DualCrnTaskModeType.PUT.id.shortValue()) {
                //等待下一个任务
                Object wait = redisUtil.get(RedisKeyType.DUAL_CRN_PICK_WAIT_NEXT_TASK.key + crnProtocol.getCrnNo());
                if (wait != null) {
                    return commandParam;
                    return;
                }
                Integer taskNo = dualCommand.getTaskNo();
@@ -187,35 +190,35 @@
                    StationObjModel stationObjModel = JSON.parseObject(outTaskStationInfoObj.toString(), StationObjModel.class);
                    StationThread stationThread = (StationThread) SlaveConnection.get(SlaveType.Devp, stationObjModel.getDeviceNo());
                    if (stationThread == null) {
                        return commandParam;
                        return;
                    }
                    Map<Integer, StationProtocol> statusMap = stationThread.getStatusMap();
                    StationProtocol stationProtocol = statusMap.get(stationObjModel.getStationId());
                    if (stationProtocol == null) {
                        return commandParam;
                        return;
                    }
                    if (!stationProtocol.isAutoing()) {
                        return commandParam;
                        return;
                    }
                    if (stationProtocol.isLoading()) {
                        return commandParam;
                        return;
                    }
                    if (stationProtocol.getTaskNo() > 0) {
                        return commandParam;
                        return;
                    }
                }
            }
            if(send) {
                idx++;
                commandParam.setCommandIdx(idx);
                redisUtil.set(RedisKeyType.DUAL_CRN_COMMAND_IDX.key + firstCommand.getTaskNo(), idx, 60 * 60 * 24);
                sendCommand(dualCommand);
            }
            return commandParam;
            return;
        }
    }
src/main/java/com/zy/core/utils/DualCrnOperateProcessUtils.java
@@ -107,22 +107,40 @@
        // 如果最近一次是出库模式
        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 +176,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 +234,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 +292,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) {
@@ -678,28 +702,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;