From 4942b26fb8f9e22c9db0a73e8e83cea448ee9c45 Mon Sep 17 00:00:00 2001 From: Mikhail Kuznetsov Date: Thu, 20 Nov 2025 16:21:03 +1000 Subject: [PATCH] =?UTF-8?q?feat(templateGeneratorWorker):=20=D0=B4=D0=BE?= =?UTF-8?q?=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D0=BE=20=D0=BD=D0=BE=D0=B2?= =?UTF-8?q?=D0=BE=D0=B5=20=D0=BF=D0=BE=D0=BB=D0=B5=20IsUnused=20=D0=B8=20?= =?UTF-8?q?=D0=BF=D0=B5=D1=80=D0=B5=D1=81=D1=87=D0=B5=D1=82=20NextRun=20?= =?UTF-8?q?=D0=BE=D1=82=D0=BD=D0=BE=D1=81=D0=B8=D1=82=D0=B5=D0=BB=D1=8C?= =?UTF-8?q?=D0=BD=D0=BE=20Job.Group.ReferenceDate?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../TemplateGenerator.cs | 41 +++++++++++++++---- 1 file changed, 32 insertions(+), 9 deletions(-) diff --git a/PARR.TemplateGeneratorWorker/TemplateGenerator.cs b/PARR.TemplateGeneratorWorker/TemplateGenerator.cs index 8569c7f3..16c401ec 100644 --- a/PARR.TemplateGeneratorWorker/TemplateGenerator.cs +++ b/PARR.TemplateGeneratorWorker/TemplateGenerator.cs @@ -10,6 +10,7 @@ using PARR.DAL.Models.Job; using PARR.DAL.Models.Unit; using PARR.DAL.Services.Interfaces; using PARR.DAL.Services.Interfaces.Job; +using PARR.DAL.TransformServices; using PARR.TemplateGeneratorWorker.Services; namespace PARR.TemplateGeneratorWorker @@ -22,6 +23,7 @@ namespace PARR.TemplateGeneratorWorker private readonly IJobService jobService; private readonly IShortcodesService shortcodesService; private readonly ITemplateService templateService; + private readonly IEsppScheduleTransformService esppScheduleTransformService; public TemplateGenerator( ILogger logger, @@ -29,7 +31,8 @@ namespace PARR.TemplateGeneratorWorker IValidatorService validatorService, IJobService jobService, IShortcodesService shortcodesService, - ITemplateService templateService + ITemplateService templateService, + IEsppScheduleTransformService esppScheduleTransformService ) { this.logger = logger; @@ -38,6 +41,7 @@ namespace PARR.TemplateGeneratorWorker this.jobService = jobService; this.shortcodesService = shortcodesService; this.templateService = templateService; + this.esppScheduleTransformService = esppScheduleTransformService; } public async Task GenerateTemplateAsync(string msg) { @@ -48,9 +52,6 @@ namespace PARR.TemplateGeneratorWorker if (query == null) return; - var isTemplateExist = templateService.Get() - .AsNoTracking() - .Any(t => t.JobId == query.JobId && t.UnitId == query.UnitId); if (!await validatorService.IsValidAsync(query.JobId, query.UnitId)) { @@ -58,20 +59,39 @@ namespace PARR.TemplateGeneratorWorker return; } - if (isTemplateExist) + var existing = await templateService + .Get() + .AsNoTracking() + .FirstOrDefaultAsync(t => t.JobId == query.JobId && t.UnitId == query.UnitId); + + + if (existing != null) { - logger.LogWarning($"Шаблон с JobId={query.JobId} и UnitId={query.UnitId} уже существует"); + logger.LogWarning("Шаблон уже существует (Job={JobId}, Unit={UnitId}) → пропускаем Create", query.JobId, query.UnitId); return; } var job = await jobService .Get().AsNoTracking() + .Include(t => t.Group) .FirstOrDefaultAsync(t => t.Id == query.JobId); + if (job == null) + { + logger.LogError("Job не найден: {JobId}", query.JobId); + return; + } + if (job.Group == null) + { + logger.LogError("Job {JobId} не привязан к JobGroup", query.JobId); + return; + } var templateName = await shortcodesService.ApplyShortcodesAsync(job!.TemplateNameMask!, query.UnitId, query.JobId); + var nextRun = await esppScheduleTransformService.GetNextDateAsync(job.GroupId, job.Group!.ReferenceDate); + var template = new Template { Id = Guid.NewGuid(), @@ -80,17 +100,20 @@ namespace PARR.TemplateGeneratorWorker JobId = query.JobId, IsActiveTemplate = query.IsActiveTemplate ?? false, IsActiveSchedule = query.IsActiveSchedule ?? false, + NextRun = nextRun, + IsUnused = false, InitiatorComment = query.HistoryInitiator?.InitiatorComment, InitiatorParrComponentId = query.HistoryInitiator?.InitiatorParrComponentId }; - if (!await templateService.CreateAsync(template) || !await templateService.CommitAsync(new HistoryInitiator { InitiatorComment = "Запрос на генерацию с тестового шаблона", InitiatorParrComponentId = ParrComponentsEnum.TemplateTaskGenerator })) + if (await templateService.CreateAsync(template) && await templateService.CommitAsync(initiator)) { - logger.LogError($"Ошибка при создании шаблона: Name: {template.Name}, {nameof(template.Job)}: {template.JobId}, {nameof(template.Unit)}: {template.UnitId}"); + logger.LogInformation("Создан шаблон: Id={TemplateId}, Name={Name}, Job={JobId}, Unit={UnitId}", + template.Id, template.Name, request.JobId, request.UnitId); } else { - logger.LogInformation($"Создан шаблон: Name: {template.Name}, {nameof(template.Job)}: {template.JobId}, {nameof(template.Unit)}: {template.UnitId}"); + logger.LogError("Ошибка создания шаблона: Name={Name}", templateName); } }