From a86f51ae6319bbc1a6206e5c2e3f8c65eaf17217 Mon Sep 17 00:00:00 2001
From: linwei <872216696@qq.com>
Date: Thu, 30 Jul 2026 09:42:06 +0800
Subject: [PATCH] feat(workorder): 更新事件处理功能并扩展数据模型

---
 drone-service/drone-gd/src/main/java/org/sxkj/gd/workorder/controller/GdClueEventController.java |  139 +++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 125 insertions(+), 14 deletions(-)

diff --git a/drone-service/drone-gd/src/main/java/org/sxkj/gd/workorder/controller/GdClueEventController.java b/drone-service/drone-gd/src/main/java/org/sxkj/gd/workorder/controller/GdClueEventController.java
index 4675cbc..fe689e8 100644
--- a/drone-service/drone-gd/src/main/java/org/sxkj/gd/workorder/controller/GdClueEventController.java
+++ b/drone-service/drone-gd/src/main/java/org/sxkj/gd/workorder/controller/GdClueEventController.java
@@ -16,6 +16,7 @@
  */
 package org.sxkj.gd.workorder.controller;
 
+import com.alibaba.fastjson.JSON;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
@@ -23,6 +24,7 @@
 import lombok.AllArgsConstructor;
 import javax.validation.Valid;
 
+import lombok.extern.slf4j.Slf4j;
 import org.springblade.core.secure.BladeUser;
 import org.springblade.core.mp.support.Condition;
 import org.springblade.core.mp.support.Query;
@@ -31,11 +33,14 @@
 import org.springframework.web.bind.annotation.*;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import org.sxkj.gd.workorder.entity.GdClueEventEntity;
+import org.sxkj.gd.workorder.param.GdClueDisposeRecordAddParam;
 import org.sxkj.gd.workorder.param.GdClueEventRejectParam;
-import org.sxkj.gd.workorder.vo.GdClueEventListVO;
-import org.sxkj.gd.workorder.vo.GdClueEventVO;
+import org.sxkj.gd.workorder.param.GdClueEventStatusUpdateParam;
+import org.sxkj.gd.workorder.vo.*;
 import org.sxkj.gd.workorder.excel.GdClueEventExcel;
+import org.sxkj.gd.workorder.service.IGdClueDisposeRecordService;
 import org.sxkj.gd.workorder.service.IGdClueEventService;
+import org.sxkj.gd.workorder.service.IGdClueEventStatusFlowService;
 import org.springblade.core.boot.ctrl.BladeController;
 import org.springblade.core.tool.utils.DateUtil;
 import org.springblade.core.excel.util.ExcelUtil;
@@ -51,6 +56,7 @@
  * @author lw
  * @since 2026-01-14
  */
+@Slf4j
 @RestController
 @AllArgsConstructor
 @RequestMapping("workOrder/gdClueEvent")
