#
Junjie
2025-05-23 a37eb3393b65933105a6f23a1713a2b14b835d16
src/main/java/com/zy/common/utils/ShuttleOperaUtils.java
@@ -260,13 +260,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;
@@ -331,7 +333,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 +374,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 +397,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 +504,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) {