365 lines
8.7 KiB
C#
Raw Normal View History

using YD_Event.Application.Common.Excel;
namespace YD_Event.Application.OrderBook.Dtos;
/// <summary>
/// 秩序册「出场秩序」工作表行模型
/// </summary>
2026-10-10 09:04:52 +08:00
public class OrderBookEntryRow : IExcelRowLocation
{
2026-10-10 09:04:52 +08:00
/// <summary>工作表实际行号,不对应Excel列。</summary>
public int ExcelRowNumber { get; set; }
/// <summary>
2026-10-08 10:12:54 +08:00
/// 项目名称
/// </summary>
2026-10-08 10:12:54 +08:00
[ExcelHeader("项目名称*")]
public string? ProjectName { get; set; }
/// <summary>
2026-10-08 10:12:54 +08:00
/// 计分规则名称
/// </summary>
2026-10-08 10:12:54 +08:00
[ExcelHeader("计分规则*")]
public string? ScoreRuleName { get; set; }
/// <summary>
2026-10-08 10:12:54 +08:00
/// 组别名称
/// </summary>
2026-10-08 10:12:54 +08:00
[ExcelHeader("组别名称*")]
public string? GroupName { get; set; }
/// <summary>
2026-10-08 10:12:54 +08:00
/// 运动员姓名;多人项目可使用顿号或逗号分隔
/// </summary>
2026-10-08 10:12:54 +08:00
[ExcelHeader("姓名*")]
public string? ParticipantName { get; set; }
/// <summary>
2026-10-08 10:12:54 +08:00
/// 队伍名称(可空)
/// </summary>
2026-10-08 10:12:54 +08:00
[ExcelHeader("队伍名称")]
public string? TeamName { get; set; }
/// <summary>
2026-10-08 10:12:54 +08:00
/// 所属单位(可空)
/// </summary>
[ExcelHeader("单位")]
public string? UnitName { get; set; }
/// <summary>
2026-10-08 10:12:54 +08:00
/// 场次名称
/// </summary>
2026-10-08 10:12:54 +08:00
[ExcelHeader("场次*")]
public string? SessionName { get; set; }
/// <summary>
2026-10-08 10:12:54 +08:00
/// 场地名称
/// </summary>
2026-10-08 10:12:54 +08:00
[ExcelHeader("场地*")]
public string? VenueName { get; set; }
}
/// <summary>
/// 秩序册「裁判名单」工作表行模型
/// </summary>
2026-10-10 09:04:52 +08:00
public class OrderBookRefereeRow : IExcelRowLocation
{
2026-10-10 09:04:52 +08:00
/// <summary>工作表实际行号,不对应Excel列。</summary>
public int ExcelRowNumber { get; set; }
/// <summary>
/// 序号(仅便于人工核对)
/// </summary>
[ExcelHeader("序号")]
public string? Seq { get; set; }
/// <summary>
/// 裁判姓名(必填)
/// </summary>
2026-10-08 10:12:54 +08:00
[ExcelHeader("姓名*")]
public string? Name { get; set; }
/// <summary>
/// 手机号(必填,用于匹配/创建裁判档案及打分账号)
/// </summary>
2026-10-08 10:12:54 +08:00
[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
{
2026-10-10 09:04:52 +08:00
/// <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>
2026-10-08 10:12:54 +08:00
/// 导入模式:overwrite-覆盖该赛事既有编排(默认),append-追加
/// </summary>
2026-10-08 10:12:54 +08:00
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
{
2026-10-10 09:04:52 +08:00
/// <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;
2026-10-08 10:12:54 +08:00
/// <summary>
/// 计分规则名称
/// </summary>
public string ScoreRuleName { get; set; } = string.Empty;
/// <summary>
/// 组别名称
/// </summary>
public string GroupName { get; set; } = string.Empty;
/// <summary>
2026-10-08 10:12:54 +08:00
/// 场次名称
/// </summary>
2026-10-08 10:12:54 +08:00
public string SessionName { get; set; } = string.Empty;
/// <summary>
2026-10-08 10:12:54 +08:00
/// 姓名
/// </summary>
public string ParticipantName { get; set; } = string.Empty;
/// <summary>
2026-10-08 10:12:54 +08:00
/// 队伍名称
/// </summary>
2026-10-08 10:12:54 +08:00
public string? TeamName { get; set; }
/// <summary>
2026-10-08 10:12:54 +08:00
/// 单位
/// </summary>
2026-10-08 10:12:54 +08:00
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;
}