| | |
| | | } |
| | | |
| | | // checkout path |
| | | Code startCode = codeService.getById(agvDetail.getRecentCode()); |
| | | Code endCode = codeService.getById(endNode); |
| | | Code startCode = codeService.getCacheById(agvDetail.getRecentCode()); |
| | | Code endCode = codeService.getCacheById(endNode); |
| | | long startTime = System.currentTimeMillis(); |
| | | List<String> pathList = this.checkoutPath(agv, startCode, endCode, segment); |
| | | // System.out.println("checkoutPath: " + (System.currentTimeMillis() - startTime)); |
| | | if (Cools.isEmpty(pathList)) { |
| | | return; |
| | | } |
| | |
| | | String lastCodeData = pathList.get(pathList.size() - 1); |
| | | if (!endCode.getData().equals(lastCodeData)) { |
| | | // slice |
| | | Code lastCode = codeService.selectByData(lastCodeData); |
| | | Code lastCode = codeService.getCacheByData(lastCodeData); |
| | | |
| | | // if (pathList.size() <= MIN_SLICE_PATH_LENGTH) { |
| | | // return; |
| | |
| | | |
| | | mapService.lockPath(null, pathList, agv.getUuid()); |
| | | |
| | | startTime = System.currentTimeMillis(); |
| | | mainService.generateAction(segment.getAgvId(), segmentList, pathList, now); |
| | | // System.out.println("generateAction: " + (System.currentTimeMillis() - startTime)); |
| | | |
| | | } catch (Exception e) { |
| | | log.error("TrafficService.trigger", e); |
| | |
| | | |
| | | // block vehicle info |
| | | Long blockAgvId = agvService.getAgvId(blockAgvNo); |
| | | String blockAgvCode = codeService.getById(agvDetailService.selectByAgvId(blockAgvId).getRecentCode()).getData(); |
| | | String blockAgvCode = codeService.getCacheById(agvDetailService.selectMajorByAgvId(blockAgvId).getRecentCode()).getData(); |
| | | |
| | | // create new jam if already notify the avoid vehicle |
| | | if (!Cools.isEmpty(jam.getAvoAgv(), jam.getAvoSeg()) && !blockAgvId.equals(jam.getAvoAgv())) { |
| | |
| | | List<Segment> waitingSegList = segmentService.getJustWaitingSeg(blockAgvId); |
| | | if (null != waitingSegList |
| | | && waitingSegList.stream().anyMatch( |
| | | waitingSeg -> waitingSeg.getEndNode().equals(codeService.selectByData(blockAgvCode).getId()) |
| | | waitingSeg -> waitingSeg.getEndNode().equals(codeService.getCacheByData(blockAgvCode).getId()) |
| | | )) { |
| | | maxJamTimeoutFactor = 1; |
| | | break; |
| | |
| | | private List<BlockVehicleDto> slicePathAndReturnBlockVehicleList(Integer lev, List<String> fullPathList, String agvNo, List<String> pathList) { |
| | | List<BlockVehicleDto> blockVehicleList = new ArrayList<>(); |
| | | |
| | | // DynamicNode[][] dynamicMatrix = mapDataDispatcher.getDynamicMatrix(lev); |
| | | String[][] waveMatrix = mapDataDispatcher.getWaveMatrix(lev); |
| | | for (String code : fullPathList) { |
| | | int[] node = mapDataDispatcher.getCodeMatrixIdx(lev, code); |
| | | List<int[]> codeMatrixIdxList = mapDataDispatcher.getCodeMatrixIdxList(lev, fullPathList); |
| | | for (int i = 0; i < fullPathList.size(); i++) { |
| | | String codeData = fullPathList.get(i); |
| | | int[] codeMatrixIdx = codeMatrixIdxList.get(i); |
| | | |
| | | String waveNode = waveMatrix[node[0]][node[1]]; |
| | | String waveNode = waveMatrix[codeMatrixIdx[0]][codeMatrixIdx[1]]; |
| | | assert !waveNode.equals(WaveNodeType.DISABLE.val); |
| | | if (!waveNode.equals(WaveNodeType.ENABLE.val)) { |
| | | List<String> waveNodeList = MapDataUtils.parseWaveNode(waveNode); |
| | | List<String> otherWaveList = MapDataUtils.hasOtherWave(waveNodeList, agvNo); |
| | | if (!Cools.isEmpty(otherWaveList)) { |
| | | for (String otherWave : otherWaveList) { |
| | | if (1 < mapDataDispatcher.queryCodeListFromDynamicNode(lev, otherWave).size()) { |
| | | if (mapService.isWalkingByVehicle(lev, otherWave)) { |
| | | blockVehicleList.add(new BlockVehicleDto(otherWave, false)); |
| | | } else { |
| | | blockVehicleList.add(new BlockVehicleDto(otherWave, true)); |
| | |
| | | } |
| | | } |
| | | |
| | | // DynamicNode dynamicNode = dynamicMatrix[node[0]][node[1]]; |
| | | // String vehicle = dynamicNode.getVehicle(); |
| | | // assert !vehicle.equals(DynamicNodeType.BLOCK.val); |
| | | // if (!vehicle.equals(DynamicNodeType.ACCESS.val) && !vehicle.equals(agvNo)) { |
| | | // blockVehicleList.add(vehicle); |
| | | // break; |
| | | // } |
| | | |
| | | pathList.add(code); |
| | | pathList.add(codeData); |
| | | } |
| | | |
| | | if (pathList.size() <= 1) { |
| | |
| | | * avoidPathList include wave node and dynamic node |
| | | */ |
| | | private boolean notifyVehicleAvoid(String agvNo, String agvPosCode, List<String> avoidPathList, String sponsor, Jam jam) { |
| | | Agv agv = agvService.selectByUuid(agvNo); |
| | | if (!Cools.isEmpty(segmentService.getByAgvAndState(agv.getId(), SegmentStateType.RUNNING.toString()))) { |
| | | Long agvId = agvService.getAgvId(agvNo); |
| | | if (!Cools.isEmpty(segmentService.getByAgvAndState(agvId, SegmentStateType.RUNNING.toString()))) { |
| | | log.warn("{}号车辆避让失败,存在进行中任务!!!", agvNo); |
| | | return false; |
| | | } |
| | |
| | | } |
| | | |
| | | String endCodeData = finalNode.getCodeData(); |
| | | Code endCode = codeService.selectByData(endCodeData); |
| | | Code endCode = codeService.getCacheByData(endCodeData); |
| | | |
| | | List<Segment> waitingSegList = segmentService.getByAgvAndState(agv.getId(), SegmentStateType.WAITING.toString()); |
| | | List<Segment> waitingSegList = segmentService.getByAgvAndState(agvId, SegmentStateType.WAITING.toString()); |
| | | if (!Cools.isEmpty(waitingSegList)) { |
| | | |
| | | if (waitingSegList.size() > 1) { |
| | |
| | | Segment insertSeg = new Segment(); |
| | | insertSeg.setUuid(String.valueOf(snowflakeIdWorker.nextId()).substring(3)); |
| | | insertSeg.setTravelId(segment.getTravelId()); |
| | | insertSeg.setAgvId(agv.getId()); |
| | | insertSeg.setAgvId(agvId); |
| | | insertSeg.setTaskId(segment.getTaskId()); |
| | | insertSeg.setSerial(segment.getSerial() - 1); |
| | | insertSeg.setEndNode(endCode.getId()); |
| | |
| | | |
| | | } else { |
| | | |
| | | return mainLockWrapService.buildMinorTask(agv, TaskTypeType.MOVE, endCodeData, jam); |
| | | return mainLockWrapService.buildMinorTask(agvId, TaskTypeType.MOVE, endCodeData, jam); |
| | | } |
| | | |
| | | return true; |
| | |
| | | List<String> list = GsonUtils.fromJsonToList(jam.getJamPath(), String.class); |
| | | |
| | | Agv jamAgv = agvService.getById(jam.getJamAgv()); |
| | | List<String> jamDynamicNodes = mapDataDispatcher.queryCodeListFromDynamicNode(lev, jamAgv.getUuid()); |
| | | List<String> jamDynamicNodes = mapService.queryCodeListFromDynamicNode(lev, jamAgv.getUuid()); |
| | | // jamDynamicNodes has sorted |
| | | String firstCodeNode = jamDynamicNodes.stream().findFirst().orElse(null); |
| | | |