feat(api,templateActivator): обновлена логика templateActivator

This commit is contained in:
Mikhail Trubnikov
2025-11-26 14:34:03 +10:00
parent 2823823784
commit 276f534636
19 changed files with 520 additions and 313 deletions

View File

@@ -416,9 +416,12 @@
/// </summary>
public static class TemplateActivator
{
public const string SendRequest = Base + "/jobs/" + jobId + "/template-activator";
public const string SendRequest = Base + "/templates/change-state";
public const string jobId = "{jobId}";
//public const string SendRequest = Base + "/jobs/" + jobId + "/template-activator";
//public const string jobId = "{jobId}";
}
#endregion

View File

@@ -4,9 +4,34 @@ namespace PARR.API.Contracts.V1.Requests
{
public class TemplateActivatorRequest
{
///// <summary>
///// Действие по активации/деактивации
///// </summary>
//public TemplateActivatorActionsEnum Action { get; set; }
/// <summary>
/// Действие по активации/деактивации
/// ИД объекта, JobGroupId, JobId, TemplateId
/// </summary>
public TemplateActivatorActionsEnum Action { get; set; }
public Guid Id { get; set; }
/// <summary>
/// Тип объекта
/// </summary>
public SyncTaskEntityTypeEnum EntityType { get; set; }
///// <summary>
///// Учитывать неиспользованные шаблоны
///// </summary>
//public bool AllowUnused { get; set; } = false;
/// <summary>
/// Объект воздейстивя (шаблон, расписание)
/// </summary>
public TemplateActivatorEsppObjectTypesEnum EsppObject { get; set; }
/// <summary>
/// Новое состояние объекта
/// </summary>
public bool NewState { get; set; }
}
}

View File

@@ -56,7 +56,7 @@ namespace PARR.API.Controllers.V1
//если успех, изменяем статус задания на успех
if (request.RobotStatusCode == RobotStatusEnum.Complete)
robotConfigurationService.ChangeTaskStatus(TaskStatusEnum.Ok, ref config);
robotConfigurationService.ChangeTaskStatus(TaskStatusEnum.Ok, config);
if (!await robotConfigurationService.CommitAsync())
return BadRequest("Ошибка при изменении статуса работы робота.");

View File

