From 5005160d4106b989c9ed5edf7ce7bd2fc375996a Mon Sep 17 00:00:00 2001 From: Mikhail Kuznetsov Date: Tue, 30 Jul 2024 12:30:10 +1000 Subject: [PATCH] =?UTF-8?q?fix(templateDistributor):=20=D0=B8=D0=B7=D0=BC?= =?UTF-8?q?=D0=B5=D0=BD=D0=B5=D0=BD=D0=B0=20=D0=BF=D1=80=D0=BE=D0=B2=D0=B5?= =?UTF-8?q?=D1=80=D0=BA=D0=B0=20=D1=88=D0=B0=D0=B1=D0=BB=D0=BE=D0=BD=D0=BE?= =?UTF-8?q?=D0=B2,=20=D1=83=20=D0=BA=D0=BE=D1=82=D0=BE=D1=80=D1=8B=D1=85?= =?UTF-8?q?=20NextRun=20=D0=B2=D1=8B=D1=85=D0=BE=D0=B4=D0=B8=D0=BB=20?= =?UTF-8?q?=D0=B7=D0=B0=20=D0=B3=D1=80=D0=B0=D0=BD=D0=B8=D1=86=D1=8B=20?= =?UTF-8?q?=D1=82=D0=B5=D0=BA=D1=83=D1=89=D0=B5=D0=B3=D0=BE=20=D0=BF=D0=B5?= =?UTF-8?q?=D1=80=D0=B8=D0=BE=D0=B4=D0=B0.=20=D0=AD=D1=82=D0=BE=20=D0=BF?= =?UTF-8?q?=D1=80=D0=B8=D0=B2=D0=BE=D0=B4=D0=B8=D0=BB=D0=BE=20=D0=BA=20?= =?UTF-8?q?=D1=82=D0=BE=D0=BC=D1=83=20=D1=87=D1=82=D0=BE=20=D1=87=D0=B0?= =?UTF-8?q?=D1=81=D1=82=D1=8C=20=D1=88=D0=B0=D0=B1=D0=BB=D0=BE=D0=BD=D0=BE?= =?UTF-8?q?=D0=B2=20=D0=BD=D0=B5=20=D0=BF=D0=B5=D1=80=D0=B5=D1=80=D0=B0?= =?UTF-8?q?=D1=81=D0=BF=D1=80=D0=B5=D0=B4=D0=B5=D0=BB=D1=8F=D0=BB=D0=B0?= =?UTF-8?q?=D1=81=D1=8C=20=D0=B8=20=D0=B3=D1=80=D0=B0=D1=84=D0=B8=D0=BA=20?= =?UTF-8?q?=D0=B1=D1=8B=D0=BB=20=D0=BD=D0=B5=20=D1=80=D0=B0=D0=B2=D0=BD?= =?UTF-8?q?=D0=BE=D0=BC=D0=B5=D1=80=D0=BD=D1=8B=D0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../TemplateDistributor.cs | 30 ++++++++++++------- 1 file changed, 19 insertions(+), 11 deletions(-) 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;