diff --git a/PARR.DAL/TransformServices/EsppScheduleTransformService.cs b/PARR.DAL/TransformServices/EsppScheduleTransformService.cs index 7c871a8f..d5bd6061 100644 --- a/PARR.DAL/TransformServices/EsppScheduleTransformService.cs +++ b/PARR.DAL/TransformServices/EsppScheduleTransformService.cs @@ -1,6 +1,10 @@ using Microsoft.Extensions.Logging; +using PARR.DAL.Contracts; using PARR.DAL.DomainModels; using PARR.DAL.Services.Interfaces; +using System.ComponentModel; +using System.Net.Http.Headers; +using System.Runtime.CompilerServices; namespace PARR.DAL.TransformServices { @@ -19,13 +23,21 @@ namespace PARR.DAL.TransformServices public DateTimeOffset GetNextDate(EsppScheduleDto esppSchedule, DateTimeOffset lastRun) { //todo: - - return lastRun; + //если больше текущего вернуть lastRun. Это и есть следующая дата + if (lastRun > DateTimeOffset.UtcNow) + return lastRun; + switch (esppSchedule.TypeSchedule.Id) + { + case (int)EsppSchTypeScheduleEnum.Annually2: + return GetNextDateAnnually2(esppSchedule.Values, lastRun); + } + return lastRun;//todo убрать lastrun должен возвращать реальный результат } public List GetNextSchedule(EsppScheduleDto esppSchedule, DateTimeOffset lastRun) { + // расписание на оставшееся на сегодня время. его так мало... var schedules = new List(); //todo: @@ -60,5 +72,68 @@ namespace PARR.DAL.TransformServices return esppSchedule; } + + private DateTimeOffset GetNextDateAnnually2(List values, DateTimeOffset lastRun) + { + var monthDict = new Dictionary(); + monthDict.Add("Января", 1); + monthDict.Add("Февраля", 2); + monthDict.Add("Марта", 3); + monthDict.Add("Апреля", 4); + monthDict.Add("Мая", 5); + monthDict.Add("Июня", 6); + monthDict.Add("Июля", 7); + monthDict.Add("Августа", 8); + monthDict.Add("Сентября", 9); + monthDict.Add("Октября", 10); + monthDict.Add("Ноября", 11); + monthDict.Add("Декабря", 12); + + var orderDict = new Dictionary(); + orderDict.Add("Первый", 1); + orderDict.Add("Второй", 2); + orderDict.Add("Третий", 3); + orderDict.Add("Четвертый", 4); + orderDict.Add("Последний", 5); + + var dwDict = new Dictionary(); + dwDict.Add("Понедельник", 1); + dwDict.Add("Вторник", 2); + dwDict.Add("Среда", 3); + dwDict.Add("Четверг", 4); + dwDict.Add("Пятница", 5); + dwDict.Add("Суббота", 6); + dwDict.Add("Воскресенье", 0); + + + var monthNum = monthDict[values[2].Value.Value]; + var orderNum = orderDict[values[0].Value.Value]; + var dwNum = dwDict[values[1].Value.Value]; + + var calcDay = new DateTimeOffset(lastRun.Year + 1, monthNum, 1, lastRun.Hour, lastRun.Minute, lastRun.Second, lastRun.Offset); + + if (((int)calcDay.DayOfWeek) != dwNum) + { + var daysOffset = dwNum - ((int)calcDay.DayOfWeek); + + if (daysOffset < 0) + daysOffset = 7 + daysOffset; + + calcDay = calcDay.AddDays(daysOffset); + } + + var daysList = new List(); + while (calcDay.Month == monthNum) + { + daysList.Add(calcDay); + calcDay = calcDay.AddDays(7); + } + + if (orderNum == 5) + return daysList.Last(); + + return daysList[orderNum]; + } + } }