feat(dal): Метод GetNextDate реализован планировщик АСУ ЕСПП
This commit is contained in:
@@ -60,6 +60,8 @@ namespace PARR.DAL.TransformServices
|
|||||||
return lastRun;
|
return lastRun;
|
||||||
switch (esppSchedule.TypeSchedule.Id)
|
switch (esppSchedule.TypeSchedule.Id)
|
||||||
{
|
{
|
||||||
|
case (int)EsppSchTypeScheduleEnum.Regularly:
|
||||||
|
return GetNextDateRegularly(esppSchedule.Values, lastRun);
|
||||||
case (int)EsppSchTypeScheduleEnum.Weekly:
|
case (int)EsppSchTypeScheduleEnum.Weekly:
|
||||||
return GetNextDateWeekly(esppSchedule.Values, lastRun);
|
return GetNextDateWeekly(esppSchedule.Values, lastRun);
|
||||||
case (int)EsppSchTypeScheduleEnum.Monthly:
|
case (int)EsppSchTypeScheduleEnum.Monthly:
|
||||||
@@ -113,6 +115,43 @@ namespace PARR.DAL.TransformServices
|
|||||||
return esppSchedule;
|
return esppSchedule;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private DateTimeOffset GetNextDateRegularly(List<EsppScheduleValDto> values, DateTimeOffset lastRun)
|
||||||
|
{
|
||||||
|
var regDict = new Dictionary<string, int>
|
||||||
|
{
|
||||||
|
{"Каждые 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<EsppScheduleValDto> values, DateTimeOffset lastRun)
|
private DateTimeOffset GetNextDateWeekly(List<EsppScheduleValDto> values, DateTimeOffset lastRun)
|
||||||
{
|
{
|
||||||
var dwNum = dwDict[values[0].Value.Value];
|
var dwNum = dwDict[values[0].Value.Value];
|
||||||
@@ -235,7 +274,7 @@ namespace PARR.DAL.TransformServices
|
|||||||
return daysList;
|
return daysList;
|
||||||
}
|
}
|
||||||
|
|
||||||
private DateTimeOffset OffsetToDayOfWeek(int dwNum, ref DateTimeOffset calcDay)
|
private void OffsetToDayOfWeek(int dwNum, ref DateTimeOffset calcDay)
|
||||||
{
|
{
|
||||||
var daysOffset = dwNum - ((int)calcDay.DayOfWeek);
|
var daysOffset = dwNum - ((int)calcDay.DayOfWeek);
|
||||||
|
|
||||||
@@ -243,7 +282,6 @@ namespace PARR.DAL.TransformServices
|
|||||||
daysOffset = 7 + daysOffset;
|
daysOffset = 7 + daysOffset;
|
||||||
|
|
||||||
calcDay = calcDay.AddDays(daysOffset);
|
calcDay = calcDay.AddDays(daysOffset);
|
||||||
return calcDay;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user