平板场次排序
This commit is contained in:
parent
2b7bf7bdd0
commit
a745c8b662
@ -162,6 +162,11 @@ public class JudgeEntryDto
|
||||
/// </summary>
|
||||
public int PlayOrder { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 平板端展示的业务场次号;重赛沿用来源出场记录的场次号
|
||||
/// </summary>
|
||||
public int SessionOrder { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 秩序册中的全局出场顺序;非秩序册数据为0
|
||||
/// </summary>
|
||||
|
||||
@ -300,6 +300,33 @@ public class JudgeScoringController : IDynamicApiController
|
||||
var venueOrder = venue?.Sort > 0 ? venue.Sort : 1;
|
||||
var sessionArrangementOrder = GetArrangementSequence(session.SessionNo);
|
||||
|
||||
var sessionEntryOrderMap = new Dictionary<long, (int PlayOrder, long? RematchFromEntryId)>();
|
||||
if (entries.Any(x => x.IsRematch))
|
||||
{
|
||||
sessionEntryOrderMap = (await _entryRepository.AsQueryable()
|
||||
.Where(x => x.SessionId == sessionId && !x.DeleteMark)
|
||||
.Select(x => new { x.Id, x.PlayOrder, x.RematchFromEntryId })
|
||||
.ToListAsync())
|
||||
.ToDictionary(x => x.Id, x => (x.PlayOrder, x.RematchFromEntryId));
|
||||
}
|
||||
|
||||
int GetDisplayPlayOrder(EventSessionEntry entry)
|
||||
{
|
||||
var displayPlayOrder = entry.PlayOrder;
|
||||
var sourceEntryId = entry.RematchFromEntryId;
|
||||
var visitedEntryIds = new HashSet<long> { entry.Id };
|
||||
|
||||
while (sourceEntryId.HasValue &&
|
||||
visitedEntryIds.Add(sourceEntryId.Value) &&
|
||||
sessionEntryOrderMap.TryGetValue(sourceEntryId.Value, out var sourceEntry))
|
||||
{
|
||||
displayPlayOrder = sourceEntry.PlayOrder;
|
||||
sourceEntryId = sourceEntry.RematchFromEntryId;
|
||||
}
|
||||
|
||||
return displayPlayOrder;
|
||||
}
|
||||
|
||||
var entryIds = entries.Select(x => x.Id).ToList();
|
||||
var sheets = await _sheetRepository.AsQueryable()
|
||||
.Where(x => entryIds.Contains(x.SessionEntryId) && x.JudgeAssignmentId == assignment.Id).ToListAsync();
|
||||
@ -320,6 +347,9 @@ public class JudgeScoringController : IDynamicApiController
|
||||
SessionEntryId = entry.Id,
|
||||
EntryNo = entry.EntryNo,
|
||||
PlayOrder = entry.PlayOrder,
|
||||
SessionOrder = entry.SourceType == 1
|
||||
? GetImportedSessionOrder(session.SessionName, sessionArrangementOrder)
|
||||
: BuildEntrySessionOrder(sessionArrangementOrder, GetDisplayPlayOrder(entry)),
|
||||
ScheduleOrder = entry.SourceType == 1
|
||||
? entry.Id
|
||||
: BuildArrangementScheduleOrder(
|
||||
@ -1426,16 +1456,37 @@ public class JudgeScoringController : IDynamicApiController
|
||||
int venueOrder,
|
||||
int playOrder)
|
||||
{
|
||||
var safePlayOrder = Math.Max(playOrder, 1);
|
||||
var taskSessionOrder = sessionArrangementOrder > 0 && sessionArrangementOrder < int.MaxValue
|
||||
? sessionArrangementOrder + safePlayOrder - 1
|
||||
: safePlayOrder;
|
||||
var taskSessionOrder = BuildEntrySessionOrder(sessionArrangementOrder, playOrder);
|
||||
|
||||
return (long)Math.Max(projectOrder, 1) * 1_000_000_000_000L
|
||||
+ (long)taskSessionOrder * 1_000_000L
|
||||
+ Math.Max(venueOrder, 1);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取自动编排出场记录的实际场次号。
|
||||
/// </summary>
|
||||
private static int BuildEntrySessionOrder(int sessionArrangementOrder, int playOrder)
|
||||
{
|
||||
var safePlayOrder = Math.Max(playOrder, 1);
|
||||
return sessionArrangementOrder > 0 && sessionArrangementOrder < int.MaxValue
|
||||
? sessionArrangementOrder + safePlayOrder - 1
|
||||
: safePlayOrder;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 秩序册导入以场次名称作为业务场次号,无法解析时回退到编排序号。
|
||||
/// </summary>
|
||||
private static int GetImportedSessionOrder(string? sessionName, int fallback)
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(sessionName)) return fallback;
|
||||
var match = Regex.Match(sessionName, @"^\s*(?:第\s*)?(?<sequence>\d+)(?:\s*场)?\s*$",
|
||||
RegexOptions.CultureInvariant);
|
||||
return match.Success && int.TryParse(match.Groups["sequence"].Value, out var sequence) && sequence > 0
|
||||
? sequence
|
||||
: fallback;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 构建裁判端展示用的“场次-场地”,去除秩序册导入时写入场次名的项目和组别信息。
|
||||
/// </summary>
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user