#
luxiaotao1123
2024-11-27 da407d4525cd6ea211d952fc2fd96f5ba30510e8
zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/TrafficService.java
@@ -2,11 +2,11 @@
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.zy.acs.common.utils.GsonUtils;
import com.zy.acs.common.utils.RedisSupport;
import com.zy.acs.framework.common.Cools;
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.constant.MapDataConstant;
import com.zy.acs.manager.core.domain.BlockVehicleDto;
import com.zy.acs.manager.core.domain.TaskPosDto;
import com.zy.acs.manager.core.domain.type.BlockSeverityType;
@@ -37,12 +37,6 @@
@Slf4j
@Component
public class TrafficService {
    public static final Integer MIN_SLICE_PATH_LENGTH = 3;
    public static final Integer MAX_JAM_TIMEOUT = 5 * 1000;
    private final RedisSupport redis = RedisSupport.defaultRedisSupport;
    @Autowired
    private AgvService agvService;
@@ -209,9 +203,9 @@
        List<String> pathList = new ArrayList<>();
        // 无障碍解
        List<String> unlockPathList = mapService.checkoutPath(agvNo, startCode, endCode, false, blackPath, segment, null);
        List<String> unlockPathList = mapService.checkoutPath(agvNo, startCode, endCode, false, blackPath, segment);
        // 避让解
        List<String> lockPathList = mapService.checkoutPath(agvNo, startCode, endCode, true, blackPath, segment, null);
        List<String> lockPathList = mapService.checkoutPath(agvNo, startCode, endCode, true, blackPath, segment);
        if (!Cools.isEmpty(lockPathList) && // 存在避让解
            Math.abs(lockPathList.size() - unlockPathList.size()) <= Arrays.stream(mapDataDispatcher.getCodeMatrix(lev)).mapToInt(row -> row.length).sum() / 10
@@ -222,6 +216,14 @@
            // preview path
            List<String> draftPath = new ArrayList<>(unlockPathList);
            if (blockSeverity.equals(BlockSeverityType.SEVERE)) {
                unlockPathList.remove(endCode.getData());
                blackPath.addAll(unlockPathList);
                List<String> newUnlockPathList = mapService.checkoutPath(agvNo, startCode, endCode, false, blackPath, segment);
                if (!Cools.isEmpty(newUnlockPathList)) {
                    draftPath = newUnlockPathList;
                }
            }
            // 可走行路径集合计算
            List<BlockVehicleDto> blockVehicleList = this.slicePathAndReturnBlockVehicleList(lev, draftPath, agvNo, pathList);    // jamAgvNo may was wave
@@ -231,7 +233,7 @@
                    assert !Cools.isEmpty(blockVehicleList);
                    boolean hasUnavoidableBlocks = blockVehicleList.stream().anyMatch(blockVehicleDto -> !blockVehicleDto.isAvoidable());
                    if (hasUnavoidableBlocks && pathList.size() <= MIN_SLICE_PATH_LENGTH) {
                    if (hasUnavoidableBlocks && pathList.size() <= MapDataConstant.MIN_SLICE_PATH_LENGTH) {
                        log.info("AGV[{}] waiting in place, because the path list is too short...", agvNo);
                        pathList.clear();
                    }
@@ -269,7 +271,7 @@
                        if (!Cools.isEmpty(jam.getAvoAgv())
                                && BlockVehicleDto.customContain(blockVehicleList, agvService.getById(jam.getAvoAgv()).getUuid())) {
                            maxJamTimeoutFactor = 10;
                            maxJamTimeoutFactor = 5;
                        } else {
@@ -328,7 +330,7 @@
                    // handle jam timeout
                    if (null != maxJamTimeoutFactor) {
                        if (System.currentTimeMillis() - jam.getStartTime().getTime() > MAX_JAM_TIMEOUT * maxJamTimeoutFactor) {
                        if (System.currentTimeMillis() - jam.getStartTime().getTime() > MapDataConstant.MAX_JAM_TIMEOUT * maxJamTimeoutFactor) {
                            if (!Cools.isEmpty(lockPathList)) {