namespace YD_Event.Application.Scoring.Dtos; /// /// 裁判端查询的当前场次赛事状态与操作权限。 /// public class JudgeEventStatusDto { /// /// 赛事ID。 /// public long EventId { get; set; } /// /// 场次ID。 /// public long SessionId { get; set; } /// /// 场次状态:0-草稿,10-就绪,20-检录中,30-进行中,40-暂停,50-待确认,60-已结束,90-已取消。 /// public int SessionStatus { get; set; } /// /// 场次状态名称。 /// public string SessionStatusName { get; set; } = string.Empty; /// /// 赛事阶段:0-赛前,1-赛中,2-赛后。 /// public int Phase { get; set; } /// /// 赛事阶段名称。 /// public string PhaseName { get; set; } = string.Empty; /// /// 是否允许评分。 /// public bool CanScore { get; set; } /// /// 是否允许修改裁判分配。 /// public bool CanModifyAssignment { get; set; } /// /// 当前状态不可操作时的提示信息;允许评分时为空。 /// public string? Message { get; set; } } /// /// 裁判端执裁场次 /// public class JudgeSessionDto { /// /// 场次ID /// public long SessionId { get; set; } /// /// 赛事ID /// public long EventId { get; set; } /// /// 赛事名称 /// public string EventName { get; set; } = string.Empty; /// /// 项目名称 /// public string ProjectName { get; set; } = string.Empty; /// /// 计分规则名称 /// public string RuleName { get; set; } = string.Empty; /// /// 场次名称 /// public string SessionName { get; set; } = string.Empty; /// /// 场地名称 /// public string VenueName { get; set; } = string.Empty; /// /// 组别名称(本场次多组别混合时为空) /// public string? GroupName { get; set; } /// /// 场次开始时间 /// public DateTime? StartTime { get; set; } /// /// 场次状态:0-草稿,10-就绪,20-检录中,30-进行中,40-暂停,50-待确认,60-已结束,90-已取消 /// public int SessionStatus { get; set; } /// /// 场次状态名称 /// public string SessionStatusName { get; set; } = string.Empty; /// /// 我的裁判席位编码 /// public string JudgeRole { get; set; } = string.Empty; /// /// 我的裁判类型编码 /// public string JudgeRoleType { get; set; } = string.Empty; /// /// 我的裁判类型名称 /// public string JudgeRoleName { get; set; } = string.Empty; /// /// 本场出场总数 /// public int EntryCount { get; set; } /// /// 我已提交评分的出场数 /// public int ScoredCount { get; set; } /// /// 场次在赛事编排中的顺序 /// public int ArrangementOrder { get; set; } } /// /// 裁判端出场记录 /// public class JudgeEntryDto { /// /// 出场记录ID /// public long SessionEntryId { get; set; } /// /// 出场编号 /// public string EntryNo { get; set; } = string.Empty; /// /// 出场顺序 /// public int PlayOrder { get; set; } /// /// 秩序册中的全局出场顺序;非秩序册数据为0 /// public long ScheduleOrder { get; set; } /// /// 参赛者/参赛队名称 /// public string ParticipantName { get; set; } = string.Empty; /// /// 组别名称 /// public string GroupName { get; set; } = string.Empty; /// /// 出场状态:0-待出场,10-已检录,20-已叫号,30-进行中,40-已完成,80-退赛,90-取消比赛资格 /// public int EntryStatus { get; set; } /// /// 是否为重赛出场 /// public bool IsRematch { get; set; } /// /// 我的评分状态:0-未评分,1-草稿,2-已提交,3-待修正 /// public int ScoreStatus { get; set; } /// /// 我的评分状态名称 /// public string ScoreStatusName { get; set; } = string.Empty; /// /// 我提交的得分(未提交时为空) /// public string? MyScore { get; set; } /// /// 我是否判定取消比赛资格 /// public bool IsDisqualified { get; set; } /// /// 我的评分单ID(未评分时为0) /// public long ScoreSheetId { get; set; } } /// /// 裁判端评分表表头,对应原型图上方的赛事信息区 /// public class JudgeSheetHeaderDto { /// /// 赛事名称 /// public string EventName { get; set; } = string.Empty; /// /// 项目名称 /// public string ProjectName { get; set; } = string.Empty; /// /// 计分规则名称 /// public string RuleName { get; set; } = string.Empty; /// /// 组别名称 /// public string GroupName { get; set; } = string.Empty; /// /// 场次-场地 /// public string SessionVenue { get; set; } = string.Empty; /// /// 出场编号 /// public string EntryNo { get; set; } = string.Empty; /// /// 参赛运动员姓名(集体项目为队名) /// public string ParticipantName { get; set; } = string.Empty; /// /// 参赛运动员名单 /// public List MemberNames { get; set; } = new(); /// /// 我的裁判席位编码 /// public string JudgeRole { get; set; } = string.Empty; /// /// 我的裁判类型编码 /// public string JudgeRoleType { get; set; } = string.Empty; /// /// 我的裁判类型名称 /// public string JudgeRoleName { get; set; } = string.Empty; /// /// 计分规则类型编码 /// public string RuleType { get; set; } = string.Empty; /// /// 总分计算方式:linear-各计分符号加减(规定赛),factor-按 D/P/Q/M 因子相乘(花样赛) /// public string TotalMode { get; set; } = string.Empty; /// /// 总分公式,如 T1 + T2 - T3、D × (1 + P) × Q × M /// public string Formula { get; set; } = string.Empty; /// /// 评分项适用范围:personal-个人项目,team-集体项目 /// public string Scope { get; set; } = string.Empty; /// /// 基准分(主裁扣分从该分值中扣除) /// public decimal BaseScore { get; set; } /// /// 分值保留小数位 /// public int ScoreDecimals { get; set; } } /// /// 裁判端评分项 /// public class JudgeScoreItemDto { /// /// 计分规则明细ID /// public long ScoreRuleItemId { get; set; } /// /// 评分项编码 /// public string ItemCode { get; set; } = string.Empty; /// /// 评分项名称 /// public string ItemName { get; set; } = string.Empty; /// /// 评分项类型:1-难度等级计数,2-规定元素计数,3-表现维度,4-扣分项,5-取消资格原因,6-规定赛评分项 /// public int ItemType { get; set; } /// /// 得分维度:0-不计入,1-难度分,2-表现分,3-规定分,4-扣分 /// public int ScoreDimension { get; set; } /// /// 录入方式:score-直接打分,count-按次数计数,reason-勾选原因 /// public string InputMode { get; set; } = string.Empty; /// /// 最小值 /// public decimal MinValue { get; set; } /// /// 最大值 /// public decimal MaxValue { get; set; } /// /// 录入步长 /// public decimal StepValue { get; set; } /// /// 单位分值(计数项每次的分值,如违例每项扣5分) /// public decimal? UnitValue { get; set; } /// /// 默认值 /// public decimal? DefaultValue { get; set; } /// /// 计数单位名称,如“次” /// public string? UnitLabel { get; set; } /// /// 评分说明 /// public string? Remark { get; set; } /// /// 是否必填 /// public bool IsRequired { get; set; } /// /// 是否为取消比赛资格原因项 /// public bool IsDisqualifyReason { get; set; } /// /// 是否由服务端联动生成。自动项(表现维度分、规定元素缺失数)只读展示,不接受录入。 /// public bool IsAutoGenerated { get; set; } /// /// 评分对象编码,两人车轮跳花样用 A、B 区分两名运动员,客户端据此分组展示 /// public string? SubjectCode { get; set; } /// /// 评分对象名称。表演赛一名难度裁判要按个人绳、车轮跳、交互绳、旅行跳(或长绳)分块评分, /// 客户端按此名称给每块加标题。 /// public string? SubjectName { get; set; } /// /// 表现维度编码,同一维度的加项、减项、自动减项与维度分共用一个编码,客户端据此把维度聚成一组 /// public string? DimensionCode { get; set; } /// /// 表现维度在单裁判加权分里的权重 /// public decimal? DimensionWeight { get; set; } /// /// 表现维度的基准分(规程为 12 分) /// public decimal? BaseValue { get; set; } /// /// 加减方向:1-每次计数使维度分 +1,-1-每次计数使维度分 -1,0-不参与维度分调整 /// public int AdjustSign { get; set; } /// /// 是否为失误计数项,客户端增减该项时需同步刷新五个维度的自动减分 /// public bool IsFailureCount { get; set; } /// /// 递增扣分序列,主裁失误按第 1 次 0.05、第 2 次 0.075、第 3 次起 0.1 累计 /// public List? StepDeductions { get; set; } /// /// 规定元素目标完成量(个人花样为 4,车轮跳花样为 16) /// public decimal? RequiredTarget { get; set; } /// /// 规定元素是否按类别计完成量。true 时该类别录入数量大于 0 即计一类(如表演赛), /// false 时按数量 × 单位分值折算(个人花样 3 级及以上按 1 计、2 级及以下按 0.5 计)。 /// public bool RequiredAsCategory { get; set; } /// /// 排序 /// public int Sort { get; set; } /// /// 我已录入的分值 /// public decimal? InputValue { get; set; } /// /// 我已录入的数量 /// public decimal? CountValue { get; set; } /// /// 本项小计 /// public decimal Subtotal { get; set; } } /// /// 裁判端评分表 /// public class JudgeScoreSheetOutput { /// 历史互动配合数据缺少等级时,提示重新核对录入,不能自动推断。 public string? RuleMigrationNotice { get; set; } /// /// 出场记录ID /// public long SessionEntryId { get; set; } /// /// 场次ID /// public long SessionId { get; set; } /// /// 评分任务ID /// public long JudgeTaskId { get; set; } /// /// 评分单ID(尚未保存过时为0) /// public long ScoreSheetId { get; set; } /// 评分单版本;未产生评分单时为下一待提交版本。 public int SheetVersion { get; set; } /// /// 评分单状态:0-草稿,10-已提交,20-已确认,30-已被修正,90-已作废 /// public int SheetStatus { get; set; } /// /// 是否可编辑(已提交且无批准的修正申请时不可编辑) /// public bool CanEdit { get; set; } /// /// 不可编辑的原因 /// public string? LockReason { get; set; } /// /// 是否处于成绩修正流程中 /// public bool IsCorrection { get; set; } /// /// 提交时用于去重的幂等键 /// public string IdempotencyKey { get; set; } = string.Empty; /// /// 表头信息 /// public JudgeSheetHeaderDto Header { get; set; } = new(); /// /// 评分项 /// public List Items { get; set; } = new(); /// /// 当前录入值的合计(服务端计算) /// public JudgeScorePreviewDto Preview { get; set; } = new(); } /// /// 评分合计预览 /// public class JudgeScorePreviewDto { /// /// 难度分 /// public decimal DifficultyScore { get; set; } /// /// 表现分(规定赛创意分) /// public decimal PerformanceScore { get; set; } /// /// 规定分(规定赛完成分) /// public decimal RequiredScore { get; set; } /// /// 扣分(规定赛主裁扣分) /// public decimal DeductionScore { get; set; } /// /// 本评分单合计得分 /// public decimal TotalScore { get; set; } /// /// 合计得分(按规则保留小数位后的展示值) /// public string TotalScoreText { get; set; } = string.Empty; /// /// 是否判定取消比赛资格 /// public bool IsDisqualified { get; set; } /// /// 取消比赛资格原因 /// public string? DisqualifyReasonName { get; set; } /// /// 规定元素完成量(3 级及以上按 1 计、2 级及以下按 0.5 计后的合计) /// public decimal RequiredCompletedCount { get; set; } /// /// 规定元素缺失量 = max(0, 目标数 - 完成量) /// public decimal RequiredMissingCount { get; set; } /// /// 花样赛的分步计算过程,客户端可原样展示预估分的推导明细 /// public List Steps { get; set; } = new(); } /// /// 评分单的一步计算过程 /// public class JudgeScoreStepDto { /// /// 步骤编码 /// public string Code { get; set; } = string.Empty; /// /// 步骤说明 /// public string Label { get; set; } = string.Empty; /// /// 计算式 /// public string Formula { get; set; } = string.Empty; /// /// 计算结果 /// public decimal Value { get; set; } } /// /// 单项评分录入 /// public class JudgeScoreItemInput { /// /// 评分项编码 /// public string ItemCode { get; set; } = null!; /// /// 录入分值(打分项) /// public decimal? InputValue { get; set; } /// /// 录入数量(计数项传次数,取消资格原因项传1表示勾选) /// public decimal? CountValue { get; set; } } /// /// 保存评分草稿 /// public class SaveJudgeScoreInput { /// /// 出场记录ID /// public long SessionEntryId { get; set; } /// /// 各项评分录入值 /// public List Items { get; set; } = new(); /// /// 主裁花样赛扣分系数(各扣分项合计值,不是最终得分系数 M) /// public decimal? DeductionCoefficient { get; set; } } /// /// 提交评分 /// public class SubmitJudgeScoreInput { /// /// 出场记录ID /// public long SessionEntryId { get; set; } /// /// 各项评分录入值 /// public List Items { get; set; } = new(); /// /// 主裁花样赛扣分系数(各扣分项合计值,不是最终得分系数 M) /// public decimal? DeductionCoefficient { get; set; } /// /// 幂等键,取评分表接口返回值。弱网重试时同一幂等键只会提交一次。 /// public string? IdempotencyKey { get; set; } /// /// 取消比赛资格备注 /// public string? DisqualifyRemark { get; set; } } /// /// 评分提交结果 /// public class SubmitJudgeScoreOutput { /// /// 评分单ID /// public long ScoreSheetId { get; set; } /// /// 是否为重复提交(幂等命中,未产生新评分单) /// public bool IsDuplicate { get; set; } /// /// 我提交的合计得分 /// public string MyScore { get; set; } = string.Empty; /// /// 本出场是否已全部裁判提交并算出成绩 /// public bool ResultCompleted { get; set; } /// /// 本出场成绩总分(未算出时为空) /// public string? TotalScore { get; set; } /// /// 各裁判类型的提交进度 /// public List Progress { get; set; } = new(); } /// /// 裁判类型的评分提交进度 /// public class JudgeRoleProgressDto { /// /// 裁判类型编码 /// public string RoleType { get; set; } = string.Empty; /// /// 裁判类型名称 /// public string RoleName { get; set; } = string.Empty; /// /// 计分符号,如 T1、T2、T3 /// public string Symbol { get; set; } = string.Empty; /// /// 应提交人数 /// public int ExpectedCount { get; set; } /// /// 已提交人数 /// public int SubmittedCount { get; set; } /// /// 未提交的裁判姓名 /// public List PendingJudges { get; set; } = new(); } /// /// 裁判端查看的出场成绩 /// public class JudgeEntryResultDto { /// /// 出场记录ID /// public long SessionEntryId { get; set; } /// /// 出场编号 /// public string EntryNo { get; set; } = string.Empty; /// /// 参赛者/参赛队名称 /// public string ParticipantName { get; set; } = string.Empty; /// /// 组别名称 /// public string GroupName { get; set; } = string.Empty; /// /// 名次,0 表示暂未排名 /// public int Rank { get; set; } /// /// 总分 /// public string TotalScore { get; set; } = string.Empty; /// /// 计分公式,如 T1 + T2 - T3 /// public string Formula { get; set; } = string.Empty; /// /// 是否已算出成绩 /// public bool IsCompleted { get; set; } /// /// 是否被取消比赛资格 /// public bool IsDisqualified { get; set; } /// /// 各计分符号的得分 /// public List Symbols { get; set; } = new(); /// /// 花样赛的乘法因子。规定赛为 null,花样赛按 R = D × (1 + P) × Q × M 输出各因子值。 /// public JudgeScoreFactorDto? Factors { get; set; } /// /// 各裁判类型的提交进度 /// public List Progress { get; set; } = new(); } /// /// 花样赛总分公式 R = D × (1 + P) × Q × M 的各因子值 /// public class JudgeScoreFactorDto { /// /// 难度因子 D /// public string Difficulty { get; set; } = string.Empty; /// /// 表现因子 P,按 (1 + P) 参与相乘 /// public string Performance { get; set; } = string.Empty; /// /// 规定元素因子 Q = max(0, 1 - 系数 × 缺失数),交互绳花样恒为 1 /// public string Required { get; set; } = string.Empty; /// /// 扣分因子 M = max(0, 1 - 主裁扣分合计) /// public string Deduction { get; set; } = string.Empty; } /// /// 单个计分符号的得分 /// public class JudgeSymbolScoreDto { /// /// 计分符号,如 T1 /// public string Symbol { get; set; } = string.Empty; /// /// 计分名称,如创意分 /// public string Label { get; set; } = string.Empty; /// /// 参与总分的符号:1-加分,-1-减分 /// public int Sign { get; set; } /// /// 分值 /// public string Value { get; set; } = string.Empty; /// /// 参与聚合的各裁判得分 /// public List Judges { get; set; } = new(); } /// /// 参与聚合的单个裁判得分 /// public class JudgeSymbolJudgeDto { /// 评分单ID。 public long ScoreSheetId { get; set; } /// /// 裁判席位编码 /// public string JudgeRole { get; set; } = string.Empty; /// /// 裁判姓名 /// public string JudgeName { get; set; } = string.Empty; /// /// 该裁判的得分 /// public string Value { get; set; } = string.Empty; /// 该评分单当前记录画板地址。 public string? AnnotationUrl { get; set; } } /// /// 可申请成绩修正的评分单 /// public class JudgeCorrectionCandidateDto { /// 最近一次修正流程ID。 public long? CorrectionId { get; set; } /// /// 评分单ID /// public long ScoreSheetId { get; set; } /// /// 出场记录ID /// public long SessionEntryId { get; set; } /// /// 出场编号 /// public string EntryNo { get; set; } = string.Empty; /// /// 参赛者/参赛队名称 /// public string ParticipantName { get; set; } = string.Empty; /// /// 我提交的得分 /// public string MyScore { get; set; } = string.Empty; /// /// 提交时间 /// public DateTime? SubmittedTime { get; set; } /// /// 修正申请状态:-1-未申请,0-已申请,10-已批准,20-已拒绝,30-裁判修改中,40-已完成,90-已取消 /// public int CorrectionStatus { get; set; } /// /// 修正申请状态名称 /// public string CorrectionStatusName { get; set; } = string.Empty; /// 修正申请原因。 public string? ApplyReason { get; set; } /// 审批意见。 public string? ApproveRemark { get; set; } /// /// 是否可以申请修正 /// public bool CanApply { get; set; } } /// /// 申请成绩修正 /// public class ApplyJudgeCorrectionInput { /// /// 评分单ID /// public long ScoreSheetId { get; set; } /// /// 申请修正原因 /// public string ApplyReason { get; set; } = null!; } /// /// 裁判端消息 /// public class JudgeMessageDto { /// /// 消息ID /// public long Id { get; set; } /// /// 赛事ID /// public long EventId { get; set; } /// /// 消息类型:1-成绩修正提醒,2-评分任务下发,3-重赛通知,9-系统通知 /// public int MessageType { get; set; } /// /// 消息标题 /// public string Title { get; set; } = string.Empty; /// /// 消息内容 /// public string Content { get; set; } = string.Empty; /// /// 关联业务类型 /// public string? RelationType { get; set; } /// /// 关联业务ID /// public long? RelationId { get; set; } /// 关联场次ID。 public long? SessionId { get; set; } /// 关联出场记录ID。 public long? SessionEntryId { get; set; } /// 关联评分单ID。 public long? ScoreSheetId { get; set; } /// /// 是否已读 /// public bool IsRead { get; set; } /// /// 创建时间 /// public DateTime CreatedTime { get; set; } } /// /// 标记消息已读 /// public class ReadJudgeMessageInput { /// /// 消息ID,为空表示全部标记已读 /// public List MessageIds { get; set; } = new(); } /// 记录画板 PNG 上传输入。 public class UploadJudgeScoreAnnotationInput { public long ScoreSheetId { get; set; } public string IdempotencyKey { get; set; } = null!; public IFormFile File { get; set; } = null!; } /// 记录画板附件。 public class JudgeScoreAttachmentDto { public long Id { get; set; } public long ScoreSheetId { get; set; } public string AttachmentType { get; set; } = string.Empty; public string FileName { get; set; } = string.Empty; public string FileUrl { get; set; } = string.Empty; public long FileSize { get; set; } public DateTime UploadedTime { get; set; } }