From 449e4e9df08162b1e7e04ac0d4e05a1387298171 Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期二, 08 七月 2025 16:48:16 +0800
Subject: [PATCH] #
---
src/main/java/com/zy/common/utils/NavigateUtils.java | 77 ++++++++++++++++++++++++++++++++++++--
1 files changed, 72 insertions(+), 5 deletions(-)
diff --git a/src/main/java/com/zy/common/utils/NavigateUtils.java b/src/main/java/com/zy/common/utils/NavigateUtils.java
index 6528cc3..3fa02a9 100644
--- a/src/main/java/com/zy/common/utils/NavigateUtils.java
+++ b/src/main/java/com/zy/common/utils/NavigateUtils.java
@@ -3,6 +3,7 @@
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;
@@ -10,6 +11,7 @@
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 org.springframework.stereotype.Component;
@@ -25,9 +27,10 @@
@Value("${pythonCalcPath}")
private String pythonCalcPath;
-
@Value("${pythonCalcSimilarity}")
private String pythonCalcSimilarity;
+ @Autowired
+ private NavigateMapData navigateMapData;
public List<NavigateNode> calc(String startPoint, String endPoint, Integer mapType, List<int[]> shuttlePoints, List<int[]> whites) {
return calcJava(startPoint, endPoint, mapType, shuttlePoints, whites);
@@ -46,14 +49,17 @@
//鑾峰彇褰撳墠鑺傜偣璁$畻鐨勫眰楂橈紝骞惰祴鍊煎埌姣忎竴涓妭鐐逛腑
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.setFather(null);
+ start.setNodeValue(map[startArr[0]][startArr[1]]);
NavigateNode end = new NavigateNode(endArr[0], endArr[1]);
- NavigateSolution solution = new NavigateSolution(mapType, lev, whiteList, shuttlePoints);
+ end.setNodeValue(map[endArr[0]][endArr[1]]);
//寮�濮嬭妭鐐癸紝涓嶇撼鍏ョ鐢ㄨ妭鐐瑰唴璁$畻
NavigateNode res_node = solution.astarSearchJava(start, end);
@@ -116,14 +122,17 @@
//鑾峰彇褰撳墠鑺傜偣璁$畻鐨勫眰楂橈紝骞惰祴鍊煎埌姣忎竴涓妭鐐逛腑
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]);
- NavigateSolution solution = new NavigateSolution(mapType, lev, whiteList, shuttlePoints);
+ end.setNodeValue(map[endArr[0]][endArr[1]]);
//寮�濮嬭妭鐐癸紝涓嶇撼鍏ョ鐢ㄨ妭鐐瑰唴璁$畻
String pathStr = solution.astarSearchPython(start, end, pythonCalcPath);
@@ -177,6 +186,54 @@
//鏇存柊鑺傜偣鍒楄〃
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(0);
+ String locNo = NavigatePositionConvert.nodeToLocNo(targetNode);
+ return locNo;
}
//鍒ゆ柇褰撳墠鑺傜偣鍒颁笅涓�涓妭鐐规槸鍚︿负鎷愮偣
@@ -346,8 +403,7 @@
* 妫�娴嬭矾寰勬槸鍚﹀彲鐢�(鍙蛋)
*/
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;
+ 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銆佸皬杞﹀彲璧拌緭閫佺珯
@@ -419,6 +475,17 @@
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);
--
Gitblit v1.9.1