Ver Fonte

修复回访短信无人回复默认满意

qinchaoyue há 5 meses atrás
pai
commit
61b21bc422

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

@@ -5,6 +5,7 @@ using Hotline.Application.Tests.Infrastructure;
 using Hotline.Application.Tests.Mock;
 using Hotline.Caching.Interfaces;
 using Hotline.Caching.Services;
+using Hotline.CallCenter.Calls;
 using Hotline.FlowEngine.Notifications;
 using Hotline.FlowEngine.WorkflowModules;
 using Hotline.Identity.Accounts;
@@ -17,6 +18,7 @@ using Hotline.Share.Dtos.FlowEngine;
 using Hotline.Share.Dtos.Order;
 using Hotline.Share.Dtos.Order.Publish;
 using Hotline.Share.Dtos.Users;
+using Hotline.Share.Enums.CallCenter;
 using Hotline.Share.Enums.FlowEngine;
 using Hotline.Share.Enums.Order;
 using Hotline.Share.Enums.Settings;
@@ -50,8 +52,9 @@ public class OrderControllerTest : TestBase
     private readonly IOrderVisitRepository _orderVisitRepository;
     private readonly IRepository<SystemSetting> _systemSettingRepository;
     private readonly ISystemSettingCacheManager _systemSettingCacheManager;
+    private readonly IRepository<CallNative> _callNativeRepository;
 
-    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) : base(accountRepository, roleRepository, userController, scopeFactory, userRepository)
+    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) : base(accountRepository, roleRepository, userController, scopeFactory, userRepository)
     {
         _hotspotRepository = hotspotRepository;
         _orderController = orderController;
@@ -66,8 +69,41 @@ public class OrderControllerTest : TestBase
         _orderVisitRepository = orderVisitRepository;
         _systemSettingRepository = systemSettingRepository;
         _systemSettingCacheManager = systemSettingCacheManager;
+        _callNativeRepository = callNativeRepository;
     }
 
+    /// <summary>
+    /// 创建工单时传入一个错误callId,
+    /// 测试在延迟消息后会不会把工单测CallId修复成正确的CallId
+    /// </summary>
+    /// <returns></returns>
+    [Fact]
+    public async Task OrderCallIdRelevance_Test()
+    {
+        var callNo = DateTime.Now.ToString("yyyyMMddhhmmss") + "Flow";
+        var inDto = _fixture.Build<CallNative>()
+            .With(m => m.Id, Ulid.NewUlid().ToString())
+            .With(m => m.CallNo, callNo)
+            .With(m => m.Direction, ECallDirection.In)
+            .Create();
+        await _callNativeRepository.AddAsync(inDto);
+
+        var inDto2 = _fixture.Build<CallNative>()
+            .With(m => m.Id, Ulid.NewUlid().ToString())
+            .With(m => m.Direction, ECallDirection.Out)
+            .With(m => m.CallNo, callNo)
+            .Create();
+        await _callNativeRepository.AddAsync(inDto2);
+
+        SetZuoXi();
+        var order = _orderServiceMock.CreateOrder(callNo)
+            .办理到派单员()
+            .GetCreateResult();
+        order.ShouldNotBeNull();
+        var orderEntity = await _orderRepository.GetAsync(order.Id);
+        orderEntity.ShouldNotBeNull();
+        orderEntity.CallId.ShouldBe(inDto.Id);
+    }
 
     /// <summary>
     /// 创建工单并派送给派单员

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

@@ -27,10 +27,11 @@ public class OrderServiceMock
         _orderRepository = orderRepository;
     }
 
