From 0b04ac79d0fec886d15683e84e76b2e811814054 Mon Sep 17 00:00:00 2001 From: gssong <1742057357@qq.com> Date: Sun, 2 Jun 2024 14:42:05 +0800 Subject: [PATCH] =?UTF-8?q?update=20=E4=BC=98=E5=8C=96=E8=B0=83=E6=95=B4?= =?UTF-8?q?=E8=87=AA=E5=AE=9A=E4=B9=89=E7=9B=91=E5=90=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/domain/event/ProcessEvent.java | 49 +++++++++++++ .../core/domain/event/ProcessTaskEvent.java | 42 +++++++++++ .../annotation/FlowListenerAnnotation.java | 27 ------- .../handler/FlowProcessEventHandler.java | 49 +++++++++++++ .../flowable/strategy/FlowEventStrategy.java | 73 ------------------- .../strategy/FlowProcessEventHandler.java | 20 ----- .../strategy/FlowTaskEventHandler.java | 19 ----- .../listener/TestCustomProcessHandler.java | 31 -------- .../listener/TestCustomTaskHandler.java | 23 ------ .../impl/ActProcessInstanceServiceImpl.java | 19 ++--- .../service/impl/ActTaskServiceImpl.java | 40 ++++------ .../service/impl/TestLeaveServiceImpl.java | 27 +++++++ 12 files changed, 191 insertions(+), 228 deletions(-) create mode 100644 ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/domain/event/ProcessEvent.java create mode 100644 ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/domain/event/ProcessTaskEvent.java delete mode 100644 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/annotation/FlowListenerAnnotation.java create mode 100644 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/flowable/handler/FlowProcessEventHandler.java delete mode 100644 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/flowable/strategy/FlowEventStrategy.java delete mode 100644 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/flowable/strategy/FlowProcessEventHandler.java delete mode 100644 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/flowable/strategy/FlowTaskEventHandler.java delete mode 100644 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/listener/TestCustomProcessHandler.java delete mode 100644 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/listener/TestCustomTaskHandler.java 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 new file mode 100644 index 000000000..44634238e --- /dev/null +++ b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/domain/event/ProcessEvent.java @@ -0,0 +1,49 @@ +package org.dromara.common.core.domain.event; + +import jakarta.servlet.http.HttpServletRequest; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; + +/** + * 总体流程监听 + * + * @author may + */ + +@Data +public class ProcessEvent implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + + + /** + * 流程定义key + */ + private String key; + + /** + * 业务id + */ + private String businessKey; + + /** + * 状态 + */ + private String status; + + /** + * 当为true时为申请人节点办理 + */ + private boolean submit; + + /** + * 请求体 + */ + private HttpServletRequest request; + + +} diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/domain/event/ProcessTaskEvent.java b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/domain/event/ProcessTaskEvent.java new file mode 100644 index 000000000..e4508407a --- /dev/null +++ b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/domain/event/ProcessTaskEvent.java @@ -0,0 +1,42 @@ +package org.dromara.common.core.domain.event; + +import jakarta.servlet.http.HttpServletRequest; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; + +/** + * 流程办理监听 + * + * @author may + */ + +@Data +public class ProcessTaskEvent implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + + /** + * 流程定义key与流程节点标识(拼接方式:流程定义key_流程节点) + */ + private String keyNode; + + /** + * 任务id + */ + private String taskId; + + /** + * 业务id + */ + private String businessKey; + + /** + * 请求体 + */ + private HttpServletRequest request; + +} diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/annotation/FlowListenerAnnotation.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/annotation/FlowListenerAnnotation.java deleted file mode 100644 index 5ea262d17..000000000 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/annotation/FlowListenerAnnotation.java +++ /dev/null @@ -1,27 +0,0 @@ -package org.dromara.workflow.annotation; - - -import java.lang.annotation.*; - -/** - * 流程任务监听注解 - * - * @author may - * @date 2023-12-27 - */ -@Target({ElementType.TYPE}) -@Retention(RetentionPolicy.RUNTIME) -@Documented -@Inherited -public @interface FlowListenerAnnotation { - - /** - * 流程定义key - */ - String processDefinitionKey(); - - /** - * 节点id - */ - String taskDefId() default ""; -} diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/flowable/handler/FlowProcessEventHandler.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/flowable/handler/FlowProcessEventHandler.java new file mode 100644 index 000000000..92314ac09 --- /dev/null +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/flowable/handler/FlowProcessEventHandler.java @@ -0,0 +1,49 @@ +package org.dromara.workflow.flowable.handler; + +import org.dromara.common.core.domain.event.ProcessEvent; +import org.dromara.common.core.domain.event.ProcessTaskEvent; +import org.dromara.common.core.utils.ServletUtils; +import org.dromara.common.core.utils.SpringUtils; +import org.springframework.stereotype.Component; + +/** + * 流程监听服务 + * + * @author may + * @date 2024-06-02 + */ +@Component +public class FlowProcessEventHandler { + + /** + * @param key 流程key + * @param businessKey 业务id + * @param status 状态 + * @param submit 当为true时为申请人节点办理 + */ + public void processHandler(String key, String businessKey, String status, boolean submit) { + ProcessEvent processEvent = new ProcessEvent(); + processEvent.setKey(key); + processEvent.setBusinessKey(businessKey); + processEvent.setStatus(status); + processEvent.setSubmit(submit); + processEvent.setRequest(ServletUtils.getRequest()); + SpringUtils.context().publishEvent(processEvent); + } + + /** + * 执行办理任务监听 + * + * @param keyNode 流程定义key与流程节点标识(拼接方式:流程定义key_流程节点) + * @param taskId 任务id + * @param businessKey 业务id + */ + public void processTaskHandler(String keyNode, String taskId, String businessKey) { + ProcessTaskEvent processTaskEvent = new ProcessTaskEvent(); + processTaskEvent.setKeyNode(keyNode); + processTaskEvent.setTaskId(taskId); + processTaskEvent.setBusinessKey(businessKey); + processTaskEvent.setRequest(ServletUtils.getRequest()); + SpringUtils.context().publishEvent(processTaskEvent); + } +} diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/flowable/strategy/FlowEventStrategy.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/flowable/strategy/FlowEventStrategy.java deleted file mode 100644 index 9da577633..000000000 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/flowable/strategy/FlowEventStrategy.java +++ /dev/null @@ -1,73 +0,0 @@ -package org.dromara.workflow.flowable.strategy; - -import org.dromara.common.core.utils.StringUtils; -import org.dromara.workflow.annotation.FlowListenerAnnotation; -import org.springframework.beans.BeansException; -import org.springframework.beans.factory.config.BeanPostProcessor; -import org.springframework.stereotype.Component; - -import java.util.HashMap; -import java.util.Map; - -/** - * 流程任务监听策略 - * - * @author may - * @date 2023-12-27 - */ -@Component -public class FlowEventStrategy implements BeanPostProcessor { - - private final Map flowTaskEventHandlers = new HashMap<>(); - private final Map flowProcessEventHandlers = new HashMap<>(); - - @Override - public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException { - if (bean instanceof FlowTaskEventHandler) { - FlowListenerAnnotation annotation = bean.getClass().getAnnotation(FlowListenerAnnotation.class); - if (null != annotation) { - if (StringUtils.isNotBlank(annotation.processDefinitionKey()) && StringUtils.isNotBlank(annotation.taskDefId())) { - String id = annotation.processDefinitionKey() + "_" + annotation.taskDefId(); - if (!flowTaskEventHandlers.containsKey(id)) { - flowTaskEventHandlers.put(id, (FlowTaskEventHandler) bean); - } - } - } - } - if (bean instanceof FlowProcessEventHandler) { - FlowListenerAnnotation annotation = bean.getClass().getAnnotation(FlowListenerAnnotation.class); - if (null != annotation) { - if (StringUtils.isNotBlank(annotation.processDefinitionKey()) && StringUtils.isBlank(annotation.taskDefId())) { - if (!flowProcessEventHandlers.containsKey(annotation.processDefinitionKey())) { - flowProcessEventHandlers.put(annotation.processDefinitionKey(), (FlowProcessEventHandler) bean); - } - } - } - } - return BeanPostProcessor.super.postProcessBeforeInitialization(bean, beanName); - } - - /** - * 获取可执行bean - * - * @param key key - */ - public FlowTaskEventHandler getTaskHandler(String key) { - if (!flowTaskEventHandlers.containsKey(key)) { - return null; - } - return flowTaskEventHandlers.get(key); - } - - /** - * 获取可执行bean - * - * @param key key - */ - public FlowProcessEventHandler getProcessHandler(String key) { - if (!flowProcessEventHandlers.containsKey(key)) { - return null; - } - return flowProcessEventHandlers.get(key); - } -} diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/flowable/strategy/FlowProcessEventHandler.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/flowable/strategy/FlowProcessEventHandler.java deleted file mode 100644 index 929e7d5b8..000000000 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/flowable/strategy/FlowProcessEventHandler.java +++ /dev/null @@ -1,20 +0,0 @@ -package org.dromara.workflow.flowable.strategy; - - -/** - * 总体流程监听(例如: 撤销 提交 退回 等) - * - * @author may - * @date 2023-12-27 - */ -public interface FlowProcessEventHandler { - - /** - * 执行办理任务监听 - * - * @param businessKey 业务id - * @param status 状态 - * @param submit 当为true时为申请人节点办理 - */ - void handleProcess(String businessKey, String status, boolean submit); -} diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/flowable/strategy/FlowTaskEventHandler.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/flowable/strategy/FlowTaskEventHandler.java deleted file mode 100644 index d2b06a735..000000000 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/flowable/strategy/FlowTaskEventHandler.java +++ /dev/null @@ -1,19 +0,0 @@ -package org.dromara.workflow.flowable.strategy; - - -/** - * 流程任务监听(例如: 节点的审批等) - * - * @author may - * @date 2023-12-27 - */ -public interface FlowTaskEventHandler { - - /** - * 执行办理任务监听 - * - * @param taskId 任务ID - * @param businessKey 业务id - */ - void handleTask(String taskId, String businessKey); -} diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/listener/TestCustomProcessHandler.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/listener/TestCustomProcessHandler.java deleted file mode 100644 index 29886d8d4..000000000 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/listener/TestCustomProcessHandler.java +++ /dev/null @@ -1,31 +0,0 @@ -package org.dromara.workflow.listener; - -import lombok.extern.slf4j.Slf4j; -import org.dromara.workflow.annotation.FlowListenerAnnotation; -import org.dromara.workflow.flowable.strategy.FlowProcessEventHandler; -import org.springframework.stereotype.Component; - -/** - * 自定义监听测试 - * - * @author may - * @date 2023-12-27 - */ -@Slf4j -@Component -@FlowListenerAnnotation(processDefinitionKey = "leave1") -public class TestCustomProcessHandler implements FlowProcessEventHandler { - - - /** - * 执行办理任务监听 - * - * @param businessKey 业务id - * @param status 状态 - * @param submit 当为true时为申请人节点办理 - */ - @Override - public void handleProcess(String businessKey, String status, boolean submit) { - log.info("业务ID:" + businessKey + ",状态:" + status); - } -} diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/listener/TestCustomTaskHandler.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/listener/TestCustomTaskHandler.java deleted file mode 100644 index d85286df7..000000000 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/listener/TestCustomTaskHandler.java +++ /dev/null @@ -1,23 +0,0 @@ -package org.dromara.workflow.listener; - -import lombok.extern.slf4j.Slf4j; -import org.dromara.workflow.annotation.FlowListenerAnnotation; -import org.dromara.workflow.flowable.strategy.FlowTaskEventHandler; -import org.springframework.stereotype.Component; - -/** - * 自定义监听测试 - * - * @author may - * @date 2023-12-27 - */ -@Slf4j -@Component -@FlowListenerAnnotation(processDefinitionKey = "leave1", taskDefId = "Activity_14633hx") -public class TestCustomTaskHandler implements FlowTaskEventHandler { - - @Override - public void handleTask(String taskId, String businessKey) { - log.info("任务ID:" + taskId + ",业务ID:" + businessKey); - } -} diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActProcessInstanceServiceImpl.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActProcessInstanceServiceImpl.java index f7a3db8d5..9937f7aac 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActProcessInstanceServiceImpl.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActProcessInstanceServiceImpl.java @@ -26,8 +26,7 @@ import org.dromara.workflow.domain.vo.*; import org.dromara.workflow.flowable.CustomDefaultProcessDiagramGenerator; import org.dromara.workflow.flowable.cmd.DeleteExecutionCmd; import org.dromara.workflow.flowable.cmd.ExecutionChildByExecutionIdCmd; -import org.dromara.workflow.flowable.strategy.FlowEventStrategy; -import org.dromara.workflow.flowable.strategy.FlowProcessEventHandler; +import org.dromara.workflow.flowable.handler.FlowProcessEventHandler; import org.dromara.workflow.service.IActHiProcinstService; import org.dromara.workflow.service.IActProcessInstanceService; import org.dromara.workflow.service.IWfNodeConfigService; @@ -75,9 +74,9 @@ public class ActProcessInstanceServiceImpl implements IActProcessInstanceService private final TaskService taskService; private final IActHiProcinstService actHiProcinstService; private final ManagementService managementService; - private final FlowEventStrategy flowEventStrategy; private final IWfTaskBackNodeService wfTaskBackNodeService; private final IWfNodeConfigService wfNodeConfigService; + private final FlowProcessEventHandler flowProcessEventHandler; @Value("${flowable.activity-font-name}") private String activityFontName; @@ -460,10 +459,9 @@ public class ActProcessInstanceServiceImpl implements IActProcessInstanceService BusinessStatusEnum.checkInvalidStatus(historicProcessInstance.getBusinessStatus()); runtimeService.updateBusinessStatus(processInstanceId, BusinessStatusEnum.INVALID.getStatus()); runtimeService.deleteProcessInstance(processInstanceId, deleteReason); - FlowProcessEventHandler processHandler = flowEventStrategy.getProcessHandler(historicProcessInstance.getProcessDefinitionKey()); - if (processHandler != null) { - processHandler.handleProcess(historicProcessInstance.getBusinessKey(), BusinessStatusEnum.INVALID.getStatus(), false); - } + //流程作废监听 + flowProcessEventHandler.processHandler(historicProcessInstance.getProcessDefinitionKey(), + historicProcessInstance.getBusinessKey(), BusinessStatusEnum.INVALID.getStatus(), false); return true; } catch (Exception e) { e.printStackTrace(); @@ -570,10 +568,9 @@ public class ActProcessInstanceServiceImpl implements IActProcessInstanceService managementService.executeCommand(deleteExecutionCmd); } runtimeService.updateBusinessStatus(processInstanceId, BusinessStatusEnum.CANCEL.getStatus()); - FlowProcessEventHandler processHandler = flowEventStrategy.getProcessHandler(processInstance.getProcessDefinitionKey()); - if (processHandler != null) { - processHandler.handleProcess(processInstance.getBusinessKey(), BusinessStatusEnum.CANCEL.getStatus(), false); - } + //流程作废监听 + flowProcessEventHandler.processHandler(processInstance.getProcessDefinitionKey(), + processInstance.getBusinessKey(), BusinessStatusEnum.CANCEL.getStatus(), false); return true; } catch (Exception e) { e.printStackTrace(); diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActTaskServiceImpl.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActTaskServiceImpl.java index 84a3749af..5e9a05099 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActTaskServiceImpl.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActTaskServiceImpl.java @@ -9,8 +9,10 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import lombok.RequiredArgsConstructor; import org.dromara.common.core.domain.dto.RoleDTO; import org.dromara.common.core.domain.dto.UserDTO; +import org.dromara.common.core.domain.event.ProcessTaskEvent; import org.dromara.common.core.exception.ServiceException; import org.dromara.common.core.service.UserService; +import org.dromara.common.core.utils.ServletUtils; import org.dromara.common.core.utils.StreamUtils; import org.dromara.common.core.utils.StringUtils; import org.dromara.common.mybatis.core.page.PageQuery; @@ -25,9 +27,7 @@ import org.dromara.workflow.domain.WfTaskBackNode; import org.dromara.workflow.domain.bo.*; import org.dromara.workflow.domain.vo.*; import org.dromara.workflow.flowable.cmd.*; -import org.dromara.workflow.flowable.strategy.FlowEventStrategy; -import org.dromara.workflow.flowable.strategy.FlowProcessEventHandler; -import org.dromara.workflow.flowable.strategy.FlowTaskEventHandler; +import org.dromara.workflow.flowable.handler.FlowProcessEventHandler; import org.dromara.workflow.mapper.ActHiTaskinstMapper; import org.dromara.workflow.mapper.ActTaskMapper; import org.dromara.workflow.service.IActTaskService; @@ -75,13 +75,13 @@ public class ActTaskServiceImpl implements IActTaskService { private final HistoryService historyService; private final IdentityService identityService; private final ManagementService managementService; - private final FlowEventStrategy flowEventStrategy; private final ActTaskMapper actTaskMapper; private final IWfTaskBackNodeService wfTaskBackNodeService; private final ActHiTaskinstMapper actHiTaskinstMapper; private final IWfNodeConfigService wfNodeConfigService; private final IWfDefinitionConfigService wfDefinitionConfigService; private final UserService userService; + private final FlowProcessEventHandler flowProcessEventHandler; /** * 启动任务 @@ -179,19 +179,15 @@ public class ActTaskServiceImpl implements IActTaskService { //附件上传 AttachmentCmd attachmentCmd = new AttachmentCmd(completeTaskBo.getFileId(), task.getId(), task.getProcessInstanceId()); managementService.executeCommand(attachmentCmd); - FlowProcessEventHandler processHandler = flowEventStrategy.getProcessHandler(processInstance.getProcessDefinitionKey()); String businessStatus = WorkflowUtils.getBusinessStatus(processInstance.getBusinessKey()); + //流程提交监听 if (BusinessStatusEnum.DRAFT.getStatus().equals(businessStatus) || BusinessStatusEnum.BACK.getStatus().equals(businessStatus) || BusinessStatusEnum.CANCEL.getStatus().equals(businessStatus)) { - if (processHandler != null) { - processHandler.handleProcess(processInstance.getBusinessKey(), businessStatus, true); - } + flowProcessEventHandler.processHandler(processInstance.getProcessDefinitionKey(), processInstance.getBusinessKey(), businessStatus, true); } runtimeService.updateBusinessStatus(task.getProcessInstanceId(), BusinessStatusEnum.WAITING.getStatus()); - String key = processInstance.getProcessDefinitionKey() + "_" + task.getTaskDefinitionKey(); - FlowTaskEventHandler taskHandler = flowEventStrategy.getTaskHandler(key); - if (taskHandler != null) { - taskHandler.handleTask(task.getId(), processInstance.getBusinessKey()); - } + //办理监听 + String keyNode = processInstance.getProcessDefinitionKey() + "_" + task.getTaskDefinitionKey(); + flowProcessEventHandler.processTaskHandler(keyNode, task.getId(), processInstance.getBusinessKey()); //办理意见 taskService.addComment(completeTaskBo.getTaskId(), task.getProcessInstanceId(), TaskStatusEnum.PASS.getStatus(), StringUtils.isBlank(completeTaskBo.getMessage()) ? "同意" : completeTaskBo.getMessage()); //办理任务 @@ -207,9 +203,8 @@ public class ActTaskServiceImpl implements IActTaskService { if (pi == null) { UpdateBusinessStatusCmd updateBusinessStatusCmd = new UpdateBusinessStatusCmd(task.getProcessInstanceId(), BusinessStatusEnum.FINISH.getStatus()); managementService.executeCommand(updateBusinessStatusCmd); - if (processHandler != null) { - processHandler.handleProcess(processInstance.getBusinessKey(), BusinessStatusEnum.FINISH.getStatus(), false); - } + flowProcessEventHandler.processHandler(processInstance.getProcessDefinitionKey(), processInstance.getBusinessKey(), + BusinessStatusEnum.FINISH.getStatus(), false); } else { List list = QueryUtils.taskQuery(task.getProcessInstanceId()).list(); for (Task t : list) { @@ -520,10 +515,9 @@ public class ActTaskServiceImpl implements IActTaskService { runtimeService.updateBusinessStatus(task.getProcessInstanceId(), BusinessStatusEnum.TERMINATION.getStatus()); runtimeService.deleteProcessInstance(task.getProcessInstanceId(), StrUtil.EMPTY); } - FlowProcessEventHandler processHandler = flowEventStrategy.getProcessHandler(historicProcessInstance.getProcessDefinitionKey()); - if (processHandler != null) { - processHandler.handleProcess(historicProcessInstance.getBusinessKey(), BusinessStatusEnum.TERMINATION.getStatus(), false); - } + //流程终止监听 + flowProcessEventHandler.processHandler(historicProcessInstance.getProcessDefinitionKey(), + historicProcessInstance.getBusinessKey(), BusinessStatusEnum.TERMINATION.getStatus(), false); return true; } catch (Exception e) { throw new ServiceException(e.getMessage()); @@ -721,10 +715,8 @@ public class ActTaskServiceImpl implements IActTaskService { WfTaskBackNode wfTaskBackNode = wfTaskBackNodeService.getListByInstanceIdAndNodeId(task.getProcessInstanceId(), backProcessBo.getTargetActivityId()); if (ObjectUtil.isNotNull(wfTaskBackNode) && wfTaskBackNode.getOrderNo() == 0) { runtimeService.updateBusinessStatus(processInstanceId, BusinessStatusEnum.BACK.getStatus()); - FlowProcessEventHandler processHandler = flowEventStrategy.getProcessHandler(processInstance.getProcessDefinitionKey()); - if (processHandler != null) { - processHandler.handleProcess(processInstance.getBusinessKey(), BusinessStatusEnum.BACK.getStatus(), false); - } + flowProcessEventHandler.processHandler(processInstance.getProcessDefinitionKey(), + processInstance.getBusinessKey(), BusinessStatusEnum.BACK.getStatus(), false); } //删除驳回后的流程节点 wfTaskBackNodeService.deleteBackTaskNode(processInstanceId, backProcessBo.getTargetActivityId()); 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 abb6473e0..d451b45e7 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 @@ -5,6 +5,9 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.dromara.common.core.domain.event.ProcessEvent; +import org.dromara.common.core.domain.event.ProcessTaskEvent; import org.dromara.common.core.service.WorkflowService; import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.core.utils.StreamUtils; @@ -17,6 +20,7 @@ import org.dromara.workflow.domain.bo.TestLeaveBo; import org.dromara.workflow.domain.vo.TestLeaveVo; import org.dromara.workflow.mapper.TestLeaveMapper; import org.dromara.workflow.service.ITestLeaveService; +import org.springframework.context.event.EventListener; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -31,6 +35,7 @@ import java.util.List; */ @RequiredArgsConstructor @Service +@Slf4j public class TestLeaveServiceImpl implements ITestLeaveService { private final TestLeaveMapper baseMapper; @@ -117,4 +122,26 @@ public class TestLeaveServiceImpl implements ITestLeaveService { workflowService.deleteRunAndHisInstance(idList); return baseMapper.deleteBatchIds(ids) > 0; } + + /** + * 总体流程监听(例如: 提交 退回 撤销 终止 作废等) + * + * @param processEvent 参数 + */ + @EventListener(condition = "#processEvent.key=='leave1'") + public void processHandler(ProcessEvent processEvent) { + log.info("当前任务执行了{}", processEvent.toString()); + } + + /** + * 执行办理任务监听 + * + * @param processTaskEvent 参数 + */ + @EventListener(condition = "#processTaskEvent.keyNode=='leave1_Activity_14633hx'") + public void processTaskHandler(ProcessTaskEvent processTaskEvent) { + log.info("当前任务执行了{}", processTaskEvent.toString()); + } + + }