1011 lines
25 KiB
C#
1011 lines
25 KiB
C#
namespace YD_Event.Application.Scoring.Dtos;
|
||
|
||
/// <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 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 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)
|
||
/// </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>
|
||
/// 出场记录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>
|
||
/// 提交评分
|
||
/// </summary>
|
||
public class SubmitJudgeScoreInput
|
||
{
|
||
/// <summary>
|
||
/// 出场记录ID
|
||
/// </summary>
|
||
public long SessionEntryId { get; set; }
|
||
|
||
/// <summary>
|
||
/// 各项评分录入值
|
||
/// </summary>
|
||
public List<JudgeScoreItemInput> Items { get; set; } = new();
|
||
|
||
/// <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; }
|
||
}
|