From fff2e8aa532540036088744c76efe5bffc7733a3 Mon Sep 17 00:00:00 2001 From: luxiaotao1123 <t1341870251@163.com> Date: 星期五, 25 十月 2024 15:24:00 +0800 Subject: [PATCH] # --- zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/MainService.java | 85 ++++++++++++++++++++++++++++-------------- 1 files changed, 56 insertions(+), 29 deletions(-) diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/MainService.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/MainService.java index 21feeaa..9b3a1d8 100644 --- a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/MainService.java +++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/MainService.java @@ -211,6 +211,25 @@ } return; } + + for (Task task : taskList) { + Agv agv = missionAssignService.execute(task); + if (null == agv) { + log.warn("Task[{}] has an issue锛� because it failed to checkout agv which is idle...", task.getSeqNum()); + continue; + } + task.setAgvId(agv.getId()); + task.setTaskSts(TaskStsType.WAITING.val()); + task.setIoTime(now); + task.setUpdateTime(now); + if (!taskService.updateById(task)) { + throw new BusinessException("seqNum: " + task.getSeqNum() + " failed to update"); + } + } + + + // ------------------------------------------ + List<Long> taskIds = taskList.stream().map(Task::getId).distinct().collect(Collectors.toList()); Map<String, List<Long>> taskAllot = new HashMap<>(); @@ -236,11 +255,6 @@ taskAllot.put(agv.getUuid(), Utils.singletonList(task.getId())); } } - -// bus.setUpdateTime(now); -// if (!busService.updateById(bus)) { -// throw new BusinessException(bus.getSeqNum() + "鎬荤嚎鏇存柊澶辫触"); -// } } catch (Exception e) { log.error("mainService.infuseAgvForTask", e); TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); @@ -251,38 +265,30 @@ * 瑙f瀽鍙栨斁璐ч泦鍚堜换鍔�,杩涜鏈�浼樼殑鎺掑垪缁勫悎椤哄簭 ( 杞﹁締姝ゆ椂鏄┖闂蹭笖闈欐鐨� ) */ @Transactional - public synchronized void mergeMajorTask(Long agvId, List<Task> taskList) { + public synchronized void buildMajorTask(Long agvId, List<Task> taskList) { if (Cools.isEmpty(taskList)) { return; } boolean lockAcquired = false; try { if (!(lockAcquired = this.lock.tryLock(LOCK_TIMEOUT, TimeUnit.SECONDS))) { throw new CoolException("generate [task] action fail, cause can not acquire lock ..."); } - Date now = new Date(); - final String sameGroupXy = configService.getVal( "sameGroupXy", String.class); + // valid ----------------------------------------------- Agv agv = agvService.getById(agvId); if (!agvService.judgeEnable(agv.getId(), agvDetail -> agvDetail.getVol() > agv.getChargeLine())) { throw new CoolException("AGV[" + agv.getUuid() + "]褰撳墠涓嶅彲鐢�..."); } - if (!Cools.isEmpty(taskService.selectInSts(agvId, TaskStsType.ASSIGN, TaskStsType.PROGRESS))) { throw new CoolException("AGV[" + agv.getUuid() + "]鍒嗛厤浠诲姟澶辫触锛屽凡瀛樺湪鎵ц浠诲姟..."); } - AgvDetail agvDetail = agvDetailService.selectByAgvId(agvId); - assert agvDetail != null; - if (agvDetail.getPos() == 0) { - if (!agvDetail.getAgvStatus().equals(AgvStatusType.CHARGE)) { - throw new CoolException("AGV[" + agv.getUuid() + "]褰撳墠涓嶅湪瀹氫綅..."); - } - } - + // execute ---------------------------------------------------- + Date now = new Date(); // sort and sub taskList.sort(new Comparator<Task>() { @Override public int compare(Task o1, Task o2) { - return 0; + return o1.getPriority() - o2.getPriority(); } }); Integer backpack = agvService.getBackpack(agv); @@ -290,15 +296,17 @@ taskList = taskList.subList(0, backpack); } + List<AgvBackpackDto> backpackDtoList = new ArrayList<>(); + /** - * single agvId + * 鍚屽贩閬撳綊绫� + * same lane for every single agvId * - * key: y + TaskPosDto.PosType.ORI_LOC / ORI_STA / DEST_LOC / DEST_STA + * key: y(val) + TaskPosDto.PosType.ORI_LOC / ORI_STA / DEST_LOC / DEST_STA * val: new TaskPosDto(taskId, new Double[]{code.getX(), code.getY()}, posType) */ Map<String, List<TaskPosDto>> groups = new HashMap<>(); - - List<AgvBackpackDto> backpackDtoList = new ArrayList<>(); + final String sameGroupXy = configService.getVal( "sameGroupXy", String.class); int backpackLev = 0; for (Task task : taskList) { @@ -362,7 +370,31 @@ } /** - * List<TaskPosDto>: task list on the same channel + * 1.Map<String, List<TaskPosDto>> groups + * + * key: 1000 + ORI_LOC + * val: [TaskPosDto(taskId, new Double[]{code.getX(), code.getY()}, posType), TaskPosDto(taskId, new Double[]{code.getX(), code.getY()}, posType),...] + * + * key: 3000 + ORI_LOC + * val: [TaskPosDto(taskId, new Double[]{code.getX(), code.getY()}, posType), TaskPosDto(taskId, new Double[]{code.getX(), code.getY()}, posType),...] + * + * key: 2000 + ORI_LOC + * val: [TaskPosDto(taskId, new Double[]{code.getX(), code.getY()}, posType), TaskPosDto(taskId, new Double[]{code.getX(), code.getY()}, posType),...] + * + * ...... + * + * 2.ArrayList<List<TaskPosDto>> list + * [ + * [TaskPosDto(taskId, new Double[]{code.getX(), code.getY()}, posType), TaskPosDto(taskId, new Double[]{code.getX(), code.getY()}, posType),...], + * [TaskPosDto(taskId, new Double[]{code.getX(), code.getY()}, posType), TaskPosDto(taskId, new Double[]{code.getX(), code.getY()}, posType),...], + * [TaskPosDto(taskId, new Double[]{code.getX(), code.getY()}, posType), TaskPosDto(taskId, new Double[]{code.getX(), code.getY()}, posType),...], + * ...... + * ] + */ + + /** + * 瀵规墍鏈夊贩閬撹繘琛屾湁搴忔帓搴忥紝鍏堟槸閽堝List涓轰竴涓崟浣嶏紝瀵逛粬浠繘琛孎irstWeight鎺掑簭锛岀浉褰撲簬琛�1鐨刱ey鐨勬暟鍊艰繘琛屾湁搴忔帓搴� + * List<TaskPosDto>: task list on the same lane * ArrayList<List<TaskPosDto>>: all the task list by one agv */ ArrayList<List<TaskPosDto>> list = new ArrayList<>(groups.values()); @@ -371,7 +403,7 @@ double o2CompVal = (o2.get(0).getFirstWeight(sameGroupXy) * 100) + o2.get(0).getPosType().compOffset; return (int) (o1CompVal - o2CompVal); }); - + // 閽堝Dto锛屾寜鐓econdWeight杩涜鎺掑簭 for (List<TaskPosDto> taskPosDtoList : list) { taskPosDtoList.sort((o1, o2) -> (int) (o1.getSecondWeight(sameGroupXy) * 100 - o2.getSecondWeight(sameGroupXy) * 100)); } @@ -608,11 +640,6 @@ AgvDetail agvDetail = agvDetailService.selectByAgvId(agvId); assert agvDetail != null; - if (agvDetail.getPos() == 0) { - if (!agvDetail.getAgvStatus().equals(AgvStatusType.CHARGE)) { - throw new CoolException("AGV[" + agv.getUuid() + "]褰撳墠涓嶅湪瀹氫綅..."); - } - } List<Action> actionList = new ArrayList<>(); // start node -- Gitblit v1.9.1