自动化立体仓库 - WCS系统
999
zhangc
2025-04-20 6dea42fd8f806807982866c1821a66da725eabca
src/main/java/com/zy/asrs/service/impl/NoLiftOutServiceImpl.java
@@ -60,14 +60,16 @@
    @Autowired
    private LiftAction liftAction;
    @Autowired
    private MainServiceImpl mainService;
    /**
     * 从没有提升机侧出库,有两种情况,一种1,5库到同层,一种非1,5库到1,5,则需要提升机
     * @param wrkMast
     */
    public void shuttleMoveExecute(WrkMast wrkMast) {
    public void shuttleMoveExecute(WrkMast wrkMast, Integer staNo, Integer lev) {
        //判断目标库位是否在1层或5层
        if (Utils.getLev(wrkMast.getSourceLocNo()) == 1 || Utils.getLev(wrkMast.getSourceLocNo()) == 5) {
        if ((lev == 1 & staNo == 1013) || (lev == 5 && staNo == 1024)) {
            boolean stepMoveSta = this.shuttleMoveExecuteTransportLiftStepCallShuttle2(wrkMast);//呼叫小车至取货点
            if (!stepMoveSta) {
                return;
@@ -142,19 +144,18 @@
            if (devpThread == null) {
                return false;
            }
            int lev = Utils.getLev(wrkMast.getLocNo());
            StaProtocol staProtocol2 = devpThread.getStation().get(lev == 1 ? 1014 : 1025);
            //TODO
//            if (!staProtocol2.isOutEnable()) {
//                log.error("{}任务,{}号输送线不可出", wrkMast.getWrkNo(), lev == 1 ? 1014 : 1025);
//                News.taskInfo(wrkMast.getWrkNo(), "{}任务,{}号输送线不可出", wrkMast.getWrkNo(), lev == 1 ? 1014 : 1025);
//                return false;
//            }
            StaProtocol staProtocol = devpThread.getStation().get(lev == 1 ? 1015 : 1026);
            if (staProtocol.isLoading()) {
                log.error("{}任务,{}号输送线有物", wrkMast.getWrkNo(), wrkMast.getSourceStaNo());
                News.taskInfo(wrkMast.getWrkNo(), "{}任务,{}号输送线有物", wrkMast.getWrkNo(), wrkMast.getSourceStaNo());
                return false;
            WrkMast wrkMast1 = wrkMastService.selectByWorkNo(wrkMast.getMainWrkNo());
            if (wrkMast1 != null) {
                if (!mainService.isOutEnable(devpThread, wrkMast1.getStaNo())) {
                    News.taskInfo(wrkMast.getWrkNo(), "{}任务,{}号输送线不可出111", wrkMast.getWrkNo(), wrkMast1.getStaNo());
                    return false;
                }
                StaProtocol staProtocol = devpThread.getStation().get(wrkMast1.getStaNo() + 2);
                if (staProtocol.isLoading()) {
                    News.taskInfo(wrkMast.getWrkNo(), "{}任务,{}号输送线有物111", wrkMast.getWrkNo(), wrkMast1.getStaNo() + 1);
                    return false;
                }
            }
            if (shuttleProtocol.getCurrentLocNo().equals(wrkMast.getSourceLocNo())) {
@@ -216,7 +217,7 @@
            //获取穿梭车最近且空闲的提升机
            LiftThread liftThread = LiftUtils.getRecentLift(shuttleProtocol.getCurrentLocNo());
            if (liftThread == null) {
                News.info("{}号小车,{}目标库位,没有可用空闲提升机", shuttleProtocol.getShuttleNo(), shuttleProtocol.getCurrentLocNo());
                News.info("{}号小车,{}小车库位,没有可用空闲提升机", shuttleProtocol.getShuttleNo(), shuttleProtocol.getCurrentLocNo());
                return false;//没有可用且空闲的提升机
            }
@@ -293,50 +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 == 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);
            //获取穿梭车最近且空闲的提升机
            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;
            } 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());
@@ -378,9 +357,17 @@
            //提交到线程去工作
            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());//提前锁定提升机
@@ -410,42 +397,32 @@
            //获取四向穿梭车线程
            ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo());
            if (shuttleThread == null) {
                News.info("{}任务,{}号小车,小车线程不存在,禁止派发", wrkMast.getWrkNo(), wrkMast.getLiftNo());
                News.info("{}任务,{}号小车,小车线程不存在,禁止派发", wrkMast.getWrkNo(), wrkMast.getShuttleNo());
                return false;
            }
            ShuttleProtocol shuttleProtocol = shuttleThread.getStatus();
            if (shuttleProtocol == null) {
                News.info("{}任务,{}号小车,小车对象不存在,禁止派发", wrkMast.getWrkNo(), wrkMast.getLiftNo());
                News.info("{}任务,{}号小车,小车对象不存在,禁止派发", wrkMast.getWrkNo(), wrkMast.getShuttleNo());
                return false;
            }
            if (wrkMast.getLiftNo() == null) {
                News.info("{}任务,未绑定提升机,禁止派发", wrkMast.getWrkNo());
                return false;
            }
            LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, wrkMast.getLiftNo());
            if (liftThread == null) {
                News.info("{}号提升机不存在", wrkMast.getLiftNo());
                return false;
            }
            LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, 1);
            LiftProtocol liftProtocol = liftThread.getStatus();
            if (liftProtocol == null) {
                News.info("{}号提升机对象不存在", wrkMast.getLiftNo());
                News.info("{}号提升机对象不存在", 1);
                return false;
            }
            //判断提升机是否有其他任务
            WrkMast liftWrkMast = wrkMastService.selectLiftWrkMastAndWrkNo(wrkMast.getLiftNo(), wrkMast.getWrkNo(), wrkMast.getMainWrkNo());
            if (liftWrkMast != null) {
                News.info("{}任务,{}号提升机,提升机存在未完成任务,禁止派发", wrkMast.getWrkNo(), wrkMast.getLiftNo());
                News.info("{}任务,{}号提升机,提升机存在未完成任务,禁止派发", wrkMast.getWrkNo(), 1);
                return false;//当前提升机存在未完成任务,等待下一次轮询
            }
            if (!liftThread.isIdle()) {
                News.info("{}任务,{}号提升机,提升机忙碌中,禁止派发", wrkMast.getWrkNo(), wrkMast.getLiftNo());
                News.info("{}任务,{}号提升机,提升机忙碌中,禁止派发", wrkMast.getWrkNo(), 1);
                return false;
            }
