Commit abe161669c501424e17190cc6b3f251898f1b508

Authored by YunaiV
1 parent 9860a7d5

修复 BPM Task 的 category 设置问题

yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/BpmActivitiConfiguration.java
1 package cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti; 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 import org.activiti.spring.SpringProcessEngineConfiguration; 4 import org.activiti.spring.SpringProcessEngineConfiguration;
4 import org.activiti.spring.boot.ProcessEngineConfigurationConfigurer; 5 import org.activiti.spring.boot.ProcessEngineConfigurationConfigurer;
5 import org.springframework.context.annotation.Configuration; 6 import org.springframework.context.annotation.Configuration;
6 7
  8 +import javax.annotation.Resource;
  9 +import java.util.Collections;
  10 +
7 /** 11 /**
8 * BPM 模块的 Activiti 配置类 12 * BPM 模块的 Activiti 配置类
9 */ 13 */
10 @Configuration 14 @Configuration
11 public class BpmActivitiConfiguration implements ProcessEngineConfigurationConfigurer { 15 public class BpmActivitiConfiguration implements ProcessEngineConfigurationConfigurer {
12 16
  17 + @Resource
  18 + private BpmTackActivitiEventListener taskActivitiEventListener;
  19 +
13 @Override 20 @Override
14 public void configure(SpringProcessEngineConfiguration configuration) { 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,6 +65,16 @@ public interface BpmProcessDefinitionService {
65 ProcessDefinition getProcessDefinition(String id); 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 * 获得 id 对应的 Deployment 78 * 获得 id 对应的 Deployment
69 * 79 *
70 * @param id 部署编号 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,6 +136,11 @@ public class BpmProcessDefinitionServiceImpl implements BpmProcessDefinitionServ
136 } 136 }
137 137
138 @Override 138 @Override
  139 + public ProcessDefinition getProcessDefinition2(String id) {
  140 + return repositoryService.createProcessDefinitionQuery().processDefinitionId(id).singleResult();
  141 + }
  142 +
  143 + @Override
139 public Deployment getDeployment(String id) { 144 public Deployment getDeployment(String id) {
140 if (StrUtil.isEmpty(id)) { 145 if (StrUtil.isEmpty(id)) {
141 return null; 146 return null;
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/impl/BpmProcessInstanceServiceImpl.java
1 package cn.iocoder.yudao.adminserver.modules.bpm.service.task.impl; 1 package cn.iocoder.yudao.adminserver.modules.bpm.service.task.impl;
2 2
3 import cn.hutool.core.collection.CollUtil; 3 import cn.hutool.core.collection.CollUtil;
4 -import cn.hutool.core.lang.Assert;  
5 import cn.iocoder.yudao.adminserver.modules.bpm.controller.task.vo.instance.BpmProcessInstanceCancelReqVO; 4 import cn.iocoder.yudao.adminserver.modules.bpm.controller.task.vo.instance.BpmProcessInstanceCancelReqVO;
6 import cn.iocoder.yudao.adminserver.modules.bpm.controller.task.vo.instance.BpmProcessInstanceCreateReqVO; 5 import cn.iocoder.yudao.adminserver.modules.bpm.controller.task.vo.instance.BpmProcessInstanceCreateReqVO;
7 import cn.iocoder.yudao.adminserver.modules.bpm.controller.task.vo.instance.BpmProcessInstanceMyPageReqVO; 6 import cn.iocoder.yudao.adminserver.modules.bpm.controller.task.vo.instance.BpmProcessInstanceMyPageReqVO;
8 import cn.iocoder.yudao.adminserver.modules.bpm.controller.task.vo.instance.BpmProcessInstancePageItemRespVO; 7 import cn.iocoder.yudao.adminserver.modules.bpm.controller.task.vo.instance.BpmProcessInstancePageItemRespVO;
9 import cn.iocoder.yudao.adminserver.modules.bpm.convert.task.BpmProcessInstanceConvert; 8 import cn.iocoder.yudao.adminserver.modules.bpm.convert.task.BpmProcessInstanceConvert;
10 -import cn.iocoder.yudao.adminserver.modules.bpm.convert.task.BpmTaskConvert;  
11 import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.task.BpmProcessInstanceExtDO; 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 import cn.iocoder.yudao.adminserver.modules.bpm.dal.mysql.task.BpmProcessInstanceExtMapper; 10 import cn.iocoder.yudao.adminserver.modules.bpm.dal.mysql.task.BpmProcessInstanceExtMapper;
14 import cn.iocoder.yudao.adminserver.modules.bpm.enums.task.BpmProcessInstanceDeleteReasonEnum; 11 import cn.iocoder.yudao.adminserver.modules.bpm.enums.task.BpmProcessInstanceDeleteReasonEnum;
15 import cn.iocoder.yudao.adminserver.modules.bpm.enums.task.BpmProcessInstanceResultEnum; 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 +15,11 @@ import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.BpmProcessDef
18 import cn.iocoder.yudao.adminserver.modules.bpm.service.task.BpmProcessInstanceService; 15 import cn.iocoder.yudao.adminserver.modules.bpm.service.task.BpmProcessInstanceService;
19 import cn.iocoder.yudao.adminserver.modules.bpm.service.task.BpmTaskService; 16 import cn.iocoder.yudao.adminserver.modules.bpm.service.task.BpmTaskService;
20 import cn.iocoder.yudao.adminserver.modules.system.service.user.SysUserService; 17 import cn.iocoder.yudao.adminserver.modules.system.service.user.SysUserService;
21 -import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO;  
22 import cn.iocoder.yudao.framework.common.pojo.PageResult; 18 import cn.iocoder.yudao.framework.common.pojo.PageResult;
23 -import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;  
24 import lombok.extern.slf4j.Slf4j; 19 import lombok.extern.slf4j.Slf4j;
25 import org.activiti.engine.HistoryService; 20 import org.activiti.engine.HistoryService;
26 import org.activiti.engine.RuntimeService; 21 import org.activiti.engine.RuntimeService;
27 -import org.activiti.engine.TaskService;  
28 import org.activiti.engine.history.HistoricProcessInstance; 22 import org.activiti.engine.history.HistoricProcessInstance;
29 -import org.activiti.engine.history.HistoricProcessInstanceQuery;  
30 import org.activiti.engine.repository.ProcessDefinition; 23 import org.activiti.engine.repository.ProcessDefinition;
31 import org.activiti.engine.runtime.ProcessInstance; 24 import org.activiti.engine.runtime.ProcessInstance;
32 import org.activiti.engine.task.Task; 25 import org.activiti.engine.task.Task;
@@ -37,7 +30,6 @@ import org.springframework.validation.annotation.Validated; @@ -37,7 +30,6 @@ import org.springframework.validation.annotation.Validated;
37 30
38 import javax.annotation.Resource; 31 import javax.annotation.Resource;
39 import java.util.*; 32 import java.util.*;
40 -import java.util.function.Consumer;  
41 33
42 import static cn.iocoder.yudao.adminserver.modules.bpm.enums.BpmErrorCodeConstants.*; 34 import static cn.iocoder.yudao.adminserver.modules.bpm.enums.BpmErrorCodeConstants.*;
43 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; 35 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
@@ -93,9 +85,6 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService @@ -93,9 +85,6 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService
93 ProcessInstance instance = runtimeService.startProcessInstanceById(createReqVO.getProcessDefinitionId(), variables); 85 ProcessInstance instance = runtimeService.startProcessInstanceById(createReqVO.getProcessDefinitionId(), variables);
94 // 设置流程名字 86 // 设置流程名字
95 runtimeService.setProcessInstanceName(instance.getId(), definition.getName()); 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 // TODO 芋艿:临时使用, 保证分配 89 // TODO 芋艿:临时使用, 保证分配
101 List<Task> tasks = taskService.getTasksByProcessInstanceId(instance.getId()); 90 List<Task> tasks = taskService.getTasksByProcessInstanceId(instance.getId());
@@ -194,7 +183,11 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService @@ -194,7 +183,11 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService
194 183
195 @Override 184 @Override
196 public void createProcessInstanceExt(org.activiti.api.process.model.ProcessInstance instance) { 185 public void createProcessInstanceExt(org.activiti.api.process.model.ProcessInstance instance) {
  186 + // 获得流程定义
  187 + ProcessDefinition definition = processDefinitionService.getProcessDefinition2(instance.getProcessDefinitionId());
  188 + // 插入 BpmProcessInstanceExtDO 对象
197 BpmProcessInstanceExtDO instanceExtDO = BpmProcessInstanceConvert.INSTANCE.convert(instance) 189 BpmProcessInstanceExtDO instanceExtDO = BpmProcessInstanceConvert.INSTANCE.convert(instance)
  190 + .setCategory(definition.getCategory())
198 .setStatus(BpmProcessInstanceStatusEnum.RUNNING.getStatus()) 191 .setStatus(BpmProcessInstanceStatusEnum.RUNNING.getStatus())
199 .setResult(BpmProcessInstanceResultEnum.PROCESS.getResult()); 192 .setResult(BpmProcessInstanceResultEnum.PROCESS.getResult());
200 processInstanceExtMapper.insert(instanceExtDO); 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,6 +396,7 @@ public class BpmTaskServiceImpl implements BpmTaskService {
396 396
397 @Override 397 @Override
398 public void createTaskExt(org.activiti.api.task.model.Task task) { 398 public void createTaskExt(org.activiti.api.task.model.Task task) {
  399 + // 插入 BpmTaskExtDO 记录
399 BpmTaskExtDO taskExtDO = BpmTaskConvert.INSTANCE.convert(task) 400 BpmTaskExtDO taskExtDO = BpmTaskConvert.INSTANCE.convert(task)
400 .setResult(BpmProcessInstanceResultEnum.PROCESS.getResult()); 401 .setResult(BpmProcessInstanceResultEnum.PROCESS.getResult());
401 taskExtMapper.insert(taskExtDO); 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&lt;T extends TaskRuntimeEvent&lt;? extends Task&gt;&gt; @@ -46,19 +46,4 @@ public class BpmTaskEventListener&lt;T extends TaskRuntimeEvent&lt;? extends Task&gt;&gt;
46 taskService.updateTaskExt(event.getEntity()); 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,17 +175,8 @@ export default {
175 175
176 .my-process-designer { 176 .my-process-designer {
177 height: calc(100vh - 84px); 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 position: absolute; 180 position: absolute;
190 right: 0; 181 right: 0;
191 top: 55px; 182 top: 55px;