diff --git a/PARR.API/Controllers/V1/AgentTaskController.cs b/PARR.API/Controllers/V1/AgentTaskController.cs index 799e28c2..793087a9 100644 --- a/PARR.API/Controllers/V1/AgentTaskController.cs +++ b/PARR.API/Controllers/V1/AgentTaskController.cs @@ -1,5 +1,4 @@ -using AutoMapper; -using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; using PARR.API.Contracts.V1; using PARR.API.Contracts.V1.Requests.Queries; @@ -18,21 +17,18 @@ namespace PARR.API.Controllers.V1 /// public class AgentTaskController : BaseApiController { - private readonly IMapper mapper; private readonly IClientService clientService; private readonly ITemplateService templateService; private readonly IEsppScheduleTransformService esppScheduleTransformService; private readonly ILogger logger; public AgentTaskController( - IMapper mapper, IClientService clientService, ITemplateService templateService, IEsppScheduleTransformService esppScheduleTransformService, ILogger logger ) { - this.mapper = mapper; this.clientService = clientService; this.templateService = templateService; this.esppScheduleTransformService = esppScheduleTransformService; @@ -59,12 +55,13 @@ namespace PARR.API.Controllers.V1 var date = request.Date ?? DateTimeOffset.UtcNow; - //Агент получает задания, если `IsAgent = true`, шаблон и расписания активны, и статус синхронизации шаблона и расписания `= Ok`, и `NextRun = сегодня`. + //Агент получает задания, если `IsAgent = true`, шаблон и расписания активны, и статус синхронизации шаблона и расписания `= Ok`, и `NextRun = сегодня`, так же если у ApplicationInWork есть расписание. // С одним IP может быть несколько информационных систем, так что может быть несколько хостов var templates = await templateService.Get() .Include(t => t.RobotConfigurations) .Include(t => t.ApplicationsInWork) + .ThenInclude(t => t!.EsppSchValues) .Include(t => t.Host) .Where(t => t.Host!.IP == ip && t.ApplicationsInWork!.IsAgent == true @@ -72,14 +69,12 @@ namespace PARR.API.Controllers.V1 && t.IsActiveSchedule == true && t.ApplicationsInWork!.NextRun.DateTime.Date == date.Date.Date && t.RobotConfigurations.All(c => c.TaskStatusCode == (int)TaskStatusEnum.Ok) + && t.ApplicationsInWork.EsppSchValues.Any() ).ToListAsync(); if (!templates.Any()) return NoContent(); - // запросить расписание на день для каждого шаблона и сформировать из него список - //TODO: идти в appInWorks и отуда формировать список заданий. Так же, как делать если время у заданий совпадает? - var response = new AgentTaskMinResponse { Scheduled = new List() @@ -91,20 +86,25 @@ namespace PARR.API.Controllers.V1 if (!templateSchedule.Any()) { - logger.LogWarning($"Запросили рапсисание для агента по LastRun и вернулся пустой список! Такого не должно быть! " + + logger.LogWarning($"Запросили раписание для агента по LastRun и вернулся пустой список! Такого не должно быть! " + $"ApplicationInWorkId: {template.ApplicationInWorkId}, latRun: {template.ApplicationsInWork!.LastRun}, NextRun: {template.ApplicationsInWork!.NextRun}, ip: {ip}, date: {date}"); continue; } - // TODO: проверку что в бд есть поля AgentName, AgentScript + if (string.IsNullOrEmpty(template.ApplicationsInWork.AgentName) || string.IsNullOrEmpty(template.ApplicationsInWork.AgentScript)) + { + logger.LogWarning($"Запросили задание для агента с пустыми значениями AgentName || AgentScript. Такого не должно быть! " + + $"ApplicationInWorkId: {template.ApplicationInWorkId}, AgentName: {template.ApplicationsInWork.AgentName}, AgentScript: {template.ApplicationsInWork.AgentScript} , ip: {ip}, date: {date}"); + continue; + } + templateSchedule.ForEach(item => response.Scheduled.Add(new AgentTaskMinScheduleResponse { Name = template.ApplicationsInWork!.AgentName, Script = template.ApplicationsInWork!.AgentScript, StartAt = item })); } - // отсортировать потом по дате + if (!response.Scheduled.Any()) + return NoContent(); - // минимальный респонс - - return Ok(response); + return Ok(response.Scheduled.OrderBy(t => t.StartAt)); } }