#
Junjie
1 天以前 6694bb8752aced4b818f2976442d66ae3a52e9e8
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.*;
@@ -732,7 +735,7 @@
                //将路径锁与小车路径进行匹配
                ArrayList<NavigateNode> tmp = new ArrayList<>();
                //检测路径是否被锁定
                int[][] map = navigateMapData.getDataFromRedis(lev, NavigationMapType.DFX.id, null, null);
                int[][] map = navigateMapData.getDataFromRedis(lev, NavigationMapType.getDfxWithDevice(), null, null);
                for (NavigateNode node : path) {
                    if(map[node.getX()][node.getY()] == -999) {
                        tmp.add(node);
@@ -752,6 +755,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 +827,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 +852,94 @@
        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;
        }
        String currentLocNo = shuttleProtocol.getCurrentLocNo();
        List<ShuttleCommand> commands = shuttleOperaUtils.getStartToTargetCommands(currentLocNo, locNo, mapTypes, assignCommand, this);
        if (commands == null) {
            return false;
        }
        assignCommand.setCommands(commands);
        //下发任务
        shuttleAction.assignWork(shuttleProtocol.getShuttleNo(), assignCommand);
        redisUtil.set(RedisKeyType.SHUTTLE_RESTART_CALC_PATH.key + shuttleProtocol.getShuttleNo(), true, 60);
        return true;
    }
    @Override
@@ -867,7 +968,7 @@
            int yp = Integer.parseInt(String.valueOf(nyNode.get("x")));
            int z = Integer.parseInt(String.valueOf(nyNode.get("z")));
            List<List<MapNode>> mapData = navigateMapData.getJsonData(startNode.getZ(), NavigationMapType.NONE.id, null, null);
            List<List<MapNode>> mapData = navigateMapData.getJsonData(startNode.getZ(), NavigationMapType.getMapTypes(NavigationMapType.NONE), null, null);
            List<MapNode> mapNodes = mapData.get(node.getX());
            MapNode mapNode = mapNodes.get(node.getY());
@@ -983,7 +1084,7 @@
            throw new CoolException("地址码不存在");
        }
        List<List<MapNode>> mapData = navigateMapData.getJsonData(lev, NavigationMapType.NONE.id, null, null);
        List<List<MapNode>> mapData = navigateMapData.getJsonData(lev, NavigationMapType.getMapTypes(NavigationMapType.NONE), null, null);
        List<MapNode> mapNodes = mapData.get(locMast.getRow1());
        MapNode mapNode = mapNodes.get(locMast.getBay1());