| | |
| | | |
| | | // 如果最近一次是出库模式 |
| | | 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); |
| | |
| | | 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; |
| | |
| | | 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; |
| | |
| | | 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) { |
| | |
| | | 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; |