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 class JudgeEntryDto
{
///
/// 出场记录ID
///
public long SessionEntryId { get; set; }
///
/// 出场编号
///
public string EntryNo { get; set; } = string.Empty;
///
/// 出场顺序
///
public int PlayOrder { 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)
///
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
{
///
/// 出场记录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; }
///
/// 评分单状态: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();
}
///
/// 提交评分
///
public class SubmitJudgeScoreInput
{
///
/// 出场记录ID
///
public long SessionEntryId { get; set; }
///
/// 各项评分录入值
///
public List Items { get; set; } = new();
///
/// 幂等键,取评分表接口返回值。弱网重试时同一幂等键只会提交一次。
///
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
{
///
/// 裁判席位编码
///
public string JudgeRole { get; set; } = string.Empty;
///
/// 裁判姓名
///
public string JudgeName { get; set; } = string.Empty;
///
/// 该裁判的得分
///
public string Value { get; set; } = string.Empty;
}
///
/// 可申请成绩修正的评分单
///
public class JudgeCorrectionCandidateDto
{
///
/// 评分单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 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; }
///
/// 是否已读
///
public bool IsRead { get; set; }
///
/// 创建时间
///
public DateTime CreatedTime { get; set; }
}
///
/// 标记消息已读
///
public class ReadJudgeMessageInput
{
///
/// 消息ID,为空表示全部标记已读
///
public List MessageIds { get; set; } = new();
}