吉安感知网项目-后端
linwei
4 days ago a86f51ae6319bbc1a6206e5c2e3f8c65eaf17217
feat(workorder): 更新事件处理功能并扩展数据模型

- 修改handle接口注释为"退回处理-(弃用)"
- 扩展updateStatus接口功能,支持完成、处置中和已处置状态切换及退回操作
- 在GdClueEventListVO中新增多个字段:resultId、workOrderId、disposeUser、
disposeDept、longitude、latitude、eventStatus、areaCode、eventNum、attachUrl
- 添加@JsonFormat和@DateTimeFormat注解支持日期时间格式化
- 更新GdClueEventMapper.xml映射文件,增加新字段的映射关系
- 优化事件分发逻辑,修改成果分发状态判断条件
- 新增状态流转记录插入功能,记录事件分发状态变更
- 实现退回操作时同步更新成果状态的功能
- 完善异常处理机制,确保数据一致性
4 files modified
107 ■■■■■ changed files
drone-service/drone-gd/src/main/java/org/sxkj/gd/workorder/controller/GdClueEventController.java 4 ●●●● patch | view | raw | blame | history
drone-service/drone-gd/src/main/java/org/sxkj/gd/workorder/mapper/GdClueEventMapper.xml 22 ●●●●● patch | view | raw | blame | history
drone-service/drone-gd/src/main/java/org/sxkj/gd/workorder/service/impl/GdClueEventServiceImpl.java 28 ●●●●● patch | view | raw | blame | history
drone-service/drone-gd/src/main/java/org/sxkj/gd/workorder/vo/GdClueEventListVO.java 53 ●●●●● patch | view | raw | blame | history
drone-service/drone-gd/src/main/java/org/sxkj/gd/workorder/controller/GdClueEventController.java
@@ -183,7 +183,7 @@
     */
    @PostMapping("/handle")
    @ApiOperationSupport(order = 8)
    @ApiOperation(value = "处理", notes = "传入事件ID与事件状态")
    @ApiOperation(value = "退回处理-(弃用)", notes = "传入事件ID与事件状态")
    public R handle(@Valid @RequestBody GdClueEventRejectParam rejectParam) {
        return R.status(gdClueEventService.handleClueEvent(rejectParam));
    }
@@ -248,7 +248,7 @@
     */
    @PostMapping("/updateStatus")
    @ApiOperationSupport(order = 13)
    @ApiOperation(value = "更新事件状态", notes = "传入事件ID和目标状态,必须符合状态流转矩阵")
    @ApiOperation(value = "更新事件状态(完成,处置中和已处置状态切换,退回)", notes = "传入事件ID和目标状态,必须符合状态流转矩阵")
    public R updateStatus(@Valid @RequestBody GdClueEventStatusUpdateParam updateParam) {
        return R.status(gdClueEventService.updateEventStatus(updateParam));
    }
drone-service/drone-gd/src/main/java/org/sxkj/gd/workorder/mapper/GdClueEventMapper.xml
@@ -63,6 +63,16 @@
        <result column="shoot_time" property="shootTime"/>
        <result column="dispose_user_name" property="disposeUserName"/>
        <result column="dispose_dept_name" property="disposeDeptName"/>
        <result column="result_id" property="resultId"/>
        <result column="work_order_id" property="workOrderId"/>
        <result column="dispose_user" property="disposeUser"/>
        <result column="dispose_dept" property="disposeDept"/>
        <result column="longitude" property="longitude"/>
        <result column="latitude" property="latitude"/>
        <result column="event_status" property="eventStatus"/>
        <result column="area_code" property="areaCode"/>
        <result column="event_num" property="eventNum"/>
        <result column="attach_url" property="attachUrl"/>
    </resultMap>
    <resultMap id="gdClueEventCountVoResultMap" type="org.sxkj.gd.workorder.vo.GdClueEventCountVO">
@@ -109,7 +119,17 @@
            ce.create_time as create_time,
            tr.shoot_time as shoot_time,
            COALESCE(bu.real_name, bu.name) as dispose_user_name,
            bd.dept_name as dispose_dept_name
            bd.dept_name as dispose_dept_name,
            ce.result_id,
            ce.work_order_id,
            ce.dispose_user,
            ce.dispose_dept,
            ce.longitude,
            ce.latitude,
            ce.event_status,
            ce.area_code,
            ce.event_num,
            ce.attach_url
        from ja_gd_clue_event ce
        left join ja_gd_task_result tr on tr.id::VARCHAR = ce.result_id::VARCHAR and tr.is_deleted = 0
        left join blade_user bu on bu.id::VARCHAR = ce.dispose_user::VARCHAR and bu.is_deleted = 0
