Merge branch 'next-run-timezone' into dev
This commit is contained in:
@@ -5,10 +5,11 @@ using PARR.BLL.Helpers;
|
||||
using PARR.BLL.Services.Interfaces;
|
||||
using PARR.Constants;
|
||||
using PARR.DAL.Contracts;
|
||||
using PARR.DAL.DomainServices.Shortcodes;
|
||||
using PARR.DAL.Models;
|
||||
using PARR.DAL.NextRunServices;
|
||||
using PARR.DAL.Services.Interfaces;
|
||||
using PARR.DAL.Services.Interfaces.Schedule;
|
||||
using PARR.DAL.TransformServices;
|
||||
using PARR.EsppScheduleSync.Domain;
|
||||
using PARR.EsppScheduleSync.Settings;
|
||||
using PARR.EsppSync;
|
||||
@@ -23,8 +24,9 @@ namespace PARR.EsppScheduleSync
|
||||
private readonly ISyncService<EsppObjectSchedule> syncService;
|
||||
private readonly SettingsFromDb settingsFromDb;
|
||||
private readonly IServiceProvider serviceProvider;
|
||||
private readonly IScheduleResponseAreaTimeOffsetService scheduleResponseAreaTimeOffsetService;
|
||||
private string noneExcludeCalendarEsppValue;
|
||||
private Dictionary<string, string> responseAreaTimeOffsetDict;
|
||||
//private Dictionary<string, string> responseAreaTimeOffsetDict;
|
||||
|
||||
|
||||
public ScheduleSyncher(
|
||||
@@ -33,7 +35,8 @@ namespace PARR.EsppScheduleSync
|
||||
IMqService mqService,
|
||||
ISyncService<EsppObjectSchedule> syncService,
|
||||
SettingsFromDb settingsFromDb,
|
||||
IServiceProvider serviceProvider
|
||||
IServiceProvider serviceProvider,
|
||||
IScheduleResponseAreaTimeOffsetService scheduleResponseAreaTimeOffsetService
|
||||
)
|
||||
{
|
||||
this.logger = logger;
|
||||
@@ -42,8 +45,8 @@ namespace PARR.EsppScheduleSync
|
||||
this.syncService = syncService;
|
||||
this.settingsFromDb = settingsFromDb;
|
||||
this.serviceProvider = serviceProvider;
|
||||
|
||||
this.responseAreaTimeOffsetDict = new Dictionary<string, string>();
|
||||
this.scheduleResponseAreaTimeOffsetService = scheduleResponseAreaTimeOffsetService;
|
||||
//this.responseAreaTimeOffsetDict = new Dictionary<string, string>();
|
||||
this.noneExcludeCalendarEsppValue = string.Empty;
|
||||
|
||||
if (globalSettings.MqSettings == null)
|
||||
@@ -63,8 +66,8 @@ namespace PARR.EsppScheduleSync
|
||||
if (string.IsNullOrEmpty(noneExcludeCalendarEsppValue))
|
||||
await GetNoneExcludeCalendarEsppValueAsync();
|
||||
|
||||
if (responseAreaTimeOffsetDict.Count == 0)
|
||||
await GetResponseAreaTimeOffsetsAsync();
|
||||
//if (responseAreaTimeOffsetDict.Count == 0)
|
||||
// await GetResponseAreaTimeOffsetsAsync();
|
||||
|
||||
var isConnected = await mqService.InitConsumerAsync(globalSettings!.MqSettings!, SyncScheduleAsync);
|
||||
|
||||
@@ -74,13 +77,13 @@ namespace PARR.EsppScheduleSync
|
||||
logger.LogInformation("Запущена проверка очереди {QueueName}.", globalSettings.MqSettings!.QueueName);
|
||||
}
|
||||
|
||||
private async Task GetResponseAreaTimeOffsetsAsync()
|
||||
{
|
||||
using var scope = serviceProvider.CreateScope();
|
||||
var service = scope.ServiceProvider.GetRequiredService<IScheduleResponseAreaTimeOffsetService>();
|
||||
//private async Task GetResponseAreaTimeOffsetsAsync()
|
||||
//{
|
||||
// using var scope = serviceProvider.CreateScope();
|
||||
// var service = scope.ServiceProvider.GetRequiredService<IScheduleResponseAreaTimeOffsetService>();
|
||||
|
||||
responseAreaTimeOffsetDict = await service.Get().ToDictionaryAsync(t => t.ResponseArea, t => t.TimeOffset);
|
||||
}
|
||||
// responseAreaTimeOffsetDict = await service.Get().ToDictionaryAsync(t => t.ResponseArea, t => t.TimeOffset);
|
||||
//}
|
||||
|
||||
private async Task GetNoneExcludeCalendarEsppValueAsync()
|
||||
{
|
||||
@@ -251,15 +254,23 @@ namespace PARR.EsppScheduleSync
|
||||
private EsppObjectSchedule ConvertDbObjToEsppObj(Template template)
|
||||
{
|
||||
//дефолтное значение, изменится в сервисе nextRunModifierService
|
||||
var nextRunByAccountRobotTimeZone = DateTimeOffset.MinValue;
|
||||
var nextRunWithTimeZone = DateTimeOffset.MinValue;
|
||||
// дефолтное значение, изменится в ApplyShortcodesAsync
|
||||
var responseArea = "%ЗО_РГ%";
|
||||
|
||||
using (var scope = serviceProvider.CreateScope())
|
||||
{
|
||||
var nextRunModifierService = scope.ServiceProvider.GetService<INextRunModifierService>();
|
||||
if (nextRunModifierService == null)
|
||||
throw new Exception($"Не найден сервис: {nameof(INextRunModifierService)}");
|
||||
//var nextRunModifierService = scope.ServiceProvider.GetService<INextRunModifierService>();
|
||||
//if (nextRunModifierService == null)
|
||||
// throw new Exception($"Не найден сервис: {nameof(INextRunModifierService)}");
|
||||
|
||||
nextRunByAccountRobotTimeZone = nextRunModifierService.GetNextRunByAccountRobotTimeZone(template.NextRun);
|
||||
//nextRunWithTimeZone = nextRunModifierService.GetNextRunByAccountRobotTimeZone(template.NextRun);
|
||||
|
||||
var nextRunService = scope.ServiceProvider.GetRequiredService<INextRunService>();
|
||||
var shortcodeService = scope.ServiceProvider.GetRequiredService<IShortcodesService>();
|
||||
|
||||
responseArea = shortcodeService.ApplyShortcodesAsync(template.Job!.ResponseAreaMask, template).GetAwaiter().GetResult();
|
||||
nextRunWithTimeZone = nextRunService.GetNextRunWithTimezoneEsppAndResponseArea(template.NextRun, template.Job?.Group?.IsResponseAreaTimezone, responseArea);
|
||||
}
|
||||
|
||||
var esppObjectFromDb = new EsppObjectSchedule
|
||||
@@ -278,9 +289,9 @@ namespace PARR.EsppScheduleSync
|
||||
//Scheduled = EsppScheduleHelpers.GetNextRun(template.NextRun),
|
||||
//Scheduled = EsppScheduleHelpers.GetNextRun(nextRunModifierService.GetNextRunByAccountRobotTimeZone(template.NextRun)),
|
||||
//BasisTime = EsppScheduleHelpers.GetGenerationTime(nextRunModifierService.GetNextRunByAccountRobotTimeZone(template.NextRun)),
|
||||
Scheduled = EsppScheduleHelpers.GetNextRun(nextRunByAccountRobotTimeZone),
|
||||
BasisTime = EsppScheduleHelpers.GetGenerationTime(nextRunByAccountRobotTimeZone),
|
||||
Timezone = GetTimezone(template),
|
||||
Scheduled = EsppScheduleHelpers.GetNextRun(nextRunWithTimeZone),
|
||||
BasisTime = EsppScheduleHelpers.GetGenerationTime(nextRunWithTimeZone),
|
||||
Timezone = GetTimezone(template, responseArea),
|
||||
//Мы решили, что для всех расписаний "Отсутствует дата завершения", если что-то поменяется, тут нужно переделать
|
||||
TerminationType = settingsFromDb.ScheduleRepeatRange == "Отсутствует дата завершения" ? "forever" : "",
|
||||
CompleteAfter = ""
|
||||
@@ -290,29 +301,34 @@ namespace PARR.EsppScheduleSync
|
||||
return ClearOptionalFields(esppObjectFromDb);
|
||||
}
|
||||
|
||||
private string GetTimezone(Template template)
|
||||
private string GetTimezone(Template template, string responseArea)
|
||||
{
|
||||
|
||||
if (template.Job?.Group?.IsWorkGroupTimezone != true)
|
||||
return settingsFromDb.ScheduleTimezone;
|
||||
//if (template.Job?.Group?.IsWorkGroupTimezone != true)
|
||||
// return settingsFromDb.ScheduleTimezone;
|
||||
|
||||
var responseArea = template.Unit?.BaseFields?.ResponseArea;
|
||||
if (template.Job?.Group?.IsResponseAreaTimezone != true)
|
||||
return scheduleResponseAreaTimeOffsetService.GetDefault.EsppValue;
|
||||
|
||||
if (string.IsNullOrEmpty(responseArea))
|
||||
{
|
||||
throw new InvalidOperationException(
|
||||
$"У шаблона Id={template.Id}, Name='{template.Name}' не задана ResponseArea в Unit.BaseFields, " +
|
||||
"но включена настройка 'использовать часовой пояс рабочей группы'.");
|
||||
}
|
||||
//var responseArea = template.Unit?.BaseFields?.ResponseArea;
|
||||
|
||||
if (!responseAreaTimeOffsetDict.TryGetValue(responseArea, out var offset))
|
||||
{
|
||||
throw new InvalidOperationException(
|
||||
$"Не найдено временное смещение для ResponseArea '{responseArea}' у шаблона Id={template.Id}, Name='{template.Name}'. " +
|
||||
"Проверьте наличие записи в таблице ScheduleResponseAreaTimeOffset.");
|
||||
}
|
||||
//if (string.IsNullOrEmpty(responseArea))
|
||||
//{
|
||||
// throw new InvalidOperationException(
|
||||
// $"У шаблона Id={template.Id}, Name='{template.Name}' не задана ResponseArea в Unit.BaseFields, " +
|
||||
// "но включена настройка 'использовать часовой пояс рабочей группы'.");
|
||||
//}
|
||||
|
||||
return offset;
|
||||
//if (!responseAreaTimeOffsetDict.TryGetValue(responseArea, out var offset))
|
||||
//{
|
||||
// throw new InvalidOperationException(
|
||||
// $"Не найдено временное смещение для ResponseArea '{responseArea}' у шаблона Id={template.Id}, Name='{template.Name}'. " +
|
||||
// "Проверьте наличие записи в таблице ScheduleResponseAreaTimeOffset.");
|
||||
//}
|
||||
|
||||
//return offset;
|
||||
|
||||
return scheduleResponseAreaTimeOffsetService.GetByResponseAreaOrDefault(responseArea).EsppValue;
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user