diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/listener/BpmTimerFiredEventListener.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/listener/BpmTimerFiredEventListener.java index 891d91409..facd40174 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/listener/BpmTimerFiredEventListener.java +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/listener/BpmTimerFiredEventListener.java @@ -80,7 +80,7 @@ public class BpmTimerFiredEventListener extends AbstractFlowableEngineEventListe BpmUserTaskTimeoutActionEnum userTaskTimeoutAction = BpmUserTaskTimeoutActionEnum.actionOf(timeoutAction); if (userTaskTimeoutAction != null) { // 查询超时未处理的任务 TODO 加签的情况会不会有问题 ??? - List taskList = bpmTaskService.getAssignedTaskListByConditions(processInstanceId, null, taskDefKey); + List taskList = bpmTaskService.getTaskListByProcessInstanceIdAndAssigned(processInstanceId, null, taskDefKey); taskList.forEach(task -> { // 自动提醒 if (userTaskTimeoutAction == BpmUserTaskTimeoutActionEnum.AUTO_REMINDER) { diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmTaskService.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmTaskService.java index f65e3333b..3426cfc69 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmTaskService.java +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmTaskService.java @@ -135,7 +135,7 @@ public interface BpmTaskService { * @param executionId execution Id * @param taskDefineKey 任务定义 Key */ - List getAssignedTaskListByConditions(String processInstanceId, String executionId, String taskDefineKey); + List getTaskListByProcessInstanceIdAndAssigned(String processInstanceId, String executionId, String taskDefineKey); /** * 获取当前任务的可回退的 UserTask 集合 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 a25843416..281a42b08 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 @@ -5,6 +5,7 @@ import cn.hutool.core.util.ArrayUtil; import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; +import cn.iocoder.yudao.framework.common.exception.enums.GlobalErrorCodeConstants; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.date.DateUtils; import cn.iocoder.yudao.framework.common.util.number.NumberUtils; @@ -353,34 +354,30 @@ public class BpmTaskServiceImpl implements BpmTaskService { return; } else if (userTaskRejectHandlerType == BpmUserTaskRejectHandlerType.FINISH_PROCESS_BY_REJECT_RATIO) { // 3.3 按拒绝人数比例终止流程 - // TODO @jason:建议抛出系统异常 if (!flowElement.hasMultiInstanceLoopCharacteristics()) { - throw exception(TASK_REJECT_HANDLER_TYPE_BY_REJECT_RATIO_ERROR); + log.error("[rejectTask] 用户任务拒绝处理类型配置错误, 按拒绝人数终止流程只能用于会签任务"); + throw exception(GlobalErrorCodeConstants.ERROR_CONFIGURATION); } + // 获取并行任务总数 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, + List taskList = getTaskListByProcessInstanceIdAndAssigned(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(), ""); + Integer rejectNumber = getSumValue(taskList, + item -> Objects.equals(BpmTaskStatusEnum.REJECT.getStatus(), FlowableUtils.getTaskStatus(item)) ? 1 : 0, + Integer::sum, 0); +// // TODO @jason:如果这样的话,后续会不会在【已完成】里面查询不到哈?【重要!!!!】 +// // 拒绝任务后,任务分配人清空。但不能完成任务 +// taskService.setAssignee(task.getId(), ""); // 不是所有人拒绝返回。 TODO 后续需要做按拒绝人数比例来判断 if (!Objects.equals(nrOfInstances, rejectNumber)) { return; } } - // 3.3 其他情况 终止流程。 TODO 后续可能会增加处理类型 + // 3.4 其他情况 终止流程。 TODO 后续可能会增加处理类型 processInstanceService.updateProcessInstanceReject(instance.getProcessInstanceId(), reqVO.getReason()); } @@ -482,9 +479,8 @@ 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) { + public List getTaskListByProcessInstanceIdAndAssigned(String processInstanceId, String executionId, String defineKey) { Assert.notNull(processInstanceId, "processInstanceId 不能为空"); TaskQuery taskQuery = taskService.createTaskQuery().taskAssigned().processInstanceId(processInstanceId).active() .includeTaskLocalVariables();