From dff1ff90a7c5eb1fbde851b6640735c4a9f07664 Mon Sep 17 00:00:00 2001 From: YunaiV Date: Thu, 6 Jun 2024 20:17:53 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=90=E4=BB=A3=E7=A0=81=E8=AF=84=E5=AE=A1?= =?UTF-8?q?=E3=80=91BPM=EF=BC=9Areview=20=E5=BF=AB=E6=90=AD=E7=9A=84?= =?UTF-8?q?=E5=AE=9E=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bpm/enums/definition/BpmApproveMethodEnum.java | 6 +++--- .../module/bpm/service/task/BpmTaskServiceImpl.java | 13 +++++++++---- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/module/bpm/enums/definition/BpmApproveMethodEnum.java b/yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/module/bpm/enums/definition/BpmApproveMethodEnum.java index 8d8972bd8..32d7cb088 100644 --- a/yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/module/bpm/enums/definition/BpmApproveMethodEnum.java +++ b/yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/module/bpm/enums/definition/BpmApproveMethodEnum.java @@ -16,9 +16,9 @@ public enum BpmApproveMethodEnum { SINGLE_PERSON_APPROVE(1, "单人审批"), ALL_APPROVE(2, "多人会签(需所有审批人同意)"), // 会签 - APPROVE_BY_RATIO(3, "多人会签(按比例投票)"), - ANY_APPROVE_ALL_REJECT(4, "多人会签(通过只需一人,拒绝需要全员)"), // 通过只需一人,拒绝需要全员 - ANY_APPROVE(5, "多人或签(一名审批人通过即可)"), // 或签 + APPROVE_BY_RATIO(3, "多人会签(按比例投票)"), // 会签(按比例投票) + ANY_APPROVE_ALL_REJECT(4, "多人会签(通过只需一人,拒绝需要全员)"), // 会签(通过只需一人,拒绝需要全员) + ANY_APPROVE(5, "多人或签(一名审批人通过即可)"), // 或签(通过只需一人,拒绝只需一人) SEQUENTIAL_APPROVE(6, "依次审批"); // 依次审批 /** diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmTaskServiceImpl.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmTaskServiceImpl.java index 7047261d9..a25843416 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmTaskServiceImpl.java +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmTaskServiceImpl.java @@ -353,26 +353,30 @@ public class BpmTaskServiceImpl implements BpmTaskService { return; } else if (userTaskRejectHandlerType == BpmUserTaskRejectHandlerType.FINISH_PROCESS_BY_REJECT_RATIO) { // 3.3 按拒绝人数比例终止流程 - if(!flowElement.hasMultiInstanceLoopCharacteristics()) { + // TODO @jason:建议抛出系统异常 + if (!flowElement.hasMultiInstanceLoopCharacteristics()) { throw exception(TASK_REJECT_HANDLER_TYPE_BY_REJECT_RATIO_ERROR); } Execution execution = runtimeService.createExecutionQuery().processInstanceId(task.getProcessInstanceId()) .executionId(task.getExecutionId()).singleResult(); - // 获取并行任务总数 + // 获取并行任务总数 TODO @jason:这个注释,其实挪到 Execution execution 前面好,更有整体性。 Integer nrOfInstances = runtimeService.getVariable(execution.getParentId(), "nrOfInstances", Integer.class); // 获取未完成任务列表 - List taskList = getAssignedTaskListByConditions(task.getProcessInstanceId(), null, task.getTaskDefinitionKey()); + List taskList = getAssignedTaskListByConditions(task.getProcessInstanceId(), null, + task.getTaskDefinitionKey()); // 获取已经拒绝的任务数 int rejectNumber = 0; + // TODO @jason: CollectionUtils.getSumValue() 替代 for (Task item : taskList) { if (Objects.equals(BpmTaskStatusEnum.REJECT.getStatus(), FlowableUtils.getTaskStatus(item))) { rejectNumber ++; } } + // TODO @jason:如果这样的话,后续会不会在【已完成】里面查询不到哈?【重要!!!!】 // 拒绝任务后,任务分配人清空。但不能完成任务 taskService.setAssignee(task.getId(), ""); // 不是所有人拒绝返回。 TODO 后续需要做按拒绝人数比例来判断 - if(!Objects.equals(nrOfInstances, rejectNumber)) { + if (!Objects.equals(nrOfInstances, rejectNumber)) { return; } } @@ -478,6 +482,7 @@ public class BpmTaskServiceImpl implements BpmTaskService { return taskService.createTaskQuery().taskId(id).includeTaskLocalVariables().singleResult(); } + // TODO @jason:改成 getTaskListByProcessInstanceIdAndAssigned;其它条件就不写了。主要考虑,还是动名词 @Override public List getAssignedTaskListByConditions(String processInstanceId, String executionId, String defineKey) { Assert.notNull(processInstanceId, "processInstanceId 不能为空");