feat(templateGenerator, templateMatcher, dal): INextRunService прикручен к Matcher + Syncer.

This commit is contained in:
Mikhail Trubnikov
2026-01-22 12:06:57 +10:00
parent 9f035efb35
commit 1845154b26
4 changed files with 51 additions and 30 deletions

View File

@@ -3,7 +3,7 @@
/// <summary>
/// Сервис трансформации расписания ЕСПП в дату/расписание
/// </summary>
public interface IEsppScheduleTransformService
internal interface IEsppScheduleTransformService
{
///// <summary>
///// Получить следующую дату согласно расписания

View File

@@ -8,6 +8,7 @@ using PARR.DAL.DomainServices.Shortcodes.Models;
using PARR.DAL.Models;
using PARR.DAL.Models.Job;
using PARR.DAL.Models.Unit;
using PARR.DAL.NextRunServices;
using PARR.DAL.Services.Interfaces;
using PARR.DAL.Services.Interfaces.Job;
using PARR.DAL.TransformServices;
@@ -23,7 +24,9 @@ namespace PARR.TemplateGeneratorWorker
private readonly IJobService jobService;
private readonly IShortcodesService shortcodesService;
private readonly ITemplateService templateService;
private readonly IEsppScheduleTransformService esppScheduleTransformService;
private readonly INextRunService nextRunService;
//private readonly IEsppScheduleTransformService esppScheduleTransformService;
public TemplateGenerator(
ILogger<TemplateGenerator> logger,
@@ -32,7 +35,8 @@ namespace PARR.TemplateGeneratorWorker
IJobService jobService,
IShortcodesService shortcodesService,
ITemplateService templateService,
IEsppScheduleTransformService esppScheduleTransformService
INextRunService nextRunService
//IEsppScheduleTransformService esppScheduleTransformService
)
{
this.logger = logger;
@@ -41,7 +45,8 @@ namespace PARR.TemplateGeneratorWorker
this.jobService = jobService;
this.shortcodesService = shortcodesService;
this.templateService = templateService;
this.esppScheduleTransformService = esppScheduleTransformService;
this.nextRunService = nextRunService;
//this.esppScheduleTransformService = esppScheduleTransformService;
}
public async Task GenerateTemplateAsync(string msg)
@@ -97,7 +102,8 @@ namespace PARR.TemplateGeneratorWorker
var templateName = await shortcodesService.ApplyShortcodesAsync(job.TemplateNameMask!, tempTemplateForShortcodes);
var nextRun = await esppScheduleTransformService.GetNextDateAsync(job.GroupId, job.Group!.ReferenceDate);
//var nextRun = await esppScheduleTransformService.GetNextDateAsync(job.GroupId, job.Group!.ReferenceDate);
var nextRun = await nextRunService.GetNextRunForNewTemplateAsync(job.GroupId);
var template = new Template
{

View File

@@ -10,6 +10,7 @@ using PARR.DAL.DomainServices.UnitFilterService;
using PARR.DAL.Models;
using PARR.DAL.Models.Job;
using PARR.DAL.Models.Unit;
using PARR.DAL.NextRunServices;
using PARR.DAL.Services.Interfaces;
using PARR.DAL.Services.Interfaces.Job;
using PARR.DAL.Services.Interfaces.Unit;
@@ -35,13 +36,14 @@ internal class GroupedTemplateSynchronizer : ITemplateSynchronizer
private readonly ITemplateService templateService;
private readonly IJobGroupService jobGroupService;
private readonly ITemplateReuser templateReuser;
private readonly IEsppScheduleTransformService esppScheduleTransformService;
//private readonly IEsppScheduleTransformService esppScheduleTransformService;
private readonly IUnitRegionalEkPtkGroupService regionalEkPtkGroupService;
private readonly IUnitFieldService unitFieldService;
private readonly ITemplateDeactivator templateDeactivator;
private readonly ITemplateNameNormalizer templateNameNormalizer;
private readonly ITemplateUpdaterMqSender templateUpdaterMqSender;
private readonly IMatchingStatusService matchingStatusService;
private readonly INextRunService nextRunService;
public GroupedTemplateSynchronizer(
ILogger<GroupedTemplateSynchronizer> logger,
@@ -54,13 +56,14 @@ internal class GroupedTemplateSynchronizer : ITemplateSynchronizer
ITemplateService templateService,
IJobGroupService jobGroupService,
ITemplateReuser templateReuser,
IEsppScheduleTransformService esppScheduleTransformService,
//IEsppScheduleTransformService esppScheduleTransformService,
IUnitRegionalEkPtkGroupService regionalEkPtkGroupService,
IUnitFieldService unitFieldService,
ITemplateDeactivator templateDeactivator,
ITemplateNameNormalizer templateNameNormalizer,
ITemplateUpdaterMqSender templateUpdaterMqSender,
IMatchingStatusService matchingStatusService
IMatchingStatusService matchingStatusService,
INextRunService nextRunService
)
{
this.logger = logger;
@@ -73,13 +76,14 @@ internal class GroupedTemplateSynchronizer : ITemplateSynchronizer
this.templateService = templateService;
this.jobGroupService = jobGroupService;
this.templateReuser = templateReuser;
this.esppScheduleTransformService = esppScheduleTransformService;
//this.esppScheduleTransformService = esppScheduleTransformService;
this.regionalEkPtkGroupService = regionalEkPtkGroupService;
this.unitFieldService = unitFieldService;
this.templateDeactivator = templateDeactivator;
this.templateNameNormalizer = templateNameNormalizer;
this.templateUpdaterMqSender = templateUpdaterMqSender;
this.matchingStatusService = matchingStatusService;
this.nextRunService = nextRunService;
}
public async Task SyncTemplatesForJobAsync(Guid jobId, HistoryInitiator initiator)
@@ -501,7 +505,8 @@ internal class GroupedTemplateSynchronizer : ITemplateSynchronizer
if (!string.Equals(existingTemplateForSubGroup.Name, expectedName, StringComparison.OrdinalIgnoreCase))
{
logger.LogDebug("Шаблон {TemplateId} требует обновления имени.", existingTemplateForSubGroup.Id);
var nextRun = await GetNextRunAsync(targetJob, existingTemplateForSubGroup.NextRun);
//var nextRun = await GetNextRunAsync(targetJob, existingTemplateForSubGroup.NextRun);
var nextRun = await nextRunService.GetNextRunForTemplateAsync(existingTemplateForSubGroup.Id, false);
var updateRequest = new TemplateUpdaterMq
{
TemplateId = existingTemplateForSubGroup.Id,
@@ -555,7 +560,8 @@ internal class GroupedTemplateSynchronizer : ITemplateSynchronizer
};
var expectedName = await templateNameNormalizer.GetNormalizedTemplateNameAsync(tempTemplateForName);
var nextRun = await GetNextRunAsync(targetJob);
//var nextRun = await GetNextRunAsync(targetJob);
var nextRun = await nextRunService.GetNextRunForTemplateAsync(reusableTemplate.Id, true);
var updateRequest = new TemplateUpdaterMq
{
@@ -705,7 +711,8 @@ internal class GroupedTemplateSynchronizer : ITemplateSynchronizer
};
var expectedName = await templateNameNormalizer.GetNormalizedTemplateNameAsync(tempTemplateForName);
var nextRun = await GetNextRunAsync(targetJob, template.NextRun);
//var nextRun = await GetNextRunAsync(targetJob, template.NextRun);
var nextRun = await nextRunService.GetNextRunForTemplateAsync(template.Id, false);
var updateRequest = new TemplateUpdaterMq
{
TemplateId = template.Id,
@@ -745,11 +752,11 @@ internal class GroupedTemplateSynchronizer : ITemplateSynchronizer
logger.LogError("Ошибка отправки команды создания группового шаблона для Job {JobId}, связанного юнита {RelationshipUnitId}, Index {Index}.", jobId, relationshipUnitId, index);
}
private async Task<DateTimeOffset> GetNextRunAsync(Job targetJob, DateTimeOffset? currentNextRun = null)
{
var referenceDate = targetJob.Group?.ReferenceDate ?? DateTimeOffset.UtcNow;
return await esppScheduleTransformService.GetNextDateAsync(targetJob.GroupId, referenceDate);
}
//private async Task<DateTimeOffset> GetNextRunAsync(Job targetJob, DateTimeOffset? currentNextRun = null)
//{
// var referenceDate = targetJob.Group?.ReferenceDate ?? DateTimeOffset.UtcNow;
// return await esppScheduleTransformService.GetNextDateAsync(targetJob.GroupId, referenceDate);
//}
private async Task UpdateMatchingStatusAsync(Guid jobGroupId, string comment)
{

View File

@@ -11,6 +11,7 @@ using PARR.DAL.DomainServices.Shortcodes;
using PARR.DAL.DomainServices.UnitFilterService;
using PARR.DAL.Models;
using PARR.DAL.Models.Job;
using PARR.DAL.NextRunServices;
using PARR.DAL.Services.Interfaces;
using PARR.DAL.Services.Interfaces.Job;
using PARR.DAL.Services.Interfaces.Unit;
@@ -40,12 +41,13 @@ internal class SimpleTemplateSynchronizer : ITemplateSynchronizer
private readonly ITemplateService templateService;
private readonly IJobService jobService;
private readonly ITemplateReuser templateReuser;
private readonly IEsppScheduleTransformService esppScheduleTransformService;
//private readonly IEsppScheduleTransformService esppScheduleTransformService;
private readonly ITemplateDeactivator templateDeactivator;
private readonly ITemplateNameNormalizer templateNameNormalizer;
private readonly ITemplateUpdaterMqSender templateUpdaterMqSender;
private readonly IMatchingStatusService matchingStatusService;
private readonly SettingsFromDb settingsFromDb;
private readonly INextRunService nextRunService;
public SimpleTemplateSynchronizer(
ILogger<SimpleTemplateSynchronizer> logger,
@@ -59,14 +61,15 @@ internal class SimpleTemplateSynchronizer : ITemplateSynchronizer
IJobService jobService,
ITemplateReuser templateReuser,
IShortcodesService shortcodesService,
IEsppScheduleTransformService esppScheduleTransformService,
//IEsppScheduleTransformService esppScheduleTransformService,
IUnitRegionalEkPtkGroupService regionalEkPtkGroupService,
IUnitFieldService unitFieldService,
ITemplateDeactivator templateDeactivator,
ITemplateNameNormalizer templateNameNormalizer,
ITemplateUpdaterMqSender templateUpdaterMqSender,
IMatchingStatusService matchingStatusService,
SettingsFromDb settingsFromDb
SettingsFromDb settingsFromDb,
INextRunService nextRunService
)
{
this.logger = logger;
@@ -76,12 +79,13 @@ internal class SimpleTemplateSynchronizer : ITemplateSynchronizer
this.templateService = templateService;
this.jobService = jobService;
this.templateReuser = templateReuser;
this.esppScheduleTransformService = esppScheduleTransformService;
//this.esppScheduleTransformService = esppScheduleTransformService;
this.templateDeactivator = templateDeactivator;
this.templateNameNormalizer = templateNameNormalizer;
this.templateUpdaterMqSender = templateUpdaterMqSender;
this.matchingStatusService = matchingStatusService;
this.settingsFromDb = settingsFromDb;
this.nextRunService = nextRunService;
}
public async Task SyncTemplatesForJobAsync(Guid jobId, HistoryInitiator initiator)
@@ -224,7 +228,8 @@ internal class SimpleTemplateSynchronizer : ITemplateSynchronizer
};
var expectedName = await templateNameNormalizer.GetNormalizedTemplateNameAsync(tempTemplateForName);
var nextRun = await GetNextRunAsync(job);
//var nextRun = await GetNextRunAsync(job);
var nextRun = await nextRunService.GetNextRunForTemplateAsync(reusableTemplate.Id, true);
var updateRequest = new TemplateUpdaterMq
{
@@ -259,7 +264,8 @@ internal class SimpleTemplateSynchronizer : ITemplateSynchronizer
{
logger.LogDebug("Шаблон {TemplateId} требует обновления имени: старое = '{OldName}', новое = '{NewName}'", template.Id, template.Name, expectedName);
var nextRun = await GetNextRunAsync(job, template.NextRun);
//var nextRun = await GetNextRunAsync(job, template.NextRun);
var nextRun = await nextRunService.GetNextRunForTemplateAsync(template.Id, false);
var updateRequest = new TemplateUpdaterMq
{
@@ -397,7 +403,8 @@ internal class SimpleTemplateSynchronizer : ITemplateSynchronizer
{
logger.LogDebug("Шаблон {TemplateId} требует обновления имени: старое = '{OldName}', новое = '{NewName}'", template.Id, template.Name, expectedName);
var nextRun = await GetNextRunAsync(job, template.NextRun);
//var nextRun = await GetNextRunAsync(job, template.NextRun);
var nextRun = await nextRunService.GetNextRunForTemplateAsync(template.Id, false);
var updateRequest = new TemplateUpdaterMq
{
@@ -503,7 +510,8 @@ internal class SimpleTemplateSynchronizer : ITemplateSynchronizer
continue;
}
var nextRun = await GetNextRunAsync(unusedJob);
//var nextRun = await GetNextRunAsync(unusedJob);
var nextRun = await nextRunService.GetNextRunForTemplateAsync(template.Id, false);
var updateRequest = new TemplateUpdaterMq
{
@@ -594,11 +602,11 @@ internal class SimpleTemplateSynchronizer : ITemplateSynchronizer
logger.LogError("Ошибка отправки команды создания простого шаблона для Job {JobId}, UnitId {UnitId}.", jobId, unitId);
}
private async Task<DateTimeOffset> GetNextRunAsync(Job job, DateTimeOffset? currentNextRun = null)
{
var referenceDate = job.Group?.ReferenceDate ?? DateTimeOffset.UtcNow;
return await esppScheduleTransformService.GetNextDateAsync(job.GroupId, referenceDate);
}
//private async Task<DateTimeOffset> GetNextRunAsync(Job job, DateTimeOffset? currentNextRun = null)
//{
// var referenceDate = job.Group?.ReferenceDate ?? DateTimeOffset.UtcNow;
// return await esppScheduleTransformService.GetNextDateAsync(job.GroupId, referenceDate);
//}
private async Task UpdateMatchingStatusAsync(Guid jobId, string comment)
{