| | |
| | | } |
| | | |
| | | // 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)); |
| | |
| | | |
| | | // 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())) { |
| | |
| | | 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); |
| | |
| | | } |
| | | } |
| | | |
| | | // 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.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; |