Commit 645fd7624b8238ae251bb7f36acbeaf84b3dcc14
1 parent
9734eacf
增加 BpmUserTaskActivitiBehavior 自定义实现,为后续做自定义的任务分配机制做准备
Showing
9 changed files
with
144 additions
and
34 deletions
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/BpmActivitiConfiguration.java deleted
| 1 | -package cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti; | |
| 2 | - | |
| 3 | -import cn.iocoder.yudao.adminserver.modules.bpm.service.task.listener.BpmTackActivitiEventListener; | |
| 4 | -import org.activiti.spring.SpringProcessEngineConfiguration; | |
| 5 | -import org.activiti.spring.boot.ProcessEngineConfigurationConfigurer; | |
| 6 | -import org.springframework.context.annotation.Configuration; | |
| 7 | - | |
| 8 | -import javax.annotation.Resource; | |
| 9 | -import java.util.Collections; | |
| 10 | - | |
| 11 | -/** | |
| 12 | - * BPM 模块的 Activiti 配置类 | |
| 13 | - */ | |
| 14 | -@Configuration | |
| 15 | -public class BpmActivitiConfiguration implements ProcessEngineConfigurationConfigurer { | |
| 16 | - | |
| 17 | - @Resource | |
| 18 | - private BpmTackActivitiEventListener taskActivitiEventListener; | |
| 19 | - | |
| 20 | - @Override | |
| 21 | - public void configure(SpringProcessEngineConfiguration configuration) { | |
| 22 | - // 注册监听器,例如说 BpmActivitiEventListener | |
| 23 | - configuration.setEventListeners(Collections.singletonList(taskActivitiEventListener)); | |
| 24 | - } | |
| 25 | - | |
| 26 | -} |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/config/BpmActivitiConfiguration.java
0 → 100644
| 1 | +package cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti.config; | |
| 2 | + | |
| 3 | +import cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti.core.behavior.BpmActivityBehaviorFactory; | |
| 4 | +import cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti.core.listener.BpmTackActivitiEventListener; | |
| 5 | +import org.activiti.spring.boot.ProcessEngineConfigurationConfigurer; | |
| 6 | +import org.springframework.context.annotation.Bean; | |
| 7 | +import org.springframework.context.annotation.Configuration; | |
| 8 | + | |
| 9 | +import java.util.Collections; | |
| 10 | + | |
| 11 | +import static org.activiti.spring.boot.ProcessEngineAutoConfiguration.BEHAVIOR_FACTORY_MAPPING_CONFIGURER; | |
| 12 | + | |
| 13 | +/** | |
| 14 | + * BPM 模块的 Activiti 配置类 | |
| 15 | + */ | |
| 16 | +@Configuration | |
| 17 | +public class BpmActivitiConfiguration { | |
| 18 | + | |
| 19 | + /** | |
| 20 | + * BPM 模块的 ProcessEngineConfigurationConfigurer 实现类,主要设置各种监听器 | |
| 21 | + */ | |
| 22 | + @Bean | |
| 23 | + public ProcessEngineConfigurationConfigurer bpmProcessEngineConfigurationConfigurer( | |
| 24 | + BpmTackActivitiEventListener taskActivitiEventListener) { | |
| 25 | + return configuration -> { | |
| 26 | + // 注册监听器,例如说 BpmActivitiEventListener | |
| 27 | + configuration.setEventListeners(Collections.singletonList(taskActivitiEventListener)); | |
| 28 | + }; | |
| 29 | + } | |
| 30 | + | |
| 31 | + /** | |
| 32 | + * 用于设置自定义的 ActivityBehaviorFactory 实现的 ProcessEngineConfigurationConfigurer 实现类 | |
| 33 | + * | |
| 34 | + * 目的:覆盖 {@link org.activiti.spring.boot.ProcessEngineAutoConfiguration} 的 | |
| 35 | + * defaultActivityBehaviorFactoryMappingConfigurer 方法创建的 Bean | |
| 36 | + */ | |
| 37 | + @Bean(name = BEHAVIOR_FACTORY_MAPPING_CONFIGURER) | |
| 38 | + public ProcessEngineConfigurationConfigurer defaultActivityBehaviorFactoryMappingConfigurer( | |
| 39 | + BpmActivityBehaviorFactory bpmActivityBehaviorFactory) { | |
| 40 | + return configuration -> { | |
| 41 | + // 设置 ActivityBehaviorFactory 实现类,用于流程任务的审核人的自定义 | |
| 42 | + configuration.setActivityBehaviorFactory(bpmActivityBehaviorFactory); | |
| 43 | + }; | |
| 44 | + } | |
| 45 | + | |
| 46 | + @Bean | |
| 47 | + public BpmActivityBehaviorFactory bpmActivityBehaviorFactory() { | |
| 48 | + return new BpmActivityBehaviorFactory(); | |
| 49 | + } | |
| 50 | + | |
| 51 | +} | ... | ... |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/BpmActivityBehaviorFactory.java
0 → 100644
| 1 | +package cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti.core.behavior; | |
| 2 | + | |
| 3 | +import cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti.core.behavior.BpmUserTaskActivitiBehavior; | |
| 4 | +import lombok.Data; | |
| 5 | +import lombok.EqualsAndHashCode; | |
| 6 | +import lombok.ToString; | |
| 7 | +import org.activiti.bpmn.model.UserTask; | |
| 8 | +import org.activiti.engine.impl.bpmn.behavior.UserTaskActivityBehavior; | |
| 9 | +import org.activiti.engine.impl.bpmn.parser.factory.DefaultActivityBehaviorFactory; | |
| 10 | + | |
| 11 | +/** | |
| 12 | + * 自定义的 ActivityBehaviorFactory 实现类,目的如下: | |
| 13 | + * 1. 自定义 {@link #createUserTaskActivityBehavior(UserTask)}:实现自定义的流程任务的 assignee 负责人的分配 | |
| 14 | + * | |
| 15 | + * @author 芋道源码 | |
| 16 | + */ | |
| 17 | +@Data | |
| 18 | +@EqualsAndHashCode(callSuper = true) | |
| 19 | +@ToString(callSuper = true) | |
| 20 | +public class BpmActivityBehaviorFactory extends DefaultActivityBehaviorFactory { | |
| 21 | + | |
| 22 | + @Override | |
| 23 | + public UserTaskActivityBehavior createUserTaskActivityBehavior(UserTask userTask) { | |
| 24 | + return new BpmUserTaskActivitiBehavior(userTask); | |
| 25 | + } | |
| 26 | + | |
| 27 | + // TODO 芋艿:并行任务 ParallelMultiInstanceBehavior | |
| 28 | + | |
| 29 | + // TODO 芋艿:并行任务 SequentialMultiInstanceBehavior | |
| 30 | + | |
| 31 | +} | ... | ... |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/BpmUserTaskActivitiBehavior.java
0 → 100644
| 1 | +package cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti.core.behavior; | |
| 2 | + | |
| 3 | +import org.activiti.bpmn.model.UserTask; | |
| 4 | +import org.activiti.engine.delegate.DelegateExecution; | |
| 5 | +import org.activiti.engine.impl.bpmn.behavior.UserTaskActivityBehavior; | |
| 6 | +import org.activiti.engine.impl.el.ExpressionManager; | |
| 7 | +import org.activiti.engine.impl.persistence.entity.TaskEntity; | |
| 8 | +import org.activiti.engine.impl.persistence.entity.TaskEntityManager; | |
| 9 | + | |
| 10 | +import java.util.List; | |
| 11 | + | |
| 12 | +/** | |
| 13 | + * 自定义的流程任务的 assignee 负责人的分配 | |
| 14 | + * | |
| 15 | + * @author 芋道源码 | |
| 16 | + */ | |
| 17 | +public class BpmUserTaskActivitiBehavior extends UserTaskActivityBehavior { | |
| 18 | + | |
| 19 | + public BpmUserTaskActivitiBehavior(UserTask userTask) { | |
| 20 | + super(userTask); | |
| 21 | + } | |
| 22 | + | |
| 23 | + @Override | |
| 24 | + protected void handleAssignments(TaskEntityManager taskEntityManager, | |
| 25 | + String assignee, String owner, List<String> candidateUsers, List<String> candidateGroups, | |
| 26 | + TaskEntity task, ExpressionManager expressionManager, DelegateExecution execution) { | |
| 27 | + System.out.println(""); | |
| 28 | + taskEntityManager.changeTaskAssignee(task, "1"); | |
| 29 | + } | |
| 30 | + | |
| 31 | +} | ... | ... |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/listener/BpmProcessInstanceEventListener.java renamed to yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/listener/BpmProcessInstanceEventListener.java
| 1 | -package cn.iocoder.yudao.adminserver.modules.bpm.service.task.listener; | |
| 1 | +package cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti.core.listener; | |
| 2 | 2 | |
| 3 | 3 | import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.task.BpmProcessInstanceExtDO; |
| 4 | 4 | import cn.iocoder.yudao.adminserver.modules.bpm.service.task.BpmProcessInstanceService; | ... | ... |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/listener/BpmTackActivitiEventListener.java renamed to yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/listener/BpmTackActivitiEventListener.java
| 1 | -package cn.iocoder.yudao.adminserver.modules.bpm.service.task.listener; | |
| 1 | +package cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti.core.listener; | |
| 2 | 2 | |
| 3 | 3 | import cn.hutool.core.util.StrUtil; |
| 4 | 4 | import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.BpmProcessDefinitionService; | ... | ... |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/listener/BpmTaskEventListener.java renamed to yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/listener/BpmTaskEventListener.java
| 1 | -package cn.iocoder.yudao.adminserver.modules.bpm.service.task.listener; | |
| 1 | +package cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti.core.listener; | |
| 2 | 2 | |
| 3 | 3 | import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.task.BpmTaskExtDO; |
| 4 | 4 | import cn.iocoder.yudao.adminserver.modules.bpm.service.task.BpmTaskService; |
| 5 | +import org.activiti.api.model.shared.event.RuntimeEvent; | |
| 6 | +import org.activiti.api.process.model.ProcessInstance; | |
| 7 | +import org.activiti.api.process.model.events.ProcessRuntimeEvent; | |
| 5 | 8 | import org.activiti.api.task.model.Task; |
| 6 | 9 | import org.activiti.api.task.model.events.TaskRuntimeEvent; |
| 7 | 10 | import org.activiti.api.task.runtime.events.listener.TaskEventListener; |
| 11 | +import org.activiti.api.task.runtime.events.listener.TaskRuntimeEventListener; | |
| 8 | 12 | import org.springframework.context.annotation.Lazy; |
| 9 | 13 | import org.springframework.stereotype.Component; |
| 10 | 14 | |
| ... | ... | @@ -16,15 +20,22 @@ import javax.annotation.Resource; |
| 16 | 20 | * @author 芋道源码 |
| 17 | 21 | */ |
| 18 | 22 | @Component |
| 19 | -public class BpmTaskEventListener<T extends TaskRuntimeEvent<? extends Task>> | |
| 20 | - implements TaskEventListener<T> { | |
| 23 | +public class BpmTaskEventListener<T extends RuntimeEvent<?, ?>> | |
| 24 | + implements TaskRuntimeEventListener<T> { | |
| 21 | 25 | |
| 22 | 26 | @Resource |
| 23 | 27 | @Lazy // 解决循环依赖 |
| 24 | 28 | private BpmTaskService taskService; |
| 25 | 29 | |
| 26 | 30 | @Override |
| 27 | - public void onEvent(T event) { | |
| 31 | + @SuppressWarnings("unchecked") | |
| 32 | + public void onEvent(T rawEvent) { | |
| 33 | + // 由于 TaskRuntimeEventListener 无法保证只监听 TaskRuntimeEvent 事件,所以通过这样的方式 | |
| 34 | + if (!(rawEvent instanceof TaskRuntimeEvent)) { | |
| 35 | + return; | |
| 36 | + } | |
| 37 | + TaskRuntimeEvent<Task> event = (TaskRuntimeEvent<Task>) rawEvent; | |
| 38 | + | |
| 28 | 39 | // 创建时,插入拓展表 |
| 29 | 40 | if (event.getEventType() == TaskRuntimeEvent.TaskEvents.TASK_CREATED) { |
| 30 | 41 | taskService.createTaskExt(event.getEntity()); | ... | ... |
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; |
| 15 | 15 | import cn.iocoder.yudao.framework.common.util.object.PageUtils; |
| 16 | 16 | import cn.iocoder.yudao.framework.common.util.validation.ValidationUtils; |
| 17 | 17 | import lombok.extern.slf4j.Slf4j; |
| 18 | +import org.activiti.bpmn.converter.BpmnXMLConverter; | |
| 19 | +import org.activiti.bpmn.model.BpmnModel; | |
| 18 | 20 | import org.activiti.engine.RepositoryService; |
| 19 | 21 | import org.activiti.engine.impl.persistence.entity.SuspensionState; |
| 22 | +import org.activiti.engine.impl.util.io.StringStreamSource; | |
| 20 | 23 | import org.activiti.engine.repository.Deployment; |
| 21 | 24 | import org.activiti.engine.repository.Model; |
| 22 | 25 | import org.activiti.engine.repository.ModelQuery; |
| ... | ... | @@ -27,6 +30,8 @@ import org.springframework.util.ObjectUtils; |
| 27 | 30 | import org.springframework.validation.annotation.Validated; |
| 28 | 31 | |
| 29 | 32 | import javax.annotation.Resource; |
| 33 | +import javax.xml.stream.XMLInputFactory; | |
| 34 | +import javax.xml.stream.XMLStreamReader; | |
| 30 | 35 | import java.util.HashSet; |
| 31 | 36 | import java.util.List; |
| 32 | 37 | import java.util.Map; |
| ... | ... | @@ -211,4 +216,11 @@ public class BpmModelServiceImpl implements BpmModelService { |
| 211 | 216 | } |
| 212 | 217 | } |
| 213 | 218 | |
| 219 | +// public static void main(String[] args) { | |
| 220 | +// // 创建转换对象 | |
| 221 | +// BpmnXMLConverter converter = new BpmnXMLConverter(); | |
| 222 | +// BpmnModel bpmnModel = converter.convertToBpmnModel(new StringStreamSource(""), true, true); | |
| 223 | +// bpmnModel.getProcesses() | |
| 224 | +// } | |
| 225 | + | |
| 214 | 226 | } | ... | ... |
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 |
| 87 | 87 | runtimeService.setProcessInstanceName(instance.getId(), definition.getName()); |
| 88 | 88 | |
| 89 | 89 | // TODO 芋艿:临时使用, 保证分配 |
| 90 | - List<Task> tasks = taskService.getTasksByProcessInstanceId(instance.getId()); | |
| 91 | - tasks.forEach(task -> taskService.updateTaskAssign(task.getId(), userId)); | |
| 90 | +// List<Task> tasks = taskService.getTasksByProcessInstanceId(instance.getId()); | |
| 91 | +// tasks.forEach(task -> taskService.updateTaskAssign(task.getId(), userId)); | |
| 92 | 92 | |
| 93 | 93 | // 添加初始的评论 TODO 芋艿:在思考下 |
| 94 | 94 | // Task task = taskService.createTaskQuery().processInstanceId(instance.getId()).singleResult(); | ... | ... |