From 4e005e4936039fca16bfd1679942daa416a21986 Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期四, 20 十一月 2025 14:27:47 +0800
Subject: [PATCH] #

---
 src/main/java/com/zy/common/utils/NavigateUtils.java |  530 ++++++++--------------------------------------------------
 1 files changed, 72 insertions(+), 458 deletions(-)

diff --git a/src/main/java/com/zy/common/utils/NavigateUtils.java b/src/main/java/com/zy/common/utils/NavigateUtils.java
index 4074614..e324def 100644
--- a/src/main/java/com/zy/common/utils/NavigateUtils.java
+++ b/src/main/java/com/zy/common/utils/NavigateUtils.java
@@ -1,98 +1,51 @@
 package com.zy.common.utils;
 
-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;
-import com.zy.common.model.enums.NavigationMapType;
-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 java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.List;
 import org.springframework.stereotype.Component;
 
-import java.io.BufferedReader;
-import java.io.InputStreamReader;
-import java.util.*;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.core.exception.CoolException;
+import com.zy.common.model.NavigateNode;
 
-/**
- * A*绠楁硶浣跨敤宸ュ叿
- */
 @Component
 public class NavigateUtils {
 
-    @Value("${pythonCalcPath}")
-    private String pythonCalcPath;
-    @Value("${pythonCalcSimilarity}")
-    private String pythonCalcSimilarity;
-    @Autowired
-    private NavigateMapData navigateMapData;
+    public synchronized List<NavigateNode> calcByStationId(Integer startStationId, Integer endStationId) {
+        NavigateSolution navigateSolution = new NavigateSolution();
+        List<List<NavigateNode>> stationMap = navigateSolution.getStationMap();
 
-    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);//缁撴潫鑺傜偣
-
-        ArrayList<int[]> whiteList = new ArrayList<>();//璁剧疆璁$畻鑺傜偣鐨勭櫧鍚嶅崟
-        whiteList.add(startArr);//灏嗗紑濮嬭妭鐐硅缃负鐧藉悕鍗曪紝浠ラ槻琚繃婊�
-        if (whites != null && !whites.isEmpty()) {
-            whiteList.addAll(whites);//鎵归噺娣诲姞鐧藉悕鍗曡妭鐐�
+        NavigateNode startNode = navigateSolution.findStationNavigateNode(stationMap, startStationId);
+        if (startNode == null){
+            throw new CoolException("鏈壘鍒拌 璧风偣 瀵瑰簲鐨勮妭鐐�");
         }
 
-        //鑾峰彇褰撳墠鑺傜偣璁$畻鐨勫眰楂橈紝骞惰祴鍊煎埌姣忎竴涓妭鐐逛腑
-        int lev = Utils.getLev(startPoint);
-        NavigateSolution solution = new NavigateSolution(mapType, lev, whiteList, shuttlePoints);
-        int[][] map = solution.map;
+        NavigateNode endNode = navigateSolution.findStationNavigateNode(stationMap, endStationId);
+        if (endNode == null){
+            throw new CoolException("鏈壘鍒拌 缁堢偣 瀵瑰簲鐨勮妭鐐�");
+        }
 
-        //鍒濆鍖栧紑濮嬭妭鐐�
-        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]);
-        end.setNodeValue(map[endArr[0]][endArr[1]]);
-        //寮�濮嬭妭鐐癸紝涓嶇撼鍏ョ鐢ㄨ妭鐐瑰唴璁$畻
-
-        NavigateNode res_node = solution.astarSearchJava(start, end);
+        NavigateNode res_node = navigateSolution.astarSearchJava(stationMap, startNode, endNode);
         if (res_node == null) {
-            News.error("{} dash {} can't find navigate path!", startPoint, endPoint);
-            return null;
+            throw new CoolException("鏈壘鍒拌璺緞");
         }
 
         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());
-            }
+        // 浣跨敤 visited 闆嗗悎闃叉鐖堕摼鍑虹幇鐜鑷存寰幆锛屽悓鏃惰缃畨鍏ㄦ鏁颁笂闄�
+        HashSet<NavigateNode> visited = new HashSet<>();
+        int maxSteps = stationMap.size() * stationMap.get(0).size() + 5; // 瀹夊叏涓婇檺
+        int steps = 0;
+        while (res_node != null && visited.add(res_node) && steps++ < maxSteps) {
             list.add(res_node);
-
-            fatherNode = res_node;//鎶婂綋鍓嶈妭鐐逛繚瀛樻垚涓�涓埗鑺傜偣
             res_node = res_node.getFather();//杩唬鎿嶄綔
         }
