自动化立体仓库 - WCS系统
#
LSH
2023-11-21 cf11620eae311bc2821e1e5677dd77999b3d1b2e
src/main/java/com/zy/asrs/utils/RouteUtils.java
@@ -4,19 +4,36 @@
import java.util.List;
import static java.util.stream.Collectors.toList;
import com.zy.core.enums.RouteCollectCountType;
import springfox.documentation.spring.web.json.Json;
/**
 * Created by Monkey D. Luffy on 2023/7/18
 */
public class RouteUtils {
    public static final List<Integer> MERGE_STA_NO_One = new ArrayList<Integer>() {{
        add(116);add(117);
    }};
    public static final List<Integer> MERGE_STA_NO_TWO = new ArrayList<Integer>() {{
        add(116);add(117);
    }};
    public static final List<Integer> MERGE_STA_NO_THREE = new ArrayList<Integer>() {{
        add(116);add(117);
    }};
    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(1);add(2);add(3);add(4);add(5);add(6);add(7);add(8);add(9);add(10);add(11);add(12);
        add(101);add(102);add(104);add(105);add(107);add(118);add(108);add(119);add(110);add(120);add(111);add(121);add(113);add(114);add(116);add(117);
    }};
//    反序
    public static final List<Integer> TRACK_POSITION_REVERSE_SEQUENCE = new ArrayList<Integer>() {{
        add(12);add(11);add(10);add(9);add(8);add(7);add(6);add(5);add(4);add(3);add(2);add(1);
        add(117);add(116);add(114);add(113);add(121);add(111);add(120);add(110);add(119);add(108);add(118);add(107);add(105);add(104);add(102);add(101);
    }};
    public static String zerofill(String msg, Integer count){
@@ -32,12 +49,36 @@
            return msgBuilder.toString();
        }
    }
    /*
     * 获取干涉最远站点
     * */
    public static Integer RouteIndexFarMas(int rgvNo,Integer staNo){
        List<Integer> staFall = new ArrayList<>();
        if (MERGE_STA_NO_One.contains(staNo)){
            staFall = MERGE_STA_NO_One;
        }else if (MERGE_STA_NO_TWO.contains(staNo)){
            staFall = MERGE_STA_NO_TWO;
        }else if (MERGE_STA_NO_THREE.contains(staNo)){
            staFall = MERGE_STA_NO_THREE;
        }else if (MERGE_STA_NO_FOUR.contains(staNo)){
            staFall = MERGE_STA_NO_FOUR;
        }else {
            return staNo;
        }
        int indexNo = 0;
        if (rgvNo==1){
            indexNo=staFall.size()-1;
        }
        return staFall.get(indexNo);
    }
    // 获取当前小车未行走的路线集合
    public static List<Integer> getRoute(Integer groupStart,Integer groupEnd){
        boolean sign = groupStart < groupEnd;
        boolean sign = TRACK_POSITION_POSITIVE_SEQUENCE.indexOf(groupStart) < TRACK_POSITION_POSITIVE_SEQUENCE.indexOf(groupEnd);
        List<Integer> result = new ArrayList<>();
        List<Integer> groupRoute = null;
        List<Integer> groupRoute = new ArrayList<>();
        if (sign){
            groupRoute = TRACK_POSITION_POSITIVE_SEQUENCE;
        }else {
@@ -61,6 +102,82 @@
            return null;
        }
        return result;
    }
    /*
    * 获取最远站点
    * */
    public static Integer RouteIndexFarMas(Integer a,Integer b,Integer c,Integer d){
        int ia = TRACK_POSITION_POSITIVE_SEQUENCE.indexOf(a);
        int ib = TRACK_POSITION_POSITIVE_SEQUENCE.indexOf(b);
        int ic = TRACK_POSITION_POSITIVE_SEQUENCE.indexOf(c);
        int id = TRACK_POSITION_POSITIVE_SEQUENCE.indexOf(d);
        if (id==0){
            if (ia>ib){
                if (ia>ic){
                    return a;
                }else {
                    return c;
                }
            }else {
                if (ib>ic){
                    return b;
                }else {
                    return c;
                }
            }
        }else {
            if (ia<ib){
                if (ia<ic){
                    return a;
                }else {
                    return c;
                }
            }else {
                if (ib<ic){
                    return b;
                }else {
                    return c;
                }
            }
        }
    }
    public static Integer[] RouteIndexFarArr(Integer a,Integer b,Integer c,Integer d){
        int ia = TRACK_POSITION_POSITIVE_SEQUENCE.indexOf(a);
        int ib = TRACK_POSITION_POSITIVE_SEQUENCE.indexOf(b);
        int ic = TRACK_POSITION_POSITIVE_SEQUENCE.indexOf(c);
        int id = TRACK_POSITION_POSITIVE_SEQUENCE.indexOf(d);
        return new Integer[]{ia,ib,ic,id};
    }
    /*
     * a  小车当前位置
     * b  小车任务开始位置
     * c  小车任务结束位置
     * d  小车初始位置
     * 获取最大路径差值
     * */
    public static List<Integer>  RouteMapCurrentFar(Integer a,Integer b,Integer c,Integer d){
        Integer farStn = RouteIndexFarMas(a, b, c, d);
        return getRouteIntersection(TRACK_POSITION_POSITIVE_SEQUENCE,getRoute(farStn, d), RouteCollectCountType.DIFFERENCESET);
    }
    public static List<Integer>  RouteMapCurrentFar(Integer farStn,Integer d){
        return getRouteIntersection(TRACK_POSITION_POSITIVE_SEQUENCE,getRoute(farStn, d), RouteCollectCountType.DIFFERENCESET);
    }
    /*
    * 另一台小车最远位置
    * */
    public static Integer RouteMapOtherFarStnNo(List<Integer> routeDIFF,Integer d){
        int id = TRACK_POSITION_POSITIVE_SEQUENCE.indexOf(d);
        if (id==0){
            return routeDIFF.get(0);
        }else {
            int size = routeDIFF.size();
            return routeDIFF.get(size-1);
        }
    }
    //是否有交集