-    public OrderServiceMock CreateOrder()
+    public OrderServiceMock CreateOrder(string callId = "")
     {
         var json = "{\"sourceChannel\":\"因特网\",\"sourceChannelCode\":\"YTW\",\"transferPhone\":null,\"fromPhone\":null,\"acceptorName\":\"单元测试\",\"acceptorStaffNo\":\"\",\"fromName\":\"1233333333\",\"fromGender\":1,\"identityType\":1,\"licenceType\":null,\"licenceTypeCode\":null,\"licenceNo\":null,\"ageRange\":null,\"ageRangeCode\":null,\"contact\":\"12333333333\",\"isSecret\":false,\"acceptSms\":false,\"no\":null,\"title\":\"\",\"hotspotId\":\"1912\",\"eventCategoryId\":null,\"incidentTime\":null,\"incidentPurpose\":null,\"areaCode\":\"519800\",\"city\":\"省内\",\"street\":null,\"isRepeat\":\"false\",\"pushType\":null,\"pushTypeCode\":null,\"content\":\"单元测试内容\",\"duplicateIds\":[],\"duplicateTitle\":null,\"callAddress\":null,\"repeatableEventDetails\":[],\"orderExtension\":null,\"transpond\":false,\"isEnforcementOrder\":false,\"focusOnEventsArr\":[],\"focusOnEvents\":null,\"isFormalistWorkOrder\":false,\"isSensitiveWorkOrders\":false,\"isUrgent\":false,\"isThreePartyConference\":false,\"is24HoursComplete\":false,\"company\":null,\"orderPushTypes\":[],\"acceptType\":\"咨询\",\"acceptTypeCode\":\"10\",\"files\":[],\"hotspotSpliceName\":\"互联互通-转接乐山市12345\",\"hotspotName\":\"转接乐山市12345\",\"hotspotCode\":\"1912\",\"hotspotExternal\":\"19\",\"county\":\"\",\"town\":\"\"}";
         AddOrderDto = json.FromJson<AddOrderDto>();
+        if (callId.NotNullOrEmpty()) AddOrderDto.CallId = callId;
         AddOrderDto.Title = "单元测试" + DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss");
         CreateOrderOutDto = _orderController.Add(AddOrderDto).GetAwaiter().GetResult().ToJson().FromJson<CreateOrderOutDto>();
         return this;

+ 2 - 1
src/Hotline.Application.Tests/appsettings.Development.json

@@ -59,7 +59,8 @@
         }
     },
     "ConnectionStrings": {
-        "Hotline": "PORT=5432;DATABASE=hotline_dev;HOST=110.188.24.182;PASSWORD=fengwo11!!;USER ID=dev;"
+         "Hotline": "PORT=5432;DATABASE=hotline_dev;HOST=110.188.24.182;PASSWORD=fengwo11!!;USER ID=dev;"
+        //"Hotline": "PORT=5432;DATABASE=hotline;HOST=110.188.24.182;PASSWORD=fengwo11!!;USER ID=dev;"
     },
     "Cache": {
         "Host": "110.188.24.182",

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

@@ -17,6 +17,7 @@ using Hotline.Share.Enums.Order;
 using Hotline.Share.Mq;
 using Hotline.Share.Tools;
 using Hotline.Users;
+using Mapster;
 using MapsterMapper;
 using Microsoft.Extensions.Logging;
 using SqlSugar;
@@ -524,6 +525,11 @@ public abstract class DefaultCallApplication : ICallApplication
             .SetColumns(m => m.CallId == call.Id)
             .Where(m => m.Id == orderId)
             .ExecuteCommandAsync(cancellationToken);
+        // 推省上
+        await _capPublisher.PublishAsync(EventNames.HotlineCallConnectWithOrder, new PublishCallRecrodDto() {
+            Order = _orderRepository.GetAsync(orderId, cancellationToken).Adapt<OrderDto>(),
+            TrCallRecordDto = call.Adapt<TrCallDto>() 
+        }, cancellationToken: cancellationToken);
         _systemLogRepository.Add("延迟更新工单通话", orderId, $"原CallId: {callId}, 更新CallId: {call.Id}", status: 1);
     }
 

+ 2 - 1
src/Hotline.Application/Handlers/Order/OrderVisitSmsHandler.cs

@@ -14,6 +14,7 @@ using Hotline.Share.Enums.Push;
 using Hotline.Share.Mq;
 using Hotline.Share.Tools;
 using MediatR;
+using XF.Domain.Dependency;
 using XF.Domain.Repository;
 
 namespace Hotline.Application.Handlers.Order;
@@ -44,7 +45,7 @@ public class OrderVisitSmsHandler : INotificationHandler<ReceiveMessageNotify>
     }
 }
 
-public class OrderVisitSmsDelay : ICapSubscribe
+public class OrderVisitSmsDelay : ICapSubscribe, ITransientDependency
 {
     private readonly IOrderVisitDomainService _orderVisitDomainService;
 

+ 2 - 4
src/Hotline.Application/Systems/BaseDataApplication.cs

@@ -36,9 +36,6 @@ public class BaseDataApplication : IScopeDependency
 
     private ConcurrentDictionary<string, dynamic> _baseData = new ConcurrentDictionary<string, dynamic>();
 
-
-    //private ConcurrentDictionary<string, int> _baseType = new ConcurrentDictionary<string, int>();
-    //private ConcurrentDictionary<string, int> _enumType = new ConcurrentDictionary<string, int>();
     #region 内部方法
     private void Add(Type type)
     {
@@ -55,7 +52,8 @@ public class BaseDataApplication : IScopeDependency
         var result = _sysDicDataCacheManager
             .GetSysDicDataCache(key)
             .Where(x => x.DicDataValue != "-1")
-            .Select(m => new { m.Id, m.DicDataName, m.DicDataValue });
+            .Select(m => new { m.Id, m.DicDataName, m.DicDataValue })
+            .ToList();
         _baseData.TryAdd(name, result);
     }
     #endregion