diff --git a/YD_Event.Application/Event/Dtos/UserCompetitionDtos.cs b/YD_Event.Application/Event/Dtos/UserCompetitionDtos.cs
index 066ec06..c36303d 100644
--- a/YD_Event.Application/Event/Dtos/UserCompetitionDtos.cs
+++ b/YD_Event.Application/Event/Dtos/UserCompetitionDtos.cs
@@ -1119,6 +1119,11 @@ public class MemberValidateInput
[Required]
public long MemberId { get; set; }
+ ///
+ /// 当前组内已选队员ID列表(用于年龄跨组等整组校验,兼容旧接口可不传)
+ ///
+ public List? MemberIds { get; set; }
+
///
/// 组别ID
///
diff --git a/YD_Event.Application/Event/UserEventRecordService.cs b/YD_Event.Application/Event/UserEventRecordService.cs
index 76ff3d2..8a1a289 100644
--- a/YD_Event.Application/Event/UserEventRecordService.cs
+++ b/YD_Event.Application/Event/UserEventRecordService.cs
@@ -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();
+
+ 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()
- .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
- {
- 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 BuildValidationPersons(List 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();
+ }
+
///
/// 检查报名限制
///
diff --git a/YD_Event.Application/Event/UserEventRegistrationService.cs b/YD_Event.Application/Event/UserEventRegistrationService.cs
index 3237e5c..68ccb08 100644
--- a/YD_Event.Application/Event/UserEventRegistrationService.cs
+++ b/YD_Event.Application/Event/UserEventRegistrationService.cs
@@ -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();
+
+ 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
- {
- 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 BuildValidationPersons(List 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();
+ }
+
///
/// 检查报名限制
///