From 1845154b261fc2d5c4dcb4e1aff0db6fa3e9fa65 Mon Sep 17 00:00:00 2001 From: Mikhail Trubnikov Date: Thu, 22 Jan 2026 12:06:57 +1000 Subject: [PATCH] =?UTF-8?q?feat(templateGenerator,=20templateMatcher,=20da?= =?UTF-8?q?l):=20INextRunService=20=D0=BF=D1=80=D0=B8=D0=BA=D1=80=D1=83?= =?UTF-8?q?=D1=87=D0=B5=D0=BD=20=D0=BA=20Matcher=20+=20Syncer.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../IEsppScheduleTransformService.cs | 2 +- .../TemplateGenerator.cs | 14 +++++--- .../GroupedTemplateSynchronizer.cs | 31 ++++++++++------- .../SimpleTemplateSynchronizer.cs | 34 ++++++++++++------- 4 files changed, 51 insertions(+), 30 deletions(-) diff --git a/PARR.DAL/TransformServices/IEsppScheduleTransformService.cs b/PARR.DAL/TransformServices/IEsppScheduleTransformService.cs index 90f74fe9..b0ffecc6 100644 --- a/PARR.DAL/TransformServices/IEsppScheduleTransformService.cs +++ b/PARR.DAL/TransformServices/IEsppScheduleTransformService.cs @@ -3,7 +3,7 @@ /// /// Сервис трансформации расписания ЕСПП в дату/расписание /// - public interface IEsppScheduleTransformService + internal interface IEsppScheduleTransformService { ///// ///// Получить следующую дату согласно расписания diff --git a/PARR.TemplateGeneratorWorker/TemplateGenerator.cs b/PARR.TemplateGeneratorWorker/TemplateGenerator.cs index b10755a1..2e1d118d 100644 --- a/PARR.TemplateGeneratorWorker/TemplateGenerator.cs +++ b/PARR.TemplateGeneratorWorker/TemplateGenerator.cs @@ -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 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 { diff --git a/PARR.TemplateMatcher/Services/Implemetaions/GroupedTemplateSynchronizer.cs b/PARR.TemplateMatcher/Services/Implemetaions/GroupedTemplateSynchronizer.cs index fbbfa87a..0bb8deee 100644 --- a/PARR.TemplateMatcher/Services/Implemetaions/GroupedTemplateSynchronizer.cs +++ b/PARR.TemplateMatcher/Services/Implemetaions/GroupedTemplateSynchronizer.cs @@ -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 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 GetNextRunAsync(Job targetJob, DateTimeOffset? currentNextRun = null) - { - var referenceDate = targetJob.Group?.ReferenceDate ?? DateTimeOffset.UtcNow; - return await esppScheduleTransformService.GetNextDateAsync(targetJob.GroupId, referenceDate); - } + //private async Task 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) { diff --git a/PARR.TemplateMatcher/Services/Implemetaions/SimpleTemplateSynchronizer.cs b/PARR.TemplateMatcher/Services/Implemetaions/SimpleTemplateSynchronizer.cs index f8136260..f62f95ed 100644 --- a/PARR.TemplateMatcher/Services/Implemetaions/SimpleTemplateSynchronizer.cs +++ b/PARR.TemplateMatcher/Services/Implemetaions/SimpleTemplateSynchronizer.cs @@ -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 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 GetNextRunAsync(Job job, DateTimeOffset? currentNextRun = null) - { - var referenceDate = job.Group?.ReferenceDate ?? DateTimeOffset.UtcNow; - return await esppScheduleTransformService.GetNextDateAsync(job.GroupId, referenceDate); - } + //private async Task 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) {