1110 lines
26 KiB
C#
1110 lines
26 KiB
C#
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 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 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>
|
||
/// 组别列表
|
||
/// </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; }
|
||
}
|