feat(templateMatcher): добавлена поддержка настроек AutoControl.

This commit is contained in:
Mikhail Kuznetsov
2025-12-08 10:32:13 +10:00
parent 4815840f64
commit 96a1736ef5

View File

@@ -18,7 +18,10 @@ namespace PARR.TemplateMatcher
internal class TemplateMatcher : ITemplateMatcher internal class TemplateMatcher : ITemplateMatcher
{ {
private const int UnusedCandidateBatchSize = 10; private const int UnusedCandidateBatchSize = 10;
private const bool DefaultUnusedTemplateState = false;
private const bool DefaultUnusedScheduleState = false;
private const bool DefaultUsedTemplateState = false;
private const bool DefaultUsedScheduleState = false;
private readonly ILogger<TemplateMatcher> logger; private readonly ILogger<TemplateMatcher> logger;
private readonly IUnitFilterService unitFilterService; private readonly IUnitFilterService unitFilterService;
private readonly MqSettings mqSettings; private readonly MqSettings mqSettings;
@@ -61,7 +64,7 @@ namespace PARR.TemplateMatcher
return; return;
} }
var job = await GetJobWithGroupAsync(jobId); var job = await GetJobWithGroupAndAutoControlAsync(jobId);
if (job == null) if (job == null)
{ {
logger.LogError("Job с Id {JobId} не найден.", jobId); logger.LogError("Job с Id {JobId} не найден.", jobId);
@@ -103,8 +106,8 @@ namespace PARR.TemplateMatcher
JobId = jobId, JobId = jobId,
UnitId = template.UnitId, UnitId = template.UnitId,
Name = template.Name, Name = template.Name,
IsActiveTemplate = false, IsActiveTemplate = DefaultUnusedTemplateState,
IsActiveSchedule = false, IsActiveSchedule = DefaultUnusedScheduleState,
LastRun = template.LastRun, LastRun = template.LastRun,
NextRun = template.NextRun, NextRun = template.NextRun,
Index = template.Index, Index = template.Index,
@@ -139,14 +142,16 @@ namespace PARR.TemplateMatcher
var expectedName = await GetNormalizedTemplateNameAsync(job, unitId); var expectedName = await GetNormalizedTemplateNameAsync(job, unitId);
var nextRun = await GetNextRunAsync(job); // новый шаблон → всегда пересчитываем var nextRun = await GetNextRunAsync(job); // новый шаблон → всегда пересчитываем
var updateRequest = new TemplateUpdaterMq var updateRequest = new TemplateUpdaterMq
{ {
TemplateId = reused.Id, TemplateId = reused.Id,
JobId = jobId, JobId = jobId,
UnitId = unitId, UnitId = unitId,
Name = expectedName, Name = expectedName,
IsActiveTemplate = false, IsActiveTemplate = job.AutoControl?.InitUsedTemplateState ?? DefaultUsedTemplateState,
IsActiveSchedule = false, IsActiveSchedule = job.AutoControl?.InitUsedScheduleState ?? DefaultUsedScheduleState,
StatusTypeId = TemplateStatusTypeEnum.Used, StatusTypeId = TemplateStatusTypeEnum.Used,
Initiator = initiator, Initiator = initiator,
NextRun = nextRun NextRun = nextRun
@@ -237,7 +242,7 @@ namespace PARR.TemplateMatcher
if (!existingTemplates.Any()) return; if (!existingTemplates.Any()) return;
var job = await GetJobWithGroupAsync(jobId); var job = await GetJobWithGroupAndAutoControlAsync(jobId);
if (job == null) return; if (job == null) return;
var currentUnitIds = await GetExpectedUnitIdsAsync(jobId); var currentUnitIds = await GetExpectedUnitIdsAsync(jobId);
@@ -264,8 +269,8 @@ namespace PARR.TemplateMatcher
else else
{ {
targetStatus = TemplateStatusTypeEnum.Unused; targetStatus = TemplateStatusTypeEnum.Unused;
targetIsActiveTemplate = false; targetIsActiveTemplate = DefaultUnusedTemplateState;
targetIsActiveSchedule = false; targetIsActiveSchedule = DefaultUnusedScheduleState;
logger.LogInformation("Шаблон {TemplateId} (UnitId {UnitId}) → деактивация.", template.Id, template.UnitId); logger.LogInformation("Шаблон {TemplateId} (UnitId {UnitId}) → деактивация.", template.Id, template.UnitId);
} }
@@ -399,10 +404,11 @@ namespace PARR.TemplateMatcher
} }
private async Task<Job?> GetJobWithGroupAsync(Guid jobId) private async Task<Job?> GetJobWithGroupAndAutoControlAsync(Guid jobId)
{ {
return await jobService.Get() return await jobService.Get()
.Include(j => j.Group) .Include(j => j.Group)
.Include(j => j.AutoControl)
.FirstOrDefaultAsync(j => j.Id == jobId); .FirstOrDefaultAsync(j => j.Id == jobId);
} }