| | |
| | | package com.zy.acs.manager.core.service; |
| | | |
| | | 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; |
| | |
| | | } |
| | | } |
| | | } |
| | | |
| | | // dead lane |
| | | if (jamService.count(new LambdaQueryWrapper<Jam>() |
| | | .eq(Jam::getJamAgv, agv.getId()) |
| | | .eq(Jam::getJamSeg, segment.getId()) |
| | |
| | | String agvNo = agv.getUuid(); |
| | | Date now = new Date(); |
| | | Jam jam = jamService.getJam(agv.getId(), startCode.getId(), segment.getId()); |
| | | // judge avoid of jam |
| | | List<Jam> unfinishedOriginJamByCurrAgv = jamService.getUnfinishedOriginJamByAvo(agv.getId(), startCode.getId(), segment.getId()); |
| | | List<String> blackPath = this.getBlackPathList(unfinishedOriginJamByCurrAgv); |
| | | |
| | | // 结果集 |
| | | List<String> pathList = new ArrayList<>(); |
| | | |
| | | // 无障碍解 |
| | | List<String> unlockPathList = mapService.checkoutPath(agvNo, startCode, endCode, false); |
| | | List<String> unlockPathList = mapService.checkoutPath(agvNo, startCode, endCode, false, blackPath, segment); |
| | | // 避让解 |
| | | List<String> lockPathList = mapService.checkoutPath(agvNo, startCode, endCode, true); |
| | | 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 |
| | |
| | | Integer maxJamTimeoutFactor = null; |
| | | |
| | | // persist jam data |
| | | jam = this.createOrUpdateJam(agv, startCode, segment, jam); |
| | | ArrayList<String> jamPath = new ArrayList<>(unlockPathList); |
| | | jam = this.createOrUpdateJam(agv, startCode, segment, jam, jamPath); |
| | | |
| | | // ? has unAvoidable block vehicles |
| | | if (blockVehicleList.stream().anyMatch(blockVehicleDto -> !blockVehicleDto.isAvoidable())) { |
| | |
| | | } |
| | | |
| | | // notify block vehicle to avoid |
| | | if (this.notifyVehicleAvoid(blockAgvNo, blockAgvCode, unlockPathList, agvNo, jam)) { |
| | | if (this.notifyVehicleAvoid(blockAgvNo, blockAgvCode, jamPath, agvNo, jam)) { |
| | | if (jam.getCycleAvo() == 1) { |
| | | jam.setCycleCode(endCode.getId()); |
| | | } |
| | |
| | | if (!segmentService.save(insertSeg)) { |
| | | log.error("Segment [{}] 保存失败 !!!", segment.getTravelId() + " - " + segment.getSerial()); |
| | | return false; |
| | | } else { |
| | | jam.setAvoSeg(insertSeg.getId()); |
| | | } |
| | | |
| | | } else { |
| | | |
| | | return mainLockWrapService.buildMinorTask(agv, null, TaskTypeType.MOVE, endCodeData); |
| | | return mainLockWrapService.buildMinorTask(agv, TaskTypeType.MOVE, endCodeData, jam); |
| | | } |
| | | |
| | | return true; |
| | | } |
| | | |
| | | private Jam createOrUpdateJam(Agv agv, Code startCode, Segment segment, Jam jam) { |
| | | private Jam createOrUpdateJam(Agv agv, Code startCode, Segment segment, Jam jam, List<String> jamPath) { |
| | | if (jam == null) { |
| | | jam = new Jam(); |
| | | jam.setUuid(String.valueOf(snowflakeIdWorker.nextId()).substring(3)); |
| | | jam.setJamAgv(agv.getId()); |
| | | jam.setJamCode(startCode.getId()); |
| | | jam.setJamSeg(segment.getId()); |
| | | jam.setJamPath(GsonUtils.toJson(jamPath)); |
| | | jam.setStartTime(new Date()); |
| | | jam.setState(JamStateType.RUNNING.toString()); |
| | | if (!jamService.save(jam)) { |
| | |
| | | return jam; |
| | | } |
| | | |
| | | private List<String> getBlackPathList(List<Jam> unfinishedOriginJamByCurrAgv) { |
| | | List<String> blackPathList = new ArrayList<>(); |
| | | if (!Cools.isEmpty(unfinishedOriginJamByCurrAgv)) { |
| | | for (Jam jam : unfinishedOriginJamByCurrAgv) { |
| | | if (!Cools.isEmpty(jam.getJamPath())) { |
| | | List<String> list = GsonUtils.fromJsonToList(jam.getJamPath(), String.class); |
| | | blackPathList.addAll(list); |
| | | } |
| | | } |
| | | } |
| | | return blackPathList.stream().distinct().collect(Collectors.toList()); |
| | | } |
| | | |
| | | } |