1183 lines
24 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.Application.Event.Dtos;
using YD_Event.Core.Entities;
using YD_Event.Core.Enum;
using Microsoft.AspNetCore.Http;
namespace YD_Event.Application.Event.Dtos;
/// <summary>
/// 用户端赛事查询输入
/// </summary>
public class UserEventQueryInput : Pagination
{
/// <summary>
/// 赛事状态 (0-全部, 1-报名中, 2-比赛中, 3-已结束)
/// </summary>
public EventStatus? Status { get; set; }
/// <summary>
/// 赛事类型
/// </summary>
public EventFormat? Type { get; set; }
/// <summary>
/// 时间范围开始
/// </summary>
public DateTime? StartTime { get; set; }
/// <summary>
/// 时间范围结束
/// </summary>
public DateTime? EndTime { get; set; }
/// <summary>
/// 关键字搜索(赛事名称)
/// </summary>
public string? Keyword { get; set; }
}
/// <summary>
/// 用户端赛事列表输出
/// </summary>
public class UserEventListOutput
{
/// <summary>
/// 赛事ID
/// </summary>
public long Id { get; set; }
/// <summary>
/// 赛事名称
/// </summary>
public string Name { get; set; }
/// <summary>
/// 封面图片
/// </summary>
public string CoverImage { get; set; }
/// <summary>
/// 赛事状态 (报名中/比赛中/已结束)
/// </summary>
public string Status { get; set; }
/// <summary>
/// 赛事类型 (线上/线下)
/// </summary>
public string Type { 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 bool CanRegister { get; set; }
}
/// <summary>
/// 用户端赛事详情输出
/// </summary>
public class UserEventDetailOutput
{
/// <summary>
/// 赛事ID
/// </summary>
public long Id { get; set; }
/// <summary>
/// 赛事名称
/// </summary>
public string Name { get; set; }
/// <summary>
/// 封面图片
/// </summary>
public string CoverImage { get; set; }
/// <summary>
/// 赛事视频
/// </summary>
public string? EventVideo { get; set; }
/// <summary>
/// 赛事状态
/// </summary>
public string Status { get; set; }
/// <summary>
/// 赛事类型
/// </summary>
public string Type { get; set; }
/// <summary>
/// 报名方式
/// </summary>
public string RegistrationType { get; set; }
/// <summary>
/// 积分规则名称
/// </summary>
public string PointsRuleName { get; set; }
/// <summary>
/// 报名开始时间
/// </summary>
public DateTime RegistrationStartTime { get; set; }
/// <summary>
/// 报名结束时间
/// </summary>
public DateTime RegistrationEndTime { get; set; }
/// <summary>
/// 是否需要上传素材
/// </summary>
public bool IsNeedMaterial { get; set; }
/// <summary>
/// 素材备注
/// </summary>
public string? MaterialRemark { get; set; }
/// <summary>
/// 素材上传截止时间
/// </summary>
public DateTime? MaterialUploadEndTime { get; set; }
/// <summary>
/// 比赛开始时间
/// </summary>
public DateTime MatchStartTime { get; set; }
/// <summary>
/// 比赛结束时间
/// </summary>
public DateTime MatchEndTime { get; set; }
/// <summary>
/// 赛事简介/规则
/// </summary>
public string Description { get; set; }
/// <summary>
/// 地址
/// </summary>
public string Address { get; set; }
/// <summary>
/// 备注
/// </summary>
public string? Remark { get; set; }
/// <summary>
/// 主办/承办单位
/// </summary>
public List<EventUnitDto> Units { get; set; }
/// <summary>
/// 报名限制配置
/// </summary>
public UserEventLimitOutput? LimitConfig { get; set; }
/// <summary>
/// 费用配置
/// </summary>
public UserEventFeeOutput? FeeConfig { get; set; }
/// <summary>
/// 项目列表
/// </summary>
public List<UserEventProjectListOutput>? Projects { get; set; }
/// <summary>
/// 当前用户报名状态 (未报名/已报名/审核中)
/// </summary>
public string UserRegistrationStatus { get; set; }
/// <summary>
/// 报名ID (如果已报名)
/// </summary>
public long? RegistrationId { get; set; }
}
/// <summary>
/// 用户端赛事限制输出
/// </summary>
public class UserEventLimitOutput
{
/// <summary>
/// 个人项目限报数量
/// </summary>
public int IndividualProjectLimit { get; set; }
/// <summary>
/// 团队项目限报数量
/// </summary>
public int TeamProjectLimit { get; set; }
}
/// <summary>
/// 用户端赛事费用输出
/// </summary>
public class UserEventFeeOutput
{
/// <summary>
/// 收费模式
/// </summary>
public string ChargeMode { get; set; }
/// <summary>
/// 价格
/// </summary>
public decimal Price { get; set; }
}
/// <summary>
/// 用户端赛事项目组别输出
/// </summary>
public class UserEventProjectGroupOutput
{
/// <summary>
/// 组别ID
/// </summary>
public long? Id { get; set; }
/// <summary>
/// 组别名称
/// </summary>
public string? GroupName { get; set; }
/// <summary>
/// 出生日期起始日期
/// </summary>
public DateTime? BirthDateStart { get; set; }
/// <summary>
/// 出生日期结束日期
/// </summary>
public DateTime? BirthDateEnd { get; set; }
/// <summary>
/// 性别要求
/// </summary>
public string? Gender { get; set; }
}
/// <summary>
/// 报名项目选择输出
/// </summary>
public class UserEventProjectListOutput
{
/// <summary>
/// 项目ID
/// </summary>
public long Id { get; set; }
/// <summary>
/// 项目名称
/// </summary>
public string Name { get; set; }
/// <summary>
/// 组别名称
/// </summary>
public string GroupName { get; set; }
/// <summary>
/// 费用
/// </summary>
public decimal Fee { get; set; }
/// <summary>
/// 人数限制
/// </summary>
public int? LimitCount { get; set; }
/// <summary>
/// 已报名人数
/// </summary>
public int RegisteredCount { get; set; }
/// <summary>
/// 报名要求描述
/// </summary>
public string Requirements { get; set; }
/// <summary>
/// 团队人数要求 (1为个人)
/// </summary>
public int TeamSize { get; set; }
/// <summary>
/// 完成人数
/// </summary>
public int CompletionCount { get; set; }
/// <summary>
/// 项目类型名称
/// </summary>
public string? ProjectTypeName { get; set; }
/// <summary>
/// 组别列表
/// </summary>
public List<UserEventProjectGroupOutput>? Groups { get; set; }
/// <summary>
/// 上级项目类型名称
/// </summary>
public string? ParentProjectTypeName { get; set; }
/// <summary>
/// 该项目的参赛队员列表
/// </summary>
public List<UserTeamMemberOutput>? Members { get; set; }
}
/// <summary>
/// 团队成员搜索输入
/// </summary>
public class UserMemberSearchInput
{
/// <summary>
/// 关键字 (手机号或ID)
/// </summary>
public string Keyword { get; set; }
}
/// <summary>
/// 团队成员信息输出
/// </summary>
public class UserTeamMemberOutput
{
/// <summary>
/// 用户ID
/// </summary>
public long UserId { get; set; }
/// <summary>
/// 姓名
/// </summary>
public string Name { get; set; }
/// <summary>
/// 手机号
/// </summary>
public string Mobile { get; set; }
/// <summary>
/// 身份证号 (脱敏显示)
/// </summary>
public string IdCardNumber { get; set; }
/// <summary>
/// 性别
/// </summary>
public string Gender { get; set; }
/// <summary>
/// 是否符合参赛资格
/// </summary>
public bool IsEligible { get; set; }
/// <summary>
/// 不符合原因
/// </summary>
public string IneligibilityReason { get; set; }
}
/// <summary>
/// 组别成员输入
/// </summary>
public class UserGroupMemberInput
{
/// <summary>
/// 组别ID
/// </summary>
public long GroupId { get; set; }
/// <summary>
/// 成员ID列表
/// </summary>
public List<long> MemberIds { get; set; }
}
/// <summary>
/// 订单预览输出
/// </summary>
public class UserOrderPreviewOutput
{
/// <summary>
/// 赛事ID
/// </summary>
public long EventId { get; set; }
/// <summary>
/// 赛事名称
/// </summary>
public string EventName { get; set; }
/// <summary>
/// 项目列表
/// </summary>
public List<UserEventProjectListOutput> Projects { get; set; }
/// <summary>
/// 成员列表
/// </summary>
public List<UserTeamMemberOutput> Members { get; set; }
/// <summary>
/// 总金额
/// </summary>
public decimal TotalAmount { get; set; }
/// <summary>
/// 费用明细
/// </summary>
public Dictionary<string, decimal> FeeDetails { get; set; }
}
/// <summary>
/// 创建支付订单输入
/// </summary>
public class UserCreateOrderInput
{
/// <summary>
/// 报名ID
/// </summary>
public long RegistrationId { get; set; }
/// <summary>
/// 支付方式 (1-微信, 2-支付宝, 3-银行卡)
/// </summary>
public int PaymentMethod { get; set; }
/// <summary>
/// 优惠券ID (可选)
/// </summary>
public long? CouponId { get; set; }
}
/// <summary>
/// 用户支付结果输出
/// </summary>
public class UserPaymentResultOutput
{
/// <summary>
/// 订单号
/// </summary>
public string OrderNo { get; set; }
/// <summary>
/// 支付链接或二维码
/// </summary>
public string PayUrl { get; set; }
/// <summary>
/// 状态
/// </summary>
public int Status { get; set; }
/// <summary>
/// 支付方式 (例如:JSAPI, NATIVE)
/// </summary>
public string? TradeType { get; set; }
/// <summary>
/// 微信Native支付参数 - 二维码链接
/// </summary>
public string? QrcodeUrl { get; set; }
/// <summary>
/// 微信JSAPI支付参数 - AppId
/// </summary>
public string? AppId { get; set; }
/// <summary>
/// 微信JSAPI支付参数 - 时间戳
/// </summary>
public string? TimeStamp { get; set; }
/// <summary>
/// 微信JSAPI支付参数 - 随机字符串
/// </summary>
public string? NonceStr { get; set; }
/// <summary>
/// 微信JSAPI支付参数 - 订单详情扩展字符串
/// </summary>
public string? Package { get; set; }
/// <summary>
/// 微信JSAPI支付参数 - 签名方式
/// </summary>
public string? SignType { get; set; }
/// <summary>
/// 微信JSAPI支付参数 - 签名
/// </summary>
public string? PaySign { get; set; }
/// <summary>
/// 是否为免费项目
/// </summary>
public bool IsFree { get; set; }
}
/// <summary>
/// 优惠券验证输入
/// </summary>
public class ValidateCouponInput
{
/// <summary>
/// 优惠券码
/// </summary>
[Required]
public string CouponCode { get; set; }
/// <summary>
/// 赛事ID
/// </summary>
public long EventId { get; set; }
/// <summary>
/// 原始总金额
/// </summary>
public decimal OriginalAmount { get; set; }
}
/// <summary>
/// 优惠券验证输出
/// </summary>
public class ValidateCouponOutput
{
/// <summary>
/// 是否有效
/// </summary>
public bool IsValid { get; set; }
/// <summary>
/// 优惠券ID
/// </summary>
public long? CouponId { get; set; }
/// <summary>
/// 优惠券名称
/// </summary>
public string? CouponName { get; set; }
/// <summary>
/// 折扣类型 (1-满减, 2-折扣, 3-固定金额)
/// </summary>
public int? DiscountType { get; set; }
/// <summary>
/// 折扣值
/// </summary>
public decimal? DiscountValue { get; set; }
/// <summary>
/// 优惠金额
/// </summary>
public decimal? DiscountAmount { get; set; }
/// <summary>
/// 优惠后金额
/// </summary>
public decimal? FinalAmount { get; set; }
/// <summary>
/// 无效原因
/// </summary>
public string? InvalidReason { get; set; }
}
/// <summary>
/// 提交报名输入 (草稿或正式提交) - 支持优惠券
/// </summary>
public class UserSubmitRegistrationInput
{
/// <summary>
/// 赛事ID
/// </summary>
public long EventId { get; set; }
/// <summary>
/// 选中的项目ID列表
/// </summary>
public List<long> ProjectIds { get; set; }
/// <summary>
/// 队员列表
/// </summary>
public List<long> MemberIds { get; set; }
/// <summary>
/// 组别成员列表
/// </summary>
public List<UserGroupMemberInput> GroupMembers { get; set; }
/// <summary>
/// 是否保存草稿
/// </summary>
public bool IsDraft { get; set; }
/// <summary>
/// 优惠券ID (可选)
/// </summary>
public long? CouponId { get; set; }
}
#region 参赛记录相关 DTOs
/// <summary>
/// 参赛记录查询输入
/// </summary>
public class RegistrationListQueryInput : Pagination
{
/// <summary>
/// 赛事ID (可选)
/// </summary>
public long? EventId { get; set; }
/// <summary>
/// 状态 (可选)
/// </summary>
public string? Status { get; set; } // 对应 RegistrationStatus 或 PaymentStatus 组合状态
/// <summary>
/// 关键字搜索 (队伍名/赛事名)
/// </summary>
public string? Keyword { get; set; }
}
/// <summary>
/// 参赛记录列表项输出
/// </summary>
public class RegistrationItemDTO
{
/// <summary>
/// 报名ID
/// </summary>
public long RegistrationId { get; set; }
/// <summary>
/// 赛事名称
/// </summary>
public string EventName { get; set; }
/// <summary>
/// 团队名称
/// </summary>
public string TeamName { get; set; }
/// <summary>
/// 综合状态描述 (待付款, 待上传素材, 已取消, 已报名, 待审核)
/// </summary>
public string Status { get; set; }
/// <summary>
/// 创建时间
/// </summary>
public DateTime CreateTime { get; set; }
/// <summary>
/// 更新时间
/// </summary>
public DateTime? UpdateTime { get; set; }
/// <summary>
/// 支付状态
/// </summary>
public string PayStatus { get; set; }
/// <summary>
/// 证书状态
/// </summary>
public string CertStatus { get; set; }
/// <summary>
/// 是否有素材
/// </summary>
public bool HasMaterial { get; set; }
/// <summary>
/// 是否有凭证
/// </summary>
public bool HasVoucher { get; set; }
/// <summary>
/// 成员数量
/// </summary>
public int MemberCount { get; set; }
/// <summary>
/// 允许的最大人数
/// </summary>
public int MaxMember { get; set; }
/// <summary>
/// 支付或素材上传截止时间
/// </summary>
public DateTime? ExpireTime { get; set; }
}
/// <summary>
/// 上传素材输入
/// </summary>
public class UploadMaterialInput
{
/// <summary>
/// 文件列表 (最多5个)
/// </summary>
[Required]
public List<IFormFile> Files { get; set; }
/// <summary>
/// 素材类型 (图片/视频/其他)
/// </summary>
[Required]
public string MaterialType { get; set; }
/// <summary>
/// 描述 (可选)
/// </summary>
public string? Description { get; set; }
}
/// <summary>
/// 素材信息输出
/// </summary>
public class MaterialDTO
{
/// <summary>
/// 素材ID
/// </summary>
public string MaterialId { get; set; }
/// <summary>
/// OSS URL
/// </summary>
public string OssUrl { get; set; }
/// <summary>
/// 文件名
/// </summary>
public string FileName { get; set; }
/// <summary>
/// 文件大小
/// </summary>
public long FileSize { get; set; }
/// <summary>
/// 上传时间
/// </summary>
public DateTime UploadTime { get; set; }
}
/// <summary>
/// 上传支付凭证输入
/// </summary>
public class UploadVoucherInput
{
/// <summary>
/// 凭证图片 (单张)
/// </summary>
[Required]
public IFormFile File { get; set; }
/// <summary>
/// 支付金额
/// </summary>
[Required]
public decimal PayAmount { get; set; }
/// <summary>
/// 支付时间
/// </summary>
[Required]
public DateTime PayTime { get; set; }
/// <summary>
/// 支付渠道 (微信/支付宝/银行转账)
/// </summary>
[Required]
public string PayChannel { get; set; }
/// <summary>
/// 交易流水号 (可选)
/// </summary>
public string? TransactionId { get; set; }
}
/// <summary>
/// 支付凭证输出
/// </summary>
public class VoucherDTO
{
/// <summary>
/// 凭证ID
/// </summary>
public string VoucherId { get; set; }
/// <summary>
/// OSS URL
/// </summary>
public string OssUrl { get; set; }
/// <summary>
/// 审核状态
/// </summary>
public string AuditStatus { get; set; }
}
/// <summary>
/// 队员信息 DTO
/// </summary>
public class TeamMemberDTO
{
/// <summary>
/// 用户ID
/// </summary>
public long UserId { get; set; }
/// <summary>
/// 真实姓名
/// </summary>
public string RealName { get; set; }
/// <summary>
/// 手机号
/// </summary>
public string Phone { get; set; }
/// <summary>
/// 邮箱
/// </summary>
public string Email { get; set; }
/// <summary>
/// 角色 (队长/队员)
/// </summary>
public string Role { get; set; }
/// <summary>
/// 邀请状态
/// </summary>
public string InviteStatus { get; set; }
/// <summary>
/// 加入时间
/// </summary>
public DateTime JoinTime { get; set; }
}
/// <summary>
/// 更换队员输入
/// </summary>
public class ReplaceMemberInput
{
/// <summary>
/// 新队员用户ID
/// </summary>
[Required]
public long NewUserId { get; set; }
/// <summary>
/// 更换原因 (可选)
/// </summary>
public string? ReplaceReason { get; set; }
}
/// <summary>
/// 证书信息输出
/// </summary>
public class CertificateDTO
{
/// <summary>
/// 证书URL
/// </summary>
public string CertUrl { get; set; }
/// <summary>
/// 证书编号
/// </summary>
public string CertNumber { get; set; }
/// <summary>
/// 颁发时间
/// </summary>
public DateTime IssueTime { get; set; }
/// <summary>
/// 过期时间
/// </summary>
public DateTime? ExpireTime { get; set; }
}
/// <summary>
/// 统一响应 DTO (泛型)
/// </summary>
public class ResponseDTO<T>
{
/// <summary>
/// 状态码
/// </summary>
public int Code { get; set; }
/// <summary>
/// 消息
/// </summary>
public string Message { get; set; }
/// <summary>
/// 数据
/// </summary>
public T Data { get; set; }
/// <summary>
/// 是否成功
/// </summary>
public bool Success { get; set; }
}
#endregion
#region 阶段二功能DTO
/// <summary>
/// 队员验证输入
/// </summary>
public class MemberValidateInput
{
/// <summary>
/// 赛事ID
/// </summary>
[Required]
public long EventId { get; set; }
/// <summary>
/// 队员ID
/// </summary>
[Required]
public long MemberId { get; set; }
/// <summary>
/// 组别ID
/// </summary>
[Required]
public long GroupId { get; set; }
}
/// <summary>
/// 队员验证输出
/// </summary>
public class MemberValidateOutput
{
/// <summary>
/// 是否有效
/// </summary>
public bool IsValid { get; set; }
/// <summary>
/// 年龄是否有效
/// </summary>
public bool AgeValid { get; set; }
/// <summary>
/// 性别是否有效
/// </summary>
public bool GenderValid { get; set; }
/// <summary>
/// 报名限制是否有效
/// </summary>
public bool RegistrationLimitValid { get; set; }
/// <summary>
/// 验证消息
/// </summary>
public string Message { get; set; }
}
/// <summary>
/// 报名限制检查输入
/// </summary>
public class RegistrationLimitCheckInput
{
/// <summary>
/// 赛事ID
/// </summary>
[Required]
public long EventId { get; set; }
/// <summary>
/// 队员ID列表
/// </summary>
[Required]
public List<long> MemberIds { get; set; }
/// <summary>
/// 组别ID列表
/// </summary>
[Required]
public List<long> GroupIds { get; set; }
}
/// <summary>
/// 报名限制详情
/// </summary>
public class RegistrationLimitDetail
{
/// <summary>
/// 队员ID
/// </summary>
public long MemberId { get; set; }
/// <summary>
/// 队员姓名
/// </summary>
public string MemberName { get; set; }
/// <summary>
/// 限制类型
/// </summary>
public string LimitType { get; set; }
/// <summary>
/// 限制消息
/// </summary>
public string LimitMessage { get; set; }
}
/// <summary>
/// 报名限制检查输出
/// </summary>
public class RegistrationLimitCheckOutput
{
/// <summary>
/// 是否有限制
/// </summary>
public bool HasLimit { get; set; }
/// <summary>
/// 限制详情
/// </summary>
public List<RegistrationLimitDetail> LimitDetails { get; set; }
}
/// <summary>
/// 组别队伍限制输出
/// </summary>
public class GroupTeamLimitOutput
{
/// <summary>
/// 组别ID
/// </summary>
public long GroupId { get; set; }
/// <summary>
/// 最多可报队伍数
/// </summary>
public int MaxTeams { get; set; }
/// <summary>
/// 当前已报队伍数
/// </summary>
public int CurrentTeams { get; set; }
}
/// <summary>
/// 组别队员分配
/// </summary>
public class GroupMemberAssignment
{
/// <summary>
/// 组别ID
/// </summary>
public long GroupId { get; set; }
/// <summary>
/// 队员ID列表
/// </summary>
public List<long> MemberIds { get; set; }
}
/// <summary>
/// 项目完成人数检查输入
/// </summary>
public class ProjectCompletionCheckInput
{
/// <summary>
/// 赛事ID
/// </summary>
[Required]
public long EventId { get; set; }
/// <summary>
/// 组别队员分配
/// </summary>
[Required]
public List<GroupMemberAssignment> GroupMembers { get; set; }
}
/// <summary>
/// 项目完成人数错误
/// </summary>
public class ProjectCompletionError
{
/// <summary>
/// 项目ID
/// </summary>
public long ProjectId { get; set; }
/// <summary>
/// 项目名称
/// </summary>
public string ProjectName { get; set; }
/// <summary>
/// 错误类型
/// </summary>
public string ErrorType { get; set; }
/// <summary>
/// 错误消息
/// </summary>
public string ErrorMessage { get; set; }
}
/// <summary>
/// 项目完成人数检查输出
/// </summary>
public class ProjectCompletionCheckOutput
{
/// <summary>
/// 是否有错误
/// </summary>
public bool HasError { get; set; }
/// <summary>
/// 错误列表
/// </summary>
public List<ProjectCompletionError> Errors { get; set; }
}
#endregion