fix(dal): EsppScheduleTransformService на входе делаем смещение в зону МСК, чтобы для шаблонов, у которых расписание считается по дням недели и время старта установлено в промежутке 21-0 гринвича, в которое ещё вчера относительно нормальных часовых поясов, расчёт проходит неверно
This commit is contained in:
@@ -1,5 +1,4 @@
|
||||
using Microsoft.Extensions.Logging;
|
||||
using PARR.Common;
|
||||
using PARR.Constants;
|
||||
using PARR.DAL.Contracts;
|
||||
using PARR.DAL.DomainModels;
|
||||
@@ -73,33 +72,40 @@ namespace PARR.DAL.TransformServices
|
||||
{
|
||||
var nextRun = referenceDate;
|
||||
|
||||
//---------
|
||||
// Для рассчета по МСК времени, потому что в ЮТС может быть еще ВСК, а по МСК это уже ПНД
|
||||
var offsetReferenceDate = referenceDate.ToOffset(new TimeSpan(3, 0, 0));
|
||||
//---------
|
||||
|
||||
switch (esppSchedule.TypeSchedule.Id)
|
||||
{
|
||||
case (int)EsppSchTypeScheduleEnum.Regularly:
|
||||
nextRun = GetNextDateRegularly(esppSchedule.Values, referenceDate);
|
||||
nextRun = GetNextDateRegularly(esppSchedule.Values, offsetReferenceDate);
|
||||
break;
|
||||
case (int)EsppSchTypeScheduleEnum.Weekly:
|
||||
nextRun = GetNextDateWeekly(esppSchedule.Values, referenceDate);
|
||||
nextRun = GetNextDateWeekly(esppSchedule.Values, offsetReferenceDate);
|
||||
break;
|
||||
case (int)EsppSchTypeScheduleEnum.Monthly:
|
||||
nextRun = GetNextDateMonthly(esppSchedule.Values, referenceDate);
|
||||
nextRun = GetNextDateMonthly(esppSchedule.Values, offsetReferenceDate);
|
||||
break;
|
||||
case (int)EsppSchTypeScheduleEnum.Monthly2:
|
||||
nextRun = GetNextDateMonthly2(esppSchedule.Values, referenceDate);
|
||||
nextRun = GetNextDateMonthly2(esppSchedule.Values, offsetReferenceDate);
|
||||
break;
|
||||
case (int)EsppSchTypeScheduleEnum.Annually:
|
||||
nextRun = GetNextDateAnnually(esppSchedule.Values, referenceDate);
|
||||
nextRun = GetNextDateAnnually(esppSchedule.Values, offsetReferenceDate);
|
||||
break;
|
||||
case (int)EsppSchTypeScheduleEnum.Annually2:
|
||||
nextRun = GetNextDateAnnually2(esppSchedule.Values, referenceDate);
|
||||
nextRun = GetNextDateAnnually2(esppSchedule.Values, offsetReferenceDate);
|
||||
break;
|
||||
}
|
||||
|
||||
// Возвращаем обратно в ЮТС
|
||||
nextRun = nextRun.ToOffset(TimeSpan.Zero);
|
||||
//возможно для автораспределения нужно nextRun = nextRunModifierService.GetWorkDayAsync(nextRun).GetAwaiter().GetResult();
|
||||
|
||||
// тут может быть 21 час по МСК, то это предыдущие сутки, нужно отнять 1 день
|
||||
if (!DateResolver.IsCurrentDayRelativeMskTime(nextRun.Hour))
|
||||
nextRun = nextRun.AddDays(-1);
|
||||
//if (!DateResolver.IsCurrentDayRelativeMskTime(nextRun.Hour))
|
||||
// nextRun = nextRun.AddDays(-1);
|
||||
|
||||
return nextRun;
|
||||
}
|
||||
@@ -196,7 +202,7 @@ namespace PARR.DAL.TransformServices
|
||||
{"Каждые 1,5 года", 13140},
|
||||
{"Каждые 3 года", 26280},
|
||||
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
if (!regDict.TryGetValue(values[0].Value.Value, out int regNum))
|
||||
@@ -206,8 +212,6 @@ namespace PARR.DAL.TransformServices
|
||||
}
|
||||
|
||||
var calcDay = referenceDate;
|
||||
if (calcDay < DateTimeOffset.UtcNow)
|
||||
calcDay = calcDay.AddHours(regNum);
|
||||
|
||||
//TODO: вот это повторяется от метода к методу
|
||||
//Если итоговая дата указывает на прошлое, то повторяем расчёт и уходим в рекурсию
|
||||
|
||||
Reference in New Issue
Block a user