| | |
| | | import com.zy.asrs.entity.BasShuttle; |
| | | import com.zy.asrs.service.BasShuttleService; |
| | | 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; |
| | |
| | | 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()); |
| | |
| | | |
| | | carMap.put(currentLocNo, slave.getId()); |
| | | } |
| | | 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)) { |
| | |
| | | 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); |
| | | |
| | |
| | | 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); |
| | | |
| | |
| | | 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; |
| | |
| | | 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); |
| | | } |
| | | } |
| | | } |
| | | |
| | |
| | | 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方向 |
| | |
| | | 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); |
| | | } |
| | | } |
| | | } |
| | | |
| | |
| | | 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 { |