#
Junjie
4 天以前 6daf900a09adcca981f620744bf89851654d88e0
src/main/java/com/zy/core/thread/impl/NyShuttleThread.java
@@ -20,8 +20,11 @@
import com.zy.common.utils.NavigateMapData;
import com.zy.common.utils.NavigatePositionConvert;
import com.zy.common.utils.RedisUtil;
import com.zy.common.utils.ShuttleOperaUtils;
import com.zy.core.News;
import com.zy.core.action.ShuttleAction;
import com.zy.core.model.DeviceCommandMsgModel;
import com.zy.core.model.command.ShuttleAssignCommand;
import com.zy.core.utils.DeviceMsgUtils;
import com.zy.core.cache.OutputQueue;
import com.zy.core.enums.*;
@@ -49,6 +52,7 @@
    private DeviceConfig deviceConfig;
    private RedisUtil redisUtil;
    private ShuttleProtocol shuttleProtocol;
    private ShuttleAction shuttleAction = null;
    private static final boolean DEBUG = false;//调试模式
@@ -89,14 +93,11 @@
//        Thread executeThread = new Thread(() -> {
//            while (true) {
//                try {
//                    ShuttleAction shuttleAction = null;
//                    try {
//                        shuttleAction = SpringUtils.getBean(ShuttleAction.class);
//                    }catch (Exception e){
//                        continue;
//                    }
//
//                    if (shuttleAction == null) {
//                        try {
//                            shuttleAction = SpringUtils.getBean(ShuttleAction.class);
//                        }catch (Exception e){
//                        }
//                        continue;
//                    }
//
@@ -752,6 +753,9 @@
    @Override
    public synchronized boolean setProtocolStatus(ShuttleProtocolStatusType status) {
        if (status.equals(ShuttleProtocolStatusType.IDLE)) {
            this.shuttleProtocol.setIdleTime(System.currentTimeMillis());
        }
        this.shuttleProtocol.setProtocolStatus(status);
        return true;
    }
@@ -821,6 +825,13 @@
    }
    @Override
    public boolean setTrafficControl(boolean enable, List<NavigateNode> nodeList) {
        shuttleProtocol.setTrafficControl(enable);
        shuttleProtocol.setTrafficControlNodes(nodeList);
        return true;
    }
    @Override
    public void updateDeviceDataLogTime(long time) {
        shuttleProtocol.setDeviceDataLog(time);
    }
@@ -839,6 +850,119 @@
        body.put("responseType", "state");
        return null;
    }
    @Override
    public boolean restartCalcPath() {
        ConfigService configService = SpringUtils.getBean(ConfigService.class);
        if (configService == null) {
            return false;
        }
        ShuttleAction shuttleAction = SpringUtils.getBean(ShuttleAction.class);
        if (shuttleAction == null) {
            return false;
        }
        ShuttleOperaUtils shuttleOperaUtils = SpringUtils.getBean(ShuttleOperaUtils.class);
        if (shuttleOperaUtils == null) {
            return false;
        }
        ObjectMapper objectMapper = SpringUtils.getBean(ObjectMapper.class);
        if (objectMapper == null) {
            return false;
        }
        boolean trafficControlRestartCalcPath = false;
        Config trafficControlRestartCalcPathConfig = configService.selectOne(new EntityWrapper<Config>()
                .eq("code", "trafficControlRestartCalcPath")
        );
        if(trafficControlRestartCalcPathConfig != null) {
            trafficControlRestartCalcPath = trafficControlRestartCalcPathConfig.getValue().equals("Y") ? true : false;
        }
        if (!trafficControlRestartCalcPath) {
            return false;
        }
        if (shuttleProtocol.getTaskNo() == 0) {
            return false;
        }
        if (!this.isDeviceIdle()) {
            return false;
        }
        Object object = redisUtil.get(RedisKeyType.SHUTTLE_RESTART_CALC_PATH.key + shuttleProtocol.getShuttleNo());
        if (object != null) {
            return false;
        }
        Integer taskNo = shuttleProtocol.getTaskNo();
        Object obj = redisUtil.get(RedisKeyType.SHUTTLE_WORK_FLAG.key + taskNo);
        if (obj == null) {
            return false;
        }
        ShuttleRedisCommand redisCommand = null;
        try {
            redisCommand = objectMapper.readValue(String.valueOf(obj), ShuttleRedisCommand.class);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
        if (redisCommand == null) {
            return false;
        }
        ShuttleAssignCommand assignCommand = redisCommand.getAssignCommand();
        String locNo = assignCommand.getLocNo();
        List<NavigationMapType> mapTypes = assignCommand.getMapTypes();
        if (locNo == null) {
            return false;
        }
        if (mapTypes == null) {
            return false;
        }
        List<NavigationMapType> restartCalcMapTypes = new ArrayList<>(mapTypes);
        restartCalcMapTypes.add(NavigationMapType.SHUTTLE);
        String currentLocNo = shuttleProtocol.getCurrentLocNo();
        List<ShuttleCommand> commands = shuttleOperaUtils.getStartToTargetCommands(currentLocNo, locNo, restartCalcMapTypes, assignCommand, this);
        if (commands == null) {
            return false;
        }
        if (assignCommand.getTaskMode() == ShuttleTaskModeType.TRANSPORT.id) {
            List<ShuttleCommand> originCommands = assignCommand.getCommands();
            if (originCommands == null) {
                return false;
            }
            ShuttleCommand firstCommand = originCommands.get(0);
            ShuttleCommand endCommand = originCommands.get(originCommands.size() - 1);
            if (firstCommand.getMode() != ShuttleCommandModeType.PALLET_LIFT.id) {
                return false;
            }
            if (endCommand.getMode() != ShuttleCommandModeType.PALLET_DOWN.id) {
                return false;
            }
            commands.add(0, firstCommand);
            commands.add(endCommand);
        }
        assignCommand.setCommands(commands);
        //下发任务
        shuttleAction.assignWork(shuttleProtocol.getShuttleNo(), assignCommand);
        redisUtil.set(RedisKeyType.SHUTTLE_RESTART_CALC_PATH.key + shuttleProtocol.getShuttleNo(), true, 60);
        return true;
    }
    @Override
@@ -1091,16 +1215,16 @@
    private JSONObject queryCommandStatus(String resultKey) {
        // 获取服务器响应
        // 尝试50次
        JSONObject result = null;
        for (int i = 0; i < 50; i++) {
        long startTime = System.currentTimeMillis();
        while (true) {
            if((System.currentTimeMillis() - startTime) > 1000 * 10) {
                break;
            }
            result = getRequestBody(resultKey);
            if (result == null) {
                try {
                    Thread.sleep(500);
                } catch (Exception e) {
                    e.printStackTrace();
                }
                continue;
            }else {
                break;
            }