fix: 修复成绩工作台运行与编排顺序

This commit is contained in:
ltx 2026-09-23 15:18:13 +08:00
parent 48ae547de9
commit 482e2341c9
3 changed files with 43 additions and 1 deletions

View File

@ -763,7 +763,7 @@ public class JudgeScoringController : IDynamicApiController
{
var referee = await EnsureRefereeAsync();
var userId = _authManager.UserId;
var messages = await _messageRepository.AsQueryable()
var messages = (await _messageRepository.AsQueryable()
.Where(x => x.RefereeId == referee.Id || x.ReceiverUserId == userId)
.WhereIF(onlyUnread == true, x => !x.IsRead)
.ToListAsync())

View File

@ -230,6 +230,16 @@ public class WorkbenchEntryDetailDto
/// </summary>
public int PlayOrder { get; set; }
/// <summary>
/// 该运动员在秩序册预览中的实际场次号
/// </summary>
public int SessionOrder { get; set; }
/// <summary>
/// 秩序册预览/赛事编排中的全局出场顺序
/// </summary>
public long ScheduleOrder { get; set; }
/// <summary>
/// 参赛者姓名
/// </summary>

View File

@ -290,6 +290,9 @@ public class WorkbenchController : IDynamicApiController
?? throw Oops.Bah("场次不存在");
var scoreRule = await _scoreRuleRepository.GetByIdAsync(session.ScoreRuleId);
var roleSlots = JudgeRoleSchemaService.ParseSlots(scoreRule?.JudgeRoleSchemaJson);
var venue = await _venueRepository.GetByIdAsync(session.VenueId);
var venueOrder = venue?.Sort > 0 ? venue.Sort : 1;
var sessionArrangementOrder = GetArrangementSequence(session.SessionNo);
var query = _entryRepository.AsQueryable()
.Where(e => !e.DeleteMark && e.SessionId == sessionId);
@ -311,6 +314,7 @@ public class WorkbenchController : IDynamicApiController
e.Id,
e.EntryNo,
e.PlayOrder,
e.SourceType,
e.ParticipantName,
e.TeamName,
e.GroupName,
@ -474,6 +478,11 @@ public class WorkbenchController : IDynamicApiController
SessionEntryId = e.Id,
EntryNo = e.EntryNo,
PlayOrder = e.PlayOrder,
SessionOrder = BuildEntrySessionOrder(sessionArrangementOrder, e.PlayOrder),
// 导入数据按预览行生成雪花 ID;自动编排数据按场次起始序号、出场序号和场地序号还原。
ScheduleOrder = e.SourceType == 1
? e.Id
: BuildEntryScheduleOrder(sessionArrangementOrder, venueOrder, e.PlayOrder),
ParticipantName = e.ParticipantName,
TeamName = e.TeamName,
UnitName = result?.MerchantCertificationId is long merchantId
@ -2025,6 +2034,29 @@ public class WorkbenchController : IDynamicApiController
: int.MaxValue;
}
/// <summary>
/// 将自动编排场次中的出场记录还原为秩序册预览的全局顺序。
/// 同一组别、同一场地的多条记录共用一个场次,因此需要在场次起始序号上叠加出场序号。
/// </summary>
private static long BuildEntryScheduleOrder(int sessionArrangementOrder, int venueOrder, int playOrder)
{
var taskSessionOrder = BuildEntrySessionOrder(sessionArrangementOrder, playOrder);
return (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;
}
private static string GetSessionStatusName(int status)
{
return status switch