From 583b31d46bb8abbee7410d29ca229120ee589cba Mon Sep 17 00:00:00 2001
From: vincentlu <t1341870251@gmail.com>
Date: 星期一, 05 一月 2026 10:10:08 +0800
Subject: [PATCH] # version merge
---
zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/MainService.java | 102 +++++++++++++++++++++++++++++++-------------------
1 files changed, 63 insertions(+), 39 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 ba83c4e..e33f1f6 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
@@ -10,10 +10,7 @@
import com.zy.acs.common.domain.BaseResult;
import com.zy.acs.common.domain.protocol.*;
import com.zy.acs.common.domain.protocol.action.*;
-import com.zy.acs.common.enums.AgvBackpackType;
-import com.zy.acs.common.enums.AgvCompleteType;
-import com.zy.acs.common.enums.AgvDirectionType;
-import com.zy.acs.common.enums.AgvSpeedType;
+import com.zy.acs.common.enums.*;
import com.zy.acs.common.utils.GsonUtils;
import com.zy.acs.common.utils.RedisSupport;
import com.zy.acs.common.utils.Utils;
@@ -293,7 +290,8 @@
currSeg.setState(SegmentStateType.INIT.toString());
currSeg.setUpdateTime(now);
if (!segmentService.updateById(currSeg)) {
- log.error("Segment [{}] failed to update 锛侊紒锛�", currSeg.getGroupId() + " - " + currSeg.getSerial());
+// log.error("Segment [{}] failed to update 锛侊紒锛�", currSeg.getGroupId() + " - " + currSeg.getSerial());
+ throw new CoolException("failed to update segment [" + currSeg.getGroupId() + "-" + currSeg.getSerial() + "] failed");
}
// new oriSta seg
@@ -310,7 +308,8 @@
loadSeg.setCreateTime(now);
loadSeg.setUpdateTime(now);
if (!segmentService.save(loadSeg)) {
- log.error("Segment [{}] failed to save 锛侊紒锛�", loadSeg.getTravelId() + " - " + loadSeg.getSerial());
+// log.error("Segment [{}] failed to save 锛侊紒锛�", loadSeg.getTravelId() + " - " + loadSeg.getSerial());
+ throw new CoolException("failed to save segment [" + loadSeg.getGroupId() + "-" + loadSeg.getSerial() + "] failed");
}
// place segment
@@ -358,12 +357,24 @@
newDto.setCodeId(endCode.getId());
destPosList.add(newDto);
+ // sort - reference to buildMarjoTask
+ final String sameGroupXy = configService.getVal("sameGroupXy", String.class);
+
+ // DEST-only sort
destPosList.sort((a, b) -> {
- int c1 = Double.compare(a.getXy()[0], b.getXy()[0]); // X
- if (c1 != 0) return c1;
- int c2 = Double.compare(a.getXy()[1], b.getXy()[1]); // Y
- if (c2 != 0) return c2;
- // 鍚屽潗鏍囨椂鐢� taskId 鎵撴暎锛堥伩鍏嶆帓搴忎笉绋冲畾锛�
+
+ // 涓昏酱
+ double aFirst = a.getFirstWeight(sameGroupXy);
+ double bFirst = b.getFirstWeight(sameGroupXy);
+ int c = Double.compare(aFirst, bFirst);
+ if (c != 0) return c;
+
+ // 鍓酱
+ double aSecond = a.getSecondWeight(sameGroupXy);
+ double bSecond = b.getSecondWeight(sameGroupXy);
+ c = Double.compare(aSecond, bSecond);
+ if (c != 0) return c;
+
return Long.compare(a.getTaskId(), b.getTaskId());
});
@@ -382,28 +393,11 @@
throw new BusinessException("failed to locate new destination in sorted list");
}
- // 鍚庣户鐐� todo
+ // 鍚庣户鐐�
if (idx + 1 == destPosList.size()) {
placeSegSerial = destSegList.get(destSegList.size() - 1).getSerial() + 1;
} else {
- TaskPosDto afterTaskPos = destPosList.get(idx);
- Segment afterSeg = destSegList.stream()
- .filter(destSeg -> Objects.equals(destSeg.getId(), afterTaskPos.getSegId()))
- .findFirst()
- .orElse(null);
- if (null == afterSeg) {
- placeSegSerial = destSegList.get(destSegList.size() - 1).getSerial() + 1;
- } else {
- placeSegSerial = afterSeg.getSerial();
- }
- }
-
- // todo
- TaskPosDto afterTaskPos = (idx + 1) <= destPosList.size() ? destPosList.get(idx) : null;
- if (null == afterTaskPos) {
- // loadSeg is the last one
- placeSegSerial = destSegList.get(destSegList.size() - 1).getSerial() + 1;
- } else {
+ TaskPosDto afterTaskPos = destPosList.get(idx + 1);
Segment afterSeg = destSegList.stream()
.filter(destSeg -> Objects.equals(destSeg.getId(), afterTaskPos.getSegId()))
.findFirst()
@@ -440,7 +434,8 @@
placeSeg.setCreateTime(now);
placeSeg.setUpdateTime(now);
if (!segmentService.save(placeSeg)) {
- log.error("Segment [{}] failed to save 锛侊紒锛�", placeSeg.getTravelId() + " - " + placeSeg.getSerial());
+// log.error("Segment [{}] failed to save 锛侊紒锛�", placeSeg.getTravelId() + " - " + placeSeg.getSerial());
+ throw new CoolException("failed to save segment [" + placeSeg.getGroupId() + "-" + placeSeg.getSerial() + "] failed");
}
// update task
@@ -527,7 +522,7 @@
* 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) {
@@ -952,7 +947,7 @@
if (!lastCode.getCornerBool()) {
// 濡傛灉鏄綔涓氭柟鍚戯紝浣嗘槸灏忚溅鍦ㄥ贩閬撳唴鏂瑰悜閿欒锛屽垯鍋滄
if (reverse && !lastDirection.equals(nextDirection)) {
-// throw new CoolException(agvNo + "鍙峰皬杞︽柟鍚戦敊璇紝璇锋帹鑷宠浆寮偣鎵嬪姩璋冩暣");
+ throw new CoolException(agvNo + "鍙峰皬杞︽柟鍚戦敊璇紝璇锋帹鑷宠浆寮偣鎵嬪姩璋冩暣");
}
// 濡傛灉涓嶆槸浣滀笟鏂瑰悜锛屽垽鏂槸鍚︾浉鍙嶆柟鍚戯紝濡傛灉鍙嶆柟鍚戝垯鍊掗��琛岃蛋
if (nextDirection.equals((lastDirection + 180) % 360)) {
@@ -974,7 +969,7 @@
null, // 鍔ㄤ綔鍙�
null, // 浼樺厛绾�
ActionTypeType.TurnCorner.desc, // 鍚嶇О
- mapService.isTurnCorner(lastCode.getData()) ? 1D : 0D, // 灞炴�у��
+ (double) mapService.spinDirection(lastCode).val, // 灞炴�у��
lastCode.getData(), // 鍦伴潰鐮�
String.valueOf(nextDirection), // 鍔ㄤ綔鍙傛暟
ActionTypeType.TurnCorner.val(), // 鍔ㄤ綔绫诲瀷
@@ -998,7 +993,7 @@
null, // 鍔ㄤ綔鍙�
null, // 浼樺厛绾�
ActionTypeType.TurnCorner.desc, // 鍚嶇О
- mapService.isTurnCorner(lastCode.getData()) ? 1D : 0D, // 灞炴�у��
+ (double) mapService.spinDirection(lastCode).val, // 灞炴�у��
lastCode.getData(), // 鍦伴潰鐮�
String.valueOf(nextDirection), // 鍔ㄤ綔鍙傛暟
ActionTypeType.TurnCorner.val(), // 鍔ㄤ綔绫诲瀷
@@ -1049,7 +1044,7 @@
null, // 鍔ㄤ綔鍙�
null, // 浼樺厛绾�
ActionTypeType.TurnCorner.desc, // 鍚嶇О
- mapService.isTurnCorner(lastCode.getData()) ? 1D : 0D, // 灞炴�у��
+ (double) mapService.spinDirection(lastCode).val, // 灞炴�у��
lastCode.getData(), // 鍦伴潰鐮�
String.valueOf(workDirection), // 鍔ㄤ綔鍙傛暟
ActionTypeType.TurnCorner.val(), // 鍔ㄤ綔绫诲瀷
@@ -1068,6 +1063,7 @@
AgvDirectionType agvDirectionType;
Double staWorkDirection;
AgvBackpackType backpackType = AgvBackpackType.query(segment.getBackpack());
+ // todo agvModel backpackAction ?
switch (Objects.requireNonNull(TaskPosDto.queryPosType(segment.getPosType()))) {
case ORI_LOC:
assert backpackType != null;
@@ -1171,7 +1167,7 @@
null, // 鍔ㄤ綔鍙�
null, // 浼樺厛绾�
ActionTypeType.TurnCorner.desc, // 鍚嶇О
- mapService.isTurnCorner(lastCode.getData()) ? 1D : 0D, // 灞炴�у��
+ (double) mapService.spinDirection(lastCode).val, // 灞炴�у��
lastCode.getData(), // 鍦伴潰鐮�
String.valueOf(oriStaWorkDirection), // 鍔ㄤ綔鍙傛暟
ActionTypeType.TurnCorner.val(), // 鍔ㄤ綔绫诲瀷
@@ -1233,7 +1229,7 @@
null, // 鍔ㄤ綔鍙�
null, // 浼樺厛绾�
ActionTypeType.TurnCorner.desc, // 鍚嶇О
- mapService.isTurnCorner(lastCode.getData()) ? 1D : 0D, // 灞炴�у��
+ (double) mapService.spinDirection(lastCode).val, // 灞炴�у��
lastCode.getData(), // 鍦伴潰鐮�
String.valueOf(destStaWorkDirection), // 鍔ㄤ綔鍙傛暟
ActionTypeType.TurnCorner.val(), // 鍔ㄤ綔绫诲瀷
@@ -1290,7 +1286,7 @@
null, // 鍔ㄤ綔鍙�
null, // 浼樺厛绾�
ActionTypeType.TurnCorner.desc, // 鍚嶇О
- mapService.isTurnCorner(lastCode.getData()) ? 1D : 0D, // 灞炴�у��
+ (double) mapService.spinDirection(lastCode).val, // 灞炴�у��
lastCode.getData(), // 鍦伴潰鐮�
String.valueOf(chargeDirection), // 鍔ㄤ綔鍙傛暟
ActionTypeType.TurnCorner.val(), // 鍔ㄤ綔绫诲瀷
@@ -1365,6 +1361,28 @@
}
+ // 濡傛灉鍏呯數涓紝鍒欏厛鏂紑鍏呯數
+ // todo agvModel backpackAction ?
+ if (agvModel.getNeedUndockingBool() && agvDetail.getAgvStatus().equals(AgvStatusType.CHARGE)) {
+ String undockingCode = Cools.isEmpty(actionList) ? lastCode.getData() : actionList.get(0).getCode();
+ // undocking charge
+ actionList.add(0, new Action(
+ null, // 缂栧彿
+ null, // 鎬荤嚎
+ null, // 浠诲姟
+ null, // 鍔ㄤ綔鍙�
+ null, // 浼樺厛绾�
+ ActionTypeType.UndockingCharge.desc, // 鍚嶇О
+ null, // 灞炴�у��
+ undockingCode, // 鍦伴潰鐮�
+ null, // 鍔ㄤ綔鍙傛暟
+ ActionTypeType.UndockingCharge.val(), // 鍔ㄤ綔绫诲瀷
+ actionPrepareSts, // 鍔ㄤ綔杩涘害
+ agvId, // AGV
+ now // 宸ヤ綔鏃堕棿
+ ));
+ }
+
// finish
actionList.add(new Action(
null, // 缂栧彿
@@ -1382,6 +1400,7 @@
now // 宸ヤ綔鏃堕棿
));
+ // todo asr need optimize sort ?
List<Action> newActionList = actionSorter.optimizeSort(actionList);
String groupId = String.valueOf(snowflakeIdWorker.nextId()).substring(3);
@@ -1576,6 +1595,11 @@
.setQrCode(action.getCode())
);
break;
+ case UndockingCharge:
+ agvAction.add(new AgvActionItem<>(UndockingChargeAction.class)
+ .setQrCode(action.getCode())
+ );
+ break;
default:
break;
}
--
Gitblit v1.9.1