Commit 5c032219674f3067d8c151459f30bc1da7fae52b
1 parent
222732f7
会签-初步搞定
Showing
3 changed files
with
20 additions
and
9 deletions
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,13 +76,21 @@ public class BpmUserTaskActivityBehavior extends UserTaskActivityBehavior { | ||
| 76 | @Override | 76 | @Override |
| 77 | @DataPermission(enable = false) // 不需要处理数据权限, 不然会有问题,查询不到数据 | 77 | @DataPermission(enable = false) // 不需要处理数据权限, 不然会有问题,查询不到数据 |
| 78 | protected void handleAssignments(TaskService taskService, String assignee, String owner, List<String> candidateUsers, List<String> candidateGroups, TaskEntity task, ExpressionManager expressionManager, DelegateExecution execution, ProcessEngineConfigurationImpl processEngineConfiguration) { | 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 | private BpmTaskAssignRuleDO getTaskRule(TaskEntity task) { | 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,8 +292,8 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService | ||
| 292 | runtimeService.setProcessInstanceName(instance.getId(), definition.getName()); | 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 | return instance.getId(); | 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,6 +20,9 @@ import static org.junit.Assert.assertNotNull; | ||
| 20 | * @author henryyan | 20 | * @author henryyan |
| 21 | * testMultiInstanceForUserTask 会签 | 21 | * testMultiInstanceForUserTask 会签 |
| 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) | 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 | public class MultiInstancesTest extends AbstractOATest { | 28 | public class MultiInstancesTest extends AbstractOATest { |