From 613b59f94870adb25b6dd1e8a1aba8cbb670288e Mon Sep 17 00:00:00 2001
From: luxiaotao1123 <t1341870251@163.com>
Date: 星期三, 18 十二月 2024 14:21:21 +0800
Subject: [PATCH] #

---
 zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/astart/MapDataDispatcher.java    |   27 +++++++++++--
 zy-acs-common/src/main/java/com/zy/acs/common/constant/RedisConstant.java                     |    2 +
 zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/RetreatNavigateService.java      |   11 ++---
 zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/astart/AStarNavigateService.java |   10 ++--
 zy-acs-manager/src/main/java/com/zy/acs/manager/core/utils/RouteGenerator.java                |   11 +++++
 zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/astart/config/MapDataConfig.java |    1 
 6 files changed, 47 insertions(+), 15 deletions(-)

diff --git a/zy-acs-common/src/main/java/com/zy/acs/common/constant/RedisConstant.java b/zy-acs-common/src/main/java/com/zy/acs/common/constant/RedisConstant.java
index 550cfab..0270942 100644
--- a/zy-acs-common/src/main/java/com/zy/acs/common/constant/RedisConstant.java
+++ b/zy-acs-common/src/main/java/com/zy/acs/common/constant/RedisConstant.java
@@ -39,6 +39,8 @@
 
     public static final String AGV_MAP_ASTAR_WAVE_FLAG = "AGV_MAP_ASTAR_WAVE_FLAG";
 
+    public static final String AGV_MAP_ROUTE_HASH_FLAG = "AGV_MAP_ROUTE_HASH_FLAG";
+
     public static final String AGV_TRAFFIC_JAM_FLAG = "AGV_TRAFFIC_JAM_FLAG";
 
     public static final String MAP_FLOYD_MATRIX_HEADER_FLAG = "MAP_FLOYD_MATRIX_HEADER_FLAG";
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 f51d239..594d12a 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
@@ -1,6 +1,7 @@
 package com.zy.acs.manager.core.service;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.zy.acs.common.constant.RedisConstant;
 import com.zy.acs.common.utils.RedisSupport;
 import com.zy.acs.common.utils.Utils;
 import com.zy.acs.framework.common.Cools;
@@ -9,6 +10,7 @@
 import com.zy.acs.manager.core.domain.Lane;
 import com.zy.acs.manager.core.service.astart.*;
 import com.zy.acs.manager.core.service.astart.domain.DynamicNode;
+import com.zy.acs.manager.core.utils.RouteGenerator;
 import com.zy.acs.manager.manager.entity.Code;
 import com.zy.acs.manager.manager.entity.Jam;
 import com.zy.acs.manager.manager.entity.Route;
@@ -386,14 +388,11 @@
             nextNode.setCodeData(nextNodeCodeData);
 
             // 鍒ゆ柇閫氳繃鎬�
-            Route route = routeService.findByCodeOfBoth(
-                    codeService.selectByData(currentNodeCodeData).getId(),
-                    codeService.selectByData(nextNodeCodeData).getId()
-            );
-            if (null == route) {
+            String routeKey = RouteGenerator.generateRouteKey(currentNodeCodeData, nextNodeCodeData);
+            Object routeVal = redis.getMap(RedisConstant.AGV_MAP_ROUTE_HASH_FLAG, routeKey);
+            if (routeVal == null || !(Boolean) routeVal) {
                 return null;
             }
-
         }
 
         return nextNode;
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 1f506ac..d3fc394 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
@@ -1,11 +1,13 @@
 package com.zy.acs.manager.core.service.astart;
 
+import com.zy.acs.common.constant.RedisConstant;
 import com.zy.acs.common.utils.RedisSupport;
 import com.zy.acs.framework.common.Cools;
 import com.zy.acs.manager.common.utils.MapDataUtils;
 import com.zy.acs.manager.core.domain.Lane;
 import com.zy.acs.manager.core.service.LaneService;
 import com.zy.acs.manager.core.service.astart.domain.DynamicNode;
+import com.zy.acs.manager.core.utils.RouteGenerator;
 import com.zy.acs.manager.manager.entity.Route;
 import com.zy.acs.manager.manager.entity.Segment;
 import com.zy.acs.manager.manager.service.CodeService;
@@ -245,11 +247,9 @@
             nextNode.setCodeData(nextNodeCodeData);
 
             // 鍒ゆ柇閫氳繃鎬�
