From e5bc42741c71aaebfac762e670074a2436e737f9 Mon Sep 17 00:00:00 2001 From: Mikhail Trubnikov Date: Wed, 21 Jan 2026 16:28:17 +1000 Subject: [PATCH] =?UTF-8?q?feat(templateDistributor):=20=D0=B7=D0=B0=D0=B3?= =?UTF-8?q?=D0=BE=D1=82=D0=BE=D0=B2=D0=BA=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../V1/Requests/DistributeRequest.cs | 2 +- .../Controllers/V1/DistributorController.cs | 6 +- .../Validators/DistributeRequestValidator.cs | 25 +- PARR.BLL/Domain/Mq/TemplateDistributorMq.cs | 4 +- .../ITemplateDistributor.cs | 18 +- .../MqTemplateDistributor.cs | 10 +- .../Services/IValidatorService.cs | 2 +- .../Services/ValidatorService.cs | 38 +- .../TemplateDistributor.cs | 416 +----------------- PARR.TemplateDistributorWorker/Worker.cs | 12 +- docker-compose.template-distributor.yml | 2 +- 11 files changed, 65 insertions(+), 470 deletions(-) diff --git a/PARR.API/Contracts/V1/Requests/DistributeRequest.cs b/PARR.API/Contracts/V1/Requests/DistributeRequest.cs index 26b81422..1930a6b4 100644 --- a/PARR.API/Contracts/V1/Requests/DistributeRequest.cs +++ b/PARR.API/Contracts/V1/Requests/DistributeRequest.cs @@ -2,6 +2,6 @@ { public class DistributeRequest { - public Guid ApplicationInWorkId { get; set; } + public Guid JobGroupId { get; set; } } } diff --git a/PARR.API/Controllers/V1/DistributorController.cs b/PARR.API/Controllers/V1/DistributorController.cs index f102f938..31975fca 100644 --- a/PARR.API/Controllers/V1/DistributorController.cs +++ b/PARR.API/Controllers/V1/DistributorController.cs @@ -36,7 +36,7 @@ namespace PARR.API.Controllers.V1 /// - /// Перераспределить шаблоны для регламентной работы + /// Перераспределить шаблоны для группы работ /// /// [HttpPost(ApiRoutes.Distributor.Distribute)] @@ -48,7 +48,7 @@ namespace PARR.API.Controllers.V1 var requestToMq = new TemplateDistributorMq { - ApplicationInWorkId = request.ApplicationInWorkId + JobGroupId = request.JobGroupId }; var msg = JsonSerializer.Serialize(requestToMq); @@ -58,7 +58,7 @@ namespace PARR.API.Controllers.V1 if (sendResult.IsSuccess) return Created("", new Response(null, true, new List(), "Отправлен запрос на перераспределение регламентных работ.")); else - return BadRequest(new Response(false, new List { new ErrorModel { Message="Ошибка при отправке данных."} })); + return BadRequest(new Response(false, new List { new ErrorModel { Message = "Ошибка при отправке данных." } })); } } diff --git a/PARR.API/Validators/DistributeRequestValidator.cs b/PARR.API/Validators/DistributeRequestValidator.cs index 2f051a46..f7826eae 100644 --- a/PARR.API/Validators/DistributeRequestValidator.cs +++ b/PARR.API/Validators/DistributeRequestValidator.cs @@ -1,24 +1,27 @@ using FluentValidation; +using Microsoft.EntityFrameworkCore; using PARR.API.Contracts.V1.Requests; -using PARR.DAL.Services.Interfaces; +using PARR.DAL.Services.Interfaces.Job; namespace PARR.API.Validators { public class DistributeRequestValidator : AbstractValidator { - private readonly IApplicationsInWorkService applicationsInWorkService; - - public DistributeRequestValidator(IApplicationsInWorkService applicationsInWorkService) + public DistributeRequestValidator(IJobGroupService jobGroupService) { - this.applicationsInWorkService = applicationsInWorkService; - - - RuleFor(t => t.ApplicationInWorkId).NotEmpty().MustAsync(async (entity, value, c) => + RuleFor(t => t.JobGroupId).NotEmpty().MustAsync(async (entity, value, c) => { - var appInWork = await applicationsInWorkService.GetAsync(value); - - return appInWork != null; + return await jobGroupService.Get().FirstOrDefaultAsync(t => t.Id == value) != null; }).WithMessage("Недопустимое значение"); + + RuleFor(t => t.JobGroupId).NotEmpty().MustAsync(async (entity, value, c) => + { + var jobGroup = await jobGroupService.Get() + .Include(t => t.DistributionConfig) + .FirstOrDefaultAsync(t => t.Id == value); + + return jobGroup != null && jobGroup.IsAutoDistributionEnabled && jobGroup.DistributionConfig != null; + }).WithMessage("Отсутствуют настройки автораспределения"); } } } diff --git a/PARR.BLL/Domain/Mq/TemplateDistributorMq.cs b/PARR.BLL/Domain/Mq/TemplateDistributorMq.cs index 38bcfd5e..82bb7d4a 100644 --- a/PARR.BLL/Domain/Mq/TemplateDistributorMq.cs +++ b/PARR.BLL/Domain/Mq/TemplateDistributorMq.cs @@ -1,10 +1,10 @@ namespace PARR.BLL.Domain.Mq { /// - /// Модель в MQ, обновления расписаний шаблонов связанных с РР (для TemplateDistributor) + /// Модель в MQ, распределить шаблоны для JobGroupId (для TemplateDistributor) /// public class TemplateDistributorMq { - public Guid ApplicationInWorkId { get; set; } + public Guid JobGroupId { get; set; } } } diff --git a/PARR.TemplateDistributor/ITemplateDistributor.cs b/PARR.TemplateDistributor/ITemplateDistributor.cs index c28dd8ac..a819104d 100644 --- a/PARR.TemplateDistributor/ITemplateDistributor.cs +++ b/PARR.TemplateDistributor/ITemplateDistributor.cs @@ -1,22 +1,12 @@ -using PARR.DAL.Models; - -namespace PARR.TemplateDistributor +namespace PARR.TemplateDistributor { public interface ITemplateDistributor { /// - /// Формирует расписание запуска для шаблонов относительно одной РР (без сохранения в БД), (реализует оба режима распределения РР) + /// Обновляет NextRun (сохраняет в БД) /// - /// - /// + /// /// - Task> DistributeTemplateAsync(List