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