From 15960090b0628bfd03cb446b8da4da7ca2088e82 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=A9=AC=E6=A2=93=E5=BD=AD?= Date: Thu, 17 Sep 2026 16:27:30 +0800 Subject: [PATCH] =?UTF-8?q?=E7=BB=9F=E4=B8=80=E5=9C=BA=E6=AC=A1=E9=A1=BA?= =?UTF-8?q?=E5=BA=8F=E8=A7=84=E5=88=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Event/JudgeAssignmentService.cs | 12 +++++++--- .../Judge/JudgeScoringController.cs | 17 ++++++++++--- .../Workbench/WorkbenchController.cs | 24 ++++++++++++++----- 3 files changed, 41 insertions(+), 12 deletions(-) diff --git a/YD_Event.Application/Event/JudgeAssignmentService.cs b/YD_Event.Application/Event/JudgeAssignmentService.cs index ef9460b..dc4d5cc 100644 --- a/YD_Event.Application/Event/JudgeAssignmentService.cs +++ b/YD_Event.Application/Event/JudgeAssignmentService.cs @@ -75,9 +75,13 @@ public class JudgeAssignmentService : IDynamicApiController, ITransient var assignments = await _assignmentRepository.AsQueryable().Where(x => x.EventId == eventId && x.AssignmentStatus < 9).ToListAsync(); 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) }; - foreach (var ep in eventProjects) + var projectMap = projects.ToDictionary(x => x.Id); + foreach (var ep in eventProjects + .OrderBy(x => projectMap.GetValueOrDefault(x.ProjectId)?.SortIndex ?? int.MaxValue) + .ThenBy(x => x.ProjectId) + .ThenBy(x => x.Id)) { - var project = projects.FirstOrDefault(x => x.Id == ep.ProjectId); + var project = projectMap.GetValueOrDefault(ep.ProjectId); if (project == null) continue; var rule = rules.FirstOrDefault(x => x.Id == project.ScoreRuleId); var sections = ParseRoleSections(rule?.JudgeRoleSchemaJson); @@ -91,7 +95,9 @@ public class JudgeAssignmentService : IDynamicApiController, ITransient EventProjectId = ep.Id, ProjectName = project.Name, RuleName = rule?.RuleName ?? "未配置计分规则", JudgeRoleSections = sections }; - foreach (var session in sessions.Where(x => x.EventProjectId == ep.Id).OrderBy(x => venueMap.GetValueOrDefault(x.VenueId)?.Sort)) + foreach (var session in sessions.Where(x => x.EventProjectId == ep.Id) + .OrderBy(x => venueMap.GetValueOrDefault(x.VenueId)?.Sort) + .ThenBy(x => x.SessionNo)) { var items = assignments.Where(x => x.SessionId == session.Id) .Select(x => ToAssignmentItemOutput(x, referees.FirstOrDefault(r => r.Id == x.RefereeId), slotMap)) diff --git a/YD_Event.Application/Judge/JudgeScoringController.cs b/YD_Event.Application/Judge/JudgeScoringController.cs index aa6c78c..856981c 100644 --- a/YD_Event.Application/Judge/JudgeScoringController.cs +++ b/YD_Event.Application/Judge/JudgeScoringController.cs @@ -107,9 +107,8 @@ public class JudgeScoringController : IDynamicApiController if (assignments.Count == 0) return new List(); var sessionIds = assignments.Select(x => x.SessionId).Distinct().ToList(); - var sessions = (await _sessionRepository.AsQueryable() - .Where(x => sessionIds.Contains(x.Id) && x.SessionStatus != 90).ToListAsync()) - .OrderByDescending(x => x.StartTime ?? DateTime.MinValue).ThenBy(x => x.SessionNo).ToList(); + var sessions = await _sessionRepository.AsQueryable() + .Where(x => sessionIds.Contains(x.Id) && x.SessionStatus != 90).ToListAsync(); if (sessions.Count == 0) return new List(); var eventIds = sessions.Select(x => x.EventId).Distinct().ToList(); @@ -124,6 +123,18 @@ public class JudgeScoringController : IDynamicApiController var rules = (await _ruleRepository.AsQueryable() .Where(x => sessions.Select(s => s.ScoreRuleId).Contains(x.Id)).ToListAsync()).ToDictionary(x => x.Id); + sessions = sessions + .OrderBy(x => eventProjects.TryGetValue(x.EventProjectId, out var eventProject) + && projects.TryGetValue(eventProject.ProjectId, out var project) + ? project.SortIndex + : int.MaxValue) + .ThenBy(x => eventProjects.TryGetValue(x.EventProjectId, out var eventProject) + ? eventProject.ProjectId + : long.MaxValue) + .ThenBy(x => x.StartTime ?? DateTime.MaxValue) + .ThenBy(x => x.SessionNo) + .ToList(); + var entries = await _entryRepository.AsQueryable() .Where(x => sessionIds.Contains(x.SessionId) && !x.IsVoided).ToListAsync(); var mySheets = await _sheetRepository.AsQueryable() diff --git a/YD_Event.Application/Workbench/WorkbenchController.cs b/YD_Event.Application/Workbench/WorkbenchController.cs index 268b53b..ef4186e 100644 --- a/YD_Event.Application/Workbench/WorkbenchController.cs +++ b/YD_Event.Application/Workbench/WorkbenchController.cs @@ -147,8 +147,6 @@ public class WorkbenchController : IDynamicApiController } var sessions = await query - .OrderBy(s => s.StartTime) - .OrderBy(s => s.SessionNo) .Select(s => new { s.Id, @@ -192,9 +190,22 @@ public class WorkbenchController : IDynamicApiController var projectDict = (await _projectRepository.AsQueryable() .Where(p => eventProjects.Select(ep => ep.ProjectId).Contains(p.Id)) - .Select(p => new { p.Id, p.Name }) + .Select(p => new { p.Id, p.Name, p.SortIndex }) .ToListAsync()) - .ToDictionary(p => p.Id, p => p.Name); + .ToDictionary(p => p.Id); + + var eventProjectDict = eventProjects.ToDictionary(ep => ep.Id); + sessions = sessions + .OrderBy(s => eventProjectDict.TryGetValue(s.EventProjectId, out var eventProject) + && projectDict.TryGetValue(eventProject.ProjectId, out var project) + ? project.SortIndex + : int.MaxValue) + .ThenBy(s => eventProjectDict.TryGetValue(s.EventProjectId, out var eventProject) + ? eventProject.ProjectId + : long.MaxValue) + .ThenBy(s => s.StartTime ?? DateTime.MaxValue) + .ThenBy(s => s.SessionNo) + .ToList(); var groups = await _groupRepository.AsQueryable() .Where(g => groupIds.Contains(g.Id)) @@ -234,7 +245,8 @@ public class WorkbenchController : IDynamicApiController var eventDict = events.ToDictionary(e => e.Id, e => e.EventName); var venueDict = venues.ToDictionary(v => v.Id, v => v.VenueName); - var eventProjectDict = eventProjects.ToDictionary(ep => ep.Id, ep => projectDict.GetValueOrDefault(ep.ProjectId, "")); + var eventProjectNameDict = eventProjects.ToDictionary(ep => ep.Id, + ep => projectDict.GetValueOrDefault(ep.ProjectId)?.Name ?? ""); var groupDict = groups.ToDictionary(g => g.Id, g => g.GroupName); var entryCountDict = entryCounts.ToDictionary(ec => ec.SessionId); var resultCountDict = resultCounts.ToDictionary(rc => rc.SessionId); @@ -250,7 +262,7 @@ public class WorkbenchController : IDynamicApiController SessionNo = s.SessionNo, SessionName = s.SessionName, EventName = eventDict.GetValueOrDefault(s.EventId, ""), - ProjectName = eventProjectDict.GetValueOrDefault(s.EventProjectId, ""), + ProjectName = eventProjectNameDict.GetValueOrDefault(s.EventProjectId, ""), VenueName = venueDict.GetValueOrDefault(s.VenueId, ""), GroupName = s.EventProjectGroupId.HasValue ? groupDict.GetValueOrDefault(s.EventProjectGroupId.Value) : null, StartTime = s.StartTime,