From a22dc9537f1bc3896af38ab4bb572a56fb9611be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90Li?= <15040126243@163.com> Date: Wed, 22 Jan 2025 11:13:24 +0800 Subject: [PATCH] =?UTF-8?q?update=20=E4=BC=98=E5=8C=96=20=E4=B8=9A?= =?UTF-8?q?=E5=8A=A1=E4=BA=8B=E4=BB=B6=E7=9B=91=E5=90=AC=E5=99=A8=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E6=B5=81=E7=A8=8B=E5=AE=A1=E6=89=B9=E5=8F=82=E6=95=B0?= =?UTF-8?q?=E4=BC=A0=E9=80=92=20=E6=9B=B4=E6=96=B9=E4=BE=BF=E7=9A=84?= =?UTF-8?q?=E5=AF=B9=E6=8E=A5=E4=B8=9A=E5=8A=A1=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/core/domain/event/ProcessEvent.java | 6 ++++++ .../workflow/handler/FlowProcessEventHandler.java | 5 ++++- .../workflow/listener/WorkflowGlobalListener.java | 11 ++++++++++- .../workflow/service/impl/FlwTaskServiceImpl.java | 2 +- .../workflow/service/impl/TestLeaveServiceImpl.java | 9 +++++++++ 5 files changed, 30 insertions(+), 3 deletions(-) diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/domain/event/ProcessEvent.java b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/domain/event/ProcessEvent.java index 21bfbefa4..6329b9c01 100644 --- a/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/domain/event/ProcessEvent.java +++ b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/domain/event/ProcessEvent.java @@ -4,6 +4,7 @@ import lombok.Data; import java.io.Serial; import java.io.Serializable; +import java.util.Map; /** * 总体流程监听 @@ -36,6 +37,11 @@ public class ProcessEvent implements Serializable { */ private String status; + /** + * 办理参数 + */ + private Map params; + /** * 当为true时为申请人节点办理 */ diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/handler/FlowProcessEventHandler.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/handler/FlowProcessEventHandler.java index 656e013e4..4b215ef60 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/handler/FlowProcessEventHandler.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/handler/FlowProcessEventHandler.java @@ -9,6 +9,8 @@ import org.dromara.common.tenant.helper.TenantHelper; import org.dromara.workflow.common.ConditionalOnEnable; import org.springframework.stereotype.Component; +import java.util.Map; + /** * 流程监听服务 * @@ -28,7 +30,7 @@ public class FlowProcessEventHandler { * @param status 状态 * @param submit 当为true时为申请人节点办理 */ - public void processHandler(String flowCode, String businessId, String status, boolean submit) { + public void processHandler(String flowCode, String businessId, String status, Map params, boolean submit) { String tenantId = TenantHelper.getTenantId(); log.info("发布流程事件,租户ID: {}, 流程状态: {}, 流程编码: {}, 业务ID: {}, 是否申请人节点办理: {}", tenantId, status, flowCode, businessId, submit); ProcessEvent processEvent = new ProcessEvent(); @@ -36,6 +38,7 @@ public class FlowProcessEventHandler { processEvent.setFlowCode(flowCode); processEvent.setBusinessId(businessId); processEvent.setStatus(status); + processEvent.setParams(params); processEvent.setSubmit(submit); SpringUtils.context().publishEvent(processEvent); } diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/listener/WorkflowGlobalListener.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/listener/WorkflowGlobalListener.java index 097d74ce7..e79fc3b43 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/listener/WorkflowGlobalListener.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/listener/WorkflowGlobalListener.java @@ -17,7 +17,9 @@ import org.dromara.workflow.service.IFlwInstanceService; import org.dromara.workflow.service.IFlwTaskService; import org.springframework.stereotype.Component; +import java.util.HashMap; import java.util.List; +import java.util.Map; /** * 全局任务办理监听 @@ -81,10 +83,17 @@ public class WorkflowGlobalListener implements GlobalListener { Definition definition = listenerVariable.getDefinition(); String businessId = instance.getBusinessId(); String flowStatus = instance.getFlowStatus(); + Map params = new HashMap<>(); + // 历史任务扩展(通常为附件) + params.put("hisTaskExt", listenerVariable.getFlowParams().getHisTaskExt()); + // 办理人 + params.put("handler", listenerVariable.getFlowParams().getHandler()); + // 办理意见 + params.put("message", listenerVariable.getFlowParams().getMessage()); // 判断流程状态(发布:撤销,退回,作废,终止,已完成事件) String status = determineFlowStatus(instance, flowStatus); if (StringUtils.isNotBlank(status)) { - flowProcessEventHandler.processHandler(definition.getFlowCode(), businessId, status, false); + flowProcessEventHandler.processHandler(definition.getFlowCode(), businessId, status, params, false); } } diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskServiceImpl.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskServiceImpl.java index 01221261c..2df51bb3e 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskServiceImpl.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskServiceImpl.java @@ -153,7 +153,7 @@ public class FlwTaskServiceImpl implements IFlwTaskService { Definition definition = defService.getById(flowTask.getDefinitionId()); // 检查流程状态是否为草稿、已撤销或已退回状态,若是则执行流程提交监听 if (BusinessStatusEnum.isDraftOrCancelOrBack(ins.getFlowStatus())) { - flowProcessEventHandler.processHandler(definition.getFlowCode(), ins.getBusinessId(), ins.getFlowStatus(), true); + flowProcessEventHandler.processHandler(definition.getFlowCode(), ins.getBusinessId(), ins.getFlowStatus(), null, true); } // 构建流程参数,包括变量、跳转类型、消息、处理人、权限等信息 FlowParams flowParams = new FlowParams(); diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/TestLeaveServiceImpl.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/TestLeaveServiceImpl.java index a11e6c19a..a7be9275d 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/TestLeaveServiceImpl.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/TestLeaveServiceImpl.java @@ -28,6 +28,7 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.List; +import java.util.Map; /** * 请假Service业务层处理 @@ -131,6 +132,14 @@ public class TestLeaveServiceImpl implements ITestLeaveService { log.info("当前任务执行了{}", processEvent.toString()); TestLeave testLeave = baseMapper.selectById(Long.valueOf(processEvent.getBusinessId())); testLeave.setStatus(processEvent.getStatus()); + // 用于例如审批附件 审批意见等 存储到业务表内 自行根据业务实现存储流程 + Map params = processEvent.getParams(); + // 历史任务扩展(通常为附件) + String hisTaskExt = params.getOrDefault("hisTaskExt", "").toString(); + // 办理人 + String handler = params.getOrDefault("handler", "").toString(); + // 办理意见 + String message = params.getOrDefault("message", "").toString(); if (processEvent.isSubmit()) { testLeave.setStatus(BusinessStatusEnum.WAITING.getStatus()); }