From f938ef3a31becc1d98dbee7e61f45afc92a127c4 Mon Sep 17 00:00:00 2001
From: Junjie <xjj@123>
Date: 星期二, 03 十二月 2024 15:19:03 +0800
Subject: [PATCH] #

---
 zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/utils/NavigateUtils.java |  106 +++++++++++++++++++++++++++++++++--------------------
 1 files changed, 66 insertions(+), 40 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 6792085..1cea3d1 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
@@ -1,10 +1,14 @@
 package com.zy.asrs.wcs.core.utils;
 
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
 import com.zy.asrs.framework.common.SpringUtils;
 import com.zy.asrs.wcs.core.model.MapNode;
 import com.zy.asrs.wcs.core.model.NavigateNode;
 import com.zy.asrs.wcs.core.model.enums.MapNodeType;
 import com.zy.asrs.wcs.core.model.enums.NavigationMapType;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
 
 import java.util.ArrayList;
 import java.util.Collections;
@@ -14,9 +18,13 @@
 /**
  * A*绠楁硶浣跨敤宸ュ叿
  */
+@Component
 public class NavigateUtils {
 
-    public static List<NavigateNode> calc(String startPoint, String endPoint, Integer mapType, List<int[]> shuttlePoints) {
+    @Value("${pythonCalcPath}")
+    private String pythonCalcPath;
+
+    public List<NavigateNode> calc(String startPoint, String endPoint, Integer mapType, List<int[]> shuttlePoints) {
         //閫氳繃寮�濮嬬紪鍙峰拰缁撴潫缂栧彿鑾峰彇瀵瑰簲鐨剎y杞村潗鏍�
         int[] startArr = NavigatePositionConvert.positionToXY(startPoint);//寮�濮嬭妭鐐�
         int[] endArr = NavigatePositionConvert.positionToXY(endPoint);//缁撴潫鑺傜偣
@@ -36,36 +44,42 @@
         NavigateSolution solution = new NavigateSolution(mapType, lev, whiteList, shuttlePoints);
         //寮�濮嬭妭鐐癸紝涓嶇撼鍏ョ鐢ㄨ妭鐐瑰唴璁$畻
 
-        NavigateNode res_node = solution.astarSearch(start, end);
-        if (res_node == null) {
+        String pathStr = solution.astarSearch(start, end, pythonCalcPath);
+        if (pathStr == null) {
             System.err.println("鏈壘鍒拌矾寰�");
             return null;
         }
-        ArrayList<NavigateNode> list = new ArrayList<>();
 
-        //娓叉煋
+        List<NavigateNode> list = new ArrayList<>();
+
         NavigateNode fatherNode = null;//褰撳墠寰幆涓婁竴鑺傜偣锛岀敤浜庢嫄鐐硅绠�
-        while (res_node != null) {
-            res_node.setDirection(null);
-            res_node.setIsInflectionPoint(false);
-            res_node.setZ(lev);//璁剧疆灞傞珮
+        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(res_node, fatherNode, res_node.getFather());//鍒嗗埆浼犲叆褰撳墠鑺傜偣銆佺埗鑺傜偣銆佷笅涓�鑺傜偣
+            HashMap<String, Object> result = searchInflectionPoint(node, fatherNode, nextNode);//鍒嗗埆浼犲叆褰撳墠鑺傜偣銆佺埗鑺傜偣銆佷笅涓�鑺傜偣
             //鍒ゆ柇褰撳墠鑺傜偣鏄惁涓烘嫄鐐�
             if (Boolean.parseBoolean(result.get("result").toString())) {
                 //褰撳墠涓烘嫄鐐�
-                res_node.setIsInflectionPoint(true);
+                node.setIsInflectionPoint(true);
                 //鎷愮偣鏂瑰悜
-                res_node.setDirection(result.get("direction").toString());
+                node.setDirection(result.get("direction").toString());
             }
-            list.add(res_node);
 
-            fatherNode = res_node;//鎶婂綋鍓嶈妭鐐逛繚瀛樻垚涓�涓埗鑺傜偣
-            res_node = res_node.getFather();//杩唬鎿嶄綔
+            list.add(node);
+
+            fatherNode = node;//鎶婂綋鍓嶈妭鐐逛繚瀛樻垚涓�涓埗鑺傜偣
         }
-
-        Collections.reverse(list);
 
         //灏嗘瘡涓妭鐐归噷闈㈢殑fatherNode鑷充负null(鏂逛究鍚庣画璁$畻鏃剁埗鑺傜偣杩囧瀵艰嚧鏄剧ず鐨勮妭鐐瑰お澶�)
         for (NavigateNode navigateNode : list) {
@@ -84,7 +98,7 @@
     }
 
     //鍒ゆ柇褰撳墠鑺傜偣鍒颁笅涓�涓妭鐐规槸鍚︿负鎷愮偣
-    public static HashMap<String,Object> searchInflectionPoint(NavigateNode currentNode, NavigateNode fatherNode, NavigateNode nextNode) {
+    public HashMap<String,Object> searchInflectionPoint(NavigateNode currentNode, NavigateNode fatherNode, NavigateNode nextNode) {
         HashMap<String, Object> map = new HashMap<>();
         map.put("result", false);//鏄惁涓烘嫄鐐癸紝true锛氭嫄鐐癸紝false锛氱洿绾�
         // 绗竴涓偣鎴栫洿绾跨偣
@@ -103,7 +117,7 @@
     /**
      * 璁$畻鏂瑰悜
      */
-    public static String calcDirection(NavigateNode currentNode, NavigateNode fatherNode) {
+    public String calcDirection(NavigateNode currentNode, NavigateNode fatherNode) {
         //鎷愮偣鏂瑰悜
         String direction = "";
         // 鏅�氭嫄鐐�
@@ -139,7 +153,7 @@
      * 鍔犺浆寮妭鐐�
      * 鑾峰彇鍒嗘璺緞锛屾瘡褰撴湁涓�涓嫄鐐瑰垯杩涜涓�娆″垎娈碉紝鏈�缁堣繑鍥炴�诲垎娈垫暟鎹�
      */
-    public static ArrayList<ArrayList<NavigateNode>> getSectionPath(List<NavigateNode> mapList) {
+    public ArrayList<ArrayList<NavigateNode>> getSectionPath(List<NavigateNode> mapList) {
         ArrayList<ArrayList<NavigateNode>> list = new ArrayList<>();
 
         ArrayList<NavigateNode> data = new ArrayList<>();
@@ -169,7 +183,7 @@
     }
 
     //鑾峰彇浠巟鐐瑰埌涓嬩竴鐐圭殑琛岃蛋璺濈
-    public static Integer getXToNextDistance(NavigateNode xNode) {
+    public Integer getXToNextDistance(NavigateNode xNode) {
         NavigateMapData mapData = SpringUtils.getBean(NavigateMapData.class);
         mapData.setLev(xNode.getZ());
         List<List<MapNode>> lists = mapData.getJsonData(NavigationMapType.NONE.id, null, null);
@@ -195,11 +209,11 @@
     /**
      * 鏍规嵁鍘熷鑺傜偣缁撴灉锛岃绠楁�昏璧拌窛绂�
      */
-    public static Integer getOriginPathAllDistance(List<NavigateNode> path) {
-        ArrayList<ArrayList<NavigateNode>> sectionPath = NavigateUtils.getSectionPath(path);
+    public Integer getOriginPathAllDistance(List<NavigateNode> path) {
+        ArrayList<ArrayList<NavigateNode>> sectionPath = getSectionPath(path);
         Integer allDistance = 0;
         for (ArrayList<NavigateNode> navigateNodes : sectionPath) {
-            Integer distance = NavigateUtils.getCurrentPathAllDistance(navigateNodes);
+            Integer distance = getCurrentPathAllDistance(navigateNodes);
             allDistance += distance;
         }
         return allDistance;
@@ -208,7 +222,7 @@
     /**
      * 鑾峰彇褰撳墠璺緞鎬昏璧拌窛绂�
      */
-    public static Integer getCurrentPathAllDistance(List<NavigateNode> path) {
+    public Integer getCurrentPathAllDistance(List<NavigateNode> path) {
         if (path.size() == 1) {
             //璺緞鍙湁涓�鏉℃暟鎹紝鍒欑洿鎺ヨ繑鍥炶璧拌窛绂�
             return path.get(0).getMoveDistance();
@@ -225,7 +239,7 @@
     /**
      * 鑾峰彇涓棿鐐瑰埌鐩爣鐐硅璧拌窛绂�
      */
-    public static Integer getMiddleToDistDistance(List<NavigateNode> path, NavigateNode middlePath) {
+    public Integer getMiddleToDistDistance(List<NavigateNode> path, NavigateNode middlePath) {
         //鏈�鍚庝竴鏉¤妭鐐逛笉璁$畻杩涜璧拌窛绂�
         NavigateNode lastPath = path.get(path.size() - 1);
         //鎬昏窛绂�
@@ -250,7 +264,7 @@
     /**
      * 妫�娴嬭矾寰勬槸鍚﹀彲鐢�(鍙蛋)
      */
-    public static boolean checkPathIsAvailable(List<NavigateNode> path, Integer shuttleNo, Integer lev) {
+    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;
         for (NavigateNode node : path) {
@@ -262,20 +276,32 @@
         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);
-        }
+    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 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);
+//        }
+//
+//    }
+
 }

--
Gitblit v1.9.1