999
zhangc
2025-04-19 f0e2feba85291e700eae3b0a8cedd28f37b44c02
src/main/java/com/zy/core/dispatcher/ShuttleDispatchUtils.java
@@ -177,16 +177,20 @@
                    //当前穿梭车库位号
                    String currentLocNo = shuttleProtocol.getCurrentLocNo();
                    int currentLev = Utils.getLev(currentLocNo);
                    List<WrkMast> wrkMasts1 = wrkMastService.selectNoShuttleWrkByLev(currentLev);//判断当前穿梭车楼层是否有待分配车辆的任务,如果有则不分配这辆车
                    int shuttleCount = this.getShuttleCountByLev(currentLev);//获取穿梭车楼层车辆数量
                    if (!wrkMasts1.isEmpty() && shuttleCount <= 1) {
                        //存在其他任务且可用小车数量小于等于1,跳过这辆车
                        continue;
                    }
//                    List<WrkMast> wrkMasts1 = wrkMastService.selectNoShuttleWrkByLev(currentLev);//判断当前穿梭车楼层是否有待分配车辆的任务,如果有则不分配这辆车
//                    int shuttleCount = this.getShuttleCountByLev(currentLev);//获取穿梭车楼层车辆数量
//                    if (!wrkMasts1.isEmpty() && shuttleCount <= 1) {
//                        //存在其他任务且可用小车数量小于等于1,跳过这辆车
//                        continue;
//                    }
                    //ABS(目标楼层 - 当前楼层) 得到差距,取最小差值
                    int currentValue = Math.abs(lev - currentLev);
                    diffShuttles.put(currentValue, shuttleThread);
                    if (diffShuttles.get(currentValue) != null) {
                        diffShuttles.put(currentValue + 1, shuttleThread);
                    } else {
                        diffShuttles.put(currentValue, shuttleThread);
                    }
                }
                //尝试调度跨楼层小车
@@ -203,7 +207,7 @@
            }
        }
        News.info("{}目标库位没有搜索到可用穿梭车", locNo);
        //News.info("{}目标库位没有搜索到可用穿梭车", locNo);
        return false;
    }
@@ -240,7 +244,7 @@
            int currentLev = Utils.getLev(shuttleProtocol.getCurrentLocNo());//小车当前层高
            String currentLocNo = shuttleProtocol.getCurrentLocNo();//小车当前库位号
            if (currentLocNo.equals(locNo)) {
            if (currentLocNo.equals(locNo) || currentLocNo.equals(sourceLocNo)) {
                //车辆当前位置已经是目标库位,调度该车
                //给工作档绑定小车号
                WrkMast wrkMast1 = wrkMastService.selectByWorkNo(wrkNo);
@@ -274,12 +278,22 @@
                    sameShuttles.put(-1, shuttleThread);
                    continue;
                }
                //当前穿梭车线程到目标地点距离
                List<NavigateNode> currentShuttlePath = navigateUtils.calc(currentLocNo, locNo, NavigationMapType.NORMAL.id, Utils.getShuttlePoints(shuttleNo, Utils.getLev(currentLocNo)), null);//搜索空闲穿梭车,使用正常通道地图
                if (currentShuttlePath == null) {
                    continue;
                //TODO
                List<NavigateNode> currentShuttlePath;
                if (Utils.getLev(currentLocNo) != Utils.getLev(locNo)) {
                    //当前穿梭车线程到目标地点距离
                    currentShuttlePath = navigateUtils.calc(currentLocNo, sourceLocNo, NavigationMapType.NORMAL.id, Utils.getShuttlePoints(shuttleNo, Utils.getLev(currentLocNo)), null);//搜索空闲穿梭车,使用正常通道地图
                    if (currentShuttlePath == null) {
                        continue;
                    }
                } else {
                    //当前穿梭车线程到目标地点距离
                    currentShuttlePath = navigateUtils.calc(currentLocNo, locNo, NavigationMapType.NORMAL.id, Utils.getShuttlePoints(shuttleNo, Utils.getLev(currentLocNo)), null);//搜索空闲穿梭车,使用正常通道地图
                    if (currentShuttlePath == null) {
                        continue;
                    }
                }
                Integer currentAllDistance = navigateUtils.getOriginPathAllDistance(currentShuttlePath);//计算当前路径行走总距离
                sameShuttles.put(currentAllDistance, shuttleThread);
            }
@@ -319,16 +333,20 @@
                    //当前穿梭车库位号
                    String currentLocNo = shuttleProtocol.getCurrentLocNo();
                    int currentLev = Utils.getLev(currentLocNo);
                    List<WrkMast> wrkMasts1 = wrkMastService.selectNoShuttleWrkByLev(currentLev);//判断当前穿梭车楼层是否有待分配车辆的任务,如果有则不分配这辆车
                    int shuttleCount = this.getShuttleCountByLev(currentLev);//获取穿梭车楼层车辆数量
                    if (!wrkMasts1.isEmpty() && shuttleCount <= 1) {
                        //存在其他任务且可用小车数量小于等于1,跳过这辆车
                        continue;
                    }
//                    List<WrkMast> wrkMasts1 = wrkMastService.selectNoShuttleWrkByLev(currentLev);//判断当前穿梭车楼层是否有待分配车辆的任务,如果有则不分配这辆车
//                    int shuttleCount = this.getShuttleCountByLev(currentLev);//获取穿梭车楼层车辆数量
//                    if (!wrkMasts1.isEmpty() && shuttleCount <= 1) {
//                        //存在其他任务且可用小车数量小于等于1,跳过这辆车
//                        continue;
//                    }
                    //ABS(目标楼层 - 当前楼层) 得到差距,取最小差值
                    int currentValue = Math.abs(lev - currentLev);
                    diffShuttles.put(currentValue, shuttleThread);
                    if (diffShuttles.get(currentValue) != null) {
                        diffShuttles.put(currentValue + 1, shuttleThread);
                    } else {
                        diffShuttles.put(currentValue, shuttleThread);
                    }
                }
                //尝试调度跨楼层小车
