| | |
| | | public synchronized Agv execute(Task task) { |
| | | List<Agv> availableAgvList = getAvailableAgv(); |
| | | if (Cools.isEmpty(availableAgvList)) { |
| | | log.warn("No available agv to assign the task[{}]", task.getSeqNum()); |
| | | // log.warn("No available agv to assign the task[{}]", task.getSeqNum()); |
| | | return null; |
| | | } |
| | | List<String> availableAgvNos = availableAgvList.stream().map(Agv::getUuid).distinct().collect(Collectors.toList()); |
| | |
| | | } |
| | | return agvNoList.stream().filter(agvNo -> { |
| | | Agv agv = agvService.selectByUuid(agvNo); |
| | | AgvModel agvModel = agvModelService.getById(agv.getAgvModel()); |
| | | AgvModel agvModel = agvModelService.getByAgvNo(agvNo); |
| | | List<Task> transportTasks = taskService.findTransportTasksByAgv(agv.getId()); |
| | | return transportTasks.size() < agvModel.getBackpack(); |
| | | }).collect(Collectors.toList()); |
| | |
| | | // calculate wight = backpack + distance |
| | | private int calcAllocateWeight(String agvNo, Task task) { |
| | | int weight = 0; |
| | | Agv agv = agvService.selectByUuid(agvNo); |
| | | Long agvId = agvService.getAgvId(agvNo); |
| | | |
| | | // backpack |
| | | List<Task> transportTasks = taskService.findTransportTasksByAgv(agv.getId()); |
| | | List<Task> transportTasks = taskService.findTransportTasksByAgv(agvId); |
| | | if (!Cools.isEmpty(transportTasks)) { |
| | | weight = weight + transportTasks.size() * 100000; |
| | | } |
| | | |
| | | // distance |
| | | // from |
| | | AgvDetail agvDetail = agvDetailService.selectByAgvId(agv.getId()); |
| | | AgvDetail agvDetail = agvDetailService.selectByAgvId(agvId); |
| | | Code agvCurrCode = codeService.getById(agvDetail.getRecentCode()); |
| | | Double[] fromPosition = new Double[]{agvCurrCode.getX(), agvCurrCode.getY()}; |
| | | // to |
| | |
| | | return -weight; |
| | | } |
| | | |
| | | public Boolean validCapacityOfLane(Agv agv, Code code) { |
| | | public Boolean validCapacityOfLane(String agvNo, Code code) { |
| | | Lane lane = laneService.search(code.getData()); |
| | | if (null != lane) { |
| | | Integer maxAgvCountInLane = configService.getVal("maxAgvCountInLane", Integer.class); |
| | | |
| | | List<String> agvNosByLane = this.findAgvNosByLane(lane); |
| | | agvNosByLane.remove(agv.getUuid()); |
| | | agvNosByLane.remove(agvNo); |
| | | if (agvNosByLane.size() >= maxAgvCountInLane) { |
| | | return false; |
| | | } |