2026-03-14 05:19:40 +08:00
|
|
|
|
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
|
|
|
|
|
|
{
|
2026-03-18 13:47:34 +08:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 赛事ID
|
|
|
|
|
|
/// </summary>
|
2026-03-14 05:19:40 +08:00
|
|
|
|
public long Id { get; set; }
|
2026-03-18 13:47:34 +08:00
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 赛事名称
|
|
|
|
|
|
/// </summary>
|
2026-03-14 05:19:40 +08:00
|
|
|
|
public string Name { get; set; }
|
2026-03-18 13:47:34 +08:00
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 封面图片
|
|
|
|
|
|
/// </summary>
|
2026-03-14 05:19:40 +08:00
|
|
|
|
public string CoverImage { get; set; }
|
2026-03-18 13:47:34 +08:00
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 赛事状态 (报名中/比赛中/已结束)
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public string Status { get; set; }
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 赛事类型 (线上/线下)
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public string Type { get; set; }
|
|
|
|
|
|
|
2026-04-06 09:21:47 +08:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 报名方式
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public string RegistrationType { get; set; }
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 收费模式
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public string ChargeMode { get; set; }
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 报名开始时间
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public DateTime RegistrationStartTime { get; set; }
|
|
|
|
|
|
|
2026-03-18 13:47:34 +08:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 报名结束时间
|
|
|
|
|
|
/// </summary>
|
2026-03-14 05:19:40 +08:00
|
|
|
|
public DateTime RegistrationEndTime { get; set; }
|
2026-03-18 13:47:34 +08:00
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 比赛开始时间
|
|
|
|
|
|
/// </summary>
|
2026-03-14 05:19:40 +08:00
|
|
|
|
public DateTime MatchStartTime { get; set; }
|
2026-03-18 13:47:34 +08:00
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 比赛结束时间
|
|
|
|
|
|
/// </summary>
|
2026-03-14 05:19:40 +08:00
|
|
|
|
public DateTime MatchEndTime { get; set; }
|
2026-03-26 23:08:22 +08:00
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 当前用户是否可以报名参与该赛事
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public bool CanRegister { get; set; }
|
2026-03-14 05:19:40 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 用户端赛事详情输出
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public class UserEventDetailOutput
|
|
|
|
|
|
{
|
2026-03-18 13:47:34 +08:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 赛事ID
|
|
|
|
|
|
/// </summary>
|
2026-03-14 05:19:40 +08:00
|
|
|
|
public long Id { get; set; }
|
2026-03-18 13:47:34 +08:00
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 赛事名称
|
|
|
|
|
|
/// </summary>
|
2026-03-14 05:19:40 +08:00
|
|
|
|
public string Name { get; set; }
|
2026-03-18 13:47:34 +08:00
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 封面图片
|
|
|
|
|
|
/// </summary>
|
2026-03-14 05:19:40 +08:00
|
|
|
|
public string CoverImage { get; set; }
|
2026-03-18 13:47:34 +08:00
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 赛事视频
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public string? EventVideo { get; set; }
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 赛事状态
|
|
|
|
|
|
/// </summary>
|
2026-03-14 05:19:40 +08:00
|
|
|
|
public string Status { get; set; }
|
2026-03-18 13:47:34 +08:00
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 赛事类型
|
|
|
|
|
|
/// </summary>
|
2026-03-14 05:19:40 +08:00
|
|
|
|
public string Type { get; set; }
|
2026-03-18 13:47:34 +08:00
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 报名方式
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public string RegistrationType { get; set; }
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 积分规则名称
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public string PointsRuleName { get; set; }
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 报名开始时间
|
|
|
|
|
|
/// </summary>
|
2026-03-14 05:19:40 +08:00
|
|
|
|
public DateTime RegistrationStartTime { get; set; }
|
2026-03-18 13:47:34 +08:00
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 报名结束时间
|
|
|
|
|
|
/// </summary>
|
2026-03-14 05:19:40 +08:00
|
|
|
|
public DateTime RegistrationEndTime { get; set; }
|
2026-03-18 13:47:34 +08:00
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 是否需要上传素材
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public bool IsNeedMaterial { get; set; }
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 素材备注
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public string? MaterialRemark { get; set; }
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 素材上传截止时间
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public DateTime? MaterialUploadEndTime { get; set; }
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 比赛开始时间
|
|
|
|
|
|
/// </summary>
|
2026-03-14 05:19:40 +08:00
|
|
|
|
public DateTime MatchStartTime { get; set; }
|
2026-03-18 13:47:34 +08:00
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 比赛结束时间
|
|
|
|
|
|
/// </summary>
|
2026-03-14 05:19:40 +08:00
|
|
|
|
public DateTime MatchEndTime { get; set; }
|
2026-03-18 13:47:34 +08:00
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 赛事简介/规则
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public string Description { get; set; }
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 地址
|
|
|
|
|
|
/// </summary>
|
2026-03-14 05:19:40 +08:00
|
|
|
|
public string Address { get; set; }
|
2026-03-18 13:47:34 +08:00
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 备注
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public string? Remark { get; set; }
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 主办/承办单位
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public List<EventUnitDto> Units { get; set; }
|
2026-03-14 05:19:40 +08:00
|
|
|
|
|
2026-03-18 13:47:34 +08:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 报名限制配置
|
|
|
|
|
|
/// </summary>
|
2026-03-14 05:19:40 +08:00
|
|
|
|
public UserEventLimitOutput? LimitConfig { get; set; }
|
2026-03-18 13:47:34 +08:00
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 费用配置
|
|
|
|
|
|
/// </summary>
|
2026-03-14 05:19:40 +08:00
|
|
|
|
public UserEventFeeOutput? FeeConfig { get; set; }
|
2026-03-18 13:47:34 +08:00
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 项目列表
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public List<UserEventProjectListOutput>? Projects { get; set; }
|
2026-03-14 05:19:40 +08:00
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 当前用户报名状态 (未报名/已报名/审核中)
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public string UserRegistrationStatus { get; set; }
|
2026-03-18 13:47:34 +08:00
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 报名ID (如果已报名)
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public long? RegistrationId { get; set; }
|
2026-03-14 05:19:40 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2026-03-18 13:47:34 +08:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 用户端赛事限制输出
|
|
|
|
|
|
/// </summary>
|
2026-03-14 05:19:40 +08:00
|
|
|
|
public class UserEventLimitOutput
|
|
|
|
|
|
{
|
2026-03-18 13:47:34 +08:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 个人项目限报数量
|
|
|
|
|
|
/// </summary>
|
2026-03-14 05:19:40 +08:00
|
|
|
|
public int IndividualProjectLimit { get; set; }
|
2026-03-18 13:47:34 +08:00
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 团队项目限报数量
|
|
|
|
|
|
/// </summary>
|
2026-03-14 05:19:40 +08:00
|
|
|
|
public int TeamProjectLimit { get; set; }
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2026-03-18 13:47:34 +08:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 用户端赛事费用输出
|
|
|
|
|
|
/// </summary>
|
2026-03-14 05:19:40 +08:00
|
|
|
|
public class UserEventFeeOutput
|
|
|
|
|
|
{
|
2026-03-18 13:47:34 +08:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 收费模式
|
|
|
|
|
|
/// </summary>
|
2026-03-14 05:19:40 +08:00
|
|
|
|
public string ChargeMode { get; set; }
|
2026-03-18 13:47:34 +08:00
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 价格
|
|
|
|
|
|
/// </summary>
|
2026-03-14 05:19:40 +08:00
|
|
|
|
public decimal Price { get; set; }
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2026-04-01 10:12:06 +08:00
|
|
|
|
/// <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>
|
2026-04-06 14:13:43 +08:00
|
|
|
|
/// 性别要求 (0=男, 1=女, 2=保密, 3=不限)
|
2026-04-01 10:12:06 +08:00
|
|
|
|
/// </summary>
|
2026-04-06 14:13:43 +08:00
|
|
|
|
public int Gender { get; set; }
|
2026-04-01 10:12:06 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2026-03-14 05:19:40 +08:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 报名项目选择输出
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public class UserEventProjectListOutput
|
|
|
|
|
|
{
|
2026-03-18 13:47:34 +08:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 项目ID
|
|
|
|
|
|
/// </summary>
|
2026-03-14 05:19:40 +08:00
|
|
|
|
public long Id { get; set; }
|
2026-03-18 13:47:34 +08:00
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 项目名称
|
|
|
|
|
|
/// </summary>
|
2026-03-14 05:19:40 +08:00
|
|
|
|
public string Name { get; set; }
|
2026-03-18 13:47:34 +08:00
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 组别名称
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public string GroupName { get; set; }
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 费用
|
|
|
|
|
|
/// </summary>
|
2026-03-14 05:19:40 +08:00
|
|
|
|
public decimal Fee { get; set; }
|
2026-03-18 13:47:34 +08:00
|
|
|
|
|
|
|
|
|
|
/// <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; }
|
2026-04-01 10:12:06 +08:00
|
|
|
|
|
2026-04-13 03:44:49 +08:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 项目类型
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public long ProjectType { get; set; }
|
|
|
|
|
|
|
2026-04-01 10:12:06 +08:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 项目类型名称
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public string? ProjectTypeName { get; set; }
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 组别列表
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public List<UserEventProjectGroupOutput>? Groups { get; set; }
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 上级项目类型名称
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public string? ParentProjectTypeName { get; set; }
|
2026-04-01 13:04:41 +08:00
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 该项目的参赛队员列表
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public List<UserTeamMemberOutput>? Members { get; set; }
|
2026-03-14 05:19:40 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 团队成员搜索输入
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public class UserMemberSearchInput
|
|
|
|
|
|
{
|
2026-03-18 13:47:34 +08:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 关键字 (手机号或ID)
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public string Keyword { get; set; }
|
2026-03-14 05:19:40 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 团队成员信息输出
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public class UserTeamMemberOutput
|
|
|
|
|
|
{
|
2026-03-18 13:47:34 +08:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 用户ID
|
|
|
|
|
|
/// </summary>
|
2026-03-14 05:19:40 +08:00
|
|
|
|
public long UserId { get; set; }
|
2026-03-18 13:47:34 +08:00
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 姓名
|
|
|
|
|
|
/// </summary>
|
2026-03-14 05:19:40 +08:00
|
|
|
|
public string Name { get; set; }
|
2026-03-18 13:47:34 +08:00
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 手机号
|
|
|
|
|
|
/// </summary>
|
2026-03-14 05:19:40 +08:00
|
|
|
|
public string Mobile { get; set; }
|
2026-03-18 13:47:34 +08:00
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 身份证号 (脱敏显示)
|
|
|
|
|
|
/// </summary>
|
2026-03-25 09:09:45 +08:00
|
|
|
|
public string IdCardNumber { get; set; }
|
2026-03-18 13:47:34 +08:00
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 性别
|
|
|
|
|
|
/// </summary>
|
2026-03-14 05:19:40 +08:00
|
|
|
|
public string Gender { get; set; }
|
2026-03-18 13:47:34 +08:00
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 是否符合参赛资格
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public bool IsEligible { get; set; }
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 不符合原因
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public string IneligibilityReason { get; set; }
|
2026-03-14 05:19:40 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2026-04-01 10:12:06 +08:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 组别成员输入
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public class UserGroupMemberInput
|
|
|
|
|
|
{
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 组别ID
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public long GroupId { get; set; }
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 成员ID列表
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public List<long> MemberIds { get; set; }
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2026-03-14 05:19:40 +08:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 订单预览输出
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public class UserOrderPreviewOutput
|
|
|
|
|
|
{
|
2026-03-18 13:47:34 +08:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 赛事ID
|
|
|
|
|
|
/// </summary>
|
2026-03-14 05:19:40 +08:00
|
|
|
|
public long EventId { get; set; }
|
2026-03-18 13:47:34 +08:00
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 赛事名称
|
|
|
|
|
|
/// </summary>
|
2026-03-14 05:19:40 +08:00
|
|
|
|
public string EventName { get; set; }
|
2026-03-18 13:47:34 +08:00
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 项目列表
|
|
|
|
|
|
/// </summary>
|
2026-03-14 05:19:40 +08:00
|
|
|
|
public List<UserEventProjectListOutput> Projects { get; set; }
|
2026-03-18 13:47:34 +08:00
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 成员列表
|
|
|
|
|
|
/// </summary>
|
2026-03-14 05:19:40 +08:00
|
|
|
|
public List<UserTeamMemberOutput> Members { get; set; }
|
2026-03-18 13:47:34 +08:00
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 总金额
|
|
|
|
|
|
/// </summary>
|
2026-03-14 05:19:40 +08:00
|
|
|
|
public decimal TotalAmount { get; set; }
|
2026-03-18 13:47:34 +08:00
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 费用明细
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public Dictionary<string, decimal> FeeDetails { get; set; }
|
2026-03-14 05:19:40 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 创建支付订单输入
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public class UserCreateOrderInput
|
|
|
|
|
|
{
|
2026-03-18 13:47:34 +08:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 报名ID
|
|
|
|
|
|
/// </summary>
|
2026-03-14 05:19:40 +08:00
|
|
|
|
public long RegistrationId { get; set; }
|
2026-03-18 13:47:34 +08:00
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
2026-04-13 13:23:00 +08:00
|
|
|
|
/// 支付方式 (1-微信, 2-支付宝, 3-银行卡) - 已过时,使用 PaymentMethodType
|
2026-03-18 13:47:34 +08:00
|
|
|
|
/// </summary>
|
|
|
|
|
|
public int PaymentMethod { get; set; }
|
2026-04-01 13:04:41 +08:00
|
|
|
|
|
2026-04-13 13:23:00 +08:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 具体支付方式
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public PaymentMethodType PaymentMethodType { get; set; }
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 微信OpenId (微信支付时必填)
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public string? OpenId { get; set; }
|
|
|
|
|
|
|
2026-04-01 13:04:41 +08:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 优惠券ID (可选)
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public long? CouponId { get; set; }
|
2026-03-14 05:19:40 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
2026-03-25 11:24:52 +08:00
|
|
|
|
/// 用户支付结果输出
|
2026-03-14 05:19:40 +08:00
|
|
|
|
/// </summary>
|
|
|
|
|
|
public class UserPaymentResultOutput
|
|
|
|
|
|
{
|
2026-03-18 13:47:34 +08:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 订单号
|
|
|
|
|
|
/// </summary>
|
2026-04-13 13:23:00 +08:00
|
|
|
|
public string OrderNo { get; set; } = string.Empty;
|
2026-03-18 13:47:34 +08:00
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
2026-03-25 11:24:52 +08:00
|
|
|
|
/// 支付链接或二维码
|
2026-03-18 13:47:34 +08:00
|
|
|
|
/// </summary>
|
2026-04-13 13:23:00 +08:00
|
|
|
|
public string PayUrl { get; set; } = string.Empty;
|
2026-03-18 13:47:34 +08:00
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
2026-03-25 11:24:52 +08:00
|
|
|
|
/// 状态
|
2026-03-18 13:47:34 +08:00
|
|
|
|
/// </summary>
|
|
|
|
|
|
public int Status { get; set; }
|
2026-03-25 11:24:52 +08:00
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 支付方式 (例如:JSAPI, NATIVE)
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public string? TradeType { get; set; }
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 微信Native支付参数 - 二维码链接
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public string? QrcodeUrl { get; set; }
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
2026-04-13 13:23:00 +08:00
|
|
|
|
/// 微信JSAPI支付参数
|
2026-03-25 11:24:52 +08:00
|
|
|
|
/// </summary>
|
2026-04-13 13:23:00 +08:00
|
|
|
|
public object? WechatPayParams { get; set; }
|
2026-03-25 11:24:52 +08:00
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
2026-04-13 13:23:00 +08:00
|
|
|
|
/// 线下支付信息 - 收款商户名称
|
2026-03-25 11:24:52 +08:00
|
|
|
|
/// </summary>
|
2026-04-13 13:23:00 +08:00
|
|
|
|
public string? PayeeMerchantName { get; set; }
|
2026-03-25 11:24:52 +08:00
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
2026-04-13 13:23:00 +08:00
|
|
|
|
/// 线下支付信息 - 收款账号信息
|
2026-03-25 11:24:52 +08:00
|
|
|
|
/// </summary>
|
2026-04-13 13:23:00 +08:00
|
|
|
|
public string? PayeeAccountInfo { get; set; }
|
2026-04-01 13:04:41 +08:00
|
|
|
|
|
|
|
|
|
|
/// <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; }
|
2026-04-06 10:50:57 +08:00
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 团队ID (必填)
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
[Required]
|
|
|
|
|
|
public long TeamId { get; set; }
|
2026-03-14 05:19:40 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
#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
|
|
|
|
|
|
{
|
2026-03-18 13:47:34 +08:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 报名ID
|
|
|
|
|
|
/// </summary>
|
2026-03-14 05:19:40 +08:00
|
|
|
|
public long RegistrationId { get; set; }
|
2026-03-18 13:47:34 +08:00
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 赛事名称
|
|
|
|
|
|
/// </summary>
|
2026-03-14 05:19:40 +08:00
|
|
|
|
public string EventName { get; set; }
|
2026-03-18 13:47:34 +08:00
|
|
|
|
|
2026-04-06 09:21:47 +08:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 封面
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public string CoverImage { get; set; }
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 赛事类型
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public int? EventType { get; set; }
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 收费模式
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public int? ChargeMode { get; set; }
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 赛事状态
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public int? EventStatus { get; set; }
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 报名开始时间
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public DateTime? RegistrationStartTime { get; set; }
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 报名结束时间
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public DateTime? RegistrationEndTime { get; set; }
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 上传素材截止时间
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public DateTime? MaterialDeadline { get; set; }
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 比赛开始时间
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public DateTime? MatchStartTime { get; set; }
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 比赛结束时间
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public DateTime? MatchEndTime { get; set; }
|
|
|
|
|
|
|
2026-03-18 13:47:34 +08:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 团队名称
|
|
|
|
|
|
/// </summary>
|
2026-03-14 05:19:40 +08:00
|
|
|
|
public string TeamName { get; set; }
|
2026-03-18 13:47:34 +08:00
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
2026-04-05 20:58:17 +08:00
|
|
|
|
/// 综合状态 (0-待付款, 1-已支付, 2-已取消, 3-已退款, 4-已完成)
|
2026-03-18 13:47:34 +08:00
|
|
|
|
/// </summary>
|
2026-04-05 20:58:17 +08:00
|
|
|
|
public int Status { get; set; }
|
2026-03-18 13:47:34 +08:00
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 创建时间
|
|
|
|
|
|
/// </summary>
|
2026-03-14 05:19:40 +08:00
|
|
|
|
public DateTime CreateTime { get; set; }
|
2026-03-18 13:47:34 +08:00
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 更新时间
|
|
|
|
|
|
/// </summary>
|
2026-03-14 05:19:40 +08:00
|
|
|
|
public DateTime? UpdateTime { get; set; }
|
2026-03-18 13:47:34 +08:00
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
2026-04-05 20:58:17 +08:00
|
|
|
|
/// 支付状态 (0-未支付, 1-已支付, 2-已取消, 3-已退款, 4-待审核)
|
2026-03-18 13:47:34 +08:00
|
|
|
|
/// </summary>
|
2026-04-05 20:58:17 +08:00
|
|
|
|
public int PayStatus { get; set; }
|
2026-03-18 13:47:34 +08:00
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 证书状态
|
|
|
|
|
|
/// </summary>
|
2026-04-05 20:58:17 +08:00
|
|
|
|
public int CertStatus { get; set; }
|
2026-03-18 13:47:34 +08:00
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 是否有素材
|
|
|
|
|
|
/// </summary>
|
2026-03-14 05:19:40 +08:00
|
|
|
|
public bool HasMaterial { get; set; }
|
2026-03-18 13:47:34 +08:00
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 是否有凭证
|
|
|
|
|
|
/// </summary>
|
2026-03-14 05:19:40 +08:00
|
|
|
|
public bool HasVoucher { get; set; }
|
2026-03-18 13:47:34 +08:00
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 成员数量
|
|
|
|
|
|
/// </summary>
|
2026-03-14 05:19:40 +08:00
|
|
|
|
public int MemberCount { get; set; }
|
2026-03-18 13:47:34 +08:00
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 允许的最大人数
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public int MaxMember { get; set; }
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 支付或素材上传截止时间
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public DateTime? ExpireTime { get; set; }
|
2026-03-14 05:19:40 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <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
|
|
|
|
|
|
{
|
2026-03-18 13:47:34 +08:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 素材ID
|
|
|
|
|
|
/// </summary>
|
2026-03-14 05:19:40 +08:00
|
|
|
|
public string MaterialId { get; set; }
|
2026-03-18 13:47:34 +08:00
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// OSS URL
|
|
|
|
|
|
/// </summary>
|
2026-03-14 05:19:40 +08:00
|
|
|
|
public string OssUrl { get; set; }
|
2026-03-18 13:47:34 +08:00
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 文件名
|
|
|
|
|
|
/// </summary>
|
2026-03-14 05:19:40 +08:00
|
|
|
|
public string FileName { get; set; }
|
2026-03-18 13:47:34 +08:00
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 文件大小
|
|
|
|
|
|
/// </summary>
|
2026-03-14 05:19:40 +08:00
|
|
|
|
public long FileSize { get; set; }
|
2026-03-18 13:47:34 +08:00
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 上传时间
|
|
|
|
|
|
/// </summary>
|
2026-03-14 05:19:40 +08:00
|
|
|
|
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
|
|
|
|
|
|
{
|
2026-03-18 13:47:34 +08:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 凭证ID
|
|
|
|
|
|
/// </summary>
|
2026-03-14 05:19:40 +08:00
|
|
|
|
public string VoucherId { get; set; }
|
2026-03-18 13:47:34 +08:00
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// OSS URL
|
|
|
|
|
|
/// </summary>
|
2026-03-14 05:19:40 +08:00
|
|
|
|
public string OssUrl { get; set; }
|
2026-03-18 13:47:34 +08:00
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 审核状态
|
|
|
|
|
|
/// </summary>
|
2026-03-14 05:19:40 +08:00
|
|
|
|
public string AuditStatus { get; set; }
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 队员信息 DTO
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public class TeamMemberDTO
|
|
|
|
|
|
{
|
2026-03-18 13:47:34 +08:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 用户ID
|
|
|
|
|
|
/// </summary>
|
2026-03-14 05:19:40 +08:00
|
|
|
|
public long UserId { get; set; }
|
2026-03-18 13:47:34 +08:00
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 真实姓名
|
|
|
|
|
|
/// </summary>
|
2026-03-14 05:19:40 +08:00
|
|
|
|
public string RealName { get; set; }
|
2026-03-18 13:47:34 +08:00
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 手机号
|
|
|
|
|
|
/// </summary>
|
2026-03-14 05:19:40 +08:00
|
|
|
|
public string Phone { get; set; }
|
2026-03-18 13:47:34 +08:00
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 邮箱
|
|
|
|
|
|
/// </summary>
|
2026-03-14 05:19:40 +08:00
|
|
|
|
public string Email { get; set; }
|
2026-03-18 13:47:34 +08:00
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 角色 (队长/队员)
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public string Role { get; set; }
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 邀请状态
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public string InviteStatus { get; set; }
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 加入时间
|
|
|
|
|
|
/// </summary>
|
2026-03-14 05:19:40 +08:00
|
|
|
|
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
|
|
|
|
|
|
{
|
2026-03-18 13:47:34 +08:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 证书URL
|
|
|
|
|
|
/// </summary>
|
2026-03-14 05:19:40 +08:00
|
|
|
|
public string CertUrl { get; set; }
|
2026-03-18 13:47:34 +08:00
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 证书编号
|
|
|
|
|
|
/// </summary>
|
2026-03-14 05:19:40 +08:00
|
|
|
|
public string CertNumber { get; set; }
|
2026-03-18 13:47:34 +08:00
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 颁发时间
|
|
|
|
|
|
/// </summary>
|
2026-03-14 05:19:40 +08:00
|
|
|
|
public DateTime IssueTime { get; set; }
|
2026-03-18 13:47:34 +08:00
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 过期时间
|
|
|
|
|
|
/// </summary>
|
2026-03-14 05:19:40 +08:00
|
|
|
|
public DateTime? ExpireTime { get; set; }
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 统一响应 DTO (泛型)
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public class ResponseDTO<T>
|
|
|
|
|
|
{
|
2026-03-18 13:47:34 +08:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 状态码
|
|
|
|
|
|
/// </summary>
|
2026-03-14 05:19:40 +08:00
|
|
|
|
public int Code { get; set; }
|
2026-03-18 13:47:34 +08:00
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 消息
|
|
|
|
|
|
/// </summary>
|
2026-03-14 05:19:40 +08:00
|
|
|
|
public string Message { get; set; }
|
2026-03-18 13:47:34 +08:00
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 数据
|
|
|
|
|
|
/// </summary>
|
2026-03-14 05:19:40 +08:00
|
|
|
|
public T Data { get; set; }
|
2026-03-18 13:47:34 +08:00
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 是否成功
|
|
|
|
|
|
/// </summary>
|
2026-03-14 05:19:40 +08:00
|
|
|
|
public bool Success { get; set; }
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
#endregion
|
2026-04-02 08:40:47 +08:00
|
|
|
|
|
|
|
|
|
|
#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>
|
2026-04-13 13:23:00 +08:00
|
|
|
|
/// 团队ID (新结构)
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public long? TeamId { get; set; }
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 组别队员分配 (新结构)
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public List<GroupMemberAssignment> GroupMembers { get; set; }
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 队员ID列表 (旧结构,向后兼容)
|
2026-04-02 08:40:47 +08:00
|
|
|
|
/// </summary>
|
|
|
|
|
|
public List<long> MemberIds { get; set; }
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
2026-04-13 13:23:00 +08:00
|
|
|
|
/// 组别ID列表 (旧结构,向后兼容)
|
2026-04-02 08:40:47 +08:00
|
|
|
|
/// </summary>
|
|
|
|
|
|
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
|