自动化立体仓库 - WCS系统
#
tzsk
2023-11-23 d460aca01c59e5df7de68545eb5cfc929ec87d03
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -737,6 +737,7 @@
            // 判断是否满足入库条件,自动、空闲、有物
            if (!(liftStaProtocol.getModel() && !liftStaProtocol.getBusy() && liftStaProtocol.getHasTray())) {
                News.info("{}任务,输送站点状态不满足入库。输送站点:{}", wrkMast.getWrkNo(), JSON.toJSONString(liftStaProtocol));
                continue;
            }
@@ -797,7 +798,8 @@
    public boolean shuttleInExecuteStep1(WrkMast wrkMast, LiftStaProtocol liftStaProtocol) {
        if (wrkMast.getWrkSts() == 4) {
            if (wrkMast.getShuttleNo() == null) {//没有绑定小车,进行调度
                shuttleDispatchUtils.dispatchShuttle(wrkMast.getWrkNo(), liftStaProtocol.getLocNo());//调度小车到货物所在输送站点进行取货
                boolean result = shuttleDispatchUtils.dispatchShuttle(wrkMast.getWrkNo(), liftStaProtocol.getLocNo());//调度小车到货物所在输送站点进行取货
                News.info("{}任务,调度小车{}系统等待中", wrkMast.getWrkNo(), result ? "成功" : "失败");
                return false;
            }
@@ -811,16 +813,19 @@
                return false;
            }
            if (!shuttleProtocol.isIdle()) {
                News.info("{}任务,{}小车忙碌中", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
                return false;
            }
            //判断小车令牌是否未被占领
            if (shuttleProtocol.getToken() != 0) {
                News.info("{}任务,{}小车,令牌已被独占,禁止派发任务", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
                return false;//小车已被独占,禁止再派发任务
            }
            //判断小车是否存在移动任务
            WrkMast hasMoveWorking = wrkMastMapper.selectShuttleHasMoveWorking(wrkMast.getShuttleNo());
            if (hasMoveWorking != null) {
                News.info("{}任务,{}小车,存在移动任务,禁止派发任务", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
                return false;//存在移动任务,禁止执行入库任务
            }
@@ -828,12 +833,14 @@
            if (!shuttleProtocol.getCurrentLocNo().equals(liftStaProtocol.getLocNo())) {
                //小车不在输送站点位置
                shuttleDispatchUtils.dispatchShuttle(wrkMast.getWrkNo(), liftStaProtocol.getLocNo(), wrkMast.getShuttleNo());//调度小车到货物所在输送站点进行取货
                News.info("{}任务,{}小车,未到达输送站点,系统等待中", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
                return false;
            }
            //小车已抵达输送站点位置,进行搬运货物
            NyShuttleOperaResult result = NyShuttleOperaUtils.getShuttleTransportCommands(wrkMast.getShuttleNo(), wrkMast.getWrkNo(), shuttleProtocol.getCurrentLocNo(), wrkMast.getLocNo());
            if (result == null) {//路径计算失败
                News.info("{}任务,{}小车,路径计算失败,系统等待中", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
                return false;
            }
@@ -884,6 +891,7 @@
            wrapper.eq("stn_no", wrkMast.getStaNo());//出库站点编号
            StaDesc staDesc = staDescService.selectOne(wrapper);
            if (staDesc == null) {
                News.info("{}任务,出库路径不存在", wrkMast.getWrkNo());
                return false;//出库路径不存在
            }
@@ -894,17 +902,28 @@
            }
            if (!basDevp.getAutoing().equals("Y")) {
                News.info("{}任务,{}站点,不是自动状态",wrkMast.getWrkNo(),basDevp.getDevNo());
                return false;//不是自动状态
            }
            if (!basDevp.getOutEnable().equals("Y")) {
                News.info("{}任务,{}站点,没有可出信号", wrkMast.getWrkNo(), basDevp.getDevNo());
                return false;//出库站点不可出
            }
            Integer liftNo = basDevp.getLiftNo();//搜索出库提升机是否存在入库任务,如存在禁止出库
            List<WrkMast> liftWrkMasts = wrkMastMapper.selectInWrkMastByLiftNo(liftNo);
            if (!liftWrkMasts.isEmpty()) {
                News.info("{}任务,{}号提升机,存在入库任务,系统禁止出库", wrkMast.getWrkNo(), liftNo);
                return false;//存在入库任务,禁止出库
            }
            //同库位组校验
            List<String> outerLoc = Utils.getGroupOuterLoc(wrkMast.getSourceLocNo());
            List<LocMast> outerLocMasts = locMastService.selectNotEmptyLocNos(outerLoc);
            if (!outerLocMasts.isEmpty()) {
                News.info("{}任务,浅库位存在货物,系统等待中", wrkMast.getWrkNo());
                return false;//浅库位存在未执行任务
            }
            //获取源站
@@ -914,11 +933,13 @@
            }
            if (!(liftStaProtocol.getModel() && !liftStaProtocol.getBusy() && !liftStaProtocol.getHasTray())) {
                News.info("{}任务,{}内部输送站,不满足自动、空闲、无托盘状态", wrkMast.getWrkNo(), liftStaProtocol.getStaNo());
                return false;//站点必须自动、空闲、没有托盘
            }
            if (wrkMast.getShuttleNo() == null) {//没有绑定小车,进行调度
                shuttleDispatchUtils.dispatchShuttle(wrkMast.getWrkNo(), wrkMast.getSourceLocNo());//调度小车到货物所在库位进行取货
                boolean result = shuttleDispatchUtils.dispatchShuttle(wrkMast.getWrkNo(), wrkMast.getSourceLocNo());//调度小车到货物所在库位进行取货
                News.info("{}任务,调度小车{}系统等待中。", wrkMast.getWrkNo(), result ? "成功" : "失败");
                return false;
            }
@@ -932,10 +953,12 @@
                return false;
            }
            if (!shuttleProtocol.isIdle()) {
                News.info("{}任务,{}小车,忙碌中", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
                return false;
            }
            //判断小车令牌是否未被占领
            if (shuttleProtocol.getToken() != 0) {
                News.info("{}任务,{}小车,令牌已被独占,禁止派发任务", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
                return false;//小车已被独占,禁止再派发任务
            }
@@ -943,12 +966,14 @@
            if (!shuttleProtocol.getCurrentLocNo().equals(wrkMast.getSourceLocNo())) {
                //小车不在输送站点位置
                shuttleDispatchUtils.dispatchShuttle(wrkMast.getWrkNo(), wrkMast.getSourceLocNo(), wrkMast.getShuttleNo());//调度小车到货物所在库位进行取货
                News.info("{}任务,{}小车,未到达输送站点,系统等待中", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
                return false;
            }
            //小车已抵达货物位置,进行搬运货物
            NyShuttleOperaResult result = NyShuttleOperaUtils.getShuttleTransportCommands(wrkMast.getShuttleNo(), wrkMast.getWrkNo(), wrkMast.getSourceLocNo(), liftStaProtocol.getLocNo());//将货物搬运至提升机输送站点
            if (result == null) {//出库路径计算失败
                News.info("{}任务,{}小车,路径计算失败,系统等待中", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
                return false;
            }
@@ -986,8 +1011,6 @@
            }
            //四向穿梭车状态为等待确认、小车处于空闲状态
            if (shuttleProtocol.getProtocolStatus() == ShuttleProtocolStatusType.WAITING.id  //任务完成等待确认
                    && shuttleProtocol.getTaskNo() != 0
                    && shuttleProtocol.getFree() == ShuttleStatusType.IDLE.id
@@ -1097,11 +1120,13 @@
            }
            if (!liftProtocol.isIdle()) {
                News.info("{}号提升机,忙碌中", liftSlave.getId());
                continue;
            }
            //判断提升机令牌是否被占用
            if (liftProtocol.getToken() != 0) {
                News.info("{}号提升机,令牌已被独占", liftSlave.getId());
                continue;
            }
@@ -1115,6 +1140,7 @@
                //搜索是否有其他任务占用了提升机,如果占用提升机的任务和当前任务相同,则运行执行
                WrkMast wrkMast1 = wrkMastMapper.selectLiftWrkMast(liftProtocol.getLiftNo().intValue());
                if (wrkMast1 != null && wrkMast1.getWrkNo().intValue() != wrkMast.getWrkNo().intValue()) {
                    News.info("{}号提升机,被其他任务{}占用且和当前任务{}不相同,禁止派发", liftSlave.getId(), wrkMast1.getWrkNo(), wrkMast.getWrkNo());
                    continue;
                }
@@ -1150,6 +1176,7 @@
            }
            if (!sourceBasDevp.getInEnable().equals("Y")) {
                News.info("{}任务,{}源站,没有可入信号", wrkMast.getWrkNo(), sourceBasDevp.getDevNo());
                return false;//站点不可入
            }
@@ -1158,10 +1185,12 @@
            Integer outInModel2 = Utils.getOutInModelByLift(sourceBasDevp.getLiftNo(), 5);
            Integer outInModel3 = Utils.getOutInModelByLift(sourceBasDevp.getLiftNo(), 8);
            if (outInModel1 == null || outInModel2 == null || outInModel3 == null) {
                News.info("{}任务,没有出入库模式", wrkMast.getWrkNo());
                return false;//不存在出入库模式
            }
            if (outInModel1 == 2 || outInModel2 == 2 && outInModel3 == 2) {
                News.info("{}任务,有站点处于出库模式,禁止入库", wrkMast.getWrkNo());
                return false;//只要有一个处于出库模式,禁止入库
            }
@@ -1174,26 +1203,31 @@
                return false;
            }
            if (!liftProtocol.isIdle()) {
                News.info("{}任务,{}号提升机,忙碌中", wrkMast.getWrkNo(), liftProtocol.getLiftNo());
                return false;
            }
            //判断提升机令牌是否未被占领
            if (liftProtocol.getToken() != 0) {
                News.info("{}任务,{}号提升机,令牌已被独占,禁止派发", wrkMast.getWrkNo(), liftProtocol.getLiftNo());
                return false;//提升机已被独占,禁止再派发任务
            }
            //判断提升机内是否有小车
            if (liftProtocol.getHasCar()) {
                News.info("{}任务,{}号提升机,提升机内部有小车,禁止派发", wrkMast.getWrkNo(), liftProtocol.getLiftNo());
                return false;//有小车,禁止派发
            }
            //判断提升机内是否有托盘
            if (liftProtocol.getHasTray()) {
                News.info("{}任务,{}号提升机,提升机内部有托盘,禁止派发", wrkMast.getWrkNo(), liftProtocol.getLiftNo());
                return false;//有托盘,禁止派发
            }
            //判断提升机是否有其他任务
            WrkMast liftWrkMast = wrkMastMapper.selectLiftWrkMast(liftThread.getSlave().getId());
            if (liftWrkMast != null) {
                News.info("{}任务,{}号提升机,当前提升机存在未完成任务,禁止派发", wrkMast.getWrkNo(), liftProtocol.getLiftNo());
                return false;//当前提升机存在未完成任务,等待下一次轮询
            }
@@ -1206,6 +1240,7 @@
            }
            if (targetStaProtocol.getHasTray()) {
                News.info("{}任务,{}号提升机,{}站点,提升机站点有托盘,禁止派发", wrkMast.getWrkNo(), liftProtocol.getLiftNo(), targetStaProtocol.getStaNo());
                return false;//提升机站点有托盘,禁止派发
            }
@@ -1262,12 +1297,14 @@
            //获取出库站点(目标站)
            BasDevp basDevp = basDevpService.selectById(wrkMast.getStaNo());
            if (basDevp == null) {
                News.info("{}任务,出库站点不存在,禁止派发", wrkMast.getWrkNo());
                return false;//出库站点不存在
            }
            //获取源站对应的牛眼提升机站点编号(起点编号)
            LiftStaProtocol liftStaProtocol = NyLiftUtils.getLiftStaByLev(basDevp.getLiftNo(), Utils.getLev(wrkMast.getSourceLocNo()));
            if (liftStaProtocol == null) {
                News.info("{}任务,找不到站点,禁止派发", wrkMast.getWrkNo());
                return false;//找不到站点
            }
            Integer startSta = liftStaProtocol.getStaNo();
@@ -1278,11 +1315,13 @@
                //调度小车避让
                boolean result = Utils.searchEmptyGroupToMoveShuttle(Utils.getLev(wrkMast.getSourceLocNo()), wrkMast.getShuttleNo(), shuttleThread);
                if (!result) {
                    News.info("{}任务,{}小车,小车在输送站点调度小车避让失败", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
                    return false;
                }
            }
            if (!basDevp.getOutEnable().equals("Y")) {
                News.info("{}任务,{}站点,没有可出信号,禁止派发", wrkMast.getWrkNo(), basDevp.getDevNo());
                return false;//出库站点不可出
            }
@@ -1296,21 +1335,25 @@
            }
            if (!liftProtocol.isIdle()) {
                News.info("{}任务,{}号提升机,忙碌中", wrkMast.getWrkNo(), liftProtocol.getLiftNo());
                return false;
            }
            //判断提升机令牌是否未被占领
            if (liftProtocol.getToken() != 0) {
                News.info("{}任务,{}号提升机,令牌已被独占,禁止派发", wrkMast.getWrkNo(), liftProtocol.getLiftNo());
                return false;//提升机已被独占,禁止再派发任务
            }
            //判断提升机是否有其他任务
            WrkMast liftWrkMast = wrkMastMapper.selectLiftWrkMast(liftThread.getSlave().getId());
            if (liftWrkMast != null) {
                News.info("{}任务,{}号提升机,当前提升机存在未完成任务,禁止派发", wrkMast.getWrkNo(), liftProtocol.getLiftNo());
                return false;//当前提升机存在未完成任务,等待下一次轮询
            }
            //获目标站源站对应的输送站点
            BasDevp targetBasDevp = basDevpService.selectById(wrkMast.getStaNo());
            if (targetBasDevp == null) {
                News.info("{}任务,{}站点,站点不存在,禁止派发", wrkMast.getWrkNo(), wrkMast.getStaNo());
                return false;//站点不存在
            }
            //获取牛眼提升机站点编号(目标编号)
@@ -2276,6 +2319,7 @@
                    .build()
                    .doPost();
            JSONObject jsonObject = JSON.parseObject(response);
            log.info("悬挂线,wms返回结果:" + jsonObject);
            Integer code = jsonObject.getInteger("code");
            if (code.equals(200)) {//呼叫AGV
                return true;
@@ -2292,7 +2336,7 @@
     */
    public void agvRestockIntoByHangingWire() {
        //检测350和351扫码器
        int[] barcodeStaNo = {10, 11};//10 => 350站扫码器,11 => 351站扫码器
        int[] barcodeStaNo = {11, 12};//11 => 350站扫码器,12 => 351站扫码器
        for (int staNo : barcodeStaNo) {
            // 获取条码扫描仪信息
            BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, staNo);
@@ -2301,8 +2345,12 @@
            }
            String barcode = barcodeThread.getBarcode();
            if(!Cools.isEmpty(barcode)) {
                if (barcode.contains("NoRead")) {
                    continue;
                }
                String agvStaNo = null;
                if (staNo == 10) {
                if (staNo == 11) {
                    agvStaNo = "303-1";
                }else {
                    agvStaNo = "304-1";
@@ -2312,7 +2360,7 @@
                if (result) {
                    barcodeThread.setBarcode("");
                }
                log.info(staNo + "号扫码器,通知AGV取货,条码号:" + barcode);
                log.info(barcodeThread.getSlave().getId() + "号扫码器,通知AGV取货,条码号:" + barcode);
            }
        }
    }
@@ -2457,6 +2505,7 @@
                        Utils.wapperSetCondition(wrapper,"batch",locDetl.getBatch());
                        Utils.wapperSetCondition(wrapper,"three_code",locDetl.getThreeCode());
                        Utils.wapperSetCondition(wrapper,"dead_time",locDetl.getDeadTime());
                        Utils.wapperSetCondition(wrapper,"supp_code",locDetl.getSuppCode());//料箱码
                        WrkDetl detl = wrkDetlService.selectOne(wrapper);
                        if (Cools.isEmpty(detl)) {
                            String suppCode = "";
@@ -2644,7 +2693,7 @@
            wrkCharge.setShuttleNo(shuttle.getId());
            wrkCharge.setCharge(shuttleCharge.id);
            wrkCharge.setWrkNo(commonService.getChargeWorkNo(4));
            wrkCharge.setWrkSts(51L);   // 21.准备充电
            wrkCharge.setWrkSts(51L);   // 51.准备充电
            wrkCharge.setIoPri((double) 10);
            wrkCharge.setLocNo(chargeLocNo);
            wrkCharge.setMemo("charge");
@@ -2826,11 +2875,13 @@
            //小车处于空闲状态
            if (!shuttleProtocol.isIdleNoCharge(wrkMast.getWrkNo())) {
                News.info("{}任务,{}小车,小车忙碌中", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
                return false;
            }
            //判断小车令牌是否未被占领
            if (shuttleProtocol.getToken() != 0) {
                News.info("{}任务,{}小车,令牌已被独占,禁止派发", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
                return false;//小车已被独占,禁止再派发任务
            }
@@ -2855,6 +2906,7 @@
            //判断提升机是否有其他任务(该任务需要换层必须提前独占提升机)
            WrkMast liftWrkMast = wrkMastMapper.selectLiftWrkMast(liftSta.getLiftNo());
            if (liftWrkMast != null) {
                News.info("{}任务,{}号提升机,提升机存在未完成任务,禁止派发", wrkMast.getWrkNo(), liftSta.getLiftNo());
                return false;//当前提升机存在未完成任务,等待下一次轮询
            }
@@ -2865,11 +2917,13 @@
            }
            boolean checkPathIsAvailable = NavigateUtils.checkPathIsAvailable(targetNodes, shuttleProtocol.getShuttleNo().intValue(), Utils.getLev(wrkMast.getLocNo()), null);
            if (!checkPathIsAvailable) {
                News.info("{}任务,{}小车,目标站点路径被占用,禁止派发", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
                return false;//检测目标站点路径是否未被占用
            }
            //尝试锁定目标站路径
            boolean result2 = navigateMapUtils.writeNavigateNodeToRedisMap(Utils.getLev(wrkMast.getLocNo()), targetNodes, true);//所使用的路径进行锁定禁用
            if (!result2) {
                News.info("{}任务,{}小车,路径锁定失败,禁止派发", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
                return false;//路径锁定失败
            }
            //*************尝试锁定目标站路径***************
@@ -2930,6 +2984,7 @@
            }
            if (basLift.getPoint() == null) {
                News.info("{}任务,{}号提升机,没有提升机点位坐标,禁止派发", wrkMast.getWrkNo(), basLift.getLiftNo());
                return false;//没有设置提升机点位坐标
            }
@@ -2937,6 +2992,7 @@
            WrkMast liftWrkMast = wrkMastMapper.selectLiftWrkMast(basLift.getLiftNo());
            if (liftWrkMast != null) {
                if (!liftWrkMast.getWrkNo().equals(wrkMast.getWrkNo())) {//提升机任务和当前任务不相同
                    News.info("{}任务,{}号提升机,提升机存在未完成任务,禁止派发", wrkMast.getWrkNo(), basLift.getLiftNo());
                    return false;//当前提升机存在未完成任务,等待下一次轮询
                }
            }
@@ -2951,6 +3007,7 @@
            }
            if (!liftProtocol.isIdle(wrkMast.getWrkNo().shortValue())) {
                News.info("{}任务,{}号提升机,提升机忙碌中,禁止派发", wrkMast.getWrkNo(), basLift.getLiftNo());
                return false;
            }
@@ -2966,11 +3023,13 @@
            //小车处于空闲状态
            if (!shuttleProtocol.isIdleNoCharge(wrkMast.getWrkNo())) {
                News.info("{}任务,{}小车,小车忙碌中,禁止派发", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
                return false;
            }
            //小车令牌是否被任务独占
            if (!shuttleProtocol.getToken().equals(wrkMast.getWrkNo())) {
                News.info("{}任务,{}小车,小车令牌被独占,禁止派发", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
                return false;
            }
@@ -2980,6 +3039,7 @@
                //调度提升机
                if (liftProtocol.getToken() != 0) {
                    News.info("{}任务,{}号提升机,提升机令牌被独占,禁止派发", wrkMast.getWrkNo(), liftProtocol.getLiftNo());
                    return false;//提升机令牌被占用
                }
@@ -3019,11 +3079,13 @@
            //判断提升机令牌是否为当前小车
            if (!liftProtocol.getToken().equals(wrkMast.getShuttleNo())) {
                News.info("{}任务,{}号提升机,提升机令牌被独占,禁止派发", wrkMast.getWrkNo(), liftProtocol.getLiftNo());
                return false;//提升机已被独占,禁止再派发任务
            }
            //判断小车是否为当前任务独占
            if (!shuttleProtocol.getToken().equals(wrkMast.getWrkNo())) {
                News.info("{}任务,{}小车,小车令牌被独占,禁止派发", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
                return false;
            }
@@ -3086,23 +3148,27 @@
                return false;
            }
            if (!liftProtocol.isIdle(wrkMast.getWrkNo().shortValue())) {
                News.info("{}任务,{}号提升机,提升机忙碌中,禁止派发", wrkMast.getWrkNo(), liftProtocol.getLiftNo());
                return false;
            }
            //判断提升机是否有其他任务
            WrkMast liftWrkMast = wrkMastMapper.selectLiftWrkMast(liftThread.getSlave().getId());
            if (liftWrkMast != null) {
                if (!liftWrkMast.getWrkNo().equals(wrkMast.getWrkNo())) {//提升机任务和当前任务不相同
                    News.info("{}任务,{}号提升机,提升机存在未完成任务,禁止派发", wrkMast.getWrkNo(), liftProtocol.getLiftNo());
                    return false;//当前提升机存在未完成任务,等待下一次轮询
                }
            }
            //判断提升机令牌是否为当前小车
            if (!liftProtocol.getToken().equals(wrkMast.getShuttleNo())) {
                News.info("{}任务,{}号提升机,提升机令牌和当前小车不一致,禁止派发", wrkMast.getWrkNo(), liftProtocol.getLiftNo());
                return false;//提升机令牌和当前小车不一致,禁止派发
            }
            //判断提升机内是否有小车
            if (!liftProtocol.getHasCar()) {
                News.info("{}任务,{}号提升机,提升机内无小车,禁止派发", wrkMast.getWrkNo(), liftProtocol.getLiftNo());
                return false;//提升机内无小车
            }
@@ -3118,11 +3184,13 @@
            //小车处于空闲状态
            if (!shuttleProtocol.isIdleNoCharge()) {
                News.info("{}任务,{}号提升机,提升机忙碌中,禁止派发", wrkMast.getWrkNo(), liftProtocol.getLiftNo());
                return false;
            }
            //判断小车是否为当前任务独占
            if (!shuttleProtocol.getToken().equals(wrkMast.getWrkNo())) {
                News.info("{}任务,{}小车,小车当前任务未被独占,禁止派发", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
                return false;
            }
@@ -3131,6 +3199,7 @@
            //获取目标站
            LiftStaProtocol liftSta = NyLiftUtils.getLiftStaByStaNo(wrkMast.getStaNo());
            if (sourceLiftSta == null || liftSta == null) {
                News.info("{}任务,缺少站点信息,禁止派发", wrkMast.getWrkNo());
                return false;//缺少站点信息
            }
@@ -3179,6 +3248,7 @@
                return false;
            }
            if (!liftProtocol.isIdle(wrkMast.getWrkNo().shortValue())) {
                News.info("{}任务,{}号提升机,提升机忙碌中,禁止派发", wrkMast.getWrkNo(), liftProtocol.getLiftNo());
                return false;
            }
@@ -3186,12 +3256,14 @@
            WrkMast liftWrkMast = wrkMastMapper.selectLiftWrkMast(liftThread.getSlave().getId());
            if (liftWrkMast != null) {
                if (!liftWrkMast.getWrkNo().equals(wrkMast.getWrkNo())) {//提升机任务和当前任务不相同
                    News.info("{}任务,{}号提升机,提升机存在未完成任务,禁止派发", wrkMast.getWrkNo(), liftProtocol.getLiftNo());
                    return false;//当前提升机存在未完成任务,等待下一次轮询
                }
            }
            //判断提升机令牌是否为当前小车
            if (!liftProtocol.getToken().equals(wrkMast.getShuttleNo())) {
                News.info("{}任务,{}号提升机,提升机令牌和当前小车不一致,禁止派发", wrkMast.getWrkNo(), liftProtocol.getLiftNo());
                return false;//提升机令牌和当前小车不一致,禁止派发
            }
@@ -3207,11 +3279,13 @@
            //小车处于空闲状态
            if (!shuttleProtocol.isIdleNoCharge()) {
                News.info("{}任务,{}小车,小车忙碌中,禁止派发", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
                return false;
            }
            //判断小车是否为当前任务独占
            if (!shuttleProtocol.getToken().equals(wrkMast.getWrkNo())) {
                News.info("{}任务,{}小车,小车令牌被独占,禁止派发", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
                return false;
            }
@@ -3227,6 +3301,7 @@
                return false;//没有提升机数据
            }
            if (basLift.getPoint() == null) {
                News.info("{}任务,{}号提升机,缺少提升机点位坐标,禁止派发", wrkMast.getWrkNo(), liftProtocol.getLiftNo());
                return false;//没有设置提升机点位坐标
            }
@@ -3286,11 +3361,13 @@
            //小车处于空闲状态
            if (!shuttleProtocol.isIdleNoCharge(wrkMast.getWrkNo())) {
                News.info("{}任务,{}小车,小车忙碌中,禁止派发", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
                return false;
            }
            //判断小车令牌是否为当前任务
            if (shuttleProtocol.getToken() != 0 && !shuttleProtocol.getToken().equals(wrkMast.getWrkNo())) {
                News.info("{}任务,{}小车,小车令牌被独占,禁止派发", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
                return false;
            }