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 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&lt;T extends TaskRuntimeEvent&lt;? extends Task&gt;&gt;
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;
... ...