From 7b971409fa868cef49fb009645db5c3e31eb2565 Mon Sep 17 00:00:00 2001 From: zhang <zc857179121@qq.com> Date: 星期一, 23 六月 2025 16:51:04 +0800 Subject: [PATCH] 1 --- zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/MainService.java | 84 ++++++++++++++++++++++++++++++----------- 1 files changed, 61 insertions(+), 23 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 67b6356..b309815 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 @@ -284,11 +284,13 @@ */ @Transactional(propagation = Propagation.REQUIRES_NEW) public void buildMajorTask(Long agvId, List<Task> taskList) { - if (Cools.isEmpty(agvId, taskList)) { return; } + if (Cools.isEmpty(agvId, taskList)) { + return; + } try { // valid ----------------------------------------------- Agv agv = agvService.getById(agvId); - if (!agvService.judgeEnable(agv.getId(), false, true)) { + if (!agvService.judgeEnable(agv.getId(), false, true)) { return; } if (!Cools.isEmpty(taskService.selectInSts(agvId, TaskStsType.ASSIGN, TaskStsType.PROGRESS))) { @@ -324,16 +326,18 @@ * val: new TaskPosDto(taskId, new Double[]{code.getX(), code.getY()}, posType) */ Map<String, List<TaskPosDto>> groups = new HashMap<>(); - final String sameGroupXy = configService.getVal( "sameGroupXy", String.class); + final String sameGroupXy = configService.getVal("sameGroupXy", String.class); int backpackLev = 0; for (Task task : taskList) { - backpackLev ++; + backpackLev++; Code startCode = null; Code endCode = null; - Loc oriLoc = null; Loc destLoc = null; - Sta oriSta = null; Sta destSta = null; + Loc oriLoc = null; + Loc destLoc = null; + Sta oriSta = null; + Sta destSta = null; switch (Objects.requireNonNull(TaskTypeType.get(task.getTaskTypeEl()))) { case LOC_TO_LOC: oriLoc = locService.getById(task.getOriLoc()); @@ -436,7 +440,7 @@ // re-order by agv current position Code currCode = codeService.getCacheById(agvDetail.getRecentCode()); - Double[] currPosition = new Double[] {currCode.getX(), currCode.getY()}; + Double[] currPosition = new Double[]{currCode.getX(), currCode.getY()}; List<List<TaskPosDto>> pickGroups = new ArrayList<>(); List<List<TaskPosDto>> dropGroups = new ArrayList<>(); @@ -482,7 +486,7 @@ List<Segment> segmentList = new ArrayList<>(); for (List<TaskPosDto> dtoList : list) { for (TaskPosDto taskPosDto : dtoList) { - segSerial ++; + segSerial++; AgvBackpackType backpackType = AgvBackpackDto.find(backpackDtoList, taskPosDto.getTaskId()); assert null != backpackType; @@ -531,12 +535,15 @@ * 鍏呯數 鍥炲緟鏈轰綅浠诲姟 * zc 鏂板浜嗘槸鍚﹀己鍒讹紝寮哄埗璇存槑鐢辩敤鎴峰彂璧凤紝灏忚溅鍦ㄨ秴杩囦綆鐢甸噺灏卞彲浠ュ仛绉诲姩鍏呯數鍘诲緟鏈轰綅 */ - @Transactional(propagation = Propagation.REQUIRES_NEW) // although there is a Transactional here that the lock is isolated, but we can't join the caller's Transactional - public boolean buildMinorTask(Long agvId, TaskTypeType taskType, String destination, Jam jam,boolean force) { - if (Cools.isEmpty(agvId, taskType)) { return false; } + @Transactional(propagation = Propagation.REQUIRES_NEW) + // although there is a Transactional here that the lock is isolated, but we can't join the caller's Transactional + public boolean buildMinorTask(Long agvId, TaskTypeType taskType, String destination, Jam jam, boolean force) { + if (Cools.isEmpty(agvId, taskType)) { + return false; + } try { String agvNo = agvService.getAgvNo(agvId); - if (!agvService.judgeEnable(agvId,false, force)) { + if (!agvService.judgeEnable(agvId, false, force)) { return false; } if (!Cools.isEmpty(taskService.selectInSts(agvId, TaskStsType.ASSIGN, TaskStsType.PROGRESS))) { @@ -580,7 +587,7 @@ task.setAgvId(agvId); task.setUuid(String.valueOf(snowflakeIdWorker.nextId()).substring(3)); List<Task> lastTasks = taskService.list(new LambdaQueryWrapper<Task>().orderByDesc(Task::getId)); - task.setSeqNum(Utils.generateSeqNum(Cools.isEmpty(lastTasks)?null:lastTasks.get(0).getSeqNum())); + task.setSeqNum(Utils.generateSeqNum(Cools.isEmpty(lastTasks) ? null : lastTasks.get(0).getSeqNum())); task.setOriCode(agvDetail.getCode()); task.setDestCode(endCode.getId()); // lane @@ -588,7 +595,7 @@ if (null != destLane) { task.setDestLaneHash(destLane.getHashCode()); } - task.setPriority(taskType.equals(TaskTypeType.TO_CHARGE)?2:1); + task.setPriority(taskType.equals(TaskTypeType.TO_CHARGE) ? 2 : 1); task.setTaskSts(TaskStsType.ASSIGN.val()); task.setTaskType(taskType.val()); task.setIoTime(now); @@ -610,11 +617,12 @@ } // generate segment - int segSerial = 0; segSerial ++; + int segSerial = 0; + segSerial++; List<Segment> segmentList = new ArrayList<>(); String posType = ""; - switch (taskType){ + switch (taskType) { case TO_CHARGE: posType = TaskPosDto.PosType.TO_CHARGE.toString(); break; @@ -686,7 +694,9 @@ @Transactional public synchronized void generateAction(Long agvId, List<Segment> segmentList, List<String> pathList, Date algoStartTime) { try { - if (Cools.isEmpty(agvId, segmentList)) { return; } + if (Cools.isEmpty(agvId, segmentList)) { + return; + } Date now = new Date(); long actionPrepareSts = ActionStsType.PREPARE.val(); // JSONObject storeDirection = configService.getVal("storeDirection", JSONObject.class); @@ -728,7 +738,9 @@ List<String> pathListPart = pathList.subList(pathList.indexOf(lastCode.getData()), pathList.indexOf(code.getData()) + 1); for (int i = 0; i < pathListPart.size(); i++) { - if (i == 0) { continue; } + if (i == 0) { + continue; + } String next = pathListPart.get(i); @@ -937,7 +949,7 @@ task.getBusId(), // 鎬荤嚎 task.getId(), // 浠诲姟 null, // 鍔ㄤ綔鍙� - null, // 浼樺厛绾� + null, // 浼樺厛绾� ActionTypeType.ReadyReleaseToShelvesLoc.desc, // 鍚嶇О (double) agvDirectionType.val, // 灞炴�у�� lastCode.getData(), // 鍦伴潰鐮� @@ -1202,6 +1214,8 @@ } } + + @Transactional public void publishAction(String actionGroupId) { try { @@ -1219,6 +1233,28 @@ String agvNo = agvService.getAgvNo(agvId); if (!agvService.judgeOnline(agvId)) { return; + } + + int lastActionIndex = actionSorter.findLastActionIndex(actionList, ActionTypeType.ReadyReleaseToAgvSite.val()); + if (lastActionIndex != -1) { + List<Action> sortedList = new ArrayList<>(actionList.size()); + for (int i = 0; i < actionList.size(); i++) { + // 璺宠繃鍔ㄤ綔鏈韩 + if (i != lastActionIndex) { + sortedList.add(actionList.get(i)); + } + } + actionList = sortedList; + } + + Action shang = actionService.getOne(new LambdaQueryWrapper<Action>().eq(Action::getAgvId, agvId).eq(Action::getActionSts, ActionStsType.PREPARE.val()).eq(Action::getActionType, ActionTypeType.ReadyReleaseToAgvSite.val()).orderByDesc(Action::getId)); + if (shang != null) { + int turnCornerIdx = actionSorter.findFirstActionIndex(actionList, ActionTypeType.TurnCorner.val()); + if (turnCornerIdx == -1) { + actionList.add(0, shang); + } else { + actionList.add(turnCornerIdx, shang); + } } long actionIssuedSts = ActionStsType.ISSUED.val(); @@ -1438,9 +1474,9 @@ // segment list List<Segment> segmentList = segmentService.list(new LambdaQueryWrapper<Segment>() - .eq(Segment::getGroupId, serialNo) + .eq(Segment::getGroupId, serialNo) // .eq(Segment::getState, SegmentStateType.RUNNING.toString()) - .orderByAsc(Segment::getSerial) + .orderByAsc(Segment::getSerial) ); // settlement @@ -1470,8 +1506,10 @@ for (Segment segment : segmentList) { boolean taskComplete = false; - Task task = taskService.getById(segment.getTaskId()); assert null != task; - TaskTypeType typeType = TaskTypeType.get(task.getTaskTypeEl()); assert null != typeType; + Task task = taskService.getById(segment.getTaskId()); + assert null != task; + TaskTypeType typeType = TaskTypeType.get(task.getTaskTypeEl()); + assert null != typeType; TaskPosDto.PosType posType = TaskPosDto.queryPosType(segment.getPosType()); switch (Objects.requireNonNull(posType)) { -- Gitblit v1.9.1