package com.zy.utils; import com.zy.core.enums.RouteCollectCountType; import java.util.ArrayList; import java.util.List; import static java.util.stream.Collectors.toList; /** * Created by Monkey D. Luffy on 2023/7/18 */ public class RouteUtils { //问题2 周俊杰 public static final List MERGE_STA_NO_One = new ArrayList() {{ add(113);add(119); }}; public static final List MERGE_STA_NO_TWO = new ArrayList() {{ // add(116);add(117); }}; public static final List MERGE_STA_NO_THREE = new ArrayList() {{ // add(116);add(117); }}; public static final List MERGE_STA_NO_FOUR = new ArrayList() {{ // add(116);add(117); }}; // 正序 public static final List TRACK_POSITION_POSITIVE_SEQUENCE = new ArrayList() {{ add(161);add(157);add(153);add(149);add(124);add(119);add(113);add(112);add(107);add(106);add(101);add(100); }}; // 反序 public static final List TRACK_POSITION_REVERSE_SEQUENCE = new ArrayList() {{ add(100);add(101);add(106);add(107);add(112);add(113);add(119);add(124);add(149);add(153);add(157);add(161); }}; public static String zerofill(String msg, Integer count){ if (msg.length() == count){ return msg; } else if (msg.length() > count){ return msg.substring(0, 16); } else { StringBuilder msgBuilder = new StringBuilder(msg); for (int i = 0; i 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 getRoute(Integer groupStart,Integer groupEnd){ boolean sign = TRACK_POSITION_POSITIVE_SEQUENCE.indexOf(groupStart) < TRACK_POSITION_POSITIVE_SEQUENCE.indexOf(groupEnd); List result = new ArrayList<>(); List groupRoute = new ArrayList<>(); if (sign){ groupRoute = TRACK_POSITION_POSITIVE_SEQUENCE; }else { groupRoute = TRACK_POSITION_REVERSE_SEQUENCE; } if (groupRoute.contains(groupStart) && groupRoute.contains(groupEnd)) { sign = false; for (Integer route : groupRoute) { if (route.equals(groupStart)){ sign=true; } if (route.equals(groupEnd)){ result.add(route); break; } if (sign){ result.add(route); } } }else { 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 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 RouteMapCurrentFar(Integer farStn,Integer d){ return getRouteIntersection(TRACK_POSITION_POSITIVE_SEQUENCE,getRoute(farStn, d), RouteCollectCountType.DIFFERENCESET); } /* * 另一台小车最远位置 * */ public static Integer RouteMapOtherFarStnNo(List 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); } } //是否有交集 public static boolean getRouteBoolean(List groupCurrent,List groupOther){ for (Integer positionCurrent : groupCurrent){ for (Integer positionOther : groupOther){ if (positionCurrent.equals(positionOther)){ return true; } } } return false; } //集合运算 public static List getRouteIntersection(List groupCurrent, List groupOther, RouteCollectCountType routeCollectCountType){ switch (routeCollectCountType){ case INTERSECTION: //交集 return groupCurrent.stream().filter(item -> groupOther.contains(item)).collect(toList()); case DIFFERENCESET: //差集 return groupCurrent.stream().filter(item -> !groupOther.contains(item)).collect(toList()); case UNION: //并集 groupCurrent.addAll(groupOther); return groupCurrent; case DEDUPLICATIONUNION: //去重并集 groupCurrent.addAll(groupOther); return groupCurrent.stream().distinct().collect(toList()); default: return null; } } /* * a 小车当前位置 * b 小车任务开始位置 * c 小车任务结束位置 * sign 另一个小车空闲标记 * */ public static boolean RouteAutoBoolean(Integer a,Integer b,Integer c,Integer aa,Integer bb,Integer cc,boolean idleOther){ List routeCurrent = getRouteIntersection(getRoute(a, c), getRoute(b, c), RouteCollectCountType.DEDUPLICATIONUNION);//并集 List routeOther = getRouteIntersection(getRoute(aa, cc), getRoute(bb, cc), RouteCollectCountType.DEDUPLICATIONUNION);// return !getRouteBoolean(routeCurrent, routeOther); //是否有交集 } public static List RouteAutoBoolean(Integer a,Integer b,Integer c){ return getRouteIntersection(getRoute(a, c), getRoute(b, c), RouteCollectCountType.DEDUPLICATIONUNION); } public static Short CrnStaEnd(Integer endSta,Integer souSta) { if (souSta == 118){ return (short)119; } switch (endSta) { case 100: return (short)149; case 102: case 111: return 149; default: return endSta.shortValue(); } } public static Short SouStaEnd(Integer endSta,Integer souSta){ if (souSta == 159) { return (short)161; } return souSta.shortValue(); } public static void main(String[] arge){ //{"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); // List routeCurrent = getRoute(100, 124); //获取当前小车路径 // List 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 routeIntersection = getRouteIntersection(routeCurrent, routeOther, RouteCollectCountType.INTERSECTION);//交集 // System.out.println("路径交集:\t"+routeIntersection); // // List routeIntersection1 = getRouteIntersection(routeCurrent, routeOther, RouteCollectCountType.DIFFERENCESET);//差集 // System.out.println("路径差集:\t"+routeIntersection1); // // List routeIntersection2 = getRouteIntersection(routeCurrent, routeOther, RouteCollectCountType.UNION);//并集 // System.out.println("路径并集:\t"+routeIntersection2); // // List 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 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); // } } }