1
7 天以前 aeaf3e43e425ef0de84c1819f318f20e90471f90
src/main/java/com/zy/asrs/utils/RouteUtils.java
@@ -2,8 +2,7 @@
import com.zy.core.enums.RouteCollectCountType;
import java.util.ArrayList;
import java.util.List;
import java.util.*;
import static java.util.stream.Collectors.toList;
@@ -14,29 +13,66 @@
    //问题2  周俊杰
    public static final List<Integer> MERGE_STA_NO_One = new ArrayList<Integer>() {{
        add(113);add(119);
//        add(113);add(119);
    }};
    public static final List<Integer> MERGE_STA_NO_TWO = new ArrayList<Integer>() {{
//        add(116);add(117);
//        add(100);add(101);
    }};
    public static final List<Integer> MERGE_STA_NO_THREE = new ArrayList<Integer>() {{
//        add(116);add(117);
//        add(106);add(107);
    }};
    public static final List<Integer> MERGE_STA_NO_FOUR = new ArrayList<Integer>() {{
//        add(116);add(117);
    }};
//    正序
    public static final List<Integer> TRACK_POSITION_POSITIVE_SEQUENCE = new ArrayList<Integer>() {{
        add(161);add(157);add(153);add(149);add(124);add(119);add(113);add(999);add(112);add(107);add(106);add(101);add(100);
    }};
//    反序
    public static final List<Integer> TRACK_POSITION_REVERSE_SEQUENCE = new ArrayList<Integer>() {{
        add(100);add(101);add(106);add(107);add(112);add(999);add(113);add(119);add(124);add(149);add(153);add(157);add(161);
    }};
    // RGV轨道正序(从上到下)
    public static final List<Integer> TRACK_POSITION_POSITIVE_SEQUENCE = Arrays.asList(
        1004,
        1007,
        1010,
        1014,
        1018,
        1021,
        1024,
        1028,
        1031,
        1035
    );
    // 反序(直接反转生成)
    public static final List<Integer> TRACK_POSITION_REVERSE_SEQUENCE = new ArrayList<>(TRACK_POSITION_POSITIVE_SEQUENCE);
    static {
        Collections.reverse(TRACK_POSITION_REVERSE_SEQUENCE);
    }
    //1楼战站点
    public static final List<Integer> TRACK_POSITION_ONE = Arrays.asList(
            1004, 1007, 1010, 1014, 1018, 1021, 1024, 1028, 1031, 1035,1042,1105,1106,1041,
            1038,1036
    );
    //2楼战站点
    public static final List<Integer> TRACK_POSITION_TWO = Arrays.asList(
            2003,2006,2009,2012,2015,2018,2021,2024,2027,2030,2037,2031
    );
    // 轨道映射(把映射站点替换成主站点)
    public static final Map<Integer, Integer> SITE_MAPPING = new HashMap<>();
    static {
        SITE_MAPPING.put(1042, 1004);
        SITE_MAPPING.put(1105, 1007);
        SITE_MAPPING.put(1106, 1010);
        SITE_MAPPING.put(1041, 1024);
        SITE_MAPPING.put(1038, 1028);
        SITE_MAPPING.put(1036, 1035);
    }
    // 获取轨道列表中实际站点
    private static Integer mapSite(Integer site) {
        return SITE_MAPPING.getOrDefault(site, site);
    }
    public static String zerofill(String msg, Integer count){
        if (msg.length() == count){
@@ -51,6 +87,7 @@
            return msgBuilder.toString();
        }
    }
    /*
     * 获取干涉最远站点
     * */
@@ -73,6 +110,30 @@
            indexNo=staFall.size()-1;
        }
        return staFall.get(indexNo);
    }
    // 获取当前小车未行走的路线集合
    public static List<Integer> getRouteDis(Integer groupStart, Integer groupEnd) {
        groupStart = mapSite(groupStart);
        groupEnd = mapSite(groupEnd);
        int startIdx = TRACK_POSITION_POSITIVE_SEQUENCE.indexOf(groupStart);
        int endIdx = TRACK_POSITION_POSITIVE_SEQUENCE.indexOf(groupEnd);
        if (startIdx == -1 || endIdx == -1) return null;
        boolean forward = startIdx < endIdx;
        List<Integer> route = forward ? TRACK_POSITION_POSITIVE_SEQUENCE : TRACK_POSITION_REVERSE_SEQUENCE;
        List<Integer> result = new ArrayList<>();
        boolean addFlag = false;
        for (Integer s : route) {
            s = mapSite(s);
            if (s.equals(groupStart)) addFlag = true;
            if (addFlag) result.add(s);
            if (s.equals(groupEnd)) break;
        }
        return result;
    }
