#
Junjie
2023-09-20 f531a7a3ee28d76316ea8803a5be48168c520823
src/main/java/com/zy/core/thread/NyShuttleThread.java
@@ -382,6 +382,23 @@
                //上一条任务未完成,禁止下发命令
                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(command));
                return false;//禁止再下发命令
            }
        }
        List<NavigateNode> nextNodes = null;//下一步命令行走路径
@@ -411,7 +428,9 @@
        //锁定路径,锁定当前路径和下一步路径
        List<NavigateNode> nodes = command.getNodes();
        nodes.addAll(nextNodes);
        if (nextNodes != null) {
            nodes.addAll(nextNodes);
        }
        navigateMapData.writeNavigateNodeToRedisMap(nodes, true);//所使用的路径进行锁定禁用
        //可执行命令
@@ -455,16 +474,21 @@
        }else {
            //已执行完成
            //删除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));
            commandStep++;
//            //最后一段命令为移动命令,则暂缓删除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;
@@ -573,7 +597,9 @@
            if (basLift == null) {
                continue;
            }
            if (basLift.getPoint().equals(shuttleProtocol.getPoint())) {
            Integer liftX = basLift.getPoint$().getX();
            Integer liftY = basLift.getPoint$().getY();
            if (liftX.equals(shuttleProtocol.getPoint().getX()) && liftY.equals(shuttleProtocol.getPoint().getY())) {
                //小车在提升机内
                //判断提升机是否空闲
                LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, liftSlave.getId());
@@ -588,6 +614,8 @@
                    //提升机处于空闲,放行
                    return true;
                }
            }else {
                return true;//不在提升机内,放行
            }
        }
        return false;//默认不放行
@@ -601,9 +629,16 @@
        //检测路径是否可行走(检查路径锁定状态,检测路径是否有其他小车)
        //检测当前行走路径,和下一步路径
        boolean checkPathIsAvailable = NavigateUtils.checkPathIsAvailable(currentNodes, shuttleProtocol.getShuttleNo().intValue(), Utils.getLev(shuttleProtocol.getCurrentLocNo()));
        boolean checkPathIsAvailable2 = NavigateUtils.checkPathIsAvailable(nextNodes, shuttleProtocol.getShuttleNo().intValue(), Utils.getLev(shuttleProtocol.getCurrentLocNo()));
        if (checkPathIsAvailable && checkPathIsAvailable2) {
            return true;//可行走
        if (nextNodes == null) {
            if (checkPathIsAvailable) {
                return true;//可行走
            }
            return false;
        }else {
            boolean checkPathIsAvailable2 = NavigateUtils.checkPathIsAvailable(nextNodes, shuttleProtocol.getShuttleNo().intValue(), Utils.getLev(shuttleProtocol.getCurrentLocNo()));
            if (checkPathIsAvailable && checkPathIsAvailable2) {
                return true;//可行走
            }
        }
        ShuttleAssignCommand assignCommand = redisCommand.getAssignCommand();