1
zhangc
2025-04-14 710deccd42576ad2dcbdc22e75f18b455d5ce2ff
1
12个文件已修改
1个文件已删除
465 ■■■■■ 已修改文件
src/main/java/com/zy/asrs/mapper/WrkMastMapper.java 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/WrkMastService.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java 76 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/NoLiftInServiceImpl.java 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/NoLiftOutServiceImpl.java 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/TransportLiftInServiceImpl.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/TransportLiftOutServiceImpl.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/WrkMastServiceImpl.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/MainProcess.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/dispatcher/ShuttleDispatchUtils.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application.yml 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/WrkMastMapper.xml 240 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/sql/20250410182847.nb3 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/mapper/WrkMastMapper.java
@@ -2,7 +2,8 @@
import com.baomidou.mybatisplus.mapper.BaseMapper;
import com.zy.asrs.entity.WrkMast;
import org.apache.ibatis.annotations.*;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
import java.util.List;
@@ -14,13 +15,15 @@
    // wcs ---------------------------------------------
    // 入库第一步,扫码仪获取条码信息时查询
//    @Select("select top 1 * from asr_wrk_mast where source_sta_no=#{sourceStaNo} and wrk_sts=2 and barcode=#{barcode} and (io_type=1 or io_type=10) order by io_pri desc,io_time,wrk_no ASC")
    WrkMast selectPakInStep1(@Param("sourceStaNo")Integer sourceStaNo, @Param("barcode")String barcode);
    WrkMast selectPakInStep1(@Param("sourceStaNo") Integer sourceStaNo, @Param("barcode") String barcode);
    WrkMast selectPakInStep11(@Param("sourceStaNo")Integer sourceStaNo);
    WrkMast selectPakInStep11(@Param("sourceStaNo") Integer sourceStaNo);
    List<WrkMast> selectInStep4();
    WrkMast selectByWorkNo(Integer workNo);
    WrkMast selectByMainWrkNo(Integer workNo);
    List<WrkMast> selectLiftStep223103();
@@ -37,6 +40,8 @@
    WrkMast selectLiftWrkMast(Integer liftNo);
    WrkMast selectLiftWrkMastAndWrkNo(@Param("liftNo") Integer liftNo, @Param("wrkNo") Integer wrkNo, @Param("wrkNo2") Integer wrkNo2);
    List<WrkMast> selectLocToLocWrkMast();//查询库位移转工作档
    WrkMast selectPickStepByBarcode(String barcode);
src/main/java/com/zy/asrs/service/WrkMastService.java
@@ -9,6 +9,8 @@
    WrkMast selectByWorkNo(Integer workNo);
    WrkMast selectByMainWrkNo(Integer workNo);
    Boolean judgeInbound(WrkMast wrkMast);
    //查询指定楼层待分配车辆的任务