@@ -104,6 +165,20 @@
            return null;
        }
        return result;
    }
    public static List<Integer> getRouteOne(){
        List<Integer> groupRoute = new ArrayList<>();
        groupRoute = TRACK_POSITION_ONE;
        return groupRoute;
    }
    public static List<Integer> getRouteTwo(){
        List<Integer> groupRoute = new ArrayList<>();
        groupRoute = TRACK_POSITION_TWO;
        return groupRoute;
    }
    /*
@@ -235,12 +310,11 @@
    public static Short CrnStaEnd(Integer endSta,Integer souSta) {
        switch (endSta) {
            case 100:
                if (souSta == 118){
                    return (short)119;
                }
                return (short)149;
            case 102:
            case 111:
                if (souSta == 118 || souSta == 127){
                    return (short)119;
                }
                return 149;
            default:
                return endSta.shortValue();
@@ -248,8 +322,11 @@
    }
    public static  Short SouStaEnd(Integer endSta,Integer souSta){
       if (souSta == 159) {
           return (short)161;
       if (souSta == 1103) {
           return (short)1105;
       }
       if(souSta == 1047){
           return (short)1042;
       }
       return souSta.shortValue();
    }
@@ -257,52 +334,59 @@
    public static void main(String[] arge){
        List<Integer> routeCurrent = getRoute(100, 124);  //获取当前小车路径
        List<Integer> routeOther = getRoute(149, 161);  //获取其它小车路径
        System.out.println("当前小车路径:\t"+routeCurrent);
        System.out.println("其它小车路径:\t"+routeOther);
        //{"endRoute":999,"lockEndRoute":124,"lockStartRoute":161,"nowRoute":161,"rgvNo":3,"rgvStatus":0,"startRoute":161}   3hao
        Integer i = RouteIndexFarMas(112, 161, 124, 161);
        System.out.println(i);
        //{"endRoute":119,"lockEndRoute":112,"lockStartRoute":100,"nowRoute":112,"rgvNo":2,"rgvStatus":0,"startRoute":100} 2
        Integer i1 = RouteIndexFarMas(112, 100, 112, 100);
        System.out.println(i1);
        boolean routeBoolean = getRouteBoolean(routeCurrent, routeOther);  //是否有交集
        System.out.println("是否有交集:\t"+routeBoolean);
        List<Integer> routeIntersection = getRouteIntersection(routeCurrent, routeOther, RouteCollectCountType.INTERSECTION);//交集
        System.out.println("路径交集:\t"+routeIntersection);
        List<Integer> routeIntersection1 = getRouteIntersection(routeCurrent, routeOther, RouteCollectCountType.DIFFERENCESET);//差集
        System.out.println("路径差集:\t"+routeIntersection1);
        List<Integer> routeIntersection2 = getRouteIntersection(routeCurrent, routeOther, RouteCollectCountType.UNION);//并集
        System.out.println("路径并集:\t"+routeIntersection2);
        List<Integer> routeIntersection3 = getRouteIntersection(routeCurrent, routeOther, RouteCollectCountType.DEDUPLICATIONUNION);//去重并集
        System.out.println("路径去重并集:\t"+routeIntersection3);
        /*
         * a  小车当前位置
         * b  小车任务开始位置
         * c  小车任务结束位置
         * sign  另一个小车空闲标记
         * */
        System.out.println("是否有交集:\t"+RouteAutoBoolean(100,101,124,149,161,153,true));   //是否有交集  true无交集  false有交集
        /*
         * a  小车当前位置
         * b  小车任务开始位置
         * c  小车任务结束位置
         * d  小车初始位置
         * 获取最大路径差值
         * */
        List<Integer> routeDIFF = RouteMapCurrentFar(100,101,124,149);
        System.out.println("当前路径最大集合:\t"+ routeDIFF);
        Integer routeFarOther= RouteMapOtherFarStnNo(routeDIFF,124);
        System.out.println("另一台小车最远站点:\t"+routeFarOther);
        Integer[] integers = RouteIndexFarArr(100,101,124,149);
        for (Integer integer:integers){
            System.out.println(integer);
        }
//        List<Integer> routeCurrent = getRoute(100, 124);  //获取当前小车路径
//        List<Integer> routeOther = getRoute(149, 161);  //获取其它小车路径
//        System.out.println("当前小车路径:\t"+routeCurrent);
//        System.out.println("其它小车路径:\t"+routeOther);
//
//        boolean routeBoolean = getRouteBoolean(routeCurrent, routeOther);  //是否有交集
//        System.out.println("是否有交集:\t"+routeBoolean);
//
//        List<Integer> routeIntersection = getRouteIntersection(routeCurrent, routeOther, RouteCollectCountType.INTERSECTION);//交集
//        System.out.println("路径交集:\t"+routeIntersection);
//
//        List<Integer> routeIntersection1 = getRouteIntersection(routeCurrent, routeOther, RouteCollectCountType.DIFFERENCESET);//差集
//        System.out.println("路径差集:\t"+routeIntersection1);
//
//        List<Integer> routeIntersection2 = getRouteIntersection(routeCurrent, routeOther, RouteCollectCountType.UNION);//并集
//        System.out.println("路径并集:\t"+routeIntersection2);
//
//        List<Integer> routeIntersection3 = getRouteIntersection(routeCurrent, routeOther, RouteCollectCountType.DEDUPLICATIONUNION);//去重并集
//        System.out.println("路径去重并集:\t"+routeIntersection3);
//
//        /*
//         * a  小车当前位置
//         * b  小车任务开始位置
//         * c  小车任务结束位置
//         * sign  另一个小车空闲标记
//         * */
//        System.out.println("是否有交集:\t"+RouteAutoBoolean(100,101,124,149,161,153,true));   //是否有交集  true无交集  false有交集
//
//        /*
//         * a  小车当前位置
//         * b  小车任务开始位置
//         * c  小车任务结束位置
//         * d  小车初始位置
//         * 获取最大路径差值
//         * */
//        List<Integer> routeDIFF = RouteMapCurrentFar(100,101,124,149);
//        System.out.println("当前路径最大集合:\t"+ routeDIFF);
//
//        Integer routeFarOther= RouteMapOtherFarStnNo(routeDIFF,124);
//        System.out.println("另一台小车最远站点:\t"+routeFarOther);
//
//
//        Integer[] integers = RouteIndexFarArr(100,101,124,149);
//        for (Integer integer:integers){
//            System.out.println(integer);
//        }
    }
}