Bladeren bron

新增配置文件配置兴唐状态切换

qinchaoyue 2 maanden geleden
bovenliggende
commit
d6ca963fb2

+ 2 - 11
src/Hotline.Api/Controllers/IPPbxController.cs

@@ -44,6 +44,7 @@ using Hotline.Api.Filter;
 using XF.Domain.Cache;
 using Hotline.Application.CallCenter;
 using Mapster;
+using Tr.Sdk;
 
 namespace Hotline.Api.Controllers
 {
@@ -681,17 +682,7 @@ namespace Hotline.Api.Controllers
             {
                 await _iPPbxApplication.ResetTelStatus(null, dto.TelNo, CancellationToken.None);
             }
-            dto.Status = dto.Status switch
-            {
-                0 => 16, //签出
-                100 => 0, //签入
-                301 => 1, // 接听
-                202 => 2,// 置忙
-                200 => 3, // 置闲
-                303 => 17, //呼出
-                400 => 30, // 挂机
-                _ => -1
-            };
+            dto.Status = await _callTelClient.GetStatusAsync(dto.Status);
             await _callApplication.EndActionAsync(dto.Adapt<EndActionInDto>());
         }
 

+ 0 - 1
src/Hotline.Application/CallCenter/DefaultCallApplication.cs

@@ -139,7 +139,6 @@ public abstract class DefaultCallApplication : ICallApplication
         await _telOperationRepository.UpdateAsync(telOperation);
     }
 
-
     /// <summary>
     /// 新增黑名单
     /// </summary>

+ 22 - 2
src/Hotline.XingTang/CallTelClient.cs

@@ -1,10 +1,18 @@
-using Hotline.CallCenter.Tels;
+using Hotline.Caching.Interfaces;
+using Hotline.CallCenter.Tels;
 using Hotline.CallCenter.Tels.CallTelDomain;
 
 namespace Hotline.XingTang;
 
-internal class CallTelClient : ICallTelClient
+public class CallTelClient : ICallTelClient
 {
+    private readonly ISystemDicDataCacheManager _dicCache;
+
+    public CallTelClient(ISystemDicDataCacheManager dicCache)
+    {
+        _dicCache = dicCache;
+    }
+
     public Task AddBlacklistAsync(AddBlacklistRequest request, CancellationToken token)
     {
         throw new NotImplementedException();
@@ -15,6 +23,18 @@ internal class CallTelClient : ICallTelClient
         throw new NotImplementedException();
     }
 
+    public async Task<int> GetStatusAsync(int status)
+    {
+        var statusMap = _dicCache.XingTangOperationMap;
+        var result = statusMap.FirstOrDefault(m => m.DicDataName == status.ToString());
+        if (result == null) { return -1; }
+        if (int.TryParse(result.DicDataValue, out var value))
+        {
+            return value;
+        }
+        return -1;
+    }
+
     public Task<List<QueryBlacklistResponse>> QueryBlacklistAsync(QueryBlacklistRequest request, CancellationToken token)
     {
         throw new NotImplementedException();

+ 5 - 0
src/Hotline/Caching/Interfaces/ISysDicDataCacheManager.cs

@@ -72,5 +72,10 @@ namespace Hotline.Caching.Interfaces
         IReadOnlyCollection<SystemDicDataOutDto> OrderTag { get; }
 
         IReadOnlyCollection<SystemDicDataOutDto> VisitSatisfaction { get; }
+
+        /// <summary>
+        /// 兴唐动作状态映射
+        /// </summary>
+        IReadOnlyCollection<SystemDicDataOutDto> XingTangOperationMap { get; }
     }
 }

+ 5 - 0
src/Hotline/Caching/Services/SysDicDataCacheManager.cs

@@ -137,6 +137,11 @@ namespace Hotline.Caching.Services
         /// </summary>
         public IReadOnlyCollection<SystemDicDataOutDto> VisitSatisfaction => GetOrAdd(SysDicTypeConsts.VisitSatisfaction);
 
+        /// <summary>
+        /// 兴唐动作状态映射
+        /// </summary>
+        public IReadOnlyCollection<SystemDicDataOutDto> XingTangOperationMap => GetOrAdd(SysDicTypeConsts.XingTangOperationMap);
+
         public void RemoveSysDicDataCache(string code)
         {
             _cacheSysDicData.Remove(code);

+ 1 - 0
src/Hotline/CallCenter/Tels/ICallTelClient.cs

@@ -17,4 +17,5 @@ public interface ICallTelClient
     Task DelBlacklistAsync(DelBlacklistRequest request, CancellationToken token);
 
     Task<List<QueryBlacklistResponse>> QueryBlacklistAsync(QueryBlacklistRequest request, CancellationToken token);
+    Task<int> GetStatusAsync(int status);
 }

+ 16 - 0
src/Hotline/SeedData/SystemDicDataSeedData.cs

