参与赛事记录筛选
This commit is contained in:
parent
b4e408d56f
commit
ef8f268179
@ -13,6 +13,11 @@ public class RegistrationPersonDto
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public long Id { get; set; }
|
public long Id { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 用户ID(AppUser表的ID,用于验证)
|
||||||
|
/// </summary>
|
||||||
|
public long UserId { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 姓名
|
/// 姓名
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
@ -6,6 +6,7 @@ using YD_Event.Application.Event.Dtos;
|
|||||||
using YD_Event.Application.Common;
|
using YD_Event.Application.Common;
|
||||||
using YD_Event.Core.Entities;
|
using YD_Event.Core.Entities;
|
||||||
using YD_Event.Core.Enum;
|
using YD_Event.Core.Enum;
|
||||||
|
using YD_Event.Core.Extensions;
|
||||||
using Easy.Core;
|
using Easy.Core;
|
||||||
using SqlSugar;
|
using SqlSugar;
|
||||||
using Mapster;
|
using Mapster;
|
||||||
@ -537,6 +538,7 @@ public class UserEventRecordService : IDynamicApiController, ITransient
|
|||||||
Members = itemMembers.Select(p => new RegistrationPersonDto
|
Members = itemMembers.Select(p => new RegistrationPersonDto
|
||||||
{
|
{
|
||||||
Id = p.Id,
|
Id = p.Id,
|
||||||
|
UserId = p.UserId, // 这里是关键!设置正确的用户ID
|
||||||
Name = p.Name,
|
Name = p.Name,
|
||||||
IdCardNumber = p.IdCard,
|
IdCardNumber = p.IdCard,
|
||||||
Gender = p.Gender,
|
Gender = p.Gender,
|
||||||
@ -668,4 +670,243 @@ public class UserEventRecordService : IDynamicApiController, ITransient
|
|||||||
if (birthDate.Date > today.AddYears(-age)) age--;
|
if (birthDate.Date > today.AddYears(-age)) age--;
|
||||||
return 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
|
ID
|
||||||
</summary>
|
</summary>
|
||||||
</member>
|
</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">
|
<member name="P:YD_Event.Application.Event.Dtos.RegistrationPersonDto.Name">
|
||||||
<summary>
|
<summary>
|
||||||
姓名
|
姓名
|
||||||
@ -8208,11 +8213,6 @@
|
|||||||
检查报名限制
|
检查报名限制
|
||||||
</summary>
|
</summary>
|
||||||
</member>
|
</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)">
|
<member name="M:YD_Event.Application.Event.UnifiedRegistrationService.CreateLimitDetail(System.Int64,System.String,System.String,System.String)">
|
||||||
<summary>
|
<summary>
|
||||||
创建报名限制详情
|
创建报名限制详情
|
||||||
@ -8458,6 +8458,16 @@
|
|||||||
计算年龄
|
计算年龄
|
||||||
</summary>
|
</summary>
|
||||||
</member>
|
</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">
|
<member name="T:YD_Event.Application.Event.UserEventRegistrationService">
|
||||||
<summary>
|
<summary>
|
||||||
用户端报名管理服务
|
用户端报名管理服务
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user