@@ -34,4 +36,6 @@
    WrkMast selectLiftWrkMast(Integer liftNo);
    WrkMast selectLiftWrkMastAndWrkNo(Integer liftNo, Integer wrkNo, Integer wrkNo2);
}
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -2,7 +2,6 @@
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.core.common.Cools;
import com.zy.asrs.domain.enums.NotifyMsgType;
import com.zy.asrs.entity.*;
import com.zy.asrs.service.*;
@@ -97,6 +96,8 @@
    private NoLiftOutServiceImpl noLiftOutService;
    @Autowired
    private LiftAction liftAction;
    @Autowired
    private BasWrkStatusService wrkStatusService;
    public static List<Integer> staNosIn = new ArrayList<Integer>() {{
@@ -185,9 +186,6 @@
                    // 判断是否满足入库条件
                    if (staProtocol.isAutoing() && staProtocol.isLoading() && isInEnable(devpThread, inSta.getStaNo()) && !staProtocol.isEmptyMk() && (workNo == 0 || (workNo >= 9990 && workNo <= 9999)) && staProtocol.isPakMk()) {
                        String barcode = staProtocol.getBarcode();
                        if (!Cools.isEmpty(barcode)) {
                            News.info("条码扫描器检测条码信息:{}", barcode);
                        }
                        // 判断重复工作档
                        WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("source_sta_no", inSta.getStaNo()).eq("wrk_sts", WrkStsType.NEW_INBOUND.sts).eq("barcode", barcode));
                        if (wrkMast != null) {
@@ -285,15 +283,28 @@
                } else {
                    staProtocol = staProtocol.clone();
                }
                if ((Utils.getLev(wrkMast.getLocNo()) != 1 && wrkMast.getSourceStaNo() == 1014) || (Utils.getLev(wrkMast.getLocNo()) != 5 && wrkMast.getSourceStaNo() == 1025)) {
                    //判断提升机是否有其他任务
                    WrkMast liftWrkMast = wrkMastService.selectLiftWrkMast(1);
                    if (liftWrkMast != null) {
                        if (!liftWrkMast.getWrkNo().equals(wrkMast.getWrkNo())) {//提升机任务和当前任务不相同
                            News.taskInfo(wrkMast.getWrkNo(), "{}任务,{}号提升机,提升机存在未完成任务,禁止派发", wrkMast.getWrkNo(), 1);
                            return;
                        }
                    }
                    wrkMast.setLiftNo(1);
                }
                Short finishWorkNo = staProtocol.getFinishWorkNo();
                if (finishWorkNo == null) {
                    continue;
                }
                String locNo = "1200301";
                if (wrkMast.getStaNo() == 1025) {
                    locNo = "1200305";
                }
                boolean dispatchShuttle = shuttleDispatchUtils.searchDispatchShuttleIn(wrkMast.getWrkNo(), locNo, wrkMast.getLocNo(), "TRANSPORT_DEVP", true);
                boolean dispatchShuttle = shuttleDispatchUtils.searchDispatchShuttleS(wrkMast.getWrkNo(), locNo, wrkMast.getLocNo(), "TRANSPORT_DEVP");
                if (!dispatchShuttle) {
                    News.info("{}任务,调度小车失败", wrkMast.getWrkNo());
                    return;
@@ -337,17 +348,29 @@
                News.info("{}任务,{}站点,没有可出信号", wrkMast.getWrkNo(), staProtocol.getSiteId());
                return;
            }
            if ((Utils.getLev(wrkMast.getSourceLocNo()) != 1 && wrkMast.getStaNo() == 1013) || (Utils.getLev(wrkMast.getSourceLocNo()) != 5 && wrkMast.getStaNo() == 1024)) {
                //判断提升机是否有其他任务
                WrkMast liftWrkMast = wrkMastService.selectLiftWrkMast(1);
                if (liftWrkMast != null) {
                    if (!liftWrkMast.getWrkNo().equals(wrkMast.getWrkNo())) {//提升机任务和当前任务不相同
                        News.taskInfo(wrkMast.getWrkNo(), "{}任务,{}号提升机,提升机存在未完成任务,禁止派发", wrkMast.getWrkNo(), 1);
                        return;
                    }
                }
                wrkMast.setLiftNo(1);
            }
            String locNo = "1200301";
            if (wrkMast.getStaNo() == 1024) {
                locNo = "1200305";
            }
            boolean dispatchShuttle = shuttleDispatchUtils.searchDispatchShuttleIn(wrkMast.getWrkNo(), wrkMast.getSourceLocNo(), locNo, "TRANSPORT_DEVP", false);
            boolean dispatchShuttle = shuttleDispatchUtils.searchDispatchShuttleS(wrkMast.getWrkNo(), wrkMast.getSourceLocNo(), locNo, "TRANSPORT_DEVP");
            if (!dispatchShuttle) {
                News.info("{}任务,调度小车失败", wrkMast.getWrkNo());
                return;
            }
            wrkMast.setWrkSts(WrkStsType.OUTBOUND_SHUTTLE_RUN.sts);
            wrkMast.setSystemMsg("");//清空消息
            wrkMast.setModiTime(now);
            if (wrkMastService.updateById(wrkMast)) {
@@ -398,8 +421,22 @@
     * 初始化实时地图
     */
    public synchronized void initRealtimeBasMap() {
        //初始化配置
//        WrkStsType[] values = WrkStsType.values();
//        for (int i = 0; i < values.length; i++) {
//            BasWrkStatus basWrkStatus = wrkStatusService.selectById(values[i].sts);
//            if (basWrkStatus == null) {
//                basWrkStatus = new BasWrkStatus();
//                basWrkStatus.setWrkDesc(values[i].desc);
//                basWrkStatus.setWrkSts(values[i].sts);
//                basWrkStatus.setModiTime(new Date());
//                basWrkStatus.setAppeTime(new Date());
//                basWrkStatus.setAppeUser(9527L);
//                basWrkStatus.setModiUser(9527L);
//                wrkStatusService.insert(basWrkStatus);
//            }
//        }
        try {
            List<BasMap> basMaps = basMapService.selectList(new EntityWrapper<BasMap>().orderBy("lev", true));
            for (BasMap basMap : basMaps) {
                Integer lev = basMap.getLev();
@@ -761,6 +798,14 @@
                News.info("{}任务,{}站点,托盘码不匹配,站点托盘码:{},任务托盘码:{}", wrkMast.getWrkNo(), staProtocol.getSiteId(), staProtocol.getBarcode(), wrkMast.getBarcode());
                return false;
            }
            //判断提升机是否有其他任务
            WrkMast liftWrkMast = wrkMastService.selectLiftWrkMast(1);
            if (liftWrkMast != null) {
                if (!liftWrkMast.getWrkNo().equals(wrkMast.getWrkNo())) {//提升机任务和当前任务不相同
                    News.taskInfo(wrkMast.getWrkNo(), "{}任务,{}号提升机,提升机存在未完成任务,禁止派发", wrkMast.getWrkNo(), 1);
                    return false;
                }
            }
            short staNo = 1012;
            if (wrkMast.getSourceStaNo() == 1022) {
@@ -773,6 +818,7 @@
            boolean result = MessageQueue.offer(SlaveType.Devp, 1, new Task(2, staProtocol));
            wrkMast.setWrkSts(WrkStsType.INBOUND_DEVICE_RUN.sts);
            wrkMast.setLiftNo(1);
            wrkMast.setSystemMsg("");//清空消息
            wrkMast.setModiTime(now);
            if (wrkMastService.updateById(wrkMast)) {
@@ -919,8 +965,11 @@
                News.info("{}任务,{}号提升机,提升机内无托盘,禁止派发", wrkMast.getWrkNo(), liftProtocol.getLiftNo());
                return false;
            }
            boolean dispatchShuttle = shuttleDispatchUtils.searchDispatchShuttle(wrkMast.getWrkNo(), "0200301", wrkMast.getLocNo(), "TRANSPORT_LIFT");
            String locNo = "0200305";
            if (wrkMast.getStaNo() == 1011) {
                locNo = "0200301";
            }
            boolean dispatchShuttle = shuttleDispatchUtils.searchDispatchShuttleS(wrkMast.getWrkNo(), locNo, wrkMast.getLocNo(), "TRANSPORT_LIFT");
            if (!dispatchShuttle) {
                News.info("{}任务,调度小车失败", wrkMast.getWrkNo());
                return false;
@@ -982,8 +1031,11 @@
                return false;
            }
            boolean dispatchShuttle = shuttleDispatchUtils.searchDispatchShuttle(wrkMast.getWrkNo(), wrkMast.getSourceLocNo(), "0200301", "TRANSPORT_LIFT");
            String locNo = "0200305";
            if (wrkMast.getStaNo() == 1011) {
                locNo = "0200301";
            }
            boolean dispatchShuttle = shuttleDispatchUtils.searchDispatchShuttleS(wrkMast.getWrkNo(), wrkMast.getSourceLocNo(), locNo, "TRANSPORT_LIFT");
            if (!dispatchShuttle) {
                News.info("{}任务,调度小车失败", wrkMast.getWrkNo());
                return false;
@@ -1183,6 +1235,7 @@
                            notifyUtils.notify(String.valueOf(SlaveType.Shuttle), shuttleProtocol.getShuttleNo(), String.valueOf(wrkMast.getWrkNo()), wrkMast.getWmsWrkNo(), NotifyMsgType.SHUTTLE_POWER_COMPLETE);//触发通知
                        } else if (wrkMast.getWrkSts() == WrkStsType.MOVE_IN_NO_LIFT_11.sts) {
                            wrkMast.setWrkSts(WrkStsType.MOVE_IN_NO_LIFT_12.sts);
                            wrkMast.setLiftNo(null);
                            shuttleThread.setSyncTaskNo(0);
                            notifyUtils.notify(String.valueOf(SlaveType.Shuttle), shuttleProtocol.getShuttleNo(), String.valueOf(wrkMast.getWrkNo()), wrkMast.getWmsWrkNo(), NotifyMsgType.SHUTTLE_POWER_COMPLETE);//触发通知
                        } else if (wrkMast.getWrkSts() == WrkStsType.MOVE_IN_NO_LIFT_13.sts) {
@@ -1195,6 +1248,7 @@
                            notifyUtils.notify(String.valueOf(SlaveType.Shuttle), shuttleProtocol.getShuttleNo(), String.valueOf(wrkMast.getWrkNo()), wrkMast.getWmsWrkNo(), NotifyMsgType.SHUTTLE_POWER_COMPLETE);//触发通知
                        } else if (wrkMast.getWrkSts() == WrkStsType.MOVE_OUT_NO_LIFT_10.sts) {
                            wrkMast.setWrkSts(WrkStsType.MOVE_OUT_NO_LIFT_11.sts);
                            wrkMast.setLiftNo(null);
                            shuttleThread.setSyncTaskNo(0);
                            notifyUtils.notify(String.valueOf(SlaveType.Shuttle), shuttleProtocol.getShuttleNo(), String.valueOf(wrkMast.getWrkNo()), wrkMast.getWmsWrkNo(), NotifyMsgType.SHUTTLE_POWER_COMPLETE);//触发通知
                        } else if (wrkMast.getWrkSts() == WrkStsType.MOVE_OUT_NO_LIFT_8.sts) {
src/main/java/com/zy/asrs/service/impl/NoLiftInServiceImpl.java
@@ -307,8 +307,10 @@
                //判断提升机是否有其他任务(该任务需要换层必须提前独占提升机)
                WrkMast liftWrkMast = wrkMastService.selectLiftWrkMast(liftProtocol.getLiftNo());
                if (liftWrkMast != null) {
                    News.taskInfo(wrkMast.getWrkNo(), "{}任务,{}号提升机,提升机存在未完成任务,禁止派发", wrkMast.getWrkNo(), liftProtocol.getLiftNo());
                    return false;//当前提升机存在未完成任务,等待下一次轮询
                    if (liftWrkMast != null && !wrkMast.getMainWrkNo().equals(liftWrkMast.getWrkNo())) {
                        News.taskInfo(wrkMast.getWrkNo(), "{}任务,{}号提升机,提升机存在未完成任务,禁止派发", wrkMast.getWrkNo(), liftProtocol.getLiftNo());
                        return false;//当前提升机存在未完成任务,等待下一次轮询
                    }
                }
                wrkMast.setModiTime(now);
@@ -470,6 +472,15 @@
                return false;//等待提升机到小车楼层
            }
            //判断提升机是否有其他任务
            WrkMast w = wrkMastService.selectLiftWrkMast(1);
            if (w != null) {
                if (!w.getWrkNo().equals(wrkMast.getWrkNo())) {//提升机任务和当前任务不相同
                    News.taskInfo(wrkMast.getWrkNo(), "{}任务,{}号提升机,提升机存在别的绑定任务ru,禁止派发", wrkMast.getWrkNo(), 1);
                    return false;
                }
            }
            ShuttleAssignCommand assignCommand = new ShuttleAssignCommand();
            assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo()); // 四向穿梭车编号
            assignCommand.setTaskMode(ShuttleTaskModeType.MOVE_LOC_NO.id);//小车移库任务
@@ -487,6 +498,7 @@
            wrkMast.setWrkSts(WrkStsType.MOVE_IN_NO_LIFT_7.sts);//小车移动到提升机中  提升机至小车层完成 ==> 小车迁入提升机中
            wrkMast.setModiTime(now);
            wrkMast.setLiftNo(1);
            if (wrkMastService.updateById(wrkMast)) {
                //下发任务
                shuttleAction.assignWork(shuttleProtocol.getShuttleNo(), assignCommand);
src/main/java/com/zy/asrs/service/impl/NoLiftOutServiceImpl.java
@@ -310,8 +310,10 @@
                //判断提升机是否有其他任务(该任务需要换层必须提前独占提升机)
                WrkMast liftWrkMast = wrkMastService.selectLiftWrkMast(liftProtocol.getLiftNo());
                if (liftWrkMast != null) {
                    News.taskInfo(wrkMast.getWrkNo(), "{}任务,{}号提升机,提升机存在未完成任务,禁止派发", wrkMast.getWrkNo(), liftProtocol.getLiftNo());
                    return false;//当前提升机存在未完成任务,等待下一次轮询
                    if (liftWrkMast != null && !wrkMast.getMainWrkNo().equals(liftWrkMast.getWrkNo())) {
                        News.taskInfo(wrkMast.getWrkNo(), "{}任务,{}号提升机,提升机存在未完成任务,禁止派发", wrkMast.getWrkNo(), liftProtocol.getLiftNo());
                        return false;//当前提升机存在未完成任务,等待下一次轮询
                    }
                }
                wrkMast.setModiTime(now);
@@ -334,12 +336,10 @@
            }
            //判断提升机是否有其他任务
            WrkMast liftWrkMast = wrkMastService.selectLiftWrkMast(wrkMast.getLiftNo());
            WrkMast liftWrkMast = wrkMastService.selectLiftWrkMastAndWrkNo(wrkMast.getLiftNo(), wrkMast.getWrkNo(), wrkMast.getMainWrkNo());
            if (liftWrkMast != null) {
                if (!liftWrkMast.getWrkNo().equals(wrkMast.getWrkNo())) {//提升机任务和当前任务不相同
                    News.info("{}任务,{}号提升机,提升机存在未完成任务,禁止派发", wrkMast.getWrkNo(), wrkMast.getLiftNo());
                    return false;//当前提升机存在未完成任务,等待下一次轮询
                }
                News.info("{}任务,{}号提升机,提升机存在未完成任务,禁止派发", wrkMast.getWrkNo(), wrkMast.getLiftNo());
                return false;//当前提升机存在未完成任务,等待下一次轮询
            }
            if (!liftThread.isIdle()) {
@@ -442,12 +442,10 @@
            }
            //判断提升机是否有其他任务
            WrkMast liftWrkMast = wrkMastService.selectLiftWrkMast(wrkMast.getLiftNo());
            WrkMast liftWrkMast = wrkMastService.selectLiftWrkMastAndWrkNo(wrkMast.getLiftNo(), wrkMast.getWrkNo(), wrkMast.getMainWrkNo());
            if (liftWrkMast != null) {
                if (!liftWrkMast.getWrkNo().equals(wrkMast.getWrkNo())) {//提升机任务和当前任务不相同
                    News.info("{}任务,{}号提升机,提升机存在未完成任务,禁止派发", wrkMast.getWrkNo(), wrkMast.getLiftNo());
                    return false;//当前提升机存在未完成任务,等待下一次轮询
                }
                News.info("{}任务,{}号提升机,提升机存在未完成任务,禁止派发", wrkMast.getWrkNo(), wrkMast.getLiftNo());
                return false;//当前提升机存在未完成任务,等待下一次轮询
            }
            if (!liftThread.isIdle()) {
@@ -480,6 +478,13 @@
                return false;//等待提升机到小车楼层
            }
            //判断提升机是否有其他任务
            WrkMast w = wrkMastService.selectLiftWrkMastAndWrkNo(1, wrkMast.getWrkNo(), wrkMast.getMainWrkNo());
            if (w != null) {
                News.taskInfo(wrkMast.getWrkNo(), "{}任务,{}号提升机,提升机存在别的绑定任务out,禁止派发", wrkMast.getWrkNo(), 1);
                return false;
            }
            ShuttleAssignCommand assignCommand = new ShuttleAssignCommand();
            assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo()); // 四向穿梭车编号
            assignCommand.setTaskMode(ShuttleTaskModeType.MOVE_LOC_NO.id);//小车移库任务
@@ -497,6 +502,7 @@
            wrkMast.setWrkSts(WrkStsType.MOVE_OUT_NO_LIFT_6.sts);//小车移动到提升机中  提升机至小车层完成 ==> 小车迁入提升机中
            wrkMast.setModiTime(now);
            wrkMast.setLiftNo(1);
            if (wrkMastService.updateById(wrkMast)) {
                //下发任务
                shuttleAction.assignWork(shuttleProtocol.getShuttleNo(), assignCommand);
@@ -537,12 +543,10 @@
            }
            //判断提升机是否有其他任务
            WrkMast liftWrkMast = wrkMastService.selectLiftWrkMast(wrkMast.getLiftNo());
            WrkMast liftWrkMast = wrkMastService.selectLiftWrkMastAndWrkNo(wrkMast.getLiftNo(), wrkMast.getWrkNo(), wrkMast.getMainWrkNo());
            if (liftWrkMast != null) {
                if (!liftWrkMast.getWrkNo().equals(wrkMast.getWrkNo())) {//提升机任务和当前任务不相同
                    News.info("{}任务,{}号提升机,提升机存在未完成任务,禁止派发", wrkMast.getWrkNo(), wrkMast.getLiftNo());
                    return false;//当前提升机存在未完成任务,等待下一次轮询
                }
                News.info("{}任务,{}号提升机,提升机存在未完成任务,禁止派发", wrkMast.getWrkNo(), wrkMast.getLiftNo());
                return false;//当前提升机存在未完成任务,等待下一次轮询
            }
            if (!liftThread.isIdle()) {
@@ -628,12 +632,10 @@
            }
            //判断提升机是否有其他任务
            WrkMast liftWrkMast = wrkMastService.selectLiftWrkMast(wrkMast.getLiftNo());
            WrkMast liftWrkMast = wrkMastService.selectLiftWrkMastAndWrkNo(wrkMast.getLiftNo(), wrkMast.getWrkNo(), wrkMast.getMainWrkNo());
            if (liftWrkMast != null) {
                if (!liftWrkMast.getWrkNo().equals(wrkMast.getWrkNo())) {//提升机任务和当前任务不相同
                    News.info("{}任务,{}号提升机,提升机存在未完成任务,禁止派发", wrkMast.getWrkNo(), wrkMast.getLiftNo());
                    return false;//当前提升机存在未完成任务,等待下一次轮询
                }
                News.info("{}任务,{}号提升机,提升机存在未完成任务,禁止派发", wrkMast.getWrkNo(), wrkMast.getLiftNo());
                return false;//当前提升机存在未完成任务,等待下一次轮询
            }
            LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, wrkMast.getLiftNo());
@@ -804,6 +806,14 @@
                //下发任务
                shuttleAction.assignWork(shuttleProtocol.getShuttleNo(), assignCommand);
            }
            WrkMast wrkMast1 = wrkMastService.selectByMainWrkNo(wrkMast.getWrkNo());
            if (wrkMast1 != null) {
                wrkMast.setLiftNo(null);//释放提升机
                wrkMast.setModiTime(now);
                if (!wrkMastService.updateById(wrkMast1)) {
                    News.taskInfo(wrkMast.getWrkNo(), "{}解锁提升机", wrkMast1.getWrkNo());
                }
            }
        }
        return true;
    }
