feat(tempateMatcher,aihitLoader,dal): В UnitFilter добавлен Cache; в данные по ПТК добавлены аттрибуты "Холодный резерв" и "ДОПОЛНИТЕЛЬНАЯ_ИНФОРМАЦИЯ"; в синхронизаторах устанавливается неактуальная работа при деактивации
This commit is contained in:
@@ -69,6 +69,16 @@ internal class SimpleTemplateSynchronizer : ITemplateSynchronizer
|
||||
{
|
||||
logger.LogDebug("Начало синхронизации шаблонов для JobId {JobId}", jobId);
|
||||
|
||||
// Загружаем заранее подготовленный Job (например, для неиспользуемых шаблонов)
|
||||
var unusedJobId = Guid.Parse("8f85a91c-a223-4686-bb69-1f0ee73624f2");
|
||||
|
||||
var unusedJob = await jobService.Get()
|
||||
.AsNoTracking()
|
||||
.Include(j => j.Tnk)
|
||||
.Include(j => j.Group)
|
||||
.ThenInclude(g => g.GroupType)
|
||||
.FirstOrDefaultAsync(j => j.Id == unusedJobId);
|
||||
|
||||
var expectedUnitIds = await GetExpectedUnitIdsAsync(jobId) ?? new HashSet<Guid>();
|
||||
logger.LogDebug("JobId {JobId}: найдено {Count} UnitId по фильтрам.", jobId, expectedUnitIds.Count);
|
||||
|
||||
@@ -106,7 +116,7 @@ internal class SimpleTemplateSynchronizer : ITemplateSynchronizer
|
||||
|
||||
foreach (var template in existingTemplates)
|
||||
{
|
||||
await DeactivateTemplateAsync(template, jobId, initiator);
|
||||
await DeactivateTemplateAsync(template, jobId, unusedJob, initiator);
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -125,14 +135,14 @@ internal class SimpleTemplateSynchronizer : ITemplateSynchronizer
|
||||
|
||||
foreach (var template in templatesToDeactivate)
|
||||
{
|
||||
await DeactivateTemplateAsync(template, jobId, initiator);
|
||||
await DeactivateTemplateAsync(template, jobId, unusedJob, initiator);
|
||||
}
|
||||
|
||||
// Перечитываем шаблоны после деактивации
|
||||
existingTemplates = await templateService.Get()
|
||||
.AsNoTracking()
|
||||
.Include(t=>t.Job)
|
||||
.ThenInclude(t=>t.Tnk)
|
||||
.Include(t => t.Job)
|
||||
.ThenInclude(t => t.Tnk)
|
||||
.Where(t => t.JobId == jobId)
|
||||
.ToListAsync();
|
||||
|
||||
@@ -202,6 +212,16 @@ internal class SimpleTemplateSynchronizer : ITemplateSynchronizer
|
||||
{
|
||||
logger.LogDebug("Начало обновления шаблонов для JobId {JobId}", jobId);
|
||||
|
||||
// Загружаем заранее подготовленный Job (например, для неиспользуемых шаблонов)
|
||||
var unusedJobId = Guid.Parse("8f85a91c-a223-4686-bb69-1f0ee73624f2");
|
||||
|
||||
var unusedJob = await jobService.Get()
|
||||
.AsNoTracking()
|
||||
.Include(j => j.Tnk)
|
||||
.Include(j => j.Group)
|
||||
.ThenInclude(g => g.GroupType)
|
||||
.FirstOrDefaultAsync(j => j.Id == unusedJobId);
|
||||
|
||||
var existingTemplates = await templateService.Get()
|
||||
.AsNoTracking()
|
||||
.Where(t => t.JobId == jobId)
|
||||
@@ -237,7 +257,18 @@ internal class SimpleTemplateSynchronizer : ITemplateSynchronizer
|
||||
targetStatus = TemplateStatusTypeEnum.Unused;
|
||||
targetIsActiveTemplate = DefaultUnusedTemplateState;
|
||||
targetIsActiveSchedule = DefaultUnusedScheduleState;
|
||||
expectedName = GetTemplateNameForUnused(expectedName);
|
||||
|
||||
// ✅ Вычисляем имя шаблона с новым unusedJob
|
||||
if (unusedJob != null)
|
||||
{
|
||||
expectedName = await GetNormalizedTemplateNameAsync(unusedJob, template.UnitId);
|
||||
}
|
||||
else
|
||||
{
|
||||
logger.LogError("Job для деактивированных шаблонов не найден.");
|
||||
expectedName = GetTemplateNameForUnused(template.Name);
|
||||
}
|
||||
|
||||
logger.LogInformation("Шаблон {TemplateId} (UnitId {UnitId}) → деактивация.", template.Id, template.UnitId);
|
||||
}
|
||||
|
||||
@@ -270,7 +301,7 @@ internal class SimpleTemplateSynchronizer : ITemplateSynchronizer
|
||||
var updateRequest = new TemplateUpdaterMq
|
||||
{
|
||||
TemplateId = template.Id,
|
||||
JobId = jobId,
|
||||
JobId = unitStillInFilter ? jobId : unusedJob?.Id ?? jobId, // ✅ Используем unusedJob.Id, если деактивация
|
||||
UnitId = template.UnitId,
|
||||
Name = expectedName,
|
||||
IsActiveTemplate = targetIsActiveTemplate,
|
||||
@@ -293,6 +324,7 @@ internal class SimpleTemplateSynchronizer : ITemplateSynchronizer
|
||||
private async Task<bool> DeactivateTemplateAsync(
|
||||
Template template,
|
||||
Guid jobId,
|
||||
Job unusedJob,
|
||||
HistoryInitiator initiator)
|
||||
{
|
||||
if (template.StatusTypeId == TemplateStatusTypeEnum.Updating)
|
||||
@@ -316,12 +348,21 @@ internal class SimpleTemplateSynchronizer : ITemplateSynchronizer
|
||||
return false;
|
||||
}
|
||||
|
||||
if (unusedJob == null)
|
||||
{
|
||||
logger.LogError("Job для деактивированных шаблонов не найден.");
|
||||
return false;
|
||||
}
|
||||
|
||||
// ✅ Вычисляем имя шаблона с новым Job
|
||||
var expectedName = await GetNormalizedTemplateNameAsync(unusedJob, template.UnitId);
|
||||
|
||||
var updateRequest = new TemplateUpdaterMq
|
||||
{
|
||||
TemplateId = template.Id,
|
||||
JobId = jobId,
|
||||
JobId = unusedJob.Id, // ✅ Используем unusedJob.Id
|
||||
UnitId = template.UnitId,
|
||||
Name = GetTemplateNameForUnused(template.Name),
|
||||
Name = GetTemplateNameForUnused(expectedName), // ✅ Используем новое имя
|
||||
IsActiveTemplate = DefaultUnusedTemplateState,
|
||||
IsActiveSchedule = DefaultUnusedScheduleState,
|
||||
LastRun = template.LastRun,
|
||||
@@ -434,7 +475,7 @@ internal class SimpleTemplateSynchronizer : ITemplateSynchronizer
|
||||
{
|
||||
return await jobService.Get()
|
||||
.AsNoTracking()
|
||||
.Include(j=>j.Tnk)
|
||||
.Include(j => j.Tnk)
|
||||
.Include(j => j.Group)
|
||||
.ThenInclude(j => j.GroupType)
|
||||
.Include(j => j.AutoControl)
|
||||
@@ -453,8 +494,8 @@ internal class SimpleTemplateSynchronizer : ITemplateSynchronizer
|
||||
var templateForShortcodes = new TemplateForShortcodes
|
||||
{
|
||||
Id = Guid.Empty, // шаблон ещё не создан
|
||||
Index = null,
|
||||
JobId = job.Id,
|
||||
Index = null,
|
||||
JobId = job.Id,
|
||||
UnitId = unitId,
|
||||
Job = new JobForShortcodes
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user