From 5fc29f10aca2803c0876fbf8553fae5f459096cf Mon Sep 17 00:00:00 2001
From: vincentlu <t1341870251@gmail.com>
Date: 星期一, 12 一月 2026 14:00:28 +0800
Subject: [PATCH] #
---
zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/MainService.java | 237 +++++++++++++++++++++++++++++++++++-----------------------
1 files changed, 143 insertions(+), 94 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 9b3886e..977eeba 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;
@@ -24,8 +21,9 @@
import com.zy.acs.manager.common.domain.param.HandlerPublishParam;
import com.zy.acs.manager.common.exception.BusinessException;
import com.zy.acs.manager.core.domain.AgvBackpackDto;
-import com.zy.acs.manager.core.domain.Lane;
+import com.zy.acs.manager.core.domain.LaneDto;
import com.zy.acs.manager.core.domain.TaskPosDto;
+import com.zy.acs.manager.core.integrate.conveyor.ConveyorStationService;
import com.zy.acs.manager.core.service.astart.MapDataDispatcher;
import com.zy.acs.manager.manager.controller.param.OpenBusSubmitParam;
import com.zy.acs.manager.manager.entity.*;
@@ -96,7 +94,7 @@
@Autowired
private AgvModelService agvModelService;
@Autowired
- private LaneService laneService;
+ private LaneBuilder laneBuilder;
@Autowired
private ActionSorter actionSorter;
@Autowired
@@ -449,10 +447,13 @@
if (!taskService.updateById(task)) {
throw new BusinessException("seqNum: " + task.getSeqNum() + " failed to update");
}
+ // update reserve
+ staReserveService.allocateCallBack(task, agvId);
}
// normal
, (task, agvNo, sta) -> {
Long agvId = agvService.getAgvId(agvNo);
+ // update task
task.setAgvId(agvId);
task.setTaskSts(TaskStsType.WAITING.val());
task.setIoTime(now);
@@ -460,6 +461,8 @@
if (!taskService.updateById(task)) {
throw new BusinessException("seqNum: " + task.getSeqNum() + " failed to update");
}
+ // update reserve
+ staReserveService.allocateCallBack(task, agvId);
});
// if (Cools.isEmpty(agvNo)) {
//// log.warn("Task[{}] has an issue锛� because it failed to check out agv which is idle...", task.getSeqNum());
@@ -667,6 +670,7 @@
// generate travel
+ travelService.finishAll(agvId);
Travel travel = new Travel();
travel.setUuid(String.valueOf(snowflakeIdWorker.nextId()).substring(3));
travel.setTravelId(String.valueOf(snowflakeIdWorker.nextId()).substring(3));
@@ -788,9 +792,9 @@
task.setOriCode(agvDetail.getCode());
task.setDestCode(endCode.getId());
// lane
- Lane destLane = laneService.search(endCode.getData());
- if (null != destLane) {
- task.setDestLaneHash(destLane.getHashCode());
+ LaneDto destLaneDto = laneBuilder.search(endCode.getData());
+ if (null != destLaneDto) {
+ task.setDestLaneHash(destLaneDto.getHashCode());
}
task.setPriority(taskType.equals(TaskTypeType.TO_CHARGE)?2:1);
task.setTaskSts(TaskStsType.ASSIGN.val());
@@ -802,6 +806,7 @@
}
// generate travel
+ travelService.finishAll(agvId);
Travel travel = new Travel();
travel.setUuid(String.valueOf(snowflakeIdWorker.nextId()).substring(3));
travel.setTravelId(String.valueOf(snowflakeIdWorker.nextId()).substring(3));
@@ -902,6 +907,8 @@
AgvModel agvModel = agvModelService.getByAgvId(agvId);
Double workDirection = agvModel.getWorkDirection();
+ boolean backupAction = null != agvModel.getBackupAction() && agvModel.getBackupActionBool();
+ boolean needUndocking = null != agvModel.getNeedUndocking() && agvModel.getNeedUndockingBool();
AgvSpeedType agvSpeedType = AgvSpeedType.query(agvModel.getTravelSpeed());
assert agvSpeedType != null;
@@ -939,28 +946,37 @@
Code nextCode = codeService.getCacheByData(next);
Double nextDirection = mapService.calculateDirection(lastCode, nextCode, angleOffsetVal);
- // 绗竴姝ワ細濡傛灉涓嬩竴涓柟鍚戞濂芥槸浣滀笟鏂瑰悜鐨勭浉鍙嶆柟鍚戯紝鍒欓噸缃笅涓�涓柟鍚戜负浣滀笟鏂瑰悜锛屾爣璁� reverse = true
+ // 鍙嶅悜瑙�
+ final double oppWorkDir = (workDirection + 180) % 360;
+ final double oppLastDir = (lastDirection + 180) % 360;
+
+ // 濡傛灉涓嬩竴涓柟鍚戞濂芥槸浣滀笟鏂瑰悜鐨勭浉鍙嶆柟鍚戯紝鍒欓噸缃笅涓�涓柟鍚戜负浣滀笟鏂瑰悜锛屾爣璁� reverse = true
boolean reverse = false;
- if (nextDirection.equals((workDirection + 180) % 360)) {
+ if (nextDirection.equals(oppWorkDir)) {
nextDirection = workDirection;
reverse = true;
}
- // 绗簩姝ワ細鍒ゆ柇褰撳墠鑺傜偣鏄惁鍙互鏃嬭浆
+ // 鍒ゆ柇褰撳墠鑺傜偣鏄惁鍙互鏃嬭浆
if (!lastCode.getCornerBool()) {
// 濡傛灉鏄綔涓氭柟鍚戯紝浣嗘槸灏忚溅鍦ㄥ贩閬撳唴鏂瑰悜閿欒锛屽垯鍋滄
if (reverse && !lastDirection.equals(nextDirection)) {
-// throw new CoolException(agvNo + "鍙峰皬杞︽柟鍚戦敊璇紝璇锋帹鑷宠浆寮偣鎵嬪姩璋冩暣");
+ throw new CoolException(agvNo + "鍙峰皬杞︽柟鍚戦敊璇紝璇锋帹鑷宠浆寮偣鎵嬪姩璋冩暣");
}
- // 濡傛灉涓嶆槸浣滀笟鏂瑰悜锛屽垽鏂槸鍚︾浉鍙嶆柟鍚戯紝濡傛灉鍙嶆柟鍚戝垯鍊掗��琛岃蛋
- if (nextDirection.equals((lastDirection + 180) % 360)) {
+ // 濡傛灉涓嶆槸浣滀笟鏂瑰悜锛堝彟涓�缁勭浉鍙嶆柟鍚戯級锛屽垽鏂槸鍚︾浉鍙嶆柟鍚戯紝濡傛灉鍙嶆柟鍚戝垯鍊掗��琛岃蛋
+ if (nextDirection.equals(oppLastDir)) {
+ // 鍊掗��鏃讹紝鍥犱负agv鏂瑰悜娌″彉锛屾墍浠ヤ笅涓�涓柟鍚戣繕鏄痑gv鏂瑰悜锛屾晠nextDirection = lastDirection;
nextDirection = lastDirection;
reverse = true;
}
+ // 鎬荤粨锛�1.濡傛灉鏄綔涓氱粍锛堝樊180掳锛夋柟鍚戯紝閭d箞agv鏂瑰悜蹇呴』鏄綔涓氭柟鍚戯紝濡傛灉 reverse 鍒欒鏄庡�掗��锛岃繖鏃跺�檔extDirection鑲畾浼氱瓑浜庝綔涓氭柟鍚戯紙鍓嶉潰璧嬪�间簡锛夛紝濡傛灉涓嶇浉鍚岋紝鍒欐姤閿�
+ // 2.濡傛灉涓嶆槸浣滀笟缁勬柟鍚戯紙鍙︿竴缁勭浉鍙嶆柟鍚戝樊180掳锛夛紝鍥犱负姝ゅ嚱鏁颁笉鑳芥棆杞紝鎵�浠ュ樊180掳鏃跺彧鑳藉�掗��锛屽�掗��鐨勬椂鍊欏洜涓篴gv涓嶄細鏃嬭浆锛屾墍浠extDirection瑕佸彉鎴恆gv鏂瑰悜
} else {
if (!lastDirection.equals(nextDirection)) {
- // 濡傛灉涓嬩釜鑺傜偣鏂瑰悜涓庡綋鍓峚gv鏂瑰悜鐩稿弽锛屽垯鍊掗��琛岃蛋锛屼絾鏄鏋滃綋鍓峚gv鏂瑰悜姝eソ涓庡伐浣滄柟鍚戠浉鍙嶏紝鍒欐棆杞嚦宸ヤ綔鏂瑰悜
- if (nextDirection.equals((lastDirection + 180) % 360) && !workDirection.equals((lastDirection + 180) % 360)) {
+ // 濡傛灉涓嬩竴涓柟鍚戜笌agv鏂瑰悜鐩稿弽锛屽垯鍊掗��琛岃蛋锛岄伩鍏嶈繘琛屾鏃犳剰涔夌殑杞集鍔ㄤ綔銆�
+ // 浣嗘槸瑕佹敞鎰忥細濡傛灉agv鏂瑰悜涓庡伐浣滄柟鍚戞濂界浉鍙嶏紝鍒欓渶瑕佹棆杞嚦宸ヤ綔鏂瑰悜锛屼篃灏辨槸涓轰粈涔堣鍔�!workDirection.equals(oppLastDir)鍒ゆ柇
+ if (nextDirection.equals(oppLastDir) && !workDirection.equals(oppLastDir)) {
+ // 鍊掗��鏃讹紝鍥犱负agv鏂瑰悜娌″彉锛屾墍浠ヤ笅涓�涓柟鍚戣繕鏄痑gv鏂瑰悜锛屾晠nextDirection = lastDirection;
nextDirection = lastDirection;
reverse = true;
} else {
@@ -972,7 +988,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(), // 鍔ㄤ綔绫诲瀷
@@ -996,7 +1012,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(), // 鍔ㄤ綔绫诲瀷
@@ -1009,10 +1025,7 @@
}
// run
- ActionTypeType actionType = ActionTypeType.StraightAheadTurnable;
- if (reverse) {
- actionType = ActionTypeType.StraightBackTurnable;
- }
+ ActionTypeType actionType = reverse ? ActionTypeType.StraightBackTurnable : ActionTypeType.StraightAheadTurnable;
CodeGap gap = codeGapService.findByCodeOfBoth(lastCode.getId(), nextCode.getId());
actionList.add(new Action(
null, // 缂栧彿
@@ -1047,7 +1060,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(), // 鍔ㄤ綔绫诲瀷
@@ -1092,22 +1105,24 @@
agvId, // AGV
now // 宸ヤ綔鏃堕棿
));
- // 鏆傚瓨鐐规斁璐�
- 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 // 宸ヤ綔鏃堕棿
- ));
+ // 鑳岀瘬鏀捐揣
+ if (backupAction) {
+ 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_LOC:
assert backpackType != null;
@@ -1115,22 +1130,24 @@
if (!lastDirection.equals(workDirection)) {
throw new CoolException(agvNo + "鍙峰皬杞︽柟鍚戦敊璇紝璇锋帹鑷宠浆寮偣鎵嬪姩璋冩暣");
}
- // 鏆傚瓨鐐瑰彇璐ц揣
- 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 // 宸ヤ綔鏃堕棿
- ));
+ // 鑳岀瘬鍙栬揣
+ if (backupAction) {
+ 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 // 宸ヤ綔鏃堕棿
+ ));
+ }
// 璐ф灦鏀捐揣
Loc destLoc = locService.getById(task.getDestLoc());
@@ -1169,7 +1186,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(), // 鍔ㄤ綔绫诲瀷
@@ -1196,23 +1213,25 @@
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 // 宸ヤ綔鏃堕棿
- ));
+ // 鑳岀瘬鏀捐揣
+ if (backupAction) {
+ 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:
// 绔欑偣鏀捐揣
@@ -1231,7 +1250,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(), // 鍔ㄤ綔绫诲瀷
@@ -1241,23 +1260,25 @@
));
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 // 宸ヤ綔鏃堕棿
- ));
+ // 鑳岀瘬鍙栬揣
+ if (backupAction) {
+ 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(
@@ -1288,7 +1309,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(), // 鍔ㄤ綔绫诲瀷
@@ -1363,6 +1384,27 @@
}
+ // 濡傛灉鍏呯數涓紝鍒欏厛鏂紑鍏呯數
+ if (needUndocking && 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, // 缂栧彿
@@ -1380,7 +1422,6 @@
now // 宸ヤ綔鏃堕棿
));
- List<Action> newActionList = actionSorter.optimizeSort(actionList);
String groupId = String.valueOf(snowflakeIdWorker.nextId()).substring(3);
// update segment
@@ -1414,6 +1455,9 @@
// throw new CoolException("鏇存柊Segment澶辫触");
// }
// }
+
+ // optimize action list, must have backpack
+ List<Action> newActionList = backupAction ? actionSorter.optimizeSort(actionList) : actionList;
// save action
int i = newActionList.size();
@@ -1574,6 +1618,11 @@
.setQrCode(action.getCode())
);
break;
+ case UndockingCharge:
+ agvAction.add(new AgvActionItem<>(UndockingChargeAction.class)
+ .setQrCode(action.getCode())
+ );
+ break;
default:
break;
}
--
Gitblit v1.9.1