From 94d277109d9e21282ca48bb121aaa72bc98050cb Mon Sep 17 00:00:00 2001 From: Mikhail Trubnikov Date: Fri, 13 Mar 2026 10:22:13 +1000 Subject: [PATCH] =?UTF-8?q?feat(api,=20dal,=20activator,=20distributor):?= =?UTF-8?q?=20RobotConfigurationService=20-=20=D0=B4=D0=BE=D0=B1=D0=B0?= =?UTF-8?q?=D0=B2=D0=BB=D0=B5=D0=BD=D0=B0=20=D0=BB=D0=BE=D0=B3=D0=B8=D0=BA?= =?UTF-8?q?=D0=B0,=20=D1=81=D1=82=D0=B0=D1=82=D1=83=D1=81=20Updating=20?= =?UTF-8?q?=D1=88=D0=B0=D0=B1=D0=BB=D0=BE=D0=BD=D1=83=20=D0=BC=D0=BE=D0=B6?= =?UTF-8?q?=D0=BD=D0=BE=20=D0=BF=D0=BE=D1=81=D1=82=D0=B0=D0=B2=D0=B8=D1=82?= =?UTF-8?q?=D1=8C=20=D0=B5=D1=81=D0=BB=D0=B8=20=D1=83=20=D0=BD=D0=B5=D0=B3?= =?UTF-8?q?=D0=BE=20=D0=B5=D1=81=D1=82=D1=8C=20ScheduleEsppId.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- PARR.API/Controllers/V1/TemplateController.cs | 6 ++++-- .../RobotConfigurationService.cs | 19 +++++++++++++++++++ PARR.TemplateActivator/TemplateActivator.cs | 17 ++++++++++++----- .../TemplateDistributor.cs | 3 ++- 4 files changed, 37 insertions(+), 8 deletions(-) diff --git a/PARR.API/Controllers/V1/TemplateController.cs b/PARR.API/Controllers/V1/TemplateController.cs index bdc1a240..a92915cf 100644 --- a/PARR.API/Controllers/V1/TemplateController.cs +++ b/PARR.API/Controllers/V1/TemplateController.cs @@ -225,7 +225,8 @@ namespace PARR.API.Controllers.V1 template.IsActiveTemplate = request.IsActiveTemplate; //необходимо обновить шаблон var config = robotConfigurationService.GetFromTemplateByRobotCode(RobotsEnum.TemplateOrder, template); - robotConfigurationService.ChangeTaskStatus(TaskStatusEnum.Updating, config); + //robotConfigurationService.ChangeTaskStatus(TaskStatusEnum.Updating, config); + robotConfigurationService.SetUpdateTaskStatusIfAllow(config); } if (template.IsActiveSchedule != request.IsActiveSchedule) @@ -233,7 +234,8 @@ namespace PARR.API.Controllers.V1 template.IsActiveSchedule = request.IsActiveSchedule; //необходимо обновить расписание var config = robotConfigurationService.GetFromTemplateByRobotCode(RobotsEnum.ScheduleOrder, template); - robotConfigurationService.ChangeTaskStatus(TaskStatusEnum.Updating, config); + //robotConfigurationService.ChangeTaskStatus(TaskStatusEnum.Updating, config); + robotConfigurationService.SetUpdateTaskStatusIfAllow(config); } if (!await templateService.CommitAsync(new HistoryInitiator { InitiatorComment = "Изменён статус шаблона/расписания", InitiatorIp = clientService.GetClientIp()?.ToString(), InitiatorParrComponentId = ParrComponentsEnum.Api })) diff --git a/PARR.DAL/Services/Implementations/RobotConfigurationService.cs b/PARR.DAL/Services/Implementations/RobotConfigurationService.cs index 94815b9f..b8d14cd0 100644 --- a/PARR.DAL/Services/Implementations/RobotConfigurationService.cs +++ b/PARR.DAL/Services/Implementations/RobotConfigurationService.cs @@ -58,6 +58,25 @@ namespace PARR.DAL.Services.Implementations return false; } + // Если хотим поставить Updating у шаблона, можно ставить только в том случае, если у шаблона уже есть ScheduleEsppId + if (configuration.RobotCode == (int)RobotsEnum.TemplateOrder) + { + // есть ли связь у config с templetes, может инклуда нет, мало ли + if (configuration.Template == null) + { + logger.LogWarning("При изменении статуса задания на обновление шаблона, не смог проверить наличае ScheduleEsppId, так как нет Include с Templates. Пропустил эту проверку. configurationId: {configurationId}", configuration.Id); + } + else + { + if (configuration.Template.ScheduleEsppId == null) + { + logger.LogInformation("Нельзя установить статус {newStatus} для конфигурации {configurationId}, templateId: {templateId}, так как у шаблона отсутсвтует ScheduleEsppId=null", + updatingStatus, configuration.Id, configuration.TemplateId); + return false; + } + } + } + // Статус ОК, можно ставить Updating ChangeTaskStatus(updatingStatus, configuration); logger.LogInformation("Установлен статус {newStatus} для конфигурации {configurationId}, templateId: {templateId}", updatingStatus, configuration.Id, configuration.TemplateId); diff --git a/PARR.TemplateActivator/TemplateActivator.cs b/PARR.TemplateActivator/TemplateActivator.cs index 0ae9337b..31e253d3 100644 --- a/PARR.TemplateActivator/TemplateActivator.cs +++ b/PARR.TemplateActivator/TemplateActivator.cs @@ -45,16 +45,22 @@ internal class TemplateActivator : ITemplateActivator case TemplateActivatorEsppObjectTypesEnum.Template: foreach (var template in templates) { - template.IsActiveTemplate = query.NewState; - UpdateRobotConfiguration(RobotsEnum.TemplateOrder, template); + if (template.IsActiveTemplate != query.NewState) + { + template.IsActiveTemplate = query.NewState; + UpdateRobotConfiguration(RobotsEnum.TemplateOrder, template); + } } break; case TemplateActivatorEsppObjectTypesEnum.Schedule: foreach (var template in templates) { - template.IsActiveSchedule = query.NewState; - UpdateRobotConfiguration(RobotsEnum.ScheduleOrder, template); + if (template.IsActiveSchedule != query.NewState) + { + template.IsActiveSchedule = query.NewState; + UpdateRobotConfiguration(RobotsEnum.ScheduleOrder, template); + } } break; } @@ -118,7 +124,8 @@ internal class TemplateActivator : ITemplateActivator private void UpdateRobotConfiguration(RobotsEnum robotsEnum, Template t) { var config = robotConfigurationService.GetFromTemplateByRobotCode(robotsEnum, t); - robotConfigurationService.ChangeTaskStatus(TaskStatusEnum.Updating, config); + // robotConfigurationService.ChangeTaskStatus(TaskStatusEnum.Updating, config); + robotConfigurationService.SetUpdateTaskStatusIfAllow(config); } diff --git a/PARR.TemplateDistributor/TemplateDistributor.cs b/PARR.TemplateDistributor/TemplateDistributor.cs index 6a497c29..0616d669 100644 --- a/PARR.TemplateDistributor/TemplateDistributor.cs +++ b/PARR.TemplateDistributor/TemplateDistributor.cs @@ -75,7 +75,8 @@ namespace PARR.TemplateDistributor // ставим задание роботу - обновить расписания var config = robotConfigurationService.GetFromTemplateByRobotCode(RobotsEnum.ScheduleOrder, templateDb); - robotConfigurationService.ChangeTaskStatus(TaskStatusEnum.Updating, config); + //robotConfigurationService.ChangeTaskStatus(TaskStatusEnum.Updating, config); + robotConfigurationService.SetUpdateTaskStatusIfAllow(config); updatedCount++; }