Sfoglia il codice sorgente

Merge branch 'feature/snapshot' into dev

qinchaoyue 3 giorni fa
parent
commit
d36fe9e43b

+ 14 - 4
src/Hotline.Application/Snapshot/SnapshotPointsApplication.cs

@@ -4,6 +4,7 @@ using Hotline.Share.Dtos.Snapshot;
 using Hotline.Share.Enums.CallCenter;
 using Hotline.Share.Enums.Snapshot;
 using Hotline.Share.Tools;
+using Hotline.Snapshot;
 using Hotline.Snapshot.IRepository;
 using SqlSugar;
 using System;
@@ -60,7 +61,6 @@ 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)
@@ -73,11 +73,21 @@ public class SnapshotPointsApplication : ISnapshotPointsApplication, IScopeDepen
             {
                 await _safetyTypeRepository.Queryable()
                     .Where(m => m.Name == "安全卫士")
-                    .Select(m => m.Id)
                     .FirstAsync(token)
-                    .Then(async id =>
+                    .Then(async safetyType =>
                     {
-                        //citizen.
+                        if (dto.IsSecurityMax)
+                            citizen.SafetyTypes.Add(safetyType);
+                        else
+                        {
+                            var delete = citizen.SafetyTypes.Where(m => m.Name == "安全卫士").ToList();
+                            foreach (var item in delete)
+                            {
+                                citizen.SafetyTypes.Remove(item);
+                            }
+                        }
+                        await _citizenRepository.UpdateNav(citizen).Include(m => m.SafetyTypes)
+                                .ExecuteCommandAsync();
                     });
             });
     }

+ 4 - 1
src/Hotline.Application/Snapshot/SnapshotUserApplication.cs

@@ -61,6 +61,9 @@ public class SnapshotUserApplication : ISnapshotUserApplication, IScopeDependenc
             .LeftJoin<CitizenRelationSafetyType>((citizen, relation) => citizen.Id == relation.CitizenId)
             .LeftJoin<SafetyType>((citizen, relation, safety) => relation.SafetyTypeId == safety.Id)
             .WhereIF(dto.SafetyTypeId.NotNullOrEmpty(), (citizen, relation, safety) => safety.Id == dto.SafetyTypeId)
