#
luxiaotao1123
2024-11-05 fe4c6c0439e0dc00f0b09d1818735065d38d3078
#
2个文件已修改
79 ■■■■ 已修改文件
zy-acs-manager/src/main/java/com/zy/acs/manager/core/domain/BlockVehicleDto.java 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/TrafficService.java 30 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-acs-manager/src/main/java/com/zy/acs/manager/core/domain/BlockVehicleDto.java
@@ -1,6 +1,12 @@
package com.zy.acs.manager.core.domain;
import com.zy.acs.common.utils.GsonUtils;
import lombok.Data;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
/**
 * Created by vincent on 11/5/2024
@@ -12,4 +18,47 @@
    private boolean avoidable;
    public BlockVehicleDto() {
    }
    public BlockVehicleDto(String vehicle, boolean avoidable) {
        this.vehicle = vehicle;
        this.avoidable = avoidable;
    }
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        BlockVehicleDto that = (BlockVehicleDto) o;
        return Objects.equals(vehicle, that.vehicle);
    }
    @Override
    public int hashCode() {
        return Objects.hash(vehicle);
    }
    public static void main(String[] args) {
        List<BlockVehicleDto> blockVehicleList = new ArrayList<>();
        blockVehicleList.add(new BlockVehicleDto("1", true));
        blockVehicleList.add(new BlockVehicleDto("2", true));
//        blockVehicleList.add(new BlockVehicleDto("3", false));
//        blockVehicleList.add(new BlockVehicleDto("4", false));
//        blockVehicleList.add(new BlockVehicleDto("5", false));
//        blockVehicleList.add(new BlockVehicleDto("5", true));
//        blockVehicleList.add(new BlockVehicleDto("4", true));
        System.out.println(GsonUtils.toJson(blockVehicleList));
        System.out.println(GsonUtils.toJson(blockVehicleList.stream().distinct().collect(Collectors.toList())));
        System.out.println(blockVehicleList.stream().anyMatch(blockVehicleDto -> !blockVehicleDto.isAvoidable()));
        String blockAgvNo = blockVehicleList.stream()
                .filter(BlockVehicleDto::isAvoidable)
                .map(BlockVehicleDto::getVehicle)
                .findFirst().orElse(null);
        System.out.println(blockAgvNo);
    }
}
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;