diff --git a/PARR.BLL/Services/Implementations/CalendarService.cs b/PARR.BLL/Services/Implementations/CalendarService.cs index 7a7a0398..d454c201 100644 --- a/PARR.BLL/Services/Implementations/CalendarService.cs +++ b/PARR.BLL/Services/Implementations/CalendarService.cs @@ -13,10 +13,9 @@ namespace PARR.BLL.Services.Implementations this.logger = logger; } + private DateOnly GetEndPeriodDate(DateOnly startPeriod, DistributionPeriodTypeEnum periodType, string distributionPeriod) { - //TODO: подходит для NextRun - switch (periodType) { case (DistributionPeriodTypeEnum.Day): diff --git a/PARR.DAL/TransformServices/EsppScheduleTransformService.cs b/PARR.DAL/TransformServices/EsppScheduleTransformService.cs index e3691928..0f914d81 100644 --- a/PARR.DAL/TransformServices/EsppScheduleTransformService.cs +++ b/PARR.DAL/TransformServices/EsppScheduleTransformService.cs @@ -1,4 +1,5 @@ using Microsoft.Extensions.Logging; +using PARR.Constants; using PARR.DAL.Contracts; using PARR.DAL.DomainModels; using PARR.DAL.Extensions; @@ -322,5 +323,43 @@ namespace PARR.DAL.TransformServices calcDay = calcDay.AddDays(daysOffset); } + + + public DateTimeOffset GetNextDateForDistributionRun(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)); + + //case (DistributionPeriodTypeEnum.TimeSpan): + // var timeSpan = ParseTimeSpan(distributionPeriod); + // return timeSpan.Days > 0 ? startPeriod.AddDays(); + } + + + //return startPeriod.AddDays(duration.Days).AddDays(-1); + return lastRun; + } + + + private int ParseInt(string value) + { + try + { + return int.Parse(value); + } + catch (Exception ex) + { + logger.LogError(ex, $"{nameof(this.GetType)}, получение конца периода. Не смог распарсить string в int для значения {value}."); + return 0; + } + } } } diff --git a/PARR.DAL/TransformServices/IEsppScheduleTransformService.cs b/PARR.DAL/TransformServices/IEsppScheduleTransformService.cs index 00456299..b548d806 100644 --- a/PARR.DAL/TransformServices/IEsppScheduleTransformService.cs +++ b/PARR.DAL/TransformServices/IEsppScheduleTransformService.cs @@ -1,4 +1,5 @@ -using PARR.DAL.DomainModels; +using PARR.Constants; +using PARR.DAL.DomainModels; namespace PARR.DAL.TransformServices { @@ -38,5 +39,15 @@ namespace PARR.DAL.TransformServices /// /// Task> GetNextScheduleAsync(Guid applicationInWorkId, DateTimeOffset lastRun); + + + /// + /// Получить следующую дату срабатывания в указанном периоде + /// + /// + /// + /// + /// + DateTimeOffset GetNextDateForDistributionRun(DateTimeOffset lastRun, DistributionPeriodTypeEnum periodType, string distributionPeriod); } } diff --git a/PARR.TemplateDistributor/IMqTemplateDistributor.cs b/PARR.TemplateDistributor/IMqTemplateDistributor.cs new file mode 100644 index 00000000..53146f75 --- /dev/null +++ b/PARR.TemplateDistributor/IMqTemplateDistributor.cs @@ -0,0 +1,8 @@ +namespace PARR.TemplateDistributor +{ + public interface IMqTemplateDistributor + { + void Start(); + void Stop(); + } +} diff --git a/PARR.TemplateDistributor/ITemplateDistributor.cs b/PARR.TemplateDistributor/ITemplateDistributor.cs new file mode 100644 index 00000000..6d08dda0 --- /dev/null +++ b/PARR.TemplateDistributor/ITemplateDistributor.cs @@ -0,0 +1,6 @@ +namespace PARR.TemplateDistributor +{ + public interface ITemplateDistributor + { + } +} diff --git a/PARR.TemplateDistributor/MqTemplateDistributor.cs b/PARR.TemplateDistributor/MqTemplateDistributor.cs new file mode 100644 index 00000000..166596f2 --- /dev/null +++ b/PARR.TemplateDistributor/MqTemplateDistributor.cs @@ -0,0 +1,9 @@ +namespace PARR.TemplateDistributor +{ + internal class MqTemplateDistributor : IMqTemplateDistributor + { + public void Start() { } + + public void Stop() { } + } +} diff --git a/PARR.TemplateDistributor/TemplateDistributor.cs b/PARR.TemplateDistributor/TemplateDistributor.cs new file mode 100644 index 00000000..ddc763cb --- /dev/null +++ b/PARR.TemplateDistributor/TemplateDistributor.cs @@ -0,0 +1,39 @@ +using Microsoft.EntityFrameworkCore; +using PARR.DAL.Models; +using PARR.DAL.Services.Interfaces; + +namespace PARR.TemplateDistributor +{ + internal class TemplateDistributor : ITemplateDistributor + { + private readonly IApplicationsInWorkService applicationsInWorkService; + + public TemplateDistributor(IApplicationsInWorkService applicationsInWorkService) + { + this.applicationsInWorkService = applicationsInWorkService; + } + + + //TODO: AppInWorkId - перераспределение, очередь + //public async Task + // распределить? + // не распределить, NextRun = appInWork.ReferenceDate + + + public async Task> DistributeTemplateForPeriodAsync(List