统一场次顺序规则

This commit is contained in:
马梓彭 2026-09-17 16:27:30 +08:00
parent f36cfa5d5e
commit 15960090b0
3 changed files with 41 additions and 12 deletions

View File

@ -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))

View File

@ -107,9 +107,8 @@ public class JudgeScoringController : IDynamicApiController
if (assignments.Count == 0) return new List<JudgeSessionDto>();
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<JudgeSessionDto>();
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()

View File

@ -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,