From 570a17ea10d522255d55c45a2f05decc1a2f1c58 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=A9=AC=E6=A2=93=E5=BD=AD?= Date: Sun, 28 Jun 2026 18:04:46 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E5=96=84=E4=BA=BA=E5=91=98=E8=AE=A4?= =?UTF-8?q?=E8=AF=81=E7=9A=84=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Event/Dtos/UnifiedRegistrationDtos.cs | 17 ++++++++--- .../Event/UnifiedRegistrationService.cs | 17 ++++++++--- .../Event/UserEventRecordService.cs | 30 ++++++++++++++----- .../Event/UserEventRegistrationService.cs | 12 ++++++++ 4 files changed, 61 insertions(+), 15 deletions(-) diff --git a/YD_Event.Application/Event/Dtos/UnifiedRegistrationDtos.cs b/YD_Event.Application/Event/Dtos/UnifiedRegistrationDtos.cs index 660ee64..d1aa72f 100644 --- a/YD_Event.Application/Event/Dtos/UnifiedRegistrationDtos.cs +++ b/YD_Event.Application/Event/Dtos/UnifiedRegistrationDtos.cs @@ -143,11 +143,20 @@ public class UnifiedPersonInput public string Name { get; set; } = string.Empty; /// - /// 身份证号 + /// 身份证号(身份证/户口本认证时使用) /// - [Required(ErrorMessage = "身份证号不能为空")] [RegularExpression(@"^[1-9]\d{5}(19|20)\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])\d{3}[\dXx]$", ErrorMessage = "请输入正确的身份证号格式")] - public string IdCardNumber { get; set; } = string.Empty; + public string? IdCardNumber { get; set; } + + /// + /// 护照号码(护照认证时使用) + /// + public string? PassportNumber { get; set; } + + /// + /// 认证类型:0-未认证,1-身份证,2-护照,3-户口本 + /// + public int AuthType { get; set; } = 1; /// /// 性别 @@ -156,7 +165,7 @@ public class UnifiedPersonInput public Gender Gender { get; set; } /// - /// 电话 + /// 电话(非必填) /// [RegularExpression(@"^1[3-9]\d{9}$", ErrorMessage = "请输入正确的手机号格式")] public string? Mobile { get; set; } diff --git a/YD_Event.Application/Event/UnifiedRegistrationService.cs b/YD_Event.Application/Event/UnifiedRegistrationService.cs index 9e1fd1d..d6d8949 100644 --- a/YD_Event.Application/Event/UnifiedRegistrationService.cs +++ b/YD_Event.Application/Event/UnifiedRegistrationService.cs @@ -642,6 +642,14 @@ public class UnifiedRegistrationService : ITransient return persons; } + /// + /// 获取人员证件号码(根据认证类型返回身份证号或护照号) + /// + private static string GetPersonCertNumber(UnifiedPersonInput person) + { + return person.AuthType == 2 ? (person.PassportNumber ?? "") : (person.IdCardNumber ?? ""); + } + /// /// 验证队员资质(年龄和性别) /// @@ -828,9 +836,9 @@ public class UnifiedRegistrationService : ITransient ProjectName = baseProject?.Name ?? "", Name = pInput.Name, Gender = pInput.Gender, - IdCard = pInput.IdCardNumber, + IdCard = (pInput.AuthType == 2 ? pInput.PassportNumber : pInput.IdCardNumber) ?? "", BirthDate = pInput.BirthDate, - Phone = pInput.Mobile, + Phone = pInput.Mobile ?? "", Age = CalculateAge(pInput.BirthDate), PersonType = PersonType.Athlete, UserId = pInput.UserId ?? 0, @@ -1783,7 +1791,8 @@ public class UnifiedRegistrationService : ITransient foreach (var person in allPersonsInItem) { - var key = person.UserId.HasValue ? person.UserId.Value.ToString() : person.IdCardNumber; + var certNumber = GetPersonCertNumber(person); + var key = person.UserId.HasValue ? person.UserId.Value.ToString() : certNumber; if (string.IsNullOrEmpty(key)) continue; if (!personProjectGroupMap.ContainsKey(key)) @@ -1812,7 +1821,7 @@ public class UnifiedRegistrationService : ITransient var groupInfo = duplicate.First(); var person = input.Items.SelectMany(i => i.Persons).FirstOrDefault(p => (p.UserId.HasValue && p.UserId.Value.ToString() == key) || - (!p.UserId.HasValue && p.IdCardNumber == key)); + (!p.UserId.HasValue && GetPersonCertNumber(p) == key)); var personName = person?.Name ?? "未知人员"; _logger.LogWarning("人员项目组别重复,人员: {PersonName}, 项目: {ProjectName}, 组别: {GroupName}", diff --git a/YD_Event.Application/Event/UserEventRecordService.cs b/YD_Event.Application/Event/UserEventRecordService.cs index 8a1a289..8c27dde 100644 --- a/YD_Event.Application/Event/UserEventRecordService.cs +++ b/YD_Event.Application/Event/UserEventRecordService.cs @@ -383,11 +383,13 @@ public class UserEventRecordService : IDynamicApiController, ITransient if (newUser == null) throw Oops.Bah("新队员不存在"); long oldUserId = person.Id; + + var newCertNumber = newUser.AuthType == 2 ? newUser.PassportNumber : newUser.IdCardNumber; // 更新信息 person.Name = newUser.Name; - person.IdCard = newUser.IdCardNumber; - person.Phone = newUser.Mobile; + person.IdCard = newCertNumber ?? ""; + person.Phone = newUser.Mobile ?? ""; person.UpdatedTime = DateTime.Now; await _registrationPersonRepository.UpdateAsync(person); @@ -811,13 +813,21 @@ public class UserEventRecordService : IDynamicApiController, ITransient var name = member.Name ?? user?.Name; var gender = member.Gender ?? user?.Gender ?? Gender.Male; var idCardNumber = member.IdCardNumber ?? user?.IdCardNumber; + var passportNumber = user?.PassportNumber; + var authType = user?.AuthType ?? 1; var birthDate = member.BirthDate ?? user?.BirthDate ?? DateTime.Now.AddYears(-20); var mobile = member.Mobile ?? user?.Mobile; - // 验证必填字段 + var certNumber = authType == 2 ? passportNumber : idCardNumber; + var certName = authType switch + { + 2 => "护照号码", + 3 => "身份证号(户口本认证)", + _ => "身份证号" + }; + if (string.IsNullOrWhiteSpace(name)) throw Oops.Bah("队员姓名不能为空"); - if (string.IsNullOrWhiteSpace(idCardNumber)) throw Oops.Bah("队员身份证号不能为空"); - if (string.IsNullOrWhiteSpace(mobile)) throw Oops.Bah("队员手机号不能为空"); + if (string.IsNullOrWhiteSpace(certNumber)) throw Oops.Bah($"队员{certName}不能为空"); newPersons.Add(new EventRegistrationPerson { @@ -830,9 +840,9 @@ public class UserEventRecordService : IDynamicApiController, ITransient ProjectName = regItem.ProjectName, Name = name, Gender = gender, - IdCard = idCardNumber, + IdCard = certNumber ?? "", BirthDate = birthDate, - Phone = mobile, + Phone = mobile ?? "", Age = CalculateAge(birthDate), PersonType = PersonType.Athlete, UserId = member.UserId ?? 0, @@ -980,6 +990,8 @@ public class UserEventRecordService : IDynamicApiController, ITransient UserId = m.Id, Name = m.Name ?? "", IdCardNumber = m.IdCardNumber ?? "", + PassportNumber = m.PassportNumber, + AuthType = m.AuthType, Gender = m.Gender, Mobile = m.Mobile, BirthDate = m.BirthDate ?? DateTime.MinValue @@ -1100,6 +1112,8 @@ public class UserEventRecordService : IDynamicApiController, ITransient UserId = m.Id, Name = m.Name ?? "", IdCardNumber = m.IdCardNumber ?? "", + PassportNumber = m.PassportNumber, + AuthType = m.AuthType, Gender = m.Gender, Mobile = m.Mobile, BirthDate = m.BirthDate ?? DateTime.MinValue @@ -1116,6 +1130,8 @@ public class UserEventRecordService : IDynamicApiController, ITransient UserId = m.Id, Name = m.Name ?? "", IdCardNumber = m.IdCardNumber ?? "", + PassportNumber = m.PassportNumber, + AuthType = m.AuthType, Gender = m.Gender, Mobile = m.Mobile, BirthDate = m.BirthDate ?? DateTime.MinValue diff --git a/YD_Event.Application/Event/UserEventRegistrationService.cs b/YD_Event.Application/Event/UserEventRegistrationService.cs index 68ccb08..31df42e 100644 --- a/YD_Event.Application/Event/UserEventRegistrationService.cs +++ b/YD_Event.Application/Event/UserEventRegistrationService.cs @@ -640,6 +640,8 @@ public class UserEventRegistrationService : IDynamicApiController, ITransient UserId = m.Id, Name = m.Name ?? "", IdCardNumber = m.IdCardNumber ?? "", + PassportNumber = m.PassportNumber, + AuthType = m.AuthType, Gender = m.Gender, Mobile = m.Mobile, BirthDate = m.BirthDate ?? DateTime.MinValue @@ -658,6 +660,8 @@ public class UserEventRegistrationService : IDynamicApiController, ITransient UserId = m.Id, Name = m.Name ?? "", IdCardNumber = m.IdCardNumber ?? "", + PassportNumber = m.PassportNumber, + AuthType = m.AuthType, Gender = m.Gender, Mobile = m.Mobile, BirthDate = m.BirthDate ?? DateTime.MinValue @@ -1143,6 +1147,8 @@ public class UserEventRegistrationService : IDynamicApiController, ITransient UserId = m.Id, Name = m.Name ?? "", IdCardNumber = m.IdCardNumber ?? "", + PassportNumber = m.PassportNumber, + AuthType = m.AuthType, Gender = m.Gender, Mobile = m.Mobile, BirthDate = m.BirthDate ?? DateTime.MinValue @@ -1263,6 +1269,8 @@ public class UserEventRegistrationService : IDynamicApiController, ITransient UserId = m.Id, Name = m.Name ?? "", IdCardNumber = m.IdCardNumber ?? "", + PassportNumber = m.PassportNumber, + AuthType = m.AuthType, Gender = m.Gender, Mobile = m.Mobile, BirthDate = m.BirthDate ?? DateTime.MinValue @@ -1279,6 +1287,8 @@ public class UserEventRegistrationService : IDynamicApiController, ITransient UserId = m.Id, Name = m.Name ?? "", IdCardNumber = m.IdCardNumber ?? "", + PassportNumber = m.PassportNumber, + AuthType = m.AuthType, Gender = m.Gender, Mobile = m.Mobile, BirthDate = m.BirthDate ?? DateTime.MinValue @@ -1311,6 +1321,8 @@ public class UserEventRegistrationService : IDynamicApiController, ITransient UserId = m.Id, Name = m.Name ?? "", IdCardNumber = m.IdCardNumber ?? "", + PassportNumber = m.PassportNumber, + AuthType = m.AuthType, Gender = m.Gender, Mobile = m.Mobile, BirthDate = m.BirthDate ?? DateTime.MinValue