#
luxiaotao1123
2024-12-18 93d8a38f9fd0746b9ce6ac7541bf2b8b48f7c63c
zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/RetreatNavigateService.java
@@ -1,5 +1,6 @@
package com.zy.acs.manager.core.service;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.zy.acs.common.utils.RedisSupport;
import com.zy.acs.common.utils.Utils;
import com.zy.acs.framework.common.Cools;
@@ -8,12 +9,12 @@
import com.zy.acs.manager.core.domain.Lane;
import com.zy.acs.manager.core.service.astart.*;
import com.zy.acs.manager.core.service.astart.domain.DynamicNode;
import com.zy.acs.manager.manager.entity.Code;
import com.zy.acs.manager.manager.entity.Jam;
import com.zy.acs.manager.manager.entity.Route;
import com.zy.acs.manager.manager.service.AgvModelService;
import com.zy.acs.manager.manager.service.AgvService;
import com.zy.acs.manager.manager.service.CodeService;
import com.zy.acs.manager.manager.service.RouteService;
import com.zy.acs.manager.manager.entity.Segment;
import com.zy.acs.manager.manager.enums.JamStateType;
import com.zy.acs.manager.manager.service.*;
import com.zy.acs.manager.system.service.ConfigService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
@@ -49,6 +50,10 @@
    private LaneService laneService;
    @Autowired
    private ConfigService configService;
    @Autowired
    private SegmentService segmentService;
    @Autowired
    private JamService jamService;
    /**
     * avoidPathList ===>>  [ minor vehicle ] [wave] [ curr vehicle ] [ code2 ] [ code3 ] ......
@@ -75,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();
@@ -91,6 +96,7 @@
            boolean pointOfTurn = neighborNodes.size() >= 2;
            label: for (RetreatNavigateNode node : neighborNodes) {
                if (node.getCodeData().equals(breakPoint)) { continue; }
                Code code = codeService.selectByData(node.getCodeData());
                int weight = 0;
@@ -105,7 +111,7 @@
                            continue label;
                        }
                        if (1 < mapDataDispatcher.queryCodeListFromDynamicNode(lev, otherWave).size()) {
                            phaseSecond = false;    // there is a way to go
                            phaseSecond = false;    // there is a running way
                            continue label;
                        } else {
                            weight += WEIGHT_CALC_FACTOR;
@@ -139,12 +145,25 @@
                        }
                        if (lanVehicleSet.size() + 1 > maxAgvCountInLane) {
                            phaseSecond = false;    // there is a way to go
                            phaseSecond = false;    // there is a running way
                            continue;
                        }
                        if (lanVehicleSet.contains(sponsor)) {
                            weight += WEIGHT_CALC_FACTOR * 2;
                        }
                    }
                }
                // judge whether the node has already been marked as a retreat node?
                // This is a very troublesome matter, if the node be repeatedly mark as a retreat node
                List<Segment> runningSegments = segmentService.getRunningByEndCode(code.getId());
                for (Segment runningSeg : runningSegments) {
                    if (0 < jamService.count(new LambdaQueryWrapper<Jam>()
                            .eq(Jam::getAvoSeg, runningSeg.getId())
                            .ne(Jam::getState, JamStateType.DEPRECATED.toString()))) {
                        weight += WEIGHT_CALC_FACTOR * 3;
                    } else {
                        weight += WEIGHT_CALC_FACTOR;
                    }
                }
@@ -184,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<>();
@@ -296,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();
@@ -326,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) {
@@ -352,7 +371,7 @@
            return extendNeighborNodes(currentNode, nextNode, existNodes, dx, dy);
        } else {
            if (this.isExist(nextNode, existNodes)) {
            if (existNodes.contains(nextNode)) {
                return null;
            }