Commit 5d6faa802351cc41b11b3ec60ac91b957ffad399

Authored by youkehai
1 parent 10af0506

fix: 【工作流】-加减签父任务处理逻辑完善

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,10 +312,9 @@ public class BpmTaskServiceImpl implements BpmTaskService {
312 } 312 }
313 taskExtMapper.updateByTaskId(currentTaskUpdateEntity); 313 taskExtMapper.updateByTaskId(currentTaskUpdateEntity);
314 //5. 继续往上处理,父任务继续往上查询 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 //5.2 如果有父级,递归查询上级任务是否都已经完成 318 //5.2 如果有父级,递归查询上级任务是否都已经完成
320 //判断整条链路的任务是否完成 319 //判断整条链路的任务是否完成
321 //例如从 A 任务加签了一个 B 任务, B 任务又加签了一个 C 任务,C任务加签了 D 任务 320 //例如从 A 任务加签了一个 B 任务, B 任务又加签了一个 C 任务,C任务加签了 D 任务
@@ -327,15 +326,33 @@ public class BpmTaskServiceImpl implements BpmTaskService { @@ -327,15 +326,33 @@ public class BpmTaskServiceImpl implements BpmTaskService {
327 if (bpmTaskExtDO == null) { 326 if (bpmTaskExtDO == null) {
328 break; 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 if (allChildrenTaskFinish) { 354 if (allChildrenTaskFinish) {
338 - //完成最后的顶级祖先任务 355 + //7. 完成最后的顶级祖先任务
339 taskService.complete(parentTask.getId()); 356 taskService.complete(parentTask.getId());
340 } 357 }
341 } 358 }