From a84d6f8de3b1659340f2ea940ded2ae7dfd1e4ba Mon Sep 17 00:00:00 2001 From: Mikhail Trubnikov Date: Wed, 25 Oct 2023 15:37:14 +1000 Subject: [PATCH] =?UTF-8?q?fix(esppTemplateSync):=20=D0=B8=D1=81=D0=BF?= =?UTF-8?q?=D1=80=D0=B0=D0=B2=D0=B8=D0=BB=20=D0=BC=D0=B0=D0=BF=D0=B8=D0=BD?= =?UTF-8?q?=D0=B3=20=D0=BF=D0=BE=D0=BB=D0=B5=D0=B9.=20=D0=A1=D0=B5=D1=80?= =?UTF-8?q?=D0=B2=D0=B8=D1=81=20IRobotConfigurationService=20=D1=81=D0=BE?= =?UTF-8?q?=D0=B7=D0=B4=D0=B0=D0=B5=D1=82=D1=81=D1=8F=20=D0=B2=20scope.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../MappingProfiles/DomainToDomainProfile.cs | 2 +- PARR.EsppTemplateSync/Services/Manager.cs | 35 +++++++++++-------- PARR.EsppTemplateSyncWorker/Program.cs | 1 + PARR.EsppTemplateSyncWorker/Worker.cs | 7 ++-- 4 files changed, 26 insertions(+), 19 deletions(-) diff --git a/PARR.EsppTemplateSync/MappingProfiles/DomainToDomainProfile.cs b/PARR.EsppTemplateSync/MappingProfiles/DomainToDomainProfile.cs index 764a7447..c49240bc 100644 --- a/PARR.EsppTemplateSync/MappingProfiles/DomainToDomainProfile.cs +++ b/PARR.EsppTemplateSync/MappingProfiles/DomainToDomainProfile.cs @@ -14,7 +14,7 @@ namespace PARR.EsppTemplateSync.MappingProfiles .ForMember(d => d.IsActive, o => o.MapFrom(s => s.IsActiveTemplate)) .ForMember(d => d.WorkGroup, o => o.MapFrom(s => s.Host!.WorkGroup)) .ForMember(d => d.ShortDescription, o => o.MapFrom(s => s.ApplicationsInWork!.ShortDescription)) - .ForMember(d => d.ResponseArea, o => o.MapFrom(s => s.ApplicationsInWork!.ShortDescription)) + .ForMember(d => d.ResponseArea, o => o.MapFrom(s => s.Host!.ResponseArea!.Name)) .ForMember(d => d.Duration, o => o.MapFrom(s => s.ApplicationsInWork!.TemplateDuration)) .ForMember(d => d.EK, o => o.MapFrom(s => s.Host!.Ek)) //.ForMember(d => d.Initiator, o => o.MapFrom(s => )) TODO откуда то нужно брать инициатора diff --git a/PARR.EsppTemplateSync/Services/Manager.cs b/PARR.EsppTemplateSync/Services/Manager.cs index 594bb89f..83f2f6f5 100644 --- a/PARR.EsppTemplateSync/Services/Manager.cs +++ b/PARR.EsppTemplateSync/Services/Manager.cs @@ -16,15 +16,13 @@ namespace PARR.EsppTemplateSync.Services private readonly IParserService parserService; private readonly GlobalSettings globalSettings; private readonly IMapper mapper; - private readonly IRobotConfigurationService robotConfigurationService; public Manager( ILogger logger, IServiceProvider serviceProvider, IParserService parserService, GlobalSettings globalSettings, - IMapper mapper, - IRobotConfigurationService robotConfigurationService + IMapper mapper ) { this.logger = logger; @@ -32,7 +30,6 @@ namespace PARR.EsppTemplateSync.Services this.parserService = parserService; this.globalSettings = globalSettings; this.mapper = mapper; - this.robotConfigurationService = robotConfigurationService; } public Task ManageFileAsync(string path) @@ -76,14 +73,15 @@ namespace PARR.EsppTemplateSync.Services var services = scope.ServiceProvider; var templateService = services.GetService(); - if (templateService == null) - { throw new Exception($"Не найден сервис: {nameof(ITemplateService)}"); - // return; - } + + var robotConfigurationService = services.GetService(); + if (robotConfigurationService == null) + throw new Exception($"Не найден сервис: {nameof(IRobotConfigurationService)}"); Template? template = await templateService.GetTemplateByNameAsync(esppTemplate.Name); + //существует в ЕСПП но отсутствует в ПАРР. //TODO деактивируем и видимо ещё что-то нужно if (template == null) @@ -101,6 +99,7 @@ namespace PARR.EsppTemplateSync.Services // logger.LogInformation($"----- Создана запись Template {esppTemplate.Name}({esppTemplate.ShortDescription}) -----"); //--- logger.LogWarning($"----- Найден шаблон ЕСПП незарегистрированный в ПАРР {esppTemplate.Name}({esppTemplate.ShortDescription}) -----"); + return; } else @@ -108,16 +107,17 @@ namespace PARR.EsppTemplateSync.Services var mappedTemplate = mapper.Map(template); if (mappedTemplate == null) return; - var isChanged = IsChanged(mappedTemplate, esppTemplate); + var isChanged = IsChanged(mappedTemplate, esppTemplate); if (isChanged) { - SetUpdateStatus(template); + SetUpdateStatus(template, robotConfigurationService); if (!await templateService.CommitAsync()) logger.LogError($"Не удалось изменить запись Template {template.Name}"); else logger.LogInformation($"----- Установлен принудительный статус {TaskStatusEnum.Updating.ToString()} Template {template.Name} -----"); + } //надо ли проверять если не изменился, но был статус Updating не понятно. Доверяем роботу пока, что после окончания работ от точно сообщит else { @@ -139,12 +139,14 @@ namespace PARR.EsppTemplateSync.Services return; } - private void SetUpdateStatus(Template template) + + private void SetUpdateStatus(Template template, IRobotConfigurationService robotConfigurationService) { var robotConfig = robotConfigurationService.GetFromTemplateByRobotCode(RobotsEnum.TemplateOrder, ref template); robotConfigurationService.ChangeTaskStatus(TaskStatusEnum.Updating, ref robotConfig); } + private bool IsChanged(EsppTemplate template, EsppTemplate esppTemplate) { foreach (var prop in template.GetType().GetProperties()) @@ -160,11 +162,16 @@ namespace PARR.EsppTemplateSync.Services continue; //Replace("\r","").Replace("\n","") - в подробном описании могут быть переносы строк, в Rabbit прилетает без переносов. Убираем переносы для стравнения - if (parrValue!.ToString()!.ToLower().Replace("\r", "").Replace("\n", "") != esppValue!.ToString()!.ToLower()) - return true; + var parrValueStr = parrValue!.ToString()!.ToLower().Replace("\r", "").Replace("\n", ""); + var esppValueStr = esppValue!.ToString()!.ToLower(); + if (parrValueStr != esppValueStr) + { + logger.LogDebug($"Не совпадают поля. parrValueStr: {parrValueStr}, esppValueStr: {esppValueStr}"); + return true; + } } return false; } } -} +} \ No newline at end of file diff --git a/PARR.EsppTemplateSyncWorker/Program.cs b/PARR.EsppTemplateSyncWorker/Program.cs index 7f428e72..a0fa9a9c 100644 --- a/PARR.EsppTemplateSyncWorker/Program.cs +++ b/PARR.EsppTemplateSyncWorker/Program.cs @@ -40,6 +40,7 @@ builder.Services.AddLogging(config => builder.Services.InstallEsppTemplateSyncServices(builder.Configuration); builder.Configuration.AddEsppTemplateConfigurations(builder.Services); builder.Services.AddEsppTemplateSettings(builder.Configuration); + builder.Services.AddHostedService(); var host = builder.Build(); diff --git a/PARR.EsppTemplateSyncWorker/Worker.cs b/PARR.EsppTemplateSyncWorker/Worker.cs index 7f0f2c72..d2c15b86 100644 --- a/PARR.EsppTemplateSyncWorker/Worker.cs +++ b/PARR.EsppTemplateSyncWorker/Worker.cs @@ -6,7 +6,6 @@ namespace PARR.EsppTemplateSyncWorker { private readonly ILogger _logger; private ITemplateSyncer templateSyncer; - //private readonly IServiceProvider serviceProvider; public Worker( ILogger logger, @@ -19,13 +18,13 @@ namespace PARR.EsppTemplateSyncWorker protected override async Task ExecuteAsync(CancellationToken stoppingToken) { - templateSyncer?.Start(); - //TODO . + templateSyncer.Start(); + //TODO Периодично нужно проверять шаблоны в ПАРР и создавать их если они отсутствуют в ЕСПП. По ним то ничего не приходит из экспорта } public override Task StopAsync(CancellationToken cancellationToken) { - templateSyncer?.Stop(); + templateSyncer.Stop(); return base.StopAsync(cancellationToken); }