fix(dal): EsppScheduleTransformService - исправлен сервис рассчета nextRun

This commit is contained in:
Mikhail Trubnikov
2025-11-24 16:28:50 +10:00
parent 57a9df18c0
commit 1aabd3a844

View File

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