feat(generatorTemplates): переделал логику генерации. Группировка по РГ. Рассчет nextRun через ITemplateDistributor
This commit is contained in:
@@ -7,6 +7,7 @@ using PARR.DAL.Contracts;
|
|||||||
using PARR.DAL.Extensions;
|
using PARR.DAL.Extensions;
|
||||||
using PARR.DAL.Models;
|
using PARR.DAL.Models;
|
||||||
using PARR.DAL.Services.Interfaces;
|
using PARR.DAL.Services.Interfaces;
|
||||||
|
using PARR.TemplateDistributor;
|
||||||
using System.Text.Json;
|
using System.Text.Json;
|
||||||
|
|
||||||
namespace PARR.GeneratorTemplates.Services
|
namespace PARR.GeneratorTemplates.Services
|
||||||
@@ -19,6 +20,7 @@ namespace PARR.GeneratorTemplates.Services
|
|||||||
private readonly SettingsFromDb settingsFromDb;
|
private readonly SettingsFromDb settingsFromDb;
|
||||||
private readonly IRobotConfigurationService robotConfigurationService;
|
private readonly IRobotConfigurationService robotConfigurationService;
|
||||||
private readonly IApplicationsInWorkService applicationsInWorkService;
|
private readonly IApplicationsInWorkService applicationsInWorkService;
|
||||||
|
private readonly ITemplateDistributor templateDistributor;
|
||||||
|
|
||||||
public TemplateManager(
|
public TemplateManager(
|
||||||
ITemplateService templateService,
|
ITemplateService templateService,
|
||||||
@@ -26,7 +28,8 @@ namespace PARR.GeneratorTemplates.Services
|
|||||||
ILogger<TemplateManager> logger,
|
ILogger<TemplateManager> logger,
|
||||||
SettingsFromDb settingsFromDb,
|
SettingsFromDb settingsFromDb,
|
||||||
IRobotConfigurationService robotConfigurationService,
|
IRobotConfigurationService robotConfigurationService,
|
||||||
IApplicationsInWorkService applicationsInWorkService
|
IApplicationsInWorkService applicationsInWorkService,
|
||||||
|
ITemplateDistributor templateDistributor
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
this.templateService = templateService;
|
this.templateService = templateService;
|
||||||
@@ -35,6 +38,7 @@ namespace PARR.GeneratorTemplates.Services
|
|||||||
this.settingsFromDb = settingsFromDb;
|
this.settingsFromDb = settingsFromDb;
|
||||||
this.robotConfigurationService = robotConfigurationService;
|
this.robotConfigurationService = robotConfigurationService;
|
||||||
this.applicationsInWorkService = applicationsInWorkService;
|
this.applicationsInWorkService = applicationsInWorkService;
|
||||||
|
this.templateDistributor = templateDistributor;
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task CreateTemplates(GeneratorTemplateMq query)
|
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<Template> CreateQueryTemplates(List<Host> hosts, GeneratorTemplateMq query)
|
||||||
|
{
|
||||||
|
var templates = new List<Template>();
|
||||||
|
|
||||||
foreach (var host in hosts)
|
foreach (var host in hosts)
|
||||||
{
|
{
|
||||||
var appInWork = host.ApplicationsInHosts.FirstOrDefault(t => t.ApplicationId == query.ApplicationId)?.Application?.ApplicationsInWorks.FirstOrDefault(a => a.WorkId == query.WorkId);
|
var appInWork = host.ApplicationsInHosts.FirstOrDefault(t => t.ApplicationId == query.ApplicationId)?.Application?.ApplicationsInWorks.FirstOrDefault(a => a.WorkId == query.WorkId);
|
||||||
@@ -104,43 +186,40 @@ namespace PARR.GeneratorTemplates.Services
|
|||||||
{
|
{
|
||||||
// такого не может быть, так как выполнился запрос при получении списка хостов, но мало ли
|
// такого не может быть, так как выполнился запрос при получении списка хостов, но мало ли
|
||||||
logger.LogError($"Ошибка при создании шаблона. В таблице ApplicationsInWorks не найден Id согласно запроса WorkId: {query.WorkId}, ApplicationId: {query.ApplicationId}");
|
logger.LogError($"Ошибка при создании шаблона. В таблице ApplicationsInWorks не найден Id согласно запроса WorkId: {query.WorkId}, ApplicationId: {query.ApplicationId}");
|
||||||
return;
|
//return;
|
||||||
|
return templates;
|
||||||
}
|
}
|
||||||
|
|
||||||
var template = new Template
|
var template = new Template
|
||||||
{
|
{
|
||||||
Id = Guid.NewGuid(),
|
Id = Guid.NewGuid(),
|
||||||
//TODO:!!!
|
|
||||||
//Name = TemplateHelpers.GenerateTemplateName("ЗО" ,settingsFromDb.TemplatePrefixName, host.Ek, appInWork.Work!.Name),
|
//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!.Name.ApplyShortcode(Constants.Shortcode.Shortcodes.EK, host.Ek)),
|
||||||
//Вместо полного имени работы, подставляется сокращенный суффикс или полное имя с ЭК если суффикса нет
|
//Вместо полного имени работы, подставляется сокращенный суффикс или полное имя с ЭК если суффикса нет
|
||||||
Name = TemplateHelpers.GenerateTemplateNameWithResponseArea(
|
Name = TemplateHelpers.GenerateTemplateNameWithResponseArea(
|
||||||
host.ResponseArea!.Name,
|
host.ResponseArea!.Name,
|
||||||
settingsFromDb.TemplatePrefixName,
|
settingsFromDb.TemplatePrefixName,
|
||||||
host.Ek,
|
host.Ek,
|
||||||
appInWork.Work!.TemplateSuffix ?? appInWork.Work!.Name.ApplyShortcode(Constants.Shortcode.Shortcodes.EK, host.Ek)
|
appInWork.Work!.TemplateSuffix ?? appInWork.Work!.Name.ApplyShortcode(Constants.Shortcode.Shortcodes.EK, host.Ek)
|
||||||
),
|
),
|
||||||
//IsActiveTemplate = true,
|
|
||||||
//IsActiveSchedule = true,
|
|
||||||
IsActiveTemplate = query.IsActiveTemplate ?? false,
|
IsActiveTemplate = query.IsActiveTemplate ?? false,
|
||||||
IsActiveSchedule = query.IsActiveSchedule ?? false,
|
IsActiveSchedule = query.IsActiveSchedule ?? false,
|
||||||
ApplicationInWorkId = appInWork.Id,
|
ApplicationInWorkId = appInWork.Id,
|
||||||
HostId = host.Id
|
HostId = host.Id,
|
||||||
|
// NextRun не задаем значение, его рассчитаем позже
|
||||||
|
//NextRun = ???,
|
||||||
|
LastRun = null
|
||||||
};
|
};
|
||||||
|
|
||||||
if (!await templateService.CreateAsync(template) || !await templateService.CommitAsync())
|
templates.Add(template);
|
||||||
{
|
|
||||||
logger.LogError($"Ошибка при создании шаблона: Name: {template.Name}, ApplicationInWorkId: {template.ApplicationInWorkId}, HostId: {template.HostId}");
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
logger.LogInformation($"Создан шаблон: Name: {template.Name}, ApplicationInWorkId: {template.ApplicationInWorkId}, " +
|
|
||||||
$"HostId: {template.HostId}");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return templates;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public async Task DeactivateTemplates(GeneratorTemplateMq query)
|
public async Task DeactivateTemplates(GeneratorTemplateMq query)
|
||||||
{
|
{
|
||||||
//TODO: !!! тут не учитываются поля query.IsActiveTemplate, query.IsActiveSchedule, просто все деактивируется. !!!
|
//TODO: !!! тут не учитываются поля query.IsActiveTemplate, query.IsActiveSchedule, просто все деактивируется. !!!
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ WORKDIR /src
|
|||||||
COPY ["NuGet.config", "."]
|
COPY ["NuGet.config", "."]
|
||||||
COPY ["PARR.GeneratorTemplatesWorker/PARR.GeneratorTemplatesWorker.csproj", "PARR.GeneratorTemplatesWorker/"]
|
COPY ["PARR.GeneratorTemplatesWorker/PARR.GeneratorTemplatesWorker.csproj", "PARR.GeneratorTemplatesWorker/"]
|
||||||
COPY ["PARR.GeneratorTemplates/PARR.GeneratorTemplates.csproj", "PARR.GeneratorTemplates/"]
|
COPY ["PARR.GeneratorTemplates/PARR.GeneratorTemplates.csproj", "PARR.GeneratorTemplates/"]
|
||||||
|
COPY ["PARR.TemplateDistributor/PARR.TemplateDistributor.csproj", "PARR.TemplateDistributor/"]
|
||||||
COPY ["PARR.BLL/PARR.BLL.csproj", "PARR.BLL/"]
|
COPY ["PARR.BLL/PARR.BLL.csproj", "PARR.BLL/"]
|
||||||
COPY ["PARR.DAL/PARR.DAL.csproj", "PARR.DAL/"]
|
COPY ["PARR.DAL/PARR.DAL.csproj", "PARR.DAL/"]
|
||||||
COPY ["PARR.Constants/PARR.Constants.csproj", "PARR.Constants/"]
|
COPY ["PARR.Constants/PARR.Constants.csproj", "PARR.Constants/"]
|
||||||
|
|||||||
Reference in New Issue
Block a user