src/main/java/com/zy/asrs/service/impl/TransportLiftInServiceImpl.java
@@ -206,8 +206,10 @@
                //判断提升机是否有其他任务(该任务需要换层必须提前独占提升机)
                WrkMast liftWrkMast = wrkMastService.selectLiftWrkMast(liftProtocol.getLiftNo());
                if (liftWrkMast != null) {
                    News.taskInfo(wrkMast.getWrkNo(), "{}任务,{}号提升机,提升机存在未完成任务,禁止派发", wrkMast.getWrkNo(), liftProtocol.getLiftNo());
                    return false;//当前提升机存在未完成任务,等待下一次轮询
                    if (liftWrkMast != null && !wrkMast.getMainWrkNo().equals(liftWrkMast.getWrkNo())) {
                        News.taskInfo(wrkMast.getWrkNo(), "{}任务,{}号提升机,提升机存在未完成任务,禁止派发", wrkMast.getWrkNo(), liftProtocol.getLiftNo());
                        return false;//当前提升机存在未完成任务,等待下一次轮询
                    }
                }
                wrkMast.setModiTime(now);
src/main/java/com/zy/asrs/service/impl/TransportLiftOutServiceImpl.java
@@ -252,8 +252,10 @@
                //判断提升机是否有其他任务(该任务需要换层必须提前独占提升机)
                WrkMast liftWrkMast = wrkMastService.selectLiftWrkMast(liftProtocol.getLiftNo());
                if (liftWrkMast != null) {
                    News.taskInfo(wrkMast.getWrkNo(), "{}任务,{}号提升机,提升机存在未完成任务,禁止派发", wrkMast.getWrkNo(), liftProtocol.getLiftNo());
                    return false;//当前提升机存在未完成任务,等待下一次轮询
                    if (liftWrkMast != null && !wrkMast.getMainWrkNo().equals(liftWrkMast.getWrkNo())) {
                        News.taskInfo(wrkMast.getWrkNo(), "{}任务,{}号提升机,提升机存在未完成任务,禁止派发", wrkMast.getWrkNo(), liftProtocol.getLiftNo());
                        return false;//当前提升机存在未完成任务,等待下一次轮询
                    }
                }
                wrkMast.setModiTime(now);
