| | |
| | | BlockSeverityType blockSeverity = BlockSeverityType.query(null == jam ? null : jam.getDuration()); |
| | | // judge avoid of jam 如果已经在避让点(因为当前车执行了避让任务),那么则不能再去检索之前的阻塞路径 |
| | | List<Jam> unfinishedOriginJamByCurrAgv = jamService.getUnfinishedOriginJamByAvo(agv.getId(), startCode.getId(), segment.getId()); |
| | | List<String> blackPath = this.getBlackPathList(unfinishedOriginJamByCurrAgv); |
| | | List<String> blackPath = this.getBlackPathList(agvNo, unfinishedOriginJamByCurrAgv); |
| | | |
| | | // 结果集 |
| | | List<String> pathList = new ArrayList<>(); |
| | |
| | | } |
| | | } |
| | | |
| | | private List<String> getBlackPathList(List<Jam> unfinishedOriginJamByCurrAgv) { |
| | | private List<String> getBlackPathList(String agvNo, List<Jam> unfinishedOriginJamByCurrAgv) { |
| | | List<String> blackPathList = new ArrayList<>(); |
| | | Integer lev = MapDataDispatcher.MAP_DEFAULT_LEV; |
| | | if (!Cools.isEmpty(unfinishedOriginJamByCurrAgv)) { |
| | | if (Cools.isEmpty(unfinishedOriginJamByCurrAgv)) { |
| | | return blackPathList; |
| | | } |
| | | |
| | | AgvModel agvModel = agvModelService.getByAgvNo(agvNo); |
| | | double bufferRadius = MapDataUtils.buildFootprint(agvModel).maxExtent(); |
| | | |
| | | for (Jam jam : unfinishedOriginJamByCurrAgv) { |
| | | if (!Cools.isEmpty(jam.getJamPath())) { |
| | | |
| | | List<String> list = GsonUtils.fromJsonToList(jam.getJamPath(), String.class); |
| | | |
| | | Agv jamAgv = agvService.getById(jam.getJamAgv()); |
| | | List<String> jamDynamicNodes = mapService.queryCodeListFromDynamicNode(lev, jamAgv.getUuid()); |
| | | String jamAgvNo = agvService.getAgvNo(jam.getJamAgv()); |
| | | List<String> jamDynamicNodes = mapService.queryCodeListFromDynamicNode(lev, jamAgvNo); |
| | | // jamDynamicNodes has sorted |
| | | String firstCodeNode = jamDynamicNodes.stream().findFirst().orElse(null); |
| | | |
| | |
| | | list = new ArrayList<>(list.subList(idx, list.size())); |
| | | |
| | | // the wave of first node |
| | | Double avoidDistance = MapDataUtils.getVehicleWaveSafeDistance( |
| | | agvModelService.getByAgvId(jamAgv.getId()).getDiameter(), |
| | | MapDataConstant.MAX_DISTANCE_BETWEEN_ADJACENT_AGV_FACTOR |
| | | ); |
| | | AgvModel jamAgvModel = agvModelService.getByAgvNo(jamAgvNo); |
| | | Double avoidDistance = MapDataUtils.buildFootprint(jamAgvModel).maxExtent() + bufferRadius; |
| | | List<String> waveCodeList = mapService.getWaveScopeByCode(lev, firstCodeNode, avoidDistance) |
| | | .stream().map(NavigateNode::getCodeData).distinct().collect(Collectors.toList()); |
| | | list.addAll(waveCodeList); |
| | |
| | | blackPathList.addAll(list); |
| | | } |
| | | } |
| | | } |
| | | |
| | | return blackPathList.stream().distinct().collect(Collectors.toList()); |
| | | } |
| | | |