feat(templateDistributor): Изменен метод распределения РР по периоду(DistributeTemplateAsync), EsppScheduleTransformService.GetNextDateAsync теперь проверяет метод распределения РР и возвращает нужную дату
This commit is contained in:
@@ -3,7 +3,6 @@ using PARR.Constants;
|
||||
using PARR.DAL.Contracts;
|
||||
using PARR.DAL.DomainModels;
|
||||
using PARR.DAL.Extensions;
|
||||
using PARR.DAL.Models;
|
||||
using PARR.DAL.Services.Interfaces;
|
||||
|
||||
namespace PARR.DAL.TransformServices
|
||||
@@ -135,8 +134,18 @@ namespace PARR.DAL.TransformServices
|
||||
|
||||
public async Task<DateTimeOffset> GetNextDateAsync(Guid applicationInWorkId, DateTimeOffset lastRun)
|
||||
{
|
||||
var appInWork = await applicationsInWorkService.GetAsync(applicationInWorkId);
|
||||
|
||||
var esppSchedule = await GetEsppScheduleAsync(applicationInWorkId);
|
||||
|
||||
if (appInWork!.IsAutoDistributionEnabled)
|
||||
{
|
||||
var period = esppSchedule!.Values.FirstOrDefault()!.Value!.DistributionPeriod;
|
||||
var periodType = ParseDistributionPeriodType(period!.Type);
|
||||
|
||||
return GetNextDateForDistributionRun(lastRun, periodType, period.Duration);
|
||||
}
|
||||
|
||||
return GetNextDate(esppSchedule, lastRun);
|
||||
}
|
||||
|
||||
@@ -346,23 +355,46 @@ namespace PARR.DAL.TransformServices
|
||||
return lastRun.AddYears(ParseInt(distributionPeriod));
|
||||
}
|
||||
|
||||
|
||||
//return startPeriod.AddDays(duration.Days).AddDays(-1);
|
||||
return lastRun;
|
||||
}
|
||||
|
||||
public async Task<DateOnly> GetStartPeriodForDateAsync(Guid applicationInWorkId, DateTimeOffset date, DateTimeOffset refrenceDate, DistributionPeriodTypeEnum periodType, string distributionPeriod)
|
||||
private DateTimeOffset GetPrevDateForDistributionRun(DateTimeOffset lastRun, DistributionPeriodTypeEnum periodType, string distributionPeriod)
|
||||
{
|
||||
switch (periodType)
|
||||
{
|
||||
case (DistributionPeriodTypeEnum.Day):
|
||||
return lastRun.AddDays(-ParseInt(distributionPeriod));
|
||||
|
||||
case (DistributionPeriodTypeEnum.Month):
|
||||
return lastRun.AddMonths(-ParseInt(distributionPeriod));
|
||||
|
||||
case (DistributionPeriodTypeEnum.Year):
|
||||
return lastRun.AddYears(-ParseInt(distributionPeriod));
|
||||
}
|
||||
|
||||
return lastRun;
|
||||
}
|
||||
|
||||
public async Task<DateOnly> GetStartPeriodForDateAsync(Guid applicationInWorkId, DateTimeOffset date, DateTimeOffset referenceDate, DistributionPeriodTypeEnum periodType, string distributionPeriod)
|
||||
{
|
||||
|
||||
var esppSchedule = await GetEsppScheduleAsync(applicationInWorkId);
|
||||
|
||||
var currentStartPeriod = refrenceDate;
|
||||
var currentEndPeriod = GetNextDateForDistributionRun(currentStartPeriod,periodType,distributionPeriod);
|
||||
var currentStartPeriod = referenceDate;
|
||||
var currentEndPeriod = GetNextDateForDistributionRun(currentStartPeriod, periodType, distributionPeriod);
|
||||
|
||||
while (!(date>=currentStartPeriod && date< currentEndPeriod))
|
||||
while (!(date >= currentStartPeriod && date < currentEndPeriod))
|
||||
{
|
||||
currentStartPeriod = currentEndPeriod;
|
||||
currentEndPeriod = GetNextDateForDistributionRun(currentStartPeriod, periodType, distributionPeriod);
|
||||
if (date > currentEndPeriod)
|
||||
{
|
||||
currentStartPeriod = currentEndPeriod;
|
||||
currentEndPeriod = GetNextDateForDistributionRun(currentStartPeriod, periodType, distributionPeriod);
|
||||
}
|
||||
else
|
||||
{
|
||||
currentEndPeriod = currentStartPeriod;
|
||||
currentStartPeriod = GetPrevDateForDistributionRun(currentStartPeriod, periodType, distributionPeriod);
|
||||
}
|
||||
}
|
||||
|
||||
return DateOnly.FromDateTime(currentStartPeriod.DateTime);
|
||||
@@ -381,5 +413,12 @@ namespace PARR.DAL.TransformServices
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
private DistributionPeriodTypeEnum ParseDistributionPeriodType(string value)
|
||||
{
|
||||
var result = (DistributionPeriodTypeEnum)Enum.Parse(typeof(DistributionPeriodTypeEnum), value);
|
||||
|
||||
return result;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user