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); }