#
Junjie
2023-09-20 d399d1b1975b47097526cab07a0120c56b616200
src/main/java/com/zy/core/thread/NyShuttleThread.java
@@ -95,7 +95,7 @@
            //四向穿梭车空闲、有任务、标记为true、存在任务指令,需要执行任务的下一条指令
            if (shuttleProtocol.getFree() == ShuttleStatusType.IDLE.id
                    && shuttleProtocol.getTaskNo() != 0
                    && shuttleProtocol.getPakMk()) {
                    && !shuttleProtocol.getPakMk()) {
                //执行下一步指令
                executeWork(shuttleProtocol.getTaskNo().shortValue());
            }
@@ -173,23 +173,9 @@
                //非自动状态时间计时
                shuttleProtocol.setErrTime(jsonObject.getInteger("errTime"));
                //小车处于运行中,将标记置为true
                //小车处于运行中,将标记置为false
                if (shuttleProtocol.getFree() == 0) {
                    shuttleProtocol.setPakMk(true);
                }else {
                    //小车处于等待确认且空闲状态,如有工作号则清空路径
                    if (shuttleProtocol.getTaskNo() != 0 && shuttleProtocol.getProtocolStatusType() == ShuttleProtocolStatusType.WAITING) {
                        Object o = redisUtil.get("shuttle_wrk_no_" + shuttleProtocol.getTaskNo());
                        if (o != null) {
                            ShuttleRedisCommand redisCommand = JSON.parseObject(o.toString(), ShuttleRedisCommand.class);
                            ShuttleAssignCommand assignCommand = redisCommand.getAssignCommand();
                            NavigateMapData navigateMapData = new NavigateMapData(Utils.getLev(shuttleProtocol.getCurrentLocNo()));
                            navigateMapData.writeNavigateNodeToRedisMap(assignCommand.getNodes(), false);//解锁路径
                            //删除redis
                            redisUtil.del("shuttle_wrk_no_" + redisCommand.getWrkNo());
                        }
                    }
                    shuttleProtocol.setPakMk(false);
                }
                //将四向穿梭车状态保存至数据库
@@ -369,8 +355,12 @@
        }
        NavigateMapData navigateMapData = new NavigateMapData(Utils.getLev(shuttleProtocol.getCurrentLocNo()));
        //取出命令
        NyShuttleHttpCommand command = commands.get(commandStep);//当前命令
        NyShuttleHttpCommand command = null;
        if (commandStep < commands.size()) {
            command = commands.get(commandStep);//当前命令
        }
        if (commandStep != 0) {
            //判断上一条指令是否完成
            NyShuttleHttpCommand lastCommand = commands.get(commandStep - 1);
@@ -383,7 +373,9 @@
                    lastCommand.setComplete(true);
                    //解锁锁定路径,上一条路径和当前路径
                    List<NavigateNode> nodes = lastCommand.getNodes();
                    nodes.addAll(command.getNodes());
                    if (command != null) {
                        nodes.addAll(command.getNodes());
                    }
                    navigateMapData.writeNavigateNodeToRedisMap(nodes, false);//解锁路径
                }
            }else {
@@ -395,6 +387,23 @@
            if (!lastCommand.getComplete()) {
                //上一条任务未完成,禁止下发命令
                return false;
            }
            //判断是否为最后一条命令且命令执行完成,抛出等待确认状态
            NyShuttleHttpCommand endCommand = commands.get(commands.size() - 1);
            if (endCommand.getComplete()) {
                //删除redis
                redisUtil.del("shuttle_wrk_no_" + redisCommand.getWrkNo());
                if (!assignCommand.getCharge()) {
                    //对主线程抛出等待确认状态waiting
                    shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.WAITING);
                }else {
                    shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.CHARGING_WAITING);
                }
                News.info("四向穿梭车任务执行下发完成等待执行结束,穿梭车号={},任务数据={}", shuttleProtocol.getShuttleNo(), JSON.toJSON(commands));
                return false;//禁止再下发命令
            }
        }
