diff --git a/PARR.TemplateDistributor/TemplateDistributor.cs b/PARR.TemplateDistributor/TemplateDistributor.cs index 3939f993..f4a35bf8 100644 --- a/PARR.TemplateDistributor/TemplateDistributor.cs +++ b/PARR.TemplateDistributor/TemplateDistributor.cs @@ -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;