From 645fd7624b8238ae251bb7f36acbeaf84b3dcc14 Mon Sep 17 00:00:00 2001 From: YunaiV Date: Mon, 10 Jan 2022 21:02:13 +0800 Subject: [PATCH] 增加 BpmUserTaskActivitiBehavior 自定义实现,为后续做自定义的任务分配机制做准备 --- yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/BpmActivitiConfiguration.java | 26 -------------------------- yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/config/BpmActivitiConfiguration.java | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/BpmActivityBehaviorFactory.java | 31 +++++++++++++++++++++++++++++++ yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/BpmUserTaskActivitiBehavior.java | 31 +++++++++++++++++++++++++++++++ yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/listener/BpmProcessInstanceEventListener.java | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/listener/BpmTackActivitiEventListener.java | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++++ yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/listener/BpmTaskEventListener.java | 60 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/model/impl/BpmModelServiceImpl.java | 12 ++++++++++++ yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/impl/BpmProcessInstanceServiceImpl.java | 4 ++-- yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/listener/BpmProcessInstanceEventListener.java | 58 ---------------------------------------------------------- yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/listener/BpmTackActivitiEventListener.java | 53 ----------------------------------------------------- yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/listener/BpmTaskEventListener.java | 49 ------------------------------------------------- 12 files changed, 298 insertions(+), 188 deletions(-) delete mode 100644 yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/BpmActivitiConfiguration.java create mode 100644 yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/config/BpmActivitiConfiguration.java create mode 100644 yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/BpmActivityBehaviorFactory.java create mode 100644 yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/BpmUserTaskActivitiBehavior.java create mode 100644 yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/listener/BpmProcessInstanceEventListener.java create mode 100644 yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/listener/BpmTackActivitiEventListener.java create mode 100644 yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/listener/BpmTaskEventListener.java delete mode 100644 yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/listener/BpmProcessInstanceEventListener.java delete mode 100644 yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/listener/BpmTackActivitiEventListener.java delete mode 100644 yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/listener/BpmTaskEventListener.java diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/BpmActivitiConfiguration.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/BpmActivitiConfiguration.java deleted file mode 100644 index 6101d2d..0000000 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/BpmActivitiConfiguration.java +++ /dev/null @@ -1,26 +0,0 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti; - -import cn.iocoder.yudao.adminserver.modules.bpm.service.task.listener.BpmTackActivitiEventListener; -import org.activiti.spring.SpringProcessEngineConfiguration; -import org.activiti.spring.boot.ProcessEngineConfigurationConfigurer; -import org.springframework.context.annotation.Configuration; - -import javax.annotation.Resource; -import java.util.Collections; - -/** - * BPM 模块的 Activiti 配置类 - */ -@Configuration -public class BpmActivitiConfiguration implements ProcessEngineConfigurationConfigurer { - - @Resource - private BpmTackActivitiEventListener taskActivitiEventListener; - - @Override - public void configure(SpringProcessEngineConfiguration configuration) { - // 注册监听器,例如说 BpmActivitiEventListener - configuration.setEventListeners(Collections.singletonList(taskActivitiEventListener)); - } - -} diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/config/BpmActivitiConfiguration.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/config/BpmActivitiConfiguration.java new file mode 100644 index 0000000..9a02efc --- /dev/null +++ b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/config/BpmActivitiConfiguration.java @@ -0,0 +1,51 @@ +package cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti.config; + +import cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti.core.behavior.BpmActivityBehaviorFactory; +import cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti.core.listener.BpmTackActivitiEventListener; +import org.activiti.spring.boot.ProcessEngineConfigurationConfigurer; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import java.util.Collections; + +import static org.activiti.spring.boot.ProcessEngineAutoConfiguration.BEHAVIOR_FACTORY_MAPPING_CONFIGURER; + +/** + * BPM 模块的 Activiti 配置类 + */ +@Configuration +public class BpmActivitiConfiguration { + + /** + * BPM 模块的 ProcessEngineConfigurationConfigurer 实现类,主要设置各种监听器 + */ + @Bean + public ProcessEngineConfigurationConfigurer bpmProcessEngineConfigurationConfigurer( + BpmTackActivitiEventListener taskActivitiEventListener) { + return configuration -> { + // 注册监听器,例如说 BpmActivitiEventListener + configuration.setEventListeners(Collections.singletonList(taskActivitiEventListener)); + }; + } + + /** + * 用于设置自定义的 ActivityBehaviorFactory 实现的 ProcessEngineConfigurationConfigurer 实现类 + * + * 目的:覆盖 {@link org.activiti.spring.boot.ProcessEngineAutoConfiguration} 的 + * defaultActivityBehaviorFactoryMappingConfigurer 方法创建的 Bean + */ + @Bean(name = BEHAVIOR_FACTORY_MAPPING_CONFIGURER) + public ProcessEngineConfigurationConfigurer defaultActivityBehaviorFactoryMappingConfigurer( + BpmActivityBehaviorFactory bpmActivityBehaviorFactory) { + return configuration -> { + // 设置 ActivityBehaviorFactory 实现类,用于流程任务的审核人的自定义 + configuration.setActivityBehaviorFactory(bpmActivityBehaviorFactory); + }; + } + + @Bean + public BpmActivityBehaviorFactory bpmActivityBehaviorFactory() { + return new BpmActivityBehaviorFactory(); + } + +} diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/BpmActivityBehaviorFactory.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/BpmActivityBehaviorFactory.java new file mode 100644 index 0000000..bbf6528 --- /dev/null +++ b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/BpmActivityBehaviorFactory.java @@ -0,0 +1,31 @@ +package cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti.core.behavior; + +import cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti.core.behavior.BpmUserTaskActivitiBehavior; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; +import org.activiti.bpmn.model.UserTask; +import org.activiti.engine.impl.bpmn.behavior.UserTaskActivityBehavior; +import org.activiti.engine.impl.bpmn.parser.factory.DefaultActivityBehaviorFactory; + +/** + * 自定义的 ActivityBehaviorFactory 实现类,目的如下: + * 1. 自定义 {@link #createUserTaskActivityBehavior(UserTask)}:实现自定义的流程任务的 assignee 负责人的分配 + * + * @author 芋道源码 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class BpmActivityBehaviorFactory extends DefaultActivityBehaviorFactory { + + @Override + public UserTaskActivityBehavior createUserTaskActivityBehavior(UserTask userTask) { + return new BpmUserTaskActivitiBehavior(userTask); + } + + // TODO 芋艿:并行任务 ParallelMultiInstanceBehavior + + // TODO 芋艿:并行任务 SequentialMultiInstanceBehavior + +} diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/BpmUserTaskActivitiBehavior.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/BpmUserTaskActivitiBehavior.java new file mode 100644 index 0000000..e66b4b3 --- /dev/null +++ b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/BpmUserTaskActivitiBehavior.java @@ -0,0 +1,31 @@ +package cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti.core.behavior; + +import org.activiti.bpmn.model.UserTask; +import org.activiti.engine.delegate.DelegateExecution; +import org.activiti.engine.impl.bpmn.behavior.UserTaskActivityBehavior; +import org.activiti.engine.impl.el.ExpressionManager; +import org.activiti.engine.impl.persistence.entity.TaskEntity; +import org.activiti.engine.impl.persistence.entity.TaskEntityManager; + +import java.util.List; + +/** + * 自定义的流程任务的 assignee 负责人的分配 + * + * @author 芋道源码 + */ +public class BpmUserTaskActivitiBehavior extends UserTaskActivityBehavior { + + public BpmUserTaskActivitiBehavior(UserTask userTask) { + super(userTask); + } + + @Override + protected void handleAssignments(TaskEntityManager taskEntityManager, + String assignee, String owner, List candidateUsers, List candidateGroups, + TaskEntity task, ExpressionManager expressionManager, DelegateExecution execution) { + System.out.println(""); + taskEntityManager.changeTaskAssignee(task, "1"); + } + +} diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/listener/BpmProcessInstanceEventListener.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/listener/BpmProcessInstanceEventListener.java new file mode 100644 index 0000000..0fe462b --- /dev/null +++ b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/listener/BpmProcessInstanceEventListener.java @@ -0,0 +1,58 @@ +package cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti.core.listener; + +import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.task.BpmProcessInstanceExtDO; +import cn.iocoder.yudao.adminserver.modules.bpm.service.task.BpmProcessInstanceService; +import org.activiti.api.model.shared.event.RuntimeEvent; +import org.activiti.api.process.model.ProcessInstance; +import org.activiti.api.process.model.events.ProcessRuntimeEvent; +import org.activiti.api.process.runtime.events.listener.ProcessEventListener; +import org.activiti.api.process.runtime.events.listener.ProcessRuntimeEventListener; +import org.activiti.api.task.model.events.TaskRuntimeEvent; +import org.springframework.context.annotation.Lazy; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; + +/** + * 监听 {@link ProcessInstance} 的开始与完成,创建与更新对应的 {@link BpmProcessInstanceExtDO} 记录 + * + * @author 芋道源码 + */ +@Component +public class BpmProcessInstanceEventListener> + implements ProcessRuntimeEventListener { + + @Resource + @Lazy // 解决循环依赖 + private BpmProcessInstanceService processInstanceService; + + @Override + @SuppressWarnings("unchecked") + public void onEvent(T rawEvent) { + // 由于 ProcessRuntimeEventListener 无法保证只监听 ProcessRuntimeEvent 事件,所以通过这样的方式 + if (!(rawEvent instanceof ProcessRuntimeEvent)) { + return; + } + ProcessRuntimeEvent event = (ProcessRuntimeEvent) rawEvent; + + // 创建时,插入拓展表 + if (event.getEventType() == ProcessRuntimeEvent.ProcessEvents.PROCESS_CREATED) { + processInstanceService.createProcessInstanceExt(event.getEntity()); + return; + } + // 取消时,更新拓展表为取消 + if (event.getEventType() == ProcessRuntimeEvent.ProcessEvents.PROCESS_CANCELLED) { + processInstanceService.updateProcessInstanceExtCancel(event.getEntity()); + return; + } + // 完成时,更新拓展表为已完成 + if (event.getEventType() == ProcessRuntimeEvent.ProcessEvents.PROCESS_COMPLETED) { + processInstanceService.updateProcessInstanceExtComplete(event.getEntity()); + return; + } + + // 其它事件,进行更新拓展表 + processInstanceService.updateProcessInstanceExt(event.getEntity()); + } + +} diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/listener/BpmTackActivitiEventListener.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/listener/BpmTackActivitiEventListener.java new file mode 100644 index 0000000..307263e --- /dev/null +++ b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/listener/BpmTackActivitiEventListener.java @@ -0,0 +1,53 @@ +package cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti.core.listener; + +import cn.hutool.core.util.StrUtil; +import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.BpmProcessDefinitionService; +import org.activiti.api.process.runtime.events.listener.ProcessRuntimeEventListener; +import org.activiti.api.task.runtime.events.listener.TaskEventListener; +import org.activiti.engine.delegate.event.ActivitiEvent; +import org.activiti.engine.delegate.event.ActivitiEventListener; +import org.activiti.engine.delegate.event.ActivitiEventType; +import org.activiti.engine.delegate.event.impl.ActivitiEntityEventImpl; +import org.activiti.engine.impl.persistence.entity.TaskEntity; +import org.activiti.engine.repository.ProcessDefinition; +import org.springframework.context.annotation.Lazy; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; + +/** + * 监听 {@link TaskEntity} 相关的事件,设置相关属性。 + * 目的:解决 {@link TaskEventListener} 无法解决的场景 + * + * @author 芋道源码 + */ +@Component +public class BpmTackActivitiEventListener implements ActivitiEventListener { + + @Resource + @Lazy // 解决循环依赖 + private BpmProcessDefinitionService processDefinitionService; + + @Override + public void onEvent(ActivitiEvent event) { + // Task 创建时,设置其分类,解决 TaskService 未提供 name 的设置方法 + if (ActivitiEventType.TASK_CREATED == event.getType()) { + TaskEntity task = ((TaskEntity) ((ActivitiEntityEventImpl) event).getEntity()); + if (StrUtil.isNotEmpty(task.getCategory())) { + return; + } + // 设置 name + ProcessDefinition processDefinition = processDefinitionService.getProcessDefinition2(task.getProcessDefinitionId()); + if (processDefinition == null) { + return; + } + task.setCategory(processDefinition.getCategory()); + } + } + + @Override + public boolean isFailOnException() { + return true; + } + +} diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/listener/BpmTaskEventListener.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/listener/BpmTaskEventListener.java new file mode 100644 index 0000000..241782a --- /dev/null +++ b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/listener/BpmTaskEventListener.java @@ -0,0 +1,60 @@ +package cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti.core.listener; + +import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.task.BpmTaskExtDO; +import cn.iocoder.yudao.adminserver.modules.bpm.service.task.BpmTaskService; +import org.activiti.api.model.shared.event.RuntimeEvent; +import org.activiti.api.process.model.ProcessInstance; +import org.activiti.api.process.model.events.ProcessRuntimeEvent; +import org.activiti.api.task.model.Task; +import org.activiti.api.task.model.events.TaskRuntimeEvent; +import org.activiti.api.task.runtime.events.listener.TaskEventListener; +import org.activiti.api.task.runtime.events.listener.TaskRuntimeEventListener; +import org.springframework.context.annotation.Lazy; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; + +/** + * 监听 {@link Task} 的开始与完成,创建与更新对应的 {@link BpmTaskExtDO} 记录 + * + * @author 芋道源码 + */ +@Component +public class BpmTaskEventListener> + implements TaskRuntimeEventListener { + + @Resource + @Lazy // 解决循环依赖 + private BpmTaskService taskService; + + @Override + @SuppressWarnings("unchecked") + public void onEvent(T rawEvent) { + // 由于 TaskRuntimeEventListener 无法保证只监听 TaskRuntimeEvent 事件,所以通过这样的方式 + if (!(rawEvent instanceof TaskRuntimeEvent)) { + return; + } + TaskRuntimeEvent event = (TaskRuntimeEvent) rawEvent; + + // 创建时,插入拓展表 + if (event.getEventType() == TaskRuntimeEvent.TaskEvents.TASK_CREATED) { + taskService.createTaskExt(event.getEntity()); + return; + } + + // 取消时,更新拓展表为取消 + if (event.getEventType() == TaskRuntimeEvent.TaskEvents.TASK_CANCELLED) { + taskService.updateTaskExtCancel(event.getEntity()); + return; + } + // 完成时,更新拓展表为已完成。要注意,在调用 delete ProcessInstance 才会触发该逻辑 + if (event.getEventType() == TaskRuntimeEvent.TaskEvents.TASK_COMPLETED) { + taskService.updateTaskExtComplete(event.getEntity()); + return; + } + + // 其它事件,进行更新拓展表 + taskService.updateTaskExt(event.getEntity()); + } + +} diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/model/impl/BpmModelServiceImpl.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/model/impl/BpmModelServiceImpl.java index 29b72ef..1900457 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/model/impl/BpmModelServiceImpl.java +++ b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/model/impl/BpmModelServiceImpl.java @@ -15,8 +15,11 @@ import cn.iocoder.yudao.framework.common.util.json.JsonUtils; import cn.iocoder.yudao.framework.common.util.object.PageUtils; import cn.iocoder.yudao.framework.common.util.validation.ValidationUtils; import lombok.extern.slf4j.Slf4j; +import org.activiti.bpmn.converter.BpmnXMLConverter; +import org.activiti.bpmn.model.BpmnModel; import org.activiti.engine.RepositoryService; import org.activiti.engine.impl.persistence.entity.SuspensionState; +import org.activiti.engine.impl.util.io.StringStreamSource; import org.activiti.engine.repository.Deployment; import org.activiti.engine.repository.Model; import org.activiti.engine.repository.ModelQuery; @@ -27,6 +30,8 @@ import org.springframework.util.ObjectUtils; import org.springframework.validation.annotation.Validated; import javax.annotation.Resource; +import javax.xml.stream.XMLInputFactory; +import javax.xml.stream.XMLStreamReader; import java.util.HashSet; import java.util.List; import java.util.Map; @@ -211,4 +216,11 @@ public class BpmModelServiceImpl implements BpmModelService { } } +// public static void main(String[] args) { +// // 创建转换对象 +// BpmnXMLConverter converter = new BpmnXMLConverter(); +// BpmnModel bpmnModel = converter.convertToBpmnModel(new StringStreamSource(""), true, true); +// bpmnModel.getProcesses() +// } + } diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/impl/BpmProcessInstanceServiceImpl.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/impl/BpmProcessInstanceServiceImpl.java index 6f00bf5..e738da0 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/impl/BpmProcessInstanceServiceImpl.java +++ b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/impl/BpmProcessInstanceServiceImpl.java @@ -87,8 +87,8 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService runtimeService.setProcessInstanceName(instance.getId(), definition.getName()); // TODO 芋艿:临时使用, 保证分配 - List tasks = taskService.getTasksByProcessInstanceId(instance.getId()); - tasks.forEach(task -> taskService.updateTaskAssign(task.getId(), userId)); +// List tasks = taskService.getTasksByProcessInstanceId(instance.getId()); +// tasks.forEach(task -> taskService.updateTaskAssign(task.getId(), userId)); // 添加初始的评论 TODO 芋艿:在思考下 // Task task = taskService.createTaskQuery().processInstanceId(instance.getId()).singleResult(); diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/listener/BpmProcessInstanceEventListener.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/listener/BpmProcessInstanceEventListener.java deleted file mode 100644 index 3b1268a..0000000 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/listener/BpmProcessInstanceEventListener.java +++ /dev/null @@ -1,58 +0,0 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.service.task.listener; - -import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.task.BpmProcessInstanceExtDO; -import cn.iocoder.yudao.adminserver.modules.bpm.service.task.BpmProcessInstanceService; -import org.activiti.api.model.shared.event.RuntimeEvent; -import org.activiti.api.process.model.ProcessInstance; -import org.activiti.api.process.model.events.ProcessRuntimeEvent; -import org.activiti.api.process.runtime.events.listener.ProcessEventListener; -import org.activiti.api.process.runtime.events.listener.ProcessRuntimeEventListener; -import org.activiti.api.task.model.events.TaskRuntimeEvent; -import org.springframework.context.annotation.Lazy; -import org.springframework.stereotype.Component; - -import javax.annotation.Resource; - -/** - * 监听 {@link ProcessInstance} 的开始与完成,创建与更新对应的 {@link BpmProcessInstanceExtDO} 记录 - * - * @author 芋道源码 - */ -@Component -public class BpmProcessInstanceEventListener> - implements ProcessRuntimeEventListener { - - @Resource - @Lazy // 解决循环依赖 - private BpmProcessInstanceService processInstanceService; - - @Override - @SuppressWarnings("unchecked") - public void onEvent(T rawEvent) { - // 由于 ProcessRuntimeEventListener 无法保证只监听 ProcessRuntimeEvent 事件,所以通过这样的方式 - if (!(rawEvent instanceof ProcessRuntimeEvent)) { - return; - } - ProcessRuntimeEvent event = (ProcessRuntimeEvent) rawEvent; - - // 创建时,插入拓展表 - if (event.getEventType() == ProcessRuntimeEvent.ProcessEvents.PROCESS_CREATED) { - processInstanceService.createProcessInstanceExt(event.getEntity()); - return; - } - // 取消时,更新拓展表为取消 - if (event.getEventType() == ProcessRuntimeEvent.ProcessEvents.PROCESS_CANCELLED) { - processInstanceService.updateProcessInstanceExtCancel(event.getEntity()); - return; - } - // 完成时,更新拓展表为已完成 - if (event.getEventType() == ProcessRuntimeEvent.ProcessEvents.PROCESS_COMPLETED) { - processInstanceService.updateProcessInstanceExtComplete(event.getEntity()); - return; - } - - // 其它事件,进行更新拓展表 - processInstanceService.updateProcessInstanceExt(event.getEntity()); - } - -} diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/listener/BpmTackActivitiEventListener.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/listener/BpmTackActivitiEventListener.java deleted file mode 100644 index de46ebc..0000000 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/listener/BpmTackActivitiEventListener.java +++ /dev/null @@ -1,53 +0,0 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.service.task.listener; - -import cn.hutool.core.util.StrUtil; -import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.BpmProcessDefinitionService; -import org.activiti.api.process.runtime.events.listener.ProcessRuntimeEventListener; -import org.activiti.api.task.runtime.events.listener.TaskEventListener; -import org.activiti.engine.delegate.event.ActivitiEvent; -import org.activiti.engine.delegate.event.ActivitiEventListener; -import org.activiti.engine.delegate.event.ActivitiEventType; -import org.activiti.engine.delegate.event.impl.ActivitiEntityEventImpl; -import org.activiti.engine.impl.persistence.entity.TaskEntity; -import org.activiti.engine.repository.ProcessDefinition; -import org.springframework.context.annotation.Lazy; -import org.springframework.stereotype.Component; - -import javax.annotation.Resource; - -/** - * 监听 {@link TaskEntity} 相关的事件,设置相关属性。 - * 目的:解决 {@link TaskEventListener} 无法解决的场景 - * - * @author 芋道源码 - */ -@Component -public class BpmTackActivitiEventListener implements ActivitiEventListener { - - @Resource - @Lazy // 解决循环依赖 - private BpmProcessDefinitionService processDefinitionService; - - @Override - public void onEvent(ActivitiEvent event) { - // Task 创建时,设置其分类,解决 TaskService 未提供 name 的设置方法 - if (ActivitiEventType.TASK_CREATED == event.getType()) { - TaskEntity task = ((TaskEntity) ((ActivitiEntityEventImpl) event).getEntity()); - if (StrUtil.isNotEmpty(task.getCategory())) { - return; - } - // 设置 name - ProcessDefinition processDefinition = processDefinitionService.getProcessDefinition2(task.getProcessDefinitionId()); - if (processDefinition == null) { - return; - } - task.setCategory(processDefinition.getCategory()); - } - } - - @Override - public boolean isFailOnException() { - return true; - } - -} diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/listener/BpmTaskEventListener.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/listener/BpmTaskEventListener.java deleted file mode 100644 index cc3b665..0000000 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/listener/BpmTaskEventListener.java +++ /dev/null @@ -1,49 +0,0 @@ -package cn.iocoder.yudao.adminserver.modules.bpm.service.task.listener; - -import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.task.BpmTaskExtDO; -import cn.iocoder.yudao.adminserver.modules.bpm.service.task.BpmTaskService; -import org.activiti.api.task.model.Task; -import org.activiti.api.task.model.events.TaskRuntimeEvent; -import org.activiti.api.task.runtime.events.listener.TaskEventListener; -import org.springframework.context.annotation.Lazy; -import org.springframework.stereotype.Component; - -import javax.annotation.Resource; - -/** - * 监听 {@link Task} 的开始与完成,创建与更新对应的 {@link BpmTaskExtDO} 记录 - * - * @author 芋道源码 - */ -@Component -public class BpmTaskEventListener> - implements TaskEventListener { - - @Resource - @Lazy // 解决循环依赖 - private BpmTaskService taskService; - - @Override - public void onEvent(T event) { - // 创建时,插入拓展表 - if (event.getEventType() == TaskRuntimeEvent.TaskEvents.TASK_CREATED) { - taskService.createTaskExt(event.getEntity()); - return; - } - - // 取消时,更新拓展表为取消 - if (event.getEventType() == TaskRuntimeEvent.TaskEvents.TASK_CANCELLED) { - taskService.updateTaskExtCancel(event.getEntity()); - return; - } - // 完成时,更新拓展表为已完成。要注意,在调用 delete ProcessInstance 才会触发该逻辑 - if (event.getEventType() == TaskRuntimeEvent.TaskEvents.TASK_COMPLETED) { - taskService.updateTaskExtComplete(event.getEntity()); - return; - } - - // 其它事件,进行更新拓展表 - taskService.updateTaskExt(event.getEntity()); - } - -} -- libgit2 0.21.4