From 6e8e3c89c209530e7f1c218bed75849fb52d7053 Mon Sep 17 00:00:00 2001 From: Mikhail Trubnikov Date: Mon, 19 Jan 2026 16:33:11 +1000 Subject: [PATCH] =?UTF-8?q?feat(dal):=20TemplateDistributer=20-=20=D0=B4?= =?UTF-8?q?=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=20=D0=BF=D0=B0=D1=80?= =?UTF-8?q?=D0=B0=D0=BC=D0=B5=D1=82=D1=80,=20=D1=83=D1=87=D0=B8=D1=82?= =?UTF-8?q?=D1=8B=D0=B2=D0=B0=D1=82=D1=8C=20=D0=B8=D0=BB=D0=B8=20=D0=BD?= =?UTF-8?q?=D0=B5=D1=82=20=D0=B2=D1=8B=D1=85=D0=BE=D0=B4=D0=BD=D1=8B=D0=B5?= =?UTF-8?q?=20=D0=B8=20=D0=BF=D1=80=D0=B0=D0=B7=D0=B4=D0=BD=D0=B8=D1=87?= =?UTF-8?q?=D0=BD=D1=8B=D0=B5=20=D0=B4=D0=BD=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Subservices/ITemplateDistributor.cs | 5 +++-- .../Subservices/TemplateDistributor.cs | 16 ++++++++++------ PARR.Test/NextRun/NextRunTest.cs | 7 +++++-- 3 files changed, 18 insertions(+), 10 deletions(-) diff --git a/PARR.DAL/NextRunServices/Subservices/ITemplateDistributor.cs b/PARR.DAL/NextRunServices/Subservices/ITemplateDistributor.cs index 7c04ff58..0936d6a9 100644 --- a/PARR.DAL/NextRunServices/Subservices/ITemplateDistributor.cs +++ b/PARR.DAL/NextRunServices/Subservices/ITemplateDistributor.cs @@ -13,13 +13,14 @@ namespace PARR.DAL.NextRunServices.Subservices /// Длительность распределения, дней /// ReferenceDate /// Спиоск шаблонов для распределения + /// Исключать выходные из распределения /// - Task> DistributeTemplatesAsync(DateOnly startDate, int duration, DateTimeOffset referenceDate, List allTemplates); + Task> DistributeTemplatesAsync(DateOnly startDate, int duration, DateTimeOffset referenceDate, List allTemplates, bool excludeWeekends); /// /// Возвращает актуальную дату выполнения для одного шаблона, учитывая план нагрузки. /// Возвращает обновлённый шаблон с новой датой выполнения. /// - Task GetValidNextRunForTemplateAsync(DateOnly startDate, int duration, DateTimeOffset referenceDate, TemplateNextRunDto targetTemplate, List allTemplates); + Task GetValidNextRunForTemplateAsync(DateOnly startDate, int duration, DateTimeOffset referenceDate, TemplateNextRunDto targetTemplate, List allTemplates, bool excludeWeekends); } } diff --git a/PARR.DAL/NextRunServices/Subservices/TemplateDistributor.cs b/PARR.DAL/NextRunServices/Subservices/TemplateDistributor.cs index 21c431d3..bbcf2c4b 100644 --- a/PARR.DAL/NextRunServices/Subservices/TemplateDistributor.cs +++ b/PARR.DAL/NextRunServices/Subservices/TemplateDistributor.cs @@ -25,7 +25,7 @@ namespace PARR.DAL.NextRunServices.Subservices } - public Task GetValidNextRunForTemplateAsync(DateOnly startDate, int duration, DateTimeOffset referenceDate, TemplateNextRunDto targetTemplate, List allTemplates) + public Task GetValidNextRunForTemplateAsync(DateOnly startDate, int duration, DateTimeOffset referenceDate, TemplateNextRunDto targetTemplate, List allTemplates, bool excludeWeekends) { //TODO: throw new NotImplementedException(); @@ -35,7 +35,7 @@ namespace PARR.DAL.NextRunServices.Subservices - public async Task> DistributeTemplatesAsync(DateOnly startDate, int duration, DateTimeOffset referenceDate, List allTemplates) + public async Task> DistributeTemplatesAsync(DateOnly startDate, int duration, DateTimeOffset referenceDate, List allTemplates, bool excludeWeekends) { var _startDate = GetStartPeriodDate(startDate, referenceDate); var _endDate = GetEndPeriodDate(_startDate, duration); @@ -43,11 +43,15 @@ namespace PARR.DAL.NextRunServices.Subservices logger.LogInformation("Начинаем распределение {Count} шаблонов на {duration} дней, с {_startDate} по {_endDate}. ReferenceDate: {referenceDate}", allTemplates.Count, duration, _startDate, _endDate, referenceDate); // Получаем список выходных/праздничных дней - var weekends = await GetWeekendsAsync(_startDate, _endDate); - logger.LogDebug("Найдено не рабочих дней: {Count}", weekends.Count); + var weekends = new HashSet(); + if (excludeWeekends) + { + weekends = await GetWeekendsAsync(_startDate, _endDate); + logger.LogDebug("Найдено не рабочих дней: {Count}", weekends.Count); - foreach (var weekend in weekends) - logger.LogDebug("Не рабочий день: {weekend}", weekend); + foreach (var weekend in weekends) + logger.LogDebug("Не рабочий день: {weekend}", weekend); + } // Получаем список рабочих дней (исключая выходные и праздники) var workDays = GetWorkDays(_startDate, _endDate, weekends); diff --git a/PARR.Test/NextRun/NextRunTest.cs b/PARR.Test/NextRun/NextRunTest.cs index 4e431db9..5791f4a2 100644 --- a/PARR.Test/NextRun/NextRunTest.cs +++ b/PARR.Test/NextRun/NextRunTest.cs @@ -12,7 +12,7 @@ namespace PARR.Test.NextRun this.templateDistributor = templateDistributor; } - int periodDays = 5; + int periodDays = 10; DateTimeOffset referenceDate = new DateTimeOffset(2025, 12, 1, 7, 0, 0, TimeSpan.Zero); public async Task Test() @@ -25,7 +25,10 @@ namespace PARR.Test.NextRun /// private async Task DistributeTemplatesAsync() { - var templates = await templateDistributor.DistributeTemplatesAsync(GetDateStart(), periodDays, referenceDate, GetTemplates()); + // исключать выходные и праздники + var excludeWeekends = true; + + var templates = await templateDistributor.DistributeTemplatesAsync(GetDateStart(), periodDays, referenceDate, GetTemplates(), excludeWeekends); //await GetValidNextRunForTemplateAsync(templates); }