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; } } }