统一场次顺序规则
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 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 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 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;
|
if (project == null) continue;
|
||||||
var rule = rules.FirstOrDefault(x => x.Id == project.ScoreRuleId);
|
var rule = rules.FirstOrDefault(x => x.Id == project.ScoreRuleId);
|
||||||
var sections = ParseRoleSections(rule?.JudgeRoleSchemaJson);
|
var sections = ParseRoleSections(rule?.JudgeRoleSchemaJson);
|
||||||
@ -91,7 +95,9 @@ public class JudgeAssignmentService : IDynamicApiController, ITransient
|
|||||||
EventProjectId = ep.Id, ProjectName = project.Name,
|
EventProjectId = ep.Id, ProjectName = project.Name,
|
||||||
RuleName = rule?.RuleName ?? "未配置计分规则", JudgeRoleSections = sections
|
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)
|
var items = assignments.Where(x => x.SessionId == session.Id)
|
||||||
.Select(x => ToAssignmentItemOutput(x, referees.FirstOrDefault(r => r.Id == x.RefereeId), slotMap))
|
.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>();
|
if (assignments.Count == 0) return new List<JudgeSessionDto>();
|
||||||
|
|
||||||
var sessionIds = assignments.Select(x => x.SessionId).Distinct().ToList();
|
var sessionIds = assignments.Select(x => x.SessionId).Distinct().ToList();
|
||||||
var sessions = (await _sessionRepository.AsQueryable()
|
var sessions = await _sessionRepository.AsQueryable()
|
||||||
.Where(x => sessionIds.Contains(x.Id) && x.SessionStatus != 90).ToListAsync())
|
.Where(x => sessionIds.Contains(x.Id) && x.SessionStatus != 90).ToListAsync();
|
||||||
.OrderByDescending(x => x.StartTime ?? DateTime.MinValue).ThenBy(x => x.SessionNo).ToList();
|
|
||||||
if (sessions.Count == 0) return new List<JudgeSessionDto>();
|
if (sessions.Count == 0) return new List<JudgeSessionDto>();
|
||||||
|
|
||||||
var eventIds = sessions.Select(x => x.EventId).Distinct().ToList();
|
var eventIds = sessions.Select(x => x.EventId).Distinct().ToList();
|
||||||
@ -124,6 +123,18 @@ public class JudgeScoringController : IDynamicApiController
|
|||||||
var rules = (await _ruleRepository.AsQueryable()
|
var rules = (await _ruleRepository.AsQueryable()
|
||||||
.Where(x => sessions.Select(s => s.ScoreRuleId).Contains(x.Id)).ToListAsync()).ToDictionary(x => x.Id);
|
.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()
|
var entries = await _entryRepository.AsQueryable()
|
||||||
.Where(x => sessionIds.Contains(x.SessionId) && !x.IsVoided).ToListAsync();
|
.Where(x => sessionIds.Contains(x.SessionId) && !x.IsVoided).ToListAsync();
|
||||||
var mySheets = await _sheetRepository.AsQueryable()
|
var mySheets = await _sheetRepository.AsQueryable()
|
||||||
|
|||||||
@ -147,8 +147,6 @@ public class WorkbenchController : IDynamicApiController
|
|||||||
}
|
}
|
||||||
|
|
||||||
var sessions = await query
|
var sessions = await query
|
||||||
.OrderBy(s => s.StartTime)
|
|
||||||
.OrderBy(s => s.SessionNo)
|
|
||||||
.Select(s => new
|
.Select(s => new
|
||||||
{
|
{
|
||||||
s.Id,
|
s.Id,
|
||||||
@ -192,9 +190,22 @@ public class WorkbenchController : IDynamicApiController
|
|||||||
|
|
||||||
var projectDict = (await _projectRepository.AsQueryable()
|
var projectDict = (await _projectRepository.AsQueryable()
|
||||||
.Where(p => eventProjects.Select(ep => ep.ProjectId).Contains(p.Id))
|
.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())
|
.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()
|
var groups = await _groupRepository.AsQueryable()
|
||||||
.Where(g => groupIds.Contains(g.Id))
|
.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 eventDict = events.ToDictionary(e => e.Id, e => e.EventName);
|
||||||
var venueDict = venues.ToDictionary(v => v.Id, v => v.VenueName);
|
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 groupDict = groups.ToDictionary(g => g.Id, g => g.GroupName);
|
||||||
var entryCountDict = entryCounts.ToDictionary(ec => ec.SessionId);
|
var entryCountDict = entryCounts.ToDictionary(ec => ec.SessionId);
|
||||||
var resultCountDict = resultCounts.ToDictionary(rc => rc.SessionId);
|
var resultCountDict = resultCounts.ToDictionary(rc => rc.SessionId);
|
||||||
@ -250,7 +262,7 @@ public class WorkbenchController : IDynamicApiController
|
|||||||
SessionNo = s.SessionNo,
|
SessionNo = s.SessionNo,
|
||||||
SessionName = s.SessionName,
|
SessionName = s.SessionName,
|
||||||
EventName = eventDict.GetValueOrDefault(s.EventId, ""),
|
EventName = eventDict.GetValueOrDefault(s.EventId, ""),
|
||||||
ProjectName = eventProjectDict.GetValueOrDefault(s.EventProjectId, ""),
|
ProjectName = eventProjectNameDict.GetValueOrDefault(s.EventProjectId, ""),
|
||||||
VenueName = venueDict.GetValueOrDefault(s.VenueId, ""),
|
VenueName = venueDict.GetValueOrDefault(s.VenueId, ""),
|
||||||
GroupName = s.EventProjectGroupId.HasValue ? groupDict.GetValueOrDefault(s.EventProjectGroupId.Value) : null,
|
GroupName = s.EventProjectGroupId.HasValue ? groupDict.GetValueOrDefault(s.EventProjectGroupId.Value) : null,
|
||||||
StartTime = s.StartTime,
|
StartTime = s.StartTime,
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user