@@ -58,6 +64,8 @@
 public class GdClueEventController extends BladeController {
 
 	private final IGdClueEventService gdClueEventService;
+	private final IGdClueDisposeRecordService gdClueDisposeRecordService;
+	private final IGdClueEventStatusFlowService gdClueEventStatusFlowService;
 
 	/**
 	 * 事件表(线索事件) 详情
@@ -70,22 +78,49 @@
 	}
 
 	/**
-	 * 事件表(线索事件) 列表
+	 * 事件表(线索事件) 列表(分页)
 	 */
 	@GetMapping("/list")
 	@ApiOperationSupport(order = 2)
-	@ApiOperation(value = "列表", notes = "固定过滤本部门,onlyMine=1时仅我的数据")
-	public R<List<GdClueEventListVO>> list(@ApiParam(value = "是否仅我的数据,1为是,0为否")
-			@RequestParam(value = "onlyMine", required = false, defaultValue = "0") Integer onlyMine) {
-		List<GdClueEventListVO> list = gdClueEventService.listGdClueEventByDept(onlyMine);
-		return R.data(list);
+	@ApiOperation(value = "列表(分页)", notes = "固定过滤本部门,onlyMine=1时仅我的数据")
+	public R<IPage<GdClueEventListVO>> list(@ApiParam(value = "是否仅我的数据,1为是,0为否")
+			@RequestParam(value = "onlyMine", required = false, defaultValue = "0") Integer onlyMine,
+			@ApiParam(value = "事件编号关键字")
+			@RequestParam(value = "keyword", required = false) String keyword,
+			@ApiParam(value = "事件状态:0待确认、1处置中、2已退回、3已处置、4已完成")
+			@RequestParam(value = "eventStatus", required = false) Integer eventStatus,
+			@ApiParam(value = "开始时间(创建时间)")
+			@RequestParam(value = "startTime", required = false) String startTime,
+			@ApiParam(value = "结束时间(创建时间)")
+			@RequestParam(value = "endTime", required = false) String endTime,
+			@ApiParam(value = "分页参数") Query query) {
+		// 1. 构建分页对象
+		IPage<GdClueEventListVO> pages = Condition.getPage(query);
+
+		// 2. 查询分页数据
+		IPage<GdClueEventListVO> result = gdClueEventService.pageGdClueEventByDept(
+				pages, onlyMine, keyword, eventStatus, startTime, endTime);
+
+		// 3. 返回分页结果
+		return R.data(result);
+	}
+
+	/**
+	 * 事件表(线索事件) 数量统计
+	 */
+	@GetMapping("/count")
+	@ApiOperationSupport(order = 3)
+	@ApiOperation(value = "数量统计", notes = "返回全部工单与我的工单数量")
+	public R<GdClueEventCountVO> count(@ApiParam(value = "事件编号关键字")
+			@RequestParam(value = "keyword", required = false) String keyword) {
+		return R.data(gdClueEventService.getGdClueEventCount(keyword));
 	}
 
 	/**
 	 * 事件表(线索事件) 自定义分页
 	 */
 	@GetMapping("/page")
-	@ApiOperationSupport(order = 3)
+	@ApiOperationSupport(order = 4)
 	@ApiOperation(value = "分页", notes = "传入gdClueEvent")
 	public R<IPage<GdClueEventVO>> page(GdClueEventVO gdClueEvent, Query query) {
 		IPage<GdClueEventVO> pages = gdClueEventService.selectGdClueEventPage(Condition.getPage(query), gdClueEvent);
@@ -123,6 +158,17 @@
 	}
 
 	/**
+	 * 事件表(线索事件) 新增或修改-对外接口
+	 */
+	@PostMapping("/submitExternal")
+	@ApiOperationSupport(order = 6)
+	@ApiOperation(value = "新增或修改", notes = "传入gdClueEvent")
+	public R submitExternal(@Valid @RequestBody GdClueEventEntity gdClueEvent) {
+		log.info("submitExternal-gdClueEvent:{}", JSON.toJSONString(gdClueEvent));
+		return R.status(gdClueEventService.saveOrUpdateExternal(gdClueEvent));
+	}
+
+	/**
 	 * 事件表(线索事件) 删除
 	 */
 	@PostMapping("/remove")
@@ -133,13 +179,78 @@
 	}
 
 	/**
-	 * 事件驳回
+	 * 事件处理
 	 */
-	@PostMapping("/reject")
+	@PostMapping("/handle")
 	@ApiOperationSupport(order = 8)
-	@ApiOperation(value = "驳回", notes = "传入事件ID")
-	public R reject(@Valid @RequestBody GdClueEventRejectParam rejectParam) {
-		return R.status(gdClueEventService.rejectClueEvent(rejectParam));
+	@ApiOperation(value = "退回处理-(弃用)", notes = "传入事件ID与事件状态")
+	public R handle(@Valid @RequestBody GdClueEventRejectParam rejectParam) {
+		return R.status(gdClueEventService.handleClueEvent(rejectParam));
+	}
+
+	/**
+	 * 事件详情(包含处置记录和状态流转)
+	 */
+	@GetMapping("/detailFull")
+	@ApiOperationSupport(order = 9)
+	@ApiOperation(value = "事件详情(包含处置记录和状态流转)", notes = "传入事件ID")
+	public R<GdClueEventDetailVO> detailFull(@ApiParam(value = "事件ID", required = true) @RequestParam Long id) {
+		// 1. 查询事件基本信息
+		GdClueEventVO eventInfo = gdClueEventService.getGdClueEventDetail(id);
+
+		// 2. 查询处置记录时间线
+		List<GdClueDisposeRecordVO> disposeRecords = gdClueDisposeRecordService.getDisposeRecordsByEventId(id);
+
+		// 3. 查询状态流转时间线
+		List<GdClueEventStatusFlowVO> statusFlows = gdClueEventStatusFlowService.getStatusFlowsByEventId(id);
+
+		// 4. 组装返回数据
+		GdClueEventDetailVO detailVO = new GdClueEventDetailVO();
+		detailVO.setEventInfo(eventInfo);
+		detailVO.setDisposeRecords(disposeRecords);
+		detailVO.setStatusFlows(statusFlows);
+
+		return R.data(detailVO);
+	}
+
+	/**
+	 * 查询处置记录列表
+	 */
+	@GetMapping("/disposeRecords")
+	@ApiOperationSupport(order = 10)
+	@ApiOperation(value = "查询处置记录列表", notes = "传入事件ID")
+	public R<List<GdClueDisposeRecordVO>> getDisposeRecords(@ApiParam(value = "事件ID", required = true) @RequestParam Long eventId) {
+		return R.data(gdClueDisposeRecordService.getDisposeRecordsByEventId(eventId));
+	}
+
+	/**
+	 * 新增处置记录
+	 */
+	@PostMapping("/addDisposeRecord")
+	@ApiOperationSupport(order = 11)
+	@ApiOperation(value = "新增处置记录", notes = "传入处置记录参数,可同步更新事件状态")
+	public R addDisposeRecord(@Valid @RequestBody GdClueDisposeRecordAddParam addParam) {
+		return R.status(gdClueDisposeRecordService.addDisposeRecord(addParam));
+	}
+
+	/**
+	 * 查询状态流转记录列表
+	 */
+	@GetMapping("/statusFlows")
+	@ApiOperationSupport(order = 12)
+	@ApiOperation(value = "查询状态流转记录列表", notes = "传入事件ID")
+	public R<List<GdClueEventStatusFlowVO>> getStatusFlows(@ApiParam(value = "事件ID", required = true) @RequestParam Long eventId) {
+		return R.data(gdClueEventStatusFlowService.getStatusFlowsByEventId(eventId));
+	}
+
+	/**
+	 * 更新事件状态
+	 */
+	@PostMapping("/updateStatus")
+	@ApiOperationSupport(order = 13)
+	@ApiOperation(value = "更新事件状态(完成,处置中和已处置状态切换,退回)", notes = "传入事件ID和目标状态,必须符合状态流转矩阵")
+	public R updateStatus(@Valid @RequestBody GdClueEventStatusUpdateParam updateParam) {
+		return R.status(gdClueEventService.updateEventStatus(updateParam));
 	}
 
 //	/**

--
Gitblit v1.9.3