From 3c45d4f9f3aba5bc85a9577e43c0dffc71b93a22 Mon Sep 17 00:00:00 2001 From: Junjie <fallin.jie@qq.com> Date: 星期四, 10 七月 2025 15:54:27 +0800 Subject: [PATCH] # --- src/main/java/com/zy/common/utils/ShuttleOperaUtils.java | 76 +++++++++++++++++++++++++++++++------ 1 files changed, 63 insertions(+), 13 deletions(-) diff --git a/src/main/java/com/zy/common/utils/ShuttleOperaUtils.java b/src/main/java/com/zy/common/utils/ShuttleOperaUtils.java index 4c14010..b9d252e 100644 --- a/src/main/java/com/zy/common/utils/ShuttleOperaUtils.java +++ b/src/main/java/com/zy/common/utils/ShuttleOperaUtils.java @@ -4,7 +4,9 @@ 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; @@ -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,13 +261,15 @@ continue; } - HashMap<String, Integer> carMap = findCarMap(); - String targetLocNo = null; for (NavigateNode node : outerNodes) { String dispatchLocNo = NavigatePositionConvert.nodeToLocNo(node); - if (carMap.containsKey(dispatchLocNo)) { - continue; + //鑾峰彇鍐呭湀鑺傜偣 + List<NavigateNode> avoidInnerNodes = getInnerNodes(dispatchLocNo, innerCircle, new ArrayList<>()); + //璁$畻鍐呭湀鏄惁鏈夊皬杞� + List<Integer> avoidNodesCar = findNodesCar(avoidInnerNodes); + if(!avoidNodesCar.isEmpty()) { + continue; } targetLocNo = dispatchLocNo; break; @@ -283,8 +286,11 @@ 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; } @@ -297,7 +303,7 @@ continue; } - carMap.put(currentLocNo, slave.getId()); + carMap.put(currentLocNo, device.getDeviceNo()); } return carMap; } @@ -331,7 +337,7 @@ 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; } @@ -372,7 +378,7 @@ 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; } @@ -395,7 +401,7 @@ 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); @@ -502,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