【代码评审】BPM:review 快搭的实现

This commit is contained in:
YunaiV 2024-06-06 20:17:53 +08:00
parent 1ec94e5bbc
commit dff1ff90a7
2 changed files with 12 additions and 7 deletions

View File

@ -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, "依次审批"); // 依次审批
/**

View File

@ -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<Task> taskList = getAssignedTaskListByConditions(task.getProcessInstanceId(), null, task.getTaskDefinitionKey());
List<Task> 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<Task> getAssignedTaskListByConditions(String processInstanceId, String executionId, String defineKey) {
Assert.notNull(processInstanceId, "processInstanceId 不能为空");