fix(api,dal,nextRun): исправлена логика рассчета nextRun для шаблонов с параметром IsResponseAreaTimezone

This commit is contained in:
Mikhail Trubnikov
2026-02-05 15:41:36 +10:00
parent 0264ac9d52
commit 930e215089
13 changed files with 352 additions and 143 deletions

View File

@@ -76,21 +76,6 @@ namespace PARR.API.Controllers.V1
{
var paginationFilter = mapper.Map<PaginationFilter>(paginationQuery);
//IQueryable<Template> query = templateService.GetWithIncludes().AsNoTracking()
// .Include(t => t.Unit).ThenInclude(t => t!.UnitValues).ThenInclude(t => t.Field)
// .Include(t => t.Unit).ThenInclude(t => t!.UnitValues).ThenInclude(t => t.Value)
// .Include(t => t.RobotConfigurations).ThenInclude(t => t.Robot)
// .Include(t => t.RobotConfigurations).ThenInclude(t => t.TaskStatus)
// .Include(t => t.RobotConfigurations).ThenInclude(t => t.RobotStatus)
// .Include(t => t.Orders)
// .Include(t => t.StatusType)
// .Include(t => t.Job).ThenInclude(t => t.Group).ThenInclude(t => t.ScheduleExcludeType)
// .Include(t => t.Job).ThenInclude(t => t.Group).ThenInclude(t => t.ScheduleExcludeTypeCalendar)
// .OrderBy(t => t.Name)
// .AsSplitQuery();
//var sw = Stopwatch.StartNew();
IQueryable<Template> query = templateService.Get()
.Include(t => t.Unit).ThenInclude(t => t!.UnitValues).ThenInclude(t => t.Field)
.Include(t => t.Unit).ThenInclude(t => t!.UnitValues).ThenInclude(t => t.Value)
@@ -153,7 +138,7 @@ namespace PARR.API.Controllers.V1
{
//await ApplyTemplateShortcodesAsync(responseItem, templates.First(t => t.Id == responseItem.Id));
await ApplyTemplateShortcodesAsync(responseItem, templatesDict[responseItem.Id]);
FillNextRunWithResponseAreaInLocal(responseItem);
FillResponseAreaOffset(responseItem);
}
//logger.LogDebug("Получение шорткодов: {ElapsedMs} мс", sw.ElapsedMilliseconds);
//sw.Stop();
@@ -198,7 +183,7 @@ namespace PARR.API.Controllers.V1
var response = mapper.Map<TemplateResponse>(template);
await ApplyTemplateShortcodesAsync(response, template);
FillNextRunWithResponseAreaInLocal(response);
FillResponseAreaOffset(response);
var ordersCountResult = await GetOrdersCountAsync(new List<Guid> { response.Id });
response.OrderCount = ordersCountResult.Count > 0 ? ordersCountResult.First().Value : 0;
@@ -292,7 +277,7 @@ namespace PARR.API.Controllers.V1
var response = mapper.Map<TemplateListResponse>(templateToResponse);
await ApplyTemplateShortcodesAsync(response, templateToResponse);
FillNextRunWithResponseAreaInLocal(response);
FillResponseAreaOffset(response);
var ordersCountResult = await GetOrdersCountAsync(new List<Guid> { response.Id });
response.OrderCount = ordersCountResult.Count > 0 ? ordersCountResult.First().Value : 0;
@@ -339,23 +324,34 @@ namespace PARR.API.Controllers.V1
/// <summary>
/// Заполнить NextRunResponseAreaInLocal
/// Заполнить ResponseAreaOffset
/// </summary>
/// <param name="response"></param>
private void FillNextRunWithResponseAreaInLocal(TemplateBaseResponse response)
private void FillResponseAreaOffset(TemplateBaseResponse response)
{
var responseArea = response.IsResponseAreaTimezone && !string.IsNullOrEmpty(response.ResponseArea)
? response.ResponseArea
: settingsFromDb.DefaultResponseAreaToTimeOffset;
// если стоит галка IsResponseAreaTimezone и есть ЗО, то возвращаем оффсет
if (response.IsResponseAreaTimezone && !string.IsNullOrEmpty(response.ResponseArea))
{
var responseArea = response.ResponseArea;
response.ResponseAreaOffset = mapper.Map<ScheduleResponseAreaTimeOffsetResponse>(scheduleResponseAreaTimeOffsetService.GetByResponseAreaOrDefault(responseArea));
}
else
{
response.ResponseAreaOffset = null;
}
//var responseArea = response.IsResponseAreaTimezone && !string.IsNullOrEmpty(response.ResponseArea)
// ? response.ResponseArea
// : settingsFromDb.DefaultResponseAreaToTimeOffset;
//response.NextRunResponseAreaInLocal = response.IsResponseAreaTimezone && !string.IsNullOrEmpty(response.ResponseArea)
// ? nextRunService.GetNextRunWithResponseAreaOffset(response.NextRun, response.ResponseArea)
// // возвращаем в дефолтной зоне
// : nextRunService.GetNextRunWithResponseAreaOffset(response.NextRun, settingsFromDb.DefaultResponseAreaToTimeOffset);
response.NextRunResponseAreaInLocal = nextRunService.GetNextRunWithResponseAreaOffset(response.NextRun, responseArea);
//response.NextRunResponseAreaInLocal = nextRunService.GetNextRunWithResponseAreaOffset(response.NextRun, responseArea);
response.Timezone = mapper.Map<ScheduleResponseAreaTimeOffsetResponse>(scheduleResponseAreaTimeOffsetService.GetByResponseAreaOrDefault(responseArea));
//response.ResponseAreaOffset = mapper.Map<ScheduleResponseAreaTimeOffsetResponse>(scheduleResponseAreaTimeOffsetService.GetByResponseAreaOrDefault(responseArea));
}
}