| | |
| | | } |
| | | |
| | | // deprecate jam |
| | | if (this.isJamBeDeprecatedByAvo(segment.getId())) { |
| | | if (this.skipCurrSegment(segment)) { |
| | | return; |
| | | } |
| | | if (this.isExpiredJamByAvo(segment.getId())) { |
| | | mainService.settleSegmentList(Utils.singletonList(segment), null); |
| | | return; |
| | | } |
| | | |
| | | // execute ----------------------------------------------- |
| | |
| | | if (!Cools.isEmpty(jam.getAvoAgv()) |
| | | && BlockVehicleDto.customContain(blockVehicleList, agvService.getById(jam.getAvoAgv()).getUuid())) { |
| | | |
| | | maxJamTimeoutFactor = 5; |
| | | maxJamTimeoutFactor = 4; |
| | | |
| | | } else { |
| | | |
| | |
| | | List<String> waveCodeList = mapService.getWaveScopeByCode(lev, firstCodeNode, avoidDistance) |
| | | .stream().map(NavigateNode::getCodeData).distinct().collect(Collectors.toList()); |
| | | list.addAll(waveCodeList); |
| | | } else { |
| | | // 如果被阻塞车辆已经不在原来的阻塞路径中,考虑避让车走行时不需要把之前的阻塞路径加入黑名单 |
| | | list = new ArrayList<>(); |
| | | } |
| | | } |
| | | |
| | |
| | | return false; |
| | | } |
| | | |
| | | private boolean isJamBeDeprecatedByAvo(Long avoSeg) { |
| | | return 0 < jamService.count(new LambdaQueryWrapper<Jam>() |
| | | /** |
| | | * 1. the jam was deprecated |
| | | * 2. the jam segment is finished |
| | | * |
| | | * all these by avoid segment |
| | | */ |
| | | private boolean isExpiredJamByAvo(Long avoSeg) { |
| | | List<Jam> jamList = jamService.list(new LambdaQueryWrapper<Jam>() |
| | | // .eq(Jam::getAvoAgv, avoAgv) |
| | | .eq(Jam::getAvoSeg, avoSeg) |
| | | .eq(Jam::getState, JamStateType.DEPRECATED.toString()) |
| | | ); |
| | | } |
| | | |
| | | private boolean skipCurrSegment(Segment currSegment) { |
| | | currSegment.setState(SegmentStateType.FINISH.toString()); |
| | | currSegment.setUpdateTime(new Date()); |
| | | if (!segmentService.updateById(currSegment)) { |
| | | log.error("Segment [{}] failed to update !!!", currSegment.getTravelId() + " - " + currSegment.getSerial()); |
| | | .eq(Jam::getAvoSeg, avoSeg)); |
| | | if (Cools.isEmpty(jamList)) { |
| | | return false; |
| | | } |
| | | segmentService.processNext(Utils.singletonList(currSegment)); |
| | | return true; |
| | | if (jamList.size() > 1) { |
| | | log.error("AvoSeg[id = {}] seg data has exception, result in two jams", avoSeg); |
| | | } |
| | | Jam jam = jamList.get(0); |
| | | if (jam.getState().equals(JamStateType.DEPRECATED.toString())) { |
| | | return true; |
| | | } |
| | | Segment jamSegment = segmentService.getById(jam.getJamSeg()); |
| | | if (jamSegment.getState().equals(SegmentStateType.FINISH.toString())) { |
| | | return true; |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | } |