From a486149017ff20478a0f15c52d90271f1f284c7e Mon Sep 17 00:00:00 2001 From: Mikhail Kuznetsov Date: Tue, 2 Jul 2024 11:43:59 +1000 Subject: [PATCH] =?UTF-8?q?feat(dal,=20templateDistributor):=20=D1=88?= =?UTF-8?q?=D0=B0=D0=B1=D0=BB=D0=BE=D0=BD=20=D0=B4=D0=BB=D1=8F=20templateD?= =?UTF-8?q?istributor?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Implementations/CalendarService.cs | 3 +- .../EsppScheduleTransformService.cs | 39 +++++++++++++++++++ .../IEsppScheduleTransformService.cs | 13 ++++++- .../IMqTemplateDistributor.cs | 8 ++++ .../ITemplateDistributor.cs | 6 +++ .../MqTemplateDistributor.cs | 9 +++++ .../TemplateDistributor.cs | 39 +++++++++++++++++++ .../TemplateDistributorInstaller.cs | 3 +- PARR.TemplateDistributorWorker/Worker.cs | 19 ++++++--- 9 files changed, 129 insertions(+), 10 deletions(-) create mode 100644 PARR.TemplateDistributor/IMqTemplateDistributor.cs create mode 100644 PARR.TemplateDistributor/ITemplateDistributor.cs create mode 100644 PARR.TemplateDistributor/MqTemplateDistributor.cs create mode 100644 PARR.TemplateDistributor/TemplateDistributor.cs 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