From 89a94a91bd97e1e47fba93c762b4e53a5830b760 Mon Sep 17 00:00:00 2001
From: gtsxc <3272660260@qq.com>
Date: 星期一, 19 五月 2025 19:44:51 +0800
Subject: [PATCH] #

---
 zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/utils/NavigateUtils.java |   74 +++++++++++++++++++++++++++++++++++++
 1 files changed, 74 insertions(+), 0 deletions(-)

diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/utils/NavigateUtils.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/utils/NavigateUtils.java
index 1013656..4d998c0 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/utils/NavigateUtils.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/utils/NavigateUtils.java
@@ -30,6 +30,80 @@
     @Value("${pythonCalcSimilarity}")
     private String pythonCalcSimilarity;
 
+    public List<NavigateNode> calcWhiteList(String startPoint, String endPoint, Integer mapType, List<int[]> shuttlePoints) {
+        //閫氳繃寮�濮嬬紪鍙峰拰缁撴潫缂栧彿鑾峰彇瀵瑰簲鐨剎y杞村潗鏍�
+        int[] startArr = NavigatePositionConvert.positionToXY(startPoint);//寮�濮嬭妭鐐�
+        int[] endArr = NavigatePositionConvert.positionToXY(endPoint);//缁撴潫鑺傜偣
+
+        ArrayList<int[]> whiteList = new ArrayList<>();//璁剧疆璁$畻鑺傜偣鐨勭櫧鍚嶅崟
+        whiteList.add(startArr);//灏嗗紑濮嬭妭鐐硅缃负鐧藉悕鍗曪紝浠ラ槻琚繃婊�
+        whiteList.add(endArr);//灏嗙粨鏉熻妭鐐硅缃负鐧藉悕鍗曪紝浠ラ槻琚繃婊�
+
+        //鑾峰彇褰撳墠鑺傜偣璁$畻鐨勫眰楂橈紝骞惰祴鍊煎埌姣忎竴涓妭鐐逛腑
+        int lev = Utils.getLev(startPoint);
+
+        //鍒濆鍖栧紑濮嬭妭鐐�
+        NavigateNode start = new NavigateNode(startArr[0], startArr[1]);
+        //寮�濮嬭妭鐐规棤鐖惰妭鐐�
+        start.setFather(null);
+
+        NavigateNode end = new NavigateNode(endArr[0], endArr[1]);
+        NavigateSolution solution = new NavigateSolution(mapType, lev, whiteList, shuttlePoints);
+        //寮�濮嬭妭鐐癸紝涓嶇撼鍏ョ鐢ㄨ妭鐐瑰唴璁$畻
+
+        String pathStr = solution.astarSearch(start, end, pythonCalcPath);
+        if (pathStr == null) {
+            News.error("{} dash {} can't find navigate path!", startPoint, endPoint);
+            return null;
+        }
+
+        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;//鎶婂綋鍓嶈妭鐐逛繚瀛樻垚涓�涓埗鑺傜偣
+        }
+
+        //灏嗘瘡涓妭鐐归噷闈㈢殑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> calc(String startPoint, String endPoint, Integer mapType, List<int[]> shuttlePoints) {
         //閫氳繃寮�濮嬬紪鍙峰拰缁撴潫缂栧彿鑾峰彇瀵瑰簲鐨剎y杞村潗鏍�
         int[] startArr = NavigatePositionConvert.positionToXY(startPoint);//寮�濮嬭妭鐐�

--
Gitblit v1.9.1