Commit 45dd87c0856e8c52cec184f497386b3e0e04f4f7

Authored by jason
1 parent 4a238725

【缺陷修复】

1、从依次审批节点退回时,任务不生成的问题
2、会签、或签任务退回时,不分配给自己的任务,执行取消逻辑
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/util/SimpleModelUtils.java
... ... @@ -83,7 +83,7 @@ public class SimpleModelUtils {
83 83  
84 84 private static BpmSimpleModelNodeVO buildStartNode() {
85 85 return new BpmSimpleModelNodeVO().setId(START_EVENT_NODE_ID)
86   - .setName(BpmSimpleModelNodeType.START_USER_NODE.getName())
  86 + .setName(BpmSimpleModelNodeType.START_NODE.getName())
87 87 .setType(BpmSimpleModelNodeType.START_NODE.getType());
88 88 }
89 89  
... ...
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmTaskServiceImpl.java
... ... @@ -441,7 +441,7 @@ public class BpmTaskServiceImpl implements BpmTaskService {
441 441 * 判断指定用户,是否是当前任务的加签人
442 442 *
443 443 * @param userId 用户 Id
444   - * @param task 任务
  444 + * @param task 任务
445 445 * @return 是否
446 446 */
447 447 private boolean isAddSignUserTask(Long userId, Task task) {
... ... @@ -669,7 +669,7 @@ public class BpmTaskServiceImpl implements BpmTaskService {
669 669 reqVO.getTargetTaskDefinitionKey(), task.getProcessDefinitionId());
670 670  
671 671 // 2. 调用 Flowable 框架的退回逻辑
672   - returnTask(task, targetElement, reqVO);
  672 + returnTask(userId, task, targetElement, reqVO);
673 673 }
674 674  
675 675 /**
... ... @@ -701,11 +701,12 @@ public class BpmTaskServiceImpl implements BpmTaskService {
701 701 /**
702 702 * 执行退回逻辑
703 703 *
  704 + * @param userId 用户编号
704 705 * @param currentTask 当前退回的任务
705 706 * @param targetElement 需要退回到的目标任务
706 707 * @param reqVO 前端参数封装
707 708 */
708   - public void returnTask(Task currentTask, FlowElement targetElement, BpmTaskReturnReqVO reqVO) {
  709 + public void returnTask(Long userId, Task currentTask, FlowElement targetElement, BpmTaskReturnReqVO reqVO) {
709 710 // 1. 获得所有需要回撤的任务 taskDefinitionKey,用于稍后的 moveActivityIdsToSingleActivityId 回撤
710 711 // 1.1 获取所有正常进行的任务节点 Key
711 712 List<Task> taskList = taskService.createTaskQuery().processInstanceId(currentTask.getProcessInstanceId()).list();
... ... @@ -721,22 +722,28 @@ public class BpmTaskServiceImpl implements BpmTaskService {
721 722 if (!returnTaskKeyList.contains(task.getTaskDefinitionKey())) {
722 723 return;
723 724 }
724   - // 2.1 添加评论
725   - taskService.addComment(task.getId(), currentTask.getProcessInstanceId(), BpmCommentTypeEnum.RETURN.getType(),
726   - BpmCommentTypeEnum.RETURN.formatComment(reqVO.getReason()));
727   - // 2.2 更新 task 状态 + 原因
728   - updateTaskStatusAndReason(task.getId(), BpmTaskStatusEnum.RETURN.getStatus(), reqVO.getReason());
  725 +
  726 + if (isAssignUserTask(userId, task)) { // 判断是否分配给自己任务,因为会签任务,一个节点会有多个任务
  727 + // 2.1 添加评论
  728 + taskService.addComment(task.getId(), currentTask.getProcessInstanceId(), BpmCommentTypeEnum.RETURN.getType(),
  729 + BpmCommentTypeEnum.RETURN.formatComment(reqVO.getReason()));
  730 + // 2.2 更新 task 状态 + 原因
  731 + updateTaskStatusAndReason(task.getId(), BpmTaskStatusEnum.RETURN.getStatus(), reqVO.getReason());
  732 + } else {
  733 + // 2.3 取消不是分配给自己的任务
  734 + processTaskCanceled(task.getId());
  735 + }
  736 +
729 737 });
730 738  
731 739 // 3. 设置流程变量节点驳回标记:用于驳回到节点,不执行 BpmUserTaskAssignStartUserHandlerTypeEnum 策略。导致自动通过
732 740 runtimeService.setVariable(currentTask.getProcessInstanceId(),
733 741 String.format(PROCESS_INSTANCE_VARIABLE_RETURN_FLAG, reqVO.getTargetTaskDefinitionKey()), Boolean.TRUE);
734   -
735 742 // 4. 执行驳回
  743 + List<String> runExecutionIdList = convertList(taskList, Task::getExecutionId);
736 744 runtimeService.createChangeActivityStateBuilder()
737 745 .processInstanceId(currentTask.getProcessInstanceId())
738   - .moveActivityIdsToSingleActivityId(returnTaskKeyList, // 当前要跳转的节点列表( 1 或多)
739   - reqVO.getTargetTaskDefinitionKey()) // targetKey 跳转到的节点(1)
  746 + .moveExecutionsToSingleActivityId(runExecutionIdList, reqVO.getTargetTaskDefinitionKey())
740 747 .changeState();
741 748 }
742 749  
... ...