402 lines
9.4 KiB
C#
402 lines
9.4 KiB
C#
using YD_Event.Application.Common.Excel;
|
||
|
||
namespace YD_Event.Application.OrderBook.Dtos;
|
||
|
||
/// <summary>
|
||
/// 秩序册「出场秩序」工作表行模型
|
||
/// </summary>
|
||
public class OrderBookEntryRow
|
||
{
|
||
/// <summary>
|
||
/// 序号(仅便于人工核对,导入时不参与落库)
|
||
/// </summary>
|
||
[ExcelHeader("序号")]
|
||
public string? Seq { get; set; }
|
||
|
||
/// <summary>
|
||
/// 场地名称(必填)
|
||
/// </summary>
|
||
[ExcelHeader("场地名称")]
|
||
public string? VenueName { get; set; }
|
||
|
||
/// <summary>
|
||
/// 项目名称(必填,需与赛事已配置项目一致,不存在将自动建档)
|
||
/// </summary>
|
||
[ExcelHeader("项目名称")]
|
||
public string? ProjectName { get; set; }
|
||
|
||
/// <summary>
|
||
/// 组别名称(可空,空则归入"公开组")
|
||
/// </summary>
|
||
[ExcelHeader("组别名称")]
|
||
public string? GroupName { get; set; }
|
||
|
||
/// <summary>
|
||
/// 出场编号(可空,空则按同场次顺序自动生成)
|
||
/// </summary>
|
||
[ExcelHeader("出场编号")]
|
||
public string? EntryNo { get; set; }
|
||
|
||
/// <summary>
|
||
/// 姓名/队名(必填)
|
||
/// </summary>
|
||
[ExcelHeader("姓名/队名")]
|
||
public string? ParticipantName { get; set; }
|
||
|
||
/// <summary>
|
||
/// 所属单位(可空,仅用于核对展示)
|
||
/// </summary>
|
||
[ExcelHeader("单位")]
|
||
public string? UnitName { get; set; }
|
||
|
||
/// <summary>
|
||
/// 联系电话(可空)
|
||
/// </summary>
|
||
[ExcelHeader("联系电话")]
|
||
public string? Mobile { get; set; }
|
||
|
||
/// <summary>
|
||
/// 证件号(可空)
|
||
/// </summary>
|
||
[ExcelHeader("证件号")]
|
||
public string? IdCard { get; set; }
|
||
|
||
/// <summary>
|
||
/// 备注(可空)
|
||
/// </summary>
|
||
[ExcelHeader("备注")]
|
||
public string? Remark { get; set; }
|
||
}
|
||
|
||
/// <summary>
|
||
/// 秩序册「裁判名单」工作表行模型
|
||
/// </summary>
|
||
public class OrderBookRefereeRow
|
||
{
|
||
/// <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>
|
||
[ExcelHeader("裁判角色")]
|
||
public string? RoleText { get; set; }
|
||
|
||
/// <summary>
|
||
/// 裁判等级(可空,如:国际级/国家级/一级/二级/三级)
|
||
/// </summary>
|
||
[ExcelHeader("裁判等级")]
|
||
public string? LevelText { get; set; }
|
||
|
||
/// <summary>
|
||
/// 负责场地(可空,对应出场秩序中的场地名称)
|
||
/// </summary>
|
||
[ExcelHeader("负责场地")]
|
||
public string? VenueName { get; set; }
|
||
|
||
/// <summary>
|
||
/// 负责项目(可空)
|
||
/// </summary>
|
||
[ExcelHeader("负责项目")]
|
||
public string? ProjectName { 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>
|
||
/// 所在行号(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>
|
||
/// 导入模式:append-追加(默认),overwrite-覆盖该赛事既有编排
|
||
/// </summary>
|
||
public string ImportMode { get; set; } = "append";
|
||
|
||
/// <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>
|
||
/// 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 GroupName { get; set; } = string.Empty;
|
||
|
||
/// <summary>
|
||
/// 原始出场编号(可空)
|
||
/// </summary>
|
||
public string? EntryNo { get; set; }
|
||
|
||
/// <summary>
|
||
/// 姓名/队名
|
||
/// </summary>
|
||
public string ParticipantName { get; set; } = string.Empty;
|
||
|
||
/// <summary>
|
||
/// 单位
|
||
/// </summary>
|
||
public string? UnitName { get; set; }
|
||
|
||
/// <summary>
|
||
/// 联系电话
|
||
/// </summary>
|
||
public string? Mobile { get; set; }
|
||
}
|
||
|
||
/// <summary>
|
||
/// 暂存裁判行
|
||
/// </summary>
|
||
public class OrderBookDraftReferee
|
||
{
|
||
/// <summary>
|
||
/// Excel 物理行号
|
||
/// </summary>
|
||
public int Row { get; set; }
|
||
|
||
/// <summary>
|
||
/// 裁判姓名
|
||
/// </summary>
|
||
public string Name { get; set; } = string.Empty;
|
||
|
||
/// <summary>
|
||
/// 手机号
|
||
/// </summary>
|
||
public string Mobile { get; set; } = string.Empty;
|
||
|
||
/// <summary>
|
||
/// 裁判角色文本
|
||
/// </summary>
|
||
public string? RoleText { get; set; }
|
||
|
||
/// <summary>
|
||
/// 裁判等级文本
|
||
/// </summary>
|
||
public string? LevelText { get; set; }
|
||
|
||
/// <summary>
|
||
/// 负责场地名称
|
||
/// </summary>
|
||
public string? VenueName { get; set; }
|
||
|
||
/// <summary>
|
||
/// 负责项目名称
|
||
/// </summary>
|
||
public string? ProjectName { get; set; }
|
||
}
|