From f2631e786cc1c939e0a0698eadee76fd3d9a1fa9 Mon Sep 17 00:00:00 2001
From: vincentlu <t1341870251@gmail.com>
Date: 星期五, 10 一月 2025 16:39:41 +0800
Subject: [PATCH] #
---
zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/MainService.java | 70 +++++++++++++++++++----------------
1 files changed, 38 insertions(+), 32 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 1241b83..6dd57dd 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
@@ -1,7 +1,6 @@
package com.zy.acs.manager.core.service;
import com.alibaba.fastjson.JSON;
-import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.zy.acs.common.domain.AgvAction;
import com.zy.acs.common.domain.AgvActionItem;
@@ -32,6 +31,7 @@
import com.zy.acs.manager.manager.enums.*;
import com.zy.acs.manager.manager.service.*;
import com.zy.acs.manager.manager.service.impl.WebsocketServiceImpl;
+import com.zy.acs.manager.manager.utils.ActionSorter;
import com.zy.acs.manager.system.service.ConfigService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
@@ -94,6 +94,8 @@
private AgvModelService agvModelService;
@Autowired
private LaneService laneService;
+ @Autowired
+ private ActionSorter actionSorter;
@SuppressWarnings("all")
@@ -472,6 +474,7 @@
// task
for (Task task : taskList) {
task.setTaskSts(TaskStsType.ASSIGN.val());
+ task.setStartTime(now);
task.setUpdateTime(now);
if (!taskService.updateById(task)) {
throw new BusinessException(task.getUuid() + "浠诲姟鏇存柊澶辫触");
@@ -520,7 +523,7 @@
}
break;
case MOVE:
- endCode = codeService.selectByData(destination);
+ endCode = codeService.getCacheByData(destination);
break;
default:
return false;
@@ -645,26 +648,27 @@
try {
if (Cools.isEmpty(agvId, segmentList)) { return; }
Date now = new Date();
- JSONObject storeDirection = configService.getVal("storeDirection", JSONObject.class);
- Agv agv = agvService.getById(agvId);
- if (!agvService.judgeEnable(agv.getId())) {
- throw new CoolException("AGV[" + agv.getUuid() + "]褰撳墠涓嶅彲鐢�...");
+ long actionPrepareSts = ActionStsType.PREPARE.val();
+// JSONObject storeDirection = configService.getVal("storeDirection", JSONObject.class);
+ int angleOffsetVal = configService.getVal("mapAngleOffsetVal", Integer.class);
+ String agvNo = agvService.getAgvNo(agvId);
+ if (!agvService.judgeEnable(agvId)) {
+ throw new CoolException("AGV[" + agvNo + "]褰撳墠涓嶅彲鐢�...");
}
- AgvModel agvModel = agvModelService.getById(agv.getAgvModel());
+ AgvModel agvModel = agvModelService.getByAgvId(agvId);
Double workDirection = agvModel.getWorkDirection();
AgvSpeedType agvSpeedType = AgvSpeedType.query(agvModel.getTravelSpeed());
assert agvSpeedType != null;
- AgvDetail agvDetail = agvDetailService.selectByAgvId(agvId);
- assert agvDetail != null;
+ AgvDetail agvDetail = agvDetailService.selectMajorByAgvId(agvId);
List<Action> actionList = new ArrayList<>();
// start node
Code lastCode = codeService.getById(agvDetail.getRecentCode());
Double lastDirection = agvDetail.getAgvAngle();
if (!lastCode.getData().equals(pathList.get(0))) {
- throw new CoolException("AGV[" + agv.getUuid() + "]瀹氫綅鍋忕Щ...");
+ throw new CoolException("AGV[" + agvNo + "]瀹氫綅鍋忕Щ...");
}
boolean first = true;
@@ -688,15 +692,15 @@
String next = pathListPart.get(i);
- Code nextCode = codeService.selectByData(next);
- Double nextDirection = mapService.calculateDirection(lastCode, nextCode);
+ Code nextCode = codeService.getCacheByData(next);
+ Double nextDirection = mapService.calculateDirection(lastCode, nextCode, angleOffsetVal);
boolean reverse = false;
if (nextDirection.equals((workDirection + 180) % 360)) {
nextDirection = workDirection;
reverse = true;
}
- if (!lastDirection.equals(nextDirection) || actionList.size() == 0) {
+ if (!lastDirection.equals(nextDirection) || actionList.isEmpty()) {
// turn
actionList.add(new Action(
null, // 缂栧彿
@@ -709,7 +713,7 @@
lastCode.getData(), // 鍦伴潰鐮�
String.valueOf(nextDirection), // 鍔ㄤ綔鍙傛暟
ActionTypeType.TurnCorner.val(), // 鍔ㄤ綔绫诲瀷
- ActionStsType.PREPARE.val(), // 鍔ㄤ綔杩涘害
+ actionPrepareSts, // 鍔ㄤ綔杩涘害
agvId, // AGV
now // 宸ヤ綔鏃堕棿
));
@@ -735,7 +739,7 @@
lastCode.getData(), // 鍦伴潰鐮�
String.valueOf(gap.getDistance()), // 鍔ㄤ綔鍙傛暟
actionType.val(), // 鍔ㄤ綔绫诲瀷
- ActionStsType.PREPARE.val(), // 鍔ㄤ綔杩涘害
+ actionPrepareSts, // 鍔ㄤ綔杩涘害
agvId, // AGV
now // 宸ヤ綔鏃堕棿
));
@@ -761,7 +765,7 @@
lastCode.getData(), // 鍦伴潰鐮�
String.valueOf(workDirection), // 鍔ㄤ綔鍙傛暟
ActionTypeType.TurnCorner.val(), // 鍔ㄤ綔绫诲瀷
- ActionStsType.PREPARE.val(), // 鍔ㄤ綔杩涘害
+ actionPrepareSts, // 鍔ㄤ綔杩涘害
agvId, // AGV
now // 宸ヤ綔鏃堕棿
));
@@ -792,7 +796,7 @@
lastCode.getData(), // 鍦伴潰鐮�
String.valueOf(workDirection), // 鍔ㄤ綔鍙傛暟
ActionTypeType.TurnCorner.val(), // 鍔ㄤ綔绫诲瀷
- ActionStsType.PREPARE.val(), // 鍔ㄤ綔杩涘害
+ actionPrepareSts, // 鍔ㄤ綔杩涘害
agvId, // AGV
now // 宸ヤ綔鏃堕棿
));
@@ -801,7 +805,7 @@
// 璐ф灦鍙栬揣
Loc oriLoc = locService.getById(task.getOriLoc());
// 璁$畻宸﹀彸鏂瑰悜
- agvDirectionType = mapService.calculateAgvWorkDirection(storeDirection, oriLoc, lastCode);
+ agvDirectionType = mapService.calculateAgvWorkDirection(oriLoc, lastCode);
actionList.add(new Action(
null, // 缂栧彿
task.getBusId(), // 鎬荤嚎
@@ -813,7 +817,7 @@
lastCode.getData(), // 鍦伴潰鐮�
String.valueOf(oriLoc.getOffset()), // 鍔ㄤ綔鍙傛暟
ActionTypeType.ReadyTakeFromShelvesLoc.val(), // 鍔ㄤ綔绫诲瀷
- ActionStsType.PREPARE.val(), // 鍔ㄤ綔杩涘害
+ actionPrepareSts, // 鍔ㄤ綔杩涘害
agvId, // AGV
now // 宸ヤ綔鏃堕棿
));
@@ -829,7 +833,7 @@
lastCode.getData(), // 鍦伴潰鐮�
String.valueOf(backpackType.height), // 鍔ㄤ綔鍙傛暟
ActionTypeType.ReadyReleaseToAgvSite.val(), // 鍔ㄤ綔绫诲瀷
- ActionStsType.PREPARE.val(), // 鍔ㄤ綔杩涘害
+ actionPrepareSts, // 鍔ㄤ綔杩涘害
agvId, // AGV
now // 宸ヤ綔鏃堕棿
));
@@ -850,7 +854,7 @@
lastCode.getData(), // 鍦伴潰鐮�
String.valueOf(workDirection), // 鍔ㄤ綔鍙傛暟
ActionTypeType.TurnCorner.val(), // 鍔ㄤ綔绫诲瀷
- ActionStsType.PREPARE.val(), // 鍔ㄤ綔杩涘害
+ actionPrepareSts, // 鍔ㄤ綔杩涘害
agvId, // AGV
now // 宸ヤ綔鏃堕棿
));
@@ -868,7 +872,7 @@
lastCode.getData(), // 鍦伴潰鐮�
String.valueOf(backpackType.height), // 鍔ㄤ綔鍙傛暟
ActionTypeType.ReadyTakeFromAgvSite.val(), // 鍔ㄤ綔绫诲瀷
- ActionStsType.PREPARE.val(), // 鍔ㄤ綔杩涘害
+ actionPrepareSts, // 鍔ㄤ綔杩涘害
agvId, // AGV
now // 宸ヤ綔鏃堕棿
));
@@ -876,7 +880,7 @@
// 璐ф灦鏀捐揣
Loc destLoc = locService.getById(task.getDestLoc());
// 璁$畻宸﹀彸鏂瑰悜
- agvDirectionType = mapService.calculateAgvWorkDirection(storeDirection, destLoc, lastCode);
+ agvDirectionType = mapService.calculateAgvWorkDirection(destLoc, lastCode);
actionList.add(new Action(
null, // 缂栧彿
task.getBusId(), // 鎬荤嚎
@@ -888,7 +892,7 @@
lastCode.getData(), // 鍦伴潰鐮�
String.valueOf(destLoc.getOffset()), // 鍔ㄤ綔鍙傛暟
ActionTypeType.ReadyReleaseToShelvesLoc.val(), // 鍔ㄤ綔绫诲瀷
- ActionStsType.PREPARE.val(), // 鍔ㄤ綔杩涘害
+ actionPrepareSts, // 鍔ㄤ綔杩涘害
agvId, // AGV
now // 宸ヤ綔鏃堕棿
));
@@ -913,7 +917,7 @@
lastCode.getData(), // 鍦伴潰鐮�
String.valueOf(chargeDirection), // 鍔ㄤ綔鍙傛暟
ActionTypeType.TurnCorner.val(), // 鍔ㄤ綔绫诲瀷
- ActionStsType.PREPARE.val(), // 鍔ㄤ綔杩涘害
+ actionPrepareSts, // 鍔ㄤ綔杩涘害
agvId, // AGV
now // 宸ヤ綔鏃堕棿
));
@@ -932,7 +936,7 @@
lastCode.getData(), // 鍦伴潰鐮�
null, // 鍔ㄤ綔鍙傛暟
ActionTypeType.DockingCharge.val(), // 鍔ㄤ綔绫诲瀷
- ActionStsType.PREPARE.val(), // 鍔ㄤ綔杩涘害
+ actionPrepareSts, // 鍔ㄤ綔杩涘害
agvId, // AGV
now // 宸ヤ綔鏃堕棿
));
@@ -952,7 +956,7 @@
// lastCode.getData(), // 鍦伴潰鐮�
// String.valueOf(standByDirection), // 鍔ㄤ綔鍙傛暟
// ActionTypeType.TurnCorner.val(), // 鍔ㄤ綔绫诲瀷
-// ActionStsType.PREPARE.val(), // 鍔ㄤ綔杩涘害
+// actionPrepareSts, // 鍔ㄤ綔杩涘害
// agvId, // AGV
// now // 宸ヤ綔鏃堕棿
// ));
@@ -979,16 +983,17 @@
lastCode.getData(), // 鍦伴潰鐮�
null, // 鍔ㄤ綔鍙傛暟
ActionTypeType.FinishPath.val(), // 鍔ㄤ綔绫诲瀷
- ActionStsType.PREPARE.val(), // 鍔ㄤ綔杩涘害
+ actionPrepareSts, // 鍔ㄤ綔杩涘害
agvId, // AGV
now // 宸ヤ綔鏃堕棿
));
- List<Action> newActionList = new ArrayList<>(actionList);
+// List<Action> newActionList = new ArrayList<>(actionList);
// List<Action> optimizeList = actionService.optimizeSort(actionList);
-// List<Action> newActionList = new ArrayList<>(optimizeList);
+ List<Action> optimizeList = actionSorter.optimizeSort(actionList);
+ List<Action> newActionList = new ArrayList<>(optimizeList);
String groupId = String.valueOf(snowflakeIdWorker.nextId()).substring(3);
@@ -1018,14 +1023,15 @@
}
}
- log.info(agv.getUuid() + "鍙稟gv鍔ㄤ綔缁勮瀹屾垚锛屾寚浠ゆ暟閲忥細" + newActionList.size());
+ log.info("{}鍙稟gv鍔ㄤ綔缁勮瀹屾垚锛屾寚浠ゆ暟閲忥細{}", agvNo, newActionList.size());
} catch (Exception e) {
log.error("mainService.generateAction", e);
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
if (!Cools.isEmpty(pathList)) {
pathList.remove(0);
- mapDataDispatcher.clearDynamicMatrixByCodeList(null, pathList);
+ List<int[]> codeMatrixIdxList = mapDataDispatcher.getCodeMatrixIdxList(null, pathList);
+ mapDataDispatcher.clearDynamicMatrixByCodeList(null, codeMatrixIdxList);
}
throw new RuntimeException("generateAction method caught an exception, rolling back transaction.", e);
--
Gitblit v1.9.1