From eb519c38628c40669a63fa2e34f5aae876faecf9 Mon Sep 17 00:00:00 2001
From: Junjie <540245094@qq.com>
Date: 星期一, 21 七月 2025 16:10:58 +0800
Subject: [PATCH] #

---
 src/main/java/com/zy/common/utils/NavigateUtils.java |   96 ++++++++++++++++++++++++++++++++++--------------
 1 files changed, 68 insertions(+), 28 deletions(-)

diff --git a/src/main/java/com/zy/common/utils/NavigateUtils.java b/src/main/java/com/zy/common/utils/NavigateUtils.java
index 3fa02a9..c6e94ab 100644
--- a/src/main/java/com/zy/common/utils/NavigateUtils.java
+++ b/src/main/java/com/zy/common/utils/NavigateUtils.java
@@ -32,11 +32,11 @@
     @Autowired
     private NavigateMapData navigateMapData;
 
-    public List<NavigateNode> calc(String startPoint, String endPoint, Integer mapType, List<int[]> shuttlePoints, List<int[]> whites) {
-        return calcJava(startPoint, endPoint, mapType, shuttlePoints, whites);
+    public List<NavigateNode> calc(String startPoint, String endPoint, List<NavigationMapType> mapTypes, List<int[]> shuttlePoints, List<int[]> whites) {
+        return calcJava(startPoint, endPoint, mapTypes, shuttlePoints, whites);
     }
 
-    public List<NavigateNode> calcJava(String startPoint, String endPoint, Integer mapType, List<int[]> shuttlePoints, List<int[]> whites) {
+    public List<NavigateNode> calcJava(String startPoint, String endPoint, List<NavigationMapType> mapTypes, List<int[]> shuttlePoints, List<int[]> whites) {
         //閫氳繃寮�濮嬬紪鍙峰拰缁撴潫缂栧彿鑾峰彇瀵瑰簲鐨剎y杞村潗鏍�
         int[] startArr = NavigatePositionConvert.positionToXY(startPoint);//寮�濮嬭妭鐐�
         int[] endArr = NavigatePositionConvert.positionToXY(endPoint);//缁撴潫鑺傜偣
@@ -49,7 +49,7 @@
 
         //鑾峰彇褰撳墠鑺傜偣璁$畻鐨勫眰楂橈紝骞惰祴鍊煎埌姣忎竴涓妭鐐逛腑
         int lev = Utils.getLev(startPoint);
-        NavigateSolution solution = new NavigateSolution(mapType, lev, whiteList, shuttlePoints);
+        NavigateSolution solution = new NavigateSolution(mapTypes, lev, whiteList, shuttlePoints);
         int[][] map = solution.map;
 
         //鍒濆鍖栧紑濮嬭妭鐐�
@@ -109,7 +109,7 @@
         return list;
     }
 
-    public List<NavigateNode> calcPython(String startPoint, String endPoint, Integer mapType, List<int[]> shuttlePoints, List<int[]> whites) {
+    public List<NavigateNode> calcPython(String startPoint, String endPoint, List<NavigationMapType> mapTypes, List<int[]> shuttlePoints, List<int[]> whites) {
         //閫氳繃寮�濮嬬紪鍙峰拰缁撴潫缂栧彿鑾峰彇瀵瑰簲鐨剎y杞村潗鏍�
         int[] startArr = NavigatePositionConvert.positionToXY(startPoint);//寮�濮嬭妭鐐�
         int[] endArr = NavigatePositionConvert.positionToXY(endPoint);//缁撴潫鑺傜偣
@@ -122,7 +122,7 @@
 
         //鑾峰彇褰撳墠鑺傜偣璁$畻鐨勫眰楂橈紝骞惰祴鍊煎埌姣忎竴涓妭鐐逛腑
         int lev = Utils.getLev(startPoint);
-        NavigateSolution solution = new NavigateSolution(mapType, lev, whiteList, shuttlePoints);
+        NavigateSolution solution = new NavigateSolution(mapTypes, lev, whiteList, shuttlePoints);
         int[][] map = solution.map;
 
         //鍒濆鍖栧紑濮嬭妭鐐�
@@ -189,16 +189,16 @@
     }
 
     //璁$畻甯︽湯绔钀借矾寰�
-    public ArrayList<ArrayList<NavigateNode>> calcEndPath(String startPoint, String endPoint, Integer mapType, List<int[]> shuttlePoints, List<int[]> whites, int lastPathPart) {
+    public List<List<NavigateNode>> calcEndPath(String startPoint, String endPoint, List<NavigationMapType> mapTypes, List<int[]> shuttlePoints, List<int[]> whites, int lastPathPart) {
         //璁$畻璺緞
-        List<NavigateNode> navigateNodes = calc(startPoint, endPoint, mapType, shuttlePoints, whites);
+        List<NavigateNode> navigateNodes = calc(startPoint, endPoint, mapTypes, shuttlePoints, whites);
         if (navigateNodes == null) {
             News.error("{} dash {} can't find navigate path!", startPoint, endPoint);
             return null;
         }
 
         //鑾峰彇鍒嗘璺緞
-        ArrayList<ArrayList<NavigateNode>> partList = this.getSectionPath(navigateNodes);
+        List<List<NavigateNode>> partList = this.getSectionPath(navigateNodes);
         //鏍规嵁浼犲叆鐨勬湯绔钀借矾寰勶紝鎵惧埌鏈鐐逛綅
         int partResult = partList.size() - lastPathPart;
         if (partResult == 0) {//璺緞鏁伴噺鐩稿悓鏃犻渶鍒嗗壊
@@ -207,7 +207,7 @@
             throw new CoolException("鍒嗘璺緞涓庢湯绔矾寰勬暟閲忚绠楀紓甯�");
         }
         int pathIdx = partResult - 1;
-        ArrayList<ArrayList<NavigateNode>> filterList = new ArrayList<>();
+        List<List<NavigateNode>> filterList = new ArrayList<>();
         for (int i = 0; i <= pathIdx; i++) {
             filterList.add(partList.get(i));
         }
@@ -215,8 +215,8 @@
     }
 
     //璁$畻鏈娈佃惤鍦板潃
-    public String calcEndLocation(String startPoint, String endPoint, Integer mapType, List<int[]> shuttlePoints, List<int[]> whites, int lastPathPart) {
-        ArrayList<ArrayList<NavigateNode>> endPath = calcEndPath(startPoint, endPoint, mapType, shuttlePoints, whites, lastPathPart);
+    public String calcEndLocation(String startPoint, String endPoint, List<NavigationMapType> mapTypes, List<int[]> shuttlePoints, List<int[]> whites, int lastPathPart) {
+        List<List<NavigateNode>> endPath = calcEndPath(startPoint, endPoint, mapTypes, shuttlePoints, whites, lastPathPart);
         if (endPath == null) {
             return null;
         }
@@ -224,13 +224,8 @@
         return findTargetLocation(endPath);
     }
 
-    public String findTargetLocation(List<NavigateNode> nodeList) {
-        ArrayList<ArrayList<NavigateNode>> sectionPath = this.getSectionPath(nodeList);
-        return findTargetLocation(sectionPath);
-    }
-
-    public String findTargetLocation(ArrayList<ArrayList<NavigateNode>> partList) {
-        ArrayList<NavigateNode> nodes = partList.get(partList.size() - 1);
+    public String findTargetLocation(List<List<NavigateNode>> partList) {
+        List<NavigateNode> nodes = partList.get(partList.size() - 1);
         NavigateNode targetNode = nodes.get(0);
         String locNo = NavigatePositionConvert.nodeToLocNo(targetNode);
         return locNo;
@@ -292,10 +287,10 @@
      * 鍔犺浆寮妭鐐�
      * 鑾峰彇鍒嗘璺緞锛屾瘡褰撴湁涓�涓嫄鐐瑰垯杩涜涓�娆″垎娈碉紝鏈�缁堣繑鍥炴�诲垎娈垫暟鎹�
      */
-    public ArrayList<ArrayList<NavigateNode>> getSectionPath(List<NavigateNode> mapList) {
-        ArrayList<ArrayList<NavigateNode>> list = new ArrayList<>();
+    public List<List<NavigateNode>> getSectionPath(List<NavigateNode> mapList) {
+        List<List<NavigateNode>> list = new ArrayList<>();
 
-        ArrayList<NavigateNode> data = new ArrayList<>();
+        List<NavigateNode> data = new ArrayList<>();
         String direction = mapList.get(0).getDirection();//琛岃蛋鏂瑰悜
 
         for (NavigateNode navigateNode : mapList) {
@@ -318,13 +313,58 @@
         //灏嗘渶鍚庝竴娈垫暟鎹坊鍔犺繘鍏�
         list.add(data);
 
-        return list;
+        List<List<NavigateNode>> paths = getSectionPathToSplitOverLength(list);
+        return paths;
+    }
+
+    //鍒嗘璺緞-澶勭悊瓒呴暱鐩寸嚎娈佃矾寰�
+    public List<List<NavigateNode>> getSectionPathToSplitOverLength(List<List<NavigateNode>> list) {
+        List<List<NavigateNode>> paths = new ArrayList<>();
+        int overLength = 9;
+        for (List<NavigateNode> nodes : list) {
+            if (nodes.size() > overLength) {
+                List<NavigateNode> copy = JSON.parseArray(JSON.toJSONString(nodes), NavigateNode.class);
+                List<NavigateNode> tmp = new ArrayList<>();
+                int tmpCount = 0;
+                NavigateNode lastNode = null;
+                for (NavigateNode node : copy) {
+                    tmp.add(node);
+                    tmpCount++;
+
+                    if(tmpCount >= overLength) {
+                        if (lastNode == null) {
+                            NavigateNode startNode = tmp.get(0);
+                            startNode.setLinePartAllowGo(true);//鐩寸嚎娈佃秴闀块儴鍒嗗厑璁哥洿鎺ヨ璧�
+                            tmp.set(0, startNode);
+                        }
+                        NavigateNode targetNode = tmp.get(tmp.size() - 1);
+                        targetNode.setLinePartAllowGo(true);//鐩寸嚎娈佃秴闀块儴鍒嗗厑璁哥洿鎺ヨ璧�
+                        if (lastNode != null) {
+                            tmp.add(0, lastNode);
+                        }
+
+                        paths.add(tmp);
+                        tmp = new ArrayList<>();
+                        tmpCount = 0;
+                        lastNode = targetNode;
+                    }
+                }
+
+                if (tmpCount > 0) {
+                    tmp.add(0, lastNode);
+                    paths.add(tmp);
+                }
+            }else {
+                paths.add(nodes);
+            }
+        }
+        return paths;
     }
 
     //鑾峰彇浠巟鐐瑰埌涓嬩竴鐐圭殑琛岃蛋璺濈
     public Integer getXToNextDistance(NavigateNode xNode) {
         NavigateMapData mapData = SpringUtils.getBean(NavigateMapData.class);
-        List<List<MapNode>> lists = mapData.getJsonData(xNode.getZ(), NavigationMapType.NONE.id, null, null);
+        List<List<MapNode>> lists = mapData.getJsonData(xNode.getZ(), NavigationMapType.getMapTypes(NavigationMapType.NONE), null, null);
         if (lists != null) {
             MapNode mapNode = lists.get(xNode.getX()).get(xNode.getY());
             if (mapNode != null) {
@@ -348,9 +388,9 @@
      * 鏍规嵁鍘熷鑺傜偣缁撴灉锛岃绠楁�昏璧拌窛绂�
      */
     public Integer getOriginPathAllDistance(List<NavigateNode> path) {
-        ArrayList<ArrayList<NavigateNode>> sectionPath = getSectionPath(path);
+        List<List<NavigateNode>> sectionPath = getSectionPath(path);
         Integer allDistance = 0;
-        for (ArrayList<NavigateNode> navigateNodes : sectionPath) {
+        for (List<NavigateNode> navigateNodes : sectionPath) {
             Integer distance = getCurrentPathAllDistance(navigateNodes);
             allDistance += distance;
         }
@@ -403,7 +443,7 @@
      * 妫�娴嬭矾寰勬槸鍚﹀彲鐢�(鍙蛋)
      */
     public boolean checkPathIsAvailable(List<NavigateNode> path, Integer shuttleNo, Integer lev) {
-        int[][] map = navigateMapData.getDataFromRedis(lev, NavigationMapType.DFX.id, null, Utils.getShuttlePoints(shuttleNo, lev));
+        int[][] map = navigateMapData.getDataFromRedis(lev, NavigationMapType.getDfxWithDevice(), null, Utils.getShuttlePoints(shuttleNo, lev));
         for (NavigateNode node : path) {
             int value = map[node.getX()][node.getY()];
             if (value != MapNodeType.NORMAL_PATH.id && value != MapNodeType.MAIN_PATH.id && value != MapNodeType.CHARGE.id && value != MapNodeType.CONVEYOR_CAR_GO.id) {//姣嶈建閬�3銆佸瓙杞ㄩ亾0銆佸厖鐢垫々5銆佸皬杞﹀彲璧拌緭閫佺珯
@@ -479,7 +519,7 @@
     public boolean checkLocPathIsAvailable(String startLocNo, String endLocNo) {
         List<int[]> shuttlePoints = Utils.getShuttlePoints(0, Utils.getLev(startLocNo));
         //璁$畻搴撲綅鍒版彁鍗囨満搴撲綅锛岃矾寰勬槸鍚﹀彲鐢�
-        List<NavigateNode> nodeList = this.calc(startLocNo, endLocNo, NavigationMapType.DFX.id, shuttlePoints, null);
+        List<NavigateNode> nodeList = this.calc(startLocNo, endLocNo, NavigationMapType.getMapTypes(NavigationMapType.DFX), shuttlePoints, null);
         if (nodeList == null) {
             return false;
         }

--
Gitblit v1.9.1