+            .WhereIF(dto.Name.NotNullOrEmpty(), (citizen, relation, safety) => citizen.Name.Contains(dto.Name))
+            .WhereIF(dto.PhoneNumber.NotNullOrEmpty(), (citizen, relation, safety) => citizen.PhoneNumber.Contains(dto.PhoneNumber))
+            .Where((citizen, relation, safety) => safety.Id != null)
             .Select((citizen, relation, safety) => new CitizenRelationSafetyTypeOutDto
             {
                 CitizenId = citizen.Id,
@@ -95,7 +98,7 @@ public class SnapshotUserApplication : ISnapshotUserApplication, IScopeDependenc
         var query = _citizenRepository.Queryable(includeDeleted: true)
             .LeftJoin<ThirdAccount>((citizen, third) => citizen.Id == third.ExternalId)
             .WhereIF(dto.PhoneNumber.NotNullOrEmpty(), (citizen, third) => citizen.PhoneNumber.Contains(dto.PhoneNumber))
-            .Select((citizen, third) => new GetThirdCitizenOutDto(), true);
+            .Select((citizen, third) => new GetThirdCitizenOutDto { CitizenId = citizen.Id}, true);
 #if DEBUG
         var sql = query.ToSqlString();
 #endif

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

@@ -57,6 +57,16 @@ public record CitizenRelationSafetyTypeInDto : PagedRequest
     /// 志愿者类型
     /// </summary>
     public string? SafetyTypeId { get; set; }
+
+    /// <summary>
+    /// 名字
+    /// </summary>
+    public string? Name { get; set; }
+
+    /// <summary>
+    /// 手机号码
+    /// </summary>
+    public string? PhoneNumber { get; set; }
 }
 
 public class CitizenRelationSafetyTypeOutDto

+ 36 - 1
test/Hotline.Tests/Application/PointsRecordApplicationTest.cs

@@ -2,8 +2,10 @@
 using Hotline.Application.Snapshot.Contracts;
 using Hotline.Identity.Accounts;
 using Hotline.Identity.Roles;
+using Hotline.Orders;
 using Hotline.Settings;
 using Hotline.Share.Dtos.Snapshot;
+using Hotline.Snapshot.IRepository;
 using Hotline.ThirdAccountDomainServices;
 using Hotline.ThirdAccountDomainServices.Interfaces;
 using Hotline.Users;
@@ -15,6 +17,7 @@ using System.Collections.Generic;
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
+using XF.Domain.Authentications;
 using XF.Domain.Cache;
 using XF.Domain.Repository;
 
@@ -24,10 +27,17 @@ public class PointsRecordApplicationTest : TestBase
 {
     private readonly ISnapshotPointsApplication _pointsRecordApplication;
     private readonly ISnapshotApplication _snapshotApplication;
-    public PointsRecordApplicationTest(IAccountRepository accountRepository, IRepository<Role> roleRepository, UserController userController, IServiceScopeFactory scopeFactory, IRepository<User> userRepository, IHttpContextAccessor httpContextAccessor, IThirdIdentiyService thirdIdentiyService, IThirdAccountRepository thirdAccountRepository, ITypedCache<SystemSetting> cacheSettingData, ThirdAccounSupplierFactory thirdAccountDomainFactory, ISnapshotPointsApplication pointsRecordApplication, ISnapshotApplication snapshotApplication, IServiceProvider serviceProvider) : base(accountRepository, roleRepository, userController, scopeFactory, userRepository, httpContextAccessor, thirdIdentiyService, thirdAccountRepository, cacheSettingData, thirdAccountDomainFactory, serviceProvider)
+    private readonly ISessionContext _sessionContext;
+    private readonly ICitizenRepository _citizenRepository;
+    private readonly ISafetyTypeRepository _safetyTypeRepository;
+
+    public PointsRecordApplicationTest(IAccountRepository accountRepository, IRepository<Role> roleRepository, UserController userController, IServiceScopeFactory scopeFactory, IRepository<User> userRepository, IHttpContextAccessor httpContextAccessor, IThirdIdentiyService thirdIdentiyService, IThirdAccountRepository thirdAccountRepository, ITypedCache<SystemSetting> cacheSettingData, ThirdAccounSupplierFactory thirdAccountDomainFactory, ISnapshotPointsApplication pointsRecordApplication, ISnapshotApplication snapshotApplication, IServiceProvider serviceProvider, ISessionContext sessionContext, ICitizenRepository citizenRepository, ISafetyTypeRepository safetyTypeRepository) : base(accountRepository, roleRepository, userController, scopeFactory, userRepository, httpContextAccessor, thirdIdentiyService, thirdAccountRepository, cacheSettingData, thirdAccountDomainFactory, serviceProvider)
     {
         _pointsRecordApplication = pointsRecordApplication;
         _snapshotApplication = snapshotApplication;
+        _sessionContext = sessionContext;
+        _citizenRepository = citizenRepository;
+        _safetyTypeRepository = safetyTypeRepository;
     }
 
     [Fact]
@@ -42,6 +52,31 @@ public class PointsRecordApplicationTest : TestBase
         items.ShouldNotBeNull();
     }
 
+    [Fact]
+    public async Task UpdateIsSecurityMax_Test()
+    {
+        SetWeiXin();
+        var inDto = new UpdateIsSecurityMaxAsync
+        {
+            UserId = _sessionContext.UserId,
+            IsSecurityMax = false
+        };
+        await _pointsRecordApplication.UpdateIsSecurityMaxAsync(inDto, CancellationToken.None);
+        var citizen = await _citizenRepository.Queryable()
+            .Where(m => m.Id == inDto.UserId)
+            .Includes(m => m.SafetyTypes)
+            .FirstAsync();
+        citizen.SafetyTypes.Any(m => m.Name == "安全卫士").ShouldBeFalse();
+
+        inDto.IsSecurityMax = true;
+        await _pointsRecordApplication.UpdateIsSecurityMaxAsync(inDto, CancellationToken.None);
+        citizen = await _citizenRepository.Queryable()
+            .Where(m => m.Id == inDto.UserId)
+            .Includes(m => m.SafetyTypes)
+            .FirstAsync();
+        citizen.SafetyTypes.Any(m => m.Name == "安全卫士").ShouldBeTrue();
+    }
+
     [Fact]
     public async Task GetPointsRank_Test()
     {

+ 1 - 0
test/Hotline.Tests/Application/SnapshotUserApplicationTest.cs

@@ -101,6 +101,7 @@ public class SnapshotUserApplicationTest : TestBase
         await _snapshotUserApplication.DeleteCitizenRelationSafetyAsync(deleteInDto);
 
         items = await _snapshotUserApplication.GetCitizenRelationSafetyType(inDto).ToListAsync();
+        items.Any(m => m.SafetyTypeId.IsNullOrEmpty()).ShouldBeFalse();
         item = items.FirstOrDefault(m => m.CitizenId == citizen.Id && m.SafetyTypeId == safetyType.Id);
         item.ShouldBeNull();
         inDto = new CitizenRelationSafetyTypeInDto