| | |
| | | |
| | | Travel travel = travelService.getById(segment.getTravelId()); |
| | | Agv agv = agvService.getById(travel.getAgvId()); |
| | | AgvDetail agvDetail = agvDetailService.selectByAgvId(travel.getAgvId()); |
| | | long endNode = segment.getEndNode(); |
| | | |
| | | // valid ---------------------------------------------------- |
| | |
| | | // ArrayList<List<TaskPosDto>> list = JSON.parseObject(travel.getTaskContent(), new TypeReference<ArrayList<List<TaskPosDto>>>() {}); |
| | | |
| | | // * sync wave scope |
| | | if (!avoidWaveCalculator.calcWaveScope()) { |
| | | if (!avoidWaveCalculator.calcWaveScope(agvModelService.getByAgvId(agv.getId()))) { |
| | | log.error("failed to calculate avoid wave matrix ..."); |
| | | return; |
| | | } |
| | | |
| | | // checkout path |
| | | Code startCode = codeService.getCacheById(agvDetail.getRecentCode()); |
| | | Code startCode = agvDetailService.getCurrentCode(travel.getAgvId()); |
| | | Code endCode = codeService.getCacheById(endNode); |
| | | long startTime = System.currentTimeMillis(); |
| | | // long startTime = System.currentTimeMillis(); |
| | | List<String> pathList = this.checkoutPath(agv, startCode, endCode, segment); |
| | | // System.out.println("checkoutPath: " + (System.currentTimeMillis() - startTime)); |
| | | if (Cools.isEmpty(pathList)) { |
| | |
| | | insertSeg.setPosType(TaskPosDto.PosType.MOVE.toString()); |
| | | insertSeg.setState(SegmentStateType.WAITING.toString()); |
| | | if (!segmentService.save(insertSeg)) { |
| | | log.error("Segment [{}] failed to save !!!", segment.getTravelId() + " - " + segment.getSerial()); |
| | | log.error("Segment [{}] failed to save !!!", insertSeg.getTravelId() + " - " + insertSeg.getSerial()); |
| | | } |
| | | segmentList.add(insertSeg); |
| | | |
| | |
| | | interrupt = true; |
| | | } else { |
| | | if (nextStep.getEndNode() == endNode) { |
| | | |
| | | segmentList.add(nextStep); |
| | | // remove sta action seg |
| | | if (!nextStep.getPosType().equals(TaskPosDto.PosType.ORI_STA.toString()) |
| | | && !nextStep.getPosType().equals(TaskPosDto.PosType.DEST_STA.toString())) { |
| | | segmentList.add(nextStep); |
| | | } |
| | | } else { |
| | | interrupt = true; |
| | | } |
| | |
| | | |
| | | mapService.lockPath(null, pathList, agv.getUuid()); |
| | | |
| | | startTime = System.currentTimeMillis(); |
| | | // startTime = System.currentTimeMillis(); |
| | | mainService.generateAction(segment.getAgvId(), segmentList, pathList, now); |
| | | // System.out.println("generateAction: " + (System.currentTimeMillis() - startTime)); |
| | | |
| | |
| | | log.error("TrafficService.trigger", e); |
| | | TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); |
| | | |
| | | throw new RuntimeException("trigger method caught an exception", e); |
| | | } |
| | | } |
| | | |
| | |
| | | |
| | | // the wave of first node |
| | | Double avoidDistance = MapDataUtils.getVehicleWaveSafeDistance( |
| | | agvModelService.getById(jamAgv.getAgvModel()).getDiameter(), |
| | | agvModelService.getByAgvId(jamAgv.getId()).getDiameter(), |
| | | MapDataConstant.MAX_DISTANCE_BETWEEN_ADJACENT_AGV_FACTOR |
| | | ); |
| | | List<String> waveCodeList = mapService.getWaveScopeByCode(lev, firstCodeNode, avoidDistance) |
| | |
| | | if (!blockVehicleDto.isAvoidable()) { |
| | | continue; |
| | | } |
| | | Long agvId = agvService.getAgvId(blockVehicleDto.getVehicle()); |
| | | // 当前vehicle正在进行避让作业 |
| | | if (!Cools.isEmpty(jamService.getUnfinishedAvoSegByAvo(blockVehicleDto.getVehicle(), null))) { |
| | | if (!Cools.isEmpty(jamService.getUnfinishedAvoSegByAvo(agvId, null))) { |
| | | continue; |
| | | } |
| | | // 当前vehicle正在进行滚筒输送线等待 |
| | | if (segmentService.isRollerWaiting(agvId)) { |
| | | continue; |
| | | } |
| | | return blockVehicleDto.getVehicle(); |