fix(templateDistributor): изменена проверка шаблонов, у которых NextRun выходил за границы текущего периода. Это приводило к тому что часть шаблонов не перераспределялась и график был не равномерным

This commit is contained in:
Mikhail Kuznetsov
2024-07-30 12:30:10 +10:00
parent 7ac81ca54c
commit 5005160d41

View File

@@ -41,7 +41,7 @@ namespace PARR.TemplateDistributor
var templates = await templateService.Get() var templates = await templateService.Get()
.Include(t => t.Host) .Include(t => t.Host)
.ThenInclude(h => h.WorkGroup) .ThenInclude(h => h!.WorkGroup)
.Where(t => t.ApplicationInWorkId == applicationInWorkId && t.Host!.WorkGroupId != null) .Where(t => t.ApplicationInWorkId == applicationInWorkId && t.Host!.WorkGroupId != null)
.ToListAsync(); .ToListAsync();
@@ -146,7 +146,7 @@ namespace PARR.TemplateDistributor
distrPlan[workDay.Key] -= templatesCountForCurDay; distrPlan[workDay.Key] -= templatesCountForCurDay;
} }
return templates; return templateToDistrib;
#region comments #region comments
@@ -273,19 +273,27 @@ namespace PARR.TemplateDistributor
foreach (var wd in distributionPlan) foreach (var wd in distributionPlan)
{ {
var templatesInWd = templates.Where(t => DateOnly.FromDateTime(t.NextRun.DateTime) == wd.Key).ToList(); var templatesInWd = templates.Where(t => DateOnly.FromDateTime(t.NextRun.DateTime) == wd.Key).ToList();
var templatesToDistribute = templatesInWd.Skip(wd.Value).Take(templatesInWd.Count - wd.Value).ToList();
distributionPlan[wd.Key] -= templatesInWd.Count; if (templatesInWd.Any() && templatesInWd.Count > wd.Value)
{
result.AddRange(templatesToDistribute); result.AddRange(templatesInWd.Skip(wd.Value).Take(templatesInWd.Count - wd.Value).ToList());
distributionPlan[wd.Key] -= wd.Value;
}
else
distributionPlan[wd.Key] -= templatesInWd.Count;
} }
//Определим шаблоны за границами рабочих дней. Их тоже необходимо перераспределить
var workDays = distributionPlan.Keys.ToList(); var workDays = distributionPlan.Keys.ToList();
var templateWithNextRunOut = templates.Where(t => !workDays.Contains(DateOnly.FromDateTime(t.NextRun.DateTime))); var templateWithNextRunOut = templates.Where(t => workDays.All(w => w != DateOnly.FromDateTime(t.NextRun.DateTime))).ToList();
result.AddRange(templateWithNextRunOut);
if (templateWithNextRunOut.Any())
result.AddRange(templateWithNextRunOut);
if (result.Any())
//Обнулим nextRun
result.ForEach(t => t.NextRun = DateTimeOffset.MinValue);
//Обнулим nextRun
result.ForEach(t => t.NextRun = DateTimeOffset.MinValue);
return result; return result;
} }
@@ -311,7 +319,7 @@ namespace PARR.TemplateDistributor
var templateDistributedCount = 0;//количество распределённых на текущий момент шаблонов var templateDistributedCount = 0;//количество распределённых на текущий момент шаблонов
//Если количество шаблонов больше количества рабочих дней, то сразу распределяем их равным количеством по всем рабочим дням //Если количество шаблонов больше количества рабочих дней, то сразу распределяем их равным количеством по всем рабочим дням
if (templateDistributedCount >= workDays.Count) if (templateCount >= workDays.Count)
{ {
//количеством шаблонов на один рабочий день //количеством шаблонов на один рабочий день
var mainPartTemplateCountToDistribute = templateCount / workDays.Count; var mainPartTemplateCountToDistribute = templateCount / workDays.Count;