From 4c87cf0ea2915293d9149f5fdd64039a6b02f5cb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=A9=AC=E6=A2=93=E5=BD=AD?= Date: Wed, 23 Sep 2026 11:06:55 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A3=81=E5=88=A4=E4=BB=BB=E5=8A=A1=E5=88=97?= =?UTF-8?q?=E8=A1=A8=E6=8C=89=E7=85=A7=E8=B5=9B=E4=BA=8B=E7=BC=96=E6=8E=92?= =?UTF-8?q?=E7=9A=84=E9=A1=BA=E5=BA=8F=E8=BF=9B=E8=A1=8C=E6=8E=92=E5=88=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Judge/JudgeScoringController.cs | 48 ++++++++++++++++++- 1 file changed, 47 insertions(+), 1 deletion(-) diff --git a/YD_Event.Application/Judge/JudgeScoringController.cs b/YD_Event.Application/Judge/JudgeScoringController.cs index 2a2b980..6fa4721 100644 --- a/YD_Event.Application/Judge/JudgeScoringController.cs +++ b/YD_Event.Application/Judge/JudgeScoringController.cs @@ -280,6 +280,26 @@ public class JudgeScoringController : IDynamicApiController .ToListAsync()) .OrderBy(x => x.PlayOrder).ThenBy(x => x.Id).ToList(); if (entries.Count == 0) return new List(); + + var eventProjects = await _eventProjectRepository.AsQueryable() + .Where(x => x.EventId == session.EventId && !x.DeleteMark) + .ToListAsync(); + var projectIds = eventProjects.Select(x => x.ProjectId).Distinct().ToList(); + var orderedProjectIds = (await _projectRepository.AsQueryable() + .Where(x => projectIds.Contains(x.Id) && !x.DeleteMark) + .ToListAsync()) + .OrderBy(x => x.SortIndex) + .ThenBy(x => x.Id) + .Select(x => x.Id) + .ToList(); + var currentProjectId = eventProjects + .FirstOrDefault(x => x.Id == session.EventProjectId)?.ProjectId ?? 0; + var projectOrderIndex = orderedProjectIds.IndexOf(currentProjectId); + var projectOrder = projectOrderIndex >= 0 ? projectOrderIndex + 1 : orderedProjectIds.Count + 1; + var venue = await _venueRepository.GetFirstAsync(x => x.Id == session.VenueId && !x.DeleteMark); + var venueOrder = venue?.Sort > 0 ? venue.Sort : 1; + var sessionArrangementOrder = GetArrangementSequence(session.SessionNo); + var entryIds = entries.Select(x => x.Id).ToList(); var sheets = await _sheetRepository.AsQueryable() .Where(x => entryIds.Contains(x.SessionEntryId) && x.JudgeAssignmentId == assignment.Id).ToListAsync(); @@ -300,7 +320,13 @@ public class JudgeScoringController : IDynamicApiController SessionEntryId = entry.Id, EntryNo = entry.EntryNo, PlayOrder = entry.PlayOrder, - ScheduleOrder = entry.SourceType == 1 ? entry.Id : 0, + ScheduleOrder = entry.SourceType == 1 + ? entry.Id + : BuildArrangementScheduleOrder( + projectOrder, + sessionArrangementOrder, + venueOrder, + entry.PlayOrder), ParticipantName = DisplayParticipantName(entry, ctx.Scope), GroupName = entry.GroupName, EntryStatus = entry.EntryStatus, @@ -1356,6 +1382,26 @@ public class JudgeScoringController : IDynamicApiController : 0; } + /// + /// 将自动编排任务还原为“项目、场次、场地”的全局顺序。 + /// 同组同场地的多条记录在数据库中属于同一场次,因此需结合出场顺序恢复原始场次号。 + /// + private static long BuildArrangementScheduleOrder( + int projectOrder, + int sessionArrangementOrder, + int venueOrder, + int playOrder) + { + var safePlayOrder = Math.Max(playOrder, 1); + var taskSessionOrder = sessionArrangementOrder > 0 && sessionArrangementOrder < int.MaxValue + ? sessionArrangementOrder + safePlayOrder - 1 + : safePlayOrder; + + return (long)Math.Max(projectOrder, 1) * 1_000_000_000_000L + + (long)taskSessionOrder * 1_000_000L + + Math.Max(venueOrder, 1); + } + /// /// 构建裁判端展示用的“场次-场地”,去除秩序册导入时写入场次名的项目和组别信息。 ///