feat(bll,dal, templateDistributor): при получении рабочих дней по периоду, отсекаются дни выходящие за период

This commit is contained in:
Mikhail Trubnikov
2024-09-19 13:51:44 +10:00
parent 60c0ba9ec8
commit 9f193fe3ae
6 changed files with 80 additions and 51 deletions

View File

@@ -16,6 +16,7 @@ namespace PARR.TemplateDistributor
private readonly ICalendarService calendarService;
private readonly IEsppScheduleTransformService esppScheduleTransformService;
private readonly IWeekendDayService weekendDayService;
private readonly INextRunModifierService nextRunModifierService;
public TemplateDistributor(
ILogger<TemplateDistributor> logger,
@@ -23,7 +24,8 @@ namespace PARR.TemplateDistributor
IApplicationsInWorkService applicationsInWorkService,
ICalendarService calendarService,
IEsppScheduleTransformService esppScheduleTransformService,
IWeekendDayService weekendDayService
IWeekendDayService weekendDayService,
INextRunModifierService nextRunModifierService
)
{
this.logger = logger;
@@ -32,6 +34,7 @@ namespace PARR.TemplateDistributor
this.calendarService = calendarService;
this.esppScheduleTransformService = esppScheduleTransformService;
this.weekendDayService = weekendDayService;
this.nextRunModifierService = nextRunModifierService;
}
@@ -228,7 +231,9 @@ namespace PARR.TemplateDistributor
#endregion
}
else
templates.ForEach(t => t.NextRun = appInWork!.ReferenceDate);
// templates.ForEach(t => t.NextRun = appInWork!.ReferenceDate);
// это не автораспределение, по ReferenceDate получаем ближайший рабочий день
templates.ForEach(async t => t.NextRun = await nextRunModifierService.GetWorkDayAsync(appInWork!.ReferenceDate));
return templates;
}
@@ -281,7 +286,7 @@ namespace PARR.TemplateDistributor
/// </summary>
/// <param name="appInWork"></param>
/// <returns></returns>
public async Task<List<DateOnly>> GetWorkDaysAsync(ApplicationsInWork appInWork)
private async Task<List<DateOnly>> GetWorkDaysAsync(ApplicationsInWork appInWork)
{
var period = appInWork.EsppSchValues.FirstOrDefault()?.EsppSchTypeValue?.DistributionPeriod;
var periodType = ParseDistributionPeriodType(period!.Type);
@@ -303,6 +308,11 @@ namespace PARR.TemplateDistributor
}
});
//----- убираем даты, которые могли выйти за конец периода (из-за сдвига NextRun по рабочим дням)
var endPeriod = calendarService.GetEndPeriodDate(startPeriod, periodType, period.Duration);
result = result.Where(t => t <= endPeriod).ToList();
//-----
return result;
}