多参赛人员判断

This commit is contained in:
马梓彭 2026-06-22 22:29:15 +08:00
parent dcd3414c54
commit da8d63734f
3 changed files with 74 additions and 33 deletions

View File

@ -1119,6 +1119,11 @@ public class MemberValidateInput
[Required]
public long MemberId { get; set; }
/// <summary>
/// 当前组内已选队员ID列表(用于年龄跨组等整组校验,兼容旧接口可不传)
/// </summary>
public List<long>? MemberIds { get; set; }
/// <summary>
/// 组别ID
/// </summary>

View File

@ -889,15 +889,24 @@ public class UserEventRecordService : IDynamicApiController, ITransient
Message = "验证通过"
};
// 添加调试:查看接收的ID
var memberId = input.MemberId;
var member = await _userRepository.GetByIdAsync(memberId);
var validationMemberIds = input.MemberIds?
.Where(id => id > 0)
.Distinct()
.ToList() ?? new List<long>();
if (!validationMemberIds.Contains(input.MemberId))
{
validationMemberIds.Add(input.MemberId);
}
var members = await _userRepository.GetListAsync(x => validationMemberIds.Contains(x.Id));
var member = members.FirstOrDefault(x => x.Id == input.MemberId);
// 添加调试:如果找不到,尝试不删除标记查询
if (member == null)
{
var memberWithoutDelete = await _db.Queryable<YD_Event.Core.Entities.AppUser>()
.FirstAsync(m => m.Id == memberId);
.FirstAsync(m => m.Id == input.MemberId);
if (memberWithoutDelete != null)
{
@ -928,19 +937,7 @@ public class UserEventRecordService : IDynamicApiController, ITransient
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 persons = BuildValidationPersons(members, input.MemberId);
// 使用统一的验证方法进行验证
var validationResult = _unifiedRegistrationService.ValidatePersonQualifications(persons, eventProjectGroup, isTeamProject);
@ -951,7 +948,10 @@ public class UserEventRecordService : IDynamicApiController, ITransient
result.Message = validationResult.ErrorMessage ?? "验证失败";
// 根据验证详情设置具体的验证状态
var ageDetail = validationResult.Details?.FirstOrDefault(d => d.ItemName == "年龄验证" || d.ItemName == "年龄跨组验证");
var ageDetail = validationResult.Details?.FirstOrDefault(d =>
d.ItemName == "年龄验证" ||
d.ItemName == "年龄跨组" ||
d.ItemName.StartsWith("年龄跨组验证"));
var genderDetail = validationResult.Details?.FirstOrDefault(d => d.ItemName == "性别验证");
if (ageDetail != null && !ageDetail.IsPassed)
@ -969,6 +969,23 @@ public class UserEventRecordService : IDynamicApiController, ITransient
return result;
}
private static List<UnifiedPersonInput> BuildValidationPersons(List<YD_Event.Core.Entities.AppUser> members, long currentMemberId)
{
var orderedMembers = members
.OrderByDescending(x => x.Id == currentMemberId)
.ToList();
return orderedMembers.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();
}
/// <summary>
/// 检查报名限制
/// </summary>

View File

@ -1065,7 +1065,18 @@ public class UserEventRegistrationService : IDynamicApiController, ITransient
Message = "验证通过"
};
var member = await _userRepository.GetByIdAsync(input.MemberId);
var validationMemberIds = input.MemberIds?
.Where(id => id > 0)
.Distinct()
.ToList() ?? new List<long>();
if (!validationMemberIds.Contains(input.MemberId))
{
validationMemberIds.Add(input.MemberId);
}
var members = await _userRepository.GetListAsync(x => validationMemberIds.Contains(x.Id));
var member = members.FirstOrDefault(x => x.Id == input.MemberId);
if (member == null)
{
result.IsValid = false;
@ -1089,19 +1100,7 @@ public class UserEventRegistrationService : IDynamicApiController, ITransient
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 persons = BuildValidationPersons(members, input.MemberId);
// 使用统一的验证方法进行验证
var validationResult = _unifiedRegistrationService.ValidatePersonQualifications(persons, eventProjectGroup, isTeamProject);
@ -1112,7 +1111,10 @@ public class UserEventRegistrationService : IDynamicApiController, ITransient
result.Message = validationResult.ErrorMessage ?? "验证失败";
// 根据验证详情设置具体的验证状态
var ageDetail = validationResult.Details?.FirstOrDefault(d => d.ItemName == "年龄验证" || d.ItemName == "年龄跨组验证");
var ageDetail = validationResult.Details?.FirstOrDefault(d =>
d.ItemName == "年龄验证" ||
d.ItemName == "年龄跨组" ||
d.ItemName.StartsWith("年龄跨组验证"));
var genderDetail = validationResult.Details?.FirstOrDefault(d => d.ItemName == "性别验证");
if (ageDetail != null && !ageDetail.IsPassed)
@ -1130,6 +1132,23 @@ public class UserEventRegistrationService : IDynamicApiController, ITransient
return result;
}
private static List<UnifiedPersonInput> BuildValidationPersons(List<YD_Event.Core.Entities.AppUser> members, long currentMemberId)
{
var orderedMembers = members
.OrderByDescending(x => x.Id == currentMemberId)
.ToList();
return orderedMembers.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();
}
/// <summary>
/// 检查报名限制
/// </summary>