From 3972e8c404643dbdf6cd88f177349d4505411983 Mon Sep 17 00:00:00 2001
From: luxiaotao1123 <t1341870251@gmail.com>
Date: 星期四, 17 四月 2025 10:33:08 +0800
Subject: [PATCH] #
---
zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/MainService.java | 190 +++++++++++++++++++++++++++++++++++++----------
1 files changed, 148 insertions(+), 42 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 e49c524..dbf5fd2 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
@@ -179,7 +179,7 @@
if (!destSta.getStaSts().equals(StaStsType.IDLE.val())) {
throw new BusinessException("destSta锛�" + task.getDestSta$() + " is not in IDLE status");
}
- destSta.setStaSts(StaStsType.PAKIN.val());
+ destSta.setStaSts(StaStsType.READY_RELEASE.val());
destSta.setUpdateTime(now);
if (!staService.updateById(destSta)) {
throw new BusinessException("destSta锛�" + task.getDestSta$() + " failed to update");
@@ -190,7 +190,7 @@
if (!oriSta.getStaSts().equals(StaStsType.STOCK.val())) {
throw new BusinessException("oriSta锛�" + task.getOriSta$() + " is not in STOCK status");
}
- oriSta.setStaSts(StaStsType.PAKOUT.val());
+ oriSta.setStaSts(StaStsType.READY_TAKE.val());
oriSta.setUpdateTime(now);
if (!staService.updateById(oriSta)) {
throw new BusinessException("oriSta锛�" + task.getOriSta$() + " failed to update");
@@ -211,7 +211,7 @@
if (!oriSta.getStaSts().equals(StaStsType.STOCK.val())) {
throw new BusinessException("oriSta锛�" + task.getOriSta$() + " is not in STOCK status");
}
- oriSta.setStaSts(StaStsType.PAKOUT.val());
+ oriSta.setStaSts(StaStsType.READY_TAKE.val());
oriSta.setUpdateTime(now);
if (!staService.updateById(oriSta)) {
throw new BusinessException("oriSta锛�" + task.getOriSta$() + " failed to update");
@@ -221,7 +221,7 @@
if (!destSta.getStaSts().equals(StaStsType.IDLE.val())) {
throw new BusinessException("destSta锛�" + task.getDestSta$() + " is not in IDLE status");
}
- destSta.setStaSts(StaStsType.PAKIN.val());
+ destSta.setStaSts(StaStsType.READY_RELEASE.val());
destSta.setUpdateTime(now);
if (!staService.updateById(destSta)) {
throw new BusinessException("destSta锛�" + task.getDestSta$() + " failed to update");
@@ -859,6 +859,7 @@
// 浣滀笟鐐瑰姩浣�
AgvDirectionType agvDirectionType;
+ Double staWorkDirection;
AgvBackpackType backpackType = AgvBackpackType.query(segment.getBackpack());
switch (Objects.requireNonNull(TaskPosDto.queryPosType(segment.getPosType()))) {
case ORI_LOC:
@@ -866,28 +867,11 @@
// 妫�楠屾柟鍚�
if (!lastDirection.equals(workDirection)) {
throw new CoolException(agvNo + "鍙峰皬杞︽柟鍚戦敊璇紝璇锋帹鑷宠浆寮偣鎵嬪姩璋冩暣");
- // turn
-// actionList.add(new Action(
-// null, // 缂栧彿
-// task.getBusId(), // 鎬荤嚎
-// task.getId(), // 浠诲姟
-// null, // 鍔ㄤ綔鍙�
-// null, // 浼樺厛绾�
-// ActionTypeType.TurnCorner.desc, // 鍚嶇О
-// mapService.isTurnCorner(lastCode.getData()) ? 1D : 0D, // 灞炴�у��
-// lastCode.getData(), // 鍦伴潰鐮�
-// String.valueOf(workDirection), // 鍔ㄤ綔鍙傛暟
-// ActionTypeType.TurnCorner.val(), // 鍔ㄤ綔绫诲瀷
-// actionPrepareSts, // 鍔ㄤ綔杩涘害
-// agvId, // AGV
-// now // 宸ヤ綔鏃堕棿
-// ));
-// lastDirection = workDirection;
}
// 璐ф灦鍙栬揣
Loc oriLoc = locService.getById(task.getOriLoc());
// 璁$畻宸﹀彸鏂瑰悜
- agvDirectionType = mapService.calculateAgvWorkDirection(oriLoc, lastCode);
+ agvDirectionType = mapService.calculateAgvWorkDirectionByShelf(oriLoc, lastCode);
actionList.add(new Action(
null, // 缂栧彿
task.getBusId(), // 鎬荤嚎
@@ -925,23 +909,6 @@
// 妫�楠屾柟鍚�
if (!lastDirection.equals(workDirection)) {
throw new CoolException(agvNo + "鍙峰皬杞︽柟鍚戦敊璇紝璇锋帹鑷宠浆寮偣鎵嬪姩璋冩暣");
-// // turn
-// actionList.add(new Action(
-// null, // 缂栧彿
-// task.getBusId(), // 鎬荤嚎
-// task.getId(), // 浠诲姟
-// null, // 鍔ㄤ綔鍙�
-// null, // 浼樺厛绾�
-// ActionTypeType.TurnCorner.desc, // 鍚嶇О
-// mapService.isTurnCorner(lastCode.getData()) ? 1D : 0D, // 灞炴�у��
-// lastCode.getData(), // 鍦伴潰鐮�
-// String.valueOf(workDirection), // 鍔ㄤ綔鍙傛暟
-// ActionTypeType.TurnCorner.val(), // 鍔ㄤ綔绫诲瀷
-// actionPrepareSts, // 鍔ㄤ綔杩涘害
-// agvId, // AGV
-// now // 宸ヤ綔鏃堕棿
-// ));
-// lastDirection = workDirection;
}
// 鏆傚瓨鐐瑰彇璐ц揣
actionList.add(new Action(
@@ -963,7 +930,7 @@
// 璐ф灦鏀捐揣
Loc destLoc = locService.getById(task.getDestLoc());
// 璁$畻宸﹀彸鏂瑰悜
- agvDirectionType = mapService.calculateAgvWorkDirection(destLoc, lastCode);
+ agvDirectionType = mapService.calculateAgvWorkDirectionByShelf(destLoc, lastCode);
actionList.add(new Action(
null, // 缂栧彿
task.getBusId(), // 鎬荤嚎
@@ -981,8 +948,128 @@
));
break;
case ORI_STA:
+ // 绔欑偣鍙栬揣
+ Sta oriSta = staService.getById(task.getOriSta());
+ Double oriStaWorkDirection = mapService.getStaAngle(oriSta, workDirection);
+ // 妫�楠屾柟鍚�
+ if (!lastDirection.equals(oriStaWorkDirection)) {
+ if (!lastCode.getCornerBool()) {
+ throw new CoolException(agvNo + "鍙峰皬杞︽柟鍚戦敊璇紝璇锋帹鑷宠浆寮偣鎵嬪姩璋冩暣");
+ }
+ // turn
+ actionList.add(new Action(
+ null, // 缂栧彿
+ task.getBusId(), // 鎬荤嚎
+ task.getId(), // 浠诲姟
+ null, // 鍔ㄤ綔鍙�
+ null, // 浼樺厛绾�
+ ActionTypeType.TurnCorner.desc, // 鍚嶇О
+ mapService.isTurnCorner(lastCode.getData()) ? 1D : 0D, // 灞炴�у��
+ lastCode.getData(), // 鍦伴潰鐮�
+ String.valueOf(oriStaWorkDirection), // 鍔ㄤ綔鍙傛暟
+ ActionTypeType.TurnCorner.val(), // 鍔ㄤ綔绫诲瀷
+ actionPrepareSts, // 鍔ㄤ綔杩涘害
+ agvId, // AGV
+ now // 宸ヤ綔鏃堕棿
+ ));
+ lastDirection = oriStaWorkDirection;
+ }
+ // 璁$畻璐у弶宸ヤ綔鏂瑰悜
+ staWorkDirection = mapService.calculateAgvWorkDirectionByStation(oriStaWorkDirection, lastDirection);
+ actionList.add(new Action(
+ null, // 缂栧彿
+ task.getBusId(), // 鎬荤嚎
+ task.getId(), // 浠诲姟
+ null, // 鍔ㄤ綔鍙�
+ null, // 浼樺厛绾�
+ ActionTypeType.ReadyTakeFromConveyorSta.desc, // 鍚嶇О
+ staWorkDirection, // 灞炴�у��
+ lastCode.getData(), // 鍦伴潰鐮�
+ String.valueOf(oriSta.getOffset()), // 鍔ㄤ綔鍙傛暟
+ ActionTypeType.ReadyTakeFromConveyorSta.val(), // 鍔ㄤ綔绫诲瀷
+ actionPrepareSts, // 鍔ㄤ綔杩涘害
+ agvId, // AGV
+ now // 宸ヤ綔鏃堕棿
+ ));
+ // 鏆傚瓨鐐规斁璐�
+ assert backpackType != null;
+ actionList.add(new Action(
+ null, // 缂栧彿
+ task.getBusId(), // 鎬荤嚎
+ task.getId(), // 浠诲姟
+ null, // 鍔ㄤ綔鍙�
+ null, // 浼樺厛绾�
+ ActionTypeType.ReadyReleaseToAgvSite.desc, // 鍚嶇О
+ (double) backpackType.lev, // 灞炴�у��
+ lastCode.getData(), // 鍦伴潰鐮�
+ String.valueOf(backpackType.height), // 鍔ㄤ綔鍙傛暟
+ ActionTypeType.ReadyReleaseToAgvSite.val(), // 鍔ㄤ綔绫诲瀷
+ actionPrepareSts, // 鍔ㄤ綔杩涘害
+ agvId, // AGV
+ now // 宸ヤ綔鏃堕棿
+ ));
break;
case DEST_STA:
+ // 绔欑偣鏀捐揣
+ Sta destSta = staService.getById(task.getDestSta());
+ Double destStaWorkDirection = mapService.getStaAngle(destSta, workDirection);
+ // 妫�楠屾柟鍚�
+ if (!lastDirection.equals(destStaWorkDirection)) {
+ if (!lastCode.getCornerBool()) {
+ throw new CoolException(agvNo + "鍙峰皬杞︽柟鍚戦敊璇紝璇锋帹鑷宠浆寮偣鎵嬪姩璋冩暣");
+ }
+ // turn
+ actionList.add(new Action(
+ null, // 缂栧彿
+ task.getBusId(), // 鎬荤嚎
+ task.getId(), // 浠诲姟
+ null, // 鍔ㄤ綔鍙�
+ null, // 浼樺厛绾�
+ ActionTypeType.TurnCorner.desc, // 鍚嶇О
+ mapService.isTurnCorner(lastCode.getData()) ? 1D : 0D, // 灞炴�у��
+ lastCode.getData(), // 鍦伴潰鐮�
+ String.valueOf(destStaWorkDirection), // 鍔ㄤ綔鍙傛暟
+ ActionTypeType.TurnCorner.val(), // 鍔ㄤ綔绫诲瀷
+ actionPrepareSts, // 鍔ㄤ綔杩涘害
+ agvId, // AGV
+ now // 宸ヤ綔鏃堕棿
+ ));
+ lastDirection = destStaWorkDirection;
+ }
+ // 鏆傚瓨鐐瑰彇璐�
+ assert backpackType != null;
+ actionList.add(new Action(
+ null, // 缂栧彿
+ task.getBusId(), // 鎬荤嚎
+ task.getId(), // 浠诲姟
+ null, // 鍔ㄤ綔鍙�
+ null, // 浼樺厛绾�
+ ActionTypeType.ReadyTakeFromAgvSite.desc, // 鍚嶇О
+ (double) backpackType.lev, // 灞炴�у��
+ lastCode.getData(), // 鍦伴潰鐮�
+ String.valueOf(backpackType.height), // 鍔ㄤ綔鍙傛暟
+ ActionTypeType.ReadyTakeFromAgvSite.val(), // 鍔ㄤ綔绫诲瀷
+ actionPrepareSts, // 鍔ㄤ綔杩涘害
+ agvId, // AGV
+ now // 宸ヤ綔鏃堕棿
+ ));
+ // 璁$畻璐у弶宸ヤ綔鏂瑰悜
+ staWorkDirection = mapService.calculateAgvWorkDirectionByStation(destStaWorkDirection, lastDirection);
+ actionList.add(new Action(
+ null, // 缂栧彿
+ task.getBusId(), // 鎬荤嚎
+ task.getId(), // 浠诲姟
+ null, // 鍔ㄤ綔鍙�
+ null, // 浼樺厛绾�
+ ActionTypeType.ReadyReleaseToConveyorSta.desc, // 鍚嶇О
+ staWorkDirection, // 灞炴�у��
+ lastCode.getData(), // 鍦伴潰鐮�
+ String.valueOf(destSta.getOffset()), // 鍔ㄤ綔鍙傛暟
+ ActionTypeType.ReadyReleaseToConveyorSta.val(), // 鍔ㄤ綔绫诲瀷
+ actionPrepareSts, // 鍔ㄤ綔杩涘害
+ agvId, // AGV
+ now // 宸ヤ綔鏃堕棿
+ ));
break;
case TO_CHARGE:
// 妫�楠屾柟鍚�
@@ -1126,6 +1213,13 @@
if (Cools.isEmpty(actionList)) {
return;
}
+
+ Long agvId = actionList.get(0).getAgvId();
+ String agvNo = agvService.getAgvNo(agvId);
+ if (!agvService.judgeOnline(agvId)) {
+ return;
+ }
+
long actionIssuedSts = ActionStsType.ISSUED.val();
for (Action action : actionList) {
action.setActionSts(actionIssuedSts);
@@ -1152,10 +1246,8 @@
}
}
- String agvNo = agvService.getAgvNo(actionList.get(0).getAgvId());
AgvAction agvAction = new AgvAction(agvNo, actionGroupId);
for (Action action : actionList) {
-
switch (Objects.requireNonNull(ActionTypeType.get(action.getActionTypeEl()))) {
case TurnCorner:
agvAction.add(new AgvActionItem<>(TurnCornerAction.class)
@@ -1189,6 +1281,13 @@
.bodySync(body -> body.setHeight((short) Double.parseDouble(action.getParams())))
);
break;
+ case ReadyTakeFromConveyorSta:
+ agvAction.add(new AgvActionItem<>(ReadyTakeFromConveyorSta.class)
+ .setVal(action.getVal().intValue())
+ .setQrCode(action.getCode())
+ .bodySync(body -> body.setHeight((short) Double.parseDouble(action.getParams())))
+ );
+ break;
case ReadyTakeFromAgvSite:
agvAction.add(new AgvActionItem<>(ReadyTakeFromAgvSite.class)
.setVal(action.getVal().intValue())
@@ -1203,6 +1302,13 @@
.bodySync(body -> body.setHeight((short) Double.parseDouble(action.getParams())))
);
break;
+ case ReadyReleaseToConveyorSta:
+ agvAction.add(new AgvActionItem<>(ReadyReleaseToConveyorSta.class)
+ .setVal(action.getVal().intValue())
+ .setQrCode(action.getCode())
+ .bodySync(body -> body.setHeight((short) Double.parseDouble(action.getParams())))
+ );
+ break;
case ReadyReleaseToAgvSite:
agvAction.add(new AgvActionItem<>(ReadyReleaseToAgvSite.class)
.setVal(action.getVal().intValue())
--
Gitblit v1.9.1