From b6bad62d8839cc50d1a82e9ffecbbf666efb780e Mon Sep 17 00:00:00 2001 From: luxiaotao1123 <t1341870251@163.com> Date: 星期三, 23 十月 2024 16:41:51 +0800 Subject: [PATCH] # --- zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/MainService.java | 59 ++++++++++++++++++----------- zy-acs-manager/src/main/java/com/zy/acs/manager/core/scheduler/KernelScheduler.java | 2 zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/AgvServiceImpl.java | 3 + 3 files changed, 39 insertions(+), 25 deletions(-) diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/scheduler/KernelScheduler.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/scheduler/KernelScheduler.java index d7b7119..93c2025 100644 --- a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/scheduler/KernelScheduler.java +++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/scheduler/KernelScheduler.java @@ -81,7 +81,7 @@ } for (AgvTaskDto dto : taskDtoList) { - mainService.mergeMajorTask(dto.getAgvId(), dto.getTaskList()); + mainService.buildMajorTask(dto.getAgvId(), dto.getTaskList()); } this.lock.unlock(); } 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..763aee2 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 @@ -251,33 +251,25 @@ * 瑙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 @@ -290,15 +282,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 +356,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 +389,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 +626,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 diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/AgvServiceImpl.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/AgvServiceImpl.java index e710b8e..59e06fd 100644 --- a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/AgvServiceImpl.java +++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/AgvServiceImpl.java @@ -81,6 +81,7 @@ i.eq(Segment::getState, SegmentStateType.RUNNING.toString()); }) ) > 0) { + log.warn("[{}]鍙稟gv姝e湪蹇欑 -segment......", agv.getUuid()); return false; } if (!this.judgeOnline(agv.getId())) { @@ -111,7 +112,7 @@ } if (!agvDetail.getAgvStatus().equals(AgvStatusType.CHARGE)) { if (agvDetail.getPos() != 1) { - log.warn("[{}]鍙稟gv璇风Щ鍔ㄥ埌瀹氫綅......", agv.getUuid()); + log.warn("[{}]鍙稟gv褰撳墠涓嶅湪瀹氫綅......", agv.getUuid()); return false; } } -- Gitblit v1.9.1