diff --git a/PARR.GeneratorTemplates/Services/TemplateManager.cs b/PARR.GeneratorTemplates/Services/TemplateManager.cs index d2c1b59b..a7357e38 100644 --- a/PARR.GeneratorTemplates/Services/TemplateManager.cs +++ b/PARR.GeneratorTemplates/Services/TemplateManager.cs @@ -7,6 +7,7 @@ using PARR.DAL.Contracts; using PARR.DAL.Extensions; using PARR.DAL.Models; using PARR.DAL.Services.Interfaces; +using PARR.TemplateDistributor; using System.Text.Json; namespace PARR.GeneratorTemplates.Services @@ -19,6 +20,7 @@ namespace PARR.GeneratorTemplates.Services private readonly SettingsFromDb settingsFromDb; private readonly IRobotConfigurationService robotConfigurationService; private readonly IApplicationsInWorkService applicationsInWorkService; + private readonly ITemplateDistributor templateDistributor; public TemplateManager( ITemplateService templateService, @@ -26,7 +28,8 @@ namespace PARR.GeneratorTemplates.Services ILogger logger, SettingsFromDb settingsFromDb, IRobotConfigurationService robotConfigurationService, - IApplicationsInWorkService applicationsInWorkService + IApplicationsInWorkService applicationsInWorkService, + ITemplateDistributor templateDistributor ) { this.templateService = templateService; @@ -35,6 +38,7 @@ namespace PARR.GeneratorTemplates.Services this.settingsFromDb = settingsFromDb; this.robotConfigurationService = robotConfigurationService; this.applicationsInWorkService = applicationsInWorkService; + this.templateDistributor = templateDistributor; } public async Task CreateTemplates(GeneratorTemplateMq query) @@ -95,7 +99,85 @@ namespace PARR.GeneratorTemplates.Services } - //Создаем шаблоны + // хосты группируем по РГ, чтоб потом распределить/рассчитать NextRun + var groupingHostByWg = hosts.GroupBy(t => t.WorkGroupId); + + foreach (var group in groupingHostByWg) + { + var groupingHosts = group.ToList(); + + var templates = CreateQueryTemplates(groupingHosts, query); + + //заполняем NextRun + templates = await templateDistributor.DistributeTemplateAsync(templates, appInWorkWg.Id); + + // сохраняем + foreach (var template in templates) + { + if (!await templateService.CreateAsync(template) || !await templateService.CommitAsync()) + { + logger.LogError($"Ошибка при создании шаблона: Name: {template.Name}, ApplicationInWorkId: {template.ApplicationInWorkId}, HostId: {template.HostId}"); + } + else + { + logger.LogInformation($"Создан шаблон: Name: {template.Name}, ApplicationInWorkId: {template.ApplicationInWorkId}, " + + $"HostId: {template.HostId}"); + } + } + } + + #region создавали шаблоны до того, как стали группировать по РГ + ////Создаем шаблоны + //foreach (var host in hosts) + //{ + // var appInWork = host.ApplicationsInHosts.FirstOrDefault(t => t.ApplicationId == query.ApplicationId)?.Application?.ApplicationsInWorks.FirstOrDefault(a => a.WorkId == query.WorkId); + + // if (appInWork == null) + // { + // // такого не может быть, так как выполнился запрос при получении списка хостов, но мало ли + // logger.LogError($"Ошибка при создании шаблона. В таблице ApplicationsInWorks не найден Id согласно запроса WorkId: {query.WorkId}, ApplicationId: {query.ApplicationId}"); + // return; + // } + + // var template = new Template + // { + // Id = Guid.NewGuid(), + // //Name = TemplateHelpers.GenerateTemplateName("ЗО" ,settingsFromDb.TemplatePrefixName, host.Ek, appInWork.Work!.Name), + // //Генерить имя с полным именем работы и подстановкой ЭК + // //Name = TemplateHelpers.GenerateTemplateNameWithResponseArea(host.ResponseArea!.Name, settingsFromDb.TemplatePrefixName, host.Ek, appInWork.Work!.Name.ApplyShortcode(Constants.Shortcode.Shortcodes.EK, host.Ek)), + // //Вместо полного имени работы, подставляется сокращенный суффикс или полное имя с ЭК если суффикса нет + // Name = TemplateHelpers.GenerateTemplateNameWithResponseArea( + // host.ResponseArea!.Name, + // settingsFromDb.TemplatePrefixName, + // host.Ek, + // appInWork.Work!.TemplateSuffix ?? appInWork.Work!.Name.ApplyShortcode(Constants.Shortcode.Shortcodes.EK, host.Ek) + // ), + // IsActiveTemplate = query.IsActiveTemplate ?? false, + // IsActiveSchedule = query.IsActiveSchedule ?? false, + // ApplicationInWorkId = appInWork.Id, + // HostId = host.Id, + // //TODO: + // //NextRun = ???, + // LastRun = null + // }; + + // if (!await templateService.CreateAsync(template) || !await templateService.CommitAsync()) + // { + // logger.LogError($"Ошибка при создании шаблона: Name: {template.Name}, ApplicationInWorkId: {template.ApplicationInWorkId}, HostId: {template.HostId}"); + // } + // else + // { + // logger.LogInformation($"Создан шаблон: Name: {template.Name}, ApplicationInWorkId: {template.ApplicationInWorkId}, " + + // $"HostId: {template.HostId}"); + // } + //} + #endregion + } + + private List