feat(flow-engine): 增强流程结束功能并记录完成原因

- 新增ProcessInstanceParamDto中paramMap参数的传递
- 在ProcessInstanceRecord表中添加finish_reason字段
- 根据approve_condition自动设置流程结束原因
- 重构endProcess方法以支持参数传递
This commit is contained in:
冷冷 authored and PIG AI committed 2025-06-23 16:09:21 +08:00
1 parent 2b1742470c
commit 298d09586d
10 files changed
+45 -25

No files matched your search

+1
View File
@@ -1496,6 +1496,7 @@ CREATE TABLE `process_instance_record` (
`group_id` bigint DEFAULT NULL COMMENT '组id',
`group_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '组名称',
`status` int DEFAULT '1' COMMENT '状态',
`finish_reason` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '结束原因',
`end_time` datetime DEFAULT NULL COMMENT '结束时间',
`parent_process_instance_id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '上级流程实例id',
`tenant_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '所属租户id',
+1
View File
@@ -97,6 +97,7 @@ CREATE TABLE `process_instance_record` (
`group_id` bigint DEFAULT NULL COMMENT '组id',
`group_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '组名称',
`status` int DEFAULT '1' COMMENT '状态',
`finish_reason` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '结束原因',
`end_time` datetime DEFAULT NULL COMMENT '结束时间',
`parent_process_instance_id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '上级流程实例id',
`tenant_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '所属租户id',
@@ -165,6 +165,7 @@ public class FlowProcessEventListener implements FlowableEventListener {
// 构建流程结束参数并发送事件
ProcessInstanceParamDto processInstanceParamDto = new ProcessInstanceParamDto();
processInstanceParamDto.setProcessInstanceId(processInstanceId);
processInstanceParamDto.setParamMap(execution.getVariables());
remoteFlowTaskService.endProcessEvent(processInstanceParamDto);
}
@@ -1,16 +1,16 @@
package com.pig4cloud.pigx.flow.task.constant;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
@Getter
@AllArgsConstructor
@RequiredArgsConstructor
public enum NodeStatusEnum {
WKS(0, "未开始"), JXZ(1, "进行中"), YJS(2, "已结束"),;
WKS(0, "未开始"), JXZ(1, "进行中"), YJS(2, "已结束");
private int code;
private final int code;
private String name;
private final String name;
}
@@ -80,6 +80,12 @@ public class ProcessInstanceRecord {
@TableField("status")
private Integer status;
/**
* 完成原因
*/
@TableField("finish_reason")
private String finishReason;
/**
* 结束时间
*/
@@ -136,7 +136,7 @@ public class RemoteController {
*/
@PostMapping("endProcess")
public R endProcess(@RequestBody ProcessInstanceParamDto processInstanceParamDto) {
return remoteService.endProcess(processInstanceParamDto.getProcessInstanceId());
return remoteService.endProcess(processInstanceParamDto);
}
/**
@@ -32,11 +32,12 @@ public interface IProcessInstanceService {
R queryMineEndTask(TaskQueryParamDto taskQueryParamDto);
/**
* 流程结束
* @param processsInstanceId
* @return
* 结束流程实例
*
* @param processInstanceParamDto 包含流程实例ID的参数对象
* @return 返回结果,具体类型未定义
*/
R end(String processsInstanceId);
R end(ProcessInstanceParamDto processInstanceParamDto);
/**
* 查询我发起的
@@ -90,11 +90,12 @@ public interface IRemoteService {
R taskEndEvent(ProcessNodeRecordAssignUserParamDto processNodeRecordAssignUserParamDto);
/**
* 实例结束
* @param processInstanceId
* @return
* 结束流程实例的方法
*
* @param processInstanceParamDto 包含流程实例参数的数据传输对象
* @return 返回流程实例结束的结果,具体返回类型未指定
*/
R endProcess(String processInstanceId);
R endProcess(ProcessInstanceParamDto processInstanceParamDto);
/**
* 查询流程管理员
@@ -3,6 +3,7 @@ package com.pig4cloud.pigx.flow.task.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.lang.Dict;
import cn.hutool.core.map.MapUtil;
import cn.hutool.core.util.ArrayUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -17,8 +18,8 @@ import com.pig4cloud.pigx.flow.task.api.feign.RemoteFlowEngineService;
import com.pig4cloud.pigx.flow.task.constant.NodeStatusEnum;
import com.pig4cloud.pigx.flow.task.constant.NodeUserTypeEnum;
import com.pig4cloud.pigx.flow.task.dto.*;
import com.pig4cloud.pigx.flow.task.entity.Process;
import com.pig4cloud.pigx.flow.task.entity.*;
import com.pig4cloud.pigx.flow.task.entity.Process;
import com.pig4cloud.pigx.flow.task.service.*;
import com.pig4cloud.pigx.flow.task.utils.NodeFormatUtil;
import com.pig4cloud.pigx.flow.task.vo.NodeFormatParamVo;
@@ -202,17 +203,24 @@ public class ProcessInstanceServiceImpl implements IProcessInstanceService {
}
/**
* 流程结束
* 结束流程实例
*
* @param processsInstanceId
* @return
* @param processInstanceParamDto 流程实例参数数据传输对象
* @return 返回处理结果
*/
@Override
public R end(String processsInstanceId) {
public R end(ProcessInstanceParamDto processInstanceParamDto) {
Optional<Object> objectOptional = processInstanceParamDto.getParamMap().keySet().stream()
.filter(key -> key.contains("approve_condition"))
.reduce((first, second) -> second)
.map(key -> MapUtil.getBool(processInstanceParamDto.getParamMap(), key, true));
processInstanceRecordService.lambdaUpdate()
.set(ProcessInstanceRecord::getEndTime, new Date())
.set(ProcessInstanceRecord::getStatus, NodeStatusEnum.YJS.getCode())
.eq(ProcessInstanceRecord::getProcessInstanceId, processsInstanceId)
.set(objectOptional.isPresent(), ProcessInstanceRecord::getFinishReason, objectOptional.get())
.eq(ProcessInstanceRecord::getProcessInstanceId, processInstanceParamDto.getProcessInstanceId())
.update(new ProcessInstanceRecord());
return R.ok();
}
@@ -236,13 +236,14 @@ public class RemoteServiceImpl implements IRemoteService {
}
/**
* 实例结束
* @param processInstanceId
* @return
* 结束流程实例的方法
*
* @param processInstanceParamDto 包含流程实例标识的参数对象
* @return 流程实例结束操作的响应结果
*/
@Override
public R endProcess(String processInstanceId) {
return processInstanceService.end(processInstanceId);
public R endProcess(ProcessInstanceParamDto processInstanceParamDto) {
return processInstanceService.end(processInstanceParamDto);
}
/**