Merge branch 'next-schedule' into dev

This commit is contained in:
Mikhail Kuznetsov
2023-10-23 14:06:51 +10:00

View File

@@ -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<DateTimeOffset>();
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<string, int>
{
{"Каждые 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;
}