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