feat(dal): templateDistributor теперь распределяет с учетом московского времени
This commit is contained in:
@@ -309,13 +309,13 @@ namespace PARR.DAL.NextRunServices
|
||||
public async Task<List<DateOnly>> GetWorkDaysAsync(DateOnly start, DateOnly end, bool excludeWeekends, DateTimeOffset referenceDate)
|
||||
{
|
||||
//return await templateDistributor.GetWorkDaysAsync(start, end, excludeWeekends);
|
||||
return await templateDistributor.GetWorkDaysTESTAsync(start, end, excludeWeekends, referenceDate);
|
||||
return await templateDistributor.GetWorkDaysV2Async(start, end, excludeWeekends, referenceDate);
|
||||
|
||||
}
|
||||
|
||||
public async Task<HashSet<DateOnly>> GetWeekendsAsync(DateOnly startDate, DateOnly endDate, DateTimeOffset referenceDate)
|
||||
{
|
||||
return await templateDistributor.GetWeekendsTESTAsync(startDate, endDate, referenceDate);
|
||||
return await templateDistributor.GetWeekendsV2Async(startDate, endDate, referenceDate);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,8 +2,7 @@
|
||||
|
||||
namespace PARR.DAL.NextRunServices.Subservices
|
||||
{
|
||||
//TODO: internal
|
||||
public interface ITemplateDistributor
|
||||
internal interface ITemplateDistributor
|
||||
{
|
||||
/// <summary>
|
||||
/// Распределяет все шаблоны на указанный период, учитывая план нагрузки.
|
||||
@@ -41,7 +40,17 @@ namespace PARR.DAL.NextRunServices.Subservices
|
||||
/// <param name="endDate"></param>
|
||||
/// <param name="referenceDate"></param>
|
||||
/// <returns></returns>
|
||||
Task<HashSet<DateOnly>> GetWeekendsTESTAsync(DateOnly startDate, DateOnly endDate, DateTimeOffset referenceDate);
|
||||
Task<HashSet<DateOnly>> GetWeekendsV2Async(DateOnly startDate, DateOnly endDate, DateTimeOffset referenceDate);
|
||||
|
||||
|
||||
///// <summary>
|
||||
///// Получить список рабочих дней
|
||||
///// </summary>
|
||||
///// <param name="start"></param>
|
||||
///// <param name="end"></param>
|
||||
///// <param name="excludeWeekends"></param>
|
||||
///// <returns></returns>
|
||||
//Task<List<DateOnly>> GetWorkDaysAsync(DateOnly start, DateOnly end, bool excludeWeekends);
|
||||
|
||||
|
||||
/// <summary>
|
||||
@@ -50,12 +59,9 @@ namespace PARR.DAL.NextRunServices.Subservices
|
||||
/// <param name="start"></param>
|
||||
/// <param name="end"></param>
|
||||
/// <param name="excludeWeekends"></param>
|
||||
/// <param name="referenceDate"></param>
|
||||
/// <returns></returns>
|
||||
Task<List<DateOnly>> GetWorkDaysAsync(DateOnly start, DateOnly end, bool excludeWeekends);
|
||||
|
||||
|
||||
|
||||
Task<List<DateOnly>> GetWorkDaysTESTAsync(DateOnly start, DateOnly end, bool excludeWeekends, DateTimeOffset referenceDate);
|
||||
Task<List<DateOnly>> GetWorkDaysV2Async(DateOnly start, DateOnly end, bool excludeWeekends, DateTimeOffset referenceDate);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -39,7 +39,8 @@ namespace PARR.DAL.NextRunServices.Subservices
|
||||
logger.LogDebug("Получаю актуальный nextRun для шаблона {templateId}. Текущий nextRun: {nextRun}. Период {duration} дней, с {_startDate} по {_endDate}. Исключить выходные и праздники: {excludeWeekends}. Для нового шаблона: {isNew}", targetTemplate.Id, targetTemplate.NextRun, duration, _startDate, _endDate, excludeWeekends, isNew);
|
||||
|
||||
// Получаем список рабочих дней (исключая выходные и праздники)
|
||||
var workDays = await GetWorkDaysAsync(_startDate, _endDate, excludeWeekends);
|
||||
//var workDays = await GetWorkDaysAsync(_startDate, _endDate, excludeWeekends);
|
||||
var workDays = await GetWorkDaysV2Async(_startDate, _endDate, excludeWeekends, referenceDate);
|
||||
|
||||
if (workDays.Count == 0)
|
||||
{
|
||||
@@ -109,7 +110,8 @@ namespace PARR.DAL.NextRunServices.Subservices
|
||||
logger.LogInformation("Начинаем распределение {Count} шаблонов на {duration} дней, с {_startDate} по {_endDate}. ReferenceDate: {referenceDate}. Исключить выходные и праздники: {excludeWeekends}.", allTemplates.Count, duration, _startDate, _endDate, referenceDate, excludeWeekends);
|
||||
|
||||
// Получаем список рабочих дней (исключая выходные и праздники)
|
||||
var workDays = await GetWorkDaysAsync(_startDate, _endDate, excludeWeekends);
|
||||
//var workDays = await GetWorkDaysAsync(_startDate, _endDate, excludeWeekends);
|
||||
var workDays = await GetWorkDaysV2Async(_startDate, _endDate, excludeWeekends, referenceDate);
|
||||
|
||||
if (workDays.Count == 0)
|
||||
{
|
||||
@@ -539,22 +541,22 @@ namespace PARR.DAL.NextRunServices.Subservices
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Получить список выходных дней
|
||||
/// </summary>
|
||||
/// <param name="startDate"></param>
|
||||
/// <param name="endDate"></param>
|
||||
/// <returns></returns>
|
||||
private async Task<HashSet<DateOnly>> GetWeekendsAsync(DateOnly startDate, DateOnly endDate)
|
||||
{
|
||||
var weekends = await weekendDayService.GetWeekends(startDate, endDate).ToListAsync();
|
||||
///// <summary>
|
||||
///// Получить список выходных дней
|
||||
///// </summary>
|
||||
///// <param name="startDate"></param>
|
||||
///// <param name="endDate"></param>
|
||||
///// <returns></returns>
|
||||
//private async Task<HashSet<DateOnly>> GetWeekendsAsync(DateOnly startDate, DateOnly endDate)
|
||||
//{
|
||||
// var weekends = await weekendDayService.GetWeekends(startDate, endDate).ToListAsync();
|
||||
|
||||
logger.LogDebug("Найдено не рабочих дней: {Count}", weekends.Count);
|
||||
foreach (var weekend in weekends)
|
||||
logger.LogDebug("Не рабочий день: {weekend}", weekend);
|
||||
// logger.LogDebug("Найдено не рабочих дней: {Count}", weekends.Count);
|
||||
// foreach (var weekend in weekends)
|
||||
// logger.LogDebug("Не рабочий день: {weekend}", weekend);
|
||||
|
||||
return weekends.ToHashSet();
|
||||
}
|
||||
// return weekends.ToHashSet();
|
||||
//}
|
||||
|
||||
|
||||
/// <summary>
|
||||
@@ -563,7 +565,7 @@ namespace PARR.DAL.NextRunServices.Subservices
|
||||
/// <param name="startDate"></param>
|
||||
/// <param name="endDate"></param>
|
||||
/// <returns></returns>
|
||||
public async Task<HashSet<DateOnly>> GetWeekendsTESTAsync(DateOnly startDate, DateOnly endDate, DateTimeOffset referenceDate)
|
||||
public async Task<HashSet<DateOnly>> GetWeekendsV2Async(DateOnly startDate, DateOnly endDate, DateTimeOffset referenceDate)
|
||||
{
|
||||
// проверяем это текущие или прошлые сутки относительно refDate, если надо, корректируем dateStart, dateEnd
|
||||
bool isPreviousDays = IsPreviousDays(referenceDate);
|
||||
@@ -607,42 +609,42 @@ namespace PARR.DAL.NextRunServices.Subservices
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Возвращает список рабочих дней в диапазоне, исключая выходные и праздники.
|
||||
/// </summary>
|
||||
/// <param name="start"></param>
|
||||
/// <param name="end"></param>
|
||||
/// <param name="excludeWeekends">Исключить выходные и праздники</param>
|
||||
/// <returns></returns>
|
||||
public async Task<List<DateOnly>> GetWorkDaysAsync(DateOnly start, DateOnly end, bool excludeWeekends)
|
||||
{
|
||||
// Получаем список выходных/праздничных дней
|
||||
var weekends = new HashSet<DateOnly>();
|
||||
if (excludeWeekends)
|
||||
weekends = await GetWeekendsAsync(start, end);
|
||||
///// <summary>
|
||||
///// Возвращает список рабочих дней в диапазоне, исключая выходные и праздники.
|
||||
///// </summary>
|
||||
///// <param name="start"></param>
|
||||
///// <param name="end"></param>
|
||||
///// <param name="excludeWeekends">Исключить выходные и праздники</param>
|
||||
///// <returns></returns>
|
||||
//public async Task<List<DateOnly>> GetWorkDaysAsync(DateOnly start, DateOnly end, bool excludeWeekends)
|
||||
//{
|
||||
// // Получаем список выходных/праздничных дней
|
||||
// var weekends = new HashSet<DateOnly>();
|
||||
// if (excludeWeekends)
|
||||
// weekends = await GetWeekendsAsync(start, end);
|
||||
|
||||
var result = new List<DateOnly>();
|
||||
var date = start;
|
||||
// var result = new List<DateOnly>();
|
||||
// var date = start;
|
||||
|
||||
while (date <= end)
|
||||
{
|
||||
var dayOfWeek = date.DayOfWeek;
|
||||
if (!weekends.Contains(date))
|
||||
{
|
||||
result.Add(date);
|
||||
}
|
||||
date = date.AddDays(1);
|
||||
}
|
||||
// while (date <= end)
|
||||
// {
|
||||
// var dayOfWeek = date.DayOfWeek;
|
||||
// if (!weekends.Contains(date))
|
||||
// {
|
||||
// result.Add(date);
|
||||
// }
|
||||
// date = date.AddDays(1);
|
||||
// }
|
||||
|
||||
logger.LogDebug("Найдено рабочих дней: {Count}", result.Count);
|
||||
foreach (var workDay in result)
|
||||
logger.LogDebug("Рабочий день: {workDay}", workDay);
|
||||
// logger.LogDebug("Найдено рабочих дней: {Count}", result.Count);
|
||||
// foreach (var workDay in result)
|
||||
// logger.LogDebug("Рабочий день: {workDay}", workDay);
|
||||
|
||||
return result;
|
||||
}
|
||||
// return result;
|
||||
//}
|
||||
|
||||
|
||||
public async Task<List<DateOnly>> GetWorkDaysTESTAsync(DateOnly start, DateOnly end, bool excludeWeekends, DateTimeOffset referenceDate)
|
||||
public async Task<List<DateOnly>> GetWorkDaysV2Async(DateOnly start, DateOnly end, bool excludeWeekends, DateTimeOffset referenceDate)
|
||||
{
|
||||
logger.LogDebug("Формирование списка рабочих дней, start: {start}, end: {end}, excludeWeekends: {excludeWeekends}, referenceDate: {referenceDate}", start, end, excludeWeekends, referenceDate);
|
||||
|
||||
@@ -659,7 +661,7 @@ namespace PARR.DAL.NextRunServices.Subservices
|
||||
// Получаем список выходных/праздничных дней
|
||||
var weekends = new HashSet<DateOnly>();
|
||||
if (excludeWeekends)
|
||||
weekends = await GetWeekendsTESTAsync(start, end, referenceDate);
|
||||
weekends = await GetWeekendsV2Async(start, end, referenceDate);
|
||||
|
||||
var result = new List<DateOnly>();
|
||||
var date = start;
|
||||
|
||||
Reference in New Issue
Block a user