fix(templateDistributor): изменена проверка шаблонов, у которых NextRun выходил за границы текущего периода. Это приводило к тому что часть шаблонов не перераспределялась и график был не равномерным
This commit is contained in:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user