namespace YD_Event.Application.Client.Dtos; public class ScoreEventDto { public long Id { get; set; } public string Name { get; set; } = string.Empty; /// 赛事状态:3-比赛中,4-已结束。成绩查询只开放这两种状态。 public int EventStatus { get; set; } public string EventStatusText { get; set; } = string.Empty; } public class ScoreQueryInput { public long? EventId { get; set; } /// 项目筛选,对应基础项目 Project.Id。 public long? ProjectId { get; set; } /// 组别筛选,成绩表按组别名称存储。 public string? GroupName { get; set; } public string? Keyword { get; set; } } /// 成绩查询页的项目、组别下拉数据。 public class ScoreFilterOptionsDto { public long EventId { get; set; } public string EventName { get; set; } = string.Empty; public List Projects { get; set; } = new(); public List GroupNames { get; set; } = new(); } public class ScoreProjectFilterDto { public long ProjectId { get; set; } public string ProjectName { get; set; } = string.Empty; public List GroupNames { get; set; } = new(); } public class JudgeScoreDto { public string Label { get; set; } = string.Empty; public string Score { get; set; } = string.Empty; } public class ClientScoreDto { public long Id { get; set; } public long EventId { get; set; } public string EventName { get; set; } = string.Empty; public string AthleteName { get; set; } = string.Empty; public string AthleteNo { get; set; } = string.Empty; public long ProjectId { get; set; } public string Category { get; set; } = string.Empty; public string GroupName { get; set; } = string.Empty; public string RoundName { get; set; } = "正式成绩"; public int Rank { get; set; } public string TotalScore { get; set; } = string.Empty; /// 难度分。规定赛没有难度分,值为 0 时不进入 JudgeScores。 public decimal DifficultyScore { get; set; } /// 表现分。 public decimal PerformanceScore { get; set; } /// 规定分。 public decimal RequiredScore { get; set; } /// 扣分。 public decimal DeductionScore { get; set; } public bool IsDisqualified { get; set; } public string Status { get; set; } = "成绩有效"; public List JudgeScores { get; set; } = new(); } public class ScoreQueryOutput { public List Rows { get; set; } = new(); public int Total { get; set; } /// 成绩数据的最后更新时间,页面显示“数据更新:yyyy-MM-dd HH:mm:ss”。 public DateTime? DataUpdatedTime { get; set; } public string DataUpdatedText { get; set; } = string.Empty; /// 实时排名提示,成绩确认前均为参考值。 public string Notice { get; set; } = "本排名实时更新,非最终成绩,仅供参考。"; } public class RefereeApplyInput { [Required(ErrorMessage = "赛事ID不能为空")] public long EventId { get; set; } } /// 裁判认证提交参数,对应小程序“裁判认证”页面。 public class RefereeProfileSubmitInput { [Required(ErrorMessage = "姓名不能为空"), StringLength(64)] public string Name { get; set; } = string.Empty; /// 手机号。为空时取当前登录账号手机号。 [RegularExpression(@"^1[3-9]\d{9}$", ErrorMessage = "手机号格式不正确")] public string? Mobile { get; set; } /// 短信验证码。更换手机号时必填。 public string? VerificationCode { get; set; } [Required(ErrorMessage = "请选择地区")] public string ProvinceCode { get; set; } = string.Empty; [Required(ErrorMessage = "请选择地区")] public string ProvinceName { get; set; } = string.Empty; [Required(ErrorMessage = "请选择地区")] public string CityCode { get; set; } = string.Empty; [Required(ErrorMessage = "请选择地区")] public string CityName { get; set; } = string.Empty; [Required(ErrorMessage = "请选择地区")] public string DistrictCode { get; set; } = string.Empty; [Required(ErrorMessage = "请选择地区")] public string DistrictName { get; set; } = string.Empty; [Required(ErrorMessage = "请选择裁判级别")] public RefereeLevel Level { get; set; } [Required(ErrorMessage = "请上传裁判证件")] public string CertificateUrl { get; set; } = string.Empty; /// 可执裁角色,位标记多选。 [Range(1, int.MaxValue, ErrorMessage = "至少选择一个裁判角色")] public RefereeRole Roles { get; set; } } public class RefereeProfileDto { public long Id { get; set; } public string Name { get; set; } = string.Empty; public string Mobile { get; set; } = string.Empty; public string ProvinceCode { get; set; } = string.Empty; public string ProvinceName { get; set; } = string.Empty; public string CityCode { get; set; } = string.Empty; public string CityName { get; set; } = string.Empty; public string DistrictCode { get; set; } = string.Empty; public string DistrictName { get; set; } = string.Empty; public string RegionName { get; set; } = string.Empty; public RefereeLevel Level { get; set; } public string LevelName { get; set; } = string.Empty; public string CertificateUrl { get; set; } = string.Empty; public RefereeRole Roles { get; set; } public List RoleValues { get; set; } = new(); public List RoleNames { get; set; } = new(); public AuditStatus AuditStatus { get; set; } public string AuditStatusText { get; set; } = string.Empty; public string? AuditRemark { get; set; } /// 审核通过后才能报名执裁。 public bool CanApply { get; set; } public DateTime CreatedTime { get; set; } } /// 裁判认证页面的角色、级别下拉数据。 public class RefereeProfileOptionsDto { public List Levels { get; set; } = new(); public List Roles { get; set; } = new(); } public class RefereeEnumOptionDto { public int Value { get; set; } public string Label { get; set; } = string.Empty; } /// 赛事裁判报名名额状态,对应原型“裁判名额未满/已满”提示。 public class RefereeQuotaDto { public long EventId { get; set; } public string EventName { get; set; } = string.Empty; /// 名额上限,0 表示不限名额。 public int Limit { get; set; } public int Applied { get; set; } public int Remaining { get; set; } public bool IsFull { get; set; } /// 当前账号是否已报名该赛事执裁。 public bool Applied4Me { get; set; } public bool CanApply { get; set; } public string Message { get; set; } = string.Empty; } public class RefereeApplicationDto { public long Id { get; set; } public long ApplicationId { get; set; } public long EventId { get; set; } public string EventName { get; set; } = string.Empty; public string? CoverImage { get; set; } public string? Address { get; set; } public int EventStatus { get; set; } public int ApplicationStatus { get; set; } public string ApplicationStatusText { get; set; } = string.Empty; public DateTime AppliedAt { get; set; } public DateTime MatchStartTime { get; set; } public DateTime MatchEndTime { get; set; } public string MatchStartText => MatchStartTime.ToString("yyyy-MM-dd HH:mm"); public string MatchEndText => MatchEndTime.ToString("yyyy-MM-dd HH:mm"); } public class RefereeApplicationListOutput { public List Rows { get; set; } = new(); public int Total { get; set; } } public class CheckinAthleteDto { public long Id { get; set; } public long UserId { get; set; } public string BibNo { get; set; } = string.Empty; public string Name { get; set; } = string.Empty; public string TeamName { get; set; } = string.Empty; public bool Checked { get; set; } public bool PreviousPassed { get; set; } = true; public bool CanCheck { get; set; } = true; public string LockReason { get; set; } = string.Empty; public string OrderBookSessionName { get; set; } = string.Empty; } public class CheckinContextDto { public long TaskId { get; set; } public long EventId { get; set; } public string EventName { get; set; } = string.Empty; public string Venue { get; set; } = string.Empty; public int TotalCheckins { get; set; } public int CurrentCheckinNo { get; set; } public string CurrentCheckinName { get; set; } = string.Empty; public int TotalSessions { get; set; } public int CurrentSessionOrder { get; set; } public string CurrentSessionKey { get; set; } = string.Empty; public string CurrentSessionName { get; set; } = string.Empty; public string CurrentSessionVenue { get; set; } = string.Empty; public string? NextSessionName { get; set; } public List Sessions { get; set; } = new(); public long SelectedEventProjectId { get; set; } public long SelectedGroupId { get; set; } public List Projects { get; set; } = new(); public List Units { get; set; } = new(); public List PendingUnits { get; set; } = new(); public List CheckedUnits { get; set; } = new(); public List LockedUnits { get; set; } = new(); // 以下字段保留给旧版小程序兼容,值映射自秩序册场次。 public int TotalRounds { get; set; } public int CurrentRound { get; set; } public string RoundName { get; set; } = string.Empty; public long? CurrentGroupId { get; set; } public string CurrentGroupName { get; set; } = string.Empty; public int GroupOrder { get; set; } public int TotalGroups { get; set; } public string? NextGroupName { get; set; } public List Rounds { get; set; } = new(); public List Athletes { get; set; } = new(); public List PendingAthletes { get; set; } = new(); public List CheckedAthletes { get; set; } = new(); public List LockedAthletes { get; set; } = new(); } public class UpdateCheckinStatusInput { [Required(ErrorMessage = "秩序册列标识不能为空")] public string UnitKey { get; set; } = string.Empty; public long EventProjectId { get; set; } public long GroupId { get; set; } public bool Checked { get; set; } } public class CheckinOrderBookUnitStatusDto : CheckinOrderBookUnitDto { public bool Checked { get; set; } public bool PreviousPassed { get; set; } = true; public bool CanCheck { get; set; } = true; public string LockReason { get; set; } = string.Empty; /// 是否已上场;三检通过即视为上场。 public bool OnStage { get; set; } } /// 检录员开始检录并通知报名人员的入参。 public class StartCheckinInput { [Required(ErrorMessage = "赛事项目ID不能为空")] public long EventProjectId { get; set; } [Required(ErrorMessage = "参赛组别ID不能为空")] public long GroupId { get; set; } } /// 开始检录后的通知结果。 public class StartCheckinOutput { public long TaskId { get; set; } public long EventProjectId { get; set; } public string ProjectName { get; set; } = string.Empty; public long GroupId { get; set; } public string GroupName { get; set; } = string.Empty; /// 本次通知覆盖的秩序册列数量。 public int UnitCount { get; set; } /// 应通知人数。 public int NoticeTotal { get; set; } /// 短信通知成功人数。 public int SmsSuccessCount { get; set; } /// 短信通知失败人数(手机号缺失或发送异常)。 public int SmsFailedCount { get; set; } public string Message { get; set; } = string.Empty; public CheckinContextDto Context { get; set; } = new(); } /// 扫码检录入参;扫码内容为运动员号码布编号或报名人员ID。 public class ScanCheckinInput { [Required(ErrorMessage = "扫码内容不能为空")] public string Code { get; set; } = string.Empty; public long? EventProjectId { get; set; } public long? GroupId { get; set; } } /// 扫码检录结果。 public class ScanCheckinOutput { public bool Success { get; set; } public string Message { get; set; } = string.Empty; public string UnitKey { get; set; } = string.Empty; public string ProjectName { get; set; } = string.Empty; public string GroupName { get; set; } = string.Empty; public string UnitName { get; set; } = string.Empty; public string AthleteName { get; set; } = string.Empty; public string BibNo { get; set; } = string.Empty; public CheckinContextDto? Context { get; set; } } /// 标记秩序册列上场的入参;仅三检检录员可操作。 public class CheckinOnStageInput { [Required(ErrorMessage = "秩序册列标识不能为空")] public string UnitKey { get; set; } = string.Empty; public long EventProjectId { get; set; } public long GroupId { get; set; } } /// 面向运动员、教练的检录进度总览。 public class CheckinProgressOutput { public long EventId { get; set; } public string EventName { get; set; } = string.Empty; /// 服务端当前时间,供小程序顶部时间展示。 public DateTime ServerTime { get; set; } public string ServerTimeText { get; set; } = string.Empty; public string WeekDayText { get; set; } = string.Empty; /// 当前检录项目(检录中的项目组别),无进行中项目时为空。 public CheckinProgressStageDto? CurrentCheckin { get; set; } /// 当前正在比赛的项目组别(三检已上场的最新一列)。 public CheckinProgressStageDto? CurrentCompeting { get; set; } /// 赛事检录顺序,按秩序册顺序输出三态。 public List Stages { get; set; } = new(); /// 我(或我关联的运动员)在本赛事的报名检录明细。 public List Mine { get; set; } = new(); } /// 检录进度中的一个项目组别阶段。 public class CheckinProgressStageDto { public long EventProjectId { get; set; } public long? GroupId { get; set; } public string ProjectName { get; set; } = string.Empty; public string GroupName { get; set; } = string.Empty; /// 项目-组别拼接名称,用于页面直接展示。 public string DisplayName { get; set; } = string.Empty; public int Order { get; set; } /// 阶段状态:1-检录中,2-即将开始,3-等待中,4-已完成。 public int StageStatus { get; set; } public string StageStatusText { get; set; } = string.Empty; public int TotalUnits { get; set; } public int CheckedUnits { get; set; } public int ProgressPercent { get; set; } /// 该阶段正在比赛的队伍名称。 public string TeamName { get; set; } = string.Empty; /// 该阶段正在比赛的队员名称列表。 public List AthleteNames { get; set; } = new(); } /// 我的检录明细卡片。 public class CheckinProgressMineDto { public string UnitKey { get; set; } = string.Empty; public long EventProjectId { get; set; } public long? GroupId { get; set; } public string ProjectName { get; set; } = string.Empty; public string GroupName { get; set; } = string.Empty; public string DisplayName { get; set; } = string.Empty; /// 运动员姓名列表;教练查看时为其带训报名人员。 public List AthleteNames { get; set; } = new(); public string TeamName { get; set; } = string.Empty; public string UnitName { get; set; } = string.Empty; public int SessionIndex { get; set; } public string VenueName { get; set; } = string.Empty; /// 我的检录状态:0-等待中,1-检录中,2-已检录,3-已上场。 public int CheckinStatus { get; set; } public string CheckinStatusText { get; set; } = string.Empty; /// 各检次通过情况明细。 public List Rounds { get; set; } = new(); /// 页面提示,例如“请前往检录口”。 public string Notice { get; set; } = string.Empty; } /// 单个检次的通过情况。 public class CheckinProgressRoundDto { public int CheckinNo { get; set; } public string CheckinName { get; set; } = string.Empty; public bool Passed { get; set; } public DateTime? CheckedTime { get; set; } } /// 检录投屏数据。 public class CheckinScreenCastOutput { public long EventId { get; set; } public string EventName { get; set; } = string.Empty; public DateTime ServerTime { get; set; } public string ServerTimeText { get; set; } = string.Empty; public string WeekDayText { get; set; } = string.Empty; public CheckinProgressStageDto? CurrentCheckin { get; set; } public CheckinProgressStageDto? CurrentCompeting { get; set; } public List Stages { get; set; } = new(); /// 当前检录项目下待上场的队伍明细,供大屏滚动展示。 public List Units { get; set; } = new(); } /// 投屏中的一列检录对象。 public class CheckinScreenCastUnitDto { public string UnitKey { get; set; } = string.Empty; public int Order { get; set; } public int SessionIndex { get; set; } public string VenueName { get; set; } = string.Empty; public string ProjectName { get; set; } = string.Empty; public string GroupName { get; set; } = string.Empty; public string TeamName { get; set; } = string.Empty; public string UnitName { get; set; } = string.Empty; public List AthleteNames { get; set; } = new(); public int CheckinStatus { get; set; } public string CheckinStatusText { get; set; } = string.Empty; }