#
luxiaotao1123
2024-12-05 4661519afdd8c30ffeafa38ba95358e97c1ba65d
zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/astart/AStarNavigateService.java
@@ -59,35 +59,26 @@
        DynamicNode[][] dynamicMatrix = mapDataDispatcher.getDynamicMatrix(null);
        String[][] waveMatrix = mapDataDispatcher.getWaveMatrix(null);
//        List<String> included = new ArrayList<>();
//        if (!Cools.isEmpty(whiteList)) {
//            included.addAll(whiteList);
//        }
//        included.add(agvNo);
//        List<VehicleDto> vehicleDtoList = agvService.getVehicleDtoList(included);
        while (openQueue.size() > 0) {
            // 取优先队列顶部元素并且把这个元素从Open表中删除,取F值最小的节点
            NavigateNode currentNode = openQueue.poll();
            // 对当前结点进行扩展,得到一个四周结点的数组
            ArrayList<NavigateNode> neighbourNodes = this.getNeighborNodes(currentNode, mapMatrix, existNodes);
            // 对这个结点遍历,看是否有目标结点出现
            label: for (NavigateNode node : neighbourNodes) {
            for (NavigateNode node : neighbourNodes) {
                boolean isEndNode = node.getX() == end.getX() && node.getY() == end.getY();
                int weight = 0;
                // 节点存在其他车辆
//                for (VehicleDto vehicleDto : vehicleDtoList) {
//                    if (node.getCodeData().equals(vehicleDto.getPosCode())) {
//                        if (!Cools.isEmpty(blackList) && blackList.contains(vehicleDto.getVehicle())) {
//                            continue label;
//                        }
//                        if (lock) {
//                            continue label;
//                        }
//                    }
//                }
                if (!Cools.isEmpty(blackList) && blackList.contains(node.getCodeData())) {
                    continue;
                }
                // 特殊情况,当blackList有且只有一个元素且为startNode时
                // 说明blackList已经知道当前导航起始点和目标点为相邻节点
                // 但是当前blackList的任务是不让系统走相邻的最短路径,所以才会有下面的判断和continue
                if (blackList.size() == 1 && blackList.get(0).equals(start.getCodeData())) {
                    if (isEndNode && currentNode.getCodeData().equals(start.getCodeData())) {
                        continue;
                    }
                }
                // 节点被占用
@@ -97,7 +88,7 @@
                if (!vehicle.equals(DynamicNodeType.ACCESS.val)) {
                    if (!vehicle.equals(agvNo)) {
                        // 存在车辆,且为已经避让的车,则权重值增加
                        // vehicle已经为当前segment做过了避让,且避让任务已完成,则权重值增加
                        if (null != segment) {
                            if (!Cools.isEmpty(jamService.getJamFromSegmentByAvo(segment, vehicle))) {
                                weight += WEIGHT_CALC_FACTOR;
@@ -146,16 +137,13 @@
                    }
                    if (lanVehicleSet.size() + 1 > maxAgvCountInLane) {
//                        if (lock) {
//                            continue;
//                        }
                        continue;
                    }
                }
                //找到目标结点就返回
                if (node.getX() == end.getX() && node.getY() == end.getY()) {
                if (isEndNode) {
                    //并且计算出G, F, H等值
                    node.initNode(currentNode, end);
                    return node;