自动化立体仓库 - WCS系统
999
zhangc
2025-04-18 855ae16895a43bf56ecb22436204c18fbe466980
src/main/java/com/zy/asrs/service/impl/NoLiftOutServiceImpl.java
@@ -294,62 +294,28 @@
            LiftThread liftThread = null;
            LiftProtocol liftProtocol = null;
            if (wrkMast.getLiftNo() == null) {
                //获取穿梭车最近且空闲的提升机
                liftThread = LiftUtils.getRecentLift(shuttleProtocol.getCurrentLocNo());
                if (liftThread == null) {
                    News.info("{}号小车,{}目标库位,没有可用空闲提升机", shuttleProtocol.getShuttleNo(), shuttleProtocol.getCurrentLocNo());
                    return false;//没有可用且空闲的提升机
                }
                liftProtocol = liftThread.getStatus();
                //判断提升机内是否有小车
                if (liftProtocol.getHasCar()) {
                    News.info("{}任务,{}号提升机,提升机内有小车,禁止派发", wrkMast.getWrkNo(), liftProtocol.getLiftNo());
                    return false;
                }
                //判断提升机内是否有托盘
                if (liftProtocol.getHasTray()) {
                    News.info("{}任务,{}号提升机,提升机内有托盘,禁止派发", wrkMast.getWrkNo(), liftProtocol.getLiftNo());
                    return false;
                }
            //获取穿梭车最近且空闲的提升机
            liftThread = LiftUtils.getRecentLift(shuttleProtocol.getCurrentLocNo());
            if (liftThread == null) {
                News.info("{}号小车,{}目标库位,没有可用空闲提升机", shuttleProtocol.getShuttleNo(), shuttleProtocol.getCurrentLocNo());
                return false;//没有可用且空闲的提升机
            }
                if (liftProtocol == null) {
                    News.info("{}号提升机对象不存在", wrkMast.getLiftNo());
                    return false;
                }
                //判断提升机是否有其他任务(该任务需要换层必须提前独占提升机)
                WrkMast liftWrkMast = wrkMastService.selectLiftWrkMastAndWrkNo(wrkMast.getLiftNo(), wrkMast.getWrkNo(), wrkMast.getMainWrkNo());
                if (liftWrkMast != null) {
                    News.taskInfo(wrkMast.getWrkNo(), "{}任务,{}号提升机,提升机存在未完成任务,禁止派发", wrkMast.getWrkNo(), liftProtocol.getLiftNo());
                    return false;//当前提升机存在未完成任务,等待下一次轮询
                }
                wrkMast.setModiTime(now);
                wrkMast.setLiftNo(1);
                wrkMast.setSystemMsg("");//清空消息
                wrkMastService.updateById(wrkMast);
            liftProtocol = liftThread.getStatus();
            //判断提升机内是否有小车
            if (liftProtocol.getHasCar()) {
                News.info("{}任务,{}号提升机,提升机内有小车,禁止派发", wrkMast.getWrkNo(), liftProtocol.getLiftNo());
                return false;
            } else {
                liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, wrkMast.getLiftNo());
                if (liftThread == null) {
                    News.info("{}号提升机不存在", wrkMast.getLiftNo());
                    return false;
                }
                liftProtocol = liftThread.getStatus();
                if (liftProtocol == null) {
                    News.info("{}号提升机对象不存在", wrkMast.getLiftNo());
                    return false;
                }
            }
            //判断提升机是否有其他任务
            WrkMast liftWrkMast = wrkMastService.selectLiftWrkMastAndWrkNo(wrkMast.getLiftNo(), wrkMast.getWrkNo(), wrkMast.getMainWrkNo());
            if (liftWrkMast != null) {
                News.info("{}任务,{}号提升机,提升机存在未完成任务,禁止派发", wrkMast.getWrkNo(), wrkMast.getLiftNo());
                return false;//当前提升机存在未完成任务,等待下一次轮询
            //判断提升机内是否有托盘
            if (liftProtocol.getHasTray()) {
                News.info("{}任务,{}号提升机,提升机内有托盘,禁止派发", wrkMast.getWrkNo(), liftProtocol.getLiftNo());
                return false;
            }
            if (!liftThread.isIdle()) {
                News.info("{}任务,{}号提升机,提升机忙碌中,禁止派发", wrkMast.getWrkNo(), wrkMast.getLiftNo());
@@ -391,10 +357,18 @@
            //提交到线程去工作
            LiftAssignCommand assignCommand = new LiftAssignCommand();
            assignCommand.setCommands(commands);
            assignCommand.setLiftNo(wrkMast.getLiftNo().shortValue());
            assignCommand.setLiftNo((short) 1);
            assignCommand.setTaskNo(wrkMast.getWrkNo().shortValue());
            assignCommand.setTaskMode(LiftCommandModeType.MOVE.id.shortValue());
            //判断提升机是否有其他任务
            WrkMast liftWrkMast = wrkMastService.selectLiftWrkMastAndWrkNo(wrkMast.getLiftNo(), wrkMast.getWrkNo(), wrkMast.getMainWrkNo());
            if (liftWrkMast != null) {
                News.info("{}任务,{}号提升机,提升机存在未完成任务,禁止派发", wrkMast.getWrkNo(), wrkMast.getLiftNo());
                return false;//当前提升机存在未完成任务,等待下一次轮询
            }
            wrkMast.setWrkSts(WrkStsType.MOVE_OUT_NO_LIFT_4.sts);//小车移动到提升机中  小车移动至站点完成 ==> 提升机至小车层
            wrkMast.setLiftNo(liftProtocol.getLiftNo());//提前锁定提升机
            wrkMast.setSystemMsg("");//清空消息