feat(templateMatcher,dal): Первая реализация SyncTemplatesForJobGroup для сгруппированных типов групп регламентных работ.

This commit is contained in:
Mikhail Kuznetsov
2025-12-19 19:15:58 +10:00
parent cc104c30b1
commit 7ca536ce52
20 changed files with 687 additions and 71 deletions

View File

@@ -1,5 +1,4 @@

using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore;
using PARR.BLL.Domain.Mq;
using PARR.BLL.Services.Interfaces;
using PARR.Common.Domain;
@@ -43,31 +42,23 @@ namespace PARR.TemplateGeneratorWorker
this.templateService = templateService;
this.esppScheduleTransformService = esppScheduleTransformService;
}
public async Task GenerateTemplateAsync(string msg)
{
logger.LogInformation($"Получили запрос: {msg}");
var query = transformService.GetModelFromJson<TemplateGeneratorWorkerMq>(msg);
var query = transformService.GetModelFromJson<TemplateGeneratorMq>(msg);
if (query == null)
return;
if (!await validatorService.IsValidAsync(query.JobId, query.UnitId))
{
logger.LogError($"Некорректные параметры регламентной работы или Unit {nameof(Job)}: {query.JobId}, {nameof(Unit)}: {query.UnitId}");
logger.LogError("Не удалось десериализовать запрос: {Message}", msg);
return;
}
var existing = await templateService
.Get()
.AsNoTracking()
.FirstOrDefaultAsync(t => t.JobId == query.JobId && t.UnitId == query.UnitId);
if (existing != null)
// Проверяем всё
if (!await validatorService.IsValidAsync(query.JobId, query.UnitId, query.Index, query.UnitsInTemplate))
{
logger.LogWarning("Шаблон уже существует (Job={JobId}, Unit={UnitId}) → пропускаем Create", query.JobId, query.UnitId);
logger.LogError($"Параметры запроса не прошли валидацию: JobId={query.JobId}, UnitId={query.UnitId}, Index={query.Index}, UnitsInTemplateCount={query.UnitsInTemplate?.Count ?? 0}");
return;
}
@@ -101,22 +92,32 @@ namespace PARR.TemplateGeneratorWorker
IsActiveTemplate = query.IsActiveTemplate ?? false,
IsActiveSchedule = query.IsActiveSchedule ?? false,
NextRun = nextRun,
//IsUnused = false,
StatusTypeId = TemplateStatusTypeEnum.Used,
InitiatorComment = query.HistoryInitiator?.InitiatorComment,
InitiatorParrComponentId = query.HistoryInitiator?.InitiatorParrComponentId
InitiatorParrComponentId = query.HistoryInitiator?.InitiatorParrComponentId,
Index = query.Index
};
if (await templateService.CreateAsync(template) && await templateService.CommitAsync(new HistoryInitiator { InitiatorComment = "Запрос на генерацию с тестового шаблона", InitiatorParrComponentId = ParrComponentsEnum.TemplateTaskGenerator }))
// Устанавливаем UnitsInTemplate
if (query.UnitsInTemplate != null && query.UnitsInTemplate.Any())
{
logger.LogInformation("Создан шаблон: Id={TemplateId}, Name={Name}, Job={JobId}, Unit={UnitId}",
template.Id, template.Name, query.JobId, query.UnitId);
template.UnitsInTemplate = query.UnitsInTemplate.Select(unitId => new UnitsInTemplate { UnitId = unitId }).ToList();
}
else
{
logger.LogError("Ошибка создания шаблона: Name={Name}", templateName);
// Если список пуст, все равно инициализируем коллекцию, чтобы избежать NullReferenceException при сохранении (если это не nullable)
template.UnitsInTemplate = new List<UnitsInTemplate>();
}
if (await templateService.CreateAsync(template) && await templateService.CommitAsync(new HistoryInitiator { InitiatorComment = "Запрос на генерацию с тестового шаблона", InitiatorParrComponentId = ParrComponentsEnum.TemplateTaskGenerator }))
{
logger.LogInformation("Создан шаблон: Id={TemplateId}, Name={Name}, Job={JobId}, Unit={UnitId}, Index={Index}, UnitsInTemplateCount={UnitsCount}",
template.Id, template.Name, query.JobId, query.UnitId, query.Index, template.UnitsInTemplate.Count);
}
else
{
logger.LogError("Ошибка создания шаблона: Name={Name}, JobId={JobId}, UnitId={UnitId}, Index={Index}", templateName, query.JobId, query.UnitId, query.Index);
}
}
}
}
}