src/main/java/com/zy/asrs/service/impl/WrkMastServiceImpl.java
@@ -20,6 +20,11 @@
    }
    @Override
    public WrkMast selectByMainWrkNo(Integer workNo) {
        return this.baseMapper.selectByMainWrkNo(workNo);
    }
    @Override
    public Boolean judgeInbound(WrkMast wrkMast) {
        switch (WrkStsType.query(wrkMast.getWrkSts())) {
            case NEW_INBOUND:
@@ -125,4 +130,9 @@
    public WrkMast selectLiftWrkMast(Integer liftNo) {
        return this.baseMapper.selectLiftWrkMast(liftNo);
    }
    @Override
    public WrkMast selectLiftWrkMastAndWrkNo(Integer liftNo, Integer wrkNo, Integer manWrkNo) {
        return this.baseMapper.selectLiftWrkMastAndWrkNo(liftNo, wrkNo, manWrkNo);
    }
}
src/main/java/com/zy/core/MainProcess.java
@@ -40,6 +40,9 @@
                    if (!SystemProperties.WCS_RUNNING_STATUS.get()) {
                        continue;
                    }
                    //初始化实时地图
                    mainService.initRealtimeBasMap();
                    //zhangc
                    //输送线
                    // 入库
@@ -51,8 +54,7 @@
                    //输送线完成判断
                    mainService.devpFinished();
                    //初始化实时地图
                    mainService.initRealtimeBasMap();
//                    // 入库  ===>>  四向穿梭车入库作业下发
//                    mainService.shuttleInExecute();
//                    // 出库  ===>>  四向穿梭车出库作业下发
src/main/java/com/zy/core/dispatcher/ShuttleDispatchUtils.java
@@ -210,7 +210,7 @@
    /**
     * 调度车辆
     */
    public boolean searchDispatchShuttleIn(Integer wrkNo, String sourceLocNo, String locNo, String flag, boolean in) {
    public boolean searchDispatchShuttleS(Integer wrkNo, String sourceLocNo, String locNo, String flag) {
        ArrayList<ShuttleThread> sameLev = new ArrayList<>();//相同楼层的穿梭车
        ArrayList<ShuttleThread> diffLev = new ArrayList<>();//不同楼层的穿梭车
@@ -251,23 +251,13 @@
                }
                break;
            }
//            if (in) {
                if (currentLev == Utils.getLev(sourceLocNo)) {
                    //工作档楼层相同的穿梭车
                    sameLev.add(shuttleThread);
                } else {
                    //工作档不同楼层的穿梭车
                    diffLev.add(shuttleThread);
                }
//            } else {
//                if (currentLev == Utils.getLev(locNo)) {
//                    //工作档楼层相同的穿梭车
//                    sameLev.add(shuttleThread);
//                } else {
//                    //工作档不同楼层的穿梭车
//                    diffLev.add(shuttleThread);
//                }
//            }
            if (currentLev == Utils.getLev(sourceLocNo)) {
                //工作档楼层相同的穿梭车
                sameLev.add(shuttleThread);
            } else {
                //工作档不同楼层的穿梭车
                diffLev.add(shuttleThread);
            }
        }
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://127.0.0.1:3306/fyxc_shuttle?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai
    url: jdbc:mysql://192.168.10.201:3306/fyxc_shuttle?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai
    username: root
    password: root
  mvc:
