From d720b70c4c3c3049914281602906426209c68bd9 Mon Sep 17 00:00:00 2001 From: Mikhail Trubnikov Date: Wed, 18 Oct 2023 08:46:35 +1000 Subject: [PATCH] =?UTF-8?q?feat(api):=20=D0=94=D0=BE=D0=B4=D0=B5=D0=BB?= =?UTF-8?q?=D0=B0=D0=BB=20=D0=BF=D0=BE=D0=BB=D1=83=D1=87=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D0=B5=20=D0=B7=D0=B0=D0=B4=D0=B0=D0=BD=D0=B8=D1=8F=20=D0=B4?= =?UTF-8?q?=D0=BB=D1=8F=20=D0=B0=D0=B3=D0=B5=D0=BD=D1=82=D0=B0.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/V1/AgentTaskController.cs | 30 +++++++++---------- 1 file changed, 15 insertions(+), 15 deletions(-) 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)); } }