1200 lines
28 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>
/// 客户端赛事查询输入
/// </summary>
public class EventClientQueryInput : Pagination
{
/// <summary>
/// 搜索关键字
/// </summary>
public string? Keyword { get; set; }
/// <summary>
/// 状态筛选:0-全部 1-报名中 3-比赛中 4-已结束
/// </summary>
public int Status { get; set; } = 0;
/// <summary>
/// 赛事类型
/// </summary>
public EventFormat? EventType { get; set; }
/// <summary>
/// 收费模式
/// </summary>
public ChargeMode? ChargeMode { get; set; }
}
/// <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? CustomUnitType { get; set; }
/// <summary>
/// 单位名称
/// </summary>
public string UnitName { get; set; }
/// <summary>
/// Logo图片地址
/// </summary>
public string LogoUrl { get; set; }
/// <summary>
/// 排序
/// </summary>
public int Sort { get; set; }
}
/// <summary>
/// 赛事费用配置DTO
/// </summary>
public class EventFeeConfigDto
{
/// <summary>
/// 收费模式
/// </summary>
public ChargeMode ChargeMode { get; set; }
/// <summary>
/// 统一价格
/// </summary>
public decimal Price { get; set; }
/// <summary>
/// 商户ID
/// </summary>
public long? MerchantId { get; set; }
/// <summary>
/// 商户名称 (显示字段)
/// </summary>
public string? MerchantName { get; set; }
/// <summary>
/// 信用代码 (显示字段)
/// </summary>
public string? CreditCode { get; set; }
/// <summary>
/// 银行名称 (显示字段)
/// </summary>
public string? BankName { get; set; }
/// <summary>
/// 银行账号 (显示字段)
/// </summary>
public string? AccountNumber { get; set; }
/// <summary>
/// 营业执照图片URL (显示字段)
/// </summary>
public string? BusinessLicenseUrl { get; set; }
/// <summary>
/// 项目价格字典 (key: 项目ID, value: 价格)
/// </summary>
public Dictionary<long, decimal>? ProjectPrices { get; set; }
}
/// <summary>
/// 积分规则明细DTO
/// </summary>
public class PointsRuleDetailDto
{
/// <summary>
/// 起始名次
/// </summary>
public int StartRank { get; set; }
/// <summary>
/// 截止名次
/// </summary>
public int EndRank { get; set; }
/// <summary>
/// 发放积分个数
/// </summary>
public int Points { get; set; }
}
/// <summary>
/// 积分规则DTO
/// </summary>
public class PointsRuleDto
{
/// <summary>
/// 积分规则名称
/// </summary>
public string RuleName { get; set; }
/// <summary>
/// 参与积分(发放积分个数)
/// </summary>
public int? ParticipationPoints { get; set; }
/// <summary>
/// 备注
/// </summary>
public string? Remark { get; set; }
/// <summary>
/// 名次积分规则明细
/// </summary>
public List<PointsRuleDetailDto>? Details { get; set; }
}
/// <summary>
/// 退款规则DTO
/// </summary>
public class RefundRuleDto
{
/// <summary>
/// 距离比赛开始天数(起)
/// </summary>
public int DayStart { get; set; }
/// <summary>
/// 距离比赛开始天数(止)
/// </summary>
public int DayEnd { get; set; }
/// <summary>
/// 扣除比例(%)
/// </summary>
public decimal DeductPercentage { get; set; }
/// <summary>
/// 退款备注
/// </summary>
public string? Remark { get; set; }
}
/// <summary>
/// 积分规则明细快照DTO
/// </summary>
public class PointsRuleDetailSnapshotDto
{
public int StartRank { get; set; }
public int EndRank { get; set; }
public int Points { get; set; }
}
/// <summary>
/// 积分规则快照DTO
/// </summary>
public class PointsRuleSnapshotDto
{
public long PointsRuleId { get; set; }
public string RuleName { get; set; }
public int? ParticipationPoints { get; set; }
public string? Remark { get; set; }
public List<PointsRuleDetailSnapshotDto> Details { get; set; } = new List<PointsRuleDetailSnapshotDto>();
}
/// <summary>
/// 退款规则快照DTO
/// </summary>
public class RefundRuleSnapshotDto
{
public long RefundConfigId { get; set; }
public int DayStart { get; set; }
public int DayEnd { get; set; }
public decimal DeductPercentage { get; set; }
public string? Remark { get; set; }
}
/// <summary>
/// 赛事详情DTO
/// </summary>
public class EventDetailDto : EventListDto
{
/// <summary>
/// 是否已报名
/// </summary>
public bool IsRegistered { get; set; }
/// <summary>
/// 宣传视频
/// </summary>
public string EventVideo { get; set; }
/// <summary>
/// 赛事类型
/// </summary>
public EventFormat EventType { get; set; }
/// <summary>
/// 收费模式
/// </summary>
public ChargeMode ChargeMode { get; set; }
/// <summary>
/// 费用配置
/// </summary>
public EventFeeConfigDto? FeeConfig { get; set; }
/// <summary>
/// 报名类型
/// </summary>
public RegistrationType RegistrationType { get; set; }
/// <summary>
/// 赛事介绍
/// </summary>
public string EventIntroduction { get; set; }
/// <summary>
/// 是否需要上传素材
/// </summary>
public bool IsNeedMaterial { 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 PointsRuleDto? PointsRuleDetail { get; set; }
/// <summary>
/// 退款规则详情列表
/// </summary>
public List<RefundRuleDto>? RefundRules { get; set; }
/// <summary>
/// 个人项目限报数量
/// </summary>
public int IndividualProjectLimit { get; set; }
/// <summary>
/// 团队项目限报数量
/// </summary>
public int TeamProjectLimit { get; set; }
/// <summary>
/// 省份名称
/// </summary>
public string? ProvinceName { get; set; }
/// <summary>
/// 城市名称
/// </summary>
public string? CityName { get; set; }
/// <summary>
/// 区县名称
/// </summary>
public string? DistrictName { 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 long ProjectType { get; set; }
/// <summary>
/// 报名费用
/// </summary>
public decimal Fee { get; set; }
/// <summary>
/// 项目限报数量
/// </summary>
public int? ProjectLimitCount { get; set; }
/// <summary>
/// 完成人数模式(0=单一值,1=范围值)
/// </summary>
public int CompletionCountType { get; set; }
/// <summary>
/// 完成人数(单一值模式时有效)
/// </summary>
public int? CompletionCount { get; set; }
/// <summary>
/// 完成人数最小值(范围值模式时有效)
/// </summary>
public int? CompletionCountMin { get; set; }
/// <summary>
/// 完成人数最大值(范围值模式时有效)
/// </summary>
public int? CompletionCountMax { get; set; }
/// <summary>
/// 完成人数显示文本(如"5人"或"3-7人")
/// </summary>
public string? CompletionCountDisplay { 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 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>
[MaxLength(50, ErrorMessage = "联系人姓名不能超过50个字符")]
public string? ContactName { get; set; }
/// <summary>
/// 联系人电话 (个人报名时可自动从用户信息获取)
/// </summary>
[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>
/// 支付方式:1-线下,2-线上
/// </summary>
public int PaymentMethod { get; set; }
/// <summary>
/// 具体支付方式
/// </summary>
public PaymentMethodType PaymentMethodType { get; set; }
/// <summary>
/// 优惠码
/// </summary>
public string? CouponCode { 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>
public List<PersonInput>? Persons { get; set; }
}
/// <summary>
/// 参赛人员输入
/// </summary>
public class PersonInput
{
/// <summary>
/// 用户ID (可选,已有用户时使用)
/// </summary>
public long? UserId { 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>
/// 出生日期
/// </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>
/// 原始金额
/// </summary>
public decimal OriginalAmount { get; set; }
/// <summary>
/// 优惠金额
/// </summary>
public decimal DiscountAmount { 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 PaymentStatus { get; set; }
/// <summary>
/// 报名时间
/// </summary>
public DateTime RegistrationTime { get; set; }
/// <summary>
/// 赛事报名开始时间
/// </summary>
public DateTime RegistrationStartTime { get; set; }
/// <summary>
/// 赛事报名结束时间
/// </summary>
public DateTime RegistrationEndTime { get; set; }
/// <summary>
/// 报名项目数
/// </summary>
public int ProjectCount { get; set; }
/// <summary>
/// 是否需要上传素材
/// </summary>
public bool IsNeedMaterial { get; set; }
/// <summary>
/// 资料备注
/// </summary>
public string? MaterialRemark { get; set; }
/// <summary>
/// 资料上传开始时间
/// </summary>
public DateTime? MaterialUploadStartTime { get; set; }
/// <summary>
/// 资料上传结束时间
/// </summary>
public DateTime? MaterialUploadEndTime { get; set; }
/// <summary>
/// 已上传的素材URL
/// </summary>
public string? MaterialUrl { get; set; }
/// <summary>
/// 赛事状态:报名中/比赛中/已结束
/// </summary>
public int EventStatus { 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 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 decimal? RefundAmount { get; set; }
/// <summary>
/// 退款规则文本
/// </summary>
public string? RefundRulesText { 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 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>
/// 优惠券ID
/// </summary>
public long? CouponId { get; set; }
}
/// <summary>
/// 上传素材输入DTO
/// </summary>
public class UploadMaterialInput
{
/// <summary>
/// 报名记录ID
/// </summary>
[Required(ErrorMessage = "报名记录ID不能为空")]
public long RegistrationId { get; set; }
/// <summary>
/// 素材文件URL
/// </summary>
[Required(ErrorMessage = "素材文件URL不能为空")]
public string MaterialUrl { 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; }
/// <summary>
/// 具体支付方式
/// </summary>
public PaymentMethodType PaymentMethodType { get; set; }
}
/// <summary>
/// 取消报名退款输入DTO
/// </summary>
public class CancelRegistrationRefundInput
{
/// <summary>
/// 报名记录ID
/// </summary>
[Required(ErrorMessage = "报名记录ID不能为空")]
public long RegistrationId { get; set; }
/// <summary>
/// 退款原因
/// </summary>
[MaxLength(200, ErrorMessage = "退款原因不能超过200个字符")]
public string? RefundReason { get; set; }
/// <summary>
/// 取消类型:0-全部取消,1-部分取消
/// </summary>
public int CancelType { get; set; }
/// <summary>
/// 取消的人员ID列表(部分取消时使用)
/// </summary>
public List<long>? PersonIds { get; set; }
/// <summary>
/// 取消的团队Key列表(部分取消时使用)
/// </summary>
public List<string>? CancelTeams { get; set; }
}