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