feat(dal): метод получения даты следующей генерации наряда и заупска скриптов автоматизации GetNextDateAnnually2

This commit is contained in:
Mikhail Kuznetsov
2023-10-18 10:09:51 +10:00
parent 26bd0a9a6b
commit d7c81d4d5a

View File

@@ -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<DateTimeOffset> GetNextSchedule(EsppScheduleDto esppSchedule, DateTimeOffset lastRun)
{
// расписание на оставшееся на сегодня время. его так мало...
var schedules = new List<DateTimeOffset>();
//todo:
@@ -60,5 +72,68 @@ namespace PARR.DAL.TransformServices
return esppSchedule;
}
private DateTimeOffset GetNextDateAnnually2(List<EsppScheduleValDto> values, DateTimeOffset lastRun)
{
var monthDict = new Dictionary<string, int>();
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<string, int>();
orderDict.Add("Первый", 1);
orderDict.Add("Второй", 2);
orderDict.Add("Третий", 3);
orderDict.Add("Четвертый", 4);
orderDict.Add("Последний", 5);
var dwDict = new Dictionary<string, int>();
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<DateTimeOffset>();
while (calcDay.Month == monthNum)
{
daysList.Add(calcDay);
calcDay = calcDay.AddDays(7);
}
if (orderNum == 5)
return daysList.Last();
return daysList[orderNum];
}
}
}