| | |
| | | , (task, agvNo, sta) -> { |
| | | Long agvId = agvService.getAgvId(agvNo); |
| | | |
| | | List<Travel> travelList = travelService.list(new LambdaQueryWrapper<Travel>() |
| | | .eq(Travel::getAgvId, agvId) |
| | | .eq(Travel::getState, TravelStateType.RUNNING.toString()) |
| | | .orderByDesc(Travel::getCreateTime)); |
| | | if (Cools.isEmpty(travelList)) { |
| | | throw new BusinessException("[Agv: " + agvNo + "]allocate inbound failed to find travel"); |
| | | } |
| | | Travel travel = travelList.get(0); |
| | | |
| | | List<Segment> currSegments = segmentService.list(new LambdaQueryWrapper<Segment>() |
| | | .eq(Segment::getAgvId, agvId) |
| | | .eq(Segment::getTravelId, travel.getId()) |
| | | ); |
| | | // List<Travel> travelList = travelService.list(new LambdaQueryWrapper<Travel>() |
| | | // .eq(Travel::getAgvId, agvId) |
| | | // .eq(Travel::getState, TravelStateType.RUNNING.toString()) |
| | | // .orderByDesc(Travel::getCreateTime)); |
| | | // if (Cools.isEmpty(travelList)) { |
| | | // throw new BusinessException("[Agv: " + agvNo + "]allocate inbound failed to find travel"); |
| | | // } |
| | | // Travel travel = travelList.get(0); |
| | | // |
| | | // List<Segment> currSegments = segmentService.list(new LambdaQueryWrapper<Segment>() |
| | | // .eq(Segment::getAgvId, agvId) |
| | | // .eq(Segment::getTravelId, travel.getId()) |
| | | // ); |
| | | // load segment |
| | | Segment currSeg = segmentService.getRollerWaiting(agvId, sta.getCode(), TaskPosDto.PosType.ORI_STA); |
| | | if (null == currSeg) { |
| | | throw new BusinessException("[Agv:" + agvNo + "] allocate inbound failed: no roller waiting segment"); |
| | | } |
| | | |
| | | // get backpack lev |
| | | int backpackLev = 0; |
| | | int backpack = agvService.getBackpack(agvId); |
| | | List<Integer> usedBackpacks = segmentService.selectUsedBackpacks(currSeg.getTravelId(), agvId); |
| | | for (int lev = 0; lev < backpack; lev++) { |
| | | if (!usedBackpacks.contains(lev)) { |
| | | backpackLev = lev; |
| | | break; |
| | | } |
| | | } |
| | | if (backpackLev == 0) { |
| | | throw new BusinessException("[Agv:" + agvNo + "] backpack full, can't allocate inbound"); |
| | | } |
| | | |
| | | // update curr seg |
| | | currSeg.setState(SegmentStateType.INIT.toString()); |
| | | currSeg.setUpdateTime(now); |
| | | if (!segmentService.updateById(currSeg)) { |
| | | log.error("Segment [{}] failed to update !!!", currSeg.getGroupId() + " - " + currSeg.getSerial()); |
| | | } |
| | | |
| | | |
| | | // new oriSta seg |
| | | Segment loadSeg = new Segment(); |
| | |
| | | loadSeg.setEndNode(sta.getCode()); |
| | | loadSeg.setPosType(TaskPosDto.PosType.ORI_STA.toString()); |
| | | loadSeg.setState(SegmentStateType.WAITING.toString()); |
| | | loadSeg.setBackpack(backpackLev); |
| | | loadSeg.setCreateTime(now); |
| | | loadSeg.setUpdateTime(now); |
| | | if (!segmentService.save(loadSeg)) { |
| | | log.error("Segment [{}] failed to save !!!", loadSeg.getTravelId() + " - " + loadSeg.getSerial()); |
| | | } |
| | | |
| | | // place segment |
| | | TaskTypeType taskType = Objects.requireNonNull(TaskTypeType.get(task.getTaskTypeEl())); |
| | | TaskPosDto.PosType posType = null; |
| | | TaskPosDto.PosType posType; |
| | | Code endCode; |
| | | switch (taskType) { |
| | | case STA_TO_LOC: |
| | | posType = TaskPosDto.PosType.DEST_LOC; |
| | | Loc destLoc = locService.getById(task.getDestLoc()); |
| | | endCode = codeService.getCacheById(destLoc.getCode()); |
| | | break; |
| | | case STA_TO_STA: |
| | | posType = TaskPosDto.PosType.DEST_STA; |
| | | Sta destSta = staService.getById(task.getDestSta()); |
| | | endCode = codeService.getCacheById(destSta.getCode()); |
| | | break; |
| | | default: |
| | | throw new BusinessException("[Agv: " + agvNo + "]allocate inbound failed to find travel"); |
| | | throw new BusinessException("[Agv:" + agvNo + "] allocate inbound only supports STA_TO_LOC/STA_TO_STA"); |
| | | } |
| | | |
| | | Segment placeSeg = new Segment(); |
| | |
| | | placeSeg.setTravelId(currSeg.getTravelId()); |
| | | placeSeg.setAgvId(agvId); |
| | | placeSeg.setTaskId(task.getId()); |
| | | placeSeg.setSerial(currSeg.getSerial() - 1); |
| | | placeSeg.setEndNode(sta.getCode()); |
| | | placeSeg.setSerial(); |
| | | placeSeg.setEndNode(endCode.getId()); |
| | | placeSeg.setPosType(posType.toString()); |
| | | placeSeg.setState(SegmentStateType.INIT.toString()); |
| | | loadSeg.setBackpack(backpackLev); |
| | | placeSeg.setCreateTime(now); |
| | | placeSeg.setUpdateTime(now); |
| | | if (!segmentService.save(placeSeg)) { |
| | | log.error("Segment [{}] failed to save !!!", placeSeg.getTravelId() + " - " + placeSeg.getSerial()); |
| | | } |
| | | |
| | | // update task |
| | | task.setAgvId(agvId); |
| | | task.setTaskSts(TaskStsType.ASSIGN.val()); |
| | | task.setIoTime(now); |
| | |
| | | travel.setTaskContent(JSON.toJSONString(list)); |
| | | travel.setTaskIds(JSON.toJSONString(taskList.stream().map(Task::getId).collect(Collectors.toList()))); |
| | | travel.setState(TravelStateType.RUNNING.toString()); |
| | | travel.setCreateTime(now); |
| | | travel.setUpdateTime(now); |
| | | if (!travelService.save(travel)) { |
| | | throw new BusinessException("任务组保存失败"); |
| | | } |
| | |
| | | segment.setPosType(taskPosDto.getPosType().toString()); |
| | | segment.setBackpack(backpackType.lev); |
| | | segment.setState(SegmentStateType.INIT.toString()); |
| | | segment.setCreateTime(now); |
| | | segment.setUpdateTime(now); |
| | | segmentList.add(segment); |
| | | } |
| | | } |