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)
|
public async Task<List<DateOnly>> GetWorkDaysAsync(DateOnly start, DateOnly end, bool excludeWeekends, DateTimeOffset referenceDate)
|
||||||
{
|
{
|
||||||
//return await templateDistributor.GetWorkDaysAsync(start, end, excludeWeekends);
|
//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)
|
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
|
namespace PARR.DAL.NextRunServices.Subservices
|
||||||
{
|
{
|
||||||
//TODO: internal
|
internal interface ITemplateDistributor
|
||||||
public interface ITemplateDistributor
|
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Распределяет все шаблоны на указанный период, учитывая план нагрузки.
|
/// Распределяет все шаблоны на указанный период, учитывая план нагрузки.
|
||||||
@@ -41,7 +40,17 @@ namespace PARR.DAL.NextRunServices.Subservices
|
|||||||
/// <param name="endDate"></param>
|
/// <param name="endDate"></param>
|
||||||
/// <param name="referenceDate"></param>
|
/// <param name="referenceDate"></param>
|
||||||
/// <returns></returns>
|
/// <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>
|
/// <summary>
|
||||||
@@ -50,12 +59,9 @@ namespace PARR.DAL.NextRunServices.Subservices
|
|||||||
/// <param name="start"></param>
|
/// <param name="start"></param>
|
||||||
/// <param name="end"></param>
|
/// <param name="end"></param>
|
||||||
/// <param name="excludeWeekends"></param>
|
/// <param name="excludeWeekends"></param>
|
||||||
|
/// <param name="referenceDate"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
Task<List<DateOnly>> GetWorkDaysAsync(DateOnly start, DateOnly end, bool excludeWeekends);
|
Task<List<DateOnly>> GetWorkDaysV2Async(DateOnly start, DateOnly end, bool excludeWeekends, DateTimeOffset referenceDate);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Task<List<DateOnly>> GetWorkDaysTESTAsync(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);
|
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)
|
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);
|
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)
|
if (workDays.Count == 0)
|
||||||
{
|
{
|
||||||
@@ -539,22 +541,22 @@ namespace PARR.DAL.NextRunServices.Subservices
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
///// <summary>
|
||||||
/// Получить список выходных дней
|
///// Получить список выходных дней
|
||||||
/// </summary>
|
///// </summary>
|
||||||
/// <param name="startDate"></param>
|
///// <param name="startDate"></param>
|
||||||
/// <param name="endDate"></param>
|
///// <param name="endDate"></param>
|
||||||
/// <returns></returns>
|
///// <returns></returns>
|
||||||
private async Task<HashSet<DateOnly>> GetWeekendsAsync(DateOnly startDate, DateOnly endDate)
|
//private async Task<HashSet<DateOnly>> GetWeekendsAsync(DateOnly startDate, DateOnly endDate)
|
||||||
{
|
//{
|
||||||
var weekends = await weekendDayService.GetWeekends(startDate, endDate).ToListAsync();
|
// var weekends = await weekendDayService.GetWeekends(startDate, endDate).ToListAsync();
|
||||||
|
|
||||||
logger.LogDebug("Найдено не рабочих дней: {Count}", weekends.Count);
|
// logger.LogDebug("Найдено не рабочих дней: {Count}", weekends.Count);
|
||||||
foreach (var weekend in weekends)
|
// foreach (var weekend in weekends)
|
||||||
logger.LogDebug("Не рабочий день: {weekend}", weekend);
|
// logger.LogDebug("Не рабочий день: {weekend}", weekend);
|
||||||
|
|
||||||
return weekends.ToHashSet();
|
// return weekends.ToHashSet();
|
||||||
}
|
//}
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -563,7 +565,7 @@ namespace PARR.DAL.NextRunServices.Subservices
|
|||||||
/// <param name="startDate"></param>
|
/// <param name="startDate"></param>
|
||||||
/// <param name="endDate"></param>
|
/// <param name="endDate"></param>
|
||||||
/// <returns></returns>
|
/// <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
|
// проверяем это текущие или прошлые сутки относительно refDate, если надо, корректируем dateStart, dateEnd
|
||||||
bool isPreviousDays = IsPreviousDays(referenceDate);
|
bool isPreviousDays = IsPreviousDays(referenceDate);
|
||||||
@@ -607,42 +609,42 @@ namespace PARR.DAL.NextRunServices.Subservices
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
///// <summary>
|
||||||
/// Возвращает список рабочих дней в диапазоне, исключая выходные и праздники.
|
///// Возвращает список рабочих дней в диапазоне, исключая выходные и праздники.
|
||||||
/// </summary>
|
///// </summary>
|
||||||
/// <param name="start"></param>
|
///// <param name="start"></param>
|
||||||
/// <param name="end"></param>
|
///// <param name="end"></param>
|
||||||
/// <param name="excludeWeekends">Исключить выходные и праздники</param>
|
///// <param name="excludeWeekends">Исключить выходные и праздники</param>
|
||||||
/// <returns></returns>
|
///// <returns></returns>
|
||||||
public async Task<List<DateOnly>> GetWorkDaysAsync(DateOnly start, DateOnly end, bool excludeWeekends)
|
//public async Task<List<DateOnly>> GetWorkDaysAsync(DateOnly start, DateOnly end, bool excludeWeekends)
|
||||||
{
|
//{
|
||||||
// Получаем список выходных/праздничных дней
|
// // Получаем список выходных/праздничных дней
|
||||||
var weekends = new HashSet<DateOnly>();
|
// var weekends = new HashSet<DateOnly>();
|
||||||
if (excludeWeekends)
|
// if (excludeWeekends)
|
||||||
weekends = await GetWeekendsAsync(start, end);
|
// weekends = await GetWeekendsAsync(start, end);
|
||||||
|
|
||||||
var result = new List<DateOnly>();
|
// var result = new List<DateOnly>();
|
||||||
var date = start;
|
// var date = start;
|
||||||
|
|
||||||
while (date <= end)
|
// while (date <= end)
|
||||||
{
|
// {
|
||||||
var dayOfWeek = date.DayOfWeek;
|
// var dayOfWeek = date.DayOfWeek;
|
||||||
if (!weekends.Contains(date))
|
// if (!weekends.Contains(date))
|
||||||
{
|
// {
|
||||||
result.Add(date);
|
// result.Add(date);
|
||||||
}
|
// }
|
||||||
date = date.AddDays(1);
|
// date = date.AddDays(1);
|
||||||
}
|
// }
|
||||||
|
|
||||||
logger.LogDebug("Найдено рабочих дней: {Count}", result.Count);
|
// logger.LogDebug("Найдено рабочих дней: {Count}", result.Count);
|
||||||
foreach (var workDay in result)
|
// foreach (var workDay in result)
|
||||||
logger.LogDebug("Рабочий день: {workDay}", workDay);
|
// 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);
|
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>();
|
var weekends = new HashSet<DateOnly>();
|
||||||
if (excludeWeekends)
|
if (excludeWeekends)
|
||||||
weekends = await GetWeekendsTESTAsync(start, end, referenceDate);
|
weekends = await GetWeekendsV2Async(start, end, referenceDate);
|
||||||
|
|
||||||
var result = new List<DateOnly>();
|
var result = new List<DateOnly>();
|
||||||
var date = start;
|
var date = start;
|
||||||
|
|||||||
@@ -6,12 +6,12 @@ namespace PARR.Test.NextRun
|
|||||||
{
|
{
|
||||||
internal class NextRunTest
|
internal class NextRunTest
|
||||||
{
|
{
|
||||||
private readonly ITemplateDistributor templateDistributor;
|
//private readonly ITemplateDistributor templateDistributor;
|
||||||
private readonly INextRunService nextRunService;
|
private readonly INextRunService nextRunService;
|
||||||
|
|
||||||
public NextRunTest(ITemplateDistributor templateDistributor, INextRunService nextRunService)
|
public NextRunTest(/*ITemplateDistributor templateDistributor, */INextRunService nextRunService)
|
||||||
{
|
{
|
||||||
this.templateDistributor = templateDistributor;
|
//this.templateDistributor = templateDistributor;
|
||||||
this.nextRunService = nextRunService;
|
this.nextRunService = nextRunService;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -21,7 +21,7 @@ namespace PARR.Test.NextRun
|
|||||||
public async Task Test()
|
public async Task Test()
|
||||||
{
|
{
|
||||||
// GetWorkDaysTESTAsync
|
// GetWorkDaysTESTAsync
|
||||||
var aaa = await templateDistributor.GetWorkDaysTESTAsync(GetDateStart(), GetDateStart().AddDays(periodDays), true, referenceDate);
|
//var aaa = await templateDistributor.GetWorkDaysTESTAsync(GetDateStart(), GetDateStart().AddDays(periodDays), true, referenceDate);
|
||||||
|
|
||||||
//await DistributeTemplatesAsync();
|
//await DistributeTemplatesAsync();
|
||||||
//await GetValidNextRunForTemplateAsync();
|
//await GetValidNextRunForTemplateAsync();
|
||||||
|
|||||||
Reference in New Issue
Block a user