From 55165693f541b63e059af1def45fb2f24c5ed31e Mon Sep 17 00:00:00 2001
From: LSH
Date: 星期三, 03 四月 2024 16:59:42 +0800
Subject: [PATCH] #

---
 src/main/resources/mapper/BasRgvMapMapper.xml               |    2 
 src/main/java/com/zy/asrs/utils/RouteUtils.java             |  178 +++++++++++++++++++++++++++--------
 src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java |   43 +++++++-
 src/main/java/com/zy/asrs/entity/BasRgvMap.java             |   18 +++
 4 files changed, 193 insertions(+), 48 deletions(-)

diff --git a/src/main/java/com/zy/asrs/entity/BasRgvMap.java b/src/main/java/com/zy/asrs/entity/BasRgvMap.java
index 190dec9..ba76d36 100644
--- a/src/main/java/com/zy/asrs/entity/BasRgvMap.java
+++ b/src/main/java/com/zy/asrs/entity/BasRgvMap.java
@@ -38,6 +38,20 @@
     private Integer endRoute;
 
     /**
+     * 寮�濮嬭寖鍥�
+     */
+    @ApiModelProperty(value= "寮�濮嬭寖鍥�")
+    @TableField("start_route_other")
+    private Integer startRouteOther;
+
+    /**
+     * 缁撴潫鑼冨洿
+     */
+    @ApiModelProperty(value= "缁撴潫鑼冨洿")
+    @TableField("end_route_other")
+    private Integer endRouteOther;
+
+    /**
      * 褰撳墠浣嶇疆
      */
     @ApiModelProperty(value= "褰撳墠浣嶇疆")
@@ -67,7 +81,7 @@
 
     public BasRgvMap() {}
 
