Browse Source

Merge branch 'feature/snapshot' into dev

qinchaoyue 5 months ago
parent
commit
76f40b0a17

+ 1 - 1
src/Hotline.Application.Tests/Application/DefaultCallApplicationTest.cs

@@ -24,7 +24,7 @@ public class DefaultCallApplicationTest : TestBase
     public readonly IFixture _fixture;
     private readonly IOrderRepository _orderRepository;
 
-    public DefaultCallApplicationTest(IAccountRepository accountRepository, IRepository<Role> roleRepository, UserController userController, IServiceScopeFactory scopeFactory, IRepository<User> userRepository, IHttpContextAccessor httpContextAccessor, XingTangCallApplication defaultCallApplication, IOrderVisitRepository orderVisitRepository, IRepository<CallNative> callNativeRepository, IOrderRepository orderRepository) : base(accountRepository, roleRepository, userController, scopeFactory, userRepository, httpContextAccessor)
+    public DefaultCallApplicationTest(IAccountRepository accountRepository, IRepository<Role> roleRepository, UserController userController, IServiceScopeFactory scopeFactory, IRepository<User> userRepository, IHttpContextAccessor httpContextAccessor, XingTangCallApplication defaultCallApplication, IOrderVisitRepository orderVisitRepository, IRepository<CallNative> callNativeRepository, IOrderRepository orderRepository, IThirdIdentiyService thirdService) : base(accountRepository, roleRepository, userController, scopeFactory, userRepository, httpContextAccessor, thirdService)
     {
         _fixture = new Fixture();
         _defaultCallApplication = defaultCallApplication;

+ 1 - 1
src/Hotline.Application.Tests/Application/KnowApplicationTest.cs

@@ -31,7 +31,7 @@ public class KnowApplicationTest : TestBase
     private readonly IRepository<KnowledgeWord> _knowledgeWordRepository;
     private readonly IRepository<KnowledgeHotWord> _knowledgeHotWordRepository;
 
-    public KnowApplicationTest(IAccountRepository accountRepository, IRepository<Role> roleRepository, UserController userController, IServiceScopeFactory scopeFactory, IRepository<User> userRepository, IHttpContextAccessor httpContextAccessor, IKnowApplication knowApplication, IRepository<KnowledgeRelationType> knowledgeRelationTypeRepository, IMediator mediator, IRepository<KnowledgeBase.Knowledge> knowledgeRepository, IKnowledgeDomainService knowledgeDomainService, IRepository<KnowledgeWord> knowledgeWordRepository, IRepository<KnowledgeHotWord> knowledgeHotWordRepository) : base(accountRepository, roleRepository, userController, scopeFactory, userRepository, httpContextAccessor)
+    public KnowApplicationTest(IAccountRepository accountRepository, IRepository<Role> roleRepository, UserController userController, IServiceScopeFactory scopeFactory, IRepository<User> userRepository, IHttpContextAccessor httpContextAccessor, IKnowApplication knowApplication, IRepository<KnowledgeRelationType> knowledgeRelationTypeRepository, IMediator mediator, IRepository<KnowledgeBase.Knowledge> knowledgeRepository, IKnowledgeDomainService knowledgeDomainService, IRepository<KnowledgeWord> knowledgeWordRepository, IRepository<KnowledgeHotWord> knowledgeHotWordRepository, IThirdIdentiyService thirdService) : base(accountRepository, roleRepository, userController, scopeFactory, userRepository, httpContextAccessor, thirdService)
     {
         _knowApplication = knowApplication;
         _knowledgeRelationTypeRepository = knowledgeRelationTypeRepository;

+ 3 - 1
src/Hotline.Application.Tests/Application/SnapshotApplicationTest.cs

@@ -34,7 +34,7 @@ public class SnapshotApplicationTest : TestBase
     private readonly IOrderRepository _orderRepository;
     private readonly IOrderSnapshotRepository _orderSnapshotRepository;
 
-    public SnapshotApplicationTest(IAccountRepository accountRepository, IRepository<Role> roleRepository, UserController userController, IServiceScopeFactory scopeFactory, IRepository<User> userRepository, IHttpContextAccessor httpContextAccessor, ISnapshotApplication snapshotApplication, IIdentityAppService identityAppService, IRepository<RedPackRecord> redPackRecordRepository, IIndustryApplication industryApplication, IIndustryRepository industryRepository, IFileRepository fileRepository, OrderServiceMock orderServiceMock, IOrderRepository orderRepository, IOrderSnapshotRepository orderSnapshotRepository) : base(accountRepository, roleRepository, userController, scopeFactory, userRepository, httpContextAccessor)
+    public SnapshotApplicationTest(IAccountRepository accountRepository, IRepository<Role> roleRepository, UserController userController, IServiceScopeFactory scopeFactory, IRepository<User> userRepository, IHttpContextAccessor httpContextAccessor, ISnapshotApplication snapshotApplication, IIdentityAppService identityAppService, IRepository<RedPackRecord> redPackRecordRepository, IIndustryApplication industryApplication, IIndustryRepository industryRepository, IFileRepository fileRepository, OrderServiceMock orderServiceMock, IOrderRepository orderRepository, IOrderSnapshotRepository orderSnapshotRepository, IThirdIdentiyService thirdService) : base(accountRepository, roleRepository, userController, scopeFactory, userRepository, httpContextAccessor, thirdService)
     {
         _snapshotApplication = snapshotApplication;
         _identityAppService = identityAppService;
@@ -149,9 +149,11 @@ public class SnapshotApplicationTest : TestBase
     [Fact]
     public async Task GetSnapshotUserInfo_Test()
     {
+        await _identityAppService.GetThredTokenAsync(new ThirdTokenInDto());        
         var result = await _snapshotApplication.GetSnapshotUserInfoAsync();
         result.ShouldNotBeNull();
         result.PhoneNumber.ShouldNotBeNullOrEmpty();
+        result.PhoneNumberMask.Contains("***").ShouldBeTrue();
     }
 
     [Fact]

+ 1 - 1
src/Hotline.Application.Tests/Application/SystemSettingCacheManagerTest.cs

@@ -22,7 +22,7 @@ public class SystemSettingCacheManagerTest : TestBase
     private readonly ISystemDicDataCacheManager _systemDicDataCacheManager;
     private readonly IRepository<SystemSetting> _systemSettingRepository;
 
-    public SystemSettingCacheManagerTest(IAccountRepository accountRepository, IRepository<Role> roleRepository, UserController userController, IServiceScopeFactory scopeFactory, IRepository<User> userRepository, IHttpContextAccessor httpContextAccessor, ISystemSettingCacheManager systemSettingCacheManager, ISystemDicDataCacheManager systemDicDataCacheManager, IRepository<SystemSetting> systemSettingRepository) : base(accountRepository, roleRepository, userController, scopeFactory, userRepository, httpContextAccessor)
+    public SystemSettingCacheManagerTest(IAccountRepository accountRepository, IRepository<Role> roleRepository, UserController userController, IServiceScopeFactory scopeFactory, IRepository<User> userRepository, IHttpContextAccessor httpContextAccessor, ISystemSettingCacheManager systemSettingCacheManager, ISystemDicDataCacheManager systemDicDataCacheManager, IRepository<SystemSetting> systemSettingRepository, IThirdIdentiyService thirdService) : base(accountRepository, roleRepository, userController, scopeFactory, userRepository, httpContextAccessor, thirdService)
     {
         _systemSettingCacheManager = systemSettingCacheManager;
         _systemDicDataCacheManager = systemDicDataCacheManager;

+ 1 - 2
src/Hotline.Application.Tests/Controller/DefaultSessionContext.cs

@@ -30,8 +30,7 @@ public class DefaultSessionContext : ISessionContext, IScopeDependency
     }
     public HttpContext? HttpContext { get => GetContext(); set => _content = value; }
 
-
-    public string? OpenId { get; init; }
+    public string? OpenId { get { return _contextAccessor.HttpContext.User.FindFirstValue(AppClaimTypes.OpenId); } init { } }
 
     /// <summary>
     /// Id of current tenant or null for host

+ 1 - 1
src/Hotline.Application.Tests/Controller/KnowledgeControllerTest.cs

@@ -27,7 +27,7 @@ public class KnowledgeControllerTest : TestBase
     private readonly KnowledgeController _knowledgeController;
     private readonly IRepository<KnowledgeBase.Knowledge> _knowledgeRepository;
 
-    public KnowledgeControllerTest(IAccountRepository accountRepository, IRepository<Role> roleRepository, UserController userController, IServiceScopeFactory scopeFactory, IRepository<User> userRepository, KnowledgeServiceMock knowledgeServiceMock, KnowledgeController knowledgeController, IRepository<KnowledgeBase.Knowledge> knowledgeRepository, IHttpContextAccessor httpContextAccessor) : base(accountRepository, roleRepository, userController, scopeFactory, userRepository, httpContextAccessor)
+    public KnowledgeControllerTest(IAccountRepository accountRepository, IRepository<Role> roleRepository, UserController userController, IServiceScopeFactory scopeFactory, IRepository<User> userRepository, KnowledgeServiceMock knowledgeServiceMock, KnowledgeController knowledgeController, IRepository<KnowledgeBase.Knowledge> knowledgeRepository, IHttpContextAccessor httpContextAccessor, IThirdIdentiyService thirdService) : base(accountRepository, roleRepository, userController, scopeFactory, userRepository, httpContextAccessor, thirdService)
     {
         _knowledgeServiceMock = knowledgeServiceMock;
         _knowledgeController = knowledgeController;

+ 1 - 1
src/Hotline.Application.Tests/Controller/OrderControllerTest.cs

@@ -64,7 +64,7 @@ public class OrderControllerTest : TestBase
     private readonly XingTangCallApplication _defaultCallApplication;
     private readonly ISqlSugarClient _capSqlClient;
 
-    public OrderControllerTest(IAccountRepository accountRepository, IRepository<Role> roleRepository, UserController userController, IRepository<Hotspot> hotspotRepository, OrderController orderController, IOrderRepository orderRepository, IServiceScopeFactory scopeFactory, IRepository<User> userRepository, OrderServiceMock orderServiceMock, IRepository<OrderPublish> orderPublishRepository, INotificationHandler<EndWorkflowNotify> orderPublishEndWorkflowHandler, IOrderVisitRepository orderVisitRepository, IRepository<SystemSetting> systemSettingRepository, ISystemSettingCacheManager systemSettingCacheManager, IRepository<CallNative> callNativeRepository, IRepository<CallidRelation> callIdRelationRepository, XingTangCallApplication defaultCallApplication, ISugarUnitOfWork<CapDbContext> capDbContext, IHttpContextAccessor httpContextAccessor) : base(accountRepository, roleRepository, userController, scopeFactory, userRepository, httpContextAccessor)
+    public OrderControllerTest(IAccountRepository accountRepository, IRepository<Role> roleRepository, UserController userController, IRepository<Hotspot> hotspotRepository, OrderController orderController, IOrderRepository orderRepository, IServiceScopeFactory scopeFactory, IRepository<User> userRepository, OrderServiceMock orderServiceMock, IRepository<OrderPublish> orderPublishRepository, INotificationHandler<EndWorkflowNotify> orderPublishEndWorkflowHandler, IOrderVisitRepository orderVisitRepository, IRepository<SystemSetting> systemSettingRepository, ISystemSettingCacheManager systemSettingCacheManager, IRepository<CallNative> callNativeRepository, IRepository<CallidRelation> callIdRelationRepository, XingTangCallApplication defaultCallApplication, ISugarUnitOfWork<CapDbContext> capDbContext, IHttpContextAccessor httpContextAccessor, IThirdIdentiyService thirdService) : base(accountRepository, roleRepository, userController, scopeFactory, userRepository, httpContextAccessor, thirdService)
     {
         _hotspotRepository = hotspotRepository;
         _orderController = orderController;

+ 1 - 1
src/Hotline.Application.Tests/Controller/SnapshotControllerTest.cs

@@ -27,7 +27,7 @@ public class SnapshotControllerTest : TestBase
     private readonly IOrderRepository _orderRepository;
     private readonly IOrderSnapshotRepository _orderSnapshotRepository;
     private readonly IIndustryRepository _industryRepository;
-    public SnapshotControllerTest(IAccountRepository accountRepository, IRepository<Role> roleRepository, UserController userController, IServiceScopeFactory scopeFactory, IRepository<User> userRepository, IHttpContextAccessor httpContextAccessor, SnapshotController snapshotController, IOrderRepository orderRepository, IOrderSnapshotRepository orderSnapshotRepository, IIndustryRepository industryRepository) : base(accountRepository, roleRepository, userController, scopeFactory, userRepository, httpContextAccessor)
+    public SnapshotControllerTest(IAccountRepository accountRepository, IRepository<Role> roleRepository, UserController userController, IServiceScopeFactory scopeFactory, IRepository<User> userRepository, IHttpContextAccessor httpContextAccessor, SnapshotController snapshotController, IOrderRepository orderRepository, IOrderSnapshotRepository orderSnapshotRepository, IIndustryRepository industryRepository, IThirdIdentiyService thirdService) : base(accountRepository, roleRepository, userController, scopeFactory, userRepository, httpContextAccessor, thirdService)
     {
         _snapshotController = snapshotController;
         _snapshotController.ControllerContext = new ControllerContext

+ 1 - 1
src/Hotline.Application.Tests/Domain/OrderVisitDomainServiceTest.cs

@@ -28,7 +28,7 @@ public class OrderVisitDomainServiceTest : TestBase
     private readonly IOrderRepository _orderRepository;
     private readonly OrderServiceMock _orderServiceMock;
 
-    public OrderVisitDomainServiceTest(IAccountRepository accountRepository, IRepository<Role> roleRepository, UserController userController, IServiceScopeFactory scopeFactory, IRepository<User> userRepository, IOrderVisitDomainService orderVisitDomainService, IOrderVisitRepository orderVisitRepository, IRepository<OrderVisitDetail> orderVisitDetailRepository, Publisher publisher, IOrderRepository orderRepository, OrderServiceMock orderServiceMock, IHttpContextAccessor httpContextAccessor) : base(accountRepository, roleRepository, userController, scopeFactory, userRepository, httpContextAccessor)
+    public OrderVisitDomainServiceTest(IAccountRepository accountRepository, IRepository<Role> roleRepository, UserController userController, IServiceScopeFactory scopeFactory, IRepository<User> userRepository, IOrderVisitDomainService orderVisitDomainService, IOrderVisitRepository orderVisitRepository, IRepository<OrderVisitDetail> orderVisitDetailRepository, Publisher publisher, IOrderRepository orderRepository, OrderServiceMock orderServiceMock, IHttpContextAccessor httpContextAccessor, IThirdIdentiyService thirdService) : base(accountRepository, roleRepository, userController, scopeFactory, userRepository, httpContextAccessor, thirdService)
     {
         _orderVisitDomainService = orderVisitDomainService;
         _orderVisitRepository = orderVisitRepository;

+ 2 - 1
src/Hotline.Application.Tests/Mock/ThirdTestService.cs

@@ -1,8 +1,9 @@
 using Hotline.Share.Dtos.Snapshot;
 using Hotline.Users;
+using XF.Domain.Dependency;
 
 namespace Hotline.Application.Tests.Mock;
-public class ThirdTestService : IThirdIdentiyService
+public class ThirdTestService : IThirdIdentiyService, IScopeDependency
 {
     public async Task<ThirdPhoneOutDto> GetPhoneNumberAsync(ThirdTokenDto dto)
     {

+ 0 - 1
src/Hotline.Application.Tests/Startup.cs

@@ -153,7 +153,6 @@ public class Startup
 
             //services.AddScoped<IThirdIdentiyService, WeChatService>();
             services.AddScoped<IThirdIdentiyService, ThirdTestService>();
-            // services.AddScoped<IThirdIdentiyService, WeChatService>();
 
             //services.AddScoped<IThirdAccountRepository, ThirdAccountRepository>();
             services.AddApplication();

+ 6 - 2
src/Hotline.Application.Tests/TestBase.cs

@@ -26,10 +26,11 @@ public class TestBase
     public readonly IFixture _fixture;
     private readonly IServiceScopeFactory _scopeFactory;
     public readonly IHttpContextAccessor _httpContextAccessor;
+    public readonly IThirdIdentiyService _thirdIdentiyService;
 
-    public TestBase(IAccountRepository accountRepository, IRepository<Role> roleRepository, UserController userController, IServiceScopeFactory scopeFactory, IRepository<User> userRepository, IHttpContextAccessor httpContextAccessor)
+    public TestBase(IAccountRepository accountRepository, IRepository<Role> roleRepository, UserController userController, IServiceScopeFactory scopeFactory, IRepository<User> userRepository, IHttpContextAccessor httpContextAccessor, IThirdIdentiyService thirdIdentiyService)
     {
-
+        _thirdIdentiyService = thirdIdentiyService;
         _fixture = new Fixture();
         _accountRepository = accountRepository;
         _roleRepository = roleRepository;
@@ -47,6 +48,7 @@ public class TestBase
             httpContextAccessor.HttpContext = new DefaultHttpContext();
             SetZuoXi();
         }
+
     }
 
     public void SetPaiDanYuan()
@@ -104,6 +106,7 @@ public class TestBase
                 d => d.Includes(x => x.Roles)).GetAwaiter().GetResult();
         }
         var user = _userRepository.GetAsync(account.Id).GetAwaiter().GetResult();
+        var third = _thirdIdentiyService.GetTokenAsync(new Share.Dtos.Snapshot.ThirdTokenDto());
 
         List<Claim> userClaims = [ 
             new(JwtClaimTypes.Subject, account.Id),
@@ -117,6 +120,7 @@ public class TestBase
             new(AppClaimTypes.DepartmentAreaName, user.Organization?.AreaName ?? string.Empty), 
             new(AppClaimTypes.DepartmentLevel, user.Organization?.Level.ToString() ?? string.Empty), 
             new(AppClaimTypes.AreaId, user.OrgId?.GetHigherOrgId() ?? string.Empty),
+            new(AppClaimTypes.OpenId, third.Result.OpenId ?? string.Empty),
         ];
         ClaimsIdentity identity = new ClaimsIdentity(userClaims);
         var principal = new ClaimsPrincipal(identity);

+ 9 - 4
src/Hotline.Application/Snapshot/SnapshotApplicationBase.cs

@@ -203,6 +203,11 @@ public abstract class SnapshotApplicationBase
             throw UserFriendlyException.SameMessage("工单不存在");
 
         var outDto = publish.Adapt<OrderPublishDetailOutDto>();
+        var fileServiceUrl = _systemSettingCacheManager.FileServerUrl;
+        foreach (var item in outDto.FileJson)
+        {
+            item.Path = fileServiceUrl + item.Path;
+        }
         outDto.Workflow = await _workflowTraceRepository.Queryable()
             .Where(m => m.ExternalId == publish.OrderId && m.AcceptTime != null && m.AcceptorOrgName != null)
             .OrderBy(m => m.AcceptTime)
@@ -237,7 +242,7 @@ public abstract class SnapshotApplicationBase
         var thirdAccount = await _thirdAccountRepository.QueryByOpenIdAsync(openId);
         var dayTime = DateTime.Now;
         var readPack = await _redPackRecordRepository.Queryable()
-            .Where(m => m.WXOpenId == openId && m.PickupStatus == Share.Enums.Snapshot.ERedPackPickupStatus.Received)
+            .Where(m => m.WXOpenId == openId && m.PickupStatus == ERedPackPickupStatus.Received)
             .Where(m => m.CreationTime.Date == dayTime.Date)
             .Select(m => SqlFunc.AggregateSum(m.Amount))
             .FirstAsync();
@@ -246,9 +251,9 @@ public abstract class SnapshotApplicationBase
             .Where(m => m.Contact == thirdAccount.PhoneNumber)
             .Select(m => new SnapshotUserInfoOutDto
             {
-                NoReplyCount = SqlFunc.AggregateSum(SqlFunc.IIF(m.Status < Share.Enums.Order.EOrderStatus.Filed, 1, 0)),
-                ReplyCount = SqlFunc.AggregateSum(SqlFunc.IIF(m.Status >= Share.Enums.Order.EOrderStatus.Filed, 1, 0)),
-                AppraiseCount = SqlFunc.AggregateSum(SqlFunc.IIF(m.Status == Share.Enums.Order.EOrderStatus.Visited, 1, 0)),
+                NoReplyCount = SqlFunc.AggregateSum(SqlFunc.IIF(m.Status < EOrderStatus.Filed, 1, 0)),
+                ReplyCount = SqlFunc.AggregateSum(SqlFunc.IIF(m.Status >= EOrderStatus.Filed, 1, 0)),
+                AppraiseCount = SqlFunc.AggregateSum(SqlFunc.IIF(m.Status == EOrderStatus.Visited, 1, 0)),
             }).FirstAsync();
 
         outDto.DayAmount = readPack;

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

@@ -1,4 +1,6 @@
-namespace Hotline.Share.Dtos.Snapshot;
+using Hotline.Share.Tools;
+
+namespace Hotline.Share.Dtos.Snapshot;
 public class SnapshotUserInfoOutDto
 {
     /// <summary>
@@ -7,14 +9,30 @@ public class SnapshotUserInfoOutDto
     public string PhoneNumber { get; set; }
 
     /// <summary>
-    /// 当日奖励
+    /// 电话号码脱敏
+    /// </summary>
+    public string PhoneNumberMask => PhoneNumber.MaskPhoneNumber();
+
+    private long dayAmount;
+
+    /// <summary>
+    /// 当日奖励(单元: 元)
     /// </summary>
-    public int DayAmount { get; set; }
+    public long DayAmount
+    {
+        get
+        {
+            return (int)(dayAmount * 1000);
+        }
+        set { dayAmount = value; }
+    }
+
+    private long totalAmount;
 
     /// <summary>
-    /// 总奖励(单位:分)
+    /// 总奖励(单位:)
     /// </summary>
-    public long TotalAmount { get; set; }
+    public long TotalAmount { get { return totalAmount * 1000; } set { totalAmount = value; } }
 
     /// <summary>
     /// 未回复数量

+ 34 - 0
src/Hotline.Share/Tools/DataMaskExtensions.cs

@@ -0,0 +1,34 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Hotline.Share.Tools;
+
+public static class DataMaskExtensions
+{
+    public static string Mask(this string original, int startIndex = 0, int length = 4)
+    {
+        var headStr = original.Substring(0, startIndex);
+        var tailStr = original.Substring(startIndex + length);
+        var sb = new StringBuilder(length);
+        for (int i = 0;i < length;i++)
+        {
+            sb.Append('*');
+        }
+
+        return $"{headStr}{sb}{tailStr}";
+    }
+
+    public static string MaskPhoneNumber(this string original)
+    {
+        if (original.Length != 11) return string.Empty;
+        return original.Mask(3, 4);
+    }
+
+    public static string MaskIdCard(this string original)
+    {
+        return original.Mask(3, 12);
+    }
+}

+ 1 - 0
src/Hotline/JudicialManagement/JudicialManagementOrders.cs

@@ -2,6 +2,7 @@
 using Hotline.Share.Dtos.File;
 using Hotline.Share.Enums.JudicialManagement;
 using Hotline.Share.Enums.Order;
+using Hotline.Share.Tools;
 using SqlSugar;
 using XF.Domain.Extensions;
 using XF.Domain.Repository;

+ 1 - 0
src/Hotline/Orders/Order.cs

@@ -7,6 +7,7 @@ using Hotline.Share.Dtos.File;
 using Hotline.Share.Enums.FlowEngine;
 using Hotline.Share.Enums.Order;
 using Hotline.Share.Enums.Settings;
+using Hotline.Share.Tools;
 using Hotline.Users;
 using SqlSugar;
 using System.ComponentModel;

+ 23 - 23
src/XF.Domain/Extensions/DataMaskExtensions.cs

@@ -6,29 +6,29 @@ using System.Threading.Tasks;
 
 namespace XF.Domain.Extensions;
 
-public static class DataMaskExtensions
-{
-    public static string Mask(this string original, int startIndex = 0, int length = 4)
-    {
-        var headStr = original.Substring(0, startIndex);
-        var tailStr = original.Substring(startIndex + length);
-        var sb = new StringBuilder(length);
-        for (int i = 0; i < length; i++)
-        {
-            sb.Append('*');
-        }
+//public static class DataMaskExtensions
+//{
+//    public static string Mask(this string original, int startIndex = 0, int length = 4)
+//    {
+//        var headStr = original.Substring(0, startIndex);
+//        var tailStr = original.Substring(startIndex + length);
+//        var sb = new StringBuilder(length);
+//        for (int i = 0; i < length; i++)
+//        {
+//            sb.Append('*');
+//        }
 
-        return $"{headStr}{sb}{tailStr}";
-    }
+//        return $"{headStr}{sb}{tailStr}";
+//    }
 
-    public static string MaskPhoneNumber(this string original)
-    {
-        if (original.Length != 11) return string.Empty;
-        return original.Mask(3, 4);
-    }
+//    public static string MaskPhoneNumber(this string original)
+//    {
+//        if (original.Length != 11) return string.Empty;
+//        return original.Mask(3, 4);
+//    }
 
-    public static string MaskIdCard(this string original)
-    {
-        return original.Mask(3, 12);
-    }
-}
+//    public static string MaskIdCard(this string original)
+//    {
+//        return original.Mask(3, 12);
+//    }
+//}