From ff3b5df7015b2f2c5e24d9973a7b443309d8e579 Mon Sep 17 00:00:00 2001
From: Junjie <540245094@qq.com>
Date: 星期六, 19 七月 2025 18:07:29 +0800
Subject: [PATCH] #

---
 src/main/java/com/zy/common/utils/NavigateUtils.java |   82 +++++++++++++++++++++++++++++++++++++----
 1 files changed, 74 insertions(+), 8 deletions(-)

diff --git a/src/main/java/com/zy/common/utils/NavigateUtils.java b/src/main/java/com/zy/common/utils/NavigateUtils.java
index 22d5fab..db95875 100644
--- a/src/main/java/com/zy/common/utils/NavigateUtils.java
+++ b/src/main/java/com/zy/common/utils/NavigateUtils.java
@@ -3,6 +3,7 @@
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.core.common.SpringUtils;
+import com.core.exception.CoolException;
 import com.zy.asrs.utils.Utils;
 import com.zy.common.model.MapNode;
 import com.zy.common.model.NavigateNode;
@@ -31,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);//缁撴潫鑺傜偣
@@ -48,14 +49,17 @@
 
         //鑾峰彇褰撳墠鑺傜偣璁$畻鐨勫眰楂橈紝骞惰祴鍊煎埌姣忎竴涓妭鐐逛腑
         int lev = Utils.getLev(startPoint);
+        NavigateSolution solution = new NavigateSolution(mapTypes, lev, whiteList, shuttlePoints);
+        int[][] map = solution.map;
 
         //鍒濆鍖栧紑濮嬭妭鐐�
         NavigateNode start = new NavigateNode(startArr[0], startArr[1]);
         //寮�濮嬭妭鐐规棤鐖惰妭鐐�
         start.setFather(null);
+        start.setNodeValue(map[startArr[0]][startArr[1]]);
 
         NavigateNode end = new NavigateNode(endArr[0], endArr[1]);
-        NavigateSolution solution = new NavigateSolution(mapType, lev, whiteList, shuttlePoints);
+        end.setNodeValue(map[endArr[0]][endArr[1]]);
         //寮�濮嬭妭鐐癸紝涓嶇撼鍏ョ鐢ㄨ妭鐐瑰唴璁$畻
 
         NavigateNode res_node = solution.astarSearchJava(start, end);
@@ -105,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);//缁撴潫鑺傜偣
@@ -118,14 +122,17 @@
 
         //鑾峰彇褰撳墠鑺傜偣璁$畻鐨勫眰楂橈紝骞惰祴鍊煎埌姣忎竴涓妭鐐逛腑
         int lev = Utils.getLev(startPoint);
+        NavigateSolution solution = new NavigateSolution(mapTypes, lev, whiteList, shuttlePoints);
+        int[][] map = solution.map;
 
         //鍒濆鍖栧紑濮嬭妭鐐�
         NavigateNode start = new NavigateNode(startArr[0], startArr[1]);
+        start.setNodeValue(map[startArr[0]][startArr[1]]);
         //寮�濮嬭妭鐐规棤鐖惰妭鐐�
         start.setFather(null);
 
         NavigateNode end = new NavigateNode(endArr[0], endArr[1]);
-        NavigateSolution solution = new NavigateSolution(mapType, lev, whiteList, shuttlePoints);
+        end.setNodeValue(map[endArr[0]][endArr[1]]);
         //寮�濮嬭妭鐐癸紝涓嶇撼鍏ョ鐢ㄨ妭鐐瑰唴璁$畻
 
         String pathStr = solution.astarSearchPython(start, end, pythonCalcPath);
@@ -179,6 +186,54 @@
         //鏇存柊鑺傜偣鍒楄〃
         list.set(0, startNode);
         return list;
+    }
+
+    //璁$畻甯︽湯绔钀借矾寰�
+    public ArrayList<ArrayList<NavigateNode>> calcEndPath(String startPoint, String endPoint, List<NavigationMapType> mapTypes, List<int[]> shuttlePoints, List<int[]> whites, int lastPathPart) {
+        //璁$畻璺緞
+        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);
+        //鏍规嵁浼犲叆鐨勬湯绔钀借矾寰勶紝鎵惧埌鏈鐐逛綅
+        int partResult = partList.size() - lastPathPart;
+        if (partResult == 0) {//璺緞鏁伴噺鐩稿悓鏃犻渶鍒嗗壊
+            return partList;
+        } else if (partResult < 0) {
+            throw new CoolException("鍒嗘璺緞涓庢湯绔矾寰勬暟閲忚绠楀紓甯�");
+        }
+        int pathIdx = partResult - 1;
+        ArrayList<ArrayList<NavigateNode>> filterList = new ArrayList<>();
+        for (int i = 0; i <= pathIdx; i++) {
+            filterList.add(partList.get(i));
+        }
+        return filterList;
+    }
+
+    //璁$畻鏈娈佃惤鍦板潃
+    public String calcEndLocation(String startPoint, String endPoint, List<NavigationMapType> mapTypes, List<int[]> shuttlePoints, List<int[]> whites, int lastPathPart) {
+        ArrayList<ArrayList<NavigateNode>> endPath = calcEndPath(startPoint, endPoint, mapTypes, shuttlePoints, whites, lastPathPart);
+        if (endPath == null) {
+            return null;
+        }
+
+        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);
+        NavigateNode targetNode = nodes.get(0);
+        String locNo = NavigatePositionConvert.nodeToLocNo(targetNode);
+        return locNo;
     }
 
     //鍒ゆ柇褰撳墠鑺傜偣鍒颁笅涓�涓妭鐐规槸鍚︿负鎷愮偣
@@ -269,7 +324,7 @@
     //鑾峰彇浠巟鐐瑰埌涓嬩竴鐐圭殑琛岃蛋璺濈
     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,7 +403,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銆佸皬杞﹀彲璧拌緭閫佺珯
@@ -420,6 +475,17 @@
         return 0D;
     }
 
+    //妫�娴嬪簱浣嶈矾寰勬槸鍚﹀彲鐢�(鐢ㄤ簬搴撲綅鏄惁鍙Щ鍔ㄦ娴�)
+    public boolean checkLocPathIsAvailable(String startLocNo, String endLocNo) {
+        List<int[]> shuttlePoints = Utils.getShuttlePoints(0, Utils.getLev(startLocNo));
+        //璁$畻搴撲綅鍒版彁鍗囨満搴撲綅锛岃矾寰勬槸鍚﹀彲鐢�
+        List<NavigateNode> nodeList = this.calc(startLocNo, endLocNo, NavigationMapType.getMapTypes(NavigationMapType.DFX), shuttlePoints, null);
+        if (nodeList == null) {
+            return false;
+        }
+        return true;
+    }
+
     public static void main(String[] args) {
 //        //璁$畻璺緞
 //        List<NavigateNode> calc = calc("1000901", "1800201", NavigationMapType.NONE.id, null);

--
Gitblit v1.9.1