fix(templateMatcher): при синхронизация добавлена логика актуализации имени шаблона.
This commit is contained in:
@@ -7,13 +7,13 @@ namespace PARR.Constants
|
|||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Только сгенерировать недостающие шаблоны(можно использовать IsUnused).
|
/// Только сгенерировать недостающие шаблоны(можно использовать IsUnused).
|
||||||
/// Создать недостающие шаблоны, перепривязать к нужному Job в маках одного JobGroup.
|
/// Создать недостающие шаблоны, перепривязать к нужному Job в рамках одного JobGroup.
|
||||||
/// Выключить+включить в соответствии с настройками фильтров.
|
/// Выключить+включить в соответствии с настройками фильтров.
|
||||||
/// Полное соответвие Template к Job.
|
/// Полное соответвие Template к Job.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
Sync = 0,
|
Sync = 0,
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Только меняет имя шаблона и деактивирует шаблон и расписание, в случае когда ЭК не соответсвует Job+ставит статус Unused
|
/// Только меняет имя шаблона
|
||||||
/// </summary>
|
/// </summary>
|
||||||
Update = 1
|
Update = 1
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,7 +4,6 @@ using PARR.BLL.Domain.Mq;
|
|||||||
using PARR.BLL.Services.Interfaces;
|
using PARR.BLL.Services.Interfaces;
|
||||||
using PARR.Common.Domain;
|
using PARR.Common.Domain;
|
||||||
using PARR.Constants;
|
using PARR.Constants;
|
||||||
using PARR.DAL.Contracts;
|
|
||||||
using PARR.DAL.DomainServices.Interfaces;
|
using PARR.DAL.DomainServices.Interfaces;
|
||||||
using PARR.DAL.Models;
|
using PARR.DAL.Models;
|
||||||
using PARR.DAL.Models.Job;
|
using PARR.DAL.Models.Job;
|
||||||
@@ -61,8 +60,7 @@ internal class GroupedTemplateSynchronizer : ITemplateSynchronizer
|
|||||||
IUnitFieldService unitFieldService,
|
IUnitFieldService unitFieldService,
|
||||||
ITemplateDeactivator templateDeactivator,
|
ITemplateDeactivator templateDeactivator,
|
||||||
ITemplateNameNormalizer templateNameNormalizer,
|
ITemplateNameNormalizer templateNameNormalizer,
|
||||||
ITemplateUpdaterMqSender templateUpdaterMqSender,
|
ITemplateUpdaterMqSender templateUpdaterMqSender
|
||||||
SettingsFromDb settingsFromDb
|
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
this.logger = logger;
|
this.logger = logger;
|
||||||
@@ -113,7 +111,7 @@ internal class GroupedTemplateSynchronizer : ITemplateSynchronizer
|
|||||||
|
|
||||||
var jobsInGroup = jobGroup.Jobs.ToList();
|
var jobsInGroup = jobGroup.Jobs.ToList();
|
||||||
|
|
||||||
// --- НОВАЯ ЛОГИКА: Получение FieldId и разрешённых значений для "РАБОЧАЯ_ГР_ОТВ_ЗА_ЭК" ---
|
// --- Получение FieldId и разрешённых значений для "РАБОЧАЯ_ГР_ОТВ_ЗА_ЭК" ---
|
||||||
var workGroupField = await unitFieldService.GetByAihitNameAsync("РАБОЧАЯ_ГР_ОТВ_ЗА_ЭК");
|
var workGroupField = await unitFieldService.GetByAihitNameAsync("РАБОЧАЯ_ГР_ОТВ_ЗА_ЭК");
|
||||||
if (workGroupField == null)
|
if (workGroupField == null)
|
||||||
{
|
{
|
||||||
@@ -479,7 +477,7 @@ internal class GroupedTemplateSynchronizer : ITemplateSynchronizer
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
logger.LogDebug("Юнит {TargetUnitId} НЕ найден в groupedRelationships.Values после разрешения конфликтов.", targetUnitId);
|
logger.LogDebug("Юнит {TargetUnitId} НЕ найден в groupedRelationships.Values после разрешения конфликтов.", targetUnitId);
|
||||||
// ❌ юнит отсеялся на этапе разрешения конфликтов
|
// юнит отсеялся на этапе разрешения конфликтов
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -705,7 +703,7 @@ internal class GroupedTemplateSynchronizer : ITemplateSynchronizer
|
|||||||
var key = (existingTemplate.JobId, existingTemplate.UnitId, existingTemplate.Index ?? -1);
|
var key = (existingTemplate.JobId, existingTemplate.UnitId, existingTemplate.Index ?? -1);
|
||||||
if (!expectedTemplateKeys.Contains(key))
|
if (!expectedTemplateKeys.Contains(key))
|
||||||
{
|
{
|
||||||
logger.LogInformation("Деактивация лишнего шаблона {TemplateId} (Job {JobId}, Regional {UnitId}, Index {Index}).", existingTemplate.Id, existingTemplate.JobId, existingTemplate.UnitId, existingTemplate.Index);
|
logger.LogInformation("Деактивация лишнего шаблона {TemplateId} (Job {JobId}, Relationship {UnitId}, Index {Index}).", existingTemplate.Id, existingTemplate.JobId, existingTemplate.UnitId, existingTemplate.Index);
|
||||||
await templateDeactivator.DeactivateTemplateAsync(existingTemplate, initiator);
|
await templateDeactivator.DeactivateTemplateAsync(existingTemplate, initiator);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -130,16 +130,20 @@ internal class SimpleTemplateSynchronizer : ITemplateSynchronizer
|
|||||||
.Where(t => t.JobId == jobId)
|
.Where(t => t.JobId == jobId)
|
||||||
.ToListAsync();
|
.ToListAsync();
|
||||||
|
|
||||||
var existingUnitIds = existingTemplates
|
var existingUsedTemplates = existingTemplates
|
||||||
.Where(t => t.StatusTypeId == TemplateStatusTypeEnum.Used)
|
.Where(t => t.StatusTypeId == TemplateStatusTypeEnum.Used)
|
||||||
|
.ToList();
|
||||||
|
|
||||||
|
var existingUnitIds = existingUsedTemplates
|
||||||
.Select(t => t.UnitId)
|
.Select(t => t.UnitId)
|
||||||
.ToHashSet();
|
.ToHashSet();
|
||||||
|
|
||||||
var newUnitIds = unitIds.Except(existingUnitIds).ToList();
|
var newUnitIds = unitIds.Except(existingUnitIds).ToList();
|
||||||
var unusedTemplates = existingTemplates
|
var unusedTemplates = existingUsedTemplates
|
||||||
.Where(t => t.StatusTypeId == TemplateStatusTypeEnum.Used && !unitIds.Contains(t.UnitId))
|
.Where(t => !unitIds.Contains(t.UnitId))
|
||||||
.ToList();
|
.ToList();
|
||||||
|
|
||||||
|
// Обработка новых юнитов
|
||||||
foreach (var unitId in newUnitIds)
|
foreach (var unitId in newUnitIds)
|
||||||
{
|
{
|
||||||
var reusableTemplate = await templateReuser.TryReuseOneUnusedTemplateAsync(jobId, unitId, initiator);
|
var reusableTemplate = await templateReuser.TryReuseOneUnusedTemplateAsync(jobId, unitId, initiator);
|
||||||
@@ -174,6 +178,40 @@ internal class SimpleTemplateSynchronizer : ITemplateSynchronizer
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Обработка существующих шаблонов (проверка имени)
|
||||||
|
foreach (var template in existingUsedTemplates)
|
||||||
|
{
|
||||||
|
if (unitIds.Contains(template.UnitId))
|
||||||
|
{
|
||||||
|
var expectedName = await templateNameNormalizer.GetNormalizedTemplateNameAsync(job, template.UnitId);
|
||||||
|
if (!string.Equals(template.Name, expectedName, StringComparison.OrdinalIgnoreCase))
|
||||||
|
{
|
||||||
|
logger.LogDebug("Шаблон {TemplateId} требует обновления имени: старое = '{OldName}', новое = '{NewName}'", template.Id, template.Name, expectedName);
|
||||||
|
|
||||||
|
var nextRun = await GetNextRunAsync(job, template.NextRun);
|
||||||
|
|
||||||
|
var updateRequest = new TemplateUpdaterMq
|
||||||
|
{
|
||||||
|
TemplateId = template.Id,
|
||||||
|
JobId = jobId,
|
||||||
|
UnitId = template.UnitId,
|
||||||
|
Name = expectedName,
|
||||||
|
IsActiveTemplate = template.IsActiveTemplate,
|
||||||
|
IsActiveSchedule = template.IsActiveSchedule,
|
||||||
|
LastRun = template.LastRun,
|
||||||
|
NextRun = nextRun,
|
||||||
|
Index = template.Index,
|
||||||
|
StatusTypeId = TemplateStatusTypeEnum.Used,
|
||||||
|
Initiator = initiator,
|
||||||
|
UnitsInTemplate = new List<Guid>() // для простого шаблона
|
||||||
|
};
|
||||||
|
|
||||||
|
await templateUpdaterMqSender.SendTemplateUpdateMessageAsync(updateRequest);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Деактивация лишних шаблонов
|
||||||
foreach (var unusedTemplate in unusedTemplates)
|
foreach (var unusedTemplate in unusedTemplates)
|
||||||
{
|
{
|
||||||
logger.LogInformation("Деактивация лишнего шаблона {TemplateId} (Job {JobId}, UnitId {UnitId}).", unusedTemplate.Id, jobId, unusedTemplate.UnitId);
|
logger.LogInformation("Деактивация лишнего шаблона {TemplateId} (Job {JobId}, UnitId {UnitId}).", unusedTemplate.Id, jobId, unusedTemplate.UnitId);
|
||||||
|
|||||||
Reference in New Issue
Block a user