@@ -348,6 +366,7 @@
        News.info("{}目标库位没有搜索到可用穿梭车", locNo);
        return false;
    }
    /**
     * 小车迁移任务生成
@@ -387,18 +406,20 @@
            News.info("{}号小车,存在移动任务,等待执行完成后再生成新的任务", shuttleNo);
            return false;
        }
        WrkMast mainWrkMast = null;
        //获取主工作档信息
        WrkMast mainWrkMast = wrkMastService.selectByWorkNo(wrkNo);
        if (wrkNo != null) {
            mainWrkMast = wrkMastService.selectByWorkNo(wrkNo);
        }
        //判断是否有其他任务正在使用穿梭车
        WrkMast wrkMast2 = wrkMastService.selectShuttleWorking(shuttleNo);
        WrkMast wrkMast2 = wrkMastService.selectShuttleWorking2(shuttleNo, wrkNo, mainWrkMast != null ? mainWrkMast.getMainWrkNo() : null);
        if (wrkMast2 != null && !disableCheck) {//小车存在其他工作档任务,等待执行完成后再生成新的任务
            if (mainWrkMast == null) {
                News.info("{}号小车,存在其他工作档任务,等待执行完成再生成新的任务", shuttleNo);
                return false;
            } else {
                if (!mainWrkMast.getShuttleNo().equals(shuttleNo)) {
                if (mainWrkMast.getShuttleNo() != null && !mainWrkMast.getShuttleNo().equals(shuttleNo)) {
                    News.info("{}号小车,存在其他工作档任务,等待执行完成再生成新的任务", shuttleNo);
                    return false;
                }
@@ -425,9 +446,8 @@
        wrkMast.setLocNo(locNo); // 目标库位
        wrkMast.setAppeTime(now);
        wrkMast.setModiTime(now);
        wrkMast.setMainWrkNo(mainWrkMast.getWrkNo());
        if ("TRANSPORT_LIFT".equals(flag)) {
        if ("TRANSPORT_LIFT".equalsIgnoreCase(flag) || "TRANSPORT_DEVP".equalsIgnoreCase(flag)) {
            wrkMast.setMainWrkNo(wrkNo);
        }