From 5baec1c4b9beaf845cb9e52583504c111a0dd778 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=A9=AC=E6=A2=93=E5=BD=AD?= Date: Sat, 10 Oct 2026 15:59:21 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A3=81=E5=88=A4=E5=9C=BA=E6=AC=A1=E5=88=86?= =?UTF-8?q?=E9=85=8D=E9=A1=BA=E5=BA=8F=E5=B1=95=E7=A4=BA=E9=A1=B9=E7=9B=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- YD_Event.Application/Event/JudgeAssignmentService.cs | 11 ++++++++--- 二期需求/dbo.sql | 2 +- 二期需求/上线/dbo_insert.sql | 2 +- 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/YD_Event.Application/Event/JudgeAssignmentService.cs b/YD_Event.Application/Event/JudgeAssignmentService.cs index 67a97a7..5cdf0fa 100644 --- a/YD_Event.Application/Event/JudgeAssignmentService.cs +++ b/YD_Event.Application/Event/JudgeAssignmentService.cs @@ -77,15 +77,20 @@ public class JudgeAssignmentService : IDynamicApiController, ITransient var referees = await _refereeRepository.AsQueryable().Where(x => assignments.Select(a => a.RefereeId).Contains(x.Id)).ToListAsync(); var result = new JudgeAssignmentBoardOutput { ArrangementConfirmed = true, Submitted = assignments.Count > 0 && assignments.All(x => x.AssignmentStatus == 1) }; var projectMap = projects.ToDictionary(x => x.Id); + var sessionsByEventProject = sessions + .GroupBy(x => x.EventProjectId) + .ToDictionary(x => x.Key, x => x.OrderBy(session => session.Id).ToList()); foreach (var ep in eventProjects - .OrderBy(x => projectMap.GetValueOrDefault(x.ProjectId)?.SortIndex ?? int.MaxValue) + // 秩序册覆盖导入会按 Excel 中项目首次出现的顺序生成场次; + // 普通赛事编排同样按项目 SortIndex 依次生成场次,因此以首个有效场次保持两条业务路径的原始顺序。 + .OrderBy(x => sessionsByEventProject.GetValueOrDefault(x.Id)?.FirstOrDefault()?.Id ?? long.MaxValue) + .ThenBy(x => projectMap.GetValueOrDefault(x.ProjectId)?.SortIndex ?? int.MaxValue) .ThenBy(x => x.ProjectId) .ThenBy(x => x.Id)) { var project = projectMap.GetValueOrDefault(ep.ProjectId); if (project == null) continue; - var actualSessions = sessions.Where(x => x.EventProjectId == ep.Id).ToList(); - if (actualSessions.Count == 0) continue; + if (!sessionsByEventProject.TryGetValue(ep.Id, out var actualSessions)) continue; if (!TryGetSessionRuleId(actualSessions, out var ruleId)) throw Oops.Bah($"项目【{project.Name}】的场次计分规则不一致或无效,请先核查历史编排"); var rule = rules.FirstOrDefault(x => x.Id == ruleId) diff --git a/二期需求/dbo.sql b/二期需求/dbo.sql index 8252e6b..8effb2d 100644 --- a/二期需求/dbo.sql +++ b/二期需求/dbo.sql @@ -771,7 +771,7 @@ BEGIN TRY SET RuleConfigJson=JSON_MODIFY( RuleConfigJson, N'append $.roleAggregations', - JSON_QUERY(N'{"roleType":"T","symbol":"qI","label":"互动配合规定元素缺失","sourceField":"RequiredMissingCount","targetField":"RequiredScore","aggregate":"avg","aggregateDecimals":0,"sign":1,"factor":"Q","factorWeight":0.025}')) + JSON_QUERY(N'{"roleType":"T","symbol":"qI","label":"互动配合规定元素缺失","sourceField":"RequiredMissingCount","targetField":"RequiredScore","aggregate":"avg","sign":1,"factor":"Q","factorWeight":0.025}')) WHERE RuleCode IN (N'ROPE_FREESTYLE_DOUBLE_SYNC',N'ROPE_FREESTYLE_QUAD_SYNC'); UPDATE r SET RuleName=s.RuleName,JudgeRoleSchemaJson=s.JudgeRoleSchemaJson,RuleConfigJson=s.RuleConfigJson, diff --git a/二期需求/上线/dbo_insert.sql b/二期需求/上线/dbo_insert.sql index b43108d..30e00e2 100644 --- a/二期需求/上线/dbo_insert.sql +++ b/二期需求/上线/dbo_insert.sql @@ -29,7 +29,7 @@ BEGIN TRY SET RuleConfigJson=JSON_MODIFY( RuleConfigJson, N'append $.roleAggregations', - JSON_QUERY(N'{"roleType":"T","symbol":"qI","label":"互动配合规定元素缺失","sourceField":"RequiredMissingCount","targetField":"RequiredScore","aggregate":"avg","aggregateDecimals":0,"sign":1,"factor":"Q","factorWeight":0.025}')) + JSON_QUERY(N'{"roleType":"T","symbol":"qI","label":"互动配合规定元素缺失","sourceField":"RequiredMissingCount","targetField":"RequiredScore","aggregate":"avg","sign":1,"factor":"Q","factorWeight":0.025}')) WHERE RuleCode IN (N'ROPE_FREESTYLE_DOUBLE_SYNC',N'ROPE_FREESTYLE_QUAD_SYNC'); UPDATE r SET RuleName=s.RuleName,JudgeRoleSchemaJson=s.JudgeRoleSchemaJson,RuleConfigJson=s.RuleConfigJson,