dss 2 жил өмнө
parent
commit
2ce9a73855

+ 43 - 3
src/CallCenter.Application/Handlers/CallState/AlertExtToOuterNotificationHandler.cs

@@ -1,6 +1,8 @@
-using CallCenter.Calls;
+using CallCenter.Caches;
+using CallCenter.Calls;
 using CallCenter.Notifications;
 using CallCenter.Share.Enums;
+using CallCenter.Tools;
 using MediatR;
 
 namespace CallCenter.Application.Handlers
@@ -9,12 +11,14 @@ namespace CallCenter.Application.Handlers
     {
         private readonly ICallRepository _callRepository;
         private readonly ICallDetailRepository _callDetailRepository;
+        private readonly IUserCacheManager _userCacheManager;
 
 
-        public AlertExtToOuterNotificationHandler(ICallRepository callRepository, ICallDetailRepository callDetailRepository)
+        public AlertExtToOuterNotificationHandler(ICallRepository callRepository, ICallDetailRepository callDetailRepository,IUserCacheManager userCacheManager)
         {
             _callRepository = callRepository;
             _callDetailRepository = callDetailRepository;
+            _userCacheManager = userCacheManager;
         }
 
         public async Task Handle(AlertExtToOuterNotification notification, CancellationToken cancellationToken)
@@ -39,7 +43,43 @@ namespace CallCenter.Application.Handlers
                     };
                     await _callDetailRepository.AddAsync(detail, cancellationToken);
                 }
-
+                //无记录的情况下
+                else
+                {
+                    string telNo = notification.Outer.From != "" ? notification.Outer.From : notification.TelNo;
+                    var workModel = _userCacheManager.GetWorkByTel(telNo);
+                    if (workModel!=null) 
+                    {
+                        var isp = PhoneIspTool.GetPhoneIsp(notification.Outer.To);
+                        var callModel = new Call()
+                        {
+                            CallStatus = ECallStatus.Alert,
+                            CallDirection = ECallDirection.Out,
+                            CallType = ECallType.ExtToOuter,
+                            ConversationId = notification.Outer.Id,
+                            FromNo = telNo,
+                            ToNo = notification.Outer.To,
+                            Trunk = notification.Outer.Trunk,
+                            UserId = workModel.UserId,
+                            UserName = workModel.UserName,
+                            PhoneIsp = isp
+                        };
+                        callModel.Modified();
+                        var callId = await _callRepository.AddAsync(callModel, cancellationToken);
+                        //写入明细
+                        var detail = new CallDetail()
+                        {
+                            CallId = callId,
+                            CallStatus = ECallStatus.Alert,
+                            ConversationId = notification.Outer.Id,
+                            OMCallId = notification.Outer.CallId,
+                            EventName = "Alert",
+                            FromNo = telNo,
+                            ToNo = notification.Outer.To,
+                        };
+                        await _callDetailRepository.AddAsync(detail, cancellationToken);
+                    }
+                }
             }
 
         }

+ 15 - 2
src/CallCenter.Application/Handlers/FlowControl/AnsweredExtToOuterNotificationHandler.cs

@@ -1,5 +1,7 @@
-using CallCenter.Calls;
+using CallCenter.Caches;
+using CallCenter.Calls;
 using CallCenter.Notifications;
+using CallCenter.Realtimes;
 using CallCenter.Share.Enums;
 using MediatR;
 
@@ -9,11 +11,15 @@ namespace CallCenter.Application.Handlers
     {
         private readonly ICallRepository _callRepository;
         private readonly ICallDetailRepository _callDetailRepository;
+        private readonly IUserCacheManager _userCacheManager;
+        private readonly IRealtimeService _realtimeService;
 
-        public AnsweredExtToOuterNotificationHandler(ICallRepository callRepository, ICallDetailRepository callDetailRepository)
+        public AnsweredExtToOuterNotificationHandler(ICallRepository callRepository, ICallDetailRepository callDetailRepository, IUserCacheManager userCacheManager, IRealtimeService realtimeService)
         {
             _callRepository = callRepository;
             _callDetailRepository = callDetailRepository;
+            _userCacheManager = userCacheManager;
+            _realtimeService = realtimeService;
         }
 
         public async Task Handle(AnsweredExtToOuterNotification notification, CancellationToken cancellationToken)
@@ -37,6 +43,13 @@ namespace CallCenter.Application.Handlers
                     ToNo = notification.Outer.To
                 };
                 await _callDetailRepository.AddAsync(detail, cancellationToken);
+
+                //调用业务通知 通知前端
+                var workModel = _userCacheManager.GetWorkByTel(notification.Outer.From);
+                if (workModel != null)
+                {
+                    await _realtimeService.AnsweredAsync(workModel.UserId, new AnseredDto() { ConversationId = notification.Outer.Id, From = notification.Outer.From, Id = model.Id, To = notification.Outer.To, CallType = ECallType.ExtToOuter }, cancellationToken);
+                }
             }
         }
     }

+ 3 - 12
src/CallCenter.Application/Handlers/FlowControl/AnsweredExtToOuterToExtNotificationHandler.cs

@@ -11,15 +11,13 @@ namespace CallCenter.Application.Handlers
     {
         private readonly ICallRepository _callRepository;
         private readonly ICallDetailRepository _callDetailRepository;
-        private readonly IUserCacheManager _userCacheManager;
-        private readonly IRealtimeService _realtimeService;
+        
 
-        public AnsweredExtToOuterToExtNotificationHandler(ICallRepository callRepository, ICallDetailRepository callDetailRepository,IUserCacheManager userCacheManager, IRealtimeService realtimeService)
+        public AnsweredExtToOuterToExtNotificationHandler(ICallRepository callRepository, ICallDetailRepository callDetailRepository)
         {
             _callRepository = callRepository;
             _callDetailRepository = callDetailRepository;
-            _userCacheManager = userCacheManager;
-            _realtimeService = realtimeService;
+            
         }
 
         public async Task Handle(AnsweredExtToOuterToExtNotification notification, CancellationToken cancellationToken)
@@ -43,13 +41,6 @@ namespace CallCenter.Application.Handlers
                     ToNo = notification.Outer.To,
                 };
                 await _callDetailRepository.AddAsync(detail, cancellationToken);
-
-                //调用业务通知 通知前端
-                var workModel = _userCacheManager.GetWorkByTel(notification.Outer.From);
-                if (workModel != null)
-                {
-                    await _realtimeService.AnsweredAsync(workModel.UserId, new AnseredDto() { ConversationId = notification.Outer.Id, From = notification.Outer.From, Id = model.Id, To = notification.Outer.To, CallType= ECallType.ExtToOuter }, cancellationToken);
-                }
             }
         }
     }