@@ -97,9 +214,27 @@
        }
    }
    /*
    * a  小车当前位置
    * b  小车任务开始位置
    * c  小车任务结束位置
    * sign  另一个小车空闲标记
    * */
    public static boolean RouteAutoBoolean(Integer a,Integer b,Integer c,Integer aa,Integer bb,Integer cc,boolean idleOther){
        List<Integer> routeCurrent = getRouteIntersection(getRoute(a, c), getRoute(b, c), RouteCollectCountType.DEDUPLICATIONUNION);//并集
        List<Integer> routeOther = getRouteIntersection(getRoute(aa, cc), getRoute(bb, cc), RouteCollectCountType.DEDUPLICATIONUNION);//
        return !getRouteBoolean(routeCurrent, routeOther);  //是否有交集
    }
    public static List<Integer> RouteAutoBoolean(Integer a,Integer b,Integer c){
        return getRouteIntersection(getRoute(a, c), getRoute(b, c), RouteCollectCountType.DEDUPLICATIONUNION);
    }
    public static void main(String[] arge){
        List<Integer> routeCurrent = getRoute(2, 9);  //获取当前小车路径
        List<Integer> routeOther = getRoute(12, 5);  //获取其它小车路径
        List<Integer> routeCurrent = getRoute(104, 119);  //获取当前小车路径
        List<Integer> routeOther = getRoute(117, 118);  //获取其它小车路径
        System.out.println("当前小车路径:\t"+routeCurrent);
        System.out.println("其它小车路径:\t"+routeOther);
@@ -117,6 +252,20 @@
        List<Integer> routeIntersection3 = getRouteIntersection(routeCurrent, routeOther, RouteCollectCountType.DEDUPLICATIONUNION);//去重并集
        System.out.println("路径去重并集:\t"+routeIntersection3);
        System.out.println(RouteAutoBoolean(101,104,119,114,116,120,true));
        List<Integer> routeDIFF = RouteMapCurrentFar(114, 104, 119, 117);
        System.out.println("当前路径最大集合:\t"+ routeDIFF);
        Integer routeFarOther= RouteMapOtherFarStnNo(routeDIFF,117);
        System.out.println("另一台小车最远站点:\t"+routeFarOther);
        Integer[] integers = RouteIndexFarArr(114, 104, 119, 101);
        for (Integer integer:integers){
            System.out.println(integer);
        }
    }
}