2026-10-10 09:04:52 +08:00

365 lines
8.7 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.

using YD_Event.Application.Common.Excel;
namespace YD_Event.Application.OrderBook.Dtos;
/// <summary>
/// 秩序册「出场秩序」工作表行模型
/// </summary>
public class OrderBookEntryRow : IExcelRowLocation
{
/// <summary>工作表实际行号,不对应Excel列。</summary>
public int ExcelRowNumber { get; set; }
/// <summary>
/// 项目名称
/// </summary>
[ExcelHeader("项目名称*")]
public string? ProjectName { get; set; }
/// <summary>
/// 计分规则名称
/// </summary>
[ExcelHeader("计分规则*")]
public string? ScoreRuleName { get; set; }
/// <summary>
/// 组别名称
/// </summary>
[ExcelHeader("组别名称*")]
public string? GroupName { get; set; }
/// <summary>
/// 运动员姓名;多人项目可使用顿号或逗号分隔
/// </summary>
[ExcelHeader("姓名*")]
public string? ParticipantName { get; set; }
/// <summary>
/// 队伍名称(可空)
/// </summary>
[ExcelHeader("队伍名称")]
public string? TeamName { get; set; }
/// <summary>
/// 所属单位(可空)
/// </summary>
[ExcelHeader("单位")]
public string? UnitName { get; set; }
/// <summary>
/// 场次名称
/// </summary>
[ExcelHeader("场次*")]
public string? SessionName { get; set; }
/// <summary>
/// 场地名称
/// </summary>
[ExcelHeader("场地*")]
public string? VenueName { get; set; }
}
/// <summary>
/// 秩序册「裁判名单」工作表行模型
/// </summary>
public class OrderBookRefereeRow : IExcelRowLocation
{
/// <summary>工作表实际行号,不对应Excel列。</summary>
public int ExcelRowNumber { get; set; }
/// <summary>
/// 序号(仅便于人工核对)
/// </summary>
[ExcelHeader("序号")]
public string? Seq { get; set; }
/// <summary>
/// 裁判姓名(必填)
/// </summary>
[ExcelHeader("姓名*")]
public string? Name { get; set; }
/// <summary>
/// 手机号(必填,用于匹配/创建裁判档案及打分账号)
/// </summary>
[ExcelHeader("手机号*")]
public string? Mobile { get; set; }
}
/// <summary>
/// 秩序册导入解析输出
/// </summary>
public class OrderBookImportOutput
{
/// <summary>
/// 导入批次ID(用于确认导入)
/// </summary>
public long BatchId { get; set; }
/// <summary>
/// 解析状态:0-解析中,10-待确认,20-存在错误
/// </summary>
public int Status { get; set; }
/// <summary>
/// 原始数据行数(不含表头)
/// </summary>
public int TotalRows { get; set; }
/// <summary>
/// 有效行数
/// </summary>
public int ValidRows { get; set; }
/// <summary>
/// 错误数量(存在错误时不可确认)
/// </summary>
public int ErrorCount { get; set; }
/// <summary>
/// 警告数量(不阻断确认)
/// </summary>
public int WarningCount { get; set; }
/// <summary>
/// 解析预览统计
/// </summary>
public OrderBookPreview Preview { get; set; } = new();
/// <summary>
/// 问题清单(错误/警告)
/// </summary>
public List<OrderBookParseIssue> Errors { get; set; } = new();
}
/// <summary>
/// 秩序册解析预览统计
/// </summary>
public class OrderBookPreview
{
/// <summary>
/// 场地数量
/// </summary>
public int VenueCount { get; set; }
/// <summary>
/// 场次数量(项目×组别×场地)
/// </summary>
public int SessionCount { get; set; }
/// <summary>
/// 出场记录数量
/// </summary>
public int EntryCount { get; set; }
/// <summary>
/// 裁判数量
/// </summary>
public int RefereeCount { get; set; }
}
/// <summary>
/// 秩序册解析问题项
/// </summary>
public class OrderBookParseIssue
{
/// <summary>问题所在工作表,便于区分两个工作表的相同行号。</summary>
public string Sheet { get; set; } = "出场秩序";
/// <summary>
/// 所在行号(Excel 物理行号,含表头)
/// </summary>
public int Row { get; set; }
/// <summary>
/// 所在列名
/// </summary>
public string Column { get; set; } = string.Empty;
/// <summary>
/// 问题描述
/// </summary>
public string Message { get; set; } = string.Empty;
/// <summary>
/// 级别:error-错误(阻断确认),warning-警告(不阻断)
/// </summary>
public string Level { get; set; } = "error";
}
/// <summary>
/// 秩序册确认导入输入
/// </summary>
public class OrderBookConfirmInput
{
/// <summary>
/// 导入批次ID(必填,由导入接口返回)
/// </summary>
[Required(ErrorMessage = "批次ID不能为空")]
public long BatchId { get; set; }
/// <summary>
/// 是否为裁判生成小程序打分账号
/// </summary>
public bool GenerateJudgeAccount { get; set; }
/// <summary>
/// 打分账号初始密码(生成账号时必填,长度6-32位)
/// </summary>
public string? DefaultPassword { get; set; }
}
/// <summary>
/// 秩序册确认导入输出
/// </summary>
public class OrderBookConfirmOutput
{
/// <summary>
/// 秩序册版本号
/// </summary>
public int OrderBookVersion { get; set; }
/// <summary>
/// 生成场地数量
/// </summary>
public int VenueCount { get; set; }
/// <summary>
/// 生成场次数量
/// </summary>
public int SessionCount { get; set; }
/// <summary>
/// 生成出场记录数量
/// </summary>
public int EntryCount { get; set; }
/// <summary>
/// 纳入裁判数量
/// </summary>
public int RefereeCount { get; set; }
}
/// <summary>
/// 秩序册导入暂存草稿
/// </summary>
public class OrderBookDraft
{
/// <summary>
/// 批次ID
/// </summary>
public long BatchId { get; set; }
/// <summary>
/// 创建该导入批次的后台用户ID
/// </summary>
public long CreatedUserId { get; set; }
/// <summary>
/// 解析结果是否包含阻断确认的错误
/// </summary>
public bool HasErrors { get; set; }
/// <summary>
/// 赛事ID(当前版本要求赛事已预先创建)
/// </summary>
public long? EventId { get; set; }
/// <summary>
/// 导入模式:overwrite-覆盖该赛事既有编排(默认),append-追加
/// </summary>
public string ImportMode { get; set; } = "overwrite";
/// <summary>
/// 解析时间
/// </summary>
public DateTime CreatedAt { get; set; }
/// <summary>
/// 出场明细(已通过基础校验)
/// </summary>
public List<OrderBookDraftEntry> Entries { get; set; } = new();
/// <summary>
/// 裁判明细
/// </summary>
public List<OrderBookDraftReferee> Referees { get; set; } = new();
}
/// <summary>
/// 暂存出场行
/// </summary>
public class OrderBookDraftEntry
{
/// <summary>解析时唯一匹配的平台项目ID。</summary>
public long ProjectId { get; set; }
/// <summary>解析时唯一匹配的赛事项目ID。</summary>
public long EventProjectId { get; set; }
/// <summary>解析时校验通过的计分规则ID。</summary>
public long ScoreRuleId { get; set; }
/// <summary>平台项目组别ID。</summary>
public long ProjectGroupId { get; set; }
/// <summary>赛事项目组别ID。</summary>
public long EventProjectGroupId { get; set; }
/// <summary>
/// Excel 物理行号
/// </summary>
public int Row { get; set; }
/// <summary>
/// 场地名称
/// </summary>
public string VenueName { get; set; } = string.Empty;
/// <summary>
/// 项目名称
/// </summary>
public string ProjectName { get; set; } = string.Empty;
/// <summary>
/// 计分规则名称
/// </summary>
public string ScoreRuleName { get; set; } = string.Empty;
/// <summary>
/// 组别名称
/// </summary>
public string GroupName { get; set; } = string.Empty;
/// <summary>
/// 场次名称
/// </summary>
public string SessionName { get; set; } = string.Empty;
/// <summary>
/// 姓名
/// </summary>
public string ParticipantName { get; set; } = string.Empty;
/// <summary>
/// 队伍名称
/// </summary>
public string? TeamName { get; set; }
/// <summary>
/// 单位
/// </summary>
public string? UnitName { get; set; }
}
/// <summary>
/// 暂存裁判行
/// </summary>
public class OrderBookDraftReferee
{
public int Row { get; set; }
public string Name { get; set; } = string.Empty;
public string Mobile { get; set; } = string.Empty;
}