@@ -17,6 +17,18 @@ public class SystemDicDataSeedData : ISeedData<SystemDicData>
 
     public IEnumerable<SystemDicData> GetData(string dicTypeCode)
     {
+        if (dicTypeCode == SysDicTypeConsts.XingTangOperationMap)
+        {
+            return [
+                new() { Id = "08dd5248-5553-4c59-880d-3ddd35a32b09", DicDataValue = "16", DicDataName = "0", Sort = 1},
+                new() { Id = "08dd5248-52d9-4330-8e59-111a225006ba", DicDataValue = "0", DicDataName = "100", Sort = 2},
+                new() { Id = "08dd5192-3b06-4705-818d-cbdbf38d3e6b", DicDataValue = "1", DicDataName = "301", Sort = 3},
+                new() { Id = "08dd5191-8539-4436-8f25-1af26a368589", DicDataValue = "2", DicDataName = "202", Sort = 4},
+                new() { Id = "08dd5190-c854-462b-8ee8-ac45ad30b1dc", DicDataValue = "3", DicDataName = "200", Sort = 5},
+                new() { Id = "08dd5190-c185-4ac9-8ef5-e9ab9f8781aa", DicDataValue = "17", DicDataName = "303", Sort = 6},
+                new() { Id = "08dd5190-3fbb-4156-864e-9ebbe46b498e", DicDataValue = "30", DicDataName = "400", Sort = 7},
+                ];
+        }
         if (dicTypeCode == SysDicTypeConsts.SnapshotOrderLabel)
         {
             return [
@@ -192,6 +204,10 @@ public class SystemDicDataSeedData : ISeedData<SystemDicData>
         {
             dicType = ["08dd1f12-0e81-47dc-82d7-559e36a68e0d", "补充奖励类型"];
         }
+        if (dicTypeCode == SysDicTypeConsts.XingTangOperationMap)
+        {
+            dicType = ["08dbefe5-1cc5-4069-8d69-33afd978f68d", "兴唐动作状态映射"];
+        }
 
         return new SystemDicType
         {

+ 5 - 0
src/Hotline/Settings/SysDicTypeConsts.cs

@@ -306,4 +306,9 @@ public class SysDicTypeConsts
     /// 随手拍工单标签
     /// </summary>
     public static string SnapshotOrderLabel = "SnapshotOrderLabel";
+
+    /// <summary>
+    /// 兴唐动作状态映射
+    /// </summary>
+    public static string XingTangOperationMap = "XingTangOperationMap";
 }

+ 5 - 0
src/Tr.Sdk/CallTelClient.cs

@@ -27,6 +27,11 @@ public class CallTelClient : ICallTelClient
         await _trClient.DelBlacklistAsync(request.Adapt<Blacklist.DelBlacklistRequest>(), token);
     }
 
+    public Task<int> GetStatusAsync(int status)
+    {
+        throw new NotImplementedException();
+    }
+
     public async Task<List<QueryBlacklistResponse>> QueryBlacklistAsync(QueryBlacklistRequest request, CancellationToken token)
     {
         var result = await _trClient.QueryBlacklistAsync(request.Adapt<Blacklist.QueryBlacklistRequest>(), token);

+ 18 - 1
test/Hotline.Tests/Application/DefaultCallApplicationTest.cs

@@ -2,6 +2,7 @@
 using Hotline.Api.Controllers;
 using Hotline.Application.CallCenter;
 using Hotline.CallCenter.Calls;
+using Hotline.CallCenter.Tels;
 using Hotline.Identity.Accounts;
 using Hotline.Identity.Roles;
 using Hotline.Orders;
@@ -27,14 +28,30 @@ public class DefaultCallApplicationTest : TestBase
     private readonly IRepository<CallNative> _callNativeRepository;
     public readonly IFixture _fixture;
     private readonly IOrderRepository _orderRepository;
+    private readonly ICallTelClient _callTelClient;
 
-    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, IThirdAccountRepository thirdAccount, ITypedCache<SystemSetting> cacheSettingData) : base(accountRepository, roleRepository, userController, scopeFactory, userRepository, httpContextAccessor, thirdService, thirdAccount, cacheSettingData)
+    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, IThirdAccountRepository thirdAccount, ITypedCache<SystemSetting> cacheSettingData, ICallTelClient callTelClient) : base(accountRepository, roleRepository, userController, scopeFactory, userRepository, httpContextAccessor, thirdService, thirdAccount, cacheSettingData)
     {
         _fixture = new Fixture();
         _defaultCallApplication = defaultCallApplication;
         _orderVisitRepository = orderVisitRepository;
         _callNativeRepository = callNativeRepository;
         _orderRepository = orderRepository;
+        _callTelClient = callTelClient;
+    }
+
+    [Theory]
+    [InlineData(16, 0)]
+    [InlineData(0, 100)]
+    [InlineData(1, 301)]
+    [InlineData(2, 202)]
+    [InlineData(3, 200)]
+    [InlineData(17, 303)]
+    [InlineData(30, 400)]
+    public async Task GetStatus_Test(int xingtang, int hotline)
+    { 
+        var result = await _callTelClient.GetStatusAsync(hotline);
+        result.ShouldBe(xingtang);
     }
 
     [Fact]

+ 2 - 0
test/Hotline.Tests/Startup.cs

@@ -11,6 +11,7 @@ using Hotline.Application.Jobs;
 using Hotline.Application.StatisticalReport.CallReport;
 using Hotline.Authentications;
 using Hotline.CallCenter.Configs;
+using Hotline.CallCenter.Tels;
 using Hotline.Configurations;
 using Hotline.DI;
 using Hotline.EventBus;
@@ -183,6 +184,7 @@ public class Startup
             services.AddScoped<IGuiderSystemService, TiqnQueService>();
             services.AddScoped<IWorkflowDomainService, WorkflowDomainService>();
             services.AddScoped<IPdfManager, QuestPdfManager>();
+            services.AddScoped<ICallTelClient, XingTang.CallTelClient>();
 
             //ServiceLocator.Instance = services.BuildServiceProvider();
         }