feat(dal): TemplateDistributer - добавлен параметр, учитывать или нет выходные и праздничные дни
This commit is contained in:
@@ -13,13 +13,14 @@ namespace PARR.DAL.NextRunServices.Subservices
|
|||||||
/// <param name="duration">Длительность распределения, дней</param>
|
/// <param name="duration">Длительность распределения, дней</param>
|
||||||
/// <param name="referenceDate">ReferenceDate</param>
|
/// <param name="referenceDate">ReferenceDate</param>
|
||||||
/// <param name="allTemplates">Спиоск шаблонов для распределения</param>
|
/// <param name="allTemplates">Спиоск шаблонов для распределения</param>
|
||||||
|
/// <param name="excludeWeekends">Исключать выходные из распределения</param>
|
||||||
/// <returns></returns>
|
/// <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>
|
||||||
/// Возвращает актуальную дату выполнения для одного шаблона, учитывая план нагрузки.
|
/// Возвращает актуальную дату выполнения для одного шаблона, учитывая план нагрузки.
|
||||||
/// Возвращает обновлённый шаблон с новой датой выполнения.
|
/// Возвращает обновлённый шаблон с новой датой выполнения.
|
||||||
/// </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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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:
|
//TODO:
|
||||||
throw new NotImplementedException();
|
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 _startDate = GetStartPeriodDate(startDate, referenceDate);
|
||||||
var _endDate = GetEndPeriodDate(_startDate, duration);
|
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);
|
logger.LogInformation("Начинаем распределение {Count} шаблонов на {duration} дней, с {_startDate} по {_endDate}. ReferenceDate: {referenceDate}", allTemplates.Count, duration, _startDate, _endDate, referenceDate);
|
||||||
|
|
||||||
// Получаем список выходных/праздничных дней
|
// Получаем список выходных/праздничных дней
|
||||||
var weekends = await GetWeekendsAsync(_startDate, _endDate);
|
var weekends = new HashSet<DateOnly>();
|
||||||
logger.LogDebug("Найдено не рабочих дней: {Count}", weekends.Count);
|
if (excludeWeekends)
|
||||||
|
{
|
||||||
|
weekends = await GetWeekendsAsync(_startDate, _endDate);
|
||||||
|
logger.LogDebug("Найдено не рабочих дней: {Count}", weekends.Count);
|
||||||
|
|
||||||
foreach (var weekend in weekends)
|
foreach (var weekend in weekends)
|
||||||
logger.LogDebug("Не рабочий день: {weekend}", weekend);
|
logger.LogDebug("Не рабочий день: {weekend}", weekend);
|
||||||
|
}
|
||||||
|
|
||||||
// Получаем список рабочих дней (исключая выходные и праздники)
|
// Получаем список рабочих дней (исключая выходные и праздники)
|
||||||
var workDays = GetWorkDays(_startDate, _endDate, weekends);
|
var workDays = GetWorkDays(_startDate, _endDate, weekends);
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ namespace PARR.Test.NextRun
|
|||||||
this.templateDistributor = templateDistributor;
|
this.templateDistributor = templateDistributor;
|
||||||
}
|
}
|
||||||
|
|
||||||
int periodDays = 5;
|
int periodDays = 10;
|
||||||
DateTimeOffset referenceDate = new DateTimeOffset(2025, 12, 1, 7, 0, 0, TimeSpan.Zero);
|
DateTimeOffset referenceDate = new DateTimeOffset(2025, 12, 1, 7, 0, 0, TimeSpan.Zero);
|
||||||
|
|
||||||
public async Task Test()
|
public async Task Test()
|
||||||
@@ -25,7 +25,10 @@ namespace PARR.Test.NextRun
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
private async Task DistributeTemplatesAsync()
|
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);
|
//await GetValidNextRunForTemplateAsync(templates);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user