@@ -50,25 +50,20 @@ namespace PARR.API.Controllers.V1
/// <summary>
/// Отправить запрос на активацию/деактивацию шаблонов/расписаний
/// </summary>
/// <param name="jobId"></param>
/// <returns></returns>
[HttpPost(ApiRoutes.TemplateActivator.SendRequest)]
public async Task<IActionResult> SendRequest([FromRoute] Guid jobId, [FromBody] TemplateActivatorRequest request)
public async Task<IActionResult> SendRequest([FromBody] TemplateActivatorRequest request)
{
var resultValidate = await validator.ValidateAsync(request);
if (!resultValidate.IsValid)
return BadRequest(new Response(resultValidate.Errors));
var job = await jobService.GetAsync(jobId);
if (job == null)
return BadRequest(new Response(false, new List<ErrorModel> { new ErrorModel { FieldName = nameof(jobId), Message = "Некорректное значение" } }));
var mqRequest = new TemplateActivatorMq
{
JobId = jobId,
Action = request.Action,
Id = request.Id,
EntityType = request.EntityType,
EsppObject = request.EsppObject,
NewState = request.NewState,
HistoryInitiator = new HistoryInitiator { InitiatorIp = clientService.GetClientIp()?.ToString(), InitiatorParrComponentId = ParrComponentsEnum.Api }
};

View File

@@ -118,6 +118,9 @@ namespace PARR.API.Controllers.V1
[HttpPut(ApiRoutes.Template.ChangeState)]
public async Task<IActionResult> ChangeState([FromRoute] Guid id, [FromBody] TemplateChangeStateRequest request)
{
//TODO:!!! Возможно тут не надо сразу менять, а отправить запрос в TemplateActivator и пусть он сам занимается своей работой!!!
var template = await templateService.GetWithIncludes()
.Include(t => t.Unit).ThenInclude(t => t!.UnitValues).ThenInclude(t => t.Field)
.Include(t => t.Unit).ThenInclude(t => t!.UnitValues).ThenInclude(t => t.Value)
@@ -135,16 +138,16 @@ namespace PARR.API.Controllers.V1
{
template.IsActiveTemplate = request.IsActiveTemplate;
//необходимо обновить шаблон
var config = robotConfigurationService.GetFromTemplateByRobotCode(RobotsEnum.TemplateOrder, ref template);
robotConfigurationService.ChangeTaskStatus(TaskStatusEnum.Updating, ref config);
var config = robotConfigurationService.GetFromTemplateByRobotCode(RobotsEnum.TemplateOrder, template);
robotConfigurationService.ChangeTaskStatus(TaskStatusEnum.Updating, config);
}
if (template.IsActiveSchedule != request.IsActiveSchedule)
{
template.IsActiveSchedule = request.IsActiveSchedule;
//необходимо обновить расписание
var config = robotConfigurationService.GetFromTemplateByRobotCode(RobotsEnum.ScheduleOrder, ref template);
robotConfigurationService.ChangeTaskStatus(TaskStatusEnum.Updating, ref config);
var config = robotConfigurationService.GetFromTemplateByRobotCode(RobotsEnum.ScheduleOrder, template);
robotConfigurationService.ChangeTaskStatus(TaskStatusEnum.Updating, config);
}
if (!await templateService.CommitAsync(new HistoryInitiator { InitiatorComment = "Изменён статус шаблона/расписания", InitiatorIp = clientService.GetClientIp()?.ToString(), InitiatorParrComponentId = ParrComponentsEnum.Api }))

View File

@@ -1,16 +1,43 @@
using FluentValidation;
using PARR.API.Contracts.V1.Requests;
using PARR.Constants;
using PARR.DAL.Services.Interfaces;
using PARR.DAL.Services.Interfaces.Job;
namespace PARR.API.Validators
{
public class TemplateActivatorRequestValidator : AbstractValidator<TemplateActivatorRequest>
{
public TemplateActivatorRequestValidator()
public TemplateActivatorRequestValidator(
ITemplateService templateService,
IJobService jobService,
IJobGroupService jobGroupService
)
{
RuleFor(t => t.Action).Must(action =>
Enum.IsDefined(typeof(TemplateActivatorActionsEnum), action)
).WithMessage("Некорректное значение action");
RuleFor(t => t.EntityType).Must(type =>
Enum.IsDefined(typeof(SyncTaskEntityTypeEnum), type)
).WithMessage("Некорректное значение EntityType");
RuleFor(t => t.EsppObject).Must(obj =>
Enum.IsDefined(typeof(TemplateActivatorEsppObjectTypesEnum), obj)
).WithMessage("Некорректное значение EsppObject");
RuleFor(t => t.Id)
.MustAsync(async (entity, value, c) =>
{
switch (entity.EntityType)
{
case SyncTaskEntityTypeEnum.JobGroup:
return await jobGroupService.GetAsync(value) != null;
case SyncTaskEntityTypeEnum.Job:
return await jobService.GetAsync(value) != null;
case SyncTaskEntityTypeEnum.Template:
return await templateService.GetAsync(value) != null;
}
return false;
})
.WithMessage("Некорректное значение Id");
}
}
}

View File

@@ -55,7 +55,7 @@
"HostName": "parr-rabbitmq",
"QueueName": "parr-template-activator",
"User": "template_activator_writer",
"Password": "Gfkjhsdg*%fsdf"
"Password": "Gfkjhsdg\\*%fsdf"
},
"TemplatesMatcher": {
"HostName": "parr-rabbitmq",