2026-04-04 23:31:38 +08:00

833 lines
19 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 System.ComponentModel.DataAnnotations;
using YD_Event.Core.Enum;
namespace YD_Event.Application.Client.Dtos;
/// <summary>
/// 赛事列表项DTO
/// </summary>
public class EventListDto
{
/// <summary>
/// 赛事ID
/// </summary>
public long Id { get; set; }
/// <summary>
/// 赛事名称
/// </summary>
public string EventName { get; set; }
/// <summary>
/// 封面图片
/// </summary>
public string CoverImage { get; set; }
/// <summary>
/// 赛事状态
/// </summary>
public EventStatus EventStatus { get; set; }
/// <summary>
/// 报名开始时间
/// </summary>
public DateTime RegistrationStartTime { get; set; }
/// <summary>
/// 报名结束时间
/// </summary>
public DateTime RegistrationEndTime { get; set; }
/// <summary>
/// 比赛开始时间
/// </summary>
public DateTime MatchStartTime { get; set; }
/// <summary>
/// 比赛结束时间
/// </summary>
public DateTime MatchEndTime { get; set; }
/// <summary>
/// 地址 (省市区+详细地址)
/// </summary>
public string Address { get; set; }
}
/// <summary>
/// 轮播图DTO
/// </summary>
public class BannerDto
{
/// <summary>
/// 标题
/// </summary>
public string Title { get; set; }
/// <summary>
/// 图片地址
/// </summary>
public string ImageUrl { get; set; }
/// <summary>
/// 跳转链接类型
/// </summary>
public LinkType LinkType { get; set; }
/// <summary>
/// 跳转链接URL
/// </summary>
public string LinkUrl { get; set; }
/// <summary>
/// 关联赛事ID
/// </summary>
public long? EventId { get; set; }
}
/// <summary>
/// 赛事单位DTO
/// </summary>
public class EventUnitDto
{
/// <summary>
/// 单位类型
/// </summary>
public UnitType UnitType { get; set; }
/// <summary>
/// 单位名称
/// </summary>
public string UnitName { get; set; }
/// <summary>
/// Logo图片地址
/// </summary>
public string LogoUrl { get; set; }
}
/// <summary>
/// 赛事详情DTO
/// </summary>
public class EventDetailDto : EventListDto
{
/// <summary>
/// 宣传视频
/// </summary>
public string EventVideo { get; set; }
/// <summary>
/// 赛事类型
/// </summary>
public EventFormat EventType { get; set; }
/// <summary>
/// 收费模式
/// </summary>
public ChargeMode ChargeMode { get; set; }
/// <summary>
/// 报名类型
/// </summary>
public RegistrationType RegistrationType { get; set; }
/// <summary>
/// 赛事介绍
/// </summary>
public string EventIntroduction { get; set; }
/// <summary>
/// 资料备注
/// </summary>
public string MaterialRemark { get; set; }
/// <summary>
/// 资料上传开始时间
/// </summary>
public DateTime? MaterialUploadStartTime { get; set; }
/// <summary>
/// 资料上传结束时间
/// </summary>
public DateTime? MaterialUploadEndTime { get; set; }
/// <summary>
/// 退款规则文本
/// </summary>
public string RefundRule { get; set; }
/// <summary>
/// 积分规则文本
/// </summary>
public string PointsRule { get; set; }
/// <summary>
/// 个人项目限报数量
/// </summary>
public int IndividualProjectLimit { get; set; }
/// <summary>
/// 团队项目限报数量
/// </summary>
public int TeamProjectLimit { get; set; }
/// <summary>
/// 单位列表
/// </summary>
public List<EventUnitDto> Units { get; set; }
/// <summary>
/// 项目列表
/// </summary>
public List<EventProjectDto> Projects { get; set; }
}
/// <summary>
/// 赛事项目DTO扩展(含项目限制信息)
/// </summary>
public class EventProjectDto
{
/// <summary>
/// 项目ID
/// </summary>
public long Id { get; set; }
/// <summary>
/// 项目名称
/// </summary>
public string Name { get; set; }
/// <summary>
/// 类型名称 (个人/团队)
/// </summary>
public string TypeName { get; set; }
/// <summary>
/// 报名费用
/// </summary>
public decimal Fee { get; set; }
/// <summary>
/// 项目限报数量
/// </summary>
public int? ProjectLimitCount { get; set; }
/// <summary>
/// 组别列表
/// </summary>
public List<EventProjectGroupDto> Groups { get; set; }
}
/// <summary>
/// 计算报名金额输入DTO
/// </summary>
public class CalculateAmountInput
{
/// <summary>
/// 赛事ID
/// </summary>
[Required(ErrorMessage = "赛事ID不能为空")]
public long EventId { get; set; }
/// <summary>
/// 报名模式 (1-个人 2-团队)
/// </summary>
[Required(ErrorMessage = "报名模式不能为空")]
[Range(1, 2, ErrorMessage = "报名模式只能是1(个人)或2(团队)")]
public int RegistrationMode { get; set; }
/// <summary>
/// 报名项目列表
/// </summary>
[Required(ErrorMessage = "报名项目列表不能为空")]
[MinLength(1, ErrorMessage = "请至少选择一个项目")]
public List<CalculateAmountItemInput> Items { get; set; }
}
/// <summary>
/// 计算报名金额项目输入DTO
/// </summary>
public class CalculateAmountItemInput
{
/// <summary>
/// 项目ID
/// </summary>
[Required(ErrorMessage = "项目ID不能为空")]
public long ProjectId { get; set; }
/// <summary>
/// 参赛人员数量
/// </summary>
[Required(ErrorMessage = "参赛人员数量不能为空")]
[Range(1, int.MaxValue, ErrorMessage = "参赛人员数量至少为1")]
public int PersonCount { get; set; }
}
/// <summary>
/// 计算报名金额输出DTO
/// </summary>
public class CalculateAmountOutput
{
/// <summary>
/// 赛事收费模式
/// </summary>
public ChargeMode ChargeMode { get; set; }
/// <summary>
/// 总金额
/// </summary>
public decimal TotalAmount { get; set; }
/// <summary>
/// 项目费用明细
/// </summary>
public List<CalculateAmountItemOutput> ItemDetails { get; set; }
}
/// <summary>
/// 计算报名金额项目输出DTO
/// </summary>
public class CalculateAmountItemOutput
{
/// <summary>
/// 项目ID
/// </summary>
public long ProjectId { get; set; }
/// <summary>
/// 项目名称
/// </summary>
public string ProjectName { get; set; }
/// <summary>
/// 单价
/// </summary>
public decimal UnitPrice { get; set; }
/// <summary>
/// 人数
/// </summary>
public int PersonCount { get; set; }
/// <summary>
/// 小计
/// </summary>
public decimal Subtotal { get; set; }
}
/// <summary>
/// 选择支付方式输入DTO
/// </summary>
public class SelectPaymentMethodInput
{
/// <summary>
/// 报名ID
/// </summary>
[Required(ErrorMessage = "报名ID不能为空")]
public long RegistrationId { get; set; }
/// <summary>
/// 支付方式 (1-线下 2-微信支付)
/// </summary>
[Required(ErrorMessage = "支付方式不能为空")]
[Range(1, 2, ErrorMessage = "支付方式只能是1(线下)或2(微信支付)")]
public int PaymentMethod { get; set; }
}
/// <summary>
/// 项目组别DTO
/// </summary>
public class EventProjectGroupDto
{
/// <summary>
/// 组别ID
/// </summary>
public long Id { get; set; }
/// <summary>
/// 组别名称
/// </summary>
public string GroupName { get; set; }
/// <summary>
/// 性别要求文本
/// </summary>
public string GenderRequirement { get; set; }
/// <summary>
/// 年龄要求文本
/// </summary>
public string AgeRequirement { get; set; }
}
/// <summary>
/// 赛事报名提交DTO
/// </summary>
public class SubmitRegistrationInput
{
/// <summary>
/// 赛事ID
/// </summary>
[Required(ErrorMessage = "赛事ID不能为空")]
public long EventId { get; set; }
/// <summary>
/// 报名模式 (1-个人 2-团队)
/// </summary>
[Required(ErrorMessage = "报名模式不能为空")]
[Range(1, 2, ErrorMessage = "报名模式只能是1(个人)或2(团队)")]
public int RegistrationMode { get; set; }
/// <summary>
/// 团队名称 (团队报名必填)
/// </summary>
[MaxLength(100, ErrorMessage = "团队名称不能超过100个字符")]
public string? TeamName { get; set; }
/// <summary>
/// 联系人姓名
/// </summary>
[Required(ErrorMessage = "联系人姓名不能为空")]
[MaxLength(50, ErrorMessage = "联系人姓名不能超过50个字符")]
public string ContactName { get; set; }
/// <summary>
/// 联系人电话
/// </summary>
[Required(ErrorMessage = "联系人电话不能为空")]
[RegularExpression(@"^1[3-9]\d{9}$", ErrorMessage = "请输入正确的手机号格式")]
public string ContactPhone { get; set; }
/// <summary>
/// 报名项目列表
/// </summary>
[Required(ErrorMessage = "报名项目列表不能为空")]
[MinLength(1, ErrorMessage = "请至少选择一个项目")]
public List<SubmitRegistrationItemInput> Items { get; set; }
}
/// <summary>
/// 报名项目输入
/// </summary>
public class SubmitRegistrationItemInput
{
/// <summary>
/// 项目ID
/// </summary>
[Required(ErrorMessage = "项目ID不能为空")]
public long ProjectId { get; set; }
/// <summary>
/// 组别名称 (冗余存储,也可传 GroupId)
/// </summary>
[MaxLength(100, ErrorMessage = "组别名称不能超过100个字符")]
public string GroupName { get; set; }
/// <summary>
/// 组别ID (建议传ID)
/// </summary>
public long? GroupId { get; set; }
/// <summary>
/// 参赛人员列表
/// </summary>
[Required(ErrorMessage = "参赛人员列表不能为空")]
[MinLength(1, ErrorMessage = "请至少添加一名参赛人员")]
public List<PersonInput> Persons { get; set; }
}
/// <summary>
/// 参赛人员输入
/// </summary>
public class PersonInput
{
/// <summary>
/// 姓名
/// </summary>
[Required(ErrorMessage = "姓名不能为空")]
[MaxLength(50, ErrorMessage = "姓名不能超过50个字符")]
public string Name { get; set; }
/// <summary>
/// 身份证号
/// </summary>
[Required(ErrorMessage = "身份证号不能为空")]
[RegularExpression(@"^[1-9]\d{5}(19|20)\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])\d{3}[\dXx]$", ErrorMessage = "请输入正确的身份证号格式")]
public string IdCardNumber { get; set; }
/// <summary>
/// 性别
/// </summary>
[Required(ErrorMessage = "性别不能为空")]
public Gender Gender { get; set; }
/// <summary>
/// 电话
/// </summary>
[RegularExpression(@"^1[3-9]\d{9}$", ErrorMessage = "请输入正确的手机号格式")]
public string? Mobile { get; set; }
/// <summary>
/// 出生日期
/// </summary>
[Required(ErrorMessage = "出生日期不能为空")]
public DateTime BirthDate { get; set; }
}
/// <summary>
/// 支付信息DTO
/// </summary>
public class PaymentInfoDto
{
/// <summary>
/// 报名ID
/// </summary>
public long RegistrationId { get; set; }
/// <summary>
/// 金额
/// </summary>
public decimal Amount { get; set; }
/// <summary>
/// 支付方式 (1-线下 2-线上)
/// </summary>
public int PaymentMethod { get; set; }
/// <summary>
/// 银行账户名 (线下支付)
/// </summary>
public string? BankAccountName { get; set; }
/// <summary>
/// 银行账号 (线下支付)
/// </summary>
public string? BankAccountNo { get; set; }
/// <summary>
/// 开户行 (线下支付)
/// </summary>
public string? BankName { get; set; }
/// <summary>
/// 微信支付参数
/// </summary>
public object? WechatPayParams { get; set; }
}
/// <summary>
/// 上传凭证输入DTO
/// </summary>
public class UploadVoucherInput
{
/// <summary>
/// 凭证图片URL
/// </summary>
[Required]
public string VoucherUrl { get; set; }
}
/// <summary>
/// 更新参赛人输入DTO
/// </summary>
public class UpdatePlayerInput
{
/// <summary>
/// 参赛人员ID
/// </summary>
[Required(ErrorMessage = "参赛人员ID不能为空")]
public long PersonId { get; set; }
/// <summary>
/// 姓名
/// </summary>
[Required(ErrorMessage = "姓名不能为空")]
[MaxLength(50, ErrorMessage = "姓名不能超过50个字符")]
public string Name { get; set; }
/// <summary>
/// 身份证号
/// </summary>
[Required(ErrorMessage = "身份证号不能为空")]
[RegularExpression(@"^[1-9]\d{5}(19|20)\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])\d{3}[\dXx]$", ErrorMessage = "请输入正确的身份证号格式")]
public string IdCardNumber { get; set; }
/// <summary>
/// 性别
/// </summary>
[Required(ErrorMessage = "性别不能为空")]
public Gender Gender { get; set; }
/// <summary>
/// 电话
/// </summary>
[RegularExpression(@"^1[3-9]\d{9}$", ErrorMessage = "请输入正确的手机号格式")]
public string? Mobile { get; set; }
}
/// <summary>
/// 已报赛事列表DTO
/// </summary>
public class MyEventListDto
{
/// <summary>
/// 报名ID
/// </summary>
public long RegistrationId { get; set; }
/// <summary>
/// 赛事ID
/// </summary>
public long EventId { get; set; }
/// <summary>
/// 赛事名称
/// </summary>
public string EventName { get; set; }
/// <summary>
/// 封面图片
/// </summary>
public string CoverImage { get; set; }
/// <summary>
/// 报名状态
/// </summary>
public int RegistrationStatus { get; set; }
/// <summary>
/// 支付状态
/// </summary>
public int PaymentStatus { get; set; }
/// <summary>
/// 报名时间
/// </summary>
public DateTime RegistrationTime { get; set; }
/// <summary>
/// 报名项目数
/// </summary>
public int ProjectCount { get; set; }
}
/// <summary>
/// 报名详情DTO
/// </summary>
public class RegistrationDetailDto
{
/// <summary>
/// 报名ID
/// </summary>
public long RegistrationId { get; set; }
/// <summary>
/// 赛事ID
/// </summary>
public long EventId { get; set; }
/// <summary>
/// 赛事名称
/// </summary>
public string EventName { get; set; }
/// <summary>
/// 封面图片
/// </summary>
public string CoverImage { get; set; }
/// <summary>
/// 赛事状态
/// </summary>
public EventStatus EventStatus { get; set; }
/// <summary>
/// 报名状态
/// </summary>
public int RegistrationStatus { get; set; }
/// <summary>
/// 支付状态
/// </summary>
public int PaymentStatus { get; set; }
/// <summary>
/// 总金额
/// </summary>
public decimal TotalAmount { get; set; }
/// <summary>
/// 订单号
/// </summary>
public string OrderNo { get; set; }
/// <summary>
/// 报名时间
/// </summary>
public DateTime RegistrationTime { get; set; }
/// <summary>
/// 审核备注
/// </summary>
public string? ReviewRemark { get; set; }
/// <summary>
/// 报名项目及人员
/// </summary>
public List<RegistrationItemDto> Items { get; set; }
}
/// <summary>
/// 报名项目信息DTO
/// </summary>
public class RegistrationItemDto
{
/// <summary>
/// 报名项目ID
/// </summary>
public long Id { get; set; }
/// <summary>
/// 项目名称
/// </summary>
public string ProjectName { get; set; }
/// <summary>
/// 组别名称
/// </summary>
public string GroupName { get; set; }
/// <summary>
/// 价格
/// </summary>
public decimal Price { get; set; }
/// <summary>
/// 参赛人员列表
/// </summary>
public List<RegistrationPersonDto> Persons { get; set; }
}
/// <summary>
/// 报名人员信息DTO
/// </summary>
public class RegistrationPersonDto
{
/// <summary>
/// 报名人员ID
/// </summary>
public long Id { get; set; }
/// <summary>
/// 姓名
/// </summary>
public string Name { get; set; }
/// <summary>
/// 身份证号
/// </summary>
public string IdCardNumber { get; set; }
/// <summary>
/// 性别
/// </summary>
public Gender Gender { get; set; }
/// <summary>
/// 电话
/// </summary>
public string Mobile { get; set; }
}
/// <summary>
/// 报名状态查询DTO
/// </summary>
public class RegistrationStatusDto
{
/// <summary>
/// 报名ID
/// </summary>
public long RegistrationId { get; set; }
/// <summary>
/// 报名状态
/// </summary>
public int RegistrationStatus { get; set; }
/// <summary>
/// 支付状态
/// </summary>
public int PaymentStatus { get; set; }
/// <summary>
/// 拒绝/取消原因
/// </summary>
public string RejectReason { get; set; }
}
/// <summary>
/// 获取支付信息输入DTO
/// </summary>
/// <remarks>
/// 用于获取赛事报名支付信息的输入参数,包含OpenId字段用于微信JSAPI支付
/// </remarks>
public class GetPaymentInfoInput
{
/// <summary>
/// 报名记录ID
/// </summary>
[Required(ErrorMessage = "报名记录ID不能为空")]
public long RegistrationId { get; set; }
/// <summary>
/// 微信用户OpenId
/// </summary>
/// <remarks>
/// 用于微信JSAPI支付,必须提供有效的微信用户OpenId
/// 格式要求:
/// - 长度:10-50个字符
/// - 允许的字符:字母、数字、下划线、连字符
/// </remarks>
[Required(ErrorMessage = "OpenId不能为空")]
[MinLength(10, ErrorMessage = "OpenId长度不能少于10个字符")]
[MaxLength(50, ErrorMessage = "OpenId长度不能超过50个字符")]
[RegularExpression(@"^[a-zA-Z0-9_-]+$", ErrorMessage = "OpenId格式不正确,只能包含字母、数字、下划线和连字符")]
public string OpenId { get; set; }
}
/// <summary>
/// 选择支付方式输入DTO
/// </summary>
/// <remarks>
/// 用于选择赛事报名支付方式的输入参数
/// </remarks>
public class SelectPaymentMethodInput
{
/// <summary>
/// 报名记录ID
/// </summary>
[Required(ErrorMessage = "报名记录ID不能为空")]
public long RegistrationId { get; set; }
/// <summary>
/// 支付方式:1-线下支付,2-微信支付
/// </summary>
[Required(ErrorMessage = "支付方式不能为空")]
[Range(1, 2, ErrorMessage = "支付方式只能是1(线下)或2(微信)")]
public int PaymentMethod { get; set; }
/// <summary>
/// 微信用户OpenId(微信支付时必填)
/// </summary>
/// <remarks>
/// 仅在选择微信支付时需要提供
/// 格式要求:
/// - 长度:10-50个字符
/// - 允许的字符:字母、数字、下划线、连字符
/// </remarks>
[MinLength(10, ErrorMessage = "OpenId长度不能少于10个字符")]
[MaxLength(50, ErrorMessage = "OpenId长度不能超过50个字符")]
[RegularExpression(@"^[a-zA-Z0-9_-]+$", ErrorMessage = "OpenId格式不正确,只能包含字母、数字、下划线和连字符")]
public string? OpenId { get; set; }
}