From da8d63734f92f25ec40c41b931a1f203903d158c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=A9=AC=E6=A2=93=E5=BD=AD?= Date: Mon, 22 Jun 2026 22:29:15 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A4=9A=E5=8F=82=E8=B5=9B=E4=BA=BA=E5=91=98?= =?UTF-8?q?=E5=88=A4=E6=96=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Event/Dtos/UserCompetitionDtos.cs | 5 ++ .../Event/UserEventRecordService.cs | 53 ++++++++++++------- .../Event/UserEventRegistrationService.cs | 49 +++++++++++------ 3 files changed, 74 insertions(+), 33 deletions(-) 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(); + } + /// /// 检查报名限制 ///