#
luxiaotao1123
2024-12-17 082ce62245f66477bb8d97384632a41a1c67c5f8
#
4个文件已修改
98 ■■■■■ 已修改文件
zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/RetreatNavigateService.java 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/astart/AStarNavigateService.java 58 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/astart/NavigateNode.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/astart/RetreatNavigateNode.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/RetreatNavigateService.java
@@ -80,13 +80,13 @@
        RetreatNavigateNode finialNode = null;
        PriorityQueue<RetreatNavigateNode> openQueue = new PriorityQueue<>();
        ArrayList<RetreatNavigateNode> existNodes = new ArrayList<>();
        Set<RetreatNavigateNode> existNodes = new HashSet<>();
        openQueue.add(start);
        existNodes.add(start);
        boolean phaseSecond = true;
        while (openQueue.size() > 0 && null == finialNode) {
        while (!openQueue.isEmpty() && null == finialNode) {
            RetreatNavigateNode currentNode = openQueue.poll();
@@ -203,7 +203,7 @@
            int actualLanesOfTurn = 0;
            int filterPointOfTurnTimes = 0;
            while (openQueue.size() > 0 && null == finialNode) {
            while (!openQueue.isEmpty() && null == finialNode) {
                RetreatNavigateNode currentNode = openQueue.poll();
                List<RetreatNavigateNode> enableNodes = new ArrayList<>();
@@ -315,7 +315,7 @@
    }
    // 获取四周节点
    private ArrayList<RetreatNavigateNode> getNeighborNodes(RetreatNavigateNode currentNode, List<RetreatNavigateNode> existNodes) {
    private ArrayList<RetreatNavigateNode> getNeighborNodes(RetreatNavigateNode currentNode, Set<RetreatNavigateNode> existNodes) {
        int x = currentNode.getX();
        int y = currentNode.getY();
@@ -345,7 +345,7 @@
        return neighbourNodes;
    }
    private RetreatNavigateNode extendNeighborNodes(RetreatNavigateNode currentNode, RetreatNavigateNode extendNode, List<RetreatNavigateNode> existNodes, Integer dx, Integer dy) {
    private RetreatNavigateNode extendNeighborNodes(RetreatNavigateNode currentNode, RetreatNavigateNode extendNode, Set<RetreatNavigateNode> existNodes, Integer dx, Integer dy) {
        RetreatNavigateNode nextNode;
        if (null == dx || null == dy) {
@@ -371,7 +371,7 @@
            return extendNeighborNodes(currentNode, nextNode, existNodes, dx, dy);
        } else {
            if (this.isExist(nextNode, existNodes)) {
            if (existNodes.contains(nextNode)) {
                return null;
            }
zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/astart/AStarNavigateService.java
@@ -50,7 +50,7 @@
        Integer maxAgvCountInLane = configService.getVal("maxAgvCountInLane", Integer.class);
        PriorityQueue<NavigateNode> openQueue = new PriorityQueue<>();
        ArrayList<NavigateNode> existNodes = new ArrayList<>();
        Set<NavigateNode> existNodes = new HashSet<>();
        openQueue.add(start);
        existNodes.add(start);
@@ -59,7 +59,7 @@
        DynamicNode[][] dynamicMatrix = mapDataDispatcher.getDynamicMatrix(null);
        String[][] waveMatrix = mapDataDispatcher.getWaveMatrix(null);
        while (openQueue.size() > 0) {
        while (!openQueue.isEmpty()) {
            // 取优先队列顶部元素并且把这个元素从Open表中删除,取F值最小的节点
            NavigateNode currentNode = openQueue.poll();
@@ -175,7 +175,7 @@
    }
    // 获取四周节点
    private ArrayList<NavigateNode> getNeighborNodes(NavigateNode currentNode, int[][] mapMatrix, List<NavigateNode> existNodes) {
    private ArrayList<NavigateNode> getNeighborNodes(NavigateNode currentNode, int[][] mapMatrix, Set<NavigateNode> existNodes) {
        //获取当前结点的x, y
        int x = currentNode.getX();
        int y = currentNode.getY();
@@ -183,29 +183,29 @@
        ArrayList<NavigateNode> neighbourNodes = new ArrayList<>();
        NavigateNode rightNode = extendNeighborNodes(currentNode, new NavigateNode(x, y + 1), mapMatrix, existNodes, null, null);
        if (is_valid(currentNode, rightNode, mapMatrix, existNodes)) {
        if (is_valid(currentNode, rightNode)) {
            neighbourNodes.add(rightNode);
        }
        NavigateNode leftNode = extendNeighborNodes(currentNode, new NavigateNode(x, y - 1), mapMatrix, existNodes, null, null);
        if (is_valid(currentNode, leftNode, mapMatrix, existNodes)) {
        if (is_valid(currentNode, leftNode)) {
            neighbourNodes.add(leftNode);
        }
        NavigateNode topNode = extendNeighborNodes(currentNode, new NavigateNode(x - 1, y), mapMatrix, existNodes, null, null);
        if (is_valid(currentNode, topNode, mapMatrix, existNodes)) {
        if (is_valid(currentNode, topNode)) {
            neighbourNodes.add(topNode);
        }
        NavigateNode bottomNode = extendNeighborNodes(currentNode, new NavigateNode(x + 1, y), mapMatrix, existNodes, null, null);
        if (is_valid(currentNode, bottomNode, mapMatrix, existNodes)) {
        if (is_valid(currentNode, bottomNode)) {
            neighbourNodes.add(bottomNode);
        }
        return neighbourNodes;
    }
    private NavigateNode extendNeighborNodes(NavigateNode currentNode, NavigateNode extendNode, int[][] mapMatrix, List<NavigateNode> existNodes, Integer dx, Integer dy) {
    private NavigateNode extendNeighborNodes(NavigateNode currentNode, NavigateNode extendNode, int[][] mapMatrix, Set<NavigateNode> existNodes, Integer dx, Integer dy) {
        NavigateNode nextNode = null;
        if (null == dx || null == dy) {
@@ -230,7 +230,7 @@
        } else {
            if (isExist(nextNode, existNodes)) {
            if (existNodes.contains(nextNode)) {
                return null;
            }
@@ -257,49 +257,12 @@
        }
    }
    private boolean is_valid(NavigateNode currentNode, NavigateNode node, int[][] mapMatrix, List<NavigateNode> existNodes) {
    private boolean is_valid(NavigateNode currentNode, NavigateNode node) {
        if (null == node) {
            return false;
        }
//        int x = node.getX();
//        int y = node.getY();
//        if (x < 0 || x >= mapMatrix.length
//                || y < 0 || y >= mapMatrix[0].length) {
//            return false;
//        }
//
//        // 如果结点的位置小于0,则不合法
//        if (mapMatrix[x][y] < 0) return false;
//
//        if (is_exist(node, existNodes)) {
//            return false;
//        }
//
//        // 判断通过性
//        String[][] codeMatrix = mapDataDispatcher.getCodeMatrix(null);
//        String currentNodeCodeData = codeMatrix[currentNode.getX()][currentNode.getY()];
//        String nextNodeCodeData = codeMatrix[node.getX()][node.getY()];
//        node.setCodeData(nextNodeCodeData);
//
//        Route route = routeService.findByCodeOfBoth(
//                codeService.selectByData(currentNodeCodeData).getId(),
//                codeService.selectByData(nextNodeCodeData).getId()
//        );
//        if (null == route) {
//            return false;
//        }
        return true;
    }
//    private boolean is_exist(NavigateNode node, List<NavigateNode> existNodes) {
//        for (NavigateNode exist_node : existNodes) {
//            if (node.getX() == exist_node.getX() && node.getY() == exist_node.getY()) {
//                return true;
//            }
//        }
//        return false;
//    }
    private boolean isExist(NavigateNode node, List<NavigateNode> existNodes) {
        for (NavigateNode existNode : existNodes) {
@@ -324,7 +287,6 @@
//        Code code1 = codeService.selectByData(node1.getCodeData());
//        Code code2 = codeService.selectByData(node2.getCodeData());
//        return (int) (Math.abs(code2.getX() - code1.getX()) + Math.abs(code2.getY() - code1.getY()));
        return Math.abs(node2.getX() - node1.getX()) + Math.abs(node2.getY() - node1.getY());
    }
zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/astart/NavigateNode.java
@@ -3,6 +3,7 @@
import lombok.Data;
import java.io.Serializable;
import java.util.Objects;
import java.util.Optional;
/**
@@ -74,4 +75,18 @@
        }
        return null;
    }
    @Override
    public boolean equals(Object obj) {
        if (this == obj) return true;
        if (!(obj instanceof NavigateNode)) return false;
        NavigateNode that = (NavigateNode) obj;
        return this.x == that.x && this.y == that.y;
    }
    @Override
    public int hashCode() {
        return Objects.hash(x, y);
    }
}
zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/astart/RetreatNavigateNode.java
@@ -3,6 +3,7 @@
import lombok.Data;
import java.io.Serializable;
import java.util.Objects;
import java.util.Optional;
@Data
@@ -68,5 +69,17 @@
        return null;
    }
    @Override
    public boolean equals(Object obj) {
        if (this == obj) return true;
        if (!(obj instanceof RetreatNavigateNode)) return false;
        RetreatNavigateNode that = (RetreatNavigateNode) obj;
        return this.x == that.x && this.y == that.y;
    }
    @Override
    public int hashCode() {
        return Objects.hash(x, y);
    }
}