From 0b6c8b7687ff593d254cfcacacf72a75bfdf11ca Mon Sep 17 00:00:00 2001 From: lty <876263681@qq.com> Date: 星期二, 24 六月 2025 08:20:36 +0800 Subject: [PATCH] #限制线体上托盘数量 --- src/main/java/com/zy/asrs/utils/RouteUtils.java | 748 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 files changed, 732 insertions(+), 16 deletions(-) diff --git a/src/main/java/com/zy/asrs/utils/RouteUtils.java b/src/main/java/com/zy/asrs/utils/RouteUtils.java index 50713ad..ea72548 100644 --- a/src/main/java/com/zy/asrs/utils/RouteUtils.java +++ b/src/main/java/com/zy/asrs/utils/RouteUtils.java @@ -1,27 +1,67 @@ package com.zy.asrs.utils; -import com.core.common.Arith; -import com.core.common.Cools; -import com.zy.core.properties.SlaveProperties; - -import java.text.DecimalFormat; import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; import java.util.List; +import static java.util.stream.Collectors.toList; + +import com.zy.asrs.entity.WrkMastSta; +import com.zy.core.enums.RouteCollectCountType; +import springfox.documentation.spring.web.json.Json; /** - * Created by vincent on 2020/8/27 + * 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); + add(104);add(122); + }}; + + public static final List<Integer> MERGE_STA_NO_TWO = new ArrayList<Integer>() {{ +// add(113);add(123);add(114);add(1142); + add(107);add(118); + }}; + + public static final List<Integer> MERGE_STA_NO_THREE = new ArrayList<Integer>() {{ +// add(107);add(118);add(108);add(119); + add(108);add(119); + }}; + + public static final List<Integer> MERGE_STA_NO_FOUR = new ArrayList<Integer>() {{ +// add(110);add(120);add(111);add(121); + add(110);add(120); + }}; + + public static final List<Integer> MERGE_STA_NO_FIVE = new ArrayList<Integer>() {{ +// add(104);add(122);add(105); + add(111);add(121); + }}; + + public static final List<Integer> MERGE_STA_NO_SIX = new ArrayList<Integer>() {{ +// add(108);add(119);add(110);add(120); + add(113);add(123);add(114); + }}; + + public static final List<Integer> MERGE_STA_NO_SEVEN = new ArrayList<Integer>() {{ + + }}; + + public static final List<Integer> MERGE_STA_NO_EIGHT = new ArrayList<Integer>() {{ + + }}; + + public static final List<Integer> MERGE_STA_NO_NINE = new ArrayList<Integer>() {{ + + }}; + // 姝e簭 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(122);add(105);add(107);add(118);add(108);add(119);add(110);add(120);add(111);add(121);add(113);add(123);add(114);add(1142);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(1142);add(114);add(123);add(113);add(121);add(111);add(120);add(110);add(119);add(108);add(118);add(107);add(105);add(122);add(104);add(102);add(101); }}; public static String zerofill(String msg, Integer count){ @@ -37,10 +77,315 @@ return msgBuilder.toString(); } } + /* + * 鑾峰彇骞叉秹鏈�杩滅珯鐐� + * */ + public static Integer RouteIndexFarMas(int rgvNo,Integer staNo){ + List<Integer> staFall = new ArrayList<>(); + if (MERGE_STA_NO_SIX.contains(staNo)){ +// staFall = MERGE_STA_NO_SIX; + if (rgvNo==1){ + if (staNo==113){ + return 123; + } else { + return 114; + } + }else { + if (staNo==114){ + return 123; + } else { + return 113; + } + } + }else 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 if (MERGE_STA_NO_FIVE.contains(staNo)){ + staFall = MERGE_STA_NO_FIVE; + }else { + return staNo; + } - // 鑾峰彇褰撳墠灏忚溅鏈璧扮殑璺嚎 + int indexNo = 0; + if (rgvNo==1){ + indexNo=staFall.size()-1; + } + return staFall.get(indexNo); + } + + public static Integer RouteIndexFarMasOtherNear(int rgvNo,Integer staNo){ + if (rgvNo==1){ + switch (staNo){ + case 117: return 116; + case 116: return 1142; + case 1142: + case 114: return 114; + case 123: return 113; + case 113: return 121; + case 121: return 111; + case 111: return 110; + case 120: + case 110: return 119; + case 119: + case 108: return 118; + case 118: + case 107: return 105; + case 105: + case 122: return 122; + case 104: return 104; + case 102: return 102; + case 101: return 101; + default: + return 102; + } + }else { + switch (staNo){ + case 117: return 117; + case 116: return 116; + case 1142: return 116; + case 114: return 116; + case 123: return 1142; + case 113: return 114; + case 121: return 113; + case 111: return 113; + case 120: return 121; + case 110: return 111; + case 119: return 110; + case 108: return 110; + case 118: return 119; + case 107: return 107; + case 105: return 107; + case 122: return 122; + case 104: return 104; + case 102: return 104; + case 101: return 102; + default: + return 116; + } + } + } + + public static Integer RouteIndexFarMasOtherNearUpMap(int rgvNo,Integer staNo){ +// int ia = TRACK_POSITION_POSITIVE_SEQUENCE.indexOf(staNo); +// int ib = TRACK_POSITION_REVERSE_SEQUENCE.indexOf(staNo); +// if (ia<=ib){ +// return new Integer[]{RouteIndexFarMasReverse(1,runStaStart),RouteIndexFarMasReverse(2,runStaEnd)}; +// }else { +// return new Integer[]{RouteIndexFarMasReverse(1,runStaEnd),RouteIndexFarMasReverse(2,runStaStart)}; +// } +// if (ia<=ib){ +// return new Integer[]{TRACK_POSITION_POSITIVE_SEQUENCE.get(ia),TRACK_POSITION_POSITIVE_SEQUENCE.get(ib)}; +// }else { +// return new Integer[]{TRACK_POSITION_POSITIVE_SEQUENCE.get(ib),TRACK_POSITION_POSITIVE_SEQUENCE.get(ia)}; +// } +// if (rgvNo==1){ +// if (ia-2>=1){ +// return TRACK_POSITION_POSITIVE_SEQUENCE.get(ia-2); +// }else { +// return 102; +// } + return RouteIndexFarMasOther(rgvNo,staNo); +// }else { +// if (ib-2>=1){ +// return TRACK_POSITION_REVERSE_SEQUENCE.get(ib-2); +// }else { +// return 116; +// } +// } + } +// + /* + * 鑾峰彇骞叉秹鏈�杩滅珯鐐� + * */ + public static Integer RouteIndexFarMasOther(int rgvNo,Integer staNo){ + if (rgvNo==1){ + switch (staNo){ + case 101: return 102; + case 102: return 122; + case 104: + case 122: + case 105: return 105; + case 107: + case 118: return 119; + case 108: + case 119: return 120; + case 110: + case 120: + case 111: return 121; + case 121: return 113; + case 113: return 1142; + case 123: + case 114: return 116; + default: + return 116; + } + }else { + switch (staNo){ + case 117: + case 116: return 1142; + case 1142: + case 114: + case 123: return 113; + case 113: return 121; + case 121: + case 111: return 110; + case 120: + case 110: return 108; + case 119: + case 108: + case 118: + case 107: return 107; + case 105: return 104; + case 122: + case 104: return 102; + default: + return 102; + } + } +// if (rgvNo==1){ +// switch (staNo){ +// case 101: +// case 102: return 102; +// case 104: +// case 122: return 118; +// case 105: return 119; +// case 107: +// case 118: return 120; +// case 108: +// case 119: return 111; +// case 110: +// case 120: return 113; +// case 111: +// case 121: return 113; +// case 113: return 114; +// case 123: +// case 114: return 1142; +// default: +// return 116; +// } +// }else { +// switch (staNo){ +// case 117: +// case 116: return 123; +// case 1142: +// case 114: return 113; +// case 123: +// case 113: return 111; +// case 121: +// case 111: return 108; +// case 120: +// case 110: return 107; +// case 119: +// case 108: return 107; +// case 118: +// case 107: return 105; +// case 105: +// case 122: +// case 104: return 104; +// default: +// return 102; +// } +// } + } + + /* + * 鑾峰彇骞叉秹鏈�杩滅珯鐐� + * */ + public static Integer RouteIndexFarMasReverse(int rgvNo,Integer staNo){ + if (rgvNo==1) { + switch (staNo) { + case 101: + case 102: return 102; + case 104: + case 122: + case 105: return 102; + case 107: + case 118: + case 108: + case 119: return 105; + case 110: + case 120: + return 107; + case 111: + case 121: + return 108; + case 113: + return 111; + case 123: + case 114: + return 121; + case 1142: + case 116: + case 117: + return 102; + default: + return 101; + } + }else{ + switch (staNo) { + case 117: + case 116: + case 1142: + return 116; + case 114: + case 123: + case 113: + return 117; + case 121:return 123; + case 111: + case 120: + case 110: + return 113; + case 119: + case 108: + return 111; + case 118: + case 107: + return 110; + case 105: + case 122: + case 104: + return 107; + case 102: + case 101: + return 116; + default: + return 117; + } + /* + * switch (staNo){ + case 117: + case 116: return 1142; + case 1142: + case 114: + case 123: return 113; + case 113: return 121; + case 121: + case 111: return 110; + case 120: + case 110: return 108; + case 119: + case 108: + case 118: + case 107: return 107; + case 105: return 104; + case 122: + case 104: return 102; + default: + return 102; + }*/ + } + } + + + // 鑾峰彇褰撳墠灏忚溅鏈璧扮殑璺嚎闆嗗悎 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 = new ArrayList<>(); if (sign){ @@ -67,15 +412,386 @@ } return result; } - // 澶栦晶鏂瑰悜鐨勮揣浣� 浼樺厛鍏ュ簱鏂瑰悜/浼樺厛鍑哄簱鏂瑰悜 ===>> 鍙嶄箣 - public static List<String> getGroupOutsideLoc(String locNo,Integer crnNo){ - List<String> result = new ArrayList<>(); + /* + * 鑾峰彇鏈�杩滅珯鐐� + * */ + 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 (ib>ic){ + return b; + }else { + return c; + } + }else { + if (ib<ic){ + return b; + }else { + return c; + } + } +// 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; +// } +// } +// } + } - return result; + /* + * 鑾峰彇鏈�杩滅珯鐐� + * a:褰撳墠浣嶇疆 + * b:寮�濮嬩綅缃� + * c:缁撴潫浣嶇疆 + * d:閿佸紑濮嬩綅缃� + * */ + public static Integer RouteIndexFarMasNew(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); + } + } + + //鏄惁鏈変氦闆� + public static boolean getRouteBoolean(List<Integer> groupCurrent,List<Integer> groupOther){ + for (Integer positionCurrent : groupCurrent){ + for (Integer positionOther : groupOther){ + if (positionCurrent.equals(positionOther)){ + return true; + } + } + } + return false; + } + + //闆嗗悎杩愮畻 + public static List<Integer> getRouteIntersection(List<Integer> groupCurrent, List<Integer> 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<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 Integer[] RgvRunSta(Integer runStaStart,Integer runStaEnd){ + int ia = TRACK_POSITION_POSITIVE_SEQUENCE.indexOf(runStaStart); + int ib = TRACK_POSITION_POSITIVE_SEQUENCE.indexOf(runStaEnd); + if (ia<=ib){ + return new Integer[]{RouteIndexFarMasReverse(1,runStaStart),RouteIndexFarMasReverse(2,runStaEnd)}; + }else { + return new Integer[]{RouteIndexFarMasReverse(1,runStaEnd),RouteIndexFarMasReverse(2,runStaStart)}; + } +// if (ia<=ib){ +// return new Integer[]{TRACK_POSITION_POSITIVE_SEQUENCE.get(ia),TRACK_POSITION_POSITIVE_SEQUENCE.get(ib)}; +// }else { +// return new Integer[]{TRACK_POSITION_POSITIVE_SEQUENCE.get(ib),TRACK_POSITION_POSITIVE_SEQUENCE.get(ia)}; +// } +// if (ia<=ib){ +// return new Integer[]{TRACK_POSITION_POSITIVE_SEQUENCE.get(ia-1),TRACK_POSITION_POSITIVE_SEQUENCE.get(ib+1)}; +// }else { +// return new Integer[]{TRACK_POSITION_POSITIVE_SEQUENCE.get(ib+1),TRACK_POSITION_POSITIVE_SEQUENCE.get(ia-1)}; +// } + } + + public static boolean RgvRunStaSign(Integer staBow,Integer runStaEnd,Integer rgvNo){ + int ia = TRACK_POSITION_POSITIVE_SEQUENCE.indexOf(staBow); + int ib = TRACK_POSITION_POSITIVE_SEQUENCE.indexOf(runStaEnd); + if (rgvNo==1){ + if (ia>ib){ + return true;//闇�瑕侀伩璁� + }else { + return false;//涓嶉渶瑕侀伩璁� + } + }else { + if (ia<ib){ + return true;//闇�瑕侀伩璁� + }else { + return false;//涓嶉渶瑕侀伩璁� + } + } + } + public static void main(String[] arge){ + List<Integer> routeCurrent = getRoute(104, 119); //鑾峰彇褰撳墠灏忚溅璺緞 + List<Integer> routeOther = getRoute(117, 118); //鑾峰彇鍏跺畠灏忚溅璺緞 + 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); + + 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); + } + } + + public static short RgvPosSta(Integer rgvId,Short posId){ + switch (rgvId){ + case 1: + return RgvPosStaOne(posId); + case 2: + return RgvPosStaTwo(posId); + default: + return 1; + } + } + + public static short RgvPosStaOne(Short posId){ + switch (posId.intValue()){ + case 1: + case 2: + return 102; + case 3: + case 4: + return 122; + case 5: + case 6: + return 105; + case 7: + case 8: + return 118; + case 9: + case 10: + case 11: + return 119; + case 12: + case 13: + case 14: + return 110; + case 15: + return 120; + case 16: + case 17: + case 18: + return 111; + case 19: + return 121; + case 20: + case 21: + case 22: + return 113; + case 23: + case 24: + return 123; + case 25: + return 114; + case 26: + case 27: + return 1142; + case 28: + return 116; + default: + return 1142; + } + } + + public static short RgvPosStaTwo(Short posId){ + switch (posId.intValue()){ + case 1: + return 116; + case 2: + return 1142; + case 3: + case 4: + return 114; + case 5: + return 123; + case 6: + case 7: + case 8: + return 113; + case 9: + case 10: + return 121; + case 11: + case 12: + case 13: + case 14: + return 120; + case 15: + return 110; + case 16: + case 17: + case 18: + return 119; + case 19: + return 108; + case 20: + case 21: + case 22: + return 107; + case 23: + case 24: + return 105; + case 25: + case 26: + case 27: + case 28: + return 104; + default: + return 104; + } + } + + public static Integer CrnStaEnd(Integer endSta,Integer souSta) { + switch (souSta) { + case 100: + case 103: + case 106: + case 109: + case 112: + case 115: + return souSta + 1; + default: + return endSta; + } + } } -- Gitblit v1.9.1