瀏覽代碼

Merge branch 'feature/snapshot' into dev

qinchaoyue 3 天之前
父節點
當前提交
b35143ed7e

+ 20 - 23
src/Hotline.Application/Snapshot/SnapshotBulletinApplication.cs

@@ -71,18 +71,11 @@ public class SnapshotBulletinApplication : ISnapshotBulletinApplication, IScopeD
         bulletin.ExaminManId = _sessionContext.RequiredUserId;
         await _bulletinRepository.UpdateAsync(bulletin, token);
 
-        var citizens = await _safetyTypeRepository.Queryable()
-            .LeftJoin<CitizenRelationSafetyType>((safety, relation) => safety.Id == relation.SafetyTypeId)
-            .LeftJoin<Citizen>((safety, relation, citizen) => relation.CitizenId == citizen.Id)
-            .Where((safety, relation, citizen) => safety.Id == bulletin.SafetyTypeId)
-            .Select((safety, relation, citizen) => citizen.Id)
-            .ToListAsync(token);
-
         await _capPublisher.PublishAsync(Share.Mq.EventNames.BulletinIsPass, bulletin.Id, cancellationToken: token);
     }
 
     /// <summary>
-    /// 发送通知公告
+    /// 执行发送通知公告
     /// </summary>
     /// <param name="bullutionId"></param>
     /// <param name="token"></param>
@@ -93,22 +86,26 @@ public class SnapshotBulletinApplication : ISnapshotBulletinApplication, IScopeD
             .Then(async bulletion =>
             {
                 if (bulletion!.IsSnapshot == false) return;
-                await _safetyTypeRepository.Queryable()
-                    .LeftJoin<CitizenRelationSafetyType>((safety, relation) => safety.Id == relation.SafetyTypeId)
-                    .LeftJoin<Citizen>((safety, relation, citizen) => relation.CitizenId == citizen.Id)
-                    .Where((safety, relation, citizen) => safety.Id == bulletion.SafetyTypeId)
-                    .Select((safety, relation, citizen) => relation.CitizenId)
-                    .ToListAsync(token)
-                    .Then(async citizenIds =>
-                    {
-                        var inDto = bulletion.Adapt<AddNotifyInDto>();
-                        inDto.UserIds = citizenIds;
-                        if (bulletion.VideoPath.NotNullOrEmpty())
+                if (bulletion!.SafetyTypeId!.IsNullOrEmpty()) return;
+                foreach (var safetyTypeId in bulletion!.SafetyTypeId!)
+                {
+                    await _safetyTypeRepository.Queryable()
+                        .LeftJoin<CitizenRelationSafetyType>((safety, relation) => safety.Id == relation.SafetyTypeId)
+                        .LeftJoin<Citizen>((safety, relation, citizen) => relation.CitizenId == citizen.Id)
+                        .Where((safety, relation, citizen) => safety.Id == safetyTypeId)
+                        .Select((safety, relation, citizen) => relation.CitizenId)
+                        .ToListAsync(token)
+                        .Then(async citizenIds =>
                         {
-                            inDto.NotifyType = ENotificationType.Video;
-                        }
-                        await _notificationDomainService.AddNotifyAsync(inDto, token);
-                    });
+                            var inDto = bulletion.Adapt<AddNotifyInDto>();
+                            inDto.UserIds = citizenIds;
+                            if (bulletion.VideoPath.NotNullOrEmpty())
+                            {
+                                inDto.NotifyType = ENotificationType.Video;
+                            }
+                            await _notificationDomainService.AddNotifyAsync(inDto, token);
+                        });
+                }
             });
     }
 

+ 19 - 1
src/Hotline.Application/Snapshot/SnapshotPointsApplication.cs

