dss 2 years ago
parent
commit
c4d040efd2

+ 1 - 0
src/CallCenter.Application/Handlers/FlowControl/AnswerExtToOuterNotificationHandler.cs

@@ -41,6 +41,7 @@ namespace CallCenter.Application.Handlers
                     EventName = notification.Attribute,
                     FromNo = notification.Outer.From,
                     ToNo = notification.Outer.To,
+                    AnswerNo = notification.TelNo
                 };
                 await _callDetailRepository.AddAsync(detail, cancellationToken);
 

+ 9 - 4
src/CallCenter.Application/Handlers/FlowControl/AnsweredExtToOuterNotificationHandler.cs

@@ -44,11 +44,16 @@ namespace CallCenter.Application.Handlers
                 };
                 await _callDetailRepository.AddAsync(detail, cancellationToken);
 
-                //调用业务通知 通知前端
-                var workModel = _userCacheManager.GetWorkByTel(notification.Outer.From);
-                if (workModel != null)
+                var callDetail = _callDetailRepository.GetAsync(x => x.CallId == model.Id && x.EventName == "ANSWER");
+
+                if (callDetail == 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);
+                    //调用业务通知 通知前端
+                    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);
+                    }
                 }
             }
         }

+ 9 - 4
src/CallCenter.Application/Handlers/FlowControl/AnsweredVisitorToExtNotificationHandler.cs

@@ -46,11 +46,16 @@ namespace CallCenter.Application.Handlers
                 };
                 await _callDetailRepository.AddAsync(detail, cancellationToken);
 
-                //调用业务通知 通知前端
-                var workModel = _userCacheManager.GetWorkByTel(notification.TelNo);
-                if (workModel != null)
+
+                var callDetail = _callDetailRepository.GetAsync(x => x.CallId == model.Id && x.EventName == "ANSWER");
+                if (callDetail == null)
                 {
-                    await _realtimeService.AnsweredAsync(workModel.UserId, new AnseredDto() { ConversationId= notification.Visitor.Id , From = notification.Visitor.From, Id = model.Id, To = notification.TelNo, CallType= ECallType.VisitorCallIn}, cancellationToken);
+                    //调用业务通知 通知前端
+                    var workModel = _userCacheManager.GetWorkByTel(notification.TelNo);
+                    if (workModel != null)
+                    {
+                        await _realtimeService.AnsweredAsync(workModel.UserId, new AnseredDto() { ConversationId = notification.Visitor.Id, From = notification.Visitor.From, Id = model.Id, To = notification.TelNo, CallType = ECallType.VisitorCallIn }, cancellationToken);
+                    }
                 }
             }
         }

+ 9 - 6
src/CallCenter.Application/Handlers/FlowControl/CdrNotificationHandler.cs

@@ -78,15 +78,18 @@ namespace CallCenter.Application.Handlers
                     callDto.Cdpn = callModel.ToNo ?? "";
                     if (callDto.Direction == ECallDirection.In)
                     {
-                        callDto.Answered = call.CallDetails?.FirstOrDefault(x => x.EventName == "ANSWER")?.AnswerNo ?? "";
-                        callDto.OnTime = call.CallDetails?.FirstOrDefault(x => x.EventName == "ANSWER")?.CreationTime;
-                        callDto.OnState = call.CallDetails?.Any(x => x.EventName == "ANSWER") ==true ? EOnState.On : EOnState.NoOn;
+                        callDto.Answered = call.CallDetails?.FirstOrDefault(x => x.EventName == "ANSWER")?.AnswerNo ?? call.CallDetails?.FirstOrDefault(x=>x.EventName == "ANSWERED")?.AnswerNo ?? "";
+                        callDto.OnTime = call.CallDetails?.FirstOrDefault(x => x.EventName == "ANSWER")?.CreationTime ?? call.CallDetails?.FirstOrDefault(x=>x.EventName=="ANSWERED")?.CreationTime;
+                        callDto.OnState = call.CallDetails?.Any(x => x.EventName == "ANSWER" || x.EventName== "ANSWERED") ==true ? EOnState.On : EOnState.NoOn;
                     }
                     else
                     {
-                        callDto.Answered = call.CallDetails?.FirstOrDefault(x => x.EventName == "ANSWERED")?.AnswerNo ?? "";
-                        callDto.OnTime = call.CallDetails?.FirstOrDefault(x => x.EventName == "ANSWERED")?.CreationTime;
-                        callDto.OnState = call.CallDetails?.Any(x => x.EventName == "ANSWERED") == true ? EOnState.On : EOnState.NoOn;
+                        //callDto.Answered = call.CallDetails?.FirstOrDefault(x => x.EventName == "ANSWERED")?.AnswerNo ?? "";
+                        //callDto.OnTime = call.CallDetails?.FirstOrDefault(x => x.EventName == "ANSWERED")?.CreationTime;
+                        //callDto.OnState = call.CallDetails?.Any(x => x.EventName == "ANSWERED") == true ? EOnState.On : EOnState.NoOn;
+                        callDto.Answered = call.CallDetails?.FirstOrDefault(x => x.EventName == "ANSWER")?.AnswerNo ?? call.CallDetails?.FirstOrDefault(x => x.EventName == "ANSWERED")?.AnswerNo ?? "";
+                        callDto.OnTime = call.CallDetails?.FirstOrDefault(x => x.EventName == "ANSWER")?.CreationTime ?? call.CallDetails?.FirstOrDefault(x => x.EventName == "ANSWERED")?.CreationTime;
+                        callDto.OnState = call.CallDetails?.Any(x => x.EventName == "ANSWER" || x.EventName == "ANSWERED") == true ? EOnState.On : EOnState.NoOn;
                     }
                     callDto.BeginTime = call.CreationTime;
                     callDto.ByeTime = call.CallDetails?.FirstOrDefault(x => x.EventName == "BYE").CreationTime;