From db270dbb1c01e7f1c455c15f9c4afd29ca031fe4 Mon Sep 17 00:00:00 2001 From: Mikhail Kuznetsov Date: Mon, 15 Jun 2026 11:47:55 +1000 Subject: [PATCH] =?UTF-8?q?fix(shortcodesService):=20=D0=94=D0=BB=D1=8F=20?= =?UTF-8?q?=D1=80=D0=B5=D0=B0=D0=BB=D0=B8=D0=B7=D0=B0=D1=86=D0=B8=D0=B8=20?= =?UTF-8?q?=D1=88=D0=BE=D1=80=D1=82=D0=BA=D0=BE=D0=B4=D0=B0=20%=D0=93?= =?UTF-8?q?=D0=A0=5F=D0=9F=D0=9E=D0=9B=D0=95-=D0=9F=D0=9D%=20=D0=B4=D0=BE?= =?UTF-8?q?=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D0=B0=20=D1=81=D0=BE=D1=80?= =?UTF-8?q?=D1=82=D0=B8=D1=80=D0=BE=D0=B2=D0=BA=D0=B0=20=D0=B4=D0=BB=D1=8F?= =?UTF-8?q?=20=D0=B4=D0=B5=D1=82=D0=B5=D1=80=D0=BC=D0=B8=D0=BD=D0=B0=D1=86?= =?UTF-8?q?=D0=B8=D0=B8=20=D0=B2=D1=8B=D1=85=D0=BE=D0=B4=D0=BD=D0=BE=D0=B3?= =?UTF-8?q?=D0=BE=20=D1=81=D0=BF=D0=B8=D1=81=D0=BA=D0=B0.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Handlers/GroupedFieldShortcodeHandler.cs | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/PARR.Core/Services/Shortcodes/Handlers/GroupedFieldShortcodeHandler.cs b/PARR.Core/Services/Shortcodes/Handlers/GroupedFieldShortcodeHandler.cs index 7fecb589..89c1cd03 100644 --- a/PARR.Core/Services/Shortcodes/Handlers/GroupedFieldShortcodeHandler.cs +++ b/PARR.Core/Services/Shortcodes/Handlers/GroupedFieldShortcodeHandler.cs @@ -50,7 +50,6 @@ internal class GroupedFieldShortcodeHandler : IShortcodeHandler var unitsList = template.UnitsInTemplate; if (unitsList.Count == 0) { - // Данные должны быть загружены оркестратором. Если пусто — значит в БД действительно нет связей. return input.Replace("%ГР_ПОЛЕ-ПН%", string.Empty, StringComparison.OrdinalIgnoreCase); } @@ -67,12 +66,16 @@ internal class GroupedFieldShortcodeHandler : IShortcodeHandler .Where(fv => fieldValueIds.Contains(fv.Id)) .ToDictionaryAsync(fv => fv.Id, fv => fv.Value ?? string.Empty, ct); - var lines = unitsList.Select((uit, i) => - { - var uName = unitNames.GetValueOrDefault(uit.UnitId, $"(UnitId={uit.UnitId})"); - var fVal = fieldValueStrings.GetValueOrDefault(uit.UnitFieldValueId, string.Empty); - return $"{i + 1}. {uName} ({fVal})"; - }); + // Сортировка по имени юнита для детерминированного результата + var lines = unitsList + .OrderBy(u => unitNames.GetValueOrDefault(u.UnitId, string.Empty), StringComparer.OrdinalIgnoreCase) + .ThenBy(u => fieldValueStrings.GetValueOrDefault(u.UnitFieldValueId, string.Empty), StringComparer.OrdinalIgnoreCase) + .Select((uit, i) => + { + var uName = unitNames.GetValueOrDefault(uit.UnitId, $"(UnitId={uit.UnitId})"); + var fVal = fieldValueStrings.GetValueOrDefault(uit.UnitFieldValueId, string.Empty); + return $"{i + 1}. {uName} ({fVal})"; + }); return input.Replace("%ГР_ПОЛЕ-ПН%", string.Join("\n", lines), StringComparison.OrdinalIgnoreCase); }