fix(esppTemplateSync): исправил мапинг полей. Сервис IRobotConfigurationService создается в scope.

This commit is contained in:
Mikhail Trubnikov
2023-10-25 15:37:14 +10:00
parent 180594fa00
commit a84d6f8de3
4 changed files with 26 additions and 19 deletions

View File

@@ -14,7 +14,7 @@ namespace PARR.EsppTemplateSync.MappingProfiles
.ForMember(d => d.IsActive, o => o.MapFrom(s => s.IsActiveTemplate)) .ForMember(d => d.IsActive, o => o.MapFrom(s => s.IsActiveTemplate))
.ForMember(d => d.WorkGroup, o => o.MapFrom(s => s.Host!.WorkGroup)) .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.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.Duration, o => o.MapFrom(s => s.ApplicationsInWork!.TemplateDuration))
.ForMember(d => d.EK, o => o.MapFrom(s => s.Host!.Ek)) .ForMember(d => d.EK, o => o.MapFrom(s => s.Host!.Ek))
//.ForMember(d => d.Initiator, o => o.MapFrom(s => )) TODO откуда то нужно брать инициатора //.ForMember(d => d.Initiator, o => o.MapFrom(s => )) TODO откуда то нужно брать инициатора

View File

@@ -16,15 +16,13 @@ namespace PARR.EsppTemplateSync.Services
private readonly IParserService parserService; private readonly IParserService parserService;
private readonly GlobalSettings globalSettings; private readonly GlobalSettings globalSettings;
private readonly IMapper mapper; private readonly IMapper mapper;
private readonly IRobotConfigurationService robotConfigurationService;
public Manager( public Manager(
ILogger<Manager> logger, ILogger<Manager> logger,
IServiceProvider serviceProvider, IServiceProvider serviceProvider,
IParserService parserService, IParserService parserService,
GlobalSettings globalSettings, GlobalSettings globalSettings,
IMapper mapper, IMapper mapper
IRobotConfigurationService robotConfigurationService
) )
{ {
this.logger = logger; this.logger = logger;
@@ -32,7 +30,6 @@ namespace PARR.EsppTemplateSync.Services
this.parserService = parserService; this.parserService = parserService;
this.globalSettings = globalSettings; this.globalSettings = globalSettings;
this.mapper = mapper; this.mapper = mapper;
this.robotConfigurationService = robotConfigurationService;
} }
public Task<bool> ManageFileAsync(string path) public Task<bool> ManageFileAsync(string path)
@@ -76,14 +73,15 @@ namespace PARR.EsppTemplateSync.Services
var services = scope.ServiceProvider; var services = scope.ServiceProvider;
var templateService = services.GetService<ITemplateService>(); var templateService = services.GetService<ITemplateService>();
if (templateService == null) if (templateService == null)
{
throw new Exception($"Не найден сервис: {nameof(ITemplateService)}"); throw new Exception($"Не найден сервис: {nameof(ITemplateService)}");
// return;
} var robotConfigurationService = services.GetService<IRobotConfigurationService>();
if (robotConfigurationService == null)
throw new Exception($"Не найден сервис: {nameof(IRobotConfigurationService)}");
Template? template = await templateService.GetTemplateByNameAsync(esppTemplate.Name); Template? template = await templateService.GetTemplateByNameAsync(esppTemplate.Name);
//существует в ЕСПП но отсутствует в ПАРР. //существует в ЕСПП но отсутствует в ПАРР.
//TODO деактивируем и видимо ещё что-то нужно //TODO деактивируем и видимо ещё что-то нужно
if (template == null) if (template == null)
@@ -101,6 +99,7 @@ namespace PARR.EsppTemplateSync.Services
// logger.LogInformation($"----- Создана запись Template {esppTemplate.Name}({esppTemplate.ShortDescription}) -----"); // logger.LogInformation($"----- Создана запись Template {esppTemplate.Name}({esppTemplate.ShortDescription}) -----");
//--- //---
logger.LogWarning($"----- Найден шаблон ЕСПП незарегистрированный в ПАРР {esppTemplate.Name}({esppTemplate.ShortDescription}) -----"); logger.LogWarning($"----- Найден шаблон ЕСПП незарегистрированный в ПАРР {esppTemplate.Name}({esppTemplate.ShortDescription}) -----");
return; return;
} }
else else
@@ -108,16 +107,17 @@ namespace PARR.EsppTemplateSync.Services
var mappedTemplate = mapper.Map<EsppTemplate>(template); var mappedTemplate = mapper.Map<EsppTemplate>(template);
if (mappedTemplate == null) if (mappedTemplate == null)
return; return;
var isChanged = IsChanged(mappedTemplate, esppTemplate);
var isChanged = IsChanged(mappedTemplate, esppTemplate);
if (isChanged) if (isChanged)
{ {
SetUpdateStatus(template); SetUpdateStatus(template, robotConfigurationService);
if (!await templateService.CommitAsync()) if (!await templateService.CommitAsync())
logger.LogError($"Не удалось изменить запись Template {template.Name}"); logger.LogError($"Не удалось изменить запись Template {template.Name}");
else else
logger.LogInformation($"----- Установлен принудительный статус {TaskStatusEnum.Updating.ToString()} Template {template.Name} -----"); logger.LogInformation($"----- Установлен принудительный статус {TaskStatusEnum.Updating.ToString()} Template {template.Name} -----");
} //надо ли проверять если не изменился, но был статус Updating не понятно. Доверяем роботу пока, что после окончания работ от точно сообщит } //надо ли проверять если не изменился, но был статус Updating не понятно. Доверяем роботу пока, что после окончания работ от точно сообщит
else else
{ {
@@ -139,12 +139,14 @@ namespace PARR.EsppTemplateSync.Services
return; return;
} }
private void SetUpdateStatus(Template template)
private void SetUpdateStatus(Template template, IRobotConfigurationService robotConfigurationService)
{ {
var robotConfig = robotConfigurationService.GetFromTemplateByRobotCode(RobotsEnum.TemplateOrder, ref template); var robotConfig = robotConfigurationService.GetFromTemplateByRobotCode(RobotsEnum.TemplateOrder, ref template);
robotConfigurationService.ChangeTaskStatus(TaskStatusEnum.Updating, ref robotConfig); robotConfigurationService.ChangeTaskStatus(TaskStatusEnum.Updating, ref robotConfig);
} }
private bool IsChanged(EsppTemplate template, EsppTemplate esppTemplate) private bool IsChanged(EsppTemplate template, EsppTemplate esppTemplate)
{ {
foreach (var prop in template.GetType().GetProperties()) foreach (var prop in template.GetType().GetProperties())
@@ -160,11 +162,16 @@ namespace PARR.EsppTemplateSync.Services
continue; continue;
//Replace("\r","").Replace("\n","") - в подробном описании могут быть переносы строк, в Rabbit прилетает без переносов. Убираем переносы для стравнения //Replace("\r","").Replace("\n","") - в подробном описании могут быть переносы строк, в Rabbit прилетает без переносов. Убираем переносы для стравнения
if (parrValue!.ToString()!.ToLower().Replace("\r", "").Replace("\n", "") != esppValue!.ToString()!.ToLower()) var parrValueStr = parrValue!.ToString()!.ToLower().Replace("\r", "").Replace("\n", "");
return true; var esppValueStr = esppValue!.ToString()!.ToLower();
if (parrValueStr != esppValueStr)
{
logger.LogDebug($"Не совпадают поля. parrValueStr: {parrValueStr}, esppValueStr: {esppValueStr}");
return true;
}
} }
return false; return false;
} }
} }
} }

