dss 2 år sedan
förälder
incheckning
20f723562c

+ 1 - 1
src/CallCenter.Api/Controllers/ReportController.cs

@@ -5,6 +5,7 @@ using Microsoft.Extensions.Options;
 
 namespace CallCenter.Api.Controllers;
 
+[AllowAnonymous]
 [ApiController]
 [Route("api/report")]
 public class ReportController : ControllerBase
@@ -18,7 +19,6 @@ public class ReportController : ControllerBase
         _deviceEventHandler = deviceEventHandler;
     }
 
-    [AllowAnonymous]
     [HttpGet]
     public async Task ReceiveEvents()
     {

+ 66 - 63
src/CallCenter.Application/Handlers/FlowControl/CdrNotificationHandler.cs

@@ -65,78 +65,81 @@ namespace CallCenter.Application.Handlers
                     model.OuterId = notification.OuterId;
 
                 await _callRecordRepository.AddAsync(model,cancellationToken);
-                
-                var callModel = await _callRepository.GetAsync(x => x.Id == callDetail.CallId,cancellationToken);
-                if (callModel!=null)
-                {
-                    callModel.Duration = double.Parse(model.Duration);
-                    await _callRepository.UpdateAsync(callModel, cancellationToken);
 
-                    var call = await _callRepository.GetExtAsync(callModel.Id, x => x.Includes(d => d.CallDetails));
-                    //TODO 推送通话报告
-                    OutCallDto callDto = new OutCallDto();
-                    callDto.CallId = callDetail.CallId;
-                    callDto.InfoType = EInfoType.Call;
-                    callDto.Direction = callModel.CallDirection;
-                    callDto.Cpn = callModel.FromNo ?? "";
-                    callDto.Cdpn = callModel.ToNo ?? "";
-                    if (callDto.Direction == ECallDirection.In)
-                    {
-                        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 == "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;
-                    callDto.TalkTime = call.Duration;
-                    callDto.SoundFileName = call.CallDetails?.FirstOrDefault(x => x.EventName == "BYE")?.Recording ?? "";
-                    callDto.EvaluateResult = "";
-                    callDto.EndBy = call.EndBy;
-                    callDto.InIvrTime = call.InIvrTime;
-                    callDto.OutIvrTime = call.OutIvrTime;
-                    callDto.InGroupTime = call.InGroupTime;
-                    callDto.OutGroupTime = call.OutGroupTime;
-                    callDto.InSeaTime = call.InSeaTime;
-                    callDto.ConnSeaTime = call.ConnSeaTime;
+                var ishave = await _callDetailRepository.AnyAsync(x => x.EventName == "ALERT" && x.OMCallId == notification.CallId && x.FromNo == notification.CDPN && x.ToNo == notification.CDPN);
 
-                    var list = new List<OutCallDto>();
-                    list.Add(callDto);
-                    
-                    try
+                if (ishave)
+                {
+                    var callModel = await _callRepository.GetAsync(x => x.Id == callDetail.CallId, cancellationToken);
+                    if (callModel != null)
                     {
-                        var client = _httpClientFactory.CreateClient();
-                        client.DefaultRequestHeaders.ConnectionClose = true;
-                        var requestContent = JsonSerializer.Serialize(list);
-                        _logger.LogInformation(requestContent);
-                        var content = new StringContent(requestContent,Encoding.UTF8, "application/json");
+                        callModel.Duration = double.Parse(model.Duration);
+                        await _callRepository.UpdateAsync(callModel, cancellationToken);
 
-                        var responseMessage = await client.PostAsync(_sendCallRecordOptions.Value.FwUrl, content, cancellationToken);
-                        var respContent = responseMessage.Content;
-                        var respContentString = await respContent.ReadAsStringAsync(cancellationToken);
-                        var result = JsonSerializer.Deserialize<FwResult>(respContentString);
-                        //成功
-                        if (result.code == 1)
+                        var call = await _callRepository.GetExtAsync(callModel.Id, x => x.Includes(d => d.CallDetails));
+                        //TODO 推送通话报告
+                        OutCallDto callDto = new OutCallDto();
+                        callDto.CallId = callDetail.CallId;
+                        callDto.InfoType = EInfoType.Call;
+                        callDto.Direction = callModel.CallDirection;
+                        callDto.Cpn = callModel.FromNo ?? "";
+                        callDto.Cdpn = callModel.ToNo ?? "";
+                        if (callDto.Direction == ECallDirection.In)
                         {
-
+                            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;
                         }
-                    }
-                    catch (Exception ex){
-                        throw new UserFriendlyException(ex.Message);
-                    }
-                    //HttpContent content = new 
-                }
+                        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 == "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;
+                        callDto.TalkTime = call.Duration;
+                        callDto.SoundFileName = call.CallDetails?.FirstOrDefault(x => x.EventName == "BYE")?.Recording ?? model.Recording;
+                        callDto.EvaluateResult = "";
+                        callDto.EndBy = call.EndBy;
+                        callDto.InIvrTime = call.InIvrTime;
+                        callDto.OutIvrTime = call.OutIvrTime;
+                        callDto.InGroupTime = call.InGroupTime;
+                        callDto.OutGroupTime = call.OutGroupTime;
+                        callDto.InSeaTime = call.InSeaTime;
+                        callDto.ConnSeaTime = call.ConnSeaTime;
 
+                        var list = new List<OutCallDto>();
+                        list.Add(callDto);
 
+                        try
+                        {
+                            var client = _httpClientFactory.CreateClient();
+                            client.DefaultRequestHeaders.ConnectionClose = true;
+                            var requestContent = JsonSerializer.Serialize(list);
+                            _logger.LogInformation(requestContent);
+                            var content = new StringContent(requestContent, Encoding.UTF8, "application/json");
 
+                            var responseMessage = await client.PostAsync(_sendCallRecordOptions.Value.FwUrl, content, cancellationToken);
+                            var respContent = responseMessage.Content;
+                            var respContentString = await respContent.ReadAsStringAsync(cancellationToken);
+                            var result = JsonSerializer.Deserialize<FwResult>(respContentString);
+                            //成功
+                            if (result.code == 1)
+                            {
+
+                            }
+                        }
+                        catch (Exception ex)
+                        {
+                            throw new UserFriendlyException(ex.Message);
+                        }
+                        //HttpContent content = new 
+                    }
+                }
             }
         }
     }