From 314e894c0d6ce2739344dcd1c94ae7770868a0f1 Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期三, 28 五月 2025 14:51:16 +0800
Subject: [PATCH] #

---
 src/main/java/com/zy/common/utils/NavigateUtils.java |  102 ++++++++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 97 insertions(+), 5 deletions(-)

diff --git a/src/main/java/com/zy/common/utils/NavigateUtils.java b/src/main/java/com/zy/common/utils/NavigateUtils.java
index 4e02d8e..bf19aa9 100644
--- a/src/main/java/com/zy/common/utils/NavigateUtils.java
+++ b/src/main/java/com/zy/common/utils/NavigateUtils.java
@@ -10,6 +10,7 @@
 import com.zy.core.News;
 import com.zy.core.enums.MapNodeType;
 import com.zy.core.model.PythonSimilarityResult;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Component;
 
@@ -25,11 +26,16 @@
 
     @Value("${pythonCalcPath}")
     private String pythonCalcPath;
-
     @Value("${pythonCalcSimilarity}")
     private String pythonCalcSimilarity;
+    @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> calcJava(String startPoint, String endPoint, Integer mapType, List<int[]> shuttlePoints, List<int[]> whites) {
         //閫氳繃寮�濮嬬紪鍙峰拰缁撴潫缂栧彿鑾峰彇瀵瑰簲鐨剎y杞村潗鏍�
         int[] startArr = NavigatePositionConvert.positionToXY(startPoint);//寮�濮嬭妭鐐�
         int[] endArr = NavigatePositionConvert.positionToXY(endPoint);//缁撴潫鑺傜偣
@@ -42,17 +48,93 @@
 
         //鑾峰彇褰撳墠鑺傜偣璁$畻鐨勫眰楂橈紝骞惰祴鍊煎埌姣忎竴涓妭鐐逛腑
         int lev = Utils.getLev(startPoint);
+        NavigateSolution solution = new NavigateSolution(mapType, 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]]);
         //寮�濮嬭妭鐐癸紝涓嶇撼鍏ョ鐢ㄨ妭鐐瑰唴璁$畻
 
-        String pathStr = solution.astarSearch(start, end, pythonCalcPath);
+        NavigateNode res_node = solution.astarSearchJava(start, end);
+        if (res_node == null) {
+            News.error("{} dash {} can't find navigate path!", startPoint, endPoint);
+            return null;
+        }
+
+        ArrayList<NavigateNode> list = new ArrayList<>();
+        //娓叉煋
+        NavigateNode fatherNode = null;//褰撳墠寰幆涓婁竴鑺傜偣锛岀敤浜庢嫄鐐硅绠�
+        while (res_node != null) {
+            res_node.setDirection(null);
+            res_node.setIsInflectionPoint(false);
+            res_node.setZ(lev);//璁剧疆灞傞珮
+
+            //瀵绘壘鎷愮偣
+            HashMap<String, Object> result = searchInflectionPoint(res_node, fatherNode, res_node.getFather());//鍒嗗埆浼犲叆褰撳墠鑺傜偣銆佺埗鑺傜偣銆佷笅涓�鑺傜偣
+            //鍒ゆ柇褰撳墠鑺傜偣鏄惁涓烘嫄鐐�
+            if (Boolean.parseBoolean(result.get("result").toString())) {
+                //褰撳墠涓烘嫄鐐�
+                res_node.setIsInflectionPoint(true);
+                //鎷愮偣鏂瑰悜
+                res_node.setDirection(result.get("direction").toString());
+            }
+            list.add(res_node);
+
+            fatherNode = res_node;//鎶婂綋鍓嶈妭鐐逛繚瀛樻垚涓�涓埗鑺傜偣
+            res_node = res_node.getFather();//杩唬鎿嶄綔
+        }
+
+        Collections.reverse(list);
+
+        //灏嗘瘡涓妭鐐归噷闈㈢殑fatherNode鑷充负null(鏂逛究鍚庣画璁$畻鏃剁埗鑺傜偣杩囧瀵艰嚧鏄剧ず鐨勮妭鐐瑰お澶�)
+        for (NavigateNode navigateNode : list) {
+            //鐖惰妭鐐硅缃负null锛屼笉褰卞搷璁$畻缁撴灉锛屼笉褰卞搷鍚庣画鎿嶄綔銆�
+            //姝ゆ搷浣滀粎涓哄悗缁帓鏌ュ鐞嗘彁渚涜瑙夋柟渚裤��
+            navigateNode.setFather(null);
+        }
+
+        //璧峰鑺傜偣璁$畻鏂瑰悜
+        String direction = calcDirection(list.get(0), list.get(1));
+        NavigateNode startNode = list.get(0);
+        startNode.setDirection(direction);
+        //鏇存柊鑺傜偣鍒楄〃
+        list.set(0, startNode);
+        return list;
+    }
+
+    public List<NavigateNode> calcPython(String startPoint, String endPoint, Integer mapType, List<int[]> shuttlePoints, List<int[]> whites) {
+        //閫氳繃寮�濮嬬紪鍙峰拰缁撴潫缂栧彿鑾峰彇瀵瑰簲鐨剎y杞村潗鏍�
+        int[] startArr = NavigatePositionConvert.positionToXY(startPoint);//寮�濮嬭妭鐐�
+        int[] endArr = NavigatePositionConvert.positionToXY(endPoint);//缁撴潫鑺傜偣
+
+        ArrayList<int[]> whiteList = new ArrayList<>();//璁剧疆璁$畻鑺傜偣鐨勭櫧鍚嶅崟
+        whiteList.add(startArr);//灏嗗紑濮嬭妭鐐硅缃负鐧藉悕鍗曪紝浠ラ槻琚繃婊�
+        if (whites != null && !whites.isEmpty()) {
+            whiteList.addAll(whites);//鎵归噺娣诲姞鐧藉悕鍗曡妭鐐�
+        }
+
+        //鑾峰彇褰撳墠鑺傜偣璁$畻鐨勫眰楂橈紝骞惰祴鍊煎埌姣忎竴涓妭鐐逛腑
+        int lev = Utils.getLev(startPoint);
+        NavigateSolution solution = new NavigateSolution(mapType, 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]);
+        end.setNodeValue(map[endArr[0]][endArr[1]]);
+        //寮�濮嬭妭鐐癸紝涓嶇撼鍏ョ鐢ㄨ妭鐐瑰唴璁$畻
+
+        String pathStr = solution.astarSearchPython(start, end, pythonCalcPath);
         if (pathStr == null) {
             News.error("{} dash {} can't find navigate path!", startPoint, endPoint);
             return null;
@@ -272,8 +354,7 @@
      * 妫�娴嬭矾寰勬槸鍚﹀彲鐢�(鍙蛋)
      */
     public boolean checkPathIsAvailable(List<NavigateNode> path, Integer shuttleNo, Integer lev) {
-        NavigateSolution solution = new NavigateSolution(NavigationMapType.DFX.id, lev, null, Utils.getShuttlePoints(shuttleNo, lev));//鑾峰彇鏃犵櫧鍚嶅崟鍦板浘(璇ュ湴鍥惧寘鍚皬杞﹀潗鏍�)
-        int[][] map = solution.map;
+        int[][] map = navigateMapData.getDataFromRedis(lev, NavigationMapType.DFX.id, 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銆佸皬杞﹀彲璧拌緭閫佺珯
@@ -345,6 +426,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.DFX.id, 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