|
@@ -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
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}
|