Commit 5d6faa802351cc41b11b3ec60ac91b957ffad399
1 parent
10af0506
fix: 【工作流】-加减签父任务处理逻辑完善
Showing
1 changed file
with
27 additions
and
10 deletions
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmTaskServiceImpl.java
| ... | ... | @@ -312,10 +312,9 @@ public class BpmTaskServiceImpl implements BpmTaskService { |
| 312 | 312 | } |
| 313 | 313 | taskExtMapper.updateByTaskId(currentTaskUpdateEntity); |
| 314 | 314 | //5. 继续往上处理,父任务继续往上查询 |
| 315 | - if (StrUtil.isEmpty(parentTask.getParentTaskId())) { | |
| 316 | - //5.1 该父任务为最顶级的祖先任务(没有父级ID), 则直接完成父任务流转到下一步 | |
| 317 | - taskService.complete(parentTaskId); | |
| 318 | - } else { | |
| 315 | + //5.1 先完成自己 | |
| 316 | + taskService.complete(parentTaskId); | |
| 317 | + if (StrUtil.isNotEmpty(parentTask.getParentTaskId())) { | |
| 319 | 318 | //5.2 如果有父级,递归查询上级任务是否都已经完成 |
| 320 | 319 | //判断整条链路的任务是否完成 |
| 321 | 320 | //例如从 A 任务加签了一个 B 任务, B 任务又加签了一个 C 任务,C任务加签了 D 任务 |
| ... | ... | @@ -327,15 +326,33 @@ public class BpmTaskServiceImpl implements BpmTaskService { |
| 327 | 326 | if (bpmTaskExtDO == null) { |
| 328 | 327 | break; |
| 329 | 328 | } |
| 330 | - //任务已完成 | |
| 331 | - allChildrenTaskFinish = BpmProcessInstanceResultEnum.isEndResult(bpmTaskExtDO.getResult()); | |
| 332 | - if (!allChildrenTaskFinish) { | |
| 333 | - //有一个未完成,则退出循环 | |
| 334 | - break; | |
| 329 | + boolean currentTaskFinish = BpmProcessInstanceResultEnum.isEndResult(bpmTaskExtDO.getResult()); | |
| 330 | + //5.3 如果 allChildrenTaskFinish 已经被赋值为 false ,则不会再赋值为 true,因为整个链路没有完成 | |
| 331 | + if (allChildrenTaskFinish) { | |
| 332 | + allChildrenTaskFinish = currentTaskFinish; | |
| 333 | + } | |
| 334 | + if (!currentTaskFinish) { | |
| 335 | + //6 处理非完成状态的任务 | |
| 336 | + //6.1 判断当前任务的父任务是否还有子任务 | |
| 337 | + Long subTaskCount = getSubTaskCount(bpmTaskExtDO.getTaskId()); | |
| 338 | + if (subTaskCount == 0) { | |
| 339 | + //6.2 没有子任务,判断当前任务状态是否为 ADD_SIGN_BEFORE 待前加签任务完成 | |
| 340 | + if (BpmProcessInstanceResultEnum.ADD_SIGN_BEFORE.getResult().equals(bpmTaskExtDO.getResult())) { | |
| 341 | + //6.3 需要修改该任务状态为处理中 | |
| 342 | + taskService.resolveTask(bpmTaskExtDO.getTaskId()); | |
| 343 | + bpmTaskExtDO.setResult(BpmProcessInstanceResultEnum.PROCESS.getResult()); | |
| 344 | + taskExtMapper.updateByTaskId(bpmTaskExtDO); | |
| 345 | + } | |
| 346 | + //6.4 清空 scopeType 字段,用于任务没有子任务时使用该方法,方便任务可以再次被不同的方式加签 | |
| 347 | + parentTask = getTask(bpmTaskExtDO.getTaskId()); | |
| 348 | + if (parentTask != null) { | |
| 349 | + clearTaskScopeTypeAndSave(parentTask); | |
| 350 | + } | |
| 351 | + } | |
| 335 | 352 | } |
| 336 | 353 | } |
| 337 | 354 | if (allChildrenTaskFinish) { |
| 338 | - //完成最后的顶级祖先任务 | |
| 355 | + //7. 完成最后的顶级祖先任务 | |
| 339 | 356 | taskService.complete(parentTask.getId()); |
| 340 | 357 | } |
| 341 | 358 | } | ... | ... |