-    public BasRgvMap(Integer rgvNo, Integer startRoute, Integer endRoute, Integer nowRoute, Integer rgvStatus, Integer lockStartRoute, Integer lockEndRoute) {
+    public BasRgvMap(Integer rgvNo, Integer startRoute, Integer endRoute, Integer nowRoute, Integer rgvStatus, Integer lockStartRoute, Integer lockEndRoute, Integer startRouteOther, Integer endRouteOther) {
         this.rgvNo = rgvNo;
         this.startRoute = startRoute;
         this.endRoute = endRoute;
@@ -75,6 +89,8 @@
         this.rgvStatus = rgvStatus;
         this.lockStartRoute = lockStartRoute;
         this.lockEndRoute = lockEndRoute;
+        this.startRouteOther = startRouteOther;
+        this.endRouteOther = endRouteOther;
     }
 
     public Integer getRgvNoOther(){
diff --git a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
index 42c75b9..48de892 100644
--- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -3687,7 +3687,11 @@
                         return false;
                     }
                     List<Integer> route = RouteUtils.getRoute(basRgvMap.getStartRoute(), basRgvMap.getEndRoute());
+                    List<Integer> routeNear = RouteUtils.getRoute(basRgvMap.getStartRouteOther(), basRgvMap.getEndRouteOther());
                     basRgvMap.setNowRoute(rgvProtocol.getRgvPosI()); //鏇存柊灏忚溅褰撳墠浣嶇疆绔欑偣鍙�
+                    if (rgvProtocol.getRgvNo()==1){//鍒囨崲杩戣寖鍥�
+                        route = routeNear;
+                    }
                     List<WrkMastSta> wrkMastStaList = wrkMastStaMapper.selectNoInterfereList(route, route);
                     for (WrkMastSta wrkMastSta : wrkMastStaList){
                         if (wrkMastSta.getType()!=1 || wrkMastSta.getWrkType()!=3){//1:婊$増   3锛氬彇鏀�
@@ -3719,7 +3723,7 @@
                         log.info(date+"鍙栨斁浠诲姟涓嬪彂锛氱洰鏍囩珯鐘舵�侊細"+basDevp);
                         boolean sign = rgvTakeFullAll(basRgvMap.getRgvNo(), wrkMastSta);
                         if (sign){
-                            boolean signMap = rgvMapUpdate(basRgvMap, wrkMastSta.getStaStart(), wrkMastSta.getStaEnd());
+                            boolean signMap = rgvMapUpdate(basRgvMap, wrkMastSta.getStaStart(), wrkMastSta.getStaEnd(),rgvProtocol.getRgvNo()==1);
                             if (signMap){
                                 wrkMastSta.setWrkSts(1);
                                 try{
@@ -3776,6 +3780,10 @@
                     }
                     basRgvMap.setNowRoute(rgvProtocol.getRgvPosI()); //鏇存柊灏忚溅褰撳墠浣嶇疆绔欑偣鍙�
                     List<Integer> route = RouteUtils.getRoute(basRgvMap.getStartRoute(), basRgvMap.getEndRoute());//鑾峰彇娲诲姩鑼冨洿
+                    List<Integer> routeNear = RouteUtils.getRoute(basRgvMap.getStartRouteOther(), basRgvMap.getEndRouteOther());
+                    if (rgvProtocol.getRgvNo()==2){//鍒囨崲杩戣寖鍥�
+                        route = routeNear;
+                    }
                     List<WrkMastSta> wrkMastStaList = wrkMastStaMapper.selectNoInterfereList(route, route);//鏌ヨ鍙墽琛屼换鍔�
                     for (WrkMastSta wrkMastSta : wrkMastStaList){
                         if (wrkMastSta.getType()!=2 || wrkMastSta.getWrkType()!=2){// 2:绌烘澘  || 宸ヤ綔绫诲瀷  1:鍙栵紙鍙犵洏锛�  2锛氭媶鐩�  5锛氭弧鍙�  6锛氭弧鏀�
@@ -3800,7 +3808,7 @@
                             continue;
                         }
                         if (sign){
-                            boolean signMap = rgvMapUpdate(basRgvMap, basRgvMap.getStartRoute(), wrkMastSta.getStaEnd());
+                            boolean signMap = rgvMapUpdate(basRgvMap, basRgvMap.getStartRoute(), wrkMastSta.getStaEnd(),rgvProtocol.getRgvNo()==2);
                             if (signMap){
                                 wrkMastSta.setWrkSts(2);
                                 try{
@@ -3858,6 +3866,10 @@
                     }
                     basRgvMap.setNowRoute(rgvProtocol.getRgvPosI()); //鏇存柊灏忚溅褰撳墠浣嶇疆绔欑偣鍙�
                     List<Integer> route = RouteUtils.getRoute(basRgvMap.getStartRoute(), basRgvMap.getEndRoute());//鑾峰彇娲诲姩鑼冨洿
+                    List<Integer> routeNear = RouteUtils.getRoute(basRgvMap.getStartRouteOther(), basRgvMap.getEndRouteOther());
+                    if (rgvProtocol.getRgvNo()==2){//鍒囨崲杩戣寖鍥�
+                        route = routeNear;
+                    }
                     List<WrkMastSta> wrkMastStaList = wrkMastStaMapper.selectNoInterfereList(route, route);//鏌ヨ鍙墽琛屼换鍔�
                     for (WrkMastSta wrkMastSta : wrkMastStaList){
                         if (wrkMastSta.getType()!=2 || wrkMastSta.getWrkType()!=6){// 2:绌烘澘  || 宸ヤ綔绫诲瀷  1:鍙栵紙鍙犵洏锛�  2锛氭媶鐩�  5锛氭弧鍙�  6锛氭弧鏀�  7:鎻愬崌
@@ -3882,7 +3894,7 @@
                             continue;
                         }
                         if (sign){
-                            boolean signMap = rgvMapUpdate(basRgvMap, basRgvMap.getStartRoute(), wrkMastSta.getStaEnd());
+                            boolean signMap = rgvMapUpdate(basRgvMap, basRgvMap.getStartRoute(), wrkMastSta.getStaEnd(),rgvProtocol.getRgvNo()==2);
                             if (signMap){
                                 wrkMastSta.setWrkSts(2);
                                 try{
@@ -3936,6 +3948,10 @@
                         return false;
                     }
                     List<Integer> route = RouteUtils.getRoute(basRgvMap.getStartRoute(), basRgvMap.getEndRoute());
+                    List<Integer> routeNear = RouteUtils.getRoute(basRgvMap.getStartRouteOther(), basRgvMap.getEndRouteOther());
+                    if (rgvProtocol.getRgvNo()==2){//鍒囨崲杩戣寖鍥�
+                        route = routeNear;
+                    }
                     basRgvMap.setNowRoute(rgvProtocol.getRgvPosI()); //鏇存柊灏忚溅褰撳墠浣嶇疆绔欑偣鍙�
                     List<WrkMastSta> wrkMastStaList = wrkMastStaMapper.selectNoInterfereList(route, route);
                     for (WrkMastSta wrkMastSta : wrkMastStaList){
@@ -3972,7 +3988,7 @@
                             continue;
                         }
                         if (sign){
-                            boolean signMap = rgvMapUpdate(basRgvMap, wrkMastSta.getStaStart(), basRgvMap.getStartRoute());
+                            boolean signMap = rgvMapUpdate(basRgvMap, wrkMastSta.getStaStart(), basRgvMap.getStartRoute(),rgvProtocol.getRgvNo()==2);
                             if (signMap){
                                 wrkMastSta.setWrkSts(1);
                                 try{
@@ -4027,6 +4043,10 @@
                     }
                     List<Integer> route = RouteUtils.getRoute(basRgvMap.getStartRoute(), basRgvMap.getEndRoute());
                     basRgvMap.setNowRoute(rgvProtocol.getRgvPosI()); //鏇存柊灏忚溅褰撳墠浣嶇疆绔欑偣鍙�
+                    List<Integer> routeNear = RouteUtils.getRoute(basRgvMap.getStartRouteOther(), basRgvMap.getEndRouteOther());
+                    if (rgvProtocol.getRgvNo()==2){//鍒囨崲杩戣寖鍥�
+                        route = routeNear;
+                    }
                     List<WrkMastSta> wrkMastStaList = wrkMastStaMapper.selectNoInterfereList(route, route);
                     WrkMast wrkMast = wrkMastMapper.selectBy122ManQu(122,110,15L);
                     if (!Cools.isEmpty(wrkMast)){
@@ -4053,7 +4073,7 @@
                             continue;
                         }
                         if (sign){
-                            boolean signMap = rgvMapUpdate(basRgvMap, wrkMastSta.getStaStart(), basRgvMap.getStartRoute());
+                            boolean signMap = rgvMapUpdate(basRgvMap, wrkMastSta.getStaStart(), basRgvMap.getStartRoute(),rgvProtocol.getRgvNo()==2);
                             if (signMap){
                                 wrkMastSta.setWrkSts(1);
                                 try{
@@ -4118,7 +4138,8 @@
                         && rgvProtocol.getStatusType2() == RgvStatusType.IDLE
                 ) {
 //                    if (rgvProtocol.getRgvPosI().equals(basRgvMap.getStartRoute())){
-                    if (!RouteUtils.RgvRunStaSign(rgvProtocol.getRgvPosI(),RouteUtils.RouteIndexFarMas(rgvProtocol.getRgvNo(),rgvRunSta[rgvProtocol.getRgvNo()-1]),rgvProtocol.getRgvNo())){
+//                    if (!RouteUtils.RgvRunStaSign(rgvProtocol.getRgvPosI(),RouteUtils.RouteIndexFarMas(rgvProtocol.getRgvNo(),rgvRunSta[rgvProtocol.getRgvNo()-1]),rgvProtocol.getRgvNo())){
+                    if (!RouteUtils.RgvRunStaSign(rgvProtocol.getRgvPosI(),rgvRunSta[rgvProtocol.getRgvNo()-1],rgvProtocol.getRgvNo())){
                         if (rgvProtocol.getRgvNo()==1){
                             signRgv1 = false;
                         }else {
@@ -4205,7 +4226,7 @@
      * 灏忚溅XY绉诲姩  閬胯
      * */
     public synchronized boolean rgvAvoidanceXY(Integer rgvId, Integer[] rgvRunSta){
-        if (rgvId==1){
+        if (rgvId==2){
             try{
 //                BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvId);
                 //  鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
@@ -4453,6 +4474,13 @@
     /*
      * 灏忚溅鍦板浘鏇存柊  鏇存柊閿�
      * */
+    public synchronized boolean rgvMapUpdate(BasRgvMap basRgvMapCurrent,Integer staStart,Integer staEnd,boolean sign){
+        if (sign){
+            staStart = RouteUtils.RouteIndexFarMasOtherNearUpMap(basRgvMapCurrent.getRgvNo(),staStart);
+            staEnd = RouteUtils.RouteIndexFarMasOtherNearUpMap(basRgvMapCurrent.getRgvNo(),staEnd);
+        }
+        return rgvMapUpdate(basRgvMapCurrent,staStart,staEnd);
+    }
     public synchronized boolean rgvMapUpdate(BasRgvMap basRgvMapCurrent,Integer staStart,Integer staEnd){
 
 //        List<Integer> integers = RouteUtils.RouteMapCurrentFar(basRgvMapCurrent.getNowRoute(),staStart,staEnd, basRgvMapCurrent.getLockStartRoute());
@@ -4469,6 +4497,7 @@
             List<Integer> integers = RouteUtils.RouteMapCurrentFar(fallMerge, basRgvMapCurrent.getLockStartRoute());
             Integer lockEndRoute = RouteUtils.RouteMapOtherFarStnNo(integers, basRgvMapCurrent.getLockStartRoute());//鍙︿竴鍙板皬杞﹀彲娲诲姩鏈�杩滀綅缃�
             basRgvMapOther.setEndRoute(lockEndRoute);
+            basRgvMapOther.setEndRouteOther(RouteUtils.RouteIndexFarMasOtherNear(rgvNoOther,lockEndRoute));
             basRgvMapMapper.updateById(basRgvMapOther);
             return true;
         }catch (Exception e){
diff --git a/src/main/java/com/zy/asrs/utils/RouteUtils.java b/src/main/java/com/zy/asrs/utils/RouteUtils.java
index a8050f7..f3b76fc 100644
--- a/src/main/java/com/zy/asrs/utils/RouteUtils.java
+++ b/src/main/java/com/zy/asrs/utils/RouteUtils.java
@@ -14,27 +14,33 @@
 public class RouteUtils {
 
     public static final List<Integer> MERGE_STA_NO_One = new ArrayList<Integer>() {{
-        add(116);add(117);
+//        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(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(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);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(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(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>() {{
@@ -71,38 +77,132 @@
             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;
-//        }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 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;
@@ -200,7 +300,7 @@
         if (rgvNo==1) {
             switch (staNo) {
                 case 101:
-                case 102:   return 0;
+                case 102:   return 102;
                 case 104:
                 case 122:
                 case 105:   return 102;
@@ -222,7 +322,7 @@
                 case 1142:
                 case 116:
                 case 117:
-                    return 0;
+                    return 102;
                 default:
                     return 101;
             }
@@ -231,7 +331,7 @@
                 case 117:
                 case 116:
                 case 1142:
-                    return 0;
+                    return 116;
                 case 114:
                 case 123:
                 case 113:
@@ -253,7 +353,7 @@
                     return 107;
                 case 102:
                 case 101:
-                    return 0;
+                    return 116;
                 default:
                     return 117;
             }
@@ -500,8 +600,6 @@
 //        }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){
diff --git a/src/main/resources/mapper/BasRgvMapMapper.xml b/src/main/resources/mapper/BasRgvMapMapper.xml
index a4f5bae..f3541e8 100644
--- a/src/main/resources/mapper/BasRgvMapMapper.xml
+++ b/src/main/resources/mapper/BasRgvMapMapper.xml
@@ -11,6 +11,8 @@
         <result column="rgv_status" property="rgvStatus" />
         <result column="lock_start_route" property="lockStartRoute" />
         <result column="lock_end_route" property="lockEndRoute" />
+        <result column="start_route_other" property="startRouteOther" />
+        <result column="end_route_other" property="endRouteOther" />
 
     </resultMap>
 

--
Gitblit v1.9.1