@@ -103,13 +103,13 @@
      led: ${wcs-slave.led[3].id}
    # 出库口1
    outSta[0]:
      staNo: 1012
      staNo: 1011
    outSta[1]:
      staNo: 1014
      staNo: 1013
    outSta[2]:
      staNo: 1022
      staNo: 1021
    outSta[3]:
      staNo: 1025
      staNo: 1024
  # LED1
  led[0]:
    id: 1
src/main/resources/mapper/WrkMastMapper.xml
@@ -4,177 +4,217 @@
    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="com.zy.asrs.entity.WrkMast">
        <id column="wrk_no" property="wrkNo" />
        <result column="mk" property="mk" />
        <result column="wrk_sts" property="wrkSts" />
        <result column="io_type" property="ioType" />
        <result column="io_pri" property="ioPri" />
        <result column="loc_no" property="locNo" />
        <result column="sta_no" property="staNo" />
        <result column="source_sta_no" property="sourceStaNo" />
        <result column="source_loc_no" property="sourceLocNo" />
        <result column="io_time" property="ioTime" />
        <result column="modi_user" property="modiUser" />
        <result column="modi_time" property="modiTime" />
        <result column="appe_user" property="appeUser" />
        <result column="appe_time" property="appeTime" />
        <result column="error_time" property="errorTime" />
        <result column="error_memo" property="errorMemo" />
        <result column="memo" property="memo" />
        <result column="barcode" property="barcode" />
        <result column="shuttle_no" property="shuttleNo" />
        <result column="lift_no" property="liftNo" />
        <result column="wms_wrk_no" property="wmsWrkNo" />
        <result column="system_msg" property="systemMsg" />
        <result column="main_wrk_no" property="mainWrkNo" />
        <id column="wrk_no" property="wrkNo"/>
        <result column="mk" property="mk"/>
        <result column="wrk_sts" property="wrkSts"/>
        <result column="io_type" property="ioType"/>
        <result column="io_pri" property="ioPri"/>
        <result column="loc_no" property="locNo"/>
        <result column="sta_no" property="staNo"/>
        <result column="source_sta_no" property="sourceStaNo"/>
        <result column="source_loc_no" property="sourceLocNo"/>
        <result column="io_time" property="ioTime"/>
        <result column="modi_user" property="modiUser"/>
        <result column="modi_time" property="modiTime"/>
        <result column="appe_user" property="appeUser"/>
        <result column="appe_time" property="appeTime"/>
        <result column="error_time" property="errorTime"/>
        <result column="error_memo" property="errorMemo"/>
        <result column="memo" property="memo"/>
        <result column="barcode" property="barcode"/>
        <result column="shuttle_no" property="shuttleNo"/>
        <result column="lift_no" property="liftNo"/>
        <result column="wms_wrk_no" property="wmsWrkNo"/>
        <result column="system_msg" property="systemMsg"/>
        <result column="main_wrk_no" property="mainWrkNo"/>
    </resultMap>
    <select id="selectPakInStep1" resultMap="BaseResultMap">
        select * from asr_wrk_mast where source_sta_no=#{sourceStaNo} and wrk_sts=2 and barcode=#{barcode} and (io_type=1 or io_type=10) order by io_pri desc,io_time,wrk_no ASC limit 0,1
        select *
        from asr_wrk_mast
        where source_sta_no = #{sourceStaNo}
          and wrk_sts = 2
          and barcode = #{barcode}
          and (io_type = 1 or io_type = 10)
        order by io_pri desc, io_time, wrk_no ASC limit 0,1
    </select>
    <select id="selectPakInStep11" resultMap="BaseResultMap">
        select * from asr_wrk_mast where source_sta_no=#{sourceStaNo} and wrk_sts=1 and (io_type=1 or io_type=10) order by io_pri desc,io_time,wrk_no ASC limit 0,1
        select *
        from asr_wrk_mast
        where source_sta_no = #{sourceStaNo}
          and wrk_sts = 1
          and (io_type = 1 or io_type = 10)
        order by io_pri desc, io_time, wrk_no ASC limit 0,1
    </select>
    <select id="selectInStep4" resultMap="BaseResultMap">
        select *
        from asr_wrk_mast
        where 1=1
        and wrk_sts = 4
        and io_type in (1,10,53,57)
        order by io_pri desc,wrk_sts desc
        where 1 = 1
          and wrk_sts = 4
          and io_type in (1, 10, 53, 57)
        order by io_pri desc, wrk_sts desc
    </select>
    <select id="selectByWorkNo" resultMap="BaseResultMap">
        select * from asr_wrk_mast
        where wrk_no=#{workNo}
        limit 0,1
        select *
        from asr_wrk_mast
        where wrk_no = #{workNo} limit 0,1
    </select>
    <select id="selectByMainWrkNo" resultMap="BaseResultMap">
        select *
        from asr_wrk_mast
        where main_wrk_no = #{mainWrkNo} limit 0,1
    </select>
    <select id="selectLiftStep223103" resultMap="BaseResultMap">
        select * from asr_wrk_mast
        where 1=1
        and wrk_sts in (2,103,303)
        order by io_pri desc,wrk_sts desc
        select *
        from asr_wrk_mast
        where 1 = 1
          and wrk_sts in (2, 103, 303)
        order by io_pri desc, wrk_sts desc
    </select>
    <select id="selectByWorkNo324104" resultMap="BaseResultMap">
        select * from asr_wrk_mast
        where wrk_no=#{workNo}
        and wrk_sts in (3,104,303,306)
        limit 0,1
        select *
        from asr_wrk_mast
        where wrk_no = #{workNo}
          and wrk_sts in (3, 104, 303, 306) limit 0,1
    </select>
    <select id="selectBy2125" resultMap="BaseResultMap">
        select * from asr_wrk_mast
        where wrk_sts in (101,105)
        and io_type in (101,103,107,110)
        order by io_pri desc,wrk_sts desc
        select *
        from asr_wrk_mast
        where wrk_sts in (101, 105)
          and io_type in (101, 103, 107, 110)
        order by io_pri desc, wrk_sts desc
    </select>
    <select id="selectNoShuttleWrkByLev" resultMap="BaseResultMap">
        select * from asr_wrk_mast
        select *
        from asr_wrk_mast
        where shuttle_no is null
        and ((wrk_sts = 2 and loc_no like #{lev}) or (wrk_sts = 101 and source_loc_no like #{lev}))
        order by io_pri desc,wrk_sts desc
          and ((wrk_sts = 2 and loc_no like #{lev}) or (wrk_sts = 101 and source_loc_no like #{lev}))
        order by io_pri desc, wrk_sts desc
    </select>
    <select id="selectShuttleWrkByLev" resultMap="BaseResultMap">
        select * from asr_wrk_mast
        select *
        from asr_wrk_mast
        where shuttle_no is not null
        and ((wrk_sts not in (9,10)  and loc_no like #{lev}) or (wrk_sts not in (29,30) and source_loc_no like #{lev}))
        order by io_pri desc,wrk_sts desc
          and ((wrk_sts not in (9, 10) and loc_no like #{lev}) or
               (wrk_sts not in (29, 30) and source_loc_no like #{lev}))
        order by io_pri desc, wrk_sts desc
    </select>
    <select id="selectShuttleOutWrkByLev" resultMap="BaseResultMap">
        select * from asr_wrk_mast
        select *
        from asr_wrk_mast
        where shuttle_no is not null
        and (wrk_sts not in (109,110) and source_loc_no like #{lev})
        order by io_pri desc,wrk_sts desc
          and (wrk_sts not in (109, 110) and source_loc_no like #{lev})
        order by io_pri desc, wrk_sts desc
    </select>
    <select id="selectLiftWrkMast" resultMap="BaseResultMap">
        select * from asr_wrk_mast
        select *
        from asr_wrk_mast
        where lift_no = #{liftNo} limit 0,1
    </select>
    <select id="selectLiftWrkMastAndWrkNo" resultMap="BaseResultMap">
        select *
        from asr_wrk_mast
        where lift_no = #{liftNo}
        and wrk_sts in (3,4,104,105,301,302,303,304,305,306,307,308,309)
        <if test="wrkNo !=null">
            and wrk_no != #{wrkNo}
        </if>
        <if test="wrkNo2 !=null">
            and wrk_no != #{wrkNo2}
        </if>
        limit 0,1
    </select>
    <select id="selectLocToLocWrkMast" resultMap="BaseResultMap">
        select * from asr_wrk_mast
        select *
        from asr_wrk_mast
        where io_type in (11)
        and wrk_sts not in (9,10,109,110)
        order by io_pri desc,wrk_sts desc
          and wrk_sts not in (9, 10, 109, 110)
        order by io_pri desc, wrk_sts desc
    </select>
    <select id="selectPickStepByBarcode" resultMap="BaseResultMap">
        select * from asr_wrk_mast
        where io_type in (53,103,107)
        and wrk_sts in (2,3,104,109)
        and barcode = #{barcode}
        order by io_pri desc,wrk_sts desc
        limit 0,1
        select *
        from asr_wrk_mast
        where io_type in (53, 103, 107)
          and wrk_sts in (2, 3, 104, 109)
          and barcode = #{barcode}
        order by io_pri desc, wrk_sts desc limit 0,1
    </select>
    <select id="selectShuttleHasMoveWorking" resultMap="BaseResultMap">
        select * from asr_wrk_mast
        where 1=1
        and shuttle_no = #{shuttleNo}
        and wrk_sts not in (311)
        and io_type = 200
        order by io_pri desc,io_time,wrk_no asc
        limit 0,1
        select *
        from asr_wrk_mast
        where 1 = 1
          and shuttle_no = #{shuttleNo}
          and wrk_sts not in (311)
          and io_type = 200
        order by io_pri desc, io_time, wrk_no asc limit 0,1
    </select>
    <select id="selectShuttleMoveWrk" resultMap="BaseResultMap">
        select * from asr_wrk_mast
        where 1=1
        select *
        from asr_wrk_mast
        where 1 = 1
--         and wrk_sts in (301,302,303,304,305,306,307,308,309,310,311)
        and io_type = 200
        order by io_pri desc,io_time,wrk_no asc
          and io_type = 200
        order by io_pri desc, io_time, wrk_no asc
    </select>
    <select id="selectShuttleWorking" resultMap="BaseResultMap">
        select * from asr_wrk_mast
        where 1=1
        and shuttle_no = #{shuttleNo}
        and wrk_sts not in (9,10,109,110,210)
        and io_type not in (200,300)
        order by io_pri desc,io_time,wrk_no asc
        limit 0,1
        select *
        from asr_wrk_mast
        where 1 = 1
          and shuttle_no = #{shuttleNo}
          and wrk_sts not in (9, 10, 109, 110, 210)
          and io_type not in (200, 300)
        order by io_pri desc, io_time, wrk_no asc limit 0,1
    </select>
    <select id="selectByBarcode" resultMap="BaseResultMap">
        select * from asr_wrk_mast
        where 1=1
        and barcode = #{barcode}
        order by io_pri desc,io_time,wrk_no asc
        limit 0,1
        select *
        from asr_wrk_mast
        where 1 = 1
          and barcode = #{barcode}
        order by io_pri desc, io_time, wrk_no asc limit 0,1
    </select>
    <select id="selectInWrkMastByLiftNo" resultMap="BaseResultMap">
        select * from asr_wrk_mast
        where 1=1
        and lift_no = #{liftNo}
        and io_type &lt;= 100
        and wrk_sts in (1,2,3,4,5)
        order by io_pri desc,io_time,wrk_no asc
        select *
        from asr_wrk_mast
        where 1 = 1
          and lift_no = #{liftNo}
          and io_type &lt;= 100
          and wrk_sts in (1, 2, 3, 4, 5)
        order by io_pri desc, io_time, wrk_no asc
    </select>
    <select id="selectChargeWorking" resultMap="BaseResultMap">
        select * from asr_wrk_mast
        select *
        from asr_wrk_mast
        where io_type in (300)
        and shuttle_no = #{shuttleNo}
        order by io_pri desc,io_time,wrk_no asc
          and shuttle_no = #{shuttleNo}
        order by io_pri desc, io_time, wrk_no asc
    </select>
    <select id="selectChargeWorkingByChargeSta" resultMap="BaseResultMap">
        select * from asr_wrk_mast
        where wrk_sts in (201,202,203,204,205,210)
        and mk = #{chargeSta}
        order by io_pri desc,io_time,wrk_no asc
        select *
        from asr_wrk_mast
        where wrk_sts in (201, 202, 203, 204, 205, 210)
          and mk = #{chargeSta}
        order by io_pri desc, io_time, wrk_no asc
    </select>
</mapper>
src/main/resources/sql/20250410182847.nb3
Binary files differ