From 482e2341c934815aa234b609f3cdf18538ce28db Mon Sep 17 00:00:00 2001 From: ltx <1006158920@qq.com> Date: Wed, 23 Sep 2026 15:18:13 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E6=88=90=E7=BB=A9?= =?UTF-8?q?=E5=B7=A5=E4=BD=9C=E5=8F=B0=E8=BF=90=E8=A1=8C=E4=B8=8E=E7=BC=96?= =?UTF-8?q?=E6=8E=92=E9=A1=BA=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Judge/JudgeScoringController.cs | 2 +- .../Workbench/Dtos/WorkbenchDtos.cs | 10 ++++++ .../Workbench/WorkbenchController.cs | 32 +++++++++++++++++++ 3 files changed, 43 insertions(+), 1 deletion(-) 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