From c0d2dc7614b173e0ea4c78c6f899ab732542127a Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期日, 13 七月 2025 19:54:28 +0800
Subject: [PATCH] #
---
src/main/java/com/zy/common/utils/ShuttleOperaUtils.java | 155 ++++++++++++++++++++++++++++++++++++++++++---------
1 files changed, 126 insertions(+), 29 deletions(-)
diff --git a/src/main/java/com/zy/common/utils/ShuttleOperaUtils.java b/src/main/java/com/zy/common/utils/ShuttleOperaUtils.java
index 9292a44..b9d252e 100644
--- a/src/main/java/com/zy/common/utils/ShuttleOperaUtils.java
+++ b/src/main/java/com/zy/common/utils/ShuttleOperaUtils.java
@@ -4,10 +4,12 @@
import com.core.common.SpringUtils;
import com.core.exception.CoolException;
import com.zy.asrs.entity.BasShuttle;
+import com.zy.asrs.entity.DeviceConfig;
import com.zy.asrs.service.BasShuttleService;
+import com.zy.asrs.service.DeviceConfigService;
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.News;
import com.zy.core.cache.SlaveConnection;
import com.zy.core.dispatcher.ShuttleDispatchUtils;
@@ -18,7 +20,6 @@
import com.zy.core.model.command.ShuttleAssignCommand;
import com.zy.core.model.command.ShuttleCommand;
import com.zy.core.model.protocol.ShuttleProtocol;
-import com.zy.core.properties.SlaveProperties;
import com.zy.core.thread.ShuttleThread;
import com.zy.system.entity.Config;
import com.zy.system.service.ConfigService;
@@ -45,9 +46,9 @@
@Autowired
private ConfigService configService;
@Autowired
- private SlaveProperties slaveProperties;
- @Autowired
private ShuttleDispatchUtils shuttleDispatchUtils;
+ @Autowired
+ private DeviceConfigService deviceConfigService;
public synchronized List<ShuttleCommand> getStartToTargetCommands(String startLocNo, String endLocNo, Integer mapType, ShuttleAssignCommand assignCommand, ShuttleThread shuttleThread) {
return getStartToTargetCommands(startLocNo, endLocNo, mapType, null, assignCommand, shuttleThread);
@@ -260,22 +261,36 @@
continue;
}
- int nextInt = new Random().nextInt(outerNodes.size());
- NavigateNode randomNode = outerNodes.get(nextInt);
- String randomLocNo = NavigatePositionConvert.nodeToLocNo(randomNode);
- shuttleDispatchUtils.dispatchShuttle(null, randomLocNo, shuttleNo);
+ String targetLocNo = null;
+ for (NavigateNode node : outerNodes) {
+ String dispatchLocNo = NavigatePositionConvert.nodeToLocNo(node);
+ //鑾峰彇鍐呭湀鑺傜偣
+ List<NavigateNode> avoidInnerNodes = getInnerNodes(dispatchLocNo, innerCircle, new ArrayList<>());
+ //璁$畻鍐呭湀鏄惁鏈夊皬杞�
+ List<Integer> avoidNodesCar = findNodesCar(avoidInnerNodes);
+ if(!avoidNodesCar.isEmpty()) {
+ continue;
+ }
+ targetLocNo = dispatchLocNo;
+ break;
+ }
+
+ if(targetLocNo == null) {
+ continue;
+ }
+ shuttleDispatchUtils.dispatchShuttle(null, targetLocNo, shuttleNo);
}
return true;//鍐呭湀涓湁杞�
}
- //鎼滅储鑺傜偣鍐呯殑灏忚溅缂栧彿
- private List<Integer> findNodesCar(List<NavigateNode> nodes) {
- List<Integer> list = new ArrayList<>();
-
+ private HashMap<String, Integer> findCarMap() {
HashMap<String, Integer> carMap = new HashMap<>();
- for (ShuttleSlave slave : slaveProperties.getShuttle()) {
- ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, slave.getId());
+
+ List<DeviceConfig> shuttleList = deviceConfigService.selectList(new EntityWrapper<DeviceConfig>()
+ .eq("device_type", String.valueOf(SlaveType.Shuttle)));
+ for (DeviceConfig device : shuttleList) {
+ ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, device.getDeviceNo());
if (shuttleThread == null) {
continue;
}
@@ -288,9 +303,15 @@
continue;
}
- carMap.put(currentLocNo, slave.getId());
+ carMap.put(currentLocNo, device.getDeviceNo());
}
+ return carMap;
+ }
+ //鎼滅储鑺傜偣鍐呯殑灏忚溅缂栧彿
+ private List<Integer> findNodesCar(List<NavigateNode> nodes) {
+ List<Integer> list = new ArrayList<>();
+ HashMap<String, Integer> carMap = findCarMap();
for (NavigateNode node : nodes) {
String locNo = NavigatePositionConvert.nodeToLocNo(node);
if (carMap.containsKey(locNo)) {
@@ -307,14 +328,16 @@
int lev = Utils.getLev(locNo);
int[] pointArr = NavigatePositionConvert.positionToXY(locNo);
NavigateNode currentNode = new NavigateNode(pointArr[0], pointArr[1]);
+ currentNode.setZ(lev);
- int[][] map = navigateMapData.getDataFromRedis(lev, NavigationMapType.NORMAL.id, null, whiteShuttlePointList);
+ List<List<MapNode>> lists = navigateMapData.getJsonData(lev, -1, null, null);//鑾峰彇瀹屾暣鍦板浘
+ int[][] map = navigateMapData.parseJsonDataArr(lists);
int nodeValue = map[pointArr[0]][pointArr[1]];
currentNode.setNodeValue(nodeValue);
for (int i = 0; i < outerCircle; i++) {
int idx = i + 1;
- List<NavigateNode> list = extend_nodes(map, currentNode, idx);
+ List<NavigateNode> list = extend_outer_nodes(map, currentNode, idx);
if (list.isEmpty()) {
continue;
}
@@ -348,23 +371,37 @@
currentNode.setZ(lev);
innerNodes.add(currentNode);
- int[][] map = navigateMapData.getDataFromRedis(lev, NavigationMapType.NORMAL.id, null, whiteShuttlePointList);
+ List<List<MapNode>> lists = navigateMapData.getJsonData(lev, -1, null, null);//鑾峰彇瀹屾暣鍦板浘
+ int[][] map = navigateMapData.parseJsonDataArr(lists);
int nodeValue = map[pointArr[0]][pointArr[1]];
currentNode.setNodeValue(nodeValue);
for (int i = 0; i < innerCircle; i++) {
int idx = i + 1;
- List<NavigateNode> list = extend_nodes(map, currentNode, idx);
+ List<NavigateNode> list = extend_inner_nodes(map, currentNode, idx);
if (list.isEmpty()) {
continue;
}
- innerNodes.addAll(list);
+
+ for (NavigateNode node : list) {
+ boolean flag = false;
+ for (int[] shuttlePoint : whiteShuttlePointList) {
+ if(node.getX() == shuttlePoint[0] && node.getY() == shuttlePoint[1]) {
+ flag = true;
+ break;
+ }
+ }
+ if(flag) {
+ continue;
+ }
+ innerNodes.add(node);
+ }
}
return innerNodes;
}
- private List<NavigateNode> extend_nodes(int[][] map, NavigateNode startNode, int innerCircleIdx) {
+ private List<NavigateNode> extend_inner_nodes(int[][] map, NavigateNode startNode, int innerCircleIdx) {
//榛樿鍦板浘姣嶈建鏂瑰悜x
String mapDirection = "x";
ConfigService configService = SpringUtils.getBean(ConfigService.class);
@@ -389,13 +426,17 @@
NavigateNode node = new NavigateNode(x + innerCircleIdx, y);
node.setNodeValue(map[x + innerCircleIdx][y]);
node.setZ(z);
- nodes.add(node);
+ if (node.getNodeValue().equals(startNode.getNodeValue())) {
+ nodes.add(node);
+ }
}
if (is_valid(map, x - innerCircleIdx, y)) {
NavigateNode node = new NavigateNode(x - innerCircleIdx, y);
node.setNodeValue(map[x - innerCircleIdx][y]);
node.setZ(z);
- nodes.add(node);
+ if (node.getNodeValue().equals(startNode.getNodeValue())) {
+ nodes.add(node);
+ }
}
}
@@ -405,14 +446,18 @@
NavigateNode node = new NavigateNode(x, y + innerCircleIdx);
node.setNodeValue(map[x][y + innerCircleIdx]);
node.setZ(z);
- nodes.add(node);
+ if (node.getNodeValue().equals(startNode.getNodeValue())) {
+ nodes.add(node);
+ }
}
if (is_valid(map, x, y - innerCircleIdx)) {
NavigateNode node = new NavigateNode(x, y - innerCircleIdx);
node.setNodeValue(map[x][y - innerCircleIdx]);
node.setZ(z);
- nodes.add(node);
+ if (node.getNodeValue().equals(startNode.getNodeValue())) {
+ nodes.add(node);
+ }
}
}
}else if (mapDirection.equals("y")) {//姣嶈建y鏂瑰悜
@@ -422,14 +467,18 @@
NavigateNode node = new NavigateNode(x, y + innerCircleIdx);
node.setNodeValue(map[x][y + innerCircleIdx]);
node.setZ(z);
- nodes.add(node);
+ if (node.getNodeValue().equals(startNode.getNodeValue())) {
+ nodes.add(node);
+ }
}
if (is_valid(map, x, y - innerCircleIdx)) {
NavigateNode node = new NavigateNode(x, y - innerCircleIdx);
node.setNodeValue(map[x][y - innerCircleIdx]);
node.setZ(z);
- nodes.add(node);
+ if (node.getNodeValue().equals(startNode.getNodeValue())) {
+ nodes.add(node);
+ }
}
}
@@ -439,13 +488,17 @@
NavigateNode node = new NavigateNode(x + innerCircleIdx, y);
node.setNodeValue(map[x + innerCircleIdx][y]);
node.setZ(z);
- nodes.add(node);
+ if (node.getNodeValue().equals(startNode.getNodeValue())) {
+ nodes.add(node);
+ }
}
if (is_valid(map, x - innerCircleIdx, y)) {
NavigateNode node = new NavigateNode(x - innerCircleIdx, y);
node.setNodeValue(map[x - innerCircleIdx][y]);
node.setZ(z);
- nodes.add(node);
+ if (node.getNodeValue().equals(startNode.getNodeValue())) {
+ nodes.add(node);
+ }
}
}
}else {
@@ -455,6 +508,50 @@
return nodes;
}
+ private List<NavigateNode> extend_outer_nodes(int[][] map, NavigateNode startNode, int innerCircleIdx) {
+ ArrayList<NavigateNode> nodes = new ArrayList<>();
+ int x = startNode.getX();
+ int y = startNode.getY();
+ int z = startNode.getZ();
+
+ if (is_valid(map, x + innerCircleIdx, y)) {
+ NavigateNode node = new NavigateNode(x + innerCircleIdx, y);
+ node.setNodeValue(map[x + innerCircleIdx][y]);
+ node.setZ(z);
+ if (node.getNodeValue().equals(startNode.getNodeValue())) {
+ nodes.add(node);
+ }
+ }
+
+ if (is_valid(map, x - innerCircleIdx, y)) {
+ NavigateNode node = new NavigateNode(x - innerCircleIdx, y);
+ node.setNodeValue(map[x - innerCircleIdx][y]);
+ node.setZ(z);
+ if (node.getNodeValue().equals(startNode.getNodeValue())) {
+ nodes.add(node);
+ }
+ }
+
+ if (is_valid(map, x, y + innerCircleIdx)) {
+ NavigateNode node = new NavigateNode(x, y + innerCircleIdx);
+ node.setNodeValue(map[x][y + innerCircleIdx]);
+ node.setZ(z);
+ if (node.getNodeValue().equals(startNode.getNodeValue())) {
+ nodes.add(node);
+ }
+ }
+
+ if (is_valid(map, x, y - innerCircleIdx)) {
+ NavigateNode node = new NavigateNode(x, y - innerCircleIdx);
+ node.setNodeValue(map[x][y - innerCircleIdx]);
+ node.setZ(z);
+ if (node.getNodeValue().equals(startNode.getNodeValue())) {
+ nodes.add(node);
+ }
+ }
+ return nodes;
+ }
+
private boolean is_valid(int[][] map, int x, int y) {
if (x < 0 || x >= map.length
|| y < 0 || y >= map[0].length) {
--
Gitblit v1.9.1