feat(dal): TemplateDistributer - добавлен параметр, учитывать или нет выходные и праздничные дни

This commit is contained in:
Mikhail Trubnikov
2026-01-19 16:33:11 +10:00
parent 6a8f90c860
commit 6e8e3c89c2
3 changed files with 18 additions and 10 deletions

View File

@@ -13,13 +13,14 @@ namespace PARR.DAL.NextRunServices.Subservices
/// <param name="duration">Длительность распределения, дней</param>
/// <param name="referenceDate">ReferenceDate</param>
/// <param name="allTemplates">Спиоск шаблонов для распределения</param>
/// <param name="excludeWeekends">Исключать выходные из распределения</param>
/// <returns></returns>
Task<List<TemplateNextRunResultDto>> DistributeTemplatesAsync(DateOnly startDate, int duration, DateTimeOffset referenceDate, List<TemplateNextRunDto> allTemplates);
Task<List<TemplateNextRunResultDto>> DistributeTemplatesAsync(DateOnly startDate, int duration, DateTimeOffset referenceDate, List<TemplateNextRunDto> allTemplates, bool excludeWeekends);
/// <summary>
/// Возвращает актуальную дату выполнения для одного шаблона, учитывая план нагрузки.
/// Возвращает обновлённый шаблон с новой датой выполнения.
/// </summary>
Task<TemplateNextRunResultDto> GetValidNextRunForTemplateAsync(DateOnly startDate, int duration, DateTimeOffset referenceDate, TemplateNextRunDto targetTemplate, List<TemplateNextRunDto> allTemplates);
Task<TemplateNextRunResultDto> GetValidNextRunForTemplateAsync(DateOnly startDate, int duration, DateTimeOffset referenceDate, TemplateNextRunDto targetTemplate, List<TemplateNextRunDto> allTemplates, bool excludeWeekends);
}
}

View File

@@ -25,7 +25,7 @@ namespace PARR.DAL.NextRunServices.Subservices
}
public Task<TemplateNextRunResultDto> GetValidNextRunForTemplateAsync(DateOnly startDate, int duration, DateTimeOffset referenceDate, TemplateNextRunDto targetTemplate, List<TemplateNextRunDto> allTemplates)
public Task<TemplateNextRunResultDto> GetValidNextRunForTemplateAsync(DateOnly startDate, int duration, DateTimeOffset referenceDate, TemplateNextRunDto targetTemplate, List<TemplateNextRunDto> allTemplates, bool excludeWeekends)
{
//TODO:
throw new NotImplementedException();
@@ -35,7 +35,7 @@ namespace PARR.DAL.NextRunServices.Subservices
public async Task<List<TemplateNextRunResultDto>> DistributeTemplatesAsync(DateOnly startDate, int duration, DateTimeOffset referenceDate, List<TemplateNextRunDto> allTemplates)
public async Task<List<TemplateNextRunResultDto>> DistributeTemplatesAsync(DateOnly startDate, int duration, DateTimeOffset referenceDate, List<TemplateNextRunDto> 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<DateOnly>();
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);

View File

@@ -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
/// </summary>
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);
}