-
+        if (steps >= maxSteps) {
+            throw new CoolException("璺緞鍥炴函瓒呭嚭瀹夊叏涓婇檺锛岀枒浼煎瓨鍦ㄧ埗閾惧惊鐜�");
+        }
         Collections.reverse(list);
-
         //灏嗘瘡涓妭鐐归噷闈㈢殑fatherNode鑷充负null(鏂逛究鍚庣画璁$畻鏃剁埗鑺傜偣杩囧瀵艰嚧鏄剧ず鐨勮妭鐐瑰お澶�)
         for (NavigateNode navigateNode : list) {
             //鐖惰妭鐐硅缃负null锛屼笉褰卞搷璁$畻缁撴灉锛屼笉褰卞搷鍚庣画鎿嶄綔銆�
@@ -100,78 +53,51 @@
             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;
+        //鍘婚噸
+        HashSet<Integer> set = new HashSet<>();
+        List<NavigateNode> fitlerList = new ArrayList<>();
+        for(NavigateNode navigateNode : list){
+            JSONObject valuObject = JSON.parseObject(navigateNode.getNodeValue());
+            if(set.add(valuObject.getInteger("stationId"))){
+                fitlerList.add(navigateNode);
+            }
+        }
+
+        return fitlerList;
     }
 
-    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);//缁撴潫鑺傜偣
+    public synchronized List<NavigateNode> calcByTrackSiteNo(Integer startTrackSiteNo, Integer endTrackSiteNo) {
+        NavigateSolution navigateSolution = new NavigateSolution();
+        List<List<NavigateNode>> rgvTrackMap = navigateSolution.getRgvTrackMap();
 
-        ArrayList<int[]> whiteList = new ArrayList<>();//璁剧疆璁$畻鑺傜偣鐨勭櫧鍚嶅崟
-        whiteList.add(startArr);//灏嗗紑濮嬭妭鐐硅缃负鐧藉悕鍗曪紝浠ラ槻琚繃婊�
-        if (whites != null && !whites.isEmpty()) {
-            whiteList.addAll(whites);//鎵归噺娣诲姞鐧藉悕鍗曡妭鐐�
+        NavigateNode startNode = navigateSolution.findTrackSiteNoNavigateNode(rgvTrackMap, startTrackSiteNo);
+        if (startNode == null){
+            throw new CoolException("鏈壘鍒拌 璧风偣 瀵瑰簲鐨勮妭鐐�");
         }
 
-        //鑾峰彇褰撳墠鑺傜偣璁$畻鐨勫眰楂橈紝骞惰祴鍊煎埌姣忎竴涓妭鐐逛腑
-        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;
+        NavigateNode endNode = navigateSolution.findTrackSiteNoNavigateNode(rgvTrackMap, endTrackSiteNo);
+        if (endNode == null){
+            throw new CoolException("鏈壘鍒拌 缁堢偣 瀵瑰簲鐨勮妭鐐�");
         }
 
-        List<NavigateNode> list = new ArrayList<>();
-
-        NavigateNode fatherNode = null;//褰撳墠寰幆涓婁竴鑺傜偣锛岀敤浜庢嫄鐐硅绠�
-        JSONArray rows = JSON.parseArray(pathStr);
-
-        for (int i = 0; i < rows.size(); i++) {
-            Object currentObj = rows.get(i);
-
-            NavigateNode nextNode = null;
-            if ((i + 1) < rows.size()) {
-                Object object = rows.get(i + 1);
-                nextNode = pythonObjTransferNode(object, lev);
-            }
-
-            NavigateNode node = pythonObjTransferNode(currentObj, lev);
-
-            //瀵绘壘鎷愮偣
-            HashMap<String, Object> result = searchInflectionPoint(node, fatherNode, nextNode);//鍒嗗埆浼犲叆褰撳墠鑺傜偣銆佺埗鑺傜偣銆佷笅涓�鑺傜偣
-            //鍒ゆ柇褰撳墠鑺傜偣鏄惁涓烘嫄鐐�
-            if (Boolean.parseBoolean(result.get("result").toString())) {
-                //褰撳墠涓烘嫄鐐�
-                node.setIsInflectionPoint(true);
-                //鎷愮偣鏂瑰悜
-                node.setDirection(result.get("direction").toString());
-            }
-
-            list.add(node);
-
-            fatherNode = node;//鎶婂綋鍓嶈妭鐐逛繚瀛樻垚涓�涓埗鑺傜偣
+        NavigateNode res_node = navigateSolution.astarSearchJava(rgvTrackMap, startNode, endNode);
+        if (res_node == null) {
+            throw new CoolException("鏈壘鍒拌璺緞");
         }
 
+        ArrayList<NavigateNode> list = new ArrayList<>();
+        // 浣跨敤 visited 闆嗗悎闃叉鐖堕摼鍑虹幇鐜鑷存寰幆锛屽悓鏃惰缃畨鍏ㄦ鏁颁笂闄�
+        HashSet<NavigateNode> visited = new HashSet<>();
+        int maxSteps = rgvTrackMap.size() * rgvTrackMap.get(0).size() + 5; // 瀹夊叏涓婇檺
+        int steps = 0;
+        while (res_node != null && visited.add(res_node) && steps++ < maxSteps) {
+            list.add(res_node);
+            res_node = res_node.getFather();//杩唬鎿嶄綔
+        }
+        if (steps >= maxSteps) {
+            throw new CoolException("璺緞鍥炴函瓒呭嚭瀹夊叏涓婇檺锛岀枒浼煎瓨鍦ㄧ埗閾惧惊鐜�");
+        }
+        Collections.reverse(list);
         //灏嗘瘡涓妭鐐归噷闈㈢殑fatherNode鑷充负null(鏂逛究鍚庣画璁$畻鏃剁埗鑺傜偣杩囧瀵艰嚧鏄剧ず鐨勮妭鐐瑰お澶�)
         for (NavigateNode navigateNode : list) {
             //鐖惰妭鐐硅缃负null锛屼笉褰卞搷璁$畻缁撴灉锛屼笉褰卞搷鍚庣画鎿嶄綔銆�
@@ -179,329 +105,17 @@
             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 ArrayList<ArrayList<NavigateNode>> calcEndPath(String startPoint, String endPoint, Integer mapType, List<int[]> shuttlePoints, List<int[]> whites, int lastPathPart) {
-        //璁$畻璺緞
-        List<NavigateNode> navigateNodes = calc(startPoint, endPoint, mapType, 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, Integer mapType, List<int[]> shuttlePoints, List<int[]> whites, int lastPathPart) {
-        ArrayList<ArrayList<NavigateNode>> endPath = calcEndPath(startPoint, endPoint, mapType, 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(nodes.size() - 1);
-        String locNo = NavigatePositionConvert.nodeToLocNo(targetNode);
-        return locNo;
-    }
-
-    //鍒ゆ柇褰撳墠鑺傜偣鍒颁笅涓�涓妭鐐规槸鍚︿负鎷愮偣
-    public HashMap<String,Object> searchInflectionPoint(NavigateNode currentNode, NavigateNode fatherNode, NavigateNode nextNode) {
-        HashMap<String, Object> map = new HashMap<>();
-        map.put("result", false);//鏄惁涓烘嫄鐐癸紝true锛氭嫄鐐癸紝false锛氱洿绾�
-        // 绗竴涓偣鎴栫洿绾跨偣
-        if (fatherNode == null || nextNode == null || nextNode.getX() == fatherNode.getX() || nextNode.getY() == fatherNode.getY()) {
-            return map;//涓嶆槸鎷愮偣鐩存帴杩斿洖
-        }
-
-        //鎷愮偣鏂瑰悜
-        String direction = calcDirection(currentNode, fatherNode);
-
-        map.put("result", true);//鎷愮偣
-        map.put("direction", direction);//鎷愮偣鏂瑰悜锛堜粠褰撳墠鑺傜偣瑙嗚鐪嬬殑鏂瑰悜锛�
-        return map;
-    }
-
-    /**
-     * 璁$畻鏂瑰悜
-     */
-    public String calcDirection(NavigateNode currentNode, NavigateNode fatherNode) {
-        //鎷愮偣鏂瑰悜
-        String direction = "";
-        // 鏅�氭嫄鐐�
-        //璁$畻鎷愮偣鏂瑰悜
-        if (fatherNode.getX() != currentNode.getX()) {
-            //x杞存暟鎹湁宸紓锛屽垽鏂瓁杞存柟鍚�
-            //褰撳墠鑺傜偣X - 鐖惰妭鐐筙
-            if (currentNode.getX() - fatherNode.getX() > 0) {
-                //澶т簬0锛屾柟鍚憈op
-                direction = "top";
-            }else {
-                //灏忎簬0锛屾柟鍚慴ottom
-                direction = "bottom";
+        //鍘婚噸
+        HashSet<Integer> set = new HashSet<>();
+        List<NavigateNode> fitlerList = new ArrayList<>();
+        for(NavigateNode navigateNode : list){
+            JSONObject valuObject = JSON.parseObject(navigateNode.getNodeValue());
+            if(set.add(valuObject.getInteger("trackSiteNo"))){
+                fitlerList.add(navigateNode);
             }
         }
 
-        if (fatherNode.getY() != currentNode.getY()) {
-            //y杞存暟鎹湁宸紓锛屽垽鏂瓂杞存柟鍚�
-            //褰撳墠鑺傜偣Y - 鐖惰妭鐐筜
-            if (currentNode.getY() - fatherNode.getY() > 0) {
-                //澶т簬0锛屾柟鍚憀eft
-                direction = "left";
-            }else {
-                //灏忎簬0锛屾柟鍚憆ight
-                direction = "right";
-            }
-        }
-
-        return direction;
-    }
-
-    /**
-     * 鍔犺浆寮妭鐐�
-     * 鑾峰彇鍒嗘璺緞锛屾瘡褰撴湁涓�涓嫄鐐瑰垯杩涜涓�娆″垎娈碉紝鏈�缁堣繑鍥炴�诲垎娈垫暟鎹�
-     */
-    public ArrayList<ArrayList<NavigateNode>> getSectionPath(List<NavigateNode> mapList) {
-        ArrayList<ArrayList<NavigateNode>> list = new ArrayList<>();
-
-        ArrayList<NavigateNode> data = new ArrayList<>();
-        String direction = mapList.get(0).getDirection();//琛岃蛋鏂瑰悜
-
-        for (NavigateNode navigateNode : mapList) {
-            data.add(navigateNode);
-            //鎷愮偣
-            if (navigateNode.getIsInflectionPoint()) {
-                //鍒嗗壊鏁版嵁
-                list.add(data);//娣诲姞鏌愪竴娈垫暟鎹�
-                direction = navigateNode.getDirection();//鏇存柊琛岃蛋鏂瑰悜
-                data = new ArrayList<>();
-                data.add(navigateNode);//灏嗘嫄鐐圭殑缁堢偣锛屾洿鏂版垚涓嬩竴娈靛懡浠ょ殑璧风偣鍧愭爣
-            } else {
-                //鐩磋绾胯矾
-                navigateNode.setDirection(direction);//璁剧疆琛岃蛋鏂瑰悜
-            }
-            Integer distance = getXToNextDistance(navigateNode);//鑾峰彇褰撳墠鐐瑰埌涓嬩竴鐐圭殑琛岃蛋璺濈
-            navigateNode.setMoveDistance(distance);
-        }
-
-        //灏嗘渶鍚庝竴娈垫暟鎹坊鍔犺繘鍏�
-        list.add(data);
-
-        return list;
-    }
-
-    //鑾峰彇浠巟鐐瑰埌涓嬩竴鐐圭殑琛岃蛋璺濈
-    public Integer getXToNextDistance(NavigateNode xNode) {
-        NavigateMapData mapData = SpringUtils.getBean(NavigateMapData.class);
-        List<List<MapNode>> lists = mapData.getJsonData(xNode.getZ(), NavigationMapType.NONE.id, null, null);
-        if (lists != null) {
-            MapNode mapNode = lists.get(xNode.getX()).get(xNode.getY());
-            if (mapNode != null) {
-                switch (xNode.getDirection()) {
-                    case "top":
-                        return mapNode.getTop();
-                    case "bottom":
-                        return mapNode.getBottom();
-                    case "left":
-                        return mapNode.getLeft();
-                    case "right":
-                        return mapNode.getRight();
-                }
-            }
-            return 0;
-        }
-        return 0;
-    }
-
-    /**
-     * 鏍规嵁鍘熷鑺傜偣缁撴灉锛岃绠楁�昏璧拌窛绂�
-     */
-    public Integer getOriginPathAllDistance(List<NavigateNode> path) {
-        ArrayList<ArrayList<NavigateNode>> sectionPath = getSectionPath(path);
-        Integer allDistance = 0;
-        for (ArrayList<NavigateNode> navigateNodes : sectionPath) {
-            Integer distance = getCurrentPathAllDistance(navigateNodes);
-            allDistance += distance;
-        }
-        return allDistance;
-    }
-
-    /**
-     * 鑾峰彇褰撳墠璺緞鎬昏璧拌窛绂�
-     */
-    public Integer getCurrentPathAllDistance(List<NavigateNode> path) {
-        if (path.size() == 1) {
-            //璺緞鍙湁涓�鏉℃暟鎹紝鍒欑洿鎺ヨ繑鍥炶璧拌窛绂�
-            return path.get(0).getMoveDistance();
-        }
-
-        //鎬昏窛绂�
-        int allDistance = 0;
-        for (int i = 0; i < path.size() - 1; i++) {//璺緞涓渶鍚庝竴涓妭鐐逛笉缁熻鍒版�昏窛绂伙紝鏈�鍚庝竴涓妭鐐瑰苟涓嶄細鍐嶈璧�
-            allDistance += path.get(i).getMoveDistance();
-        }
-        return allDistance;
-    }
-
-    /**
-     * 鑾峰彇涓棿鐐瑰埌鐩爣鐐硅璧拌窛绂�
-     */
-    public Integer getMiddleToDistDistance(List<NavigateNode> path, NavigateNode middlePath) {
-        //鏈�鍚庝竴鏉¤妭鐐逛笉璁$畻杩涜璧拌窛绂�
-        NavigateNode lastPath = path.get(path.size() - 1);
-        //鎬昏窛绂�
-        int allDistance = 0;
-        boolean flag = false;
-        for (NavigateNode navigateNode : path) {
-            if (!flag && navigateNode.equals(middlePath)) {
-                flag = true;
-            }
-
-            if (navigateNode.equals(lastPath)) {
-                continue;//鏈�鍚庝竴鏉¤妭鐐逛笉璁$畻杩涜璧拌窛绂�
-            }
-
-            if (flag) {
-                allDistance += navigateNode.getMoveDistance();
-            }
-        }
-        return allDistance;
-    }
-
-    /**
-     * 妫�娴嬭矾寰勬槸鍚﹀彲鐢�(鍙蛋)
-     */
-    public boolean checkPathIsAvailable(List<NavigateNode> path, Integer shuttleNo, Integer lev) {
-        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銆佸皬杞﹀彲璧拌緭閫佺珯
-                return false;
-            }
-        }
-        return true;
-    }
-
-    private NavigateNode pythonObjTransferNode(Object obj, Integer z) {
-        List<Integer> pathData = JSON.parseArray(obj.toString(), Integer.class);
-        Integer x = pathData.get(0);
-        Integer y = pathData.get(1);
-
-        NavigateNode node = new NavigateNode(x, y);
-        node.setDirection(null);
-        node.setIsInflectionPoint(false);
-        node.setZ(z);
-        return node;
-    }
-
-    public Double similarityPath(List<NavigateNode> firstPath, List<NavigateNode> secondPath) {
-        try {
-            List<int[]> first = new ArrayList<>();
-            for (NavigateNode node : firstPath) {
-                first.add(new int[]{node.getX(), node.getY()});
-            }
-
-            List<int[]> second = new ArrayList<>();
-            for (NavigateNode node : secondPath) {
-                second.add(new int[]{node.getX(), node.getY()});
-            }
-
-            ProcessBuilder processBuilder = new ProcessBuilder("python", pythonCalcSimilarity, JSON.toJSONString(first), JSON.toJSONString(second));
-            processBuilder.redirectErrorStream(true);
-
-            Process process = processBuilder.start();
-
-            // 璇诲彇Python鑴氭湰鐨勮緭鍑�
-            BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
-            String line;
-            StringBuilder builder = new StringBuilder();
-            while ((line = reader.readLine()) != null) {
-                builder.append(line);
-            }
-
-            // 绛夊緟Python鑴氭湰鎵ц瀹屾垚
-            int exitCode = process.waitFor();
-            if (exitCode != 0) {
-                System.out.println("Python script exited with error code: " + exitCode);
-                return null;
-            }
-            reader.close();
-
-            if (builder.length() <= 0) {
-                return null;
-            }
-
-            PythonSimilarityResult result = JSON.parseObject(builder.toString(), PythonSimilarityResult.class);
-            if (result.getCalcResult() != 200) {
-                return 0D;
-            }
-
-            Double similarity = result.getSimilarity();
-            return similarity;
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-        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);
-//        System.out.println(calc);
-//        System.out.println("------------------------");
-////        List<NavigateNode> calc = calc("0501401", "0201801", "out");
-//        //灏嗚矾寰勫垎鍓叉垚澶氭
-//        ArrayList<ArrayList<NavigateNode>> data = getSectionPath(calc);
-//        for (ArrayList<NavigateNode> list : data) {
-//            Integer currentPathAllDistance = getCurrentPathAllDistance(list);//璁$畻褰撳墠璺緞鎬昏窛绂�
-//            System.out.println(currentPathAllDistance);
-//            System.out.println(list);
-//        }
-
-        System.loadLibrary("example");
-
+        return fitlerList;
     }
 
 }

--
Gitblit v1.9.1