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 templates, Guid applicationInWorkId)
+ {
+ //TODO: ЗАГУЛШКА переделать!
+
+ var appInWork = await applicationsInWorkService.Get().FirstOrDefaultAsync(t => t.Id == applicationInWorkId);
+ if (appInWork == null)
+ {
+ throw new Exception("ERROROORORO!!!");
+ }
+
+
+ templates.ForEach(t => t.NextRun = appInWork.ReferenceDate);
+
+ return templates;
+ }
+ }
+}
diff --git a/PARR.TemplateDistributor/TemplateDistributorInstaller.cs b/PARR.TemplateDistributor/TemplateDistributorInstaller.cs
index 9a6577ac..55e69288 100644
--- a/PARR.TemplateDistributor/TemplateDistributorInstaller.cs
+++ b/PARR.TemplateDistributor/TemplateDistributorInstaller.cs
@@ -17,7 +17,8 @@ namespace PARR.TemplateDistributor
configuration.GetSection(nameof(MqSettings)).Bind(mqSettings);
services.AddSingleton(mqSettings);
- //services.AddTransient();
+ services.AddTransient();
+ services.AddTransient();
}
}
}
diff --git a/PARR.TemplateDistributorWorker/Worker.cs b/PARR.TemplateDistributorWorker/Worker.cs
index c09abb44..5870802b 100644
--- a/PARR.TemplateDistributorWorker/Worker.cs
+++ b/PARR.TemplateDistributorWorker/Worker.cs
@@ -1,21 +1,28 @@
+using PARR.TemplateDistributor;
+
namespace PARR.TemplateDistributorWorker
{
public class Worker : BackgroundService
{
private readonly ILogger _logger;
+ private readonly IMqTemplateDistributor mqTemplateDistributor;
- public Worker(ILogger logger)
+ public Worker(ILogger logger, IMqTemplateDistributor mqTemplateDistributor)
{
_logger = logger;
+ this.mqTemplateDistributor = mqTemplateDistributor;
}
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
- //while (!stoppingToken.IsCancellationRequested)
- //{
- // _logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now);
- // await Task.Delay(1000, stoppingToken);
- //}
+ mqTemplateDistributor.Start();
+ }
+
+ public override Task StopAsync(CancellationToken cancellationToken)
+ {
+ mqTemplateDistributor.Stop();
+
+ return base.StopAsync(cancellationToken);
}
}
}