From 6bad808389ec9d4c7331bb471c1410b50893fc1c Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期二, 28 三月 2023 15:35:23 +0800
Subject: [PATCH] 四向车下命令时计算移动距离
---
src/main/java/com/zy/common/model/NavigateNode.java | 1
src/main/java/com/zy/core/thread/ShuttleThread.java | 24 ++++++++---
src/main/java/com/zy/common/utils/NavigateUtils.java | 38 ++++++++++++++++++
src/main/java/com/zy/common/utils/NavigateMapData.java | 49 ++++++++++++++++++++++++
4 files changed, 104 insertions(+), 8 deletions(-)
diff --git a/src/main/java/com/zy/common/model/NavigateNode.java b/src/main/java/com/zy/common/model/NavigateNode.java
index 70e56ac..5f769e2 100644
--- a/src/main/java/com/zy/common/model/NavigateNode.java
+++ b/src/main/java/com/zy/common/model/NavigateNode.java
@@ -16,6 +16,7 @@
private NavigateNode Father;//鐖惰妭鐐�
private Boolean isInflectionPoint;//鏄惁涓烘嫄鐐�
private String direction;//琛岃蛋鏂瑰悜
+ private Integer moveDistance;//琛岃蛋璺濈
public NavigateNode(int x, int y) {
this.x = x;
diff --git a/src/main/java/com/zy/common/utils/NavigateMapData.java b/src/main/java/com/zy/common/utils/NavigateMapData.java
index d463714..38e2a3f 100644
--- a/src/main/java/com/zy/common/utils/NavigateMapData.java
+++ b/src/main/java/com/zy/common/utils/NavigateMapData.java
@@ -66,4 +66,53 @@
return null;
}
+ //鑾峰彇JSON鏍煎紡鏁版嵁
+ public ArrayList<ArrayList<JSONObject>> getJsonData(Integer mapType) {
+ try {
+ String mapFilename = "";
+ if (mapType == ShuttleTaskModeType.PAK_IN.id) {
+ //鍏ュ簱鍦板浘
+ mapFilename = "mapIn.json";
+ }else {
+ //鍑哄簱鍦板浘
+ mapFilename = "mapOut.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();
+
+ //杩斿洖鐨勭粨鏋滈泦
+ ArrayList<ArrayList<JSONObject>> returnLists = new ArrayList<>();
+
+ //瑙f瀽json鍦板浘鏁版嵁
+ ArrayList arrayList = JSON.parseObject(stringBuffer.toString(), ArrayList.class);
+ for (Object obj : arrayList) {
+ ArrayList list = JSON.parseObject(obj.toString(), ArrayList.class);
+ ArrayList<JSONObject> maps = new ArrayList<>();
+ for (Object o : list) {
+ JSONObject jsonObject = JSON.parseObject(o.toString());
+ maps.add(jsonObject);
+ }
+ returnLists.add(maps);
+ }
+
+ return returnLists;
+ } else {
+ System.out.println("鏂囦欢涓嶅瓨鍦�!");
+ }
+ } catch (IOException ioException) {
+ ioException.printStackTrace();
+ }
+ return null;
+ }
+
}
diff --git a/src/main/java/com/zy/common/utils/NavigateUtils.java b/src/main/java/com/zy/common/utils/NavigateUtils.java
index fd743d4..4be9c78 100644
--- a/src/main/java/com/zy/common/utils/NavigateUtils.java
+++ b/src/main/java/com/zy/common/utils/NavigateUtils.java
@@ -1,5 +1,6 @@
package com.zy.common.utils;
+import com.alibaba.fastjson.JSONObject;
import com.zy.common.model.NavigateNode;
import com.zy.core.enums.ShuttleTaskModeType;
@@ -141,6 +142,8 @@
//鐩磋绾胯矾
mapNode.setDirection(direction);//璁剧疆琛岃蛋鏂瑰悜
}
+ Integer distance = getXToNextDistance(mapNode);//鑾峰彇褰撳墠鐐瑰埌涓嬩竴鐐圭殑琛岃蛋璺濈
+ mapNode.setMoveDistance(distance);
}
//灏嗘渶鍚庝竴娈垫暟鎹坊鍔犺繘鍏�
@@ -149,15 +152,48 @@
return list;
}
+ //鑾峰彇浠巟鐐瑰埌涓嬩竴鐐圭殑琛岃蛋璺濈
+ public static Integer getXToNextDistance(NavigateNode xNode) {
+ NavigateMapData mapData = new NavigateMapData();
+ ArrayList<ArrayList<JSONObject>> lists = mapData.getJsonData(1);
+ if (lists != null) {
+ JSONObject jsonObject = lists.get(xNode.getX()).get(xNode.getY());
+ if (jsonObject != null) {
+ return Integer.parseInt(jsonObject.getOrDefault(xNode.getDirection(), 0).toString());
+ }
+ return 0;
+ }
+ return 0;
+ }
+
+ /**
+ * 鑾峰彇褰撳墠璺緞鎬昏璧拌窛绂�
+ */
+ public static Integer getCurrentPathAllDistance(ArrayList<NavigateNode> path) {
+ if (path.size() == 1) {
+ //璺緞鍙湁涓�鏉℃暟鎹紝鍒欑洿鎺ヨ繑鍥炶璧拌窛绂�
+ return path.get(0).getMoveDistance();
+ }
+
+ //鎬昏窛绂�
+ int allDistance = 0;
+ for (int i = 0; i < path.size() - 1; i++) {//璺緞涓渶鍚庝竴涓妭鐐逛笉缁熻鍒版�昏窛绂伙紝鏈�鍚庝竴涓妭鐐瑰苟涓嶄細鍐嶈璧�
+ allDistance += path.get(i).getMoveDistance();
+ }
+ return allDistance;
+ }
+
public static void main(String[] args) {
//璁$畻璺緞
- List<NavigateNode> calc = calc("1000901", "0201801", ShuttleTaskModeType.PAK_OUT.id);
+ List<NavigateNode> calc = calc("1000901", "1800201", ShuttleTaskModeType.PAK_OUT.id);
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);
}
diff --git a/src/main/java/com/zy/core/thread/ShuttleThread.java b/src/main/java/com/zy/core/thread/ShuttleThread.java
index 03e30b5..7cd4f70 100644
--- a/src/main/java/com/zy/core/thread/ShuttleThread.java
+++ b/src/main/java/com/zy/core/thread/ShuttleThread.java
@@ -341,21 +341,27 @@
ArrayList pathList = JSON.parseObject(data.toString(), ArrayList.class);
//鍙栫涓�鏉¤矾寰�
Object o1 = pathList.get(commandStep);
- ArrayList path = JSON.parseObject(o1.toString(), ArrayList.class);
+ ArrayList objectPath = JSON.parseObject(o1.toString(), ArrayList.class);
+ ArrayList<NavigateNode> path = new ArrayList<>();
+ for (Object o2 : objectPath) {
+ NavigateNode navigateNode = JSON.parseObject(o2.toString(), NavigateNode.class);
+ path.add(navigateNode);
+ }
+ Integer allDistance = NavigateUtils.getCurrentPathAllDistance(path);//璁$畻褰撳墠璺緞琛岃蛋鎬昏窛绂�
size = Integer.parseInt(map.get("pathSize").toString());
//寮�濮嬭矾寰�
- JSONObject startPath = JSON.parseObject(path.get(0).toString());
+ NavigateNode startPath = path.get(0);
//鐩爣璺緞
- JSONObject endPath = JSON.parseObject(path.get(path.size() - 1).toString());
+ NavigateNode endPath = path.get(path.size() - 1);
command.setCommandWord((short) 1);
- command.setStartCodeNum(NavigatePositionConvert.xyToPosition(startPath.getIntValue("x"), startPath.getIntValue("y")));
+ command.setStartCodeNum(NavigatePositionConvert.xyToPosition(startPath.getX(), startPath.getY()));
command.setMiddleCodeNum((short) 0);
- command.setDistCodeNum(NavigatePositionConvert.xyToPosition(endPath.getIntValue("x"), endPath.getIntValue("y")));
- command.setStartToDistDistance(1000);
+ command.setDistCodeNum(NavigatePositionConvert.xyToPosition(endPath.getX(), endPath.getY()));
+ command.setStartToDistDistance(allDistance);
command.setMiddleToDistDistance(1000);
- command.setRunDirection(ShuttleRunDirection.get(startPath.get("direction").toString()).id);
+ command.setRunDirection(ShuttleRunDirection.get(startPath.getDirection()).id);
command.setPalletLift((short) 1);
command.setForceMoveDistance(1000);
command.setChargeSwitch((short) 2);
@@ -431,6 +437,10 @@
//瀵逛富绾跨▼鎶涘嚭绛夊緟纭鐘舵�亀aiting
shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.WAITING);
+ //璁剧疆鍥涘悜绌挎杞︿负绌洪棽鐘舵��
+ shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.IDLE);
+ //浠诲姟鍙锋竻闆�
+ shuttleProtocol.setTaskNo((short) 0);
News.info("鍥涘悜绌挎杞︿换鍔℃墽琛屽畬鎴愮瓑寰呯‘璁や腑锛岀┛姊溅鍙�={}锛屼换鍔℃暟鎹�={}", shuttleProtocol.getShuttleNo(), JSON.toJSON(command));
}
--
Gitblit v1.9.1