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

View File

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

View File

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