-            Route route = routeService.findByCodeOfBoth(
-                    codeService.selectByData(currentNodeCodeData).getId(),
-                    codeService.selectByData(nextNodeCodeData).getId()
-            );
-            if (null == route) {
+            String routeKey = RouteGenerator.generateRouteKey(currentNodeCodeData, nextNodeCodeData);
+            Object routeVal = redis.getMap(RedisConstant.AGV_MAP_ROUTE_HASH_FLAG, routeKey);
+            if (routeVal == null || !(Boolean) routeVal) {
                 return null;
             }
 
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/astart/MapDataDispatcher.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/astart/MapDataDispatcher.java
index 5411381..62dc062 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/astart/MapDataDispatcher.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/astart/MapDataDispatcher.java
@@ -8,15 +8,15 @@
 import com.zy.acs.framework.exception.CoolException;
 import com.zy.acs.manager.core.domain.SortCodeDto;
 import com.zy.acs.manager.core.service.astart.domain.DynamicNode;
+import com.zy.acs.manager.core.utils.RouteGenerator;
 import com.zy.acs.manager.manager.entity.Code;
+import com.zy.acs.manager.manager.entity.Route;
+import com.zy.acs.manager.manager.enums.StatusType;
 import com.zy.acs.manager.manager.service.CodeService;
 import com.zy.acs.manager.manager.service.RouteService;
 import lombok.extern.slf4j.Slf4j;
 
-import java.util.ArrayList;
-import java.util.Comparator;
-import java.util.List;
-import java.util.Optional;
+import java.util.*;
 import java.util.stream.Collectors;
 
 /**
@@ -330,6 +330,25 @@
         return mapMatrix;
     }
 
+    public synchronized void initRouteMap(Integer lev) {
+        log.info("There is initializing Route Map......");
+        lev = Optional.ofNullable(lev).orElse(MAP_DEFAULT_LEV);
+        Set<String> routeKeys = redis.getMapKeys(RedisConstant.AGV_MAP_ROUTE_HASH_FLAG);
+        List<Route> routeList = routeService.list(new LambdaQueryWrapper<Route>().eq(Route::getStatus, StatusType.ENABLE.val));
+        if (routeKeys.size() == routeList.size()) {
+            return;
+        }
+        for (Route route : routeList) {
+            Code startCode = codeService.getById(route.getStartCode());
+            Code endCode = codeService.getById(route.getEndCode());
+            String routeKey = RouteGenerator.generateRouteKey(startCode.getData(), endCode.getData());
+            if (Cools.isEmpty(routeKey)) {
+                continue;
+            }
+            redis.setMap(RedisConstant.AGV_MAP_ROUTE_HASH_FLAG, routeKey, Boolean.TRUE);
+        }
+    }
+
     public synchronized String[][] initCodeMatrix(Integer lev) {
         log.info("There is initializing Code Matrix......");
         lev = Optional.ofNullable(lev).orElse(MAP_DEFAULT_LEV);
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/astart/config/MapDataConfig.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/astart/config/MapDataConfig.java
index 9e8ed68..3cf6afd 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/astart/config/MapDataConfig.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/astart/config/MapDataConfig.java
@@ -22,6 +22,7 @@
     public MapDataDispatcher getMapDataDispatcher() {
         MapDataDispatcher dispatcher = new MapDataDispatcher(codeService, routeService);
         String[][] codeMatrix = dispatcher.getCodeMatrix(null);
+        dispatcher.initRouteMap(null);
         if (codeMatrix.length > 0) {
             dispatcher.getMapMatrix(null, null);
             dispatcher.getTurnMatrix(null);
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/utils/RouteGenerator.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/utils/RouteGenerator.java
index c3cad61..7bf09fb 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/utils/RouteGenerator.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/utils/RouteGenerator.java
@@ -30,6 +30,17 @@
     @Autowired
     private CodeGapService codeGapService;
 
+    public static String generateRouteKey(String codeData0, String codeData1) {
+        if (Cools.isEmpty(codeData0, codeData1)) {
+            return null;
+        }
+        if (codeData0.compareTo(codeData1) < 0) {
+            return codeData0 + "-" + codeData1;
+        } else {
+            return codeData1 + "-" + codeData0;
+        }
+    }
+
     public List<String> generateRoutes(String[][] codeMatrix) {
         List<String> list = new ArrayList<>();
 

--
Gitblit v1.9.1