using System.ComponentModel.DataAnnotations; using YD_Event.Core.Enum; namespace YD_Event.Application.Client.Dtos; /// /// 客户端赛事查询输入 /// public class EventClientQueryInput : Pagination { /// /// 搜索关键字 /// public string? Keyword { get; set; } /// /// 状态筛选:0-全部 1-报名中 3-比赛中 4-已结束 /// public int Status { get; set; } = 0; /// /// 赛事类型 /// public EventFormat? EventType { get; set; } /// /// 收费模式 /// public ChargeMode? ChargeMode { get; set; } } /// /// 赛事列表项DTO /// public class EventListDto { /// /// 赛事ID /// public long Id { get; set; } /// /// 赛事名称 /// public string EventName { get; set; } /// /// 封面图片 /// public string CoverImage { get; set; } /// /// 赛事状态 /// public EventStatus EventStatus { get; set; } /// /// 报名开始时间 /// public DateTime RegistrationStartTime { get; set; } /// /// 报名结束时间 /// public DateTime RegistrationEndTime { get; set; } /// /// 比赛开始时间 /// public DateTime MatchStartTime { get; set; } /// /// 比赛结束时间 /// public DateTime MatchEndTime { get; set; } /// /// 地址 (省市区+详细地址) /// public string Address { get; set; } } /// /// 轮播图DTO /// public class BannerDto { /// /// 标题 /// public string Title { get; set; } /// /// 图片地址 /// public string ImageUrl { get; set; } /// /// 跳转链接类型 /// public LinkType LinkType { get; set; } /// /// 跳转链接URL /// public string LinkUrl { get; set; } /// /// 关联赛事ID /// public long? EventId { get; set; } } /// /// 赛事单位DTO /// public class EventUnitDto { /// /// 单位类型 /// public UnitType UnitType { get; set; } /// /// 自定义单位类型(当需要自定义时使用,优先显示此字段) /// public string? CustomUnitType { get; set; } /// /// 单位名称 /// public string UnitName { get; set; } /// /// Logo图片地址 /// public string LogoUrl { get; set; } /// /// 排序 /// public int Sort { get; set; } } /// /// 赛事费用配置DTO /// public class EventFeeConfigDto { /// /// 收费模式 /// public ChargeMode ChargeMode { get; set; } /// /// 统一价格 /// public decimal Price { get; set; } /// /// 商户ID /// public long? MerchantId { get; set; } /// /// 商户名称 (显示字段) /// public string? MerchantName { get; set; } /// /// 信用代码 (显示字段) /// public string? CreditCode { get; set; } /// /// 银行名称 (显示字段) /// public string? BankName { get; set; } /// /// 银行账号 (显示字段) /// public string? AccountNumber { get; set; } /// /// 营业执照图片URL (显示字段) /// public string? BusinessLicenseUrl { get; set; } /// /// 项目价格字典 (key: 项目ID, value: 价格) /// public Dictionary? ProjectPrices { get; set; } } /// /// 积分规则明细DTO /// public class PointsRuleDetailDto { /// /// 起始名次 /// public int StartRank { get; set; } /// /// 截止名次 /// public int EndRank { get; set; } /// /// 发放积分个数 /// public int Points { get; set; } } /// /// 积分规则DTO /// public class PointsRuleDto { /// /// 积分规则名称 /// public string RuleName { get; set; } /// /// 参与积分(发放积分个数) /// public int? ParticipationPoints { get; set; } /// /// 备注 /// public string? Remark { get; set; } /// /// 名次积分规则明细 /// public List? Details { get; set; } } /// /// 退款规则DTO /// public class RefundRuleDto { /// /// 距离比赛开始天数(起) /// public int DayStart { get; set; } /// /// 距离比赛开始天数(止) /// public int DayEnd { get; set; } /// /// 扣除比例(%) /// public decimal DeductPercentage { get; set; } /// /// 退款备注 /// public string? Remark { get; set; } } /// /// 积分规则明细快照DTO /// public class PointsRuleDetailSnapshotDto { public int StartRank { get; set; } public int EndRank { get; set; } public int Points { get; set; } } /// /// 积分规则快照DTO /// 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 Details { get; set; } = new List(); } /// /// 退款规则快照DTO /// 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; } } /// /// 赛事详情DTO /// public class EventDetailDto : EventListDto { /// /// 是否已报名 /// public bool IsRegistered { get; set; } /// /// 宣传视频 /// public string EventVideo { get; set; } /// /// 赛事类型 /// public EventFormat EventType { get; set; } /// /// 收费模式 /// public ChargeMode ChargeMode { get; set; } /// /// 费用配置 /// public EventFeeConfigDto? FeeConfig { get; set; } /// /// 报名类型 /// public RegistrationType RegistrationType { get; set; } /// /// 赛事介绍 /// public string EventIntroduction { get; set; } /// /// 是否需要上传素材 /// public bool IsNeedMaterial { get; set; } /// /// 资料备注 /// public string MaterialRemark { get; set; } /// /// 资料上传开始时间 /// public DateTime? MaterialUploadStartTime { get; set; } /// /// 资料上传结束时间 /// public DateTime? MaterialUploadEndTime { get; set; } /// /// 退款规则文本 /// public string RefundRule { get; set; } /// /// 积分规则文本 /// public string PointsRule { get; set; } /// /// 积分规则详情 /// public PointsRuleDto? PointsRuleDetail { get; set; } /// /// 退款规则详情列表 /// public List? RefundRules { get; set; } /// /// 个人项目限报数量 /// public int IndividualProjectLimit { get; set; } /// /// 团队项目限报数量 /// public int TeamProjectLimit { get; set; } /// /// 省份名称 /// public string? ProvinceName { get; set; } /// /// 城市名称 /// public string? CityName { get; set; } /// /// 区县名称 /// public string? DistrictName { get; set; } /// /// 单位列表 /// public List Units { get; set; } /// /// 项目列表 /// public List Projects { get; set; } } /// /// 赛事项目DTO扩展(含项目限制信息) /// public class EventProjectDto { /// /// 项目ID /// public long Id { get; set; } /// /// 项目名称 /// public string Name { get; set; } /// /// 类型名称 (个人/团队) /// public string TypeName { get; set; } /// /// 项目类型枚举值 /// public long ProjectType { get; set; } /// /// 报名费用 /// public decimal Fee { get; set; } /// /// 项目限报数量 /// public int? ProjectLimitCount { get; set; } /// /// 完成人数模式(0=单一值,1=范围值) /// public int CompletionCountType { get; set; } /// /// 完成人数(单一值模式时有效) /// public int? CompletionCount { get; set; } /// /// 完成人数最小值(范围值模式时有效) /// public int? CompletionCountMin { get; set; } /// /// 完成人数最大值(范围值模式时有效) /// public int? CompletionCountMax { get; set; } /// /// 完成人数显示文本(如"5人"或"3-7人") /// public string? CompletionCountDisplay { get; set; } /// /// 组别列表 /// public List Groups { get; set; } } /// /// 计算报名金额输入DTO /// public class CalculateAmountInput { /// /// 赛事ID /// [Required(ErrorMessage = "赛事ID不能为空")] public long EventId { get; set; } /// /// 报名模式 (1-个人 2-团队) /// [Required(ErrorMessage = "报名模式不能为空")] [Range(1, 2, ErrorMessage = "报名模式只能是1(个人)或2(团队)")] public int RegistrationMode { get; set; } /// /// 报名项目列表 /// [Required(ErrorMessage = "报名项目列表不能为空")] [MinLength(1, ErrorMessage = "请至少选择一个项目")] public List Items { get; set; } } /// /// 计算报名金额项目输入DTO /// public class CalculateAmountItemInput { /// /// 项目ID /// [Required(ErrorMessage = "项目ID不能为空")] public long ProjectId { get; set; } /// /// 参赛人员数量 /// [Required(ErrorMessage = "参赛人员数量不能为空")] [Range(1, int.MaxValue, ErrorMessage = "参赛人员数量至少为1")] public int PersonCount { get; set; } } /// /// 计算报名金额输出DTO /// public class CalculateAmountOutput { /// /// 赛事收费模式 /// public ChargeMode ChargeMode { get; set; } /// /// 总金额 /// public decimal TotalAmount { get; set; } /// /// 项目费用明细 /// public List ItemDetails { get; set; } } /// /// 计算报名金额项目输出DTO /// public class CalculateAmountItemOutput { /// /// 项目ID /// public long ProjectId { get; set; } /// /// 项目名称 /// public string ProjectName { get; set; } /// /// 单价 /// public decimal UnitPrice { get; set; } /// /// 人数 /// public int PersonCount { get; set; } /// /// 小计 /// public decimal Subtotal { get; set; } } /// /// 项目组别DTO /// public class EventProjectGroupDto { /// /// 组别ID /// public long Id { get; set; } /// /// 组别名称 /// public string GroupName { get; set; } /// /// 性别要求文本 /// public string GenderRequirement { get; set; } /// /// 年龄要求文本 /// public string AgeRequirement { get; set; } } /// /// 赛事报名提交DTO /// public class SubmitRegistrationInput { /// /// 赛事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; } /// /// 联系人姓名 (个人报名时可自动从用户信息获取) /// [MaxLength(50, ErrorMessage = "联系人姓名不能超过50个字符")] public string? ContactName { get; set; } /// /// 联系人电话 (个人报名时可自动从用户信息获取) /// [RegularExpression(@"^1[3-9]\d{9}$", ErrorMessage = "请输入正确的手机号格式")] public string? ContactPhone { get; set; } /// /// 报名项目列表 /// [Required(ErrorMessage = "报名项目列表不能为空")] [MinLength(1, ErrorMessage = "请至少选择一个项目")] public List Items { get; set; } /// /// 支付方式:1-线下,2-线上 /// public int PaymentMethod { get; set; } /// /// 具体支付方式 /// public PaymentMethodType PaymentMethodType { get; set; } /// /// 优惠码 /// public string? CouponCode { get; set; } } /// /// 报名项目输入 /// public class SubmitRegistrationItemInput { /// /// 项目ID /// [Required(ErrorMessage = "项目ID不能为空")] public long ProjectId { get; set; } /// /// 组别名称 (冗余存储,也可传 GroupId) /// [MaxLength(100, ErrorMessage = "组别名称不能超过100个字符")] public string GroupName { get; set; } /// /// 组别ID (建议传ID) /// public long? GroupId { get; set; } /// /// 参赛人员列表 (个人报名时可自动从用户信息获取) /// public List? Persons { get; set; } } /// /// 参赛人员输入 /// public class PersonInput { /// /// 用户ID (可选,已有用户时使用) /// public long? UserId { get; set; } /// /// 姓名 /// [Required(ErrorMessage = "姓名不能为空")] [MaxLength(50, ErrorMessage = "姓名不能超过50个字符")] public string Name { get; set; } /// /// 身份证号 /// [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; } /// /// 性别 /// [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 PaymentInfoDto { /// /// 报名ID /// public long RegistrationId { get; set; } /// /// 实际金额 /// public decimal Amount { get; set; } /// /// 原始金额 /// public decimal OriginalAmount { get; set; } /// /// 优惠金额 /// public decimal DiscountAmount { get; set; } /// /// 支付方式 (1-线下 2-线上) /// public int PaymentMethod { get; set; } /// /// 银行账户名 (线下支付) /// public string? BankAccountName { get; set; } /// /// 银行账号 (线下支付) /// public string? BankAccountNo { get; set; } /// /// 开户行 (线下支付) /// public string? BankName { get; set; } /// /// 微信支付参数 /// public object? WechatPayParams { get; set; } } /// /// 上传凭证输入DTO /// public class UploadVoucherInput { /// /// 凭证图片URL /// [Required] public string VoucherUrl { get; set; } } /// /// 更新参赛人输入DTO /// public class UpdatePlayerInput { /// /// 参赛人员ID /// [Required(ErrorMessage = "参赛人员ID不能为空")] public long PersonId { get; set; } /// /// 姓名 /// [Required(ErrorMessage = "姓名不能为空")] [MaxLength(50, ErrorMessage = "姓名不能超过50个字符")] public string Name { get; set; } /// /// 身份证号 /// [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; } /// /// 性别 /// [Required(ErrorMessage = "性别不能为空")] public Gender Gender { get; set; } /// /// 电话 /// [RegularExpression(@"^1[3-9]\d{9}$", ErrorMessage = "请输入正确的手机号格式")] public string? Mobile { get; set; } } /// /// 已报赛事列表DTO /// public class MyEventListDto { /// /// 报名ID /// public long RegistrationId { get; set; } /// /// 赛事ID /// public long EventId { get; set; } /// /// 赛事名称 /// public string EventName { get; set; } /// /// 封面图片 /// public string CoverImage { get; set; } /// /// 支付状态 /// public int PaymentStatus { get; set; } /// /// 报名时间 /// public DateTime RegistrationTime { get; set; } /// /// 赛事报名开始时间 /// public DateTime RegistrationStartTime { get; set; } /// /// 赛事报名结束时间 /// public DateTime RegistrationEndTime { get; set; } /// /// 报名项目数 /// public int ProjectCount { get; set; } /// /// 是否需要上传素材 /// public bool IsNeedMaterial { get; set; } /// /// 资料备注 /// public string? MaterialRemark { get; set; } /// /// 资料上传开始时间 /// public DateTime? MaterialUploadStartTime { get; set; } /// /// 资料上传结束时间 /// public DateTime? MaterialUploadEndTime { get; set; } /// /// 已上传的素材URL /// public string? MaterialUrl { get; set; } /// /// 赛事状态:报名中/比赛中/已结束 /// public int EventStatus { get; set; } } /// /// 报名详情DTO /// public class RegistrationDetailDto { /// /// 报名ID /// public long RegistrationId { get; set; } /// /// 赛事ID /// public long EventId { get; set; } /// /// 赛事名称 /// public string EventName { get; set; } /// /// 封面图片 /// public string CoverImage { get; set; } /// /// 赛事状态 /// public EventStatus EventStatus { get; set; } /// /// 支付状态 /// public int PaymentStatus { get; set; } /// /// 总金额 /// public decimal TotalAmount { get; set; } /// /// 订单号 /// public string OrderNo { get; set; } /// /// 报名时间 /// public DateTime RegistrationTime { get; set; } /// /// 审核备注 /// public string? ReviewRemark { get; set; } /// /// 退款金额(根据退款规则计算得出) /// public decimal? RefundAmount { get; set; } /// /// 退款规则文本 /// public string? RefundRulesText { get; set; } /// /// 报名项目及人员 /// public List Items { get; set; } } /// /// 报名项目信息DTO /// public class RegistrationItemDto { /// /// 报名项目ID /// public long Id { get; set; } /// /// 项目名称 /// public string ProjectName { get; set; } /// /// 组别名称 /// public string GroupName { get; set; } /// /// 价格 /// public decimal Price { get; set; } /// /// 参赛人员列表 /// public List Persons { get; set; } } /// /// 报名人员信息DTO /// public class RegistrationPersonDto { /// /// 报名人员ID /// public long Id { get; set; } /// /// 姓名 /// public string Name { get; set; } /// /// 身份证号 /// public string IdCardNumber { get; set; } /// /// 性别 /// public Gender Gender { get; set; } /// /// 电话 /// public string Mobile { get; set; } } /// /// 报名状态查询DTO /// public class RegistrationStatusDto { /// /// 报名ID /// public long RegistrationId { get; set; } /// /// 支付状态 /// public int PaymentStatus { get; set; } /// /// 拒绝/取消原因 /// public string RejectReason { get; set; } } /// /// 获取支付信息输入DTO /// /// /// 用于获取赛事报名支付信息的输入参数,包含OpenId字段用于微信JSAPI支付 /// public class GetPaymentInfoInput { /// /// 报名记录ID /// [Required(ErrorMessage = "报名记录ID不能为空")] public long RegistrationId { get; set; } /// /// 微信用户OpenId /// /// /// 用于微信JSAPI支付,必须提供有效的微信用户OpenId /// 格式要求: /// - 长度:10-50个字符 /// - 允许的字符:字母、数字、下划线、连字符 /// [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; } /// /// 优惠券ID /// public long? CouponId { get; set; } } /// /// 上传素材输入DTO /// public class UploadMaterialInput { /// /// 报名记录ID /// [Required(ErrorMessage = "报名记录ID不能为空")] public long RegistrationId { get; set; } /// /// 素材文件URL /// [Required(ErrorMessage = "素材文件URL不能为空")] public string MaterialUrl { get; set; } } /// /// 选择支付方式输入DTO /// /// /// 用于选择赛事报名支付方式的输入参数 /// public class SelectPaymentMethodInput { /// /// 报名记录ID /// [Required(ErrorMessage = "报名记录ID不能为空")] public long RegistrationId { get; set; } /// /// 支付方式:1-线下支付,2-微信支付 /// [Required(ErrorMessage = "支付方式不能为空")] [Range(1, 2, ErrorMessage = "支付方式只能是1(线下)或2(微信)")] public int PaymentMethod { get; set; } /// /// 微信用户OpenId(微信支付时必填) /// /// /// 仅在选择微信支付时需要提供 /// 格式要求: /// - 长度:10-50个字符 /// - 允许的字符:字母、数字、下划线、连字符 /// [MinLength(10, ErrorMessage = "OpenId长度不能少于10个字符")] [MaxLength(50, ErrorMessage = "OpenId长度不能超过50个字符")] [RegularExpression(@"^[a-zA-Z0-9_-]+$", ErrorMessage = "OpenId格式不正确,只能包含字母、数字、下划线和连字符")] public string? OpenId { get; set; } /// /// 具体支付方式 /// public PaymentMethodType PaymentMethodType { get; set; } } /// /// 取消报名退款输入DTO /// public class CancelRegistrationRefundInput { /// /// 报名记录ID /// [Required(ErrorMessage = "报名记录ID不能为空")] public long RegistrationId { get; set; } /// /// 退款原因 /// [MaxLength(200, ErrorMessage = "退款原因不能超过200个字符")] public string? RefundReason { get; set; } /// /// 取消类型:0-全部取消,1-部分取消 /// public int CancelType { get; set; } /// /// 取消的人员ID列表(部分取消时使用) /// public List? PersonIds { get; set; } /// /// 取消的团队Key列表(部分取消时使用) /// public List? CancelTeams { get; set; } }