From 1d2b7c3172a9a61634de47febd845d67fcf2f417 Mon Sep 17 00:00:00 2001
From: linwei <872216696@qq.com>
Date: Fri, 22 May 2026 14:23:33 +0800
Subject: [PATCH] fix(workflow): 修复工单流程阶段组装逻辑
---
drone-service/drone-gd/src/main/java/org/sxkj/gd/workorder/service/impl/GdWorkOrderFlowServiceImpl.java | 38 ++++++++++++++++++++++++--------------
1 files changed, 24 insertions(+), 14 deletions(-)
diff --git a/drone-service/drone-gd/src/main/java/org/sxkj/gd/workorder/service/impl/GdWorkOrderFlowServiceImpl.java b/drone-service/drone-gd/src/main/java/org/sxkj/gd/workorder/service/impl/GdWorkOrderFlowServiceImpl.java
index d5bd587..ad5f0c6 100644
--- a/drone-service/drone-gd/src/main/java/org/sxkj/gd/workorder/service/impl/GdWorkOrderFlowServiceImpl.java
+++ b/drone-service/drone-gd/src/main/java/org/sxkj/gd/workorder/service/impl/GdWorkOrderFlowServiceImpl.java
@@ -84,7 +84,6 @@
currentStageCode = lastFlow.getFlowStatus();
}
- // 3. 遍历所有工单阶段
// 工单发布阶段
stages.add(buildStage(WorkOrderStatusEnum.STAGE_WORK_ORDER_RELEASE.getStageDesc(), Arrays.asList(
WorkOrderStatusEnum.PUBLISHING_ACCEPTING.getStageDesc(),
@@ -99,6 +98,11 @@
WorkOrderStatusEnum.RESPONDING_CANCELED.getStageDesc()
), actualFlows, WorkOrderStatusEnum.STAGE_ORDER_RESPONSE.getMaxCode(), currentStageCode));
+ // 如果当前状态是已取消,则不组装后续阶段
+ if (isCancellationState(actualFlows)) {
+ stages.add(new WorkOrderStageVO("结束", new ArrayList<>(), true));
+ return stages;
+ }
// 执行中阶段
stages.add(buildStage(WorkOrderStatusEnum.STAGE_IN_EXECUTION.getStageDesc(), Arrays.asList(
WorkOrderStatusEnum.EXECUTING_TO_BE_COMPLETED.getStageDesc(),
@@ -136,18 +140,6 @@
private WorkOrderStageVO buildStage(String stageName, List<String> statusNames, List<GdWorkOrderFlowEntity> actualFlows, String flowStatus, String currentStageCode) {
List<WorkOrderStatusDetailVO> statuses = new ArrayList<>();
- // 检查该阶段是否在当前阶段之后
- // 注意:即使流程回退,之前到达过的阶段仍然需要显示其记录
- // 而是让所有阶段都能显示其已到达的状态,只对未到达的状态进行处理
- // boolean isStageAfterCurrent = false;
- // try {
- // int stageCode = Integer.parseInt(flowStatus);
- // int currentCode = Integer.parseInt(currentStageCode);
- // isStageAfterCurrent = stageCode > currentCode;
- // } catch (NumberFormatException e) {
- // // 如果转换失败,默认不视为在当前阶段之后
- // }
-
// 临时列表,用于收集所有状态详情
List<WorkOrderStatusDetailVO> tempStatuses = new ArrayList<>();
@@ -169,7 +161,6 @@
}
});
- // 为每个排序后的流程记录创建状态详情
// 无论阶段是否在当前阶段之后,只要有匹配的流程记录,就标记为已到达
for (GdWorkOrderFlowEntity matchingFlow : matchingFlows) {
tempStatuses.add(new WorkOrderStatusDetailVO(
@@ -218,6 +209,25 @@
}
/**
+ * 判断流程记录中是否存在已取消状态
+ *
+ * @param actualFlows 实际流程记录列表
+ * @return 如果存在已取消状态返回true,否则返回false
+ */
+ private boolean isCancellationState(List<GdWorkOrderFlowEntity> actualFlows) {
+ if (actualFlows == null || actualFlows.isEmpty()) {
+ return false;
+ }
+ // 遍历所有流程记录,检查是否存在已取消状态(23)
+ for (GdWorkOrderFlowEntity flow : actualFlows) {
+ if (WorkOrderStatusEnum.RESPONDING_CANCELED.getCode().equals(flow.getWorkStatus())) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /**
* 查找所有匹配的流程记录
*
* @param actualFlows 实际流程记录
--
Gitblit v1.9.3