From 74e0eb7a7e84b5006903e79554c007d9d5fbbcbc Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期四, 05 十月 2023 17:04:32 +0800
Subject: [PATCH] #
---
src/main/java/com/zy/common/utils/NavigateUtils.java | 103 +++++++++++++++++++++++++++++++++++++++++++++++----
1 files changed, 95 insertions(+), 8 deletions(-)
diff --git a/src/main/java/com/zy/common/utils/NavigateUtils.java b/src/main/java/com/zy/common/utils/NavigateUtils.java
index ea1a70e..aeb08e7 100644
--- a/src/main/java/com/zy/common/utils/NavigateUtils.java
+++ b/src/main/java/com/zy/common/utils/NavigateUtils.java
@@ -1,9 +1,14 @@
package com.zy.common.utils;
-import com.alibaba.fastjson.JSONObject;
import com.zy.asrs.utils.Utils;
+import com.zy.common.model.MapNode;
import com.zy.common.model.NavigateNode;
+import com.zy.common.model.enums.NavigationMapType;
+import com.zy.core.cache.SlaveConnection;
import com.zy.core.enums.ShuttleTaskModeType;
+import com.zy.core.enums.SlaveType;
+import com.zy.core.model.protocol.NyShuttleProtocol;
+import com.zy.core.thread.NyShuttleThread;
import java.util.*;
@@ -12,10 +17,13 @@
*/
public class NavigateUtils {
- public static List<NavigateNode> calc(String startPoint, String endPoint, Integer mapType) {
+ public static List<NavigateNode> calc(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);//灏嗗紑濮嬭妭鐐硅缃负鐧藉悕鍗曪紝浠ラ槻琚繃婊�
//鑾峰彇褰撳墠鑺傜偣璁$畻鐨勫眰楂橈紝骞惰祴鍊煎埌姣忎竴涓妭鐐逛腑
int lev = Utils.getLev(startPoint);
@@ -26,7 +34,9 @@
start.setFather(null);
NavigateNode end = new NavigateNode(endArr[0], endArr[1]);
- NavigateSolution solution = new NavigateSolution(mapType);
+ NavigateSolution solution = new NavigateSolution(mapType, lev, whiteList, shuttlePoints);
+ //寮�濮嬭妭鐐癸紝涓嶇撼鍏ョ鐢ㄨ妭鐐瑰唴璁$畻
+
NavigateNode res_node = solution.astarSearch(start, end);
if (res_node == null) {
System.out.println("鏈壘鍒拌矾寰�");
@@ -163,15 +173,37 @@
//鑾峰彇浠巟鐐瑰埌涓嬩竴鐐圭殑琛岃蛋璺濈
public static Integer getXToNextDistance(NavigateNode xNode) {
NavigateMapData mapData = new NavigateMapData();
- ArrayList<ArrayList<JSONObject>> lists = mapData.getJsonData(1);
+ List<List<MapNode>> lists = mapData.getJsonData(NavigationMapType.NONE.id, null, null);
if (lists != null) {
- JSONObject jsonObject = lists.get(xNode.getX()).get(xNode.getY());
- if (jsonObject != null) {
- return Integer.parseInt(jsonObject.getOrDefault(xNode.getDirection(), 0).toString());
+ MapNode mapNode = lists.get(xNode.getX()).get(xNode.getY());
+ if (mapNode != null) {
+ switch (xNode.getDirection()) {
+ case "top":
+ return mapNode.getTop();
+ case "bottom":
+ return mapNode.getBottom();
+ case "left":
+ return mapNode.getLeft();
+ case "right":
+ return mapNode.getRight();
+ }
}
return 0;
}
return 0;
+ }
+
+ /**
+ * 鏍规嵁鍘熷鑺傜偣缁撴灉锛岃绠楁�昏璧拌窛绂�
+ */
+ public static Integer getOriginPathAllDistance(List<NavigateNode> path) {
+ ArrayList<ArrayList<NavigateNode>> sectionPath = NavigateUtils.getSectionPath(path);
+ Integer allDistance = 0;
+ for (ArrayList<NavigateNode> navigateNodes : sectionPath) {
+ Integer distance = NavigateUtils.getCurrentPathAllDistance(navigateNodes);
+ allDistance += distance;
+ }
+ return allDistance;
}
/**
@@ -191,9 +223,64 @@
return allDistance;
}
+ /**
+ * 鑾峰彇涓棿鐐瑰埌鐩爣鐐硅璧拌窛绂�
+ */
+ public static Integer getMiddleToDistDistance(List<NavigateNode> path, NavigateNode middlePath) {
+ //鏈�鍚庝竴鏉¤妭鐐逛笉璁$畻杩涜璧拌窛绂�
+ NavigateNode lastPath = path.get(path.size() - 1);
+ //鎬昏窛绂�
+ int allDistance = 0;
+ boolean flag = false;
+ for (NavigateNode navigateNode : path) {
+ if (!flag && navigateNode.equals(middlePath)) {
+ flag = true;
+ }
+
+ if (navigateNode.equals(lastPath)) {
+ continue;//鏈�鍚庝竴鏉¤妭鐐逛笉璁$畻杩涜璧拌窛绂�
+ }
+
+ if (flag) {
+ allDistance += navigateNode.getMoveDistance();
+ }
+ }
+ return allDistance;
+ }
+
+ /**
+ * 妫�娴嬭矾寰勬槸鍚﹀彲鐢�(鍙蛋)
+ */
+ public static boolean checkPathIsAvailable(List<NavigateNode> path, Integer shuttleNo, Integer lev) {
+ NyShuttleThread shuttleThread = (NyShuttleThread) SlaveConnection.get(SlaveType.Shuttle, shuttleNo);
+ if (shuttleThread == null) {
+ return false;
+ }
+ NyShuttleProtocol shuttleProtocol = shuttleThread.getShuttleProtocol();
+ if (shuttleProtocol == null) {
+ return false;
+ }
+
+ Integer mapType = NavigationMapType.DFX.id;
+ if (shuttleProtocol.getLiftPosition() == 1) {
+ //涓嬮檷浣嶇疆
+ mapType = NavigationMapType.NORMAL.id;
+ }
+
+ NavigateSolution solution = new NavigateSolution(mapType, lev, null, Utils.getShuttlePoints(shuttleNo, lev));//鑾峰彇鏃犵櫧鍚嶅崟鍦板浘(璇ュ湴鍥惧寘鍚皬杞﹀潗鏍�)
+ int[][] map = solution.map;
+ for (NavigateNode node : path) {
+ int value = map[node.getX()][node.getY()];
+ if (value != 0 && value != 3 && value != 5) {//姣嶈建閬�3銆佸瓙杞ㄩ亾0銆佸厖鐢垫々5
+ return false;
+ }
+ }
+ return true;
+ }
+
public static void main(String[] args) {
//璁$畻璺緞
- List<NavigateNode> calc = calc("1000901", "1800201", ShuttleTaskModeType.PAK_OUT.id);
+ List<NavigateNode> calc = calc("1000901", "1800201", NavigationMapType.NONE.id, null);
System.out.println(calc);
System.out.println("------------------------");
// List<NavigateNode> calc = calc("0501401", "0201801", "out");
--
Gitblit v1.9.1