From 298d09586daf0af5c346ecf14b0ba93c356bf74b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=86=B7=E5=86=B7?= Date: Fri, 2 May 2025 12:30:48 +0800 Subject: [PATCH] =?UTF-8?q?feat(flow-engine):=20=E5=A2=9E=E5=BC=BA?= =?UTF-8?q?=E6=B5=81=E7=A8=8B=E7=BB=93=E6=9D=9F=E5=8A=9F=E8=83=BD=E5=B9=B6?= =?UTF-8?q?=E8=AE=B0=E5=BD=95=E5=AE=8C=E6=88=90=E5=8E=9F=E5=9B=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增ProcessInstanceParamDto中paramMap参数的传递 - 在ProcessInstanceRecord表中添加finish_reason字段 - 根据approve_condition自动设置流程结束原因 - 重构endProcess方法以支持参数传递 --- db/0pigxx_boot.sql | 1 + db/3pigxx_flow.sql | 1 + .../listeners/FlowProcessEventListener.java | 1 + .../flow/task/constant/NodeStatusEnum.java | 10 +++++----- .../task/entity/ProcessInstanceRecord.java | 6 ++++++ .../task/controller/RemoteController.java | 2 +- .../task/service/IProcessInstanceService.java | 9 +++++---- .../flow/task/service/IRemoteService.java | 9 +++++---- .../impl/ProcessInstanceServiceImpl.java | 20 +++++++++++++------ .../task/service/impl/RemoteServiceImpl.java | 11 +++++----- 10 files changed, 45 insertions(+), 25 deletions(-) diff --git a/db/0pigxx_boot.sql b/db/0pigxx_boot.sql index a9a5c33da..5453bbfa0 100644 --- a/db/0pigxx_boot.sql +++ b/db/0pigxx_boot.sql @@ -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', diff --git a/db/3pigxx_flow.sql b/db/3pigxx_flow.sql index fdd2d83a2..c946eb98c 100644 --- a/db/3pigxx_flow.sql +++ b/db/3pigxx_flow.sql @@ -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', diff --git a/pigx-flow/pigx-flow-engine/pigx-flow-engine-biz/src/main/java/com/pig4cloud/pigx/flow/engine/listeners/FlowProcessEventListener.java b/pigx-flow/pigx-flow-engine/pigx-flow-engine-biz/src/main/java/com/pig4cloud/pigx/flow/engine/listeners/FlowProcessEventListener.java index d78f03298..a6d90468e 100644 --- a/pigx-flow/pigx-flow-engine/pigx-flow-engine-biz/src/main/java/com/pig4cloud/pigx/flow/engine/listeners/FlowProcessEventListener.java +++ b/pigx-flow/pigx-flow-engine/pigx-flow-engine-biz/src/main/java/com/pig4cloud/pigx/flow/engine/listeners/FlowProcessEventListener.java @@ -165,6 +165,7 @@ public class FlowProcessEventListener implements FlowableEventListener { // 构建流程结束参数并发送事件 ProcessInstanceParamDto processInstanceParamDto = new ProcessInstanceParamDto(); processInstanceParamDto.setProcessInstanceId(processInstanceId); + processInstanceParamDto.setParamMap(execution.getVariables()); remoteFlowTaskService.endProcessEvent(processInstanceParamDto); } diff --git a/pigx-flow/pigx-flow-task/pigx-flow-task-api/src/main/java/com/pig4cloud/pigx/flow/task/constant/NodeStatusEnum.java b/pigx-flow/pigx-flow-task/pigx-flow-task-api/src/main/java/com/pig4cloud/pigx/flow/task/constant/NodeStatusEnum.java index 3d5b581ec..7c8ed25eb 100644 --- a/pigx-flow/pigx-flow-task/pigx-flow-task-api/src/main/java/com/pig4cloud/pigx/flow/task/constant/NodeStatusEnum.java +++ b/pigx-flow/pigx-flow-task/pigx-flow-task-api/src/main/java/com/pig4cloud/pigx/flow/task/constant/NodeStatusEnum.java @@ -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; } diff --git a/pigx-flow/pigx-flow-task/pigx-flow-task-api/src/main/java/com/pig4cloud/pigx/flow/task/entity/ProcessInstanceRecord.java b/pigx-flow/pigx-flow-task/pigx-flow-task-api/src/main/java/com/pig4cloud/pigx/flow/task/entity/ProcessInstanceRecord.java index 7aa3fb935..666212755 100644 --- a/pigx-flow/pigx-flow-task/pigx-flow-task-api/src/main/java/com/pig4cloud/pigx/flow/task/entity/ProcessInstanceRecord.java +++ b/pigx-flow/pigx-flow-task/pigx-flow-task-api/src/main/java/com/pig4cloud/pigx/flow/task/entity/ProcessInstanceRecord.java @@ -80,6 +80,12 @@ public class ProcessInstanceRecord { @TableField("status") private Integer status; + /** + * 完成原因 + */ + @TableField("finish_reason") + private String finishReason; + /** * 结束时间 */ diff --git a/pigx-flow/pigx-flow-task/pigx-flow-task-biz/src/main/java/com/pig4cloud/pigx/flow/task/controller/RemoteController.java b/pigx-flow/pigx-flow-task/pigx-flow-task-biz/src/main/java/com/pig4cloud/pigx/flow/task/controller/RemoteController.java index 551a84ea8..0e898d752 100644 --- a/pigx-flow/pigx-flow-task/pigx-flow-task-biz/src/main/java/com/pig4cloud/pigx/flow/task/controller/RemoteController.java +++ b/pigx-flow/pigx-flow-task/pigx-flow-task-biz/src/main/java/com/pig4cloud/pigx/flow/task/controller/RemoteController.java @@ -136,7 +136,7 @@ public class RemoteController { */ @PostMapping("endProcess") public R endProcess(@RequestBody ProcessInstanceParamDto processInstanceParamDto) { - return remoteService.endProcess(processInstanceParamDto.getProcessInstanceId()); + return remoteService.endProcess(processInstanceParamDto); } /** diff --git a/pigx-flow/pigx-flow-task/pigx-flow-task-biz/src/main/java/com/pig4cloud/pigx/flow/task/service/IProcessInstanceService.java b/pigx-flow/pigx-flow-task/pigx-flow-task-biz/src/main/java/com/pig4cloud/pigx/flow/task/service/IProcessInstanceService.java index ad5e46183..5481e5705 100644 --- a/pigx-flow/pigx-flow-task/pigx-flow-task-biz/src/main/java/com/pig4cloud/pigx/flow/task/service/IProcessInstanceService.java +++ b/pigx-flow/pigx-flow-task/pigx-flow-task-biz/src/main/java/com/pig4cloud/pigx/flow/task/service/IProcessInstanceService.java @@ -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); /** * 查询我发起的 diff --git a/pigx-flow/pigx-flow-task/pigx-flow-task-biz/src/main/java/com/pig4cloud/pigx/flow/task/service/IRemoteService.java b/pigx-flow/pigx-flow-task/pigx-flow-task-biz/src/main/java/com/pig4cloud/pigx/flow/task/service/IRemoteService.java index 1de7852bc..3edf3a0db 100644 --- a/pigx-flow/pigx-flow-task/pigx-flow-task-biz/src/main/java/com/pig4cloud/pigx/flow/task/service/IRemoteService.java +++ b/pigx-flow/pigx-flow-task/pigx-flow-task-biz/src/main/java/com/pig4cloud/pigx/flow/task/service/IRemoteService.java @@ -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); /** * 查询流程管理员 diff --git a/pigx-flow/pigx-flow-task/pigx-flow-task-biz/src/main/java/com/pig4cloud/pigx/flow/task/service/impl/ProcessInstanceServiceImpl.java b/pigx-flow/pigx-flow-task/pigx-flow-task-biz/src/main/java/com/pig4cloud/pigx/flow/task/service/impl/ProcessInstanceServiceImpl.java index 821a6cea1..bc91399f4 100644 --- a/pigx-flow/pigx-flow-task/pigx-flow-task-biz/src/main/java/com/pig4cloud/pigx/flow/task/service/impl/ProcessInstanceServiceImpl.java +++ b/pigx-flow/pigx-flow-task/pigx-flow-task-biz/src/main/java/com/pig4cloud/pigx/flow/task/service/impl/ProcessInstanceServiceImpl.java @@ -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 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(); } diff --git a/pigx-flow/pigx-flow-task/pigx-flow-task-biz/src/main/java/com/pig4cloud/pigx/flow/task/service/impl/RemoteServiceImpl.java b/pigx-flow/pigx-flow-task/pigx-flow-task-biz/src/main/java/com/pig4cloud/pigx/flow/task/service/impl/RemoteServiceImpl.java index 8dbba6f96..5933d9eba 100644 --- a/pigx-flow/pigx-flow-task/pigx-flow-task-biz/src/main/java/com/pig4cloud/pigx/flow/task/service/impl/RemoteServiceImpl.java +++ b/pigx-flow/pigx-flow-task/pigx-flow-task-biz/src/main/java/com/pig4cloud/pigx/flow/task/service/impl/RemoteServiceImpl.java @@ -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); } /**