From 7f70cb15d035f0c233b9e62b9e43aa985317c908 Mon Sep 17 00:00:00 2001 From: luxiaotao1123 <t1341870251@163.com> Date: 星期一, 04 十一月 2024 10:22:45 +0800 Subject: [PATCH] # --- zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/MainService.java | 73 +++++++++++++++++++++++++++--------- 1 files changed, 55 insertions(+), 18 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 1e752b6..ba7f2b2 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 @@ -18,6 +18,7 @@ import com.zy.acs.common.utils.Utils; import com.zy.acs.manager.common.domain.TaskDto; import com.zy.acs.manager.common.exception.BusinessException; +import com.zy.acs.manager.common.utils.CommonUtil; import com.zy.acs.manager.core.domain.AgvBackpackDto; import com.zy.acs.manager.core.domain.TaskPosDto; import com.zy.acs.manager.core.service.astart.MapDataDispatcher; @@ -109,7 +110,7 @@ taskDtoList.sort((o1, o2) -> o2.getPriority() - o1.getPriority()); // 鏍¢獙 - List<Task> taskList = validService.validBusDto(taskDtoList); + List<Task> taskList = validService.validTaskDtoList(taskDtoList); // 淇濆瓨鎬荤嚎 Date now = new Date(); @@ -290,7 +291,7 @@ taskList.sort(new Comparator<Task>() { @Override public int compare(Task o1, Task o2) { - return o1.getPriority() - o2.getPriority(); + return o2.getPriority() - o1.getPriority(); } }); Integer backpack = agvService.getBackpack(agv); @@ -298,6 +299,7 @@ taskList = taskList.subList(0, backpack); } + AgvDetail agvDetail = agvDetailService.selectByAgvId(agvId); List<AgvBackpackDto> backpackDtoList = new ArrayList<>(); /** @@ -410,6 +412,50 @@ taskPosDtoList.sort((o1, o2) -> (int) (o1.getSecondWeight(sameGroupXy) * 100 - o2.getSecondWeight(sameGroupXy) * 100)); } + // re-order by agv current position + Code currCode = codeService.getById(agvDetail.getRecentCode()); + Double[] currPosition = new Double[] {currCode.getX(), currCode.getY()}; + + List<TaskPosDto> theFirstOne = list.get(0); + List<TaskPosDto> theLastOne = list.get(list.size() - 1); + + if (list.size() == 1) { + TaskPosDto head = theFirstOne.get(0); + TaskPosDto tail = theFirstOne.get(theFirstOne.size() - 1); + + int distanceByHead = CommonUtil.calcDistance(currPosition, head.getXy()); + int distanceByTail = CommonUtil.calcDistance(currPosition, tail.getXy()); + + if (distanceByTail < distanceByHead) { + Collections.reverse(theFirstOne); + } + + } else { + TaskPosDto headOfFirst = theFirstOne.get(0); + TaskPosDto tailOfFirst = theFirstOne.get(theFirstOne.size() - 1); + + TaskPosDto headOfLast = theLastOne.get(0); + TaskPosDto tailOfLast = theLastOne.get(theLastOne.size() - 1); + + int distanceByHeadOfFirst = CommonUtil.calcDistance(currPosition, headOfFirst.getXy()); + int distanceByTailOfFirst = CommonUtil.calcDistance(currPosition, tailOfFirst.getXy()); + + int distanceByHeadOfLast = CommonUtil.calcDistance(currPosition, headOfLast.getXy()); + int distanceByTailOfLast = CommonUtil.calcDistance(currPosition, tailOfLast.getXy()); + + if (Math.min(distanceByHeadOfLast, distanceByTailOfLast) < Math.min(distanceByHeadOfFirst, distanceByTailOfFirst)) { + Collections.reverse(list); + + if (distanceByTailOfLast < distanceByHeadOfLast) { + Collections.reverse(theLastOne); + } + } else { + if (distanceByTailOfFirst < distanceByHeadOfFirst) { + Collections.reverse(theFirstOne); + } + } + } + // generate travel Travel travel = new Travel(); travel.setUuid(String.valueOf(snowflakeIdWorker.nextId()).substring(3)); @@ -504,17 +550,9 @@ FuncSta funcSta = funcStaService.checkoutClosestFunSta(agvDetail.getRecentCode(), idleFunStaList); endCode = codeService.getById(funcSta.getCode()); } - -// List<FuncSta> funcStaList = funcStaService.list(new LambdaQueryWrapper<FuncSta>() -// .eq(FuncSta::getType, FuncStaType.query(taskType).toString()) -// .eq(FuncSta::getAgvId, agv.getId()) -// .eq(FuncSta::getState, FuncStaStateType.IDLE.toString()) -// .eq(FuncSta::getStatus, StatusType.ENABLE.val) -// ); -// if (!Cools.isEmpty(funcStaList)) { -// FuncSta funcSta = funcStaList.get(0); -// endCode = codeService.getById(funcSta.getCode()); -// } + if (null == endCode) { + log.warn("AGV[{}] failed to search destination锛宼here hadn't any idle funSta锛孴askTypeType锛歿}", agv.getUuid(), taskType.toString()); + } break; case MOVE: endCode = codeService.selectByData(destination); @@ -524,7 +562,6 @@ } if (null == endCode) { - log.error("{}鍙疯溅杈嗗缓绔嬪姛鑳戒换鍔″け璐ワ紝鏃犳硶妫�绱㈠埌鐩爣瀹氫綅锛孴askTypeType锛歿}", agv.getUuid(), taskType.toString()); return false; } @@ -541,7 +578,7 @@ task.setIoTime(now); task.setStartTime(now); if (!taskService.save(task)) { - throw new BusinessException(task.getSeqNum() + "浠诲姟淇濆瓨澶辫触"); + throw new BusinessException(task.getSeqNum() + " failed to save"); } // generate travel @@ -553,7 +590,7 @@ travel.setTaskIds(JSON.toJSONString(Collections.singletonList(task.getId()))); travel.setState(TravelStateType.RUNNING.toString()); if (!travelService.save(travel)) { - throw new BusinessException("浠诲姟缁勪繚瀛樺け璐�"); + throw new BusinessException("travel failed to save"); } // generate segment @@ -592,7 +629,7 @@ next.setState(SegmentStateType.WAITING.toString()); } if (!segmentService.save(next)) { - throw new BusinessException("浠诲姟缁勪繚瀛樺け璐�"); + throw new BusinessException("segment failed to save"); } } @@ -604,7 +641,7 @@ destFuncSta.setState(FuncStaStateType.OCCUPIED.toString()); destFuncSta.setUpdateTime(now); if (!funcStaService.updateById(destFuncSta)) { - log.error("FuncSta [{}] 鏇存柊鐘舵�佸け璐� 锛侊紒锛�", destFuncSta.getName()); + log.error("FuncSta [{}] failed to update 锛侊紒锛�", destFuncSta.getName()); } break; case MOVE: -- Gitblit v1.9.1