fix(dal): исправлен расчет следующего запуска Regularly в EsppScheduleTransformService.
This commit is contained in:
@@ -94,16 +94,22 @@ namespace PARR.DAL.DomainServices.Implementations
|
|||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
logger.LogDebug("Применяем фильтр #{Index} (Id={FilterId})", filterNumber, filter.Id);
|
||||||
|
|
||||||
// Стартуем с базового условия — имя Unit'а
|
// Стартуем с базового условия — имя Unit'а
|
||||||
var query = unitService.Get().AsNoTracking()
|
var query = unitService.Get().AsNoTracking()
|
||||||
.Where(unit => EF.Functions.ILike(unit.Name, filter.UnitFilter));
|
.Where(unit => EF.Functions.ILike(unit.Name, filter.UnitFilter));
|
||||||
|
|
||||||
// 1. Фильтры по полям (UnitValues)
|
logger.LogDebug("Базовый фильтр по Name: {NameFilter}", filter.UnitFilter);
|
||||||
|
|
||||||
|
// 1. Фильтры по полям (UnitValues)
|
||||||
foreach (var fieldFilter in filter.FieldFilters)
|
foreach (var fieldFilter in filter.FieldFilters)
|
||||||
{
|
{
|
||||||
var fieldId = fieldFilter.FieldId;
|
var fieldId = fieldFilter.FieldId;
|
||||||
var valueMask = fieldFilter.ValueMask;
|
var valueMask = fieldFilter.ValueMask;
|
||||||
|
|
||||||
|
logger.LogDebug("Фильтр по полю: FieldId={FieldId}, ValueMask={ValueMask}", fieldId, valueMask);
|
||||||
|
|
||||||
query = query.Where(unit =>
|
query = query.Where(unit =>
|
||||||
unit.UnitValues.Any(value =>
|
unit.UnitValues.Any(value =>
|
||||||
value.FieldId == fieldId
|
value.FieldId == fieldId
|
||||||
@@ -112,18 +118,19 @@ namespace PARR.DAL.DomainServices.Implementations
|
|||||||
&& EF.Functions.ILike(value.Value.Value, valueMask)));
|
&& EF.Functions.ILike(value.Value.Value, valueMask)));
|
||||||
}
|
}
|
||||||
|
|
||||||
// 2. Фильтры по связям (родителям и детям)
|
// 2. Фильтры по связям (родителям и детям)
|
||||||
foreach (var relFilter in filter.RelationshipFilters)
|
foreach (var relFilter in filter.RelationshipFilters)
|
||||||
{
|
{
|
||||||
var fieldId = relFilter.FieldId;
|
var fieldId = relFilter.FieldId;
|
||||||
var valueMask = relFilter.ValueMask;
|
var valueMask = relFilter.ValueMask;
|
||||||
|
|
||||||
|
logger.LogDebug("Фильтр по связи: IsParent={IsParent}, IsInverse={IsInverse}, IsFullMatch={IsFullMatch}, FieldId={FieldId}, ValueMask={ValueMask}",
|
||||||
|
relFilter.IsParent, relFilter.IsInverse, relFilter.IsFullMatch, relFilter.FieldId, relFilter.ValueMask);
|
||||||
|
|
||||||
if (relFilter.IsParent)
|
if (relFilter.IsParent)
|
||||||
{
|
{
|
||||||
// Работаем с ParentUnits → pu.ParentUnit
|
|
||||||
if (relFilter.IsInverse)
|
if (relFilter.IsInverse)
|
||||||
{
|
{
|
||||||
// "Обратный фильтр": ищем Unit'ы, у которых связанные Unit'ы НЕ имеют указанного значения
|
|
||||||
if (relFilter.IsFullMatch)
|
if (relFilter.IsFullMatch)
|
||||||
{
|
{
|
||||||
// Все родители НЕ должны иметь такое значение
|
// Все родители НЕ должны иметь такое значение
|
||||||
@@ -138,7 +145,7 @@ namespace PARR.DAL.DomainServices.Implementations
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// Хотя бы один родитель НЕ имеет такого значения
|
// Хотя бы один родитель НЕ должен иметь такое значение
|
||||||
query = query.Where(unit =>
|
query = query.Where(unit =>
|
||||||
!unit.ParentUnits.Any() ||
|
!unit.ParentUnits.Any() ||
|
||||||
unit.ParentUnits.Any(parentLink =>
|
unit.ParentUnits.Any(parentLink =>
|
||||||
@@ -238,6 +245,8 @@ namespace PARR.DAL.DomainServices.Implementations
|
|||||||
int min = job.MinValueRelationships.GetValueOrDefault(0);
|
int min = job.MinValueRelationships.GetValueOrDefault(0);
|
||||||
int max = job.MaxValueRelationships.GetValueOrDefault(int.MaxValue);
|
int max = job.MaxValueRelationships.GetValueOrDefault(int.MaxValue);
|
||||||
|
|
||||||
|
logger.LogDebug("Фильтр по количеству связей: Min={Min}, Max={Max}, IsParent={IsParent}", min, max, job.IsParentRelationships);
|
||||||
|
|
||||||
if (job.IsParentRelationships == true)
|
if (job.IsParentRelationships == true)
|
||||||
{
|
{
|
||||||
query = query.Where(unit =>
|
query = query.Where(unit =>
|
||||||
@@ -250,12 +259,14 @@ namespace PARR.DAL.DomainServices.Implementations
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Запрашиваем в БД с учётом оставшегося лимита
|
// Выполняем — только Id, с учётом оставшегося лимита
|
||||||
var newIds = await query
|
var newIds = await query
|
||||||
.Select(unit => unit.Id)
|
.Select(unit => unit.Id)
|
||||||
.Take(remaining)
|
.Take(remaining)
|
||||||
.ToListAsync();
|
.ToListAsync();
|
||||||
|
|
||||||
|
logger.LogDebug("Фильтр #{Index}: найдено {Count} Unit'ов", filterNumber, newIds.Count);
|
||||||
|
|
||||||
collectedIds.UnionWith(newIds);
|
collectedIds.UnionWith(newIds);
|
||||||
|
|
||||||
logger.LogDebug(
|
logger.LogDebug(
|
||||||
@@ -267,7 +278,6 @@ namespace PARR.DAL.DomainServices.Implementations
|
|||||||
{
|
{
|
||||||
logger.LogError(ex, "Ошибка при обработке фильтра {FilterId} (#{Index}) для Job {JobId}",
|
logger.LogError(ex, "Ошибка при обработке фильтра {FilterId} (#{Index}) для Job {JobId}",
|
||||||
filter.Id, filterNumber, job.Id);
|
filter.Id, filterNumber, job.Id);
|
||||||
// Продолжаем — другие фильтры могут сработать
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -18,8 +18,5 @@ namespace PARR.DAL.Models
|
|||||||
|
|
||||||
[ForeignKey(nameof(UnitId))]
|
[ForeignKey(nameof(UnitId))]
|
||||||
public Unit.Unit? Unit { get; set; }
|
public Unit.Unit? Unit { get; set; }
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,7 +5,6 @@ using PARR.DAL.Contracts;
|
|||||||
using PARR.DAL.DomainModels;
|
using PARR.DAL.DomainModels;
|
||||||
using PARR.DAL.Extensions;
|
using PARR.DAL.Extensions;
|
||||||
using PARR.DAL.Services.Interfaces;
|
using PARR.DAL.Services.Interfaces;
|
||||||
using PARR.DAL.Services.Interfaces.Job;
|
|
||||||
|
|
||||||
namespace PARR.DAL.TransformServices
|
namespace PARR.DAL.TransformServices
|
||||||
{
|
{
|
||||||
@@ -206,7 +205,9 @@ namespace PARR.DAL.TransformServices
|
|||||||
throw new ArgumentException($"Неизвестное значение: {values[0].Value.Value}");
|
throw new ArgumentException($"Неизвестное значение: {values[0].Value.Value}");
|
||||||
}
|
}
|
||||||
|
|
||||||
var calcDay = referenceDate.AddHours(regNum);
|
var calcDay = referenceDate;
|
||||||
|
if (calcDay < DateTimeOffset.UtcNow)
|
||||||
|
calcDay = calcDay.AddHours(regNum);
|
||||||
|
|
||||||
//TODO: вот это повторяется от метода к методу
|
//TODO: вот это повторяется от метода к методу
|
||||||
//Если итоговая дата указывает на прошлое, то повторяем расчёт и уходим в рекурсию
|
//Если итоговая дата указывает на прошлое, то повторяем расчёт и уходим в рекурсию
|
||||||
@@ -305,7 +306,7 @@ namespace PARR.DAL.TransformServices
|
|||||||
return calcDay;
|
return calcDay;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private DateTimeOffset GetNextDateAnnually(List<EsppScheduleValDto> values, DateTimeOffset referenceDate)
|
private DateTimeOffset GetNextDateAnnually(List<EsppScheduleValDto> values, DateTimeOffset referenceDate)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user