参与赛事记录筛选
This commit is contained in:
parent
b4e408d56f
commit
ef8f268179
@ -13,6 +13,11 @@ public class RegistrationPersonDto
|
||||
/// </summary>
|
||||
public long Id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 用户ID(AppUser表的ID,用于验证)
|
||||
/// </summary>
|
||||
public long UserId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 姓名
|
||||
/// </summary>
|
||||
|
||||
@ -6,6 +6,7 @@ using YD_Event.Application.Event.Dtos;
|
||||
using YD_Event.Application.Common;
|
||||
using YD_Event.Core.Entities;
|
||||
using YD_Event.Core.Enum;
|
||||
using YD_Event.Core.Extensions;
|
||||
using Easy.Core;
|
||||
using SqlSugar;
|
||||
using Mapster;
|
||||
@ -537,6 +538,7 @@ public class UserEventRecordService : IDynamicApiController, ITransient
|
||||
Members = itemMembers.Select(p => new RegistrationPersonDto
|
||||
{
|
||||
Id = p.Id,
|
||||
UserId = p.UserId, // 这里是关键!设置正确的用户ID
|
||||
Name = p.Name,
|
||||
IdCardNumber = p.IdCard,
|
||||
Gender = p.Gender,
|
||||
@ -668,4 +670,243 @@ public class UserEventRecordService : IDynamicApiController, ITransient
|
||||
if (birthDate.Date > today.AddYears(-age)) age--;
|
||||
return age;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 验证队员是否符合报名条件
|
||||
/// </summary>
|
||||
[DisplayName("验证队员")]
|
||||
[HttpPost("member/validate")]
|
||||
public async Task<MemberValidateOutput> ValidateMember([FromBody] MemberValidateInput input)
|
||||
{
|
||||
var result = new MemberValidateOutput
|
||||
{
|
||||
IsValid = true,
|
||||
AgeValid = true,
|
||||
GenderValid = true,
|
||||
RegistrationLimitValid = true,
|
||||
Message = "验证通过"
|
||||
};
|
||||
|
||||
// 添加调试:查看接收的ID
|
||||
var memberId = input.MemberId;
|
||||
var member = await _userRepository.GetByIdAsync(memberId);
|
||||
|
||||
// 添加调试:如果找不到,尝试不删除标记查询
|
||||
if (member == null)
|
||||
{
|
||||
var memberWithoutDelete = await _db.Queryable<YD_Event.Core.Entities.AppUser>()
|
||||
.FirstAsync(m => m.Id == memberId);
|
||||
|
||||
if (memberWithoutDelete != null)
|
||||
{
|
||||
// 队员存在但被标记删除
|
||||
result.IsValid = false;
|
||||
result.Message = "队员不存在(已删除)";
|
||||
return result;
|
||||
}
|
||||
|
||||
result.IsValid = false;
|
||||
result.Message = "队员不存在";
|
||||
return result;
|
||||
}
|
||||
|
||||
if (!member.BirthDate.HasValue)
|
||||
{
|
||||
result.IsValid = false;
|
||||
result.AgeValid = false;
|
||||
result.Message = "队员缺少出生日期信息";
|
||||
return result;
|
||||
}
|
||||
|
||||
var eventProjectGroup = await _eventProjectGroupRepository.GetByIdAsync(input.GroupId);
|
||||
if (eventProjectGroup != null)
|
||||
{
|
||||
// 获取项目类型信息
|
||||
var eventProject = await _eventProjectRepository.GetByIdAsync(eventProjectGroup.EventProjectId);
|
||||
var baseProject = eventProject != null ? await _projectRepository.GetByIdAsync(eventProject.ProjectId) : null;
|
||||
var isTeamProject = baseProject?.IsTeamProject() ?? false;
|
||||
|
||||
// 创建单个队员的验证输入
|
||||
var persons = new List<UnifiedPersonInput>
|
||||
{
|
||||
new UnifiedPersonInput
|
||||
{
|
||||
UserId = member.Id,
|
||||
Name = member.Name ?? "",
|
||||
IdCardNumber = member.IdCardNumber ?? "",
|
||||
Gender = member.Gender,
|
||||
Mobile = member.Mobile,
|
||||
BirthDate = member.BirthDate.Value
|
||||
}
|
||||
};
|
||||
|
||||
// 使用统一的验证方法进行验证
|
||||
var validationResult = _unifiedRegistrationService.ValidatePersonQualifications(persons, eventProjectGroup, isTeamProject);
|
||||
|
||||
if (!validationResult.IsValid)
|
||||
{
|
||||
result.IsValid = false;
|
||||
result.Message = validationResult.ErrorMessage ?? "验证失败";
|
||||
|
||||
// 根据验证详情设置具体的验证状态
|
||||
var ageDetail = validationResult.Details?.FirstOrDefault(d => d.ItemName == "年龄验证" || d.ItemName == "年龄跨组验证");
|
||||
var genderDetail = validationResult.Details?.FirstOrDefault(d => d.ItemName == "性别验证");
|
||||
|
||||
if (ageDetail != null && !ageDetail.IsPassed)
|
||||
{
|
||||
result.AgeValid = false;
|
||||
}
|
||||
|
||||
if (genderDetail != null && !genderDetail.IsPassed)
|
||||
{
|
||||
result.GenderValid = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 检查报名限制
|
||||
/// </summary>
|
||||
[DisplayName("检查报名限制")]
|
||||
[HttpPost("registration-limit/check")]
|
||||
public async Task<RegistrationLimitCheckOutput> CheckRegistrationLimit([FromBody] RegistrationLimitCheckInput input)
|
||||
{
|
||||
var userId = _authManager.UserId;
|
||||
|
||||
// 获取当前用户信息
|
||||
var sysUser = await _sysUserRepository.GetByIdAsync(userId);
|
||||
if (sysUser == null) throw Oops.Bah("用户不存在");
|
||||
string userName = sysUser.Name;
|
||||
string userMobile = sysUser.Mobile ?? "";
|
||||
|
||||
// 获取团队信息 - 优先使用新结构的 TeamId
|
||||
string teamName = "临时团队";
|
||||
if (input.TeamId.HasValue)
|
||||
{
|
||||
var team = await _db.Queryable<YD_Event.Core.Entities.Team>().FirstAsync(t => t.Id == input.TeamId.Value && !t.DeleteMark);
|
||||
if (team != null)
|
||||
{
|
||||
teamName = team.Name;
|
||||
}
|
||||
}
|
||||
|
||||
// 获取所有成员信息
|
||||
var allMemberIds = new List<long>();
|
||||
if (input.GroupMembers != null)
|
||||
{
|
||||
foreach (var gm in input.GroupMembers)
|
||||
{
|
||||
// 检查是否有多团队数据
|
||||
if (gm.Teams != null && gm.Teams.Count > 0)
|
||||
{
|
||||
foreach (var team in gm.Teams)
|
||||
{
|
||||
allMemberIds.AddRange(team.MemberIds ?? new List<long>());
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// 向后兼容单团队模式
|
||||
allMemberIds.AddRange(gm.MemberIds ?? new List<long>());
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (input.MemberIds != null)
|
||||
{
|
||||
// 向后兼容旧结构
|
||||
allMemberIds.AddRange(input.MemberIds);
|
||||
}
|
||||
|
||||
allMemberIds = allMemberIds.Distinct().ToList();
|
||||
|
||||
// 获取成员信息
|
||||
var members = await _userRepository.GetListAsync(x => allMemberIds.Contains(x.Id));
|
||||
|
||||
// 获取组别信息
|
||||
var groupIds = input.GroupMembers?.Select(g => g.GroupId).ToList() ?? input.GroupIds ?? new List<long>();
|
||||
var eventProjectGroups = await _eventProjectGroupRepository.GetListAsync(x => groupIds.Contains(x.Id));
|
||||
|
||||
// 获取项目信息
|
||||
var eventProjectIds = eventProjectGroups.Select(epg => epg.EventProjectId).Distinct().ToList();
|
||||
var eventProjects = await _eventProjectRepository.GetListAsync(x => eventProjectIds.Contains(x.Id));
|
||||
|
||||
// 构建统一报名输入
|
||||
var unifiedInput = new UnifiedRegistrationInput
|
||||
{
|
||||
EventId = input.EventId,
|
||||
RegistrationMode = 2, // PC端团队报名
|
||||
TeamName = teamName,
|
||||
ContactName = userName,
|
||||
ContactPhone = userMobile,
|
||||
CreatedUserId = userId,
|
||||
IsDraft = false,
|
||||
Items = new List<UnifiedRegistrationItemInput>()
|
||||
};
|
||||
|
||||
// 为每个组别添加项目项
|
||||
foreach (var groupMember in input.GroupMembers ?? new List<GroupMemberAssignment>())
|
||||
{
|
||||
var eventProjectGroup = eventProjectGroups.FirstOrDefault(epg => epg.Id == groupMember.GroupId);
|
||||
if (eventProjectGroup == null) continue;
|
||||
|
||||
var eventProject = eventProjects.FirstOrDefault(ep => ep.Id == eventProjectGroup.EventProjectId);
|
||||
if (eventProject == null) continue;
|
||||
|
||||
var item = new UnifiedRegistrationItemInput
|
||||
{
|
||||
ProjectId = eventProject.Id,
|
||||
GroupId = groupMember.GroupId,
|
||||
GroupName = eventProjectGroup.GroupName,
|
||||
Teams = new List<UnifiedTeamInput>(),
|
||||
Persons = new List<UnifiedPersonInput>()
|
||||
};
|
||||
|
||||
// 检查是多团队模式还是单团队模式
|
||||
var hasMultipleTeams = groupMember.Teams != null && groupMember.Teams.Count > 0;
|
||||
|
||||
if (hasMultipleTeams)
|
||||
{
|
||||
// ========== 多团队模式 ==========
|
||||
foreach (var team in groupMember.Teams)
|
||||
{
|
||||
var teamMembers = members.Where(m => team.MemberIds != null && team.MemberIds.Contains(m.Id)).ToList();
|
||||
item.Teams.Add(new UnifiedTeamInput
|
||||
{
|
||||
TeamIndex = team.TeamIndex,
|
||||
Persons = teamMembers.Select(m => new UnifiedPersonInput
|
||||
{
|
||||
UserId = m.Id,
|
||||
Name = m.Name ?? "",
|
||||
IdCardNumber = m.IdCardNumber ?? "",
|
||||
Gender = m.Gender,
|
||||
Mobile = m.Mobile,
|
||||
BirthDate = m.BirthDate ?? DateTime.MinValue
|
||||
}).ToList()
|
||||
});
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// ========== 单团队模式(向后兼容) ==========
|
||||
var groupMembersList = members.Where(m => groupMember.MemberIds != null && groupMember.MemberIds.Contains(m.Id)).ToList();
|
||||
item.Persons = groupMembersList.Select(m => new UnifiedPersonInput
|
||||
{
|
||||
UserId = m.Id,
|
||||
Name = m.Name ?? "",
|
||||
IdCardNumber = m.IdCardNumber ?? "",
|
||||
Gender = m.Gender,
|
||||
Mobile = m.Mobile,
|
||||
BirthDate = m.BirthDate ?? DateTime.MinValue
|
||||
}).ToList();
|
||||
}
|
||||
|
||||
unifiedInput.Items.Add(item);
|
||||
}
|
||||
|
||||
// 调用统一的限制检查方法
|
||||
return await _unifiedRegistrationService.CheckRegistrationLimitAsync(unifiedInput);
|
||||
}
|
||||
}
|
||||
|
||||
@ -5510,6 +5510,11 @@
|
||||
ID
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:YD_Event.Application.Event.Dtos.RegistrationPersonDto.UserId">
|
||||
<summary>
|
||||
用户ID(AppUser表的ID,用于验证)
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:YD_Event.Application.Event.Dtos.RegistrationPersonDto.Name">
|
||||
<summary>
|
||||
姓名
|
||||
@ -8208,11 +8213,6 @@
|
||||
检查报名限制
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:YD_Event.Application.Event.UnifiedRegistrationService.CheckRegistrationLimitAsync(YD_Event.Application.Event.Dtos.UnifiedRegistrationInput,System.Int64)">
|
||||
<summary>
|
||||
检查报名限制(支持排除特定报名记录)
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:YD_Event.Application.Event.UnifiedRegistrationService.CreateLimitDetail(System.Int64,System.String,System.String,System.String)">
|
||||
<summary>
|
||||
创建报名限制详情
|
||||
@ -8458,6 +8458,16 @@
|
||||
计算年龄
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:YD_Event.Application.Event.UserEventRecordService.ValidateMember(YD_Event.Application.Event.Dtos.MemberValidateInput)">
|
||||
<summary>
|
||||
验证队员是否符合报名条件
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:YD_Event.Application.Event.UserEventRecordService.CheckRegistrationLimit(YD_Event.Application.Event.Dtos.RegistrationLimitCheckInput)">
|
||||
<summary>
|
||||
检查报名限制
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:YD_Event.Application.Event.UserEventRegistrationService">
|
||||
<summary>
|
||||
用户端报名管理服务
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user