public PaginationQueryDto Query(PaginationQueryTaskStatusInput input) { if (input == null) { throw new ArgumentNullException($"{nameof(input)} should not be null."); } PaginationQueryDto output; var status = input.Status?.ToLower(); var keyword = input.Keyword?.ToLower(); List <Core.Entities.Task> tasks; List <string> taskIds; List <Core.Entities.TaskStatus> taskStatuses; Expression <Func <Core.Entities.TaskStatus, bool> > where = null; if (string.IsNullOrWhiteSpace(keyword)) { if (!string.IsNullOrEmpty(status) && "all" != status) { where = d => d.Status.ToLower() == status; } output = DbContext.TaskStatus.PageList <Core.Entities.TaskStatus, long, long>(input, where, d => d.Id); taskStatuses = (List <Core.Entities.TaskStatus>)output.Result; taskIds = taskStatuses.Select(t => t.TaskId).ToList(); var ids = taskIds; tasks = DbContext.Task.Where(t => ids.Contains(t.Id)).ToList(); } else { tasks = DbContext.Task.Where(t => t.Name.ToLower().Contains(keyword)).ToList(); taskIds = tasks.Select(t => t.Id).ToList(); if (!string.IsNullOrEmpty(status) && "all" != status) { var ids = taskIds; where = d => d.Status.ToLower() == status && ids.Contains(d.TaskId); } else { var ids = taskIds; where = d => ids.Contains(d.TaskId); } output = DbContext.TaskStatus.PageList <Core.Entities.TaskStatus, long, long>(input, where, d => d.Id); taskStatuses = (List <Core.Entities.TaskStatus>)output.Result; } var taskStatusOutputs = new List <TaskStatusDto>(); foreach (var taskStatus in taskStatuses) { var taskStatusOutput = new TaskStatusDto(); taskStatusOutput.Name = tasks.FirstOrDefault(t => t.Id == taskStatus.TaskId)?.Name; taskStatusOutput.AvgDownloadSpeed = taskStatus.AvgDownloadSpeed; taskStatusOutput.AvgPipelineSpeed = taskStatus.AvgDownloadSpeed; taskStatusOutput.AvgProcessorSpeed = taskStatus.AvgDownloadSpeed; taskStatusOutput.Error = taskStatus.Error; taskStatusOutput.Identity = taskStatus.Identity; taskStatusOutput.LastModificationTime = taskStatus.LastModificationTime?.ToString("yyyy/MM/dd HH:mm:ss"); taskStatusOutput.Left = taskStatus.Left; taskStatusOutput.NodeId = taskStatus.NodeId; taskStatusOutput.Status = taskStatus.Status; taskStatusOutput.Success = taskStatus.Success; taskStatusOutput.TaskId = taskStatus.TaskId; taskStatusOutput.Thread = taskStatus.Thread; taskStatusOutput.Total = taskStatus.Total; taskStatusOutputs.Add(taskStatusOutput); } output.Result = taskStatusOutputs; return(output); }
public IActionResult Find([FromQuery] PaginationQueryTaskStatusInput input) { return(Success(_taskStatusAppService.Query(input))); }