#
luxiaotao1123
2024-11-05 fe4c6c0439e0dc00f0b09d1818735065d38d3078
zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/TrafficService.java
@@ -6,6 +6,7 @@
import com.zy.acs.framework.common.SnowflakeIdWorker;
import com.zy.acs.framework.exception.CoolException;
import com.zy.acs.manager.common.utils.MapDataUtils;
import com.zy.acs.manager.core.domain.BlockVehicleDto;
import com.zy.acs.manager.core.domain.TaskPosDto;
import com.zy.acs.manager.core.service.astart.MapDataDispatcher;
import com.zy.acs.manager.core.service.astart.RetreatNavigateNode;
@@ -232,13 +233,15 @@
        } else {
            // 可走行路径集合计算
            List<String> blockVehicleList = this.slicePathAndReturnBlockVehicleList(lev, unlockPathList, agvNo, pathList);    // jamAgvNo may was wave
            List<BlockVehicleDto> blockVehicleList = this.slicePathAndReturnBlockVehicleList(lev, unlockPathList, agvNo, pathList);    // jamAgvNo may was wave
            if (!Cools.isEmpty(pathList)) {
                if (!pathList.get(pathList.size() - 1).equals(endCode.getData()) && !Cools.isEmpty(blockVehicleList)) {
                    String blockAgvNo = blockVehicleList.get(0);
                    if (mapDataDispatcher.queryCodeListFromDynamicNode(null, blockAgvNo).size() > 1 && pathList.size() <= MIN_SLICE_PATH_LENGTH) {
                if (!pathList.get(pathList.size() - 1).equals(endCode.getData())) {
                    assert !Cools.isEmpty(blockVehicleList);
                    if (blockVehicleList.stream().anyMatch(blockVehicleDto -> !blockVehicleDto.isAvoidable())
                            && pathList.size() <= MIN_SLICE_PATH_LENGTH) {
                        pathList.clear();
                    }
                }
@@ -249,7 +252,14 @@
                // 阻塞车辆列表
                assert !Cools.isEmpty(blockVehicleList);
                String blockAgvNo = blockVehicleList.get(0);
                String blockAgvNo = blockVehicleList.stream()
                        .filter(BlockVehicleDto::isAvoidable)
                        .map(BlockVehicleDto::getVehicle)
                        .findFirst().orElse(null);
                // 如果全是运行中的阻塞agv,则不进行避让逻辑  todo
                if (Cools.isEmpty(blockAgvNo)) {
                    return pathList;
                }
                boolean initJamCache = false;
                if (null == jam) {
@@ -416,8 +426,8 @@
        return pathList;
    }
    private List<String> slicePathAndReturnBlockVehicleList(Integer lev, List<String> fullPathList, String agvNo, List<String> pathList) {
        List<String> blockVehicleList = new ArrayList<>();
    private List<BlockVehicleDto> slicePathAndReturnBlockVehicleList(Integer lev, List<String> fullPathList, String agvNo, List<String> pathList) {
        List<BlockVehicleDto> blockVehicleList = new ArrayList<>();
        DynamicNode[][] dynamicMatrix = mapDataDispatcher.getDynamicMatrix(lev);
        String[][] waveMatrix = mapDataDispatcher.getWaveMatrix(lev);
@@ -431,8 +441,10 @@
                List<String> otherWaveList = MapDataUtils.hasOtherWave(waveNodeList, agvNo);
                if (!Cools.isEmpty(otherWaveList)) {
                    for (String otherWave : otherWaveList) {
                        if (mapDataDispatcher.queryCodeListFromDynamicNode(lev, otherWave).size() <= 1) {
                            blockVehicleList.add(otherWave);
                        if (1 < mapDataDispatcher.queryCodeListFromDynamicNode(lev, otherWave).size()) {
                            blockVehicleList.add(new BlockVehicleDto(otherWave, false));
                        } else {
                            blockVehicleList.add(new BlockVehicleDto(otherWave, true));
                        }
                    }
                    break;