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