zc
2025-05-07 dc3483f84d517bfa2cbcc96a0c965f26d63aa3c3
解决提升机在本层,而没有锁提升机的问题
6个文件已修改
54 ■■■■ 已修改文件
src/main/java/com/zy/asrs/service/impl/NoLiftInServiceImpl.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/NoLiftOutServiceImpl.java 39 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/TransportLiftInServiceImpl.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/TransportLiftOutServiceImpl.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/dispatcher/ShuttleDispatchUtils.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/NoLiftInServiceImpl.java
@@ -383,6 +383,7 @@
                //提升机在小车楼层
                wrkMast.setWrkSts(WrkStsType.MOVE_IN_NO_LIFT_6.sts);//小车移动到提升机中  小车移动至站点完成 ==> 提升机至小车层完成
                wrkMast.setModiTime(now);
                wrkMast.setLiftNo(1);
                wrkMastService.updateById(wrkMast);
                return false;
            }
src/main/java/com/zy/asrs/service/impl/NoLiftOutServiceImpl.java
@@ -219,13 +219,13 @@
            //获取穿梭车最近且空闲的提升机
            LiftThread liftThread = LiftUtils.getRecentLift(shuttleProtocol.getCurrentLocNo());
            if (liftThread == null) {
                 News.taskInfo(wrkMast.getWrkNo(),"{}号小车,{}小车库位,没有可用空闲提升机", shuttleProtocol.getShuttleNo(), shuttleProtocol.getCurrentLocNo());
                News.taskInfo(wrkMast.getWrkNo(), "{}号小车,{}小车库位,没有可用空闲提升机", shuttleProtocol.getShuttleNo(), shuttleProtocol.getCurrentLocNo());
                return false;//没有可用且空闲的提升机
            }
            LiftProtocol liftProtocol = liftThread.getStatus();
            if (liftProtocol == null) {
                 News.taskInfo(wrkMast.getWrkNo(),"{}号提升机对象不存在", wrkMast.getLiftNo());
                News.taskInfo(wrkMast.getWrkNo(), "{}号提升机对象不存在", wrkMast.getLiftNo());
                return false;
            }
@@ -284,13 +284,13 @@
            //获取四向穿梭车线程
            ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo());
            if (shuttleThread == null) {
                 News.taskInfo(wrkMast.getWrkNo(),"{}任务,{}号小车,小车线程不存在,禁止派发", wrkMast.getWrkNo(), wrkMast.getLiftNo());
                News.taskInfo(wrkMast.getWrkNo(), "{}任务,{}号小车,小车线程不存在,禁止派发", wrkMast.getWrkNo(), wrkMast.getLiftNo());
                return false;
            }
            ShuttleProtocol shuttleProtocol = shuttleThread.getStatus();
            if (shuttleProtocol == null) {
                 News.taskInfo(wrkMast.getWrkNo(),"{}任务,{}号小车,小车对象不存在,禁止派发", wrkMast.getWrkNo(), wrkMast.getLiftNo());
                News.taskInfo(wrkMast.getWrkNo(), "{}任务,{}号小车,小车对象不存在,禁止派发", wrkMast.getWrkNo(), wrkMast.getLiftNo());
                return false;
            }
