feat(api): обновлен AppInWorkController под новый респонс, валидация для галки IsAutoDistributionEnabled
This commit is contained in:
@@ -11,10 +11,14 @@ using PARR.API.Contracts.V1.Responses.Base;
|
||||
using PARR.API.Controllers.V1.Base;
|
||||
using PARR.API.Extensions;
|
||||
using PARR.API.Services.Interfaces;
|
||||
using PARR.API.Settings;
|
||||
using PARR.BLL.Domain.Mq;
|
||||
using PARR.BLL.Services.Interfaces;
|
||||
using PARR.Constants;
|
||||
using PARR.DAL.DomainModels;
|
||||
using PARR.DAL.Models;
|
||||
using PARR.DAL.Services.Interfaces;
|
||||
using System.Text.Json;
|
||||
|
||||
namespace PARR.API.Controllers.V1
|
||||
{
|
||||
@@ -27,6 +31,8 @@ namespace PARR.API.Controllers.V1
|
||||
private readonly IValidator<ApplicationInWorkRequest> validator;
|
||||
private readonly IUriService uriService;
|
||||
private readonly ITemplateService templateService;
|
||||
private readonly IMqService mqService;
|
||||
private readonly MqSettings mqSettings;
|
||||
|
||||
public ApplicationInWorkController(
|
||||
ILogger<ApplicationInWorkController> logger,
|
||||
@@ -34,7 +40,9 @@ namespace PARR.API.Controllers.V1
|
||||
IApplicationsInWorkService applicationsInWorkService,
|
||||
IValidator<ApplicationInWorkRequest> validator,
|
||||
IUriService uriService,
|
||||
ITemplateService templateService
|
||||
ITemplateService templateService,
|
||||
IMqService mqService,
|
||||
MqSettings mqSettings
|
||||
)
|
||||
{
|
||||
this.logger = logger;
|
||||
@@ -43,6 +51,8 @@ namespace PARR.API.Controllers.V1
|
||||
this.validator = validator;
|
||||
this.uriService = uriService;
|
||||
this.templateService = templateService;
|
||||
this.mqService = mqService;
|
||||
this.mqSettings = mqSettings;
|
||||
}
|
||||
|
||||
|
||||
@@ -147,7 +157,9 @@ namespace PARR.API.Controllers.V1
|
||||
ShortDescription = request.ShortDescription.Trim(),
|
||||
FullDescription = request.FullDescription.Trim(),
|
||||
Solution = request.Solution.Trim(),
|
||||
NextRun = request.NextRun,
|
||||
//NextRun = request.NextRun,
|
||||
IsAutoDistributionEnabled = request.IsAutoDistributionEnabled,
|
||||
ReferenceDate = request.ReferenceDate,
|
||||
IsAgent = request.IsAgent,
|
||||
AgentName = request.AgentName?.Trim(),
|
||||
AgentTimeOutSec = request.AgentTimeOutSec,
|
||||
@@ -225,13 +237,18 @@ namespace PARR.API.Controllers.V1
|
||||
if (orig == null)
|
||||
return BadRequest(new Response(false, new List<ErrorModel> { new ErrorModel { Message = $"Ошибка при изменении задания на выполнение работ. Не найдено задание с Id: {id}" } }));
|
||||
|
||||
//Расписание было изменено, ниже добавим задание в очередь на обновление расписаний у связанных шаблонов
|
||||
var isScheduleChanged = IsScheduleChanged(orig, request);
|
||||
|
||||
orig.WorkId = request.WorkId;
|
||||
orig.ApplicationId = request.ApplicationId;
|
||||
orig.TemplateDuration = request.TemplateDuration;
|
||||
orig.ShortDescription = request.ShortDescription.Trim();
|
||||
orig.FullDescription = request.FullDescription.Trim();
|
||||
orig.Solution = request.Solution.Trim();
|
||||
orig.NextRun = request.NextRun;
|
||||
//orig.NextRun = request.NextRun;
|
||||
orig.ReferenceDate = request.ReferenceDate;
|
||||
orig.IsAutoDistributionEnabled = request.IsAutoDistributionEnabled;
|
||||
orig.IsAgent = request.IsAgent;
|
||||
orig.AgentName = request.AgentName?.Trim();
|
||||
orig.AgentTimeOutSec = request.AgentTimeOutSec;
|
||||
@@ -270,6 +287,26 @@ namespace PARR.API.Controllers.V1
|
||||
$" {orig.FullDescription}, {orig.Solution}, {orig.NextRun}, {orig.IsAgent}, {orig.AgentName}, {orig.AgentTimeOutSec}, {orig.AgentScript}");
|
||||
|
||||
|
||||
if (isScheduleChanged)
|
||||
{
|
||||
//расписание было обновлено, отправим задание в очередь на перерасчет NextRun
|
||||
var requestToMq = new TemplateDistributorMq
|
||||
{
|
||||
ApplicationInWorkId = id
|
||||
};
|
||||
|
||||
var msg = JsonSerializer.Serialize(requestToMq);
|
||||
|
||||
logger.LogDebug($"Расписание в РР applicationInWorkId: {id} было изменено. Отправляем задание в очередь на перерасчет NextRun");
|
||||
|
||||
var sendResult = mqService.Send(mqSettings.TemplateDistributor, new[] { msg });
|
||||
|
||||
if (sendResult.IsSuccess)
|
||||
logger.LogInformation($"Задание на перерасчет NextRun успешно отправлено в очередь MQ {mqSettings.TemplateDistributor.QueueName}");
|
||||
else
|
||||
logger.LogError($"Ошибка при отправке задания на перерасчет NextRun в очередь MQ {mqSettings.TemplateDistributor.QueueName}");
|
||||
}
|
||||
|
||||
var updatedApplicationInWork = await applicationsInWorkService.Get()
|
||||
.Include(t => t.Application).ThenInclude(t => t!.ApplicationType)
|
||||
.Include(t => t.Work)
|
||||
@@ -322,5 +359,35 @@ namespace PARR.API.Controllers.V1
|
||||
|
||||
return NoContent();
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Проверка, были ли изменения в расписании
|
||||
/// </summary>
|
||||
/// <param name="orig"></param>
|
||||
/// <param name="request"></param>
|
||||
/// <returns></returns>
|
||||
private bool IsScheduleChanged(ApplicationsInWork orig, ApplicationInWorkRequest request)
|
||||
{
|
||||
var isScheduleChanged = false;
|
||||
|
||||
if (orig.ReferenceDate != request.ReferenceDate)
|
||||
isScheduleChanged = true;
|
||||
|
||||
if (request.Schedule.Count() != orig.EsppSchValues.Count())
|
||||
isScheduleChanged = true;
|
||||
|
||||
request.Schedule.ForEach(requestSchedule =>
|
||||
{
|
||||
var schExist = orig.EsppSchValues.FirstOrDefault(t => t.ApplicationsInWorkId == orig.Id
|
||||
&& t.TypeValueId == requestSchedule.TypeValueId
|
||||
&& t.TypeConfigId == requestSchedule.TypeConfigId);
|
||||
|
||||
if (schExist == null)
|
||||
isScheduleChanged = true;
|
||||
});
|
||||
|
||||
return isScheduleChanged;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user