From b81245aa621ac10e3066e6e7bed932ee3ec5b91a Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期六, 28 十月 2023 13:23:27 +0800
Subject: [PATCH] #跨楼层移动节点计算采取不同方案
---
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java | 81 ++++++++++++++------------
src/main/java/com/zy/common/utils/ShuttleDispatchUtils.java | 4
src/main/java/com/zy/common/utils/NavigateUtils.java | 7 +
src/main/java/com/zy/common/utils/NyShuttleOperaUtils.java | 37 ++++++++++++
src/main/java/com/zy/common/utils/NavigateMapData.java | 50 ++++++++++++++++
5 files changed, 137 insertions(+), 42 deletions(-)
diff --git a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
index 1b43d5d..9ccfca0 100644
--- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -3160,43 +3160,26 @@
return false;
}
- //璺ㄦゼ灞傜Щ鍔ㄤ换鍔�
- if (Utils.getLev(wrkMast.getSourceLocNo()) != Utils.getLev(wrkMast.getLocNo())) {
- //鑾峰彇鐩爣绔�
- LiftStaProtocol liftSta = NyLiftUtils.getLiftStaByStaNo(wrkMast.getStaNo());
- if (liftSta == null) {
- return false;//鎵句笉鍒扮珯鐐�
- }
-
- //*************灏濊瘯瑙i攣鐩爣绔欒矾寰�***************
- List<NavigateNode> targetNodes = NyLiftUtils.getLiftStaNodes(liftSta.getStaNo());
- if (targetNodes == null) {
- return false;//鏈幏鍙栧埌鑺傜偣
- }
- //灏濊瘯瑙i攣鐩爣绔欒矾寰�
- boolean result = navigateMapUtils.writeNavigateNodeToRedisMap(Utils.getLev(wrkMast.getLocNo()), targetNodes, false);//鎵�浣跨敤鐨勮矾寰勮繘琛岃В閿�
- if (!result) {
- return false;//璺緞瑙i攣澶辫触
- }
- //*************灏濊瘯瑙i攣鐩爣绔欒矾寰�***************
- }
-
-// //鑾峰彇鐩爣绔欏搴旂殑杈撻�佺珯鐐�
-// BasDevp targetBasDevp = basDevpService.selectByLevAndLiftNo(Utils.getLev(wrkMast.getLocNo()), wrkMast.getLiftNo());
-// if (targetBasDevp == null) {
-// return false;//缂哄皯绔欑偣淇℃伅
-// }
+// //璺ㄦゼ灞傜Щ鍔ㄤ换鍔�
+// if (Utils.getLev(wrkMast.getSourceLocNo()) != Utils.getLev(wrkMast.getLocNo())) {
+// //鑾峰彇鐩爣绔�
+// LiftStaProtocol liftSta = NyLiftUtils.getLiftStaByStaNo(wrkMast.getStaNo());
+// if (liftSta == null) {
+// return false;//鎵句笉鍒扮珯鐐�
+// }
//
-// //鑾峰彇鎻愬崌鏈烘暟鎹�
-// BasLift basLift = basLiftService.selectById(targetBasDevp.getLiftNo());
-// if (basLift == null) {
-// return false;//娌℃湁鎻愬崌鏈烘暟鎹�
+// //*************灏濊瘯瑙i攣鐩爣绔欒矾寰�***************
+// List<NavigateNode> targetNodes = NyLiftUtils.getLiftStaNodes(liftSta.getStaNo());
+// if (targetNodes == null) {
+// return false;//鏈幏鍙栧埌鑺傜偣
+// }
+// //灏濊瘯瑙i攣鐩爣绔欒矾寰�
+// boolean result = navigateMapUtils.writeNavigateNodeToRedisMap(Utils.getLev(wrkMast.getLocNo()), targetNodes, false);//鎵�浣跨敤鐨勮矾寰勮繘琛岃В閿�
+// if (!result) {
+// return false;//璺緞瑙i攣澶辫触
+// }
+// //*************灏濊瘯瑙i攣鐩爣绔欒矾寰�***************
// }
-// if (basLift.getPoint() == null) {
-// return false;//娌℃湁璁剧疆鎻愬崌鏈虹偣浣嶅潗鏍�
-// }
-// NavigateNode liftNode = new NavigateNode(basLift.getPoint$().getX(), basLift.getPoint$().getY());
-// liftNode.setZ(basLift.getPoint$().getZ());
//灏忚溅宸茬粡鍦ㄧ洰鏍囧簱浣嶏紝鐩存帴璁ゅ畾灏忚溅绉诲姩浠诲姟瀹屾垚
if (shuttleProtocol.getCurrentLocNo().equals(wrkMast.getLocNo())) {
@@ -3225,8 +3208,32 @@
return false;
}
- //鑾峰彇灏忚溅鍒扮洰鏍囧簱浣嶅懡浠�
- NyShuttleOperaResult result = NyShuttleOperaUtils.getStartToTargetCommands(shuttleThread.getSlave().getId(), wrkMast.getWrkNo(), shuttleProtocol.getCurrentLocNo(), wrkMast.getLocNo(), NavigationMapType.NORMAL.id);
+ NyShuttleOperaResult result = null;
+ //璺ㄦゼ灞傜Щ鍔ㄤ换鍔�
+ if (Utils.getLev(wrkMast.getSourceLocNo()) != Utils.getLev(wrkMast.getLocNo())) {
+ //闇�瑕佸皢鍓嶄袱涓妭鐐逛綔涓虹櫧鍚嶅崟鑺傜偣浼犲叆
+ //鑾峰彇鐩爣绔�
+ LiftStaProtocol liftSta = NyLiftUtils.getLiftStaByStaNo(wrkMast.getStaNo());
+ if (liftSta == null) {
+ return false;//鎵句笉鍒扮珯鐐�
+ }
+
+ List<NavigateNode> targetNodes = NyLiftUtils.getLiftStaNodes(liftSta.getStaNo());
+ if (targetNodes == null) {
+ return false;//鏈幏鍙栧埌鑺傜偣
+ }
+
+ //璁剧疆璁$畻鑺傜偣鐨勭櫧鍚嶅崟
+ ArrayList<int[]> whiteList = new ArrayList<>();//璁剧疆璁$畻鑺傜偣鐨勭櫧鍚嶅崟
+ for (NavigateNode node : targetNodes) {
+ whiteList.add(new int[]{node.getX(), node.getY()});
+ }
+ result = NyShuttleOperaUtils.getStartToTargetCommandsByWhites(shuttleThread.getSlave().getId(), wrkMast.getWrkNo(), shuttleProtocol.getCurrentLocNo(), wrkMast.getLocNo(), NavigationMapType.NORMAL.id, whiteList);
+ }else {
+ //鑾峰彇灏忚溅鍒扮洰鏍囧簱浣嶅懡浠�
+ result = NyShuttleOperaUtils.getStartToTargetCommands(shuttleThread.getSlave().getId(), wrkMast.getWrkNo(), shuttleProtocol.getCurrentLocNo(), wrkMast.getLocNo(), NavigationMapType.NORMAL.id);
+ }
+
if (result == null) {
return false;//璺緞璁$畻澶辫触
}
diff --git a/src/main/java/com/zy/common/utils/NavigateMapData.java b/src/main/java/com/zy/common/utils/NavigateMapData.java
index 6b706e1..62b43e6 100644
--- a/src/main/java/com/zy/common/utils/NavigateMapData.java
+++ b/src/main/java/com/zy/common/utils/NavigateMapData.java
@@ -146,6 +146,37 @@
return null;
}
+ //鑾峰彇JSON鏍煎紡鏁版嵁
+ public List<List<MapNode>> getJsonData(Integer lev, Integer mapType, List<int[]> whitePoints, List<int[]> shuttlePoints) {
+ try {
+ String mapFilename = "map_" + lev + ".json";
+
+ String fileName = this.getClass().getClassLoader().getResource(mapFilename).getPath();//鑾峰彇鏂囦欢璺緞
+ File file = new File(fileName);
+ StringBuffer stringBuffer = new StringBuffer();
+ if (file.isFile() && file.exists()) {
+ InputStreamReader isr = new InputStreamReader(new FileInputStream(file), "GBK");
+ BufferedReader br = new BufferedReader(isr);
+ String lineTxt = null;
+ while ((lineTxt = br.readLine()) != null) {
+ stringBuffer.append(lineTxt);
+ }
+ br.close();
+
+ //瑙f瀽json鍦板浘鏁版嵁
+ ArrayList arrayList = JSON.parseObject(stringBuffer.toString(), ArrayList.class);
+ List<List<MapNode>> lists = filterMap(mapType, arrayList, lev, whitePoints, shuttlePoints);//杩囨护鍦板浘鏁版嵁
+
+ return lists;
+ } else {
+ System.out.println("鏂囦欢涓嶅瓨鍦�!");
+ }
+ } catch (IOException ioException) {
+ ioException.printStackTrace();
+ }
+ return null;
+ }
+
/**
* 杩囨护鍦板浘鏁版嵁
* mapType -1=>鏃犺繃婊わ紝1=銆嬭繃婊ゅ簱浣嶇姸鎬丏FX锛�2=銆嬭繃婊ゅ簱浣嶇姸鎬乆
@@ -232,6 +263,25 @@
}
}
+ //鍔犺浇鐧藉悕鍗曡妭鐐�
+ List<List<MapNode>> realMap = getJsonData(lev, -1, null, null);//鑾峰彇瀹屾暣鍦板浘
+ for (int[] points : whitePoints) {
+ //鑾峰彇鍘熷鑺傜偣鏁版嵁
+ int x = points[0];
+ int y = points[1];
+ List<MapNode> rows = realMap.get(x);
+ MapNode col = rows.get(y);
+
+ List<MapNode> list = lists.get(x);
+ MapNode mapNode = list.get(y);
+ mapNode.setValue(col.getValue());//鎭㈠鍘熷鑺傜偣
+
+ //鏇存柊list
+ list.set(y, mapNode);
+ lists.set(x, list);
+ }
+
+
return lists;
}
diff --git a/src/main/java/com/zy/common/utils/NavigateUtils.java b/src/main/java/com/zy/common/utils/NavigateUtils.java
index 596e595..689e571 100644
--- a/src/main/java/com/zy/common/utils/NavigateUtils.java
+++ b/src/main/java/com/zy/common/utils/NavigateUtils.java
@@ -17,13 +17,16 @@
*/
public class NavigateUtils {
- public static List<NavigateNode> calc(String startPoint, String endPoint, Integer mapType, List<int[]> shuttlePoints) {
+ public static List<NavigateNode> calc(String startPoint, String endPoint, Integer mapType, List<int[]> shuttlePoints, List<int[]> whites) {
//閫氳繃寮�濮嬬紪鍙峰拰缁撴潫缂栧彿鑾峰彇瀵瑰簲鐨剎y杞村潗鏍�
int[] startArr = NavigatePositionConvert.positionToXY(startPoint);//寮�濮嬭妭鐐�
int[] endArr = NavigatePositionConvert.positionToXY(endPoint);//缁撴潫鑺傜偣
ArrayList<int[]> whiteList = new ArrayList<>();//璁剧疆璁$畻鑺傜偣鐨勭櫧鍚嶅崟
whiteList.add(startArr);//灏嗗紑濮嬭妭鐐硅缃负鐧藉悕鍗曪紝浠ラ槻琚繃婊�
+ if (whites != null && !whites.isEmpty()) {
+ whiteList.addAll(whites);//鎵归噺娣诲姞鐧藉悕鍗曡妭鐐�
+ }
//鑾峰彇褰撳墠鑺傜偣璁$畻鐨勫眰楂橈紝骞惰祴鍊煎埌姣忎竴涓妭鐐逛腑
int lev = Utils.getLev(startPoint);
@@ -280,7 +283,7 @@
public static void main(String[] args) {
//璁$畻璺緞
- List<NavigateNode> calc = calc("1000901", "1800201", NavigationMapType.NONE.id, null);
+ List<NavigateNode> calc = calc("1000901", "1800201", NavigationMapType.NONE.id, null, null);
System.out.println(calc);
System.out.println("------------------------");
// List<NavigateNode> calc = calc("0501401", "0201801", "out");
diff --git a/src/main/java/com/zy/common/utils/NyShuttleOperaUtils.java b/src/main/java/com/zy/common/utils/NyShuttleOperaUtils.java
index 2c46cd8..d7f5d6a 100644
--- a/src/main/java/com/zy/common/utils/NyShuttleOperaUtils.java
+++ b/src/main/java/com/zy/common/utils/NyShuttleOperaUtils.java
@@ -89,7 +89,42 @@
public static NyShuttleOperaResult getStartToTargetCommands(Integer shuttleNo, Integer wrkNo, String startPoint, String targetPoint, Integer mapType) {
NavigateMapUtils navigateMapUtils = SpringUtils.getBean(NavigateMapUtils.class);
//璁$畻璧风偣鍒扮洰鏍囩偣琛岃蛋鑺傜偣
- List<NavigateNode> calc = NavigateUtils.calc(startPoint, targetPoint, mapType, Utils.getShuttlePoints(shuttleNo, Utils.getLev(startPoint)));
+ List<NavigateNode> calc = NavigateUtils.calc(startPoint, targetPoint, mapType, Utils.getShuttlePoints(shuttleNo, Utils.getLev(startPoint)), null);
+ if (calc == null) {
+ return null;
+ }
+
+ //鍛戒护闆嗗悎
+ ArrayList<NyShuttleHttpCommand> commands = new ArrayList<>();
+ List<NavigateNode> allNode = new ArrayList<>();
+
+ //鑾峰彇鍒嗘璺緞
+ ArrayList<ArrayList<NavigateNode>> data = NavigateUtils.getSectionPath(calc);
+ //灏嗘瘡涓�娈佃矾寰勫垎鎴恈ommand鎸囦护
+ for (ArrayList<NavigateNode> nodes : data) {
+ //寮�濮嬭矾寰�
+ NavigateNode startPath = nodes.get(0);
+ //鐩爣璺緞
+ NavigateNode targetPath = nodes.get(nodes.size() - 1);
+ //鑾峰彇绉诲姩鍛戒护
+ NyShuttleHttpCommand moveCommand = NyHttpUtils.getMoveCommand(shuttleNo, wrkNo, startPath, targetPath);
+ moveCommand.setNodes(nodes);//灏嗚璧拌妭鐐规坊鍔犲埌姣忎竴姝ュ懡浠や腑
+ commands.add(moveCommand);
+
+ allNode.addAll(nodes);
+ }
+
+ navigateMapUtils.writeNavigateNodeToRedisMap(Utils.getLev(startPoint), allNode, true);//閿佸畾璺緞
+ return result(commands, calc);
+ }
+
+ /**
+ * 鑾峰彇璧风偣鍒扮洰鏍囩偣琛岃蛋鍛戒护(鍙紶鐧藉悕鍗�)
+ */
+ public static NyShuttleOperaResult getStartToTargetCommandsByWhites(Integer shuttleNo, Integer wrkNo, String startPoint, String targetPoint, Integer mapType, List<int[]> whites) {
+ NavigateMapUtils navigateMapUtils = SpringUtils.getBean(NavigateMapUtils.class);
+ //璁$畻璧风偣鍒扮洰鏍囩偣琛岃蛋鑺傜偣
+ List<NavigateNode> calc = NavigateUtils.calc(startPoint, targetPoint, mapType, Utils.getShuttlePoints(shuttleNo, Utils.getLev(startPoint)), whites);
if (calc == null) {
return null;
}
diff --git a/src/main/java/com/zy/common/utils/ShuttleDispatchUtils.java b/src/main/java/com/zy/common/utils/ShuttleDispatchUtils.java
index f17d9be..77e40a2 100644
--- a/src/main/java/com/zy/common/utils/ShuttleDispatchUtils.java
+++ b/src/main/java/com/zy/common/utils/ShuttleDispatchUtils.java
@@ -130,7 +130,7 @@
//褰撳墠绌挎杞﹀簱浣嶅彿
String currentLocNo = shuttleThread.getShuttleProtocol().getCurrentLocNo();
//褰撳墠绌挎杞︾嚎绋嬪埌鐩爣鍦扮偣璺濈
- List<NavigateNode> currentShuttlePath = NavigateUtils.calc(currentLocNo, locNo, NavigationMapType.NORMAL.id, Utils.getShuttlePoints(shuttleThread.getSlave().getId(), Utils.getLev(currentLocNo)));//鎼滅储绌洪棽绌挎杞︼紝浣跨敤姝e父閫氶亾鍦板浘
+ List<NavigateNode> currentShuttlePath = NavigateUtils.calc(currentLocNo, locNo, NavigationMapType.NORMAL.id, Utils.getShuttlePoints(shuttleThread.getSlave().getId(), Utils.getLev(currentLocNo)), null);//鎼滅储绌洪棽绌挎杞︼紝浣跨敤姝e父閫氶亾鍦板浘
if (currentShuttlePath == null) {
continue;
}
@@ -414,7 +414,7 @@
String locNo = liftStaProtocol.getLocNo();//绔欑偣搴撲綅鍙�
//褰撳墠绌挎杞︾嚎绋嬪埌鐩爣鍦扮偣璺濈
- List<NavigateNode> currentShuttlePath = NavigateUtils.calc(currentLocNo, locNo, NavigationMapType.NORMAL.id, Utils.getShuttlePoints(shuttleNo, Utils.getLev(currentLocNo)));//浣跨敤姝e父閫氶亾鍦板浘
+ List<NavigateNode> currentShuttlePath = NavigateUtils.calc(currentLocNo, locNo, NavigationMapType.NORMAL.id, Utils.getShuttlePoints(shuttleNo, Utils.getLev(currentLocNo)), null);//浣跨敤姝e父閫氶亾鍦板浘
if (currentShuttlePath == null) {
continue;
}
--
Gitblit v1.9.1