From 9cfd47f152a8d0dcd825cf9202ddd389b0c4a325 Mon Sep 17 00:00:00 2001
From: lsh <1>
Date: 星期五, 19 一月 2024 18:09:12 +0800
Subject: [PATCH] #

---
 src/main/java/com/zy/asrs/utils/RouteUtils.java |  348 +++++++++++++++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 332 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..2844815 100644
--- a/src/main/java/com/zy/asrs/utils/RouteUtils.java
+++ b/src/main/java/com/zy/asrs/utils/RouteUtils.java
@@ -1,27 +1,43 @@
 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.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);
+    }};
+
+    public static final List<Integer> MERGE_STA_NO_TWO = new ArrayList<Integer>() {{
+        add(113);add(123);add(114);add(1142);
+    }};
+
+    public static final List<Integer> MERGE_STA_NO_THREE = new ArrayList<Integer>() {{
+        add(107);add(118);add(108);add(119);
+    }};
+
+    public static final List<Integer> MERGE_STA_NO_FOUR = new ArrayList<Integer>() {{
+        add(110);add(120);add(111);add(121);
+    }};
+
+    public static final List<Integer> MERGE_STA_NO_FIVE = new ArrayList<Integer>() {{
+        add(113);add(123);add(114);add(1142);
+    }};
+
 //    姝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 +53,34 @@
             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 = new ArrayList<>();
         if (sign){
@@ -67,15 +107,291 @@
         }
         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 (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;
+    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 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