From 2df6d2c5d13a2a7909e802c5f190afeeba70f111 Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期一, 21 四月 2025 14:54:59 +0800
Subject: [PATCH] #
---
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/utils/NavigateUtils.java | 142 +++++++++++++++++++++++++++++++++++++++++++++-
1 files changed, 137 insertions(+), 5 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 1cea3d1..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
@@ -5,13 +5,16 @@
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.PythonSimilarityResult;
import com.zy.asrs.wcs.core.model.enums.MapNodeType;
import com.zy.asrs.wcs.core.model.enums.NavigationMapType;
+import com.zy.asrs.wcs.rcs.News;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
+import java.io.BufferedReader;
+import java.io.InputStreamReader;
import java.util.ArrayList;
-import java.util.Collections;
import java.util.HashMap;
import java.util.List;
@@ -23,6 +26,83 @@
@Value("${pythonCalcPath}")
private String pythonCalcPath;
+
+ @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杞村潗鏍�
@@ -46,7 +126,7 @@
String pathStr = solution.astarSearch(start, end, pythonCalcPath);
if (pathStr == null) {
- System.err.println("鏈壘鍒拌矾寰�");
+ News.error("{} dash {} can't find navigate path!", startPoint, endPoint);
return null;
}
@@ -288,7 +368,57 @@
return node;
}
-// public static void main(String[] args) {
+ public Double similarityPath(List<NavigateNode> firstPath, List<NavigateNode> secondPath) {
+ try {
+ List<int[]> first = new ArrayList<>();
+ for (NavigateNode node : firstPath) {
+ first.add(new int[]{node.getX(), node.getY()});
+ }
+
+ List<int[]> second = new ArrayList<>();
+ for (NavigateNode node : secondPath) {
+ second.add(new int[]{node.getX(), node.getY()});
+ }
+
+ ProcessBuilder processBuilder = new ProcessBuilder("python", pythonCalcSimilarity, JSON.toJSONString(first), JSON.toJSONString(second));
+ processBuilder.redirectErrorStream(true);
+
+ 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;
+ }
+
+ PythonSimilarityResult result = JSON.parseObject(builder.toString(), PythonSimilarityResult.class);
+ if (result.getCalcResult() != 200) {
+ return 0D;
+ }
+
+ Double similarity = result.getSimilarity();
+ return similarity;
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ return 0D;
+ }
+
+ public static void main(String[] args) {
// //璁$畻璺緞
// List<NavigateNode> calc = calc("1000901", "1800201", NavigationMapType.NONE.id, null);
// System.out.println(calc);
@@ -301,7 +431,9 @@
// System.out.println(currentPathAllDistance);
// System.out.println(list);
// }
-//
-// }
+
+ System.loadLibrary("example");
+
+ }
}
--
Gitblit v1.9.1