From 49a04752bb2fd9d504d865903a91391293342c92 Mon Sep 17 00:00:00 2001 From: Mikhail Trubnikov Date: Tue, 3 Oct 2023 16:54:01 +1000 Subject: [PATCH] =?UTF-8?q?feat(api):=20=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2?= =?UTF-8?q?=D0=B8=D0=BB=20=D1=80=D0=B5=D1=81=D0=BF=D0=BE=D0=BD=D1=81=20?= =?UTF-8?q?=D0=B4=D0=BB=D1=8F=20=D1=88=D0=B0=D0=B1=D0=BB=D0=BE=D0=BD=D0=B0?= =?UTF-8?q?=20=D0=BF=D0=BE=D0=B4=20=D0=B8=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5?= =?UTF-8?q?=D0=BD=D0=BD=D1=83=D1=8E=20=D1=82=D0=B0=D0=B1=D0=BB=D0=B8=D1=86?= =?UTF-8?q?=D1=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../V1/Responses/RobotStatusResponse.cs | 9 ++++++ .../V1/Responses/TemplateResponse.cs | 5 +++ PARR.API/Controllers/V1/TemplateController.cs | 31 ++++++++++++++++--- .../DomainToResponseProfile.cs | 2 ++ .../Implementations/TemplateService.cs | 1 + 5 files changed, 44 insertions(+), 4 deletions(-) create mode 100644 PARR.API/Contracts/V1/Responses/RobotStatusResponse.cs diff --git a/PARR.API/Contracts/V1/Responses/RobotStatusResponse.cs b/PARR.API/Contracts/V1/Responses/RobotStatusResponse.cs new file mode 100644 index 00000000..80811526 --- /dev/null +++ b/PARR.API/Contracts/V1/Responses/RobotStatusResponse.cs @@ -0,0 +1,9 @@ +namespace PARR.API.Contracts.V1.Responses +{ + public class RobotStatusResponse + { + public int Code { get; set; } + public string? Name { get; set; } + public string? Description { get; set; } + } +} diff --git a/PARR.API/Contracts/V1/Responses/TemplateResponse.cs b/PARR.API/Contracts/V1/Responses/TemplateResponse.cs index 385ae085..41f2ce29 100644 --- a/PARR.API/Contracts/V1/Responses/TemplateResponse.cs +++ b/PARR.API/Contracts/V1/Responses/TemplateResponse.cs @@ -17,6 +17,11 @@ public required string Solution { get; set; } public required string TemplateDuration { get; set; } + public int RobotAttemptsNumber { get; set; } + public DateTimeOffset? RobotLastStatusUpdated { get; set; } + public RobotStatusResponse? RobotStatus { get; set; } + + //work //public required string Title { get; set; } //public required string SlaInterval { get; set; } diff --git a/PARR.API/Controllers/V1/TemplateController.cs b/PARR.API/Controllers/V1/TemplateController.cs index f45713f8..bd20a7b0 100644 --- a/PARR.API/Controllers/V1/TemplateController.cs +++ b/PARR.API/Controllers/V1/TemplateController.cs @@ -104,11 +104,34 @@ namespace PARR.API.Controllers.V1 [HttpGet(ApiRoutes.Template.GetByStatusCode)] public async Task GetByStatus([FromRoute] int statusCode, [FromQuery] RobinQuery query) { - //Тут узкое место, так как возвращается первый, елси будет много роботов, то будет возвращаться им один и тот же элемент. - //нужно вводить статус, что эл уже занят - var template = await templateService.GetWithIncludes() + Template? template = null; + + //1.Поиск шаблонов со `StatusCode` 10 или 20 и `RobotStatusCode` = 11.Находим, **выбрали эту запись, конец**. + //2.Поиск шаблонов со `StatusCode` 10 или 20 и `RobotStatusCode` = 22 + //3.Далее проверяется `RobotLastStatusUpdated`, что время последнего смены статуса не превышает допустимого(берется из настроек, поле `RobotWaitTime`) и что текущая попытка не больше разрешенной(берется из настроек, поле `RobotAttemptsNumber`) - если это так, берется эта запись. + //4.Если `RobotStatusCode` = 22 и `RobotLastStatusUpdated` истекло и `RobotAttemptsNumber` >= допустимому, то ставим `RobotStatusCode`= 33 + + //1. + template = await templateService.GetWithIncludes() .AsSplitQuery() - .FirstOrDefaultAsync(t => t.StatusCode == statusCode); + .FirstOrDefaultAsync(t => t.StatusCode == statusCode && t.RobotStatusCode ==(int)RobotStatusEnum.Wait); + + //if (template == null) + //{ + // // переходим к шагам 2,3 + // template = await templateService.GetWithIncludes() + // .AsSplitQuery() + // //todo + // .FirstOrDefaultAsync(t => t.StatusCode == statusCode && t.RobotStatusCode == (int)RobotStatusEnum.InProgress); + //} + + + + ////Тут узкое место, так как возвращается первый, если будет много роботов, то будет возвращаться им один и тот же элемент. + ////нужно вводить статус, что эл уже занят + // template = await templateService.GetWithIncludes() + // .AsSplitQuery() + // .FirstOrDefaultAsync(t => t.StatusCode == statusCode); if (template == null) return NotFound(); diff --git a/PARR.API/MappingProfiles/DomainToResponseProfile.cs b/PARR.API/MappingProfiles/DomainToResponseProfile.cs index 25c61432..a94dd9ef 100644 --- a/PARR.API/MappingProfiles/DomainToResponseProfile.cs +++ b/PARR.API/MappingProfiles/DomainToResponseProfile.cs @@ -78,6 +78,8 @@ namespace PARR.API.MappingProfiles .ForMember(d => d.Status, o => o.MapFrom(s => s.EkStatus!.Name)) .ForMember(d => d.ResponseArea, o => o.MapFrom(s => s.ResponseArea!.Name)); + CreateMap(); + } } } diff --git a/PARR.DAL/Services/Implementations/TemplateService.cs b/PARR.DAL/Services/Implementations/TemplateService.cs index 91ae35fa..95a2e392 100644 --- a/PARR.DAL/Services/Implementations/TemplateService.cs +++ b/PARR.DAL/Services/Implementations/TemplateService.cs @@ -34,6 +34,7 @@ namespace PARR.DAL.Services.Implementations .ThenInclude(t => t!.ResponseArea) .Include(h => h.Host) .ThenInclude(t => t!.EkStatus) + .Include(r=>r.RobotStatus) .Include(a => a.ApplicationsInWork) .ThenInclude(w => w!.Work) .ThenInclude(t => t!.Tnk)