diff --git a/YD_Event.Application/Judge/JudgeScoringController.cs b/YD_Event.Application/Judge/JudgeScoringController.cs index 0c5c827..8c106a9 100644 --- a/YD_Event.Application/Judge/JudgeScoringController.cs +++ b/YD_Event.Application/Judge/JudgeScoringController.cs @@ -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()) diff --git a/YD_Event.Application/Workbench/Dtos/WorkbenchDtos.cs b/YD_Event.Application/Workbench/Dtos/WorkbenchDtos.cs index e9b76be..540be7d 100644 --- a/YD_Event.Application/Workbench/Dtos/WorkbenchDtos.cs +++ b/YD_Event.Application/Workbench/Dtos/WorkbenchDtos.cs @@ -230,6 +230,16 @@ public class WorkbenchEntryDetailDto /// public int PlayOrder { get; set; } + /// + /// 该运动员在秩序册预览中的实际场次号 + /// + public int SessionOrder { get; set; } + + /// + /// 秩序册预览/赛事编排中的全局出场顺序 + /// + public long ScheduleOrder { get; set; } + /// /// 参赛者姓名 /// diff --git a/YD_Event.Application/Workbench/WorkbenchController.cs b/YD_Event.Application/Workbench/WorkbenchController.cs index 29a6065..e40c5c6 100644 --- a/YD_Event.Application/Workbench/WorkbenchController.cs +++ b/YD_Event.Application/Workbench/WorkbenchController.cs @@ -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; } + /// + /// 将自动编排场次中的出场记录还原为秩序册预览的全局顺序。 + /// 同一组别、同一场地的多条记录共用一个场次,因此需要在场次起始序号上叠加出场序号。 + /// + 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); + } + + /// + /// 获取单条出场记录在秩序册中的实际场次号。 + /// 花样项目的场次号保存的是本场起始序号;速度项目没有起始序号时按出场顺序计算。 + /// + 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