From 09ca73620da2b11310df08cb7a500493ea4782da Mon Sep 17 00:00:00 2001
From: vincentlu <t1341870251@gmail.com>
Date: 星期二, 28 四月 2026 15:37:38 +0800
Subject: [PATCH] #
---
zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/HkOrderStateClosureService.java | 56 +++++++++++++++++++++++++++++++++++++++++++++++++-------
1 files changed, 49 insertions(+), 7 deletions(-)
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/HkOrderStateClosureService.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/HkOrderStateClosureService.java
index 1db7090..308e41e 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/HkOrderStateClosureService.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/HkOrderStateClosureService.java
@@ -3,9 +3,12 @@
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.zy.acs.common.hk.state.HkState;
import com.zy.acs.common.hk.state.HkStateActionState;
+import com.zy.acs.common.hk.state.HkStateBatteryState;
+import com.zy.acs.common.hk.action.type.HkActionType;
import com.zy.acs.common.hk.state.type.HkActionStatusType;
import com.zy.acs.common.utils.RedisSupport;
import com.zy.acs.framework.common.Cools;
+import com.zy.acs.manager.core.domain.TaskPosDto;
import com.zy.acs.manager.manager.entity.Action;
import com.zy.acs.manager.manager.entity.Segment;
import com.zy.acs.manager.manager.enums.ActionStsType;
@@ -49,11 +52,15 @@
syncFinishedActions(state);
- if (!isOrderCompleted(state)) {
+ List<Segment> segmentList = segmentService.list(new LambdaQueryWrapper<Segment>()
+ .eq(Segment::getGroupId, state.getOrderId())
+ .orderByAsc(Segment::getSerial));
+
+ if (!isOrderCompleted(state, segmentList)) {
return;
}
- settleCompletedOrder(state);
+ settleCompletedOrder(state, segmentList);
}
private void syncFinishedActions(HkState state) {
@@ -94,7 +101,11 @@
}
}
- private boolean isOrderCompleted(HkState state) {
+ private boolean isOrderCompleted(HkState state, List<Segment> segmentList) {
+ if (isChargeOrder(segmentList) && isChargeTaskCompleted(state)) {
+ return true;
+ }
+
if (!Cools.isEmpty(state.getNodeStates()) || !Cools.isEmpty(state.getEdgeStates())) {
return false;
}
@@ -121,16 +132,13 @@
return true;
}
- private void settleCompletedOrder(HkState state) {
+ private void settleCompletedOrder(HkState state, List<Segment> segmentList) {
String orderId = state.getOrderId();
String completeKey = buildCompleteKey(state);
if (redis.getObject(HK_ORDER_COMPLETE_FLAG, completeKey) != null) {
return;
}
- List<Segment> segmentList = segmentService.list(new LambdaQueryWrapper<Segment>()
- .eq(Segment::getGroupId, orderId)
- .orderByAsc(Segment::getSerial));
if (Cools.isEmpty(segmentList)) {
log.warn("hk state order completed but no segment found, agvNo={}, orderId={}, orderUpdateId={}",
state.getSerialNumber(), orderId, state.getOrderUpdateId());
@@ -172,6 +180,40 @@
return lastNodeSequenceId >= expectedLastNodeSequenceId;
}
+ private boolean isChargeOrder(List<Segment> segmentList) {
+ if (Cools.isEmpty(segmentList)) {
+ return false;
+ }
+ return segmentList.stream()
+ .map(Segment::getPosType)
+ .map(TaskPosDto::queryPosType)
+ .anyMatch(TaskPosDto.PosType.TO_CHARGE::equals);
+ }
+
+ private boolean isChargeTaskCompleted(HkState state) {
+ HkStateBatteryState batteryState = state.getBatteryState();
+ if (batteryState != null && Boolean.TRUE.equals(batteryState.getCharging())) {
+ return true;
+ }
+
+ if (Cools.isEmpty(state.getActionStates())) {
+ return false;
+ }
+
+ for (HkStateActionState actionState : state.getActionStates()) {
+ if (actionState == null || Cools.isEmpty(actionState.getActionType())) {
+ continue;
+ }
+ if (!HkActionType.START_CHARGING.getCode().equalsIgnoreCase(actionState.getActionType())) {
+ continue;
+ }
+ if (actionState.getActionStatus() == HkActionStatusType.FINISHED) {
+ return true;
+ }
+ }
+ return false;
+ }
+
private Long parseActionId(String hkActionId) {
if (Cools.isEmpty(hkActionId) || hkActionId.length() < 2) {
return null;
--
Gitblit v1.9.1