View File

@@ -40,6 +40,7 @@ builder.Services.AddLogging(config =>
builder.Services.InstallEsppTemplateSyncServices(builder.Configuration); builder.Services.InstallEsppTemplateSyncServices(builder.Configuration);
builder.Configuration.AddEsppTemplateConfigurations(builder.Services); builder.Configuration.AddEsppTemplateConfigurations(builder.Services);
builder.Services.AddEsppTemplateSettings(builder.Configuration); builder.Services.AddEsppTemplateSettings(builder.Configuration);
builder.Services.AddHostedService<Worker>(); builder.Services.AddHostedService<Worker>();
var host = builder.Build(); var host = builder.Build();

View File

@@ -6,7 +6,6 @@ namespace PARR.EsppTemplateSyncWorker
{ {
private readonly ILogger<Worker> _logger; private readonly ILogger<Worker> _logger;
private ITemplateSyncer templateSyncer; private ITemplateSyncer templateSyncer;
//private readonly IServiceProvider serviceProvider;
public Worker( public Worker(
ILogger<Worker> logger, ILogger<Worker> logger,
@@ -19,13 +18,13 @@ namespace PARR.EsppTemplateSyncWorker
protected override async Task ExecuteAsync(CancellationToken stoppingToken) protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{ {
templateSyncer?.Start(); templateSyncer.Start();
//TODO <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD>. <20><> <20><><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> //TODO Периодично нужно проверять шаблоны в ПАРР и создавать их если они отсутствуют в ЕСПП. По ним то ничего не приходит из экспорта
} }
public override Task StopAsync(CancellationToken cancellationToken) public override Task StopAsync(CancellationToken cancellationToken)
{ {
templateSyncer?.Stop(); templateSyncer.Stop();
return base.StopAsync(cancellationToken); return base.StopAsync(cancellationToken);
} }