From 3d7bf12a7d6f139624a2dacd1bd80781d7f658e5 Mon Sep 17 00:00:00 2001
From: luxiaotao1123 <t1341870251@163.com>
Date: 星期一, 30 十二月 2024 14:46:47 +0800
Subject: [PATCH] #

---
 zy-acs-flow/src/map/constants.js                                                              |    2 
 zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/RetreatNavigateService.java      |   26 +++++--------
 zy-acs-manager/src/main/java/com/zy/acs/manager/core/scheduler/MapDataWsScheduler.java        |    2 
 zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/astart/AStarNavigateService.java |   14 ++-----
 zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/LaneService.java                 |   38 ++++++++++++++++++-
 zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/MapService.java                  |    2 
 6 files changed, 53 insertions(+), 31 deletions(-)

diff --git a/zy-acs-flow/src/map/constants.js b/zy-acs-flow/src/map/constants.js
index 58869f5..8ab6ce1 100644
--- a/zy-acs-flow/src/map/constants.js
+++ b/zy-acs-flow/src/map/constants.js
@@ -1,5 +1,5 @@
 
-export const ANIMATE_DURING_TIME = 300;
+export const ANIMATE_DURING_TIME = 600;
 
 export const MAP_DEFAULT_ROTATION = 270;
 
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/scheduler/MapDataWsScheduler.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/scheduler/MapDataWsScheduler.java
index 3c7e5ab..5b5f82b 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/scheduler/MapDataWsScheduler.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/scheduler/MapDataWsScheduler.java
@@ -33,7 +33,7 @@
 @Component
 public class MapDataWsScheduler {
 
-    public static final int WEBSOCKET_BROADCAST_INTERVAL = 300;
+    public static final int WEBSOCKET_BROADCAST_INTERVAL = 600;
 
     private ExecutorService singleThreadExecutor;
 
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/LaneService.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/LaneService.java
index 12eb100..cbfedb2 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/LaneService.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/LaneService.java
@@ -37,6 +37,8 @@
 
     private final Map<String, List<String>> adjacencyCodeMap = new HashMap<>();
 
+    private final Map<String, List<int[]>> laneCodeIdxMap = new HashMap<>();
+
     private boolean initialized = Boolean.FALSE;
 
     @Autowired
@@ -47,6 +49,10 @@
     private SnowflakeIdWorker snowflakeIdWorker;
     @Autowired
     private ConfigService configService;
+    @Autowired
+    private MapDataDispatcher mapDataDispatcher;
+
+    // service -------------------------------------------------------
 
     public Boolean isInitialized() {
         return this.initialized;
@@ -64,13 +70,25 @@
         return null;
     }
 
+    public List<int[]> getLaneCodeIdxList(String codeData) {
+        if (Cools.isEmpty(codeData)) {
+            return new ArrayList<>();
+        }
+        List<int[]> list = this.laneCodeIdxMap.get(codeData);
+        if (null == list) {
+            return new ArrayList<>();
+        }
+        return list;
+    }
+
+    // launcher -------------------------------------------------------
+
     @PostConstruct
     public void init() {
         Integer lev = MapDataDispatcher.MAP_DEFAULT_LEV;
         String laneDataStr = redis.getValue(RedisConstant.MAP_LANE_DATA, String.valueOf(lev));
         if (!Cools.isEmpty(laneDataStr)) {
             this.lanes = GsonUtils.fromJsonToList(laneDataStr, Lane.class);
-            this.initialized = Boolean.TRUE;
         } else {
 
             StopWatch stopWatch = new StopWatch();
@@ -84,6 +102,8 @@
             redis.setValue(RedisConstant.MAP_LANE_DATA, String.valueOf(lev), GsonUtils.toJson(this.lanes));
         }
 
+        this.generateLaneCodeIdx(null);
+        this.initialized = Boolean.TRUE;
 //        System.out.println(GsonUtils.toJson(this.lanes));
     }
 
@@ -104,7 +124,6 @@
 
         this.generateLaneHash();
 
-        this.initialized = Boolean.TRUE;
         log.info("the lane data initialization has been completed in rcs system.");
     }
 
