#
cpT
7 天以前 633d680fdaba504255a12f190a8284c0a9e12de6
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;
        }
    }