@@ -19,11 +19,13 @@ public class SnapshotPointsApplication : ISnapshotPointsApplication, IScopeDepen
 {
     private readonly ISnapshotPointsRecordRepository _snapshotPointsRecordRepository;
     private readonly ICitizenRepository _citizenRepository;
+    private readonly ISafetyTypeRepository _safetyTypeRepository;
 
-    public SnapshotPointsApplication(ISnapshotPointsRecordRepository snapshotPointsRecordRepository, ICitizenRepository citizenRepository)
+    public SnapshotPointsApplication(ISnapshotPointsRecordRepository snapshotPointsRecordRepository, ICitizenRepository citizenRepository, ISafetyTypeRepository safetyTypeRepository)
     {
         _snapshotPointsRecordRepository = snapshotPointsRecordRepository;
         _citizenRepository = citizenRepository;
+        _safetyTypeRepository = safetyTypeRepository;
     }
 
     public ISugarQueryable<PointsItemsOutDto> GetPointsItems(PointsItemsInDto dto)
@@ -58,9 +60,25 @@ public class SnapshotPointsApplication : ISnapshotPointsApplication, IScopeDepen
 
     public async Task UpdateIsSecurityMaxAsync(UpdateIsSecurityMaxAsync dto, CancellationToken token)
     {
+        // TODO 紧急
         await _citizenRepository.Updateable()
             .SetColumns(citizen => citizen.IsSecurityMax, dto.IsSecurityMax)
             .Where(citizen => citizen.Id == dto.UserId)
             .ExecuteCommandAsync(token);
+        await _citizenRepository.Queryable()
+            .Includes(m => m.SafetyTypes)
+            .Where(m => m.Id == dto.UserId)
+            .FirstAsync(token)
+            .Then(async citizen =>
+            {
+                await _safetyTypeRepository.Queryable()
+                    .Where(m => m.Name == "安全卫士")
+                    .Select(m => m.Id)
+                    .FirstAsync(token)
+                    .Then(async id =>
+                    {
+                        //citizen.
+                    });
+            });
     }
 }

+ 1 - 1
src/Hotline.Share/Dtos/Snapshot/SnapshotBulletinDto.cs

@@ -263,7 +263,7 @@ public class AddSnapshotBulletinInDto
     /// <summary>
     /// 志愿者类型Id
     /// </summary>
-    public string? SafetyTypeId { get; set; }
+    public IList<string>? SafetyTypeId { get; set; }
 
     /// <summary>
     /// 时间

+ 2 - 2
src/Hotline/Snapshot/SnapshotBulletin.cs

@@ -185,8 +185,8 @@ public class SnapshotBulletin : CreationEntity
     /// <summary>
     /// 志愿者类型Id
     /// </summary>
-    [SugarColumn(ColumnDescription = "志愿者类型Id")]
-    public string? SafetyTypeId { get; set; }
+    [SugarColumn(ColumnDescription = "志愿者类型Id", ColumnDataType = "json", IsJson = true)]
+    public List<string>? SafetyTypeId { get; set; }
 
     /// <summary>
     /// 视频封面

+ 2 - 2
test/Hotline.Tests/Application/SnapshotBulletionApplicationTest.cs

@@ -63,14 +63,14 @@ public class SnapshotBulletionApplicationTest : TestBase
             IsSnapshot = true,
             BulletinTypeId = bulletinType.DicDataValue,
             BulletinTypeName = bulletinType.DicDataName,
-            SafetyTypeId = safetyType.Id,
+            SafetyTypeId = [safetyType.Id],
             VideoCoverImgUrl = "222222",
             VideoPath = "333333"
         };
         var bulletinId = await _snapshotBulletinApplication.AddBulletinAsync(inDto, CancellationToken.None);
         var bulletin = await _bulletinRepository.GetAsync(bulletinId);
         bulletin.IsSnapshot.ShouldBe(true);
-        bulletin.SafetyTypeId.ShouldBe(safetyType.Id);
+        bulletin.SafetyTypeId.First().ShouldBe(safetyType.Id);
         bulletin.VideoPath.ShouldBe(inDto.VideoPath);
         bulletin.VideoCoverImgUrl.ShouldBe(inDto.VideoCoverImgUrl);
         await _snapshotBulletinApplication.CommitBulletinAsync(bulletinId, CancellationToken.None);