in dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/DataAnalysisServiceImpl.java [304:357]
public TaskCountDto countTaskStates(User loginUser, StatisticsStateRequest statisticsStateRequest) {
Set<Integer> projectIds = resourcePermissionCheckService
.userOwnedResourceIdsAcquisition(AuthorizationType.PROJECTS, loginUser.getId(), log);
if (projectIds.isEmpty()) {
return new TaskCountDto(Collections.emptyList());
}
String projectName = statisticsStateRequest.getProjectName();
String workflowName = statisticsStateRequest.getWorkflowName();
String taskName = statisticsStateRequest.getTaskName();
Long projectCode = statisticsStateRequest.getProjectCode();
Long workflowCode = statisticsStateRequest.getWorkflowCode();
Long taskCode = statisticsStateRequest.getTaskCode();
Integer model = Constants.QUERY_ALL_ON_SYSTEM;
if (!StringUtils.isBlank(projectName) || null != projectCode) {
model = Constants.QUERY_ALL_ON_PROJECT;
}
if (!StringUtils.isBlank(workflowName) || null != workflowCode) {
model = Constants.QUERY_ALL_ON_WORKFLOW;
}
if (!StringUtils.isBlank(taskName) || null != taskCode) {
model = Constants.QUERY_ALL_ON_TASK;
}
try {
if (null == taskCode || null == workflowCode || null == projectCode) {
projectCode = projectMapper.queryByName(projectName).getCode();
workflowCode = workflowDefinitionMapper.queryByDefineName(projectCode, workflowName).getCode();
// todo The comment can be canceled after repairing the duplicate taskname of the existing workflow
// taskCode = relationMapper.queryTaskCodeByTaskName(workflowCode, taskName);
}
} catch (Exception e) {
log.warn(e.getMessage());
}
Date date = new Date();
Date startTime = statisticsStateRequest.getStartTime() == null ? DateUtils.addMonths(date, -1)
: statisticsStateRequest.getStartTime();
Date endTime = statisticsStateRequest.getEndTime() == null ? date : statisticsStateRequest.getEndTime();
Optional<List<ExecuteStatusCount>> startTimeStates = Optional.ofNullable(
taskInstanceMapper.countTaskInstanceStateByProjectIdsV2(startTime, endTime, projectIds));
List<TaskExecutionStatus> needRecountState = setOptional(startTimeStates);
if (needRecountState.size() == 0) {
return new TaskCountDto(startTimeStates.get());
}
List<ExecuteStatusCount> recounts = this.taskInstanceMapper
.countTaskInstanceStateByProjectCodesAndStatesBySubmitTimeV2(startTime, endTime, projectCode,
workflowCode, taskCode, model, projectIds,
needRecountState);
startTimeStates.orElseGet(ArrayList::new).addAll(recounts);
List<ExecuteStatusCount> executeStatusCounts = startTimeStates.orElse(null);
return new TaskCountDto(executeStatusCounts);
}