using System.ComponentModel.DataAnnotations; using YD_Event.Application.Event.Dtos; using YD_Event.Core.Entities; using YD_Event.Core.Enum; using Microsoft.AspNetCore.Http; namespace YD_Event.Application.Event.Dtos; /// /// 用户端赛事查询输入 /// public class UserEventQueryInput : Pagination { /// /// 赛事状态 (0-全部, 1-报名中, 2-比赛中, 3-已结束) /// public EventStatus? Status { get; set; } /// /// 赛事类型 /// public EventFormat? Type { get; set; } /// /// 时间范围开始 /// public DateTime? StartTime { get; set; } /// /// 时间范围结束 /// public DateTime? EndTime { get; set; } /// /// 关键字搜索(赛事名称) /// public string? Keyword { get; set; } } /// /// 用户端赛事列表输出 /// public class UserEventListOutput { /// /// 赛事ID /// public long Id { get; set; } /// /// 赛事名称 /// public string Name { get; set; } /// /// 封面图片 /// public string CoverImage { get; set; } /// /// 赛事状态 (报名中/比赛中/已结束) /// public string Status { get; set; } /// /// 赛事类型 (线上/线下) /// public string Type { get; set; } /// /// 报名方式 /// public string RegistrationType { get; set; } /// /// 收费模式 /// public string ChargeMode { get; set; } /// /// 报名开始时间 /// public DateTime RegistrationStartTime { get; set; } /// /// 报名结束时间 /// public DateTime RegistrationEndTime { get; set; } /// /// 比赛开始时间 /// public DateTime MatchStartTime { get; set; } /// /// 比赛结束时间 /// public DateTime MatchEndTime { get; set; } /// /// 当前用户是否可以报名参与该赛事 /// public bool CanRegister { get; set; } } /// /// 用户端赛事详情输出 /// public class UserEventDetailOutput { /// /// 赛事ID /// public long Id { get; set; } /// /// 赛事名称 /// public string Name { get; set; } /// /// 封面图片 /// public string CoverImage { get; set; } /// /// 赛事视频 /// public string? EventVideo { get; set; } /// /// 赛事状态 /// public string Status { get; set; } /// /// 赛事状态枚举 /// public YD_Event.Core.Enum.EventStatus EventStatus { get; set; } /// /// 赛事类型 (int: 0-线上, 1-线下) /// public int Type { get; set; } /// /// 报名方式 (int: 0-个人报名, 1-团队报名, 2-个人/团队报名) /// public int RegistrationType { get; set; } /// /// 积分规则名称 /// public string PointsRuleName { get; set; } /// /// 积分规则详情 /// public YD_Event.Application.Event.Dtos.PointsRuleDto? PointsRuleDetail { get; set; } /// /// 退款规则详情 /// public List? RefundRules { get; set; } /// /// 报名开始时间 /// public DateTime RegistrationStartTime { get; set; } /// /// 报名结束时间 /// public DateTime RegistrationEndTime { get; set; } /// /// 是否需要上传素材 /// public bool IsNeedMaterial { get; set; } /// /// 素材备注 /// public string? MaterialRemark { get; set; } /// /// 素材上传开始时间 /// public DateTime? MaterialUploadStartTime { get; set; } /// /// 素材上传截止时间 /// public DateTime? MaterialUploadEndTime { get; set; } /// /// 比赛开始时间 /// public DateTime MatchStartTime { get; set; } /// /// 比赛结束时间 /// public DateTime MatchEndTime { get; set; } /// /// 赛事简介/规则 /// public string Description { get; set; } /// /// 省份名称 /// public string ProvinceName { get; set; } /// /// 城市名称 /// public string CityName { get; set; } /// /// 区县名称 /// public string DistrictName { get; set; } /// /// 详细地址 /// public string Address { get; set; } /// /// 备注 /// public string? Remark { get; set; } /// /// 主办/承办单位 /// public List Units { get; set; } /// /// 报名限制配置 /// public UserEventLimitOutput? LimitConfig { get; set; } /// /// 费用配置 /// public UserEventFeeOutput? FeeConfig { get; set; } /// /// 项目列表 /// public List? Projects { get; set; } /// /// 当前用户报名状态 (未报名/已报名/审核中) /// public string UserRegistrationStatus { get; set; } /// /// 报名ID (如果已报名) /// public long? RegistrationId { get; set; } } /// /// 用户端赛事限制输出 /// public class UserEventLimitOutput { /// /// 个人项目限报数量 /// public int IndividualProjectLimit { get; set; } /// /// 团队项目限报数量 /// public int TeamProjectLimit { get; set; } } /// /// 用户端赛事费用输出 /// public class UserEventFeeOutput { /// /// 收费模式 (int: 0-免费, 1-定价(赛事), 2-单价(赛事), 3-单价(项目)) /// public int ChargeMode { get; set; } /// /// 价格 /// public decimal Price { get; set; } /// /// 收款商户名称 /// public string? MerchantName { get; set; } /// /// 统一社会信用代码 /// public string? CreditCode { get; set; } /// /// 开户行 /// public string? BankName { get; set; } /// /// 银行账号 /// public string? AccountNumber { get; set; } } /// /// 用户端赛事项目组别输出 /// public class UserEventProjectGroupOutput { /// /// 组别ID /// public long? Id { get; set; } /// /// 组别名称 /// public string? GroupName { get; set; } /// /// 出生日期起始日期 /// public DateTime? BirthDateStart { get; set; } /// /// 出生日期结束日期 /// public DateTime? BirthDateEnd { get; set; } /// /// 性别要求 (0=男, 1=女, 2=保密, 3=不限) /// public int Gender { get; set; } } /// /// 报名项目选择输出 /// public class UserEventProjectListOutput { /// /// 项目ID /// public long Id { get; set; } /// /// 项目名称 /// public string Name { get; set; } /// /// 组别名称 /// public string GroupName { get; set; } /// /// 费用 /// public decimal Fee { get; set; } /// /// 人数限制 /// public int? LimitCount { get; set; } /// /// 已报名人数 /// public int RegisteredCount { get; set; } /// /// 报名要求描述 /// public string Requirements { get; set; } /// /// 团队人数要求 (1为个人) /// public int TeamSize { get; set; } /// /// 完成人数 /// public int CompletionCount { get; set; } /// /// 完成人数模式 (0=单一值, 1=范围值) /// public int CompletionCountType { get; set; } /// /// 完成人数最小值(范围值模式) /// public int? CompletionCountMin { get; set; } /// /// 完成人数最大值(范围值模式) /// public int? CompletionCountMax { get; set; } /// /// 完成人数显示文本(如"5人"或"3-7人") /// public string? CompletionCountDisplay { get; set; } /// /// 项目类型 /// public long ProjectType { get; set; } /// /// 项目类型名称 /// public string? ProjectTypeName { get; set; } /// /// 组别列表 /// public List? Groups { get; set; } /// /// 上级项目类型名称 /// public string? ParentProjectTypeName { get; set; } /// /// 该项目的参赛队员列表 /// public List? Members { get; set; } } /// /// 团队成员搜索输入 /// public class UserMemberSearchInput { /// /// 关键字 (手机号或ID) /// public string Keyword { get; set; } } /// /// 团队成员信息输出 /// public class UserTeamMemberOutput { /// /// 用户ID /// public long UserId { get; set; } /// /// 姓名 /// public string Name { get; set; } /// /// 手机号 /// public string Mobile { get; set; } /// /// 身份证号 (脱敏显示) /// public string IdCardNumber { get; set; } /// /// 性别 /// public string Gender { get; set; } /// /// 是否符合参赛资格 /// public bool IsEligible { get; set; } /// /// 不符合原因 /// public string IneligibilityReason { get; set; } } /// /// 组别成员输入 /// public class UserGroupMemberInput { /// /// 组别ID /// public long GroupId { get; set; } /// /// 成员ID列表(单团队模式,向后兼容) /// public List MemberIds { get; set; } /// /// 团队列表(多团队模式) /// public List Teams { get; set; } } /// /// 订单预览输出 /// public class UserOrderPreviewOutput { /// /// 赛事ID /// public long EventId { get; set; } /// /// 赛事名称 /// public string EventName { get; set; } /// /// 项目列表 /// public List Projects { get; set; } /// /// 成员列表 /// public List Members { get; set; } /// /// 总金额 /// public decimal TotalAmount { get; set; } /// /// 费用明细 /// public Dictionary FeeDetails { get; set; } } /// /// 创建支付订单输入 /// public class UserCreateOrderInput { /// /// 报名ID /// public long RegistrationId { get; set; } /// /// 支付方式 (1-微信, 2-支付宝, 3-银行卡) - 已过时,使用 PaymentMethodType /// public int PaymentMethod { get; set; } /// /// 具体支付方式 /// public PaymentMethodType PaymentMethodType { get; set; } /// /// 微信OpenId (微信支付时必填) /// public string? OpenId { get; set; } /// /// 优惠券ID (可选) /// public long? CouponId { get; set; } } /// /// 用户支付结果输出 /// public class UserPaymentResultOutput { /// /// 订单号 /// public string OrderNo { get; set; } = string.Empty; /// /// 支付链接或二维码 /// public string PayUrl { get; set; } = string.Empty; /// /// 状态 /// public int Status { get; set; } /// /// 支付方式 (例如:JSAPI, NATIVE) /// public string? TradeType { get; set; } /// /// 微信Native支付参数 - 二维码链接 /// public string? QrcodeUrl { get; set; } /// /// 微信JSAPI支付参数 /// public object? WechatPayParams { get; set; } /// /// 线下支付信息 - 收款商户名称 /// public string? PayeeMerchantName { get; set; } /// /// 线下支付信息 - 收款账号信息 /// public string? PayeeAccountInfo { get; set; } /// /// 是否为免费项目 /// public bool IsFree { get; set; } } /// /// 优惠券验证输入 /// public class ValidateCouponInput { /// /// 优惠券码 /// [Required] public string CouponCode { get; set; } /// /// 赛事ID /// public long EventId { get; set; } /// /// 原始总金额 /// public decimal OriginalAmount { get; set; } } /// /// 优惠券验证输出 /// public class ValidateCouponOutput { /// /// 是否有效 /// public bool IsValid { get; set; } /// /// 优惠券ID /// public long? CouponId { get; set; } /// /// 用户优惠券ID /// public long? UserCouponId { get; set; } /// /// 优惠券名称 /// public string? CouponName { get; set; } /// /// 折扣类型 (1-满减, 2-折扣, 3-固定金额) /// public int? DiscountType { get; set; } /// /// 折扣值 /// public decimal? DiscountValue { get; set; } /// /// 优惠金额 /// public decimal? DiscountAmount { get; set; } /// /// 优惠后金额 /// public decimal? FinalAmount { get; set; } /// /// 无效原因 /// public string? InvalidReason { get; set; } } /// /// 提交报名输入 (草稿或正式提交) - 支持优惠券 /// public class UserSubmitRegistrationInput { /// /// 赛事ID /// public long EventId { get; set; } /// /// 选中的项目ID列表 /// public List ProjectIds { get; set; } /// /// 队员列表 /// public List MemberIds { get; set; } /// /// 组别成员列表 /// public List GroupMembers { get; set; } /// /// 是否保存草稿 /// public bool IsDraft { get; set; } /// /// 优惠券ID (可选) /// public long? CouponId { get; set; } /// /// 团队ID (必填) /// [Required] public long TeamId { get; set; } } #region 参赛记录相关 DTOs /// /// 参赛记录查询输入 /// public class RegistrationListQueryInput : Pagination { /// /// 赛事ID (可选) /// public long? EventId { get; set; } /// /// 状态 (可选) /// public string? Status { get; set; } // 对应 RegistrationStatus 或 PaymentStatus 组合状态 /// /// 关键字搜索 (队伍名/赛事名) /// public string? Keyword { get; set; } } /// /// 参赛记录列表项输出 /// public class RegistrationItemDTO { /// /// 报名ID /// public long RegistrationId { get; set; } /// /// 赛事名称 /// public string EventName { get; set; } /// /// 封面 /// public string CoverImage { get; set; } /// /// 赛事类型 /// public int? EventType { get; set; } /// /// 收费模式 /// public int? ChargeMode { get; set; } /// /// 赛事状态 /// public int? EventStatus { get; set; } /// /// 报名开始时间 /// public DateTime? RegistrationStartTime { get; set; } /// /// 报名结束时间 /// public DateTime? RegistrationEndTime { get; set; } /// /// 上传素材截止时间 /// public DateTime? MaterialDeadline { get; set; } /// /// 比赛开始时间 /// public DateTime? MatchStartTime { get; set; } /// /// 比赛结束时间 /// public DateTime? MatchEndTime { get; set; } /// /// 团队名称 /// public string TeamName { get; set; } /// /// 创建时间 /// public DateTime CreateTime { get; set; } /// /// 更新时间 /// public DateTime? UpdateTime { get; set; } /// /// 支付状态 (0-未支付, 1-已支付, 2-已取消, 3-已退款, 4-待审核) /// public int PayStatus { get; set; } /// /// 支付方式 (1-线下 2-线上) /// public int PaymentMethod { get; set; } /// /// 证书状态 /// public int CertStatus { get; set; } /// /// 是否有素材 /// public bool HasMaterial { get; set; } /// /// 是否有凭证 /// public bool HasVoucher { get; set; } /// /// 成员数量 /// public int MemberCount { get; set; } /// /// 允许的最大人数 /// public int MaxMember { get; set; } /// /// 支付或素材上传截止时间 /// public DateTime? ExpireTime { get; set; } } /// /// 上传素材输入 /// public class UploadMaterialInput { /// /// 文件列表 (最多5个) /// [Required] public List Files { get; set; } /// /// 素材类型 (图片/视频/其他) /// [Required] public string MaterialType { get; set; } /// /// 描述 (可选) /// public string? Description { get; set; } } /// /// 素材信息输出 /// public class MaterialDTO { /// /// 素材ID /// public string MaterialId { get; set; } /// /// OSS URL /// public string OssUrl { get; set; } /// /// 文件名 /// public string FileName { get; set; } /// /// 文件大小 /// public long FileSize { get; set; } /// /// 上传时间 /// public DateTime UploadTime { get; set; } } /// /// 上传支付凭证输入 /// public class UploadVoucherInput { /// /// 凭证图片 (单张) /// [Required] public IFormFile File { get; set; } /// /// 支付金额 /// [Required] [Range(0.01, double.MaxValue, ErrorMessage = "支付金额必须大于0")] public decimal PayAmount { get; set; } /// /// 支付时间 /// [Required] public DateTime PayTime { get; set; } } /// /// 支付凭证输出 /// public class VoucherDTO { /// /// 凭证ID /// public string VoucherId { get; set; } /// /// OSS URL /// public string OssUrl { get; set; } /// /// 审核状态 /// public string AuditStatus { get; set; } } /// /// 队员信息 DTO /// public class TeamMemberDTO { /// /// 用户ID /// public long UserId { get; set; } /// /// 真实姓名 /// public string RealName { get; set; } /// /// 手机号 /// public string Phone { get; set; } /// /// 邮箱 /// public string Email { get; set; } /// /// 角色 (队长/队员) /// public string Role { get; set; } /// /// 邀请状态 /// public string InviteStatus { get; set; } /// /// 加入时间 /// public DateTime JoinTime { get; set; } } /// /// 更换队员输入 /// public class ReplaceMemberInput { /// /// 新队员用户ID /// [Required] public long NewUserId { get; set; } /// /// 更换原因 (可选) /// public string? ReplaceReason { get; set; } } /// /// 证书信息输出 /// public class CertificateDTO { /// /// 证书URL /// public string CertUrl { get; set; } /// /// 证书编号 /// public string CertNumber { get; set; } /// /// 颁发时间 /// public DateTime IssueTime { get; set; } /// /// 过期时间 /// public DateTime? ExpireTime { get; set; } } /// /// 统一响应 DTO (泛型) /// public class ResponseDTO { /// /// 状态码 /// public int Code { get; set; } /// /// 消息 /// public string Message { get; set; } /// /// 数据 /// public T Data { get; set; } /// /// 是否成功 /// public bool Success { get; set; } } #endregion #region 阶段二功能DTO /// /// 队员验证输入 /// public class MemberValidateInput { /// /// 赛事ID /// [Required] public long EventId { get; set; } /// /// 队员ID /// [Required] public long MemberId { get; set; } /// /// 当前组内已选队员ID列表(用于年龄跨组等整组校验,兼容旧接口可不传) /// public List? MemberIds { get; set; } /// /// 组别ID /// [Required] public long GroupId { get; set; } } /// /// 队员验证输出 /// public class MemberValidateOutput { /// /// 是否有效 /// public bool IsValid { get; set; } /// /// 年龄是否有效 /// public bool AgeValid { get; set; } /// /// 性别是否有效 /// public bool GenderValid { get; set; } /// /// 报名限制是否有效 /// public bool RegistrationLimitValid { get; set; } /// /// 验证消息 /// public string Message { get; set; } } /// /// 报名限制检查输入 /// public class RegistrationLimitCheckInput { /// /// 赛事ID /// [Required] public long EventId { get; set; } /// /// 团队ID (新结构) /// public long? TeamId { get; set; } /// /// 组别队员分配 (新结构) /// public List GroupMembers { get; set; } /// /// 队员ID列表 (旧结构,向后兼容) /// public List MemberIds { get; set; } /// /// 组别ID列表 (旧结构,向后兼容) /// public List GroupIds { get; set; } /// /// 要排除的报名ID(更换队员时使用,排除当前正在更新的报名记录) /// public long? ExcludeRegistrationId { get; set; } } /// /// 报名限制详情 /// public class RegistrationLimitDetail { /// /// 队员ID /// public long MemberId { get; set; } /// /// 队员姓名 /// public string MemberName { get; set; } /// /// 限制类型 /// public string LimitType { get; set; } /// /// 限制消息 /// public string LimitMessage { get; set; } } /// /// 报名限制检查输出 /// public class RegistrationLimitCheckOutput { /// /// 是否有限制 /// public bool HasLimit { get; set; } /// /// 限制详情 /// public List LimitDetails { get; set; } } /// /// 组别队伍限制输出 /// public class GroupTeamLimitOutput { /// /// 组别ID /// public long GroupId { get; set; } /// /// 最多可报队伍数 /// public int MaxTeams { get; set; } /// /// 当前已报队伍数 /// public int CurrentTeams { get; set; } } /// /// 检查组别选择限制输入 /// public class CheckGroupSelectionLimitInput { /// /// 赛事ID /// [Required] public long EventId { get; set; } /// /// 要检查的组别ID /// [Required] public long GroupId { get; set; } /// /// 当前已选择的组别ID列表 /// public List SelectedGroupIds { get; set; } } /// /// 检查组别选择限制输出 /// public class CheckGroupSelectionLimitOutput { /// /// 是否可以选择该组别 /// public bool CanSelect { get; set; } /// /// 限制消息(如果不能选择) /// public string? LimitMessage { get; set; } /// /// 组别限制详情 /// public GroupLimitDetail? GroupLimit { get; set; } /// /// 项目限制详情 /// public ProjectLimitDetail? ProjectLimit { get; set; } /// /// 团队项目限制详情 /// public EventLimitDetail? TeamProjectLimit { get; set; } /// /// 个人项目限制详情 /// public EventLimitDetail? IndividualProjectLimit { get; set; } } /// /// 组别限制详情 /// public class GroupLimitDetail { /// /// 组别限报数 /// public int? GroupLimitCount { get; set; } /// /// 当前报名数 /// public int CurrentRegistrations { get; set; } /// /// 是否达到限制 /// public bool IsLimitReached { get; set; } } /// /// 项目限制详情 /// public class ProjectLimitDetail { /// /// 项目限报数 /// public int? ProjectLimitCount { get; set; } /// /// 当前已选择数 /// public int CurrentSelectedCount { get; set; } /// /// 是否达到限制 /// public bool IsLimitReached { get; set; } } /// /// 赛事项目限制详情 /// public class EventLimitDetail { /// /// 限报数 /// public int? LimitCount { get; set; } /// /// 当前已选择数 /// public int CurrentSelectedCount { get; set; } /// /// 是否达到限制 /// public bool IsLimitReached { get; set; } } /// /// 组别队员分配中的团队信息 /// public class GroupTeamAssignment { /// /// 团队序号(例如:1, 2, 3) /// public int TeamIndex { get; set; } /// /// 该团队的队员ID列表 /// public List MemberIds { get; set; } } /// /// 组别队员分配 /// public class GroupMemberAssignment { /// /// 组别ID /// public long GroupId { get; set; } /// /// 队员ID列表(向后兼容单团队模式) /// public List MemberIds { get; set; } /// /// 团队列表(多团队模式) /// public List Teams { get; set; } } /// /// 项目完成人数检查输入 /// public class ProjectCompletionCheckInput { /// /// 赛事ID /// [Required] public long EventId { get; set; } /// /// 组别队员分配 /// [Required] public List GroupMembers { get; set; } } /// /// 项目完成人数错误 /// public class ProjectCompletionError { /// /// 项目ID /// public long ProjectId { get; set; } /// /// 项目名称 /// public string ProjectName { get; set; } /// /// 错误类型 /// public string ErrorType { get; set; } /// /// 错误消息 /// public string ErrorMessage { get; set; } } /// /// 项目完成人数检查输出 /// public class ProjectCompletionCheckOutput { /// /// 是否有错误 /// public bool HasError { get; set; } /// /// 错误列表 /// public List Errors { get; set; } } #endregion