diff --git a/PARR.API/Contracts/V1/ApiRoutes.cs b/PARR.API/Contracts/V1/ApiRoutes.cs
index dc91e5c7..4af58ae9 100644
--- a/PARR.API/Contracts/V1/ApiRoutes.cs
+++ b/PARR.API/Contracts/V1/ApiRoutes.cs
@@ -356,6 +356,16 @@
#endregion
+
+ #region Distributor
+
+ public static class Distributor
+ {
+ public const string Distribute = Base + "/distributor/";
+ }
+
+ #endregion
+
}
}
diff --git a/PARR.API/Contracts/V1/Requests/DistributeRequest.cs b/PARR.API/Contracts/V1/Requests/DistributeRequest.cs
new file mode 100644
index 00000000..26b81422
--- /dev/null
+++ b/PARR.API/Contracts/V1/Requests/DistributeRequest.cs
@@ -0,0 +1,7 @@
+namespace PARR.API.Contracts.V1.Requests
+{
+ public class DistributeRequest
+ {
+ public Guid ApplicationInWorkId { get; set; }
+ }
+}
diff --git a/PARR.API/Contracts/V1/Responses/TemplateResponse.cs b/PARR.API/Contracts/V1/Responses/TemplateResponse.cs
index bdeb1b84..d3bc86ae 100644
--- a/PARR.API/Contracts/V1/Responses/TemplateResponse.cs
+++ b/PARR.API/Contracts/V1/Responses/TemplateResponse.cs
@@ -23,6 +23,7 @@
public DateTimeOffset? LastRun { get; set; }
public DateTimeOffset NextRun { get; set; }
+ public bool IsAutoDistributionEnabled { get; set; }
public HostTemplateResponse? Host { get; set; }
diff --git a/PARR.API/Controllers/V1/DistributorController.cs b/PARR.API/Controllers/V1/DistributorController.cs
new file mode 100644
index 00000000..0a529956
--- /dev/null
+++ b/PARR.API/Controllers/V1/DistributorController.cs
@@ -0,0 +1,65 @@
+using FluentValidation;
+using Microsoft.AspNetCore.Authorization;
+using Microsoft.AspNetCore.Mvc;
+using PARR.API.Contracts.V1;
+using PARR.API.Contracts.V1.Requests;
+using PARR.API.Contracts.V1.Responses.Base;
+using PARR.API.Controllers.V1.Base;
+using PARR.API.Settings;
+using PARR.BLL.Domain.Mq;
+using PARR.BLL.Services.Interfaces;
+using PARR.Constants;
+using System.Text.Json;
+
+namespace PARR.API.Controllers.V1
+{
+ ///
+ /// Распределитель РР
+ ///
+ [Authorize(Roles = ParrRoles.Administrator.Role)]
+ public class DistributorController : BaseApiController
+ {
+ private readonly IMqService mqService;
+ private readonly MqSettings mqSettings;
+ private readonly IValidator validator;
+
+ public DistributorController(
+ IMqService mqService,
+ MqSettings mqSettings,
+ IValidator validator
+ )
+ {
+ this.mqService = mqService;
+ this.mqSettings = mqSettings;
+ this.validator = validator;
+ }
+
+
+ ///
+ /// Перераспределить шаблоны для регламентной работы
+ ///
+ ///
+ [HttpPost(ApiRoutes.Distributor.Distribute)]
+ public async Task Distribute([FromBody] DistributeRequest request)
+ {
+ var resultValidate = await validator.ValidateAsync(request);
+ if (!resultValidate.IsValid)
+ return BadRequest(new Response(resultValidate.Errors));
+
+ var requestToMq = new TemplateDistributorMq
+ {
+ ApplicationInWorkId = request.ApplicationInWorkId
+ };
+
+ var msg = JsonSerializer.Serialize(requestToMq);
+
+ var sendResult = mqService.Send(mqSettings.TemplateDistributor, new[] { msg });
+
+ if (sendResult.IsSuccess)
+ return Created("", new Response(null, true, new List(), "Отправлен запрос на перераспределение регламентных работ."));
+ else
+ return BadRequest(new Response(false, new List { new ErrorModel { Message="Ошибка при отправке данных."} }));
+
+ }
+ }
+}
diff --git a/PARR.API/MappingProfiles/DomainToResponseProfile.cs b/PARR.API/MappingProfiles/DomainToResponseProfile.cs
index 937a912c..1101863a 100644
--- a/PARR.API/MappingProfiles/DomainToResponseProfile.cs
+++ b/PARR.API/MappingProfiles/DomainToResponseProfile.cs
@@ -37,7 +37,8 @@ namespace PARR.API.MappingProfiles
//.ForMember(d => d.LastRun, o => o.MapFrom(s => s.ApplicationsInWork!.LastRun))
.ForMember(d => d.NextRun, o => o.MapFrom(s => s.NextRun))
.ForMember(d => d.LastRun, o => o.MapFrom(s => s.LastRun))
- .ForMember(d => d.OrderCount, o => o.MapFrom(s => s.Orders.Count()));
+ .ForMember(d => d.OrderCount, o => o.MapFrom(s => s.Orders.Count()))
+ .ForMember(d=>d.IsAutoDistributionEnabled, o=>o.MapFrom(s=>s.ApplicationsInWork!.IsAutoDistributionEnabled));
// === Template ===
diff --git a/PARR.API/Validators/DistributeRequestValidator.cs b/PARR.API/Validators/DistributeRequestValidator.cs
new file mode 100644
index 00000000..2f051a46
--- /dev/null
+++ b/PARR.API/Validators/DistributeRequestValidator.cs
@@ -0,0 +1,24 @@
+using FluentValidation;
+using PARR.API.Contracts.V1.Requests;
+using PARR.DAL.Services.Interfaces;
+
+namespace PARR.API.Validators
+{
+ public class DistributeRequestValidator : AbstractValidator
+ {
+ private readonly IApplicationsInWorkService applicationsInWorkService;
+
+ public DistributeRequestValidator(IApplicationsInWorkService applicationsInWorkService)
+ {
+ this.applicationsInWorkService = applicationsInWorkService;
+
+
+ RuleFor(t => t.ApplicationInWorkId).NotEmpty().MustAsync(async (entity, value, c) =>
+ {
+ var appInWork = await applicationsInWorkService.GetAsync(value);
+
+ return appInWork != null;
+ }).WithMessage("Недопустимое значение");
+ }
+ }
+}