From e62db6b7d8d189b32ca3df1c512a25fd451a153d Mon Sep 17 00:00:00 2001 From: Mikhail Kuznetsov Date: Mon, 23 Oct 2023 13:45:43 +1000 Subject: [PATCH] =?UTF-8?q?feat(dal):=20EsppScheduleTransformService=20?= =?UTF-8?q?=D1=80=D0=B5=D0=B0=D0=BB=D0=B8=D0=B7=D0=BE=D0=B2=D0=B0=D0=BD=20?= =?UTF-8?q?=D0=BC=D0=B5=D1=82=D0=BE=D0=B4=20GetNextSchedule,=20=D1=80?= =?UTF-8?q?=D0=B0=D1=81=D0=BF=D0=B8=D1=81=D0=B0=D0=BD=D0=B8=D0=B5=20=D0=BD?= =?UTF-8?q?=D0=B0=20=D1=81=D0=B5=D0=B3=D0=BE=D0=B4=D0=BD=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../EsppScheduleTransformService.cs | 43 +++++++++++++++---- 1 file changed, 34 insertions(+), 9 deletions(-) diff --git a/PARR.DAL/TransformServices/EsppScheduleTransformService.cs b/PARR.DAL/TransformServices/EsppScheduleTransformService.cs index 9d61788e..92d8ad59 100644 --- a/PARR.DAL/TransformServices/EsppScheduleTransformService.cs +++ b/PARR.DAL/TransformServices/EsppScheduleTransformService.cs @@ -1,6 +1,7 @@ using Microsoft.Extensions.Logging; using PARR.DAL.Contracts; using PARR.DAL.DomainModels; +using PARR.DAL.Extensions; using PARR.DAL.Services.Interfaces; namespace PARR.DAL.TransformServices @@ -58,6 +59,7 @@ namespace PARR.DAL.TransformServices //если больше текущего вернуть lastRun. Это и есть следующая дата if (lastRun > DateTimeOffset.UtcNow) return lastRun; + switch (esppSchedule.TypeSchedule.Id) { case (int)EsppSchTypeScheduleEnum.Regularly: @@ -81,11 +83,34 @@ namespace PARR.DAL.TransformServices { // расписание на оставшееся на сегодня время. его так мало... var schedules = new List(); + var curTime = lastRun; + while (curTime < DateTimeOffset.UtcNow.EndOfDay()) + { + switch (esppSchedule.TypeSchedule.Id) + { + case (int)EsppSchTypeScheduleEnum.Regularly: + curTime = GetNextDateRegularly(esppSchedule.Values, curTime); + break; + case (int)EsppSchTypeScheduleEnum.Weekly: + curTime = GetNextDateWeekly(esppSchedule.Values, curTime); + break; + case (int)EsppSchTypeScheduleEnum.Monthly: + curTime = GetNextDateMonthly(esppSchedule.Values, curTime); + break; + case (int)EsppSchTypeScheduleEnum.Monthly2: + curTime = GetNextDateMonthly2(esppSchedule.Values, curTime); + break; + case (int)EsppSchTypeScheduleEnum.Annually: + curTime = GetNextDateAnnually(esppSchedule.Values, curTime); + break; + case (int)EsppSchTypeScheduleEnum.Annually2: + curTime = GetNextDateAnnually2(esppSchedule.Values, curTime); + break; + } - //todo: - schedules.Add(lastRun); - - + schedules.Add(curTime); + } + schedules.RemoveAll(s => s > DateTimeOffset.UtcNow.EndOfDay()); return schedules.OrderBy(t => t).ToList(); } @@ -119,7 +144,7 @@ namespace PARR.DAL.TransformServices { var regDict = new Dictionary { - {"Каждые 1 часа",1}, + {"Каждый час",1}, {"Каждые 2 часа",2}, {"Каждые 3 часа", 3}, {"Каждые 4 часа", 4}, @@ -140,14 +165,14 @@ namespace PARR.DAL.TransformServices var regNum = regDict[values[0].Value.Value]; - var calcDay = new DateTimeOffset(DateTimeOffset.UtcNow.Year, DateTimeOffset.UtcNow.Month, DateTimeOffset.UtcNow.Day, lastRun.Hour, lastRun.Minute, lastRun.Second, lastRun.Offset); + var calcDay = lastRun.AddHours(regNum); + + //TODO: вот это повторяется от метода к методу //Если итоговая дата указывает на прошлое, то повторяем расчёт и ухоим в рекурсию if (calcDay < DateTimeOffset.UtcNow) - { - calcDay = calcDay.AddHours(regNum); calcDay = GetNextDateRegularly(values, calcDay); - } + return calcDay; }