@@ -327,4 +346,19 @@
         return sb.toString();
     }
 
+    public void generateLaneCodeIdx(Integer lev) {
+        log.info("There is initializing Lane CodeIdxMap......");
+        long l = System.currentTimeMillis();
+        if (Cools.isEmpty(this.lanes)) {
+            return;
+        }
+        for (Lane lane : this.lanes) {
+            List<int[]> codeIdxList = new ArrayList<>();
+            for (String code : lane.getCodes()) {
+                int[] codeMatrixIdx = mapDataDispatcher.getCodeMatrixIdx(lev, code);
+                codeIdxList.add(codeMatrixIdx);
+                this.laneCodeIdxMap.put(code, codeIdxList);
+            }
+        }
+    }
 }
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/MapService.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/MapService.java
index d98b6d3..cda8676 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/MapService.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/MapService.java
@@ -212,7 +212,7 @@
             for (int i = 0; i < dynamicMatrix.length; i++) {
                 for (int j = 0; j < dynamicMatrix[i].length; j++) {
 
-                    if (i == codeMatrixIdx[0] && j == codeMatrixIdx[1]) { continue; }
+//                    if (i == codeMatrixIdx[0] && j == codeMatrixIdx[1]) { continue; }
 
                     DynamicNode node = dynamicMatrix[i][j];
                     if (node.getVehicle().equals(agvNo)) {
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/RetreatNavigateService.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/RetreatNavigateService.java
index 0451ee4..7e9cbc3 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/RetreatNavigateService.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/RetreatNavigateService.java
@@ -124,29 +124,26 @@
 
                 // lane
                 if (pointOfTurn) {
-                    Lane lane = laneService.search(node.getCodeData());
-                    if (null != lane) {
+                    List<int[]> laneCodeIdxList = laneService.getLaneCodeIdxList(node.getCodeData());
+                    if (!Cools.isEmpty(laneCodeIdxList)) {
                         Set<String> lanVehicleSet = new HashSet<>();
 
-                        for (String laneCodeData : lane.getCodes()) {
+                        for (int[] codeMatrixIdx : laneCodeIdxList) {
                             // overlap with sponsor
+                            String laneCodeData = codeMatrix[codeMatrixIdx[0]][codeMatrixIdx[1]];
                             if (avoidPathList.contains(laneCodeData)) {
                                 lanVehicleSet.add(sponsor);
                             }
 
-                            int[] laneCodeMatrixIdx = mapDataDispatcher.getCodeMatrixIdx(null, laneCodeData);
-                            // scan dynamicMatrix or WaveMatrix
-                            DynamicNode laneDynamicNode = dynamicMatrix[laneCodeMatrixIdx[0]][laneCodeMatrixIdx[1]];
+                            DynamicNode laneDynamicNode = dynamicMatrix[codeMatrixIdx[0]][codeMatrixIdx[1]];
                             String laneVehicle = laneDynamicNode.getVehicle();
                             assert !laneVehicle.equals(DynamicNodeType.BLOCK.val);
                             if (!laneVehicle.equals(DynamicNodeType.ACCESS.val)) {
                                 if (!laneVehicle.equals(agvNo)) {
                                     lanVehicleSet.add(laneVehicle);
-//                                    redis.setObject(RedisConstant.AGV_TO_STANDBY_FLAG, laneVehicle, true, 30);
                                 }
                             }
                         }
-
                         if (lanVehicleSet.size() + 1 > maxAgvCountInLane) {
                             phaseSecond = false;    // there is a running way
                             continue;
@@ -155,6 +152,7 @@
                             weight += WEIGHT_CALC_FACTOR * 2;
                         }
                     }
+
                 }
 
                 Code code = codeService.selectByData(node.getCodeData());
@@ -224,24 +222,20 @@
 
                         for (RetreatNavigateNode node : neighborNodes) {
                             // lane
-                            Lane lane = laneService.search(node.getCodeData());
-                            if (null != lane) {
+                            List<int[]> laneCodeIdxList = laneService.getLaneCodeIdxList(node.getCodeData());
+                            if (!Cools.isEmpty(laneCodeIdxList)) {
                                 Set<String> lanVehicleSet = new HashSet<>();
 
-                                for (String laneCodeData : lane.getCodes()) {
-                                    int[] laneCodeMatrixIdx = mapDataDispatcher.getCodeMatrixIdx(null, laneCodeData);
-                                    // scan dynamicMatrix or WaveMatrix
-                                    DynamicNode laneDynamicNode = dynamicMatrix[laneCodeMatrixIdx[0]][laneCodeMatrixIdx[1]];
+                                for (int[] codeMatrixIdx : laneCodeIdxList) {
+                                    DynamicNode laneDynamicNode = dynamicMatrix[codeMatrixIdx[0]][codeMatrixIdx[1]];
                                     String laneVehicle = laneDynamicNode.getVehicle();
                                     assert !laneVehicle.equals(DynamicNodeType.BLOCK.val);
                                     if (!laneVehicle.equals(DynamicNodeType.ACCESS.val)) {
                                         if (!laneVehicle.equals(agvNo)) {
                                             lanVehicleSet.add(laneVehicle);
-//                                            redis.setObject(RedisConstant.AGV_TO_STANDBY_FLAG, laneVehicle, true, 30);
                                         }
                                     }
                                 }
-
                                 if (lanVehicleSet.size() + 1 > maxAgvCountInLane) {
                                     continue;
                                 }
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/astart/AStarNavigateService.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/astart/AStarNavigateService.java
index 9e9e982..656cd63 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/astart/AStarNavigateService.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/astart/AStarNavigateService.java
@@ -121,30 +121,24 @@
                 }
 
                 // 鍗曞贩閬撹溅杈嗗杞芥暟閲�
-                Lane lane = laneService.search(node.getCodeData());
-                if (null != lane) {
+                List<int[]> laneCodeIdxList = laneService.getLaneCodeIdxList(node.getCodeData());
+                if (!Cools.isEmpty(laneCodeIdxList)) {
                     Set<String> lanVehicleSet = new HashSet<>();
 
-                    List<String> laneCodes = lane.getCodes();
-                    for (String laneCodeData : laneCodes) {
-                        int[] laneCodeMatrixIdx = mapDataDispatcher.getCodeMatrixIdx(null, laneCodeData);
-                        // scan dynamicMatrix or WaveMatrix
-                        DynamicNode laneDynamicNode = dynamicMatrix[laneCodeMatrixIdx[0]][laneCodeMatrixIdx[1]];
+                    for (int[] codeMatrixIdx : laneCodeIdxList) {
+                        DynamicNode laneDynamicNode = dynamicMatrix[codeMatrixIdx[0]][codeMatrixIdx[1]];
                         String laneVehicle = laneDynamicNode.getVehicle();
                         assert !laneVehicle.equals(DynamicNodeType.BLOCK.val);
                         if (!laneVehicle.equals(DynamicNodeType.ACCESS.val)) {
                             if (!laneVehicle.equals(agvNo)) {
                                 lanVehicleSet.add(laneVehicle);
-//                                redis.setObject(RedisConstant.AGV_TO_STANDBY_FLAG, laneVehicle, true, 30);
                             }
                         }
                     }
-
                     if (lanVehicleSet.size() + 1 > maxAgvCountInLane) {
                         continue;
                     }
                 }
-
 
                 //鎵惧埌鐩爣缁撶偣灏辫繑鍥�
                 if (isEndNode) {

--
Gitblit v1.9.1