diff --git a/PARR.API.sln b/PARR.API.sln index 88f49b8a..f9bf7d73 100644 --- a/PARR.API.sln +++ b/PARR.API.sln @@ -28,10 +28,6 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PARR.EsppTemplateSync", "PA EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PARR.MockData", "PARR.MockData\PARR.MockData.csproj", "{B02E5B16-59BD-4F02-9CC4-6873409DBD84}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PARR.GeneratorTemplates", "PARR.GeneratorTemplates\PARR.GeneratorTemplates.csproj", "{79EC7AD8-9A16-4806-881A-E5632C48C461}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PARR.GeneratorTemplatesWorker", "PARR.GeneratorTemplatesWorker\PARR.GeneratorTemplatesWorker.csproj", "{BE11D005-D3FE-4F29-93A2-7379E729C78D}" -EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PARR.EsppOrderLoader", "PARR.EsppOrderLoader\PARR.EsppOrderLoader.csproj", "{F83395F9-CE33-40A5-BA1A-4A1233E9AA67}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PARR.EsppOrderLoaderWorker", "PARR.EsppOrderLoaderWorker\PARR.EsppOrderLoaderWorker.csproj", "{868ED9E0-42AD-4540-90BE-31A57A21CD93}" @@ -136,14 +132,6 @@ Global {B02E5B16-59BD-4F02-9CC4-6873409DBD84}.Debug|Any CPU.Build.0 = Debug|Any CPU {B02E5B16-59BD-4F02-9CC4-6873409DBD84}.Release|Any CPU.ActiveCfg = Release|Any CPU {B02E5B16-59BD-4F02-9CC4-6873409DBD84}.Release|Any CPU.Build.0 = Release|Any CPU - {79EC7AD8-9A16-4806-881A-E5632C48C461}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {79EC7AD8-9A16-4806-881A-E5632C48C461}.Debug|Any CPU.Build.0 = Debug|Any CPU - {79EC7AD8-9A16-4806-881A-E5632C48C461}.Release|Any CPU.ActiveCfg = Release|Any CPU - {79EC7AD8-9A16-4806-881A-E5632C48C461}.Release|Any CPU.Build.0 = Release|Any CPU - {BE11D005-D3FE-4F29-93A2-7379E729C78D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {BE11D005-D3FE-4F29-93A2-7379E729C78D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {BE11D005-D3FE-4F29-93A2-7379E729C78D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {BE11D005-D3FE-4F29-93A2-7379E729C78D}.Release|Any CPU.Build.0 = Release|Any CPU {F83395F9-CE33-40A5-BA1A-4A1233E9AA67}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {F83395F9-CE33-40A5-BA1A-4A1233E9AA67}.Debug|Any CPU.Build.0 = Debug|Any CPU {F83395F9-CE33-40A5-BA1A-4A1233E9AA67}.Release|Any CPU.ActiveCfg = Release|Any CPU diff --git a/PARR.GeneratorTemplates/GeneratorTemplate.cs b/PARR.GeneratorTemplates/GeneratorTemplate.cs deleted file mode 100644 index ea09ab68..00000000 --- a/PARR.GeneratorTemplates/GeneratorTemplate.cs +++ /dev/null @@ -1,102 +0,0 @@ -using Microsoft.Extensions.DependencyInjection; -using Microsoft.Extensions.Logging; -using PARR.BLL.Contracts; -using PARR.BLL.Domain.Mq; -using PARR.BLL.Services.Interfaces; -using PARR.DAL.Models; -using PARR.GeneratorTemplates.Services; -using PARR.GeneratorTemplates.Settings; -using System.Threading.Tasks; - -namespace PARR.GeneratorTemplates -{ - internal class GeneratorTemplate : IGeneratorTemplate - { - private readonly MqSettings mqSettings; - private readonly IMqService mqService; - private readonly ILogger logger; - private readonly ITransformService transformService; - private readonly IValidatorService validatorService; - private readonly IServiceProvider serviceProvider; - - public GeneratorTemplate( - MqSettings mqSettings, - IMqService mqService, - ILogger logger, - ITransformService transformService, - IValidatorService validatorService, - IServiceProvider serviceProvider - ) - { - this.mqSettings = mqSettings; - this.mqService = mqService; - this.logger = logger; - this.transformService = transformService; - this.validatorService = validatorService; - this.serviceProvider = serviceProvider; - } - - public async Task StartAsync() - { - #region test - // string msg = "{\"WorkId\":\"91219bec-e5f7-4a1a-b4c9-c135035d2498\",\"ApplicationId\":\"13044a1f-fa0c-476f-b501-2b8d06bac9f8\",\"Action\":\"create\",\"Ek\":\"ВРТ*ДВС\",\"StatusEk\":0}"; - // string msg = "{\"WorkId\":\"91219bec-e5f7-4a1a-b4c9-c135035d2498\",\"ApplicationId\":\"13044a1f-fa0c-476f-b501-2b8d06bac9f8\",\"Action\":\"deactivate\",\"Ek\":\"ВРТ*ДВС\",\"StatusEk\":0}"; - - // await GenerateTemplates(msg); - #endregion - - var isConnected = await mqService.InitConsumerAsync(mqSettings, GenerateTemplates); - - if (!isConnected) - throw new Exception("Ошибка при подключении к RabbitMq"); - } - - public async Task StopAsync() - { - await mqService.DisposeAsync(); - } - - - private async Task GenerateTemplates(string msg) - { - logger.LogInformation($"Получили запрос: {msg}"); - - var query = transformService.GetModelFromJson(msg); - if (query == null) - return; - - if (!await validatorService.IsValidApplicationAndWorksAsync(query.ApplicationId, query.WorkId)) - { - logger.LogError($"Не валидны параметры {nameof(query.ApplicationId)}: {query.ApplicationId}, " + - $"{nameof(query.WorkId)}: {query.WorkId}," + - $" нет таких значений или они не связаны в таблице ${nameof(ApplicationsInWork)}"); - return; - } - - Enum.TryParse(typeof(GenerateTemplateActionsEnum), query.Action, true, out var action); - - using (var scope = serviceProvider.CreateScope()) - { - var templateManager = scope.ServiceProvider.GetService(); - if (templateManager == null) - throw new Exception($"Не найден сервис: {nameof(ITemplateManager)}"); - - switch (action) - { - case GenerateTemplateActionsEnum.create: - await templateManager.CreateTemplates(query); - break; - - case GenerateTemplateActionsEnum.deactivate: - await templateManager.DeactivateTemplates(query); - break; - - default: - logger.LogError($"Во входящем запросе, поле {nameof(query.Action)} не содержит допустимых значений"); - return; - } - } - } - - } -} diff --git a/PARR.GeneratorTemplates/GeneratorTemplateInstaller.cs b/PARR.GeneratorTemplates/GeneratorTemplateInstaller.cs deleted file mode 100644 index cbe018c6..00000000 --- a/PARR.GeneratorTemplates/GeneratorTemplateInstaller.cs +++ /dev/null @@ -1,44 +0,0 @@ -using Microsoft.Extensions.Configuration; -using Microsoft.Extensions.DependencyInjection; -using PARR.BLL; -using PARR.DAL; -using PARR.GeneratorTemplates.Services; -using PARR.GeneratorTemplates.Settings; - -namespace PARR.GeneratorTemplates -{ - public static class GeneratorTemplateInstaller - { - //1 - public static void InstallGeneratorTemplateServices(this IServiceCollection services, IConfiguration configuration) - { - services.InstallDalServices(configuration); - services.InstallBllServices(configuration); - - var mqSettings = new MqSettings(); - configuration.GetSection(nameof(MqSettings)).Bind(mqSettings); - services.AddSingleton(mqSettings); - - //add other services - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - } - - //2 - public static IConfigurationBuilder AddGeneratorTemplateConfigurations(this IConfigurationBuilder builder, IServiceCollection services) - { - builder.AddDalConfigurations(services); - - return builder; - } - - //3 - public static void AddGeneratorTemplateSettings(this IServiceCollection services, IConfiguration configuration) - { - services.AddDallSettings(configuration); - } - - - } -} diff --git a/PARR.GeneratorTemplates/IGeneratorTemplate.cs b/PARR.GeneratorTemplates/IGeneratorTemplate.cs deleted file mode 100644 index d0a33e71..00000000 --- a/PARR.GeneratorTemplates/IGeneratorTemplate.cs +++ /dev/null @@ -1,8 +0,0 @@ -namespace PARR.GeneratorTemplates -{ - public interface IGeneratorTemplate - { - Task StartAsync(); - Task StopAsync(); - } -} diff --git a/PARR.GeneratorTemplates/PARR.GeneratorTemplates.csproj b/PARR.GeneratorTemplates/PARR.GeneratorTemplates.csproj deleted file mode 100644 index 766e58d3..00000000 --- a/PARR.GeneratorTemplates/PARR.GeneratorTemplates.csproj +++ /dev/null @@ -1,15 +0,0 @@ - - - - net7.0 - enable - enable - - - - - - - - - diff --git a/PARR.GeneratorTemplates/Services/ITemplateManager.cs b/PARR.GeneratorTemplates/Services/ITemplateManager.cs deleted file mode 100644 index ebfb9494..00000000 --- a/PARR.GeneratorTemplates/Services/ITemplateManager.cs +++ /dev/null @@ -1,10 +0,0 @@ -using PARR.BLL.Domain.Mq; - -namespace PARR.GeneratorTemplates.Services -{ - internal interface ITemplateManager - { - Task CreateTemplates(GeneratorTemplateMq query); - Task DeactivateTemplates(GeneratorTemplateMq query); - } -} diff --git a/PARR.GeneratorTemplates/Services/IValidatorService.cs b/PARR.GeneratorTemplates/Services/IValidatorService.cs deleted file mode 100644 index 10b8e8c7..00000000 --- a/PARR.GeneratorTemplates/Services/IValidatorService.cs +++ /dev/null @@ -1,7 +0,0 @@ -namespace PARR.GeneratorTemplates.Services -{ - internal interface IValidatorService - { - Task IsValidApplicationAndWorksAsync(Guid applicationId, Guid workId); - } -} diff --git a/PARR.GeneratorTemplates/Services/TemplateManager.cs b/PARR.GeneratorTemplates/Services/TemplateManager.cs deleted file mode 100644 index dfa3970a..00000000 --- a/PARR.GeneratorTemplates/Services/TemplateManager.cs +++ /dev/null @@ -1,326 +0,0 @@ -using Microsoft.EntityFrameworkCore; -using Microsoft.Extensions.Logging; -using PARR.BLL.Domain.Mq; -using PARR.BLL.Helpers; -using PARR.Constants; -using PARR.DAL.Contracts; -using PARR.DAL.Models; -using PARR.DAL.Services.Interfaces; -using PARR.TemplateDistributor; - -namespace PARR.GeneratorTemplates.Services -{ - internal class TemplateManager : ITemplateManager - { - private readonly ITemplateService templateService; - private readonly IHostService hostService; - private readonly ILogger logger; - private readonly SettingsFromDb settingsFromDb; - private readonly IRobotConfigurationService robotConfigurationService; - private readonly IApplicationsInWorkService applicationsInWorkService; - private readonly ITemplateDistributor templateDistributor; - - public TemplateManager( - ITemplateService templateService, - IHostService hostService, - ILogger logger, - SettingsFromDb settingsFromDb, - IRobotConfigurationService robotConfigurationService, - IApplicationsInWorkService applicationsInWorkService, - ITemplateDistributor templateDistributor - ) - { - this.templateService = templateService; - this.hostService = hostService; - this.logger = logger; - this.settingsFromDb = settingsFromDb; - this.robotConfigurationService = robotConfigurationService; - this.applicationsInWorkService = applicationsInWorkService; - this.templateDistributor = templateDistributor; - } - - public async Task CreateTemplates(GeneratorTemplateMq query) - { - //TODO Migratin to Job - ////В таблице AppInWork находим РР, и смотрим ее рабочие группы. Затем по ним будем фильтровать хосты - //var appInWorkWg = await applicationsInWorkService.Get() - // .Include(t => t.WorkGroups) - // .FirstAsync(t => t.ApplicationId == query.ApplicationId && t.WorkId == query.WorkId); - - //if (!appInWorkWg.WorkGroups.Any()) - //{ - // logger.LogWarning($"Не генерирую шаблоны. Нет рабочих групп у ApplicationInWork с id: {appInWorkWg.Id}"); - // return; - //} - - //var workGroups = appInWorkWg.WorkGroups.ToList(); - - ////Согласно параметрам, находит все ЭК в таблице Hosts. - ////Далее проверяет есть ли такие шаблоны в таблице Templates, если нет, то создает, активирует и ставит статус Creating. - ////Если такие шаблоны уже есть, ничего с ними не делает. - - //string ekPattern = SqlHelpers.RegexToLike(query.Ek); - - //// список хостов для создания шаблонов - //var queryHosts = hostService.Get() - // //.Include(t => t.WorkGroupItem) - // .Include(t => t.ApplicationsInHosts) - // .ThenInclude(t => t.Application).ThenInclude(t => t!.ApplicationsInWorks).ThenInclude(w => w.Work) - // .Include(t => t.Templates) - // .ThenInclude(w => w.ApplicationsInWork) - // .Include(t => t.ResponseArea) - // .Where(t => - // t.ApplicationsInHosts.Any(h => - // h.ApplicationId == query.ApplicationId - // && h.Application!.ApplicationsInWorks.Any(w => w.WorkId == query.WorkId) - // ) - // && EF.Functions.Like(t.Ek.ToLower(), ekPattern) - // // смотрим что нет такого шаблона - // && t.Templates.Any(templ => templ.ApplicationsInWork!.WorkId == query.WorkId && templ.ApplicationsInWork.ApplicationId == query.ApplicationId) == false - // // смотрим что у этих хостов есть нужные группы - // //&& workGroups.Any(x => x.WorkGroupId == t.WorkGroupId) - // ); - - //// статус ЭК - //if (query.StatusEk > 0) - // queryHosts = queryHosts.Where(t => t.EkStatusCode == query.StatusEk); - - //var hosts = await queryHosts - // .AsSplitQuery() - // .ToListAsync(); - - //// Исключаем хосты у которых нет нужных групп - //hosts = hosts.Where(t => workGroups.Any(x => x.WorkGroupId == t.WorkGroupId)).ToList(); - //if (!hosts.Any()) - //{ - // logger.LogInformation($"Не найдено ЭК попадающих под условие: ${JsonSerializer.Serialize(query)}"); - // return; - //} - - - //// хосты группируем по РГ, чтоб потом распределить/рассчитать NextRun - //var groupingHostByWg = hosts.GroupBy(t => t.WorkGroupId); - - //foreach (var group in groupingHostByWg) - //{ - // var groupingHosts = group.ToList(); - - // var templates = CreateQueryTemplates(groupingHosts, query); - - // //проверяем, что нет шаблонов с такими именами, исключаем их - // templates = await ExcludeExistTemplatesAsync(templates); - // if (!templates.Any()) - // continue; - - // //заполняем NextRun - // templates = await templateDistributor.DistributeTemplateAsync(templates, appInWorkWg.Id, (Guid)group.Key!); - - // // сохраняем - // foreach (var template in templates) - // { - // if (!await templateService.CreateAsync(template) || !await templateService.CommitAsync(query.HistoryInitiator)) - // { - // 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.ShortcodeEnum.EK, host.Ek)), - // //Вместо полного имени работы, подставляется сокращенный суффикс или полное имя с ЭК если суффикса нет - // Name = TemplateHelpers.GenerateTemplateNameWithResponseArea( - // host.ResponseArea!.Name, - // settingsFromDb.TemplatePrefixName, - // host.Ek, - // appInWork.Work!.TemplateSuffix ?? appInWork.Work!.Name.ApplyShortcode(Constants.Shortcode.ShortcodeEnum.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 async Task> ExcludeExistTemplatesAsync(List