From 5561e91de8ff92de344a19e49d8ec3e224cfa948 Mon Sep 17 00:00:00 2001 From: Mikhail Kuznetsov Date: Mon, 23 Oct 2023 11:04:12 +1000 Subject: [PATCH] =?UTF-8?q?feat(dal):=20=D0=9C=D0=B5=D1=82=D0=BE=D0=B4=20G?= =?UTF-8?q?etNextDate=20=D1=80=D0=B5=D0=B0=D0=BB=D0=B8=D0=B7=D0=BE=D0=B2?= =?UTF-8?q?=D0=B0=D0=BD=20=D0=BF=D0=BB=D0=B0=D0=BD=D0=B8=D1=80=D0=BE=D0=B2?= =?UTF-8?q?=D1=89=D0=B8=D0=BA=20=D0=90=D0=A1=D0=A3=20=D0=95=D0=A1=D0=9F?= =?UTF-8?q?=D0=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../EsppScheduleTransformService.cs | 42 ++++++++++++++++++- 1 file changed, 40 insertions(+), 2 deletions(-) diff --git a/PARR.DAL/TransformServices/EsppScheduleTransformService.cs b/PARR.DAL/TransformServices/EsppScheduleTransformService.cs index 0e98afa2..9d61788e 100644 --- a/PARR.DAL/TransformServices/EsppScheduleTransformService.cs +++ b/PARR.DAL/TransformServices/EsppScheduleTransformService.cs @@ -60,6 +60,8 @@ namespace PARR.DAL.TransformServices return lastRun; switch (esppSchedule.TypeSchedule.Id) { + case (int)EsppSchTypeScheduleEnum.Regularly: + return GetNextDateRegularly(esppSchedule.Values, lastRun); case (int)EsppSchTypeScheduleEnum.Weekly: return GetNextDateWeekly(esppSchedule.Values, lastRun); case (int)EsppSchTypeScheduleEnum.Monthly: @@ -113,6 +115,43 @@ namespace PARR.DAL.TransformServices return esppSchedule; } + private DateTimeOffset GetNextDateRegularly(List values, DateTimeOffset lastRun) + { + var regDict = new Dictionary + { + {"Каждые 1 часа",1}, + {"Каждые 2 часа",2}, + {"Каждые 3 часа", 3}, + {"Каждые 4 часа", 4}, + {"Каждые 6 часов", 6}, + {"Каждые 12 часов", 12}, + {"Ежедневно", 24}, + {"Каждые 72 часа", 72}, + {"Каждые 96 часов", 96}, + {"Каждые 2 недели", 336}, + {"Каждые 60 дней", 1440}, + {"Каждые 80 дней", 1920}, + {"Каждые 90 дней", 2160}, + {"Каждые полгода", 4380}, + {"Каждые 1,5 года", 13140}, + {"Каждые 3 года", 26280}, + + }; + + 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); + //TODO: вот это повторяется от метода к методу + //Если итоговая дата указывает на прошлое, то повторяем расчёт и ухоим в рекурсию + if (calcDay < DateTimeOffset.UtcNow) + { + calcDay = calcDay.AddHours(regNum); + calcDay = GetNextDateRegularly(values, calcDay); + } + + return calcDay; + } + private DateTimeOffset GetNextDateWeekly(List values, DateTimeOffset lastRun) { var dwNum = dwDict[values[0].Value.Value]; @@ -235,7 +274,7 @@ namespace PARR.DAL.TransformServices return daysList; } - private DateTimeOffset OffsetToDayOfWeek(int dwNum, ref DateTimeOffset calcDay) + private void OffsetToDayOfWeek(int dwNum, ref DateTimeOffset calcDay) { var daysOffset = dwNum - ((int)calcDay.DayOfWeek); @@ -243,7 +282,6 @@ namespace PARR.DAL.TransformServices daysOffset = 7 + daysOffset; calcDay = calcDay.AddDays(daysOffset); - return calcDay; } } }