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