@@ -843,19 +820,17 @@
            if (devpThread == null) {
                return false;
            }
            int lev = Utils.getLev(wrkMast.getLocNo());
            StaProtocol staProtocol2 = devpThread.getStation().get(lev == 1 ? 1014 : 1025);
            if (!staProtocol2.isOutEnable()) {
                log.error("{}任务,{}号输送线不可出", wrkMast.getWrkNo(), lev == 1 ? 1014 : 1025);
                News.taskInfo(wrkMast.getWrkNo(), "{}任务,{}号输送线不可出", wrkMast.getWrkNo(), lev == 1 ? 1014 : 1025);
                return false;
            }
            StaProtocol staProtocol = devpThread.getStation().get(lev == 1 ? 1015 : 1026);
            if (staProtocol.isLoading()) {
                log.error("{}任务,{}号输送线有物", wrkMast.getWrkNo(), wrkMast.getSourceStaNo());
                News.taskInfo(wrkMast.getWrkNo(), "{}任务,{}号输送线有物", wrkMast.getWrkNo(), wrkMast.getSourceStaNo());
                return false;
            WrkMast wrkMast1 = wrkMastService.selectByWorkNo(wrkMast.getMainWrkNo());
            if (wrkMast1 != null) {
                if (!mainService.isOutEnable(devpThread, wrkMast1.getStaNo())) {
                    News.taskInfo(wrkMast.getWrkNo(), "{}任务,{}号输送线不可出222", wrkMast.getWrkNo(), wrkMast1.getStaNo());
                    return false;
                }
                StaProtocol staProtocol = devpThread.getStation().get(wrkMast1.getStaNo() + 2);
                if (staProtocol.isLoading()) {
                    News.taskInfo(wrkMast.getWrkNo(), "{}任务,{}号输送线有物222", wrkMast.getWrkNo(), wrkMast1.getStaNo());
                    return false;
                }
            }
            if (shuttleProtocol.getCurrentLocNo().equals(wrkMast.getSourceLocNo())) {