fix(api,dal,nextRun): исправлена логика рассчета nextRun для шаблонов с параметром IsResponseAreaTimezone
This commit is contained in:
@@ -1,6 +1,5 @@
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using PARR.BLL.Helpers;
|
||||
using PARR.Constants;
|
||||
using PARR.DAL.Contracts;
|
||||
using PARR.DAL.DomainServices.Shortcodes;
|
||||
@@ -8,7 +7,6 @@ using PARR.DAL.Models;
|
||||
using PARR.DAL.Models.Job;
|
||||
using PARR.DAL.NextRunServices.Models;
|
||||
using PARR.DAL.NextRunServices.Subservices;
|
||||
using PARR.DAL.Services.Implementations.Schedule;
|
||||
using PARR.DAL.Services.Interfaces;
|
||||
using PARR.DAL.Services.Interfaces.Job;
|
||||
using PARR.DAL.Services.Interfaces.Schedule;
|
||||
@@ -136,22 +134,24 @@ namespace PARR.DAL.NextRunServices
|
||||
}
|
||||
|
||||
|
||||
public async Task<DateTimeOffset> GetNextRunForJobGroupWithEsppSchedulleAsync(Guid jobGroupId)
|
||||
{
|
||||
var jobGroup = await jobGroupService.Get().AsNoTracking().FirstOrDefaultAsync(t => t.Id == jobGroupId);
|
||||
//public async Task<DateTimeOffset> GetNextRunForJobGroupWithEsppSchedulleAsync(Guid jobGroupId)
|
||||
//{
|
||||
// var jobGroup = await jobGroupService.Get().AsNoTracking().FirstOrDefaultAsync(t => t.Id == jobGroupId);
|
||||
|
||||
if (jobGroup == null)
|
||||
{
|
||||
logger.LogError("Не найдена группа работ с Id: {jobGroupId}.", jobGroupId);
|
||||
throw new ArgumentNullException(nameof(jobGroupId), $"Не найдена группа работ с Id: {jobGroupId}");
|
||||
}
|
||||
// if (jobGroup == null)
|
||||
// {
|
||||
// logger.LogError("Не найдена группа работ с Id: {jobGroupId}.", jobGroupId);
|
||||
// throw new ArgumentNullException(nameof(jobGroupId), $"Не найдена группа работ с Id: {jobGroupId}");
|
||||
// }
|
||||
|
||||
// Берем из обычного расписания ЕСПП
|
||||
return await esppScheduleTransformService.GetNextDateAsync(jobGroupId, jobGroup.ReferenceDate);
|
||||
}
|
||||
// // Берем из обычного расписания ЕСПП
|
||||
// //return await esppScheduleTransformService.GetNextDateAsync(jobGroupId, jobGroup.ReferenceDate);
|
||||
|
||||
// return await GetNextRunForEsppStandardScheduleAsync(template);
|
||||
//}
|
||||
|
||||
|
||||
public async Task<DateTimeOffset> GetNextRunForNewTemplateAsync(Guid jobGroupId)
|
||||
public async Task<DateTimeOffset> GetNextRunForNewTemplateAsync(Guid jobGroupId, string responseArea)
|
||||
{
|
||||
// определяю это автораспределение или нет, вызываю соответствующий рассчет
|
||||
|
||||
@@ -199,7 +199,8 @@ namespace PARR.DAL.NextRunServices
|
||||
else
|
||||
{
|
||||
// тут расписание ЕСПП
|
||||
var nextRun = await esppScheduleTransformService.GetNextDateAsync(jobGroup.Id, jobGroup.ReferenceDate);
|
||||
//var nextRun = await esppScheduleTransformService.GetNextDateAsync(jobGroup.Id, jobGroup.ReferenceDate);
|
||||
var nextRun = await GetNextRunForEsppStandardScheduleAsync(jobGroupId, jobGroup.ReferenceDate, jobGroup.IsResponseAreaTimezone, responseArea);
|
||||
logger.LogDebug("Получил nextRun {nextRun} по jobGroupId {jobGroupId}, тип расписания ЕСПП", nextRun, jobGroupId);
|
||||
|
||||
return nextRun;
|
||||
@@ -253,7 +254,13 @@ namespace PARR.DAL.NextRunServices
|
||||
else
|
||||
{
|
||||
// считаем как ЕСПП
|
||||
var nextRun = await esppScheduleTransformService.GetNextDateAsync(template.Job.Group.Id, template.Job.Group.ReferenceDate);
|
||||
//var offset = GetOffsetTest();
|
||||
//var nextRun = await esppScheduleTransformService.GetNextDateAsync(template.Job.Group.Id, template.Job.Group.ReferenceDate, offset);
|
||||
|
||||
//var nextRun = await GetNextRunForEsppStandardScheduleAsync(template.Job.Group.Id, template.Job.Group.ReferenceDate, template);
|
||||
var responseArea = await shortcodesService.ApplyShortcodesAsync(template.Job.ResponseAreaMask, template);
|
||||
var nextRun = await GetNextRunForEsppStandardScheduleAsync(template.Job.GroupId, template.Job.Group.ReferenceDate, template.Job.Group.IsResponseAreaTimezone, responseArea);
|
||||
|
||||
logger.LogDebug("Получил nextRun {nextRun} по templateId {templateId}, isNew: {isNew}, тип расписания: ЕСПП", nextRun, templateId, isNew);
|
||||
|
||||
return nextRun;
|
||||
@@ -262,6 +269,31 @@ namespace PARR.DAL.NextRunServices
|
||||
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Расчет nextRun по расписанию ЕСПП
|
||||
/// </summary>
|
||||
/// <param name="jobGroupId"></param>
|
||||
/// <param name="referenceDate"></param>
|
||||
/// <param name="template">Template with include Job, Group</param>
|
||||
/// <returns></returns>
|
||||
private async Task<DateTimeOffset> GetNextRunForEsppStandardScheduleAsync(Guid jobGroupId, DateTimeOffset referenceDate, bool isResponseAreaTimezone, string? responseArea)
|
||||
{
|
||||
//var isResponseAreaTimezone = template.Job?.Group?.IsResponseAreaTimezone ?? false;
|
||||
//string? responseArea = null;
|
||||
|
||||
//if (isResponseAreaTimezone)
|
||||
//{
|
||||
// var responseAreaMask = template.Job!.ResponseAreaMask;
|
||||
// responseArea = await shortcodesService.ApplyShortcodesAsync(responseAreaMask, template);
|
||||
//}
|
||||
|
||||
var offset = GetTimeOffset(isResponseAreaTimezone, responseArea);
|
||||
//var nextRun = await esppScheduleTransformService.GetNextDateAsync(template.Job!.GroupId, template.Job!.Group!.ReferenceDate, offset);
|
||||
var nextRun = await esppScheduleTransformService.GetNextDateAsync(jobGroupId, referenceDate, offset);
|
||||
|
||||
return nextRun;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/// <summary>
|
||||
@@ -331,30 +363,79 @@ namespace PARR.DAL.NextRunServices
|
||||
|
||||
public DateTimeOffset GetNextRunWithTimezoneEsppAndResponseArea(DateTimeOffset nextRun, bool? isResponseAreaTimezone = null, string? responseArea = null)
|
||||
{
|
||||
logger.LogDebug("Начинаю получать nextRun с учетом УЗ ЕСПП и ЗО, входные параметры: nextRun: {nextRun}, isResponseAreaTimezone: {isResponseAreaTimezone}, responseArea: {responseArea}", nextRun, isResponseAreaTimezone, responseArea);
|
||||
//logger.LogDebug("Начинаю получать nextRun с учетом УЗ ЕСПП и ЗО, входные параметры: nextRun: {nextRun}, isResponseAreaTimezone: {isResponseAreaTimezone}, responseArea: {responseArea}", nextRun, isResponseAreaTimezone, responseArea);
|
||||
|
||||
//var esppOffset = GetEsppAccountOffset();
|
||||
|
||||
//// смещение УЗ ЕСПП
|
||||
//var resultNextRun = nextRun.Add(esppOffset);
|
||||
//logger.LogDebug("Смещение nextRun с учетом смещения УЗ ЕСПП, новое значение: {resultNextRun}", resultNextRun);
|
||||
|
||||
//// если включено использовать таймзону ЗО
|
||||
//if (isResponseAreaTimezone == true && !string.IsNullOrEmpty(responseArea))
|
||||
//{
|
||||
// // resultNextRun = офсет УЗ ЕСПП - offset ЗО
|
||||
// var responseAreaOffset = scheduleResponseAreaTimeOffsetService.GetByResponseAreaOrDefault(responseArea).UtcTimeOffset;
|
||||
|
||||
// var resultOffset = esppOffset - responseAreaOffset;
|
||||
|
||||
// resultNextRun = resultNextRun.Add(resultOffset);
|
||||
// logger.LogDebug("Смещение nextRun с учетом ЗО, смещение ЗО: {responseAreaOffset}, смещение с учетом смещения УЗ ЕСПП: {resultOffset}, новое значение: {resultNextRun}", responseAreaOffset, resultOffset, resultNextRun);
|
||||
//}
|
||||
|
||||
////var resulstStr = EsppScheduleHelpers.GetNextRun(resultNextRun);
|
||||
////logger.LogDebug("Результат в формате ЕСПП: {resulstStr}", resulstStr);
|
||||
|
||||
//return resultNextRun;
|
||||
|
||||
var offset = GetTimeOffset(isResponseAreaTimezone ?? false, responseArea);
|
||||
|
||||
return nextRun.Add(offset);
|
||||
}
|
||||
|
||||
private TimeSpan GetTimeOffset(bool isResponseAreaTimezone, string? responseArea = null)
|
||||
{
|
||||
// logger.LogDebug("Начинаю получать nextRun с учетом УЗ ЕСПП и ЗО, входные параметры: nextRun: {nextRun}, isResponseAreaTimezone: {isResponseAreaTimezone}, responseArea: {responseArea}", nextRun, isResponseAreaTimezone, responseArea);
|
||||
|
||||
var esppOffset = GetEsppAccountOffset();
|
||||
|
||||
// смещение УЗ ЕСПП
|
||||
var resultNextRun = nextRun.Add(esppOffset);
|
||||
logger.LogDebug("Смещение nextRun с учетом смещения УЗ ЕСПП, новое значение: {resultNextRun}", resultNextRun);
|
||||
logger.LogDebug("Получил оффсет {esppOffset}, для параметров: isResponseAreaTimezone: {isResponseAreaTimezone}, responseArea: {responseArea}", esppOffset, isResponseAreaTimezone, responseArea);
|
||||
|
||||
// если включено использовать таймзону ЗО
|
||||
if (isResponseAreaTimezone == true && !string.IsNullOrEmpty(responseArea))
|
||||
{
|
||||
// resultNextRun = офсет УЗ ЕСПП - offset ЗО
|
||||
var responseAreaOffset = scheduleResponseAreaTimeOffsetService.GetByResponseAreaOrDefault(responseArea).UtcTimeOffset;
|
||||
//if (isResponseAreaTimezone == true && !string.IsNullOrEmpty(responseArea))
|
||||
//{
|
||||
// // resultNextRun = офсет УЗ ЕСПП - offset ЗО
|
||||
// var responseAreaOffset = scheduleResponseAreaTimeOffsetService.GetByResponseAreaOrDefault(responseArea).UtcTimeOffset;
|
||||
|
||||
var resultOffset = esppOffset - responseAreaOffset;
|
||||
// var resultOffset = esppOffset- responseAreaOffset;
|
||||
|
||||
resultNextRun = resultNextRun.Add(resultOffset);
|
||||
logger.LogDebug("Смещение nextRun с учетом ЗО, смещение ЗО: {responseAreaOffset}, смещение с учетом смещения УЗ ЕСПП: {resultOffset}, новое значение: {resultNextRun}", responseAreaOffset, resultOffset, resultNextRun);
|
||||
}
|
||||
// return resultOffset;
|
||||
// //logger.LogDebug("Смещение nextRun с учетом ЗО, смещение ЗО: {responseAreaOffset}, смещение с учетом смещения УЗ ЕСПП: {resultOffset}, новое значение: {resultNextRun}", responseAreaOffset, resultOffset, resultNextRun);
|
||||
//}
|
||||
|
||||
//var resulstStr = EsppScheduleHelpers.GetNextRun(resultNextRun);
|
||||
//logger.LogDebug("Результат в формате ЕСПП: {resulstStr}", resulstStr);
|
||||
return esppOffset;
|
||||
|
||||
return resultNextRun;
|
||||
// var resultOffset =
|
||||
|
||||
//// смещение УЗ ЕСПП
|
||||
//var resultNextRun = nextRun.Add(esppOffset);
|
||||
//logger.LogDebug("Смещение nextRun с учетом смещения УЗ ЕСПП, новое значение: {resultNextRun}", resultNextRun);
|
||||
|
||||
//// если включено использовать таймзону ЗО
|
||||
//if (isResponseAreaTimezone == true && !string.IsNullOrEmpty(responseArea))
|
||||
//{
|
||||
// // resultNextRun = офсет УЗ ЕСПП - offset ЗО
|
||||
// var responseAreaOffset = scheduleResponseAreaTimeOffsetService.GetByResponseAreaOrDefault(responseArea).UtcTimeOffset;
|
||||
|
||||
// var resultOffset = esppOffset - responseAreaOffset;
|
||||
|
||||
// resultNextRun = resultNextRun.Add(resultOffset);
|
||||
// logger.LogDebug("Смещение nextRun с учетом ЗО, смещение ЗО: {responseAreaOffset}, смещение с учетом смещения УЗ ЕСПП: {resultOffset}, новое значение: {resultNextRun}", responseAreaOffset, resultOffset, resultNextRun);
|
||||
//}
|
||||
|
||||
////var resulstStr = EsppScheduleHelpers.GetNextRun(resultNextRun);
|
||||
////logger.LogDebug("Результат в формате ЕСПП: {resulstStr}", resulstStr);
|
||||
|
||||
//return resultNextRun;
|
||||
}
|
||||
|
||||
public DateTimeOffset GetNextRunWithResponseAreaOffset(DateTimeOffset nextRun, string responseArea)
|
||||
|
||||
Reference in New Issue
Block a user