using System.ComponentModel.DataAnnotations; using YD_Event.Core.Enum; namespace YD_Event.Application.Event.Dtos; /// /// 统一报名输入DTO /// public class UnifiedRegistrationInput { /// /// 赛事ID /// [Required(ErrorMessage = "赛事ID不能为空")] public long EventId { get; set; } /// /// 报名模式 (1-个人 2-团队) /// [Required(ErrorMessage = "报名模式不能为空")] [Range(1, 2, ErrorMessage = "报名模式只能是1(个人)或2(团队)")] public int RegistrationMode { get; set; } /// /// 团队名称 (团队报名必填) /// [MaxLength(100, ErrorMessage = "团队名称不能超过100个字符")] public string? TeamName { get; set; } /// /// 联系人姓名 /// [Required(ErrorMessage = "联系人姓名不能为空")] [MaxLength(50, ErrorMessage = "联系人姓名不能超过50个字符")] public string ContactName { get; set; } = string.Empty; /// /// 联系人电话 /// [Required(ErrorMessage = "联系人电话不能为空")] [RegularExpression(@"^1[3-9]\d{9}$", ErrorMessage = "请输入正确的手机号格式")] public string ContactPhone { get; set; } = string.Empty; /// /// 报名项目列表 /// [Required(ErrorMessage = "报名项目列表不能为空")] [MinLength(1, ErrorMessage = "请至少选择一个项目")] public List Items { get; set; } = new(); /// /// 创建用户ID /// public long CreatedUserId { get; set; } /// /// 是否为草稿 /// public bool IsDraft { get; set; } /// /// 报名渠道 (1-小程序 2-后台管理 3-其他) /// public int RegistrationChannel { get; set; } = 1; } /// /// 统一报名项目输入DTO /// public class UnifiedRegistrationItemInput { /// /// 项目ID /// [Required(ErrorMessage = "项目ID不能为空")] public long ProjectId { get; set; } /// /// 组别ID /// public long? GroupId { get; set; } /// /// 组别名称 /// public string? GroupName { get; set; } /// /// 团队列表(支持多个团队报名同一项目组别) /// public List Teams { get; set; } = new(); /// /// 参赛人员列表(单个团队报名时使用,向后兼容) /// public List Persons { get; set; } = new(); } /// /// 统一团队输入DTO /// public class UnifiedTeamInput { /// /// 团队ID(可选,已有团队时使用) /// public long? TeamId { get; set; } /// /// 团队名称 /// [MaxLength(100, ErrorMessage = "团队名称不能超过100个字符")] public string? TeamName { get; set; } /// /// 团队序号(用于显示,如"团队一"、"团队二") /// public int TeamIndex { get; set; } /// /// 该团队的参赛人员列表 /// [Required(ErrorMessage = "参赛人员列表不能为空")] [MinLength(1, ErrorMessage = "请至少填写一个参赛人员")] public List Persons { get; set; } = new(); } /// /// 统一参赛人员输入DTO /// public class UnifiedPersonInput { /// /// 用户ID (可选,已有用户时使用) /// public long? UserId { get; set; } /// /// 姓名 /// [Required(ErrorMessage = "姓名不能为空")] [MaxLength(50, ErrorMessage = "姓名不能超过50个字符")] public string Name { get; set; } = string.Empty; /// /// 身份证号 /// [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; } = string.Empty; /// /// 性别 /// [Required(ErrorMessage = "性别不能为空")] public Gender Gender { get; set; } /// /// 电话 /// [RegularExpression(@"^1[3-9]\d{9}$", ErrorMessage = "请输入正确的手机号格式")] public string? Mobile { get; set; } /// /// 出生日期 /// [Required(ErrorMessage = "出生日期不能为空")] public DateTime BirthDate { get; set; } } /// /// 统一报名结果输出DTO /// public class UnifiedRegistrationOutput { /// /// 报名ID /// public long RegistrationId { get; set; } /// /// 订单号 /// public string OrderNo { get; set; } = string.Empty; /// /// 总金额(优惠前) /// public decimal OriginalAmount { get; set; } /// /// 优惠金额 /// public decimal DiscountAmount { get; set; } /// /// 实际支付金额 /// public decimal ActualAmount { get; set; } /// /// 支付状态 /// public int PaymentStatus { get; set; } /// /// 是否免费 /// public bool IsFree => ActualAmount <= 0; } /// /// 统一支付处理输入DTO /// public class UnifiedPaymentInput { /// /// 报名ID /// [Required(ErrorMessage = "报名ID不能为空")] public long RegistrationId { get; set; } /// /// 支付方式 (1-线下 2-线上) /// [Required(ErrorMessage = "支付方式不能为空")] [Range(1, 2, ErrorMessage = "支付方式只能是1(线下)或2(线上)")] public int PaymentMethod { get; set; } /// /// 优惠券ID (可选) /// public long? CouponId { get; set; } /// /// 微信OpenId (微信支付时必填) /// public string? OpenId { get; set; } /// /// 支付凭证URL (线下支付时必填) /// public string? PaymentProofUrl { get; set; } /// /// 具体支付方式 /// public PaymentMethodType PaymentMethodType { get; set; } /// /// 操作用户ID /// public long OperatorUserId { get; set; } } /// /// 统一支付处理输出DTO /// public class UnifiedPaymentOutput { /// /// 报名ID /// public long RegistrationId { get; set; } /// /// 订单号 /// public string OrderNo { get; set; } = string.Empty; /// /// 支付状态 /// public int PaymentStatus { get; set; } /// /// 是否免费 /// public bool IsFree { get; set; } /// /// 优惠前金额 /// public decimal OriginalAmount { get; set; } /// /// 优惠金额 /// public decimal DiscountAmount { get; set; } /// /// 实际支付金额 /// public decimal ActualAmount { get; set; } /// /// 优惠券使用规则说明 /// public string? CouponRuleNote { get; set; } /// /// 微信支付参数 (微信支付时返回) /// public object? WechatPayParams { get; set; } /// /// 支付二维码URL (微信Native支付时返回) /// public string? QrcodeUrl { get; set; } /// /// 交易类型 /// public string? TradeType { get; set; } } /// /// 报名验证结果DTO /// public class RegistrationValidationResult { /// /// 是否通过验证 /// public bool IsValid { get; set; } /// /// 错误信息 /// public string? ErrorMessage { get; set; } /// /// 验证详情 /// public List? Details { get; set; } } /// /// 验证详情DTO /// public class ValidationDetail { /// /// 验证项名称 /// public string ItemName { get; set; } = string.Empty; /// /// 是否通过 /// public bool IsPassed { get; set; } /// /// 消息 /// public string Message { get; set; } = string.Empty; }