@@ -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 = офсет У З ЕСПП - o ffset З О
var responseAreaOffset = scheduleResponseAreaTimeOffsetService . GetByResponseAreaOrDefault ( responseArea ) . UtcTimeOffset ;
//if (isResponseAreaTimezone == true && !string.IsNullOrEmpty(responseArea))
//{
// // resultNextRun = офсет У З ЕСПП - offset З О
// var responseAreaOffset = scheduleResponseAreaTimeOffsetService.GetByResponseAreaOrDefault(responseArea).UtcTimeO ffset;
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 )