Commit 5c032219674f3067d8c151459f30bc1da7fae52b

Authored by cuicui
1 parent 222732f7

会签-初步搞定

yudao-module-bpm/yudao-module-bpm-impl-flowable/src/main/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/behavior/BpmUserTaskActivityBehavior.java
... ... @@ -76,13 +76,21 @@ public class BpmUserTaskActivityBehavior extends UserTaskActivityBehavior {
76 76 @Override
77 77 @DataPermission(enable = false) // 不需要处理数据权限, 不然会有问题,查询不到数据
78 78 protected void handleAssignments(TaskService taskService, String assignee, String owner, List<String> candidateUsers, List<String> candidateGroups, TaskEntity task, ExpressionManager expressionManager, DelegateExecution execution, ProcessEngineConfigurationImpl processEngineConfiguration) {
79   - // 第一步,获得任务的规则
80   - BpmTaskAssignRuleDO rule = getTaskRule(task);
81   - // 第二步,获得任务的候选用户们
82   - Set<Long> candidateUserIds = calculateTaskCandidateUsers(task, rule);
83   - // 第三步,设置一个作为负责人
84   - Long assigneeUserId = chooseTaskAssignee(candidateUserIds);
85   - TaskHelper.changeTaskAssignee(task, String.valueOf(assigneeUserId));
  79 + boolean isMultiInstance = hasMultiInstanceCharacteristics();
  80 + if(isMultiInstance){
  81 + //多实例 会签/或签,执行多次每个人 待办人都在execution里面获取
  82 + Integer assigneeUserId = execution.getVariableLocal("user", Integer.class);
  83 + TaskHelper.changeTaskAssignee(task, String.valueOf(assigneeUserId));
  84 + }else {
  85 + // 第一步,获得任务的规则
  86 + BpmTaskAssignRuleDO rule = getTaskRule(task);
  87 + // 第二步,获得任务的候选用户们
  88 + Set<Long> candidateUserIds = calculateTaskCandidateUsers(task, rule);
  89 + // 第三步,设置一个作为负责人
  90 + Long assigneeUserId = chooseTaskAssignee(candidateUserIds);
  91 + TaskHelper.changeTaskAssignee(task, String.valueOf(assigneeUserId));
  92 + }
  93 +
86 94 }
87 95  
88 96 private BpmTaskAssignRuleDO getTaskRule(TaskEntity task) {
... ...
yudao-module-bpm/yudao-module-bpm-impl-flowable/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmProcessInstanceServiceImpl.java
... ... @@ -292,8 +292,8 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService
292 292 runtimeService.setProcessInstanceName(instance.getId(), definition.getName());
293 293  
294 294 // 补全流程实例的拓展表
295   - processInstanceExtMapper.updateByProcessInstanceId(new BpmProcessInstanceExtDO().setProcessInstanceId(instance.getId())
296   - .setFormVariables(variables));
  295 + //TODO startProcessInstance流程里面修改了 BpmProcessInstanceExt,没有提交,和下面的更新 锁持有冲突了,异步更新这个表
  296 +// processInstanceExtMapper.updateByProcessInstanceId(new BpmProcessInstanceExtDO().setProcessInstanceId(instance.getId()).setFormVariables(variables));
297 297  
298 298 return instance.getId();
299 299 }
... ...
yudao-module-bpm/yudao-module-bpm-impl-flowable/src/test/java/cn/iocoder/yudao/module/bpm/MultiInstancesTest.java
... ... @@ -20,6 +20,9 @@ import static org.junit.Assert.assertNotNull;
20 20 * @author henryyan
21 21 * testMultiInstanceForUserTask 会签
22 22 * cn.iocoder.yudao.module.bpm.framework.flowable.core.behavior.BpmUserTaskActivityBehavior#handleAssignments(org.flowable.task.service.TaskService, java.lang.String, java.lang.String, java.util.List, java.util.List, org.flowable.task.service.impl.persistence.entity.TaskEntity, org.flowable.common.engine.impl.el.ExpressionManager, org.flowable.engine.delegate.DelegateExecution, org.flowable.engine.impl.cfg.ProcessEngineConfigurationImpl)
  23 + *
  24 + * 发生了死锁
  25 + * cn.iocoder.yudao.module.bpm.controller.admin.task.BpmProcessInstanceController#createProcessInstance(cn.iocoder.yudao.module.bpm.controller.admin.task.vo.instance.BpmProcessInstanceCreateReqVO)
23 26 * 执行了两次,任务分配到了同一个人
24 27 */
25 28 public class MultiInstancesTest extends AbstractOATest {
... ...