仿钉钉流程设计- code review 修改

This commit is contained in:
jason 2024-06-07 13:09:41 +08:00
parent dff1ff90a7
commit 0db7796c62
3 changed files with 15 additions and 19 deletions

View File

@ -80,7 +80,7 @@ public class BpmTimerFiredEventListener extends AbstractFlowableEngineEventListe
BpmUserTaskTimeoutActionEnum userTaskTimeoutAction = BpmUserTaskTimeoutActionEnum.actionOf(timeoutAction); BpmUserTaskTimeoutActionEnum userTaskTimeoutAction = BpmUserTaskTimeoutActionEnum.actionOf(timeoutAction);
if (userTaskTimeoutAction != null) { if (userTaskTimeoutAction != null) {
// 查询超时未处理的任务 TODO 加签的情况会不会有问题 ??? // 查询超时未处理的任务 TODO 加签的情况会不会有问题 ???
List<Task> taskList = bpmTaskService.getAssignedTaskListByConditions(processInstanceId, null, taskDefKey); List<Task> taskList = bpmTaskService.getTaskListByProcessInstanceIdAndAssigned(processInstanceId, null, taskDefKey);
taskList.forEach(task -> { taskList.forEach(task -> {
// 自动提醒 // 自动提醒
if (userTaskTimeoutAction == BpmUserTaskTimeoutActionEnum.AUTO_REMINDER) { if (userTaskTimeoutAction == BpmUserTaskTimeoutActionEnum.AUTO_REMINDER) {

View File

@ -135,7 +135,7 @@ public interface BpmTaskService {
* @param executionId execution Id * @param executionId execution Id
* @param taskDefineKey 任务定义 Key * @param taskDefineKey 任务定义 Key
*/ */
List<Task> getAssignedTaskListByConditions(String processInstanceId, String executionId, String taskDefineKey); List<Task> getTaskListByProcessInstanceIdAndAssigned(String processInstanceId, String executionId, String taskDefineKey);
/** /**
* 获取当前任务的可回退的 UserTask 集合 * 获取当前任务的可回退的 UserTask 集合

View File

@ -5,6 +5,7 @@ import cn.hutool.core.util.ArrayUtil;
import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil; 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.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.date.DateUtils; import cn.iocoder.yudao.framework.common.util.date.DateUtils;
import cn.iocoder.yudao.framework.common.util.number.NumberUtils; import cn.iocoder.yudao.framework.common.util.number.NumberUtils;
@ -353,34 +354,30 @@ public class BpmTaskServiceImpl implements BpmTaskService {
return; return;
} else if (userTaskRejectHandlerType == BpmUserTaskRejectHandlerType.FINISH_PROCESS_BY_REJECT_RATIO) { } else if (userTaskRejectHandlerType == BpmUserTaskRejectHandlerType.FINISH_PROCESS_BY_REJECT_RATIO) {
// 3.3 按拒绝人数比例终止流程 // 3.3 按拒绝人数比例终止流程
// TODO @jason建议抛出系统异常
if (!flowElement.hasMultiInstanceLoopCharacteristics()) { 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()) Execution execution = runtimeService.createExecutionQuery().processInstanceId(task.getProcessInstanceId())
.executionId(task.getExecutionId()).singleResult(); .executionId(task.getExecutionId()).singleResult();
// 获取并行任务总数 TODO @jason这个注释其实挪到 Execution execution 前面好更有整体性
Integer nrOfInstances = runtimeService.getVariable(execution.getParentId(), "nrOfInstances", Integer.class); Integer nrOfInstances = runtimeService.getVariable(execution.getParentId(), "nrOfInstances", Integer.class);
// 获取未完成任务列表 // 获取未完成任务列表
List<Task> taskList = getAssignedTaskListByConditions(task.getProcessInstanceId(), null, List<Task> taskList = getTaskListByProcessInstanceIdAndAssigned(task.getProcessInstanceId(), null,
task.getTaskDefinitionKey()); task.getTaskDefinitionKey());
// 获取已经拒绝的任务数 // 获取已经拒绝的任务数
int rejectNumber = 0; Integer rejectNumber = getSumValue(taskList,
// TODO @jason: CollectionUtils.getSumValue() 替代 item -> Objects.equals(BpmTaskStatusEnum.REJECT.getStatus(), FlowableUtils.getTaskStatus(item)) ? 1 : 0,
for (Task item : taskList) { Integer::sum, 0);
if (Objects.equals(BpmTaskStatusEnum.REJECT.getStatus(), FlowableUtils.getTaskStatus(item))) { // // TODO @jason如果这样的话后续会不会在已完成里面查询不到哈重要
rejectNumber ++; // // 拒绝任务后,任务分配人清空但不能完成任务
} // taskService.setAssignee(task.getId(), "");
}
// TODO @jason如果这样的话后续会不会在已完成里面查询不到哈重要
// 拒绝任务后,任务分配人清空但不能完成任务
taskService.setAssignee(task.getId(), "");
// 不是所有人拒绝返回 TODO 后续需要做按拒绝人数比例来判断 // 不是所有人拒绝返回 TODO 后续需要做按拒绝人数比例来判断
if (!Objects.equals(nrOfInstances, rejectNumber)) { if (!Objects.equals(nrOfInstances, rejectNumber)) {
return; return;
} }
} }
// 3.3 其他情况 终止流程 TODO 后续可能会增加处理类型 // 3.4 其他情况 终止流程 TODO 后续可能会增加处理类型
processInstanceService.updateProcessInstanceReject(instance.getProcessInstanceId(), reqVO.getReason()); processInstanceService.updateProcessInstanceReject(instance.getProcessInstanceId(), reqVO.getReason());
} }
@ -482,9 +479,8 @@ public class BpmTaskServiceImpl implements BpmTaskService {
return taskService.createTaskQuery().taskId(id).includeTaskLocalVariables().singleResult(); return taskService.createTaskQuery().taskId(id).includeTaskLocalVariables().singleResult();
} }
// TODO @jason改成 getTaskListByProcessInstanceIdAndAssigned其它条件就不写了主要考虑还是动名词
@Override @Override
public List<Task> getAssignedTaskListByConditions(String processInstanceId, String executionId, String defineKey) { public List<Task> getTaskListByProcessInstanceIdAndAssigned(String processInstanceId, String executionId, String defineKey) {
Assert.notNull(processInstanceId, "processInstanceId 不能为空"); Assert.notNull(processInstanceId, "processInstanceId 不能为空");
TaskQuery taskQuery = taskService.createTaskQuery().taskAssigned().processInstanceId(processInstanceId).active() TaskQuery taskQuery = taskService.createTaskQuery().taskAssigned().processInstanceId(processInstanceId).active()
.includeTaskLocalVariables(); .includeTaskLocalVariables();