drone-service/drone-gd/src/main/java/org/sxkj/gd/workorder/service/impl/GdClueEventServiceImpl.java
@@ -218,7 +218,8 @@
        if (taskResult == null || (taskResult.getIsDeleted() != null && taskResult.getIsDeleted() != 0)) {
            throw new RuntimeException("成果不存在");
        }
        if (taskResult.getDistributeStatus() != null && taskResult.getDistributeStatus() == 1) {
        // 判断是否已分发, 不为空,并且不能是退回状态,则不能分发
        if (taskResult.getDistributeStatus() != null && !EventStatusEnum.RETURNED.getCode().equals(taskResult.getDistributeStatus())) {
            throw new RuntimeException("成果已分发,无法再次分发");
        }
        // 查看事件直接是否分发过
@@ -251,6 +252,14 @@
        if (!saveOrUpdate(clueEvent)) {
            throw new RuntimeException("事件分发失败");
        }
        // 插入状态流转记录(从无到待确认)
        gdClueEventStatusFlowService.insertStatusFlow(
                clueEvent.getId(),
                null,
                EventStatusEnum.PENDING_CONFIRM.getCode(),
                "事件分发",
                new Date()
        );
        taskResult.setDistributeStatus(1);
        taskResult.setUpdateUser(AuthUtil.getUserId());
        taskResult.setUpdateTime(new Date());
@@ -338,10 +347,12 @@
     * 3. 校验状态流转合法性
     * 4. 更新事件状态
     * 5. 插入状态流转记录
     * 6. 退回时同步更新成果状态
     * </p>
     *
     * @param updateParam 状态更新参数
     * @return 是否操作成功
     * @throws RuntimeException 当参数为空、事件不存在、状态流转非法或更新失败时抛出
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
@@ -391,6 +402,21 @@
                updateParam.getOperateTime() != null ? updateParam.getOperateTime() : new Date()
        );
        // 6. 退回时同步更新成果状态
        if (targetStatus.equals(EventStatusEnum.RETURNED.getCode())) {
            // 查询成果信息
            GdTaskResultEntity taskResult = gdTaskResultService.getById(eventEntity.getResultId());
            if (taskResult != null && (taskResult.getIsDeleted() == null || taskResult.getIsDeleted() == 0)) {
                // 更新成果分发状态为已退回(状态2)
                taskResult.setDistributeStatus(EventStatusEnum.RETURNED.getCode());
                taskResult.setUpdateUser(AuthUtil.getUserId());
                taskResult.setUpdateTime(new Date());
                if (!gdTaskResultService.updateTaskResultById(taskResult)) {
                    throw new RuntimeException("成果状态更新失败");
                }
            }
        }
        return true;
    }
drone-service/drone-gd/src/main/java/org/sxkj/gd/workorder/vo/GdClueEventListVO.java
@@ -16,6 +16,7 @@
 */
package org.sxkj.gd.workorder.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@@ -23,6 +24,7 @@
import java.util.Date;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import org.springframework.format.annotation.DateTimeFormat;
/**
 * 事件表(线索事件) 列表视图实体类
@@ -72,4 +74,55 @@
     */
    @ApiModelProperty(value = "处置部门名称")
    private String disposeDeptName;
    /**
     * 关联成果表ID
     */
    @ApiModelProperty(value = "关联成果表ID")
    private Long resultId;
    /**
     * 关联工单任务表ID
     */
    @ApiModelProperty(value = "关联工单任务表ID")
    private Long workOrderId;
    /**
     * 工单处置人
     */
    @ApiModelProperty(value = "工单处置人")
    private Long disposeUser;
    /**
     * 处置部门
     */
    @ApiModelProperty(value = "处置部门")
    private Long disposeDept;
    /**
     * 经度
     */
    @ApiModelProperty(value = "经度")
    private Double longitude;
    /**
     * 纬度
     */
    @ApiModelProperty(value = "纬度")
    private Double latitude;
    /**
     * 状态:0待确认、1处置中、2已退回、3已处置、4已完成
     */
    @ApiModelProperty(value = "状态:0待确认、1处置中、2已退回、3已处置、4已完成")
    private Integer eventStatus;
    /**
     * 区域编码
     */
    @ApiModelProperty(value = "区域编码")
    private String areaCode;
    /**
     * 事件编号
     */
    @ApiModelProperty(value = "事件编号")
    private String eventNum;
    /**
     * 附件URL
     */
    @ApiModelProperty(value = "附件URL")
    private String attachUrl;
}