@@ -438,7 +447,7 @@
        News.info("四向穿梭车命令下发成功,穿梭车号={},任务数据={}", shuttleProtocol.getShuttleNo(), JSON.toJSON(command));
        //将标记置为false(防止重发)
        shuttleProtocol.setPakMk(false);
        shuttleProtocol.setPakMk(true);
        //保存数据到数据库做流水
        BasShuttleOptService shuttleOptService = SpringUtils.getBean(BasShuttleOptService.class);
@@ -460,32 +469,42 @@
            shuttleOptService.insert(opt);
        }
        //判断数据是否执行完成
        if (commandStep < commands.size() - 1) {
            //更新redis数据
            //步序增加
            commandStep++;
            redisCommand.setCommandStep(commandStep);
            //任务数据保存到redis
            redisUtil.set("shuttle_wrk_no_" + redisCommand.getWrkNo(), JSON.toJSONString(redisCommand));
        }else {
            //已执行完成
        commandStep++;
        //更新redis数据
        redisCommand.setCommandStep(commandStep);
        //任务数据保存到redis
        redisUtil.set("shuttle_wrk_no_" + redisCommand.getWrkNo(), JSON.toJSONString(redisCommand));
            //最后一段命令为移动命令,则暂缓删除redis等待清除路径时一次性删除
            //最后一段命令为不是移动命令,则删除redis
            if (!command.getRequest().getBody().get("requestType").equals("move")) {
                //删除redis
                redisUtil.del("shuttle_wrk_no_" + redisCommand.getWrkNo());
            }
            if (!assignCommand.getCharge()) {
                //对主线程抛出等待确认状态waiting
                shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.WAITING);
            }else {
                shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.CHARGING_WAITING);
            }
            News.info("四向穿梭车任务执行下发完成等待执行结束,穿梭车号={},任务数据={}", shuttleProtocol.getShuttleNo(), JSON.toJSON(command));
        }
//        //判断数据是否执行完成
//        if (commandStep < commands.size() - 1) {
//            commandStep++;
//            //更新redis数据
//            redisCommand.setCommandStep(commandStep);
//            //任务数据保存到redis
//            redisUtil.set("shuttle_wrk_no_" + redisCommand.getWrkNo(), JSON.toJSONString(redisCommand));
//        }else {
//            //已执行完成
//
//            commandStep = commands.size();
//            //更新redis数据
//            redisCommand.setCommandStep(commandStep);
//            //任务数据保存到redis
//            redisUtil.set("shuttle_wrk_no_" + redisCommand.getWrkNo(), JSON.toJSONString(redisCommand));
////            //最后一段命令为移动命令,则暂缓删除redis等待清除路径时一次性删除
////            //最后一段命令为不是移动命令,则删除redis
////            if (!command.getRequest().getBody().get("requestType").equals("move")) {
////                //删除redis
////                redisUtil.del("shuttle_wrk_no_" + redisCommand.getWrkNo());
////            }
////
////            if (!assignCommand.getCharge()) {
////                //对主线程抛出等待确认状态waiting
////                shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.WAITING);
////            }else {
////                shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.CHARGING_WAITING);
////            }
////            News.info("四向穿梭车任务执行下发完成等待执行结束,穿梭车号={},任务数据={}", shuttleProtocol.getShuttleNo(), JSON.toJSON(command));
//        }
        return true;
    }
@@ -629,6 +648,7 @@
            if (checkPathIsAvailable) {
                return true;//可行走
            }
            return false;
        }else {
            boolean checkPathIsAvailable2 = NavigateUtils.checkPathIsAvailable(nextNodes, shuttleProtocol.getShuttleNo().intValue(), Utils.getLev(shuttleProtocol.getCurrentLocNo()));
            if (checkPathIsAvailable && checkPathIsAvailable2) {