feat(api,templateActivator): обновлена логика templateActivator
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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; }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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("Ошибка при изменении статуса работы робота.");
|
||||
|
||||
@@ -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 }
|
||||
};
|
||||
|
||||
|
||||
@@ -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 }))
|
||||
|
||||
@@ -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");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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",
|
||||
|
||||
Reference in New Issue
Block a user