ltx f12afe8a36 feat: 增加裁判任务分页与下一场查询接口
批量查询并稳定排序裁判任务,返回分页及各页场次范围;
增加按出场 ID 定位任务和查询当前任务之后下一条未评分任务的接口,优化场次摘要计数。
2026-10-28 14:48:53 +08:00

1116 lines
28 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

namespace YD_Event.Application.Scoring.Dtos;
/// <summary>裁判任务分页结果;场次范围使用秩序册中的实际场次号。</summary>
public class JudgeTaskPageDto
{
public long EventId { get; set; }
public int Page { get; set; }
public int PageSize { get; set; }
public int TotalCount { get; set; }
public int TotalPages { get; set; }
public List<JudgeTaskPageRangeDto> PageRanges { get; set; } = new();
public List<JudgeTaskDto> Items { get; set; } = new();
}
public class JudgeTaskPageRangeDto
{
public int Page { get; set; }
public int FirstSessionOrder { get; set; }
public int LastSessionOrder { get; set; }
}
/// <summary>仅含当前裁判可访问的出场信息,不含平台最终成绩。</summary>
public class JudgeTaskDto
{
public int Page { get; set; }
public JudgeSessionDto Session { get; set; } = new();
public JudgeEntryDto Entry { get; set; } = new();
}
/// <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; }
}
/// <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; }
/// <summary>
/// 场次在赛事编排中的顺序
/// </summary>
public int ArrangementOrder { get; set; }
}
/// <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; }
/// <summary>
/// 平板端展示的业务场次号;重赛沿用来源出场记录的场次号
/// </summary>
public int SessionOrder { get; set; }
/// <summary>
/// 秩序册中的全局出场顺序;非秩序册数据为0
/// </summary>
public long ScheduleOrder { get; set; }
/// <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;
/// <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;
/// <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; }
/// <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,车轮跳花样为 16)
/// </summary>
public decimal? RequiredTarget { get; set; }
/// <summary>
/// 规定元素是否按类别计完成量。true 时该类别录入数量大于 0 即计一类(如表演赛),
/// false 时按数量 × 单位分值折算(个人花样 3 级及以上按 1 计、2 级及以下按 0.5 计)。
/// </summary>
public bool RequiredAsCategory { get; set; }
/// <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>历史互动配合数据缺少等级时,提示重新核对录入,不能自动推断。</summary>
public string? RuleMigrationNotice { get; set; }
/// <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; }
/// <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; }
/// <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; }
}
/// <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();
/// <summary>
/// 主裁花样赛扣分系数(各扣分项合计值,不是最终得分系数 M)
/// </summary>
public decimal? DeductionCoefficient { get; set; }
}
/// <summary>
/// 提交评分
/// </summary>
public class SubmitJudgeScoreInput
{
/// <summary>
/// 出场记录ID
/// </summary>
public long SessionEntryId { get; set; }
/// <summary>
/// 各项评分录入值
/// </summary>
public List<JudgeScoreItemInput> Items { get; set; } = new();
/// <summary>
/// 主裁花样赛扣分系数(各扣分项合计值,不是最终得分系数 M)
/// </summary>
public decimal? DeductionCoefficient { get; set; }
/// <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();
/// <summary>
/// 花样赛的乘法因子。规定赛为 null,花样赛按 R = D × (1 + P) × Q × M 输出各因子值。
/// </summary>
public JudgeScoreFactorDto? Factors { get; set; }
/// <summary>
/// 各裁判类型的提交进度
/// </summary>
public List<JudgeRoleProgressDto> Progress { get; set; } = new();
}
/// <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;
}
/// <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; }
/// <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; }
}
/// <summary>
/// 可申请成绩修正的评分单
/// </summary>
public class JudgeCorrectionCandidateDto
{
/// <summary>最近一次修正流程ID。</summary>
public long? CorrectionId { get; set; }
/// <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; }
/// <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; }
/// <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; }
}