diff --git a/PARR.DAL/TransformServices/EsppScheduleTransformService.cs b/PARR.DAL/TransformServices/EsppScheduleTransformService.cs index 4792cf83..b669950d 100644 --- a/PARR.DAL/TransformServices/EsppScheduleTransformService.cs +++ b/PARR.DAL/TransformServices/EsppScheduleTransformService.cs @@ -1,5 +1,6 @@ using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Logging; +using PARR.Common; using PARR.Constants; using PARR.DAL.Contracts; using PARR.DAL.DomainModels; @@ -107,6 +108,10 @@ namespace PARR.DAL.TransformServices nextRun = nextRunModifierService.GetWorkDayAsync(nextRun).GetAwaiter().GetResult(); + // тут может быть 21 час по МСК, то это предыдущие сутки, нужно отнять 1 день + if (!DateResolver.IsCurrentDayRelativeMskTime(nextRun.Hour)) + nextRun = nextRun.AddDays(-1); + return nextRun; } @@ -169,13 +174,13 @@ namespace PARR.DAL.TransformServices var esppSchedule = await GetEsppScheduleAsync(jobGroupId); - if (jobGroup!.IsAutoDistributionEnabled) - { - var period = jobGroup.EsppSchValues.FirstOrDefault()?.EsppSchTypeValue?.DistributionPeriod; - var periodType = ParseDistributionPeriodType(period!.Type); + //if (jobGroup!.IsAutoDistributionEnabled) + //{ + // var period = jobGroup.EsppSchValues.FirstOrDefault()?.EsppSchTypeValue?.DistributionPeriod; + // var periodType = ParseDistributionPeriodType(period!.Type); - return GetNextDateForDistributionRun(lastRun, periodType, period.Duration); - } + // return GetNextDateForDistributionRun(lastRun, periodType, period.Duration); + //} return GetNextDate(esppSchedule, lastRun); } @@ -247,7 +252,9 @@ namespace PARR.DAL.TransformServices { var dwNum = dwDict[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 = new DateTimeOffset(lastRun.Year, lastRun.Month, lastRun.Day, lastRun.Hour, lastRun.Minute, lastRun.Second, lastRun.Offset); + if (lastRun < DateTimeOffset.UtcNow) + calcDay = new DateTimeOffset(DateTimeOffset.UtcNow.Year, DateTimeOffset.UtcNow.Month, DateTimeOffset.UtcNow.Day, lastRun.Hour, lastRun.Minute, lastRun.Second, lastRun.Offset); if (((int)calcDay.DayOfWeek) != dwNum) OffsetToDayOfWeek(dwNum, ref calcDay); @@ -255,7 +262,8 @@ namespace PARR.DAL.TransformServices //TODO: вот это повторяется от метода к методу //Если итоговая дата указывает на прошлое, то повторяем расчёт и ухоим в рекурсию if (calcDay < DateTimeOffset.UtcNow) - calcDay = calcDay.AddDays(7);//а вот тут что-то новенькое + + calcDay = GetNextDateWeekly(values, calcDay.AddDays(7));//а вот тут что-то новенькое return calcDay; } @@ -265,12 +273,16 @@ namespace PARR.DAL.TransformServices { int.TryParse(values[0].Value.Value, out int dayNum); - var calcDay = new DateTimeOffset(DateTimeOffset.UtcNow.Year, DateTimeOffset.UtcNow.Month, dayNum, lastRun.Hour, lastRun.Minute, lastRun.Second, lastRun.Offset); + + var calcDay = new DateTimeOffset(lastRun.Year, lastRun.Month, dayNum, lastRun.Hour, lastRun.Minute, lastRun.Second, lastRun.Offset); + if (lastRun < DateTimeOffset.UtcNow) + calcDay = new DateTimeOffset(DateTimeOffset.UtcNow.Year, DateTimeOffset.UtcNow.Month, dayNum, lastRun.Hour, lastRun.Minute, lastRun.Second, lastRun.Offset); //TODO: вот это повторяется от метода к методу //Если итоговая дата указывает на прошлое, то повторяем расчёт и ухоим в рекурсию if (calcDay < DateTimeOffset.UtcNow) - calcDay = calcDay.AddMonths(1);//и вот тут что-то новенькое + //todo: fixme + calcDay = GetNextDateMonthly(values, calcDay.AddMonths(1));//и вот тут что-то новенькое return calcDay; } @@ -281,7 +293,10 @@ namespace PARR.DAL.TransformServices var orderNum = orderDict[values[0].Value.Value]; var dwNum = dwDict[values[1].Value.Value]; - var calcDay = new DateTimeOffset(DateTimeOffset.UtcNow.Year, DateTimeOffset.UtcNow.Month, 1, lastRun.Hour, lastRun.Minute, lastRun.Second, lastRun.Offset); + var calcDay = new DateTimeOffset(lastRun.Year, lastRun.Month, 1, lastRun.Hour, lastRun.Minute, lastRun.Second, lastRun.Offset); + if (lastRun < DateTimeOffset.UtcNow) + calcDay = new DateTimeOffset(DateTimeOffset.UtcNow.Year, DateTimeOffset.UtcNow.Month, 1, lastRun.Hour, lastRun.Minute, lastRun.Second, lastRun.Offset); + List daysList = FindAllDaysInMonth(dwNum, ref calcDay); @@ -293,7 +308,7 @@ namespace PARR.DAL.TransformServices //TODO: вот это повторяется от метода к методу //Если итоговая дата указывает на прошлое, то повторяем расчёт и ухоим в рекурсию if (calcDay < DateTimeOffset.UtcNow) - calcDay = GetNextDateAnnually2(values, calcDay); + calcDay = GetNextDateMonthly2(values, calcDay.AddMonths(1)); return calcDay; } @@ -309,7 +324,7 @@ namespace PARR.DAL.TransformServices //TODO: вот это повторяется от метода к методу //Если итоговая дата указывает на прошлое, то повторяем расчёт и ухоим в рекурсию if (calcDay < DateTimeOffset.UtcNow) - calcDay = GetNextDateAnnually(values, calcDay); + calcDay = GetNextDateAnnually(values, calcDay.AddYears(1)); return calcDay; } @@ -349,7 +364,8 @@ namespace PARR.DAL.TransformServices //TODO: вот это повторяется от метода к методу //Если итоговая дата указывает на прошлое, то повторяем расчёт и ухоим в рекурсию if (calcDay < DateTimeOffset.UtcNow) - calcDay = GetNextDateAnnually2(values, calcDay); + //calcDay = GetNextDateAnnually2(values, calcDay); + calcDay = GetNextDateAnnually2(values, calcDay.AddYears(1)); return calcDay; }