@@ -301,38 +301,38 @@
            //获取穿梭车最近且空闲的提升机
            liftThread = LiftUtils.getRecentLift(shuttleProtocol.getCurrentLocNo());
            if (liftThread == null) {
                 News.taskInfo(wrkMast.getWrkNo(),"{}号小车,{}目标库位,没有可用空闲提升机", shuttleProtocol.getShuttleNo(), shuttleProtocol.getCurrentLocNo());
                News.taskInfo(wrkMast.getWrkNo(), "{}号小车,{}目标库位,没有可用空闲提升机", shuttleProtocol.getShuttleNo(), shuttleProtocol.getCurrentLocNo());
                return false;//没有可用且空闲的提升机
            }
            liftProtocol = liftThread.getStatus();
            //判断提升机内是否有小车
            if (liftProtocol.getHasCar()) {
                 News.taskInfo(wrkMast.getWrkNo(),"{}任务,{}号提升机,提升机内有小车,禁止派发", wrkMast.getWrkNo(), liftProtocol.getLiftNo());
                News.taskInfo(wrkMast.getWrkNo(), "{}任务,{}号提升机,提升机内有小车,禁止派发", wrkMast.getWrkNo(), liftProtocol.getLiftNo());
                return false;
            }
            //判断提升机内是否有托盘
            if (liftProtocol.getHasTray()) {
                 News.taskInfo(wrkMast.getWrkNo(),"{}任务,{}号提升机,提升机内有托盘,禁止派发", wrkMast.getWrkNo(), liftProtocol.getLiftNo());
                News.taskInfo(wrkMast.getWrkNo(), "{}任务,{}号提升机,提升机内有托盘,禁止派发", wrkMast.getWrkNo(), liftProtocol.getLiftNo());
                return false;
            }
            if (!liftThread.isIdle()) {
                 News.taskInfo(wrkMast.getWrkNo(),"{}任务,{}号提升机,提升机忙碌中,禁止派发", wrkMast.getWrkNo(), wrkMast.getLiftNo());
                News.taskInfo(wrkMast.getWrkNo(), "{}任务,{}号提升机,提升机忙碌中,禁止派发", wrkMast.getWrkNo(), wrkMast.getLiftNo());
                return false;
            }
            //判断提升机内是否有小车
            if (liftProtocol.getHasCar()) {
                 News.taskInfo(wrkMast.getWrkNo(),"{}任务,{}号提升机,提升机内有小车,禁止派发", wrkMast.getWrkNo(), liftProtocol.getLiftNo());
                News.taskInfo(wrkMast.getWrkNo(), "{}任务,{}号提升机,提升机内有小车,禁止派发", wrkMast.getWrkNo(), liftProtocol.getLiftNo());
                return false;//提升机内无小车
            }
            //判断提升机内是否有托盘
            if (liftProtocol.getHasTray()) {
                 News.taskInfo(wrkMast.getWrkNo(),"{}任务,{}号提升机,提升机内有托盘,禁止派发", wrkMast.getWrkNo(), liftProtocol.getLiftNo());
                News.taskInfo(wrkMast.getWrkNo(), "{}任务,{}号提升机,提升机内有托盘,禁止派发", wrkMast.getWrkNo(), liftProtocol.getLiftNo());
                return false;//提升机内无小车
            }
@@ -341,6 +341,7 @@
                //提升机在小车楼层
                wrkMast.setWrkSts(WrkStsType.MOVE_OUT_NO_LIFT_5.sts);//小车移动到提升机中  小车移动至站点完成 ==> 提升机至小车层完成
                wrkMast.setModiTime(now);
                wrkMast.setLiftNo(1);
                wrkMastService.updateById(wrkMast);
                return false;
            }
@@ -367,7 +368,7 @@
            //判断提升机是否有其他任务
            WrkMast liftWrkMast = wrkMastService.selectLiftWrkMastAndWrkNo(wrkMast.getLiftNo(), wrkMast.getWrkNo(), wrkMast.getMainWrkNo());
            if (liftWrkMast != null) {
                 News.taskInfo(wrkMast.getWrkNo(),"{}任务,{}号提升机,提升机存在未完成任务,禁止派发", wrkMast.getWrkNo(), wrkMast.getLiftNo());
                News.taskInfo(wrkMast.getWrkNo(), "{}任务,{}号提升机,提升机存在未完成任务,禁止派发", wrkMast.getWrkNo(), wrkMast.getLiftNo());
                return false;//当前提升机存在未完成任务,等待下一次轮询
            }
