Commit abe161669c501424e17190cc6b3f251898f1b508
1 parent
9860a7d5
修复 BPM Task 的 category 设置问题
Showing
8 changed files
with
83 additions
and
38 deletions
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/BpmActivitiConfiguration.java
| 1 | 1 | package cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti; |
| 2 | 2 | |
| 3 | +import cn.iocoder.yudao.adminserver.modules.bpm.service.task.listener.BpmTackActivitiEventListener; | |
| 3 | 4 | import org.activiti.spring.SpringProcessEngineConfiguration; |
| 4 | 5 | import org.activiti.spring.boot.ProcessEngineConfigurationConfigurer; |
| 5 | 6 | import org.springframework.context.annotation.Configuration; |
| 6 | 7 | |
| 8 | +import javax.annotation.Resource; | |
| 9 | +import java.util.Collections; | |
| 10 | + | |
| 7 | 11 | /** |
| 8 | 12 | * BPM 模块的 Activiti 配置类 |
| 9 | 13 | */ |
| 10 | 14 | @Configuration |
| 11 | 15 | public class BpmActivitiConfiguration implements ProcessEngineConfigurationConfigurer { |
| 12 | 16 | |
| 17 | + @Resource | |
| 18 | + private BpmTackActivitiEventListener taskActivitiEventListener; | |
| 19 | + | |
| 13 | 20 | @Override |
| 14 | 21 | public void configure(SpringProcessEngineConfiguration configuration) { |
| 15 | - // 注册监听器,例如说 ActivitiEventListener 的实现类 | |
| 16 | -// configuration.setEventListeners(Arrays.asList(processInstanceEventListener)); | |
| 22 | + // 注册监听器,例如说 BpmActivitiEventListener | |
| 23 | + configuration.setEventListeners(Collections.singletonList(taskActivitiEventListener)); | |
| 17 | 24 | } |
| 18 | 25 | |
| 19 | 26 | } | ... | ... |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmProcessDefinitionService.java
| ... | ... | @@ -65,6 +65,16 @@ public interface BpmProcessDefinitionService { |
| 65 | 65 | ProcessDefinition getProcessDefinition(String id); |
| 66 | 66 | |
| 67 | 67 | /** |
| 68 | + * 获得编号对应的 ProcessDefinition | |
| 69 | + * | |
| 70 | + * 相比 {@link #getProcessDefinition(String)} 方法,category 的取值是正确 | |
| 71 | + * | |
| 72 | + * @param id 编号 | |
| 73 | + * @return 流程定义 | |
| 74 | + */ | |
| 75 | + ProcessDefinition getProcessDefinition2(String id); | |
| 76 | + | |
| 77 | + /** | |
| 68 | 78 | * 获得 id 对应的 Deployment |
| 69 | 79 | * |
| 70 | 80 | * @param id 部署编号 | ... | ... |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/impl/BpmProcessDefinitionServiceImpl.java
| ... | ... | @@ -136,6 +136,11 @@ public class BpmProcessDefinitionServiceImpl implements BpmProcessDefinitionServ |
| 136 | 136 | } |
| 137 | 137 | |
| 138 | 138 | @Override |
| 139 | + public ProcessDefinition getProcessDefinition2(String id) { | |
| 140 | + return repositoryService.createProcessDefinitionQuery().processDefinitionId(id).singleResult(); | |
| 141 | + } | |
| 142 | + | |
| 143 | + @Override | |
| 139 | 144 | public Deployment getDeployment(String id) { |
| 140 | 145 | if (StrUtil.isEmpty(id)) { |
| 141 | 146 | return null; | ... | ... |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/impl/BpmProcessInstanceServiceImpl.java
| 1 | 1 | package cn.iocoder.yudao.adminserver.modules.bpm.service.task.impl; |
| 2 | 2 | |
| 3 | 3 | import cn.hutool.core.collection.CollUtil; |
| 4 | -import cn.hutool.core.lang.Assert; | |
| 5 | 4 | import cn.iocoder.yudao.adminserver.modules.bpm.controller.task.vo.instance.BpmProcessInstanceCancelReqVO; |
| 6 | 5 | import cn.iocoder.yudao.adminserver.modules.bpm.controller.task.vo.instance.BpmProcessInstanceCreateReqVO; |
| 7 | 6 | import cn.iocoder.yudao.adminserver.modules.bpm.controller.task.vo.instance.BpmProcessInstanceMyPageReqVO; |
| 8 | 7 | import cn.iocoder.yudao.adminserver.modules.bpm.controller.task.vo.instance.BpmProcessInstancePageItemRespVO; |
| 9 | 8 | import cn.iocoder.yudao.adminserver.modules.bpm.convert.task.BpmProcessInstanceConvert; |
| 10 | -import cn.iocoder.yudao.adminserver.modules.bpm.convert.task.BpmTaskConvert; | |
| 11 | 9 | import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.task.BpmProcessInstanceExtDO; |
| 12 | -import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.task.BpmTaskExtDO; | |
| 13 | 10 | import cn.iocoder.yudao.adminserver.modules.bpm.dal.mysql.task.BpmProcessInstanceExtMapper; |
| 14 | 11 | import cn.iocoder.yudao.adminserver.modules.bpm.enums.task.BpmProcessInstanceDeleteReasonEnum; |
| 15 | 12 | import cn.iocoder.yudao.adminserver.modules.bpm.enums.task.BpmProcessInstanceResultEnum; |
| ... | ... | @@ -18,15 +15,11 @@ import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.BpmProcessDef |
| 18 | 15 | import cn.iocoder.yudao.adminserver.modules.bpm.service.task.BpmProcessInstanceService; |
| 19 | 16 | import cn.iocoder.yudao.adminserver.modules.bpm.service.task.BpmTaskService; |
| 20 | 17 | import cn.iocoder.yudao.adminserver.modules.system.service.user.SysUserService; |
| 21 | -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO; | |
| 22 | 18 | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| 23 | -import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; | |
| 24 | 19 | import lombok.extern.slf4j.Slf4j; |
| 25 | 20 | import org.activiti.engine.HistoryService; |
| 26 | 21 | import org.activiti.engine.RuntimeService; |
| 27 | -import org.activiti.engine.TaskService; | |
| 28 | 22 | import org.activiti.engine.history.HistoricProcessInstance; |
| 29 | -import org.activiti.engine.history.HistoricProcessInstanceQuery; | |
| 30 | 23 | import org.activiti.engine.repository.ProcessDefinition; |
| 31 | 24 | import org.activiti.engine.runtime.ProcessInstance; |
| 32 | 25 | import org.activiti.engine.task.Task; |
| ... | ... | @@ -37,7 +30,6 @@ import org.springframework.validation.annotation.Validated; |
| 37 | 30 | |
| 38 | 31 | import javax.annotation.Resource; |
| 39 | 32 | import java.util.*; |
| 40 | -import java.util.function.Consumer; | |
| 41 | 33 | |
| 42 | 34 | import static cn.iocoder.yudao.adminserver.modules.bpm.enums.BpmErrorCodeConstants.*; |
| 43 | 35 | import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; |
| ... | ... | @@ -93,9 +85,6 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService |
| 93 | 85 | ProcessInstance instance = runtimeService.startProcessInstanceById(createReqVO.getProcessDefinitionId(), variables); |
| 94 | 86 | // 设置流程名字 |
| 95 | 87 | runtimeService.setProcessInstanceName(instance.getId(), definition.getName()); |
| 96 | - // 更新流程实例拓展表的 category TODO 芋艿:暂时没好的办法,task 的 category 不正确。另外,definition 返回的 category 也不太正确,后续在解决; | |
| 97 | - processInstanceExtMapper.updateByProcessInstanceId(new BpmProcessInstanceExtDO() | |
| 98 | - .setProcessInstanceId(instance.getId()).setCategory(definition.getCategory())); | |
| 99 | 88 | |
| 100 | 89 | // TODO 芋艿:临时使用, 保证分配 |
| 101 | 90 | List<Task> tasks = taskService.getTasksByProcessInstanceId(instance.getId()); |
| ... | ... | @@ -194,7 +183,11 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService |
| 194 | 183 | |
| 195 | 184 | @Override |
| 196 | 185 | public void createProcessInstanceExt(org.activiti.api.process.model.ProcessInstance instance) { |
| 186 | + // 获得流程定义 | |
| 187 | + ProcessDefinition definition = processDefinitionService.getProcessDefinition2(instance.getProcessDefinitionId()); | |
| 188 | + // 插入 BpmProcessInstanceExtDO 对象 | |
| 197 | 189 | BpmProcessInstanceExtDO instanceExtDO = BpmProcessInstanceConvert.INSTANCE.convert(instance) |
| 190 | + .setCategory(definition.getCategory()) | |
| 198 | 191 | .setStatus(BpmProcessInstanceStatusEnum.RUNNING.getStatus()) |
| 199 | 192 | .setResult(BpmProcessInstanceResultEnum.PROCESS.getResult()); |
| 200 | 193 | processInstanceExtMapper.insert(instanceExtDO); | ... | ... |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/impl/BpmTaskServiceImpl.java
| ... | ... | @@ -396,6 +396,7 @@ public class BpmTaskServiceImpl implements BpmTaskService { |
| 396 | 396 | |
| 397 | 397 | @Override |
| 398 | 398 | public void createTaskExt(org.activiti.api.task.model.Task task) { |
| 399 | + // 插入 BpmTaskExtDO 记录 | |
| 399 | 400 | BpmTaskExtDO taskExtDO = BpmTaskConvert.INSTANCE.convert(task) |
| 400 | 401 | .setResult(BpmProcessInstanceResultEnum.PROCESS.getResult()); |
| 401 | 402 | taskExtMapper.insert(taskExtDO); | ... | ... |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/listener/BpmTackActivitiEventListener.java
0 → 100644
| 1 | +package cn.iocoder.yudao.adminserver.modules.bpm.service.task.listener; | |
| 2 | + | |
| 3 | +import cn.hutool.core.util.StrUtil; | |
| 4 | +import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.BpmProcessDefinitionService; | |
| 5 | +import org.activiti.api.process.runtime.events.listener.ProcessRuntimeEventListener; | |
| 6 | +import org.activiti.api.task.runtime.events.listener.TaskEventListener; | |
| 7 | +import org.activiti.engine.delegate.event.ActivitiEvent; | |
| 8 | +import org.activiti.engine.delegate.event.ActivitiEventListener; | |
| 9 | +import org.activiti.engine.delegate.event.ActivitiEventType; | |
| 10 | +import org.activiti.engine.delegate.event.impl.ActivitiEntityEventImpl; | |
| 11 | +import org.activiti.engine.impl.persistence.entity.TaskEntity; | |
| 12 | +import org.activiti.engine.repository.ProcessDefinition; | |
| 13 | +import org.springframework.context.annotation.Lazy; | |
| 14 | +import org.springframework.stereotype.Component; | |
| 15 | + | |
| 16 | +import javax.annotation.Resource; | |
| 17 | + | |
| 18 | +/** | |
| 19 | + * 监听 {@link TaskEntity} 相关的事件,设置相关属性。 | |
| 20 | + * 目的:解决 {@link TaskEventListener} 无法解决的场景 | |
| 21 | + * | |
| 22 | + * @author 芋道源码 | |
| 23 | + */ | |
| 24 | +@Component | |
| 25 | +public class BpmTackActivitiEventListener implements ActivitiEventListener { | |
| 26 | + | |
| 27 | + @Resource | |
| 28 | + @Lazy // 解决循环依赖 | |
| 29 | + private BpmProcessDefinitionService processDefinitionService; | |
| 30 | + | |
| 31 | + @Override | |
| 32 | + public void onEvent(ActivitiEvent event) { | |
| 33 | + // Task 创建时,设置其分类,解决 TaskService 未提供 name 的设置方法 | |
| 34 | + if (ActivitiEventType.TASK_CREATED == event.getType()) { | |
| 35 | + TaskEntity task = ((TaskEntity) ((ActivitiEntityEventImpl) event).getEntity()); | |
| 36 | + if (StrUtil.isNotEmpty(task.getCategory())) { | |
| 37 | + return; | |
| 38 | + } | |
| 39 | + // 设置 name | |
| 40 | + ProcessDefinition processDefinition = processDefinitionService.getProcessDefinition2(task.getProcessDefinitionId()); | |
| 41 | + if (processDefinition == null) { | |
| 42 | + return; | |
| 43 | + } | |
| 44 | + task.setCategory(processDefinition.getCategory()); | |
| 45 | + } | |
| 46 | + } | |
| 47 | + | |
| 48 | + @Override | |
| 49 | + public boolean isFailOnException() { | |
| 50 | + return true; | |
| 51 | + } | |
| 52 | + | |
| 53 | +} | ... | ... |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/listener/BpmTaskEventListener.java
| ... | ... | @@ -46,19 +46,4 @@ public class BpmTaskEventListener<T extends TaskRuntimeEvent<? extends Task>> |
| 46 | 46 | taskService.updateTaskExt(event.getEntity()); |
| 47 | 47 | } |
| 48 | 48 | |
| 49 | -// // Task 创建时,插入拓展表 | |
| 50 | -// if (event.getType() == ActivitiEventType.TASK_CREATED) { | |
| 51 | -// System.out.println(event); | |
| 52 | -// return; | |
| 53 | -// } | |
| 54 | -// | |
| 55 | -// if (event.getType() == ActivitiEventType.TASK_COMPLETED) { | |
| 56 | -// System.out.println(event); | |
| 57 | -// // 不处理; | |
| 58 | -// } else if (event.getType() == ActivitiEventType.ENTITY_DELETED) { | |
| 59 | -// // 假设是 | |
| 60 | -// System.out.println(event); | |
| 61 | -// } | |
| 62 | -// System.out.println(event); | |
| 63 | - | |
| 64 | 49 | } | ... | ... |
yudao-admin-ui/src/views/bpm/model/modelEditor.vue
| ... | ... | @@ -175,17 +175,8 @@ export default { |
| 175 | 175 | |
| 176 | 176 | .my-process-designer { |
| 177 | 177 | height: calc(100vh - 84px); |
| 178 | - //height: 800px !important; // TODO 芋艿:bjs 容器的高度不对,临时改下 | |
| 179 | - //z-index: 0 !important; | |
| 180 | - //pointer-events: none !important; | |
| 181 | 178 | } |
| 182 | -.process-panel__container { // TODO 芋艿:右边的位置不对,临时改下 | |
| 183 | - //margin-top: -800px !important; | |
| 184 | - //float: right; | |
| 185 | - //margin-left: 800px !important; | |
| 186 | - //height: 800px; | |
| 187 | - //z-index: 2147483647 !important; | |
| 188 | - //cursor:pointer !important; | |
| 179 | +.process-panel__container { | |
| 189 | 180 | position: absolute; |
| 190 | 181 | right: 0; |
| 191 | 182 | top: 55px; | ... | ... |