From c929056185b25dc2e36a43a8afc8305cc37bb3ac Mon Sep 17 00:00:00 2001
From: linwei <872216696@qq.com>
Date: Fri, 31 Jul 2026 14:02:41 +0800
Subject: [PATCH] feat(workorder): 添加事件状态时间线功能
---
drone-service/drone-gd/src/main/java/org/sxkj/gd/workorder/service/impl/GdClueEventStatusFlowServiceImpl.java | 92 +++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 91 insertions(+), 1 deletions(-)
diff --git a/drone-service/drone-gd/src/main/java/org/sxkj/gd/workorder/service/impl/GdClueEventStatusFlowServiceImpl.java b/drone-service/drone-gd/src/main/java/org/sxkj/gd/workorder/service/impl/GdClueEventStatusFlowServiceImpl.java
index 03e9432..8f87889 100644
--- a/drone-service/drone-gd/src/main/java/org/sxkj/gd/workorder/service/impl/GdClueEventStatusFlowServiceImpl.java
+++ b/drone-service/drone-gd/src/main/java/org/sxkj/gd/workorder/service/impl/GdClueEventStatusFlowServiceImpl.java
@@ -19,16 +19,21 @@
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springblade.core.secure.utils.AuthUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.sxkj.gd.workorder.entity.GdClueEventEntity;
import org.sxkj.gd.workorder.entity.GdClueEventStatusFlowEntity;
import org.sxkj.gd.workorder.enums.EventStatusEnum;
import org.sxkj.gd.workorder.mapper.GdClueEventStatusFlowMapper;
+import org.sxkj.gd.workorder.service.IGdClueEventService;
import org.sxkj.gd.workorder.service.IGdClueEventStatusFlowService;
import org.sxkj.gd.workorder.vo.GdClueEventStatusFlowVO;
import org.springframework.stereotype.Service;
import org.springblade.core.mp.base.BaseServiceImpl;
import java.util.Date;
+import java.util.HashMap;
import java.util.List;
+import java.util.Map;
/**
* 事件状态流转履历表 服务实现类
@@ -40,6 +45,9 @@
@Service
@AllArgsConstructor
public class GdClueEventStatusFlowServiceImpl extends BaseServiceImpl<GdClueEventStatusFlowMapper, GdClueEventStatusFlowEntity> implements IGdClueEventStatusFlowService {
+
+ @Autowired
+ private IGdClueEventService gdClueEventService;
/**
* 根据事件ID查询状态流转记录列表
@@ -123,4 +131,86 @@
return save(flowEntity);
}
-}
\ No newline at end of file
+ /**
+ * 根据事件ID查询状态时间线
+ * <p>
+ * 步骤:
+ * 1. 参数校验
+ * 2. 查询事件当前状态
+ * 3. 查询状态流转记录
+ * 4. 构建已到达状态集合
+ * 5. 生成完整的状态时间线
+ * </p>
+ *
+ * @param eventId 事件ID
+ * @return 状态时间线列表(按状态编码升序)
+ */
+ @Override
+ public List<GdClueEventStatusFlowVO> getStatusTimeline(Long eventId) {
+ // 1. 参数校验
+ if (eventId == null) {
+ throw new RuntimeException("事件ID不能为空");
+ }
+
+ // 2. 查询事件当前状态
+ GdClueEventEntity event = gdClueEventService.getById(eventId);
+ if (event == null) {
+ throw new RuntimeException("事件不存在");
+ }
+
+ // 3. 查询状态流转记录
+ List<GdClueEventStatusFlowVO> flows = baseMapper.selectStatusFlowsByEventId(eventId);
+
+ // 4. 构建每个状态的最后流转记录
+ // key: 状态编码, value: 最后的流转记录
+ Map<Integer, GdClueEventStatusFlowVO> lastFlowMap = new HashMap<>();
+ if (flows != null && !flows.isEmpty()) {
+ for (GdClueEventStatusFlowVO flow : flows) {
+ // 记录目标状态的最后流转
+ if (flow.getNewStatus() != null) {
+ lastFlowMap.put(flow.getNewStatus(), flow);
+ }
+ // 记录源状态的最后流转
+ if (flow.getOldStatus() != null) {
+ lastFlowMap.put(flow.getOldStatus(), flow);
+ }
+ }
+ }
+
+ // 5. 生成完整的状态时间线
+ List<GdClueEventStatusFlowVO> timeline = new java.util.ArrayList<>();
+ for (Integer statusCode : EventStatusEnum.getAllStatusCodes()) {
+ GdClueEventStatusFlowVO item = new GdClueEventStatusFlowVO();
+ // 使用 newStatus 字段存储当前状态编码
+ item.setNewStatus(statusCode);
+ item.setNewStatusName(EventStatusEnum.getNameByCode(statusCode));
+
+ GdClueEventStatusFlowVO lastFlow = lastFlowMap.get(statusCode);
+ if (lastFlow != null) {
+ // 根据最后流转记录判断是否已到达
+ // 如果目标是该状态,则已到达
+ // 如果源是该状态(目标不是),则未到达(已离开)
+ boolean isReached = lastFlow.getNewStatus().equals(statusCode);
+ item.setIsReached(isReached);
+
+ if (isReached) {
+ // 已到达状态:设置操作信息
+ item.setOperateUser(lastFlow.getOperateUser());
+ item.setOperateUserName(lastFlow.getOperateUserName());
+ item.setOperateDept(lastFlow.getOperateDept());
+ item.setOperateDeptName(lastFlow.getOperateDeptName());
+ item.setOperateContent(lastFlow.getOperateContent());
+ item.setOperateTime(lastFlow.getOperateTime());
+ }
+ } else {
+ // 没有流转记录,未到达
+ item.setIsReached(false);
+ }
+
+ timeline.add(item);
+ }
+
+ return timeline;
+ }
+
+}
--
Gitblit v1.9.3