@@ -399,44 +400,44 @@
            //获取四向穿梭车线程
            ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo());
            if (shuttleThread == null) {
                 News.taskInfo(wrkMast.getWrkNo(),"{}任务,{}号小车,小车线程不存在,禁止派发", wrkMast.getWrkNo(), wrkMast.getShuttleNo());
                News.taskInfo(wrkMast.getWrkNo(), "{}任务,{}号小车,小车线程不存在,禁止派发", wrkMast.getWrkNo(), wrkMast.getShuttleNo());
                return false;
            }
            ShuttleProtocol shuttleProtocol = shuttleThread.getStatus();
            if (shuttleProtocol == null) {
                 News.taskInfo(wrkMast.getWrkNo(),"{}任务,{}号小车,小车对象不存在,禁止派发", wrkMast.getWrkNo(), wrkMast.getShuttleNo());
                News.taskInfo(wrkMast.getWrkNo(), "{}任务,{}号小车,小车对象不存在,禁止派发", wrkMast.getWrkNo(), wrkMast.getShuttleNo());
                return false;
            }
            LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, 1);
            LiftThread liftThread = LiftUtils.getRecentLift(shuttleProtocol.getCurrentLocNo());
            LiftProtocol liftProtocol = liftThread.getStatus();
            if (liftProtocol == null) {
                 News.taskInfo(wrkMast.getWrkNo(),"{}号提升机对象不存在", 1);
                News.taskInfo(wrkMast.getWrkNo(), "{}号提升机对象不存在", 1);
                return false;
            }
            //判断提升机是否有其他任务
            WrkMast liftWrkMast = wrkMastService.selectLiftWrkMastAndWrkNo(wrkMast.getLiftNo(), wrkMast.getWrkNo(), wrkMast.getMainWrkNo());
            if (liftWrkMast != null) {
                 News.taskInfo(wrkMast.getWrkNo(),"{}任务,{}号提升机,提升机存在未完成任务,禁止派发", wrkMast.getWrkNo(), 1);
                News.taskInfo(wrkMast.getWrkNo(), "{}任务,{}号提升机,提升机存在未完成任务,禁止派发", wrkMast.getWrkNo(), 1);
                return false;//当前提升机存在未完成任务,等待下一次轮询
            }
            if (!liftThread.isIdle()) {
                 News.taskInfo(wrkMast.getWrkNo(),"{}任务,{}号提升机,提升机忙碌中,禁止派发", wrkMast.getWrkNo(), 1);
                News.taskInfo(wrkMast.getWrkNo(), "{}任务,{}号提升机,提升机忙碌中,禁止派发", wrkMast.getWrkNo(), 1);
                return false;
            }
            //小车处于空闲状态
            if (!shuttleThread.isIdle()) {
                 News.taskInfo(wrkMast.getWrkNo(),"{}任务,{}小车,小车忙碌中,禁止派发", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
                News.taskInfo(wrkMast.getWrkNo(), "{}任务,{}小车,小车忙碌中,禁止派发", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
                return false;
            }
            //判断提升机内是否有小车
            if (liftProtocol.getHasCar()) {
                 News.taskInfo(wrkMast.getWrkNo(),"{}任务,{}号提升机,提升机内有小车,禁止派发", wrkMast.getWrkNo(), liftProtocol.getLiftNo());
                News.taskInfo(wrkMast.getWrkNo(), "{}任务,{}号提升机,提升机内有小车,禁止派发", wrkMast.getWrkNo(), liftProtocol.getLiftNo());
                return false;//提升机内无小车
            }
src/main/java/com/zy/asrs/service/impl/TransportLiftInServiceImpl.java
@@ -263,6 +263,7 @@
                //提升机在小车楼层
                wrkMast.setWrkSts(WrkStsType.MOVE_LIFT_TO_SHUTTLE_COMPLETE_TRANSPORT_LIFT.sts);//小车移动到提升机中  小车移动至站点完成 ==> 提升机至小车层完成
                wrkMast.setModiTime(now);
                wrkMast.setLiftNo(liftProtocol.getLiftNo());//提前锁定提升机
                wrkMastService.updateById(wrkMast);
                return false;
            }
src/main/java/com/zy/asrs/service/impl/TransportLiftOutServiceImpl.java
@@ -308,6 +308,7 @@
                //提升机在小车楼层
                wrkMast.setWrkSts(WrkStsType.MOVE_LIFT_TO_SHUTTLE_COMPLETE_TRANSPORT_LIFT_OUT.sts);//小车移动到提升机中  小车移动至站点完成 ==> 提升机至小车层完成
                wrkMast.setModiTime(now);
                wrkMast.setLiftNo(liftProtocol.getLiftNo());//提前锁定提升机
                wrkMastService.updateById(wrkMast);
                return false;
            }
src/main/java/com/zy/core/dispatcher/ShuttleDispatchUtils.java
@@ -423,11 +423,11 @@
                //检测目标楼层车数量是否小于允许的最大数量
                boolean checkDispatchMaxNum = checkDispatchMaxNum(lev);
                if (!checkDispatchMaxNum) {
                    News.info("{}任务,{}层,已经达到当前楼层调度车辆最大值", wrkMast1.getWrkNo(), lev);
                    return false;
                }
//                boolean checkDispatchMaxNum = checkDispatchMaxNum(lev);
//                if (!checkDispatchMaxNum) {
//                    News.info("{}任务,{}层,已经达到当前楼层调度车辆最大值", wrkMast1.getWrkNo(), lev);
//                    return false;
//                }
                for (ShuttleThread shuttleThread : diffLev) {
                    ShuttleProtocol shuttleProtocol = shuttleThread.getStatus();
src/main/resources/application.yml
@@ -11,7 +11,7 @@
      validation-timeout: 3000
      connection-test-query: select 1
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://192.168.10.201:3306/fyxc_shuttle?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai
    url: jdbc:mysql://127.0.0.1:3306/fyxc_shuttle?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai
    username: root
    password: root
  mvc: