qinchaoyue 6 hodín pred
rodič
commit
2574141527

+ 9 - 2
src/Hotline.Application/Snapshot/SnapshotUserApplication.cs

@@ -45,6 +45,12 @@ public class SnapshotUserApplication : ISnapshotUserApplication, IScopeDependenc
             Id = dto.SafetyTypeId,
             Citizens = []
         };
+        var citizenExists = await _citizenRepository.Queryable()
+            .LeftJoin<CitizenRelationSafetyType>((citizen, relation) => citizen.Id == relation.CitizenId)
+            .Where((citizen, relation) => dto.CitizenIds.Contains(citizen.Id) && relation.SafetyTypeId == dto.SafetyTypeId)
+            .Select((citizen, relation) => citizen.Id)
+            .ToListAsync(token);
+        dto.CitizenIds = dto.CitizenIds.Except(citizenExists).ToList();
         foreach (var item in dto.CitizenIds)
         {
             safeType.Citizens.Add(new Citizen { Id = item });
@@ -54,7 +60,6 @@ public class SnapshotUserApplication : ISnapshotUserApplication, IScopeDependenc
             .Include(m => m.Citizens, new InsertNavOptions()
             {
                 ManyToManyNoDeleteMap = true
-
             })
             .ExecuteCommandAsync();
     }
@@ -101,8 +106,10 @@ public class SnapshotUserApplication : ISnapshotUserApplication, IScopeDependenc
     {
         var query = _citizenRepository.Queryable(includeDeleted: true)
             .LeftJoin<ThirdAccount>((citizen, third) => citizen.Id == third.ExternalId)
+            .LeftJoin<CitizenRelationSafetyType>((citizen, third, relation) => relation.CitizenId == citizen.Id)
             .WhereIF(dto.PhoneNumber.NotNullOrEmpty(), (citizen, third) => citizen.PhoneNumber.Contains(dto.PhoneNumber))
-            .Select((citizen, third) => new GetThirdCitizenOutDto { CitizenId = citizen.Id}, true);
+            .Where((citizen, third, relation) => relation.SafetyTypeId == dto.SafteyTypeId && relation.CitizenId == null)
+            .Select((citizen, third, relation) => new GetThirdCitizenOutDto { CitizenId = citizen.Id}, true);
 #if DEBUG
         var sql = query.ToSqlString();
 #endif

+ 5 - 0
src/Hotline.Share/Dtos/Snapshot/SnapshotUserInfoDto.cs

@@ -137,6 +137,11 @@ public class CitizenIdRelationSafetyTypeId
 
 public record GetThirdCitizenInDto : PagedRequest
 {
+    /// <summary>
+    /// 志愿者类型Id
+    /// </summary>
+    public string SafteyTypeId { get; set; }
+
     /// <summary>
     /// 电话号码
     /// </summary>