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