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/NavigateSolution.java               |  113 ++++++++++++++++------
 zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/utils/NavigateUtils.java                  |  106 +++++++++++++--------
 zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/model/PythonResult.java                   |   18 +++
 zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/utils/ShuttleDispatcher.java              |   18 ++-
 zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/command/ShuttleCommandService.java |   14 +-
 zy-asrs-wcs/src/main/resources/application.yml                                           |    4 
 zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/utils/LiftDispatcher.java                 |    6 
 7 files changed, 190 insertions(+), 89 deletions(-)

diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/command/ShuttleCommandService.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/command/ShuttleCommandService.java
index 0854719..b58abda 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/command/ShuttleCommandService.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/command/ShuttleCommandService.java
@@ -63,6 +63,8 @@
     private BasConveyorStaService basConveyorStaService;
     @Autowired
     private ShuttleDispatcher shuttleDispatcher;
+    @Autowired
+    private NavigateUtils navigateUtils;
 
     // 璁$畻
     public Boolean accept(Motion motion) {
@@ -519,7 +521,7 @@
         //鑾峰彇灏忚溅绉诲姩閫熷害
         Integer runSpeed = Optional.ofNullable(basShuttleService.getOne(new LambdaQueryWrapper<BasShuttle>().eq(BasShuttle::getDeviceId, assignCommand.getDeviceId())).getRunSpeed()).orElse(1000);
         Long hostId = shuttleThread.getDevice().getHostId();
-        List<NavigateNode> nodeList = NavigateUtils.calc(startLocNo, endLocNo, mapType, Utils.getShuttlePoints(Integer.parseInt(shuttleThread.getDevice().getDeviceNo()), Utils.getLev(startLocNo)));
+        List<NavigateNode> nodeList = navigateUtils.calc(startLocNo, endLocNo, mapType, Utils.getShuttlePoints(Integer.parseInt(shuttleThread.getDevice().getDeviceNo()), Utils.getLev(startLocNo)));
         if (nodeList == null) {
             News.error("{} dash {} can't find navigate path!", startLocNo, endLocNo);
             return null;
@@ -532,7 +534,7 @@
 
         List<ShuttleCommand> commands = new ArrayList<>();
         //鑾峰彇鍒嗘璺緞
-        ArrayList<ArrayList<NavigateNode>> data = NavigateUtils.getSectionPath(nodeList);
+        ArrayList<ArrayList<NavigateNode>> data = navigateUtils.getSectionPath(nodeList);
         //灏嗘瘡涓�娈佃矾寰勫垎鎴恈ommand鎸囦护
         for (ArrayList<NavigateNode> nodes : data) {
             //寮�濮嬭矾寰�
@@ -540,7 +542,7 @@
 
             //鐩爣璺緞
             NavigateNode endPath = nodes.get(nodes.size() - 1);
-            Integer allDistance = NavigateUtils.getCurrentPathAllDistance(nodes);//璁$畻褰撳墠璺緞琛岃蛋鎬昏窛绂�
+            Integer allDistance = navigateUtils.getCurrentPathAllDistance(nodes);//璁$畻褰撳墠璺緞琛岃蛋鎬昏窛绂�
             //閫氳繃xy鍧愭爣灏忚溅浜岀淮鐮�
             String startCodeNum = NavigatePositionConvert.xyToPosition(startPath.getX(), startPath.getY(), startPath.getZ(), hostId);
             //閫氳繃xy鍧愭爣灏忚溅浜岀淮鐮�
@@ -575,7 +577,7 @@
         //鑾峰彇灏忚溅绉诲姩閫熷害
         Integer runSpeed = Optional.ofNullable(basShuttleService.getOne(new LambdaQueryWrapper<BasShuttle>().eq(BasShuttle::getDeviceId, assignCommand.getDeviceId())).getRunSpeed()).orElse(1000);
         Long hostId = shuttleThread.getDevice().getHostId();
-        List<NavigateNode> nodeList = NavigateUtils.calc(startLocNo, endLocNo, mapType, Utils.getShuttlePoints(Integer.parseInt(shuttleThread.getDevice().getDeviceNo()), Utils.getLev(startLocNo)));
+        List<NavigateNode> nodeList = navigateUtils.calc(startLocNo, endLocNo, mapType, Utils.getShuttlePoints(Integer.parseInt(shuttleThread.getDevice().getDeviceNo()), Utils.getLev(startLocNo)));
         if (nodeList == null) {
             News.error("{} dash {} can't find navigate path!", startLocNo, endLocNo);
             return null;
@@ -588,7 +590,7 @@
 
         List<ShuttleCommand> commands = new ArrayList<>();
         //鑾峰彇鍒嗘璺緞
-        ArrayList<ArrayList<NavigateNode>> data = NavigateUtils.getSectionPath(nodeList);
+        ArrayList<ArrayList<NavigateNode>> data = navigateUtils.getSectionPath(nodeList);
         //灏嗘瘡涓�娈佃矾寰勫垎鎴恈ommand鎸囦护
         for (ArrayList<NavigateNode> nodes : data) {
             //寮�濮嬭矾寰�
@@ -596,7 +598,7 @@
 
             //鐩爣璺緞
             NavigateNode endPath = nodes.get(nodes.size() - 1);
-            Integer allDistance = NavigateUtils.getCurrentPathAllDistance(nodes);//璁$畻褰撳墠璺緞琛岃蛋鎬昏窛绂�
+            Integer allDistance = navigateUtils.getCurrentPathAllDistance(nodes);//璁$畻褰撳墠璺緞琛岃蛋鎬昏窛绂�
             //閫氳繃xy鍧愭爣灏忚溅浜岀淮鐮�
             String startCodeNum = NavigatePositionConvert.xyToPosition(startPath.getX(), startPath.getY(), startPath.getZ(), hostId);
             //閫氳繃xy鍧愭爣灏忚溅浜岀淮鐮�
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/model/PythonResult.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/model/PythonResult.java
new file mode 100644
index 0000000..e0abb76
--- /dev/null
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/model/PythonResult.java
@@ -0,0 +1,18 @@
+package com.zy.asrs.wcs.core.model;
+
+import lombok.Data;
+
+@Data
+public class PythonResult {
+
+    private String start;
+
+    private String target;
+
+    private String path;
+
+    private Double time;
+
+    private Integer calcResult;
+
+}
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/utils/LiftDispatcher.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/utils/LiftDispatcher.java
index 28df8f4..50f9538 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/utils/LiftDispatcher.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/utils/LiftDispatcher.java
@@ -34,6 +34,8 @@
     private BasLiftService basLiftService;
     @Autowired
     private ShuttleStandbyService shuttleStandbyService;
+    @Autowired
+    private NavigateUtils navigateUtils;
 
     /**
      * 鏍规嵁鐩爣浣嶇疆鎼滅储绌洪棽鎻愬崌鏈�
@@ -80,11 +82,11 @@
             }
 
             String liftLocNo = Utils.getLocNo(Utils.getRow(standby.getDeviceStandbyLoc()), Utils.getBay(standby.getDeviceStandbyLoc()), Utils.getLev(locNo));
-            List<NavigateNode> nodeList = NavigateUtils.calc(locNo, liftLocNo, NavigationMapType.NONE.id, null);
+            List<NavigateNode> nodeList = navigateUtils.calc(locNo, liftLocNo, NavigationMapType.NONE.id, null);
             if (nodeList == null) {
                 continue;
             }
-            Integer originPathAllDistance = NavigateUtils.getOriginPathAllDistance(nodeList);//鎬昏窛绂�
+            Integer originPathAllDistance = navigateUtils.getOriginPathAllDistance(nodeList);//鎬昏窛绂�
             if (originPathAllDistance < finalDistance) {
                 finalDistance = originPathAllDistance;
                 recentLiftThread = liftThread;
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/utils/NavigateSolution.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/utils/NavigateSolution.java
index 679502b..d25f7d7 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/utils/NavigateSolution.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/utils/NavigateSolution.java
@@ -1,13 +1,18 @@
 package com.zy.asrs.wcs.core.utils;
 
+import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.zy.asrs.framework.common.SpringUtils;
 import com.zy.asrs.framework.exception.CoolException;
 import com.zy.asrs.wcs.core.model.NavigateNode;
+import com.zy.asrs.wcs.core.model.PythonResult;
 import com.zy.asrs.wcs.core.model.enums.MapNodeType;
 import com.zy.asrs.wcs.system.entity.Dict;
 import com.zy.asrs.wcs.system.service.DictService;
 
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.PriorityQueue;
@@ -52,45 +57,89 @@
     //Exist琛ㄧ敤鏉ュ瓨鏀惧凡缁忓嚭鐜拌繃鐨勭粨鐐广��
     public ArrayList<NavigateNode> Exist = new ArrayList<NavigateNode>();
 
-    public NavigateNode astarSearch(NavigateNode start, NavigateNode end) {
-        //鎶婄涓�涓紑濮嬬殑缁撶偣鍔犲叆鍒癘pen琛ㄤ腑
-        this.Open.add(start);
-        //鎶婂嚭鐜拌繃鐨勭粨鐐瑰姞鍏ュ埌Exist琛ㄤ腑
-        this.Exist.add(start);
-        //涓诲惊鐜�
-        while (Open.size() > 0) {
-            //鍙栦紭鍏堥槦鍒楅《閮ㄥ厓绱犲苟涓旀妸杩欎釜鍏冪礌浠嶰pen琛ㄤ腑鍒犻櫎
-            NavigateNode current_node = Open.poll();
-            //灏嗚繖涓粨鐐瑰姞鍏ュ埌Close琛ㄤ腑
-            Close.add(current_node);
-            //瀵瑰綋鍓嶇粨鐐硅繘琛屾墿灞曪紝寰楀埌涓�涓洓鍛ㄧ粨鐐圭殑鏁扮粍
-            ArrayList<NavigateNode> neighbour_node = extend_current_node(current_node);
-            //瀵硅繖涓粨鐐归亶鍘嗭紝鐪嬫槸鍚︽湁鐩爣缁撶偣鍑虹幇
-            for (NavigateNode node : neighbour_node) {
-                // G + H + E (瀵瑰惎鍙戝嚱鏁板鍔犲幓鎷愮偣鏂规calcNodeExtraCost)
-                int gCost = calcNodeCost(current_node, node) * calcNodeExtraCost(current_node, node, end);
-                if (node.getX() == end.getX() && node.getY() == end.getY()) {//鎵惧埌鐩爣缁撶偣灏辫繑鍥�
-                    //init_node鎿嶄綔鎶婅繖涓偦灞呯粨鐐圭殑鐖惰妭鐐硅缃负褰撳墠缁撶偣
-                    //骞朵笖璁$畻鍑篏锛� F锛� H绛夊��
-                    node.setLastDistance(gCost);
-                    node.init_node(current_node, end);
-                    return node;
-                }
+    public String astarSearch(NavigateNode start, NavigateNode end, String pythonScriptPath) {
+        String maps = JSON.toJSONString(map);
+        String startStr = start.getX() + "-" + start.getY();
+        String targetStr = end.getX() + "-" + end.getY();
 
-                //杩涜璁$畻瀵笹, F, H 绛夊��
-                node.setLastDistance(gCost);
-                node.init_node(current_node, end);
-                node.setH(calcNodeCost(node, end));
-                node.setF(node.getG() + node.getH());
+        ProcessBuilder processBuilder = new ProcessBuilder("python", pythonScriptPath, maps, startStr, targetStr);
+        processBuilder.redirectErrorStream(true);
 
-                Open.add(node);
-                Exist.add(node);
+        try {
+            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;
+            }
+
+            PythonResult result = JSON.parseObject(builder.toString(), PythonResult.class);
+            if (result.getCalcResult() != 200) {
+                return null;
+            }
+
+            String path = result.getPath();
+            return path;
+        } catch (IOException | InterruptedException e) {
+            e.printStackTrace();
         }
-        //濡傛灉閬嶅巻瀹屾墍鏈夊嚭鐜扮殑缁撶偣閮芥病鏈夋壘鍒版渶缁堢殑缁撶偣锛岃繑鍥瀗ull
         return null;
     }
 
+//    public NavigateNode astarSearch(NavigateNode start, NavigateNode end) {
+//        //鎶婄涓�涓紑濮嬬殑缁撶偣鍔犲叆鍒癘pen琛ㄤ腑
+//        this.Open.add(start);
+//        //鎶婂嚭鐜拌繃鐨勭粨鐐瑰姞鍏ュ埌Exist琛ㄤ腑
+//        this.Exist.add(start);
+//        //涓诲惊鐜�
+//        while (Open.size() > 0) {
+//            //鍙栦紭鍏堥槦鍒楅《閮ㄥ厓绱犲苟涓旀妸杩欎釜鍏冪礌浠嶰pen琛ㄤ腑鍒犻櫎
+//            NavigateNode current_node = Open.poll();
+//            //灏嗚繖涓粨鐐瑰姞鍏ュ埌Close琛ㄤ腑
+//            Close.add(current_node);
+//            //瀵瑰綋鍓嶇粨鐐硅繘琛屾墿灞曪紝寰楀埌涓�涓洓鍛ㄧ粨鐐圭殑鏁扮粍
+//            ArrayList<NavigateNode> neighbour_node = extend_current_node(current_node);
+//            //瀵硅繖涓粨鐐归亶鍘嗭紝鐪嬫槸鍚︽湁鐩爣缁撶偣鍑虹幇
+//            for (NavigateNode node : neighbour_node) {
+//                // G + H + E (瀵瑰惎鍙戝嚱鏁板鍔犲幓鎷愮偣鏂规calcNodeExtraCost)
+//                int gCost = calcNodeCost(current_node, node) * calcNodeExtraCost(current_node, node, end);
+//                if (node.getX() == end.getX() && node.getY() == end.getY()) {//鎵惧埌鐩爣缁撶偣灏辫繑鍥�
+//                    //init_node鎿嶄綔鎶婅繖涓偦灞呯粨鐐圭殑鐖惰妭鐐硅缃负褰撳墠缁撶偣
+//                    //骞朵笖璁$畻鍑篏锛� F锛� H绛夊��
+//                    node.setLastDistance(gCost);
+//                    node.init_node(current_node, end);
+//                    return node;
+//                }
+//
+//                //杩涜璁$畻瀵笹, F, H 绛夊��
+//                node.setLastDistance(gCost);
+//                node.init_node(current_node, end);
+//                node.setH(calcNodeCost(node, end));
+//                node.setF(node.getG() + node.getH());
+//
+//                Open.add(node);
+//                Exist.add(node);
+//            }
+//        }
+//        //濡傛灉閬嶅巻瀹屾墍鏈夊嚭鐜扮殑缁撶偣閮芥病鏈夋壘鍒版渶缁堢殑缁撶偣锛岃繑鍥瀗ull
+//        return null;
+//    }
+
 
     public ArrayList<NavigateNode> extend_current_node(NavigateNode current_node) {
         //榛樿鍦板浘姣嶈建鏂瑰悜x
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);
+//        }
+//
+//    }
+
 }
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/utils/ShuttleDispatcher.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/utils/ShuttleDispatcher.java
index 2f10b29..581fa09 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/utils/ShuttleDispatcher.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/utils/ShuttleDispatcher.java
@@ -56,6 +56,8 @@
     private ShuttleStandbyService shuttleStandbyService;
     @Autowired
     private DictService dictService;
+    @Autowired
+    private NavigateUtils navigateUtils;
 
     public synchronized ShuttleThread searchIdleShuttle(Task task) {
         String locNo = taskService.judgeInbound(task) ? task.getDestLoc() : task.getOriginLoc();
@@ -144,7 +146,7 @@
 
             // 鍚屾ゼ灞傜洿鎺ヨ绠楀埌鐩爣搴撲綅
             //褰撳墠绌挎杞︾嚎绋嬪埌褰撳墠杞﹀瓙鎵�鍦ㄦゼ灞傜殑鐩爣搴撲綅璺濈
-            List<NavigateNode> currentShuttlePath = NavigateUtils.calc(
+            List<NavigateNode> currentShuttlePath = navigateUtils.calc(
                     currentLocNo
                     , locNo
                     , NavigationMapType.NORMAL.id
@@ -154,7 +156,7 @@
                 continue;
             }
 
-            Integer currDistance = NavigateUtils.getOriginPathAllDistance(currentShuttlePath);//璁$畻褰撳墠璺緞琛岃蛋鎬昏窛绂�
+            Integer currDistance = navigateUtils.getOriginPathAllDistance(currentShuttlePath);//璁$畻褰撳墠璺緞琛岃蛋鎬昏窛绂�
 
             // 鎸傝浇浠诲姟鏉冮噸
             List<Task> tasks = taskService.selectWorkingByShuttle(Integer.valueOf(device.getDeviceNo()), null);
@@ -238,7 +240,7 @@
             String targetLocNo = shuttleStandby.getDeviceLoc();
 
             //褰撳墠绌挎杞︾嚎绋嬪埌褰撳墠杞﹀瓙鎵�鍦ㄦゼ灞傜殑鎻愬崌鏈哄緟鏈轰綅璺濈
-            List<NavigateNode> currentShuttlePath = NavigateUtils.calc(
+            List<NavigateNode> currentShuttlePath = navigateUtils.calc(
                     currentLocNo
                     , targetLocNo
                     , NavigationMapType.NORMAL.id
@@ -248,7 +250,7 @@
                 continue;
             }
 
-            Integer currDistance = NavigateUtils.getOriginPathAllDistance(currentShuttlePath);//璁$畻褰撳墠璺緞琛岃蛋鎬昏窛绂�
+            Integer currDistance = navigateUtils.getOriginPathAllDistance(currentShuttlePath);//璁$畻褰撳墠璺緞琛岃蛋鎬昏窛绂�
 
             // 涓嶅悓妤煎眰鏉冮噸
             if (currentLev != Utils.getLev(locNo)) {
@@ -401,7 +403,7 @@
         String recentLoc = null;
         for (String loc : locNos) {
             //褰撳墠绌挎杞﹀埌閬胯浣嶈绠�
-            List<NavigateNode> currentShuttlePath = NavigateUtils.calc(
+            List<NavigateNode> currentShuttlePath = navigateUtils.calc(
                     currentLocNo
                     , loc
                     , NavigationMapType.NORMAL.id
@@ -411,7 +413,7 @@
                 continue;
             }
 
-            Integer currDistance = NavigateUtils.getOriginPathAllDistance(currentShuttlePath);//璁$畻褰撳墠璺緞琛岃蛋鎬昏窛绂�
+            Integer currDistance = navigateUtils.getOriginPathAllDistance(currentShuttlePath);//璁$畻褰撳墠璺緞琛岃蛋鎬昏窛绂�
             if (currDistance < finalDistance) {
                 finalDistance = currDistance;
                 recentLoc = loc;
@@ -521,13 +523,13 @@
     //鍒嗘瀽鍑哄簱璺緞寰呮満搴撲綅
     public String analyzeOutPathWaitLoc(String startLoc, String targetLoc, Device shuttleDevice) {
         //璁$畻璺緞骞跺垎瑙f垚涓ゆ鍔ㄤ綔
-        List<NavigateNode> nodeList = NavigateUtils.calc(startLoc, targetLoc, NavigationMapType.DFX.id, Utils.getShuttlePoints(Integer.parseInt(shuttleDevice.getDeviceNo()), Utils.getLev(startLoc)));
+        List<NavigateNode> nodeList = navigateUtils.calc(startLoc, targetLoc, NavigationMapType.DFX.id, Utils.getShuttlePoints(Integer.parseInt(shuttleDevice.getDeviceNo()), Utils.getLev(startLoc)));
         if (nodeList == null) {
             News.error("{} dash {} can't find navigate path!", startLoc, targetLoc);
             return null;
         }
         //鑾峰彇鍒嗘璺緞
-        ArrayList<ArrayList<NavigateNode>> data = NavigateUtils.getSectionPath(nodeList);
+        ArrayList<ArrayList<NavigateNode>> data = navigateUtils.getSectionPath(nodeList);
         if (data.size() <= 1) {
             return startLoc;//涓ょ偣涔嬮棿鍙湁涓�娈佃矾寰勶紝鍦ㄨ捣鐐逛綅缃瓑寰�
         }
diff --git a/zy-asrs-wcs/src/main/resources/application.yml b/zy-asrs-wcs/src/main/resources/application.yml
index 268e372..92d9984 100644
--- a/zy-asrs-wcs/src/main/resources/application.yml
+++ b/zy-asrs-wcs/src/main/resources/application.yml
@@ -61,4 +61,6 @@
   pwd: xltys1995
 
 config:
-  token-key: KUHSMcYQ4lePt3r6bckz0P13cBJyoonYqInThvQlUnbsFCIcCcZZAbWZ6UNFztYNYPhGdy6eyb8WdIz8FU2Cz396TyTJk3NI2rtXMHBOehRb4WWJ4MdYVVg2oWPyqRQ2
\ No newline at end of file
+  token-key: KUHSMcYQ4lePt3r6bckz0P13cBJyoonYqInThvQlUnbsFCIcCcZZAbWZ6UNFztYNYPhGdy6eyb8WdIz8FU2Cz396TyTJk3NI2rtXMHBOehRb4WWJ4MdYVVg2oWPyqRQ2
+
+pythonCalcPath: D://cpu.py
\ No newline at end of file

--
Gitblit v1.9.1