裁判任务列表按照赛事编排的顺序进行排列

This commit is contained in:
马梓彭 2026-09-23 11:06:55 +08:00
parent 7a1b2ab46d
commit 4c87cf0ea2

View File

@ -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<JudgeEntryDto>();
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;
}
/// <summary>
/// 将自动编排任务还原为“项目、场次、场地”的全局顺序。
/// 同组同场地的多条记录在数据库中属于同一场次,因此需结合出场顺序恢复原始场次号。
/// </summary>
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);
}
/// <summary>
/// 构建裁判端展示用的“场次-场地”,去除秩序册导入时写入场次名的项目和组别信息。
/// </summary>