1082 lines
27 KiB
C#
Raw Normal View History

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