统一场次顺序规则
This commit is contained in:
parent
f36cfa5d5e
commit
15960090b0
@ -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))
|
||||
|
||||
@ -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()
|
||||
|
||||
@ -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,
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user