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 |   25 ++++++++++++++++++++++++-
 1 files changed, 24 insertions(+), 1 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 b6c4ac5..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(),
@@ -205,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