CallMapperConfigs.cs 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. using Hotline.CallCenter.Calls;
  2. using Hotline.Share.Dtos.TrCallCenter;
  3. using Hotline.Share.Enums.CallCenter;
  4. using Mapster;
  5. using System;
  6. using System.Collections.Generic;
  7. using System.Linq;
  8. using System.Text;
  9. using System.Threading.Tasks;
  10. using Hotline.CallCenter.Tels;
  11. using XingTang.Sdk;
  12. namespace Hotline.Application.Mappers
  13. {
  14. public class CallMapperConfigs : IRegister
  15. {
  16. public void Register(TypeAdapterConfig config)
  17. {
  18. config.ForType<ReceiveCallRecordDto, TrCallRecord>()
  19. .Map(d => d.User, x => x.user)
  20. .Map(d => d.RecordingFileName, x => x.recording_file_name)
  21. .Map(d => d.CallDirection, x => x.call_direction == "in" ? ECallDirection.In : ECallDirection.Out)
  22. .Map(d => d.EndBy,
  23. x => x.hangup_side == "caller"
  24. ? EEndBy.From
  25. : (x.hangup_side == "callee" ? EEndBy.To : EEndBy.None))
  26. .Map(d => d.AgentTransferNumber, x => x.agent_transfer_number)
  27. .Map(d => d.CallAccept, x => x.call_accept)
  28. .Map(d => d.CPN, x => x.caller_id_number)
  29. .Map(d => d.CPNName, x => x.caller_id_name)
  30. .Map(d => d.CDPN, x => x.destination_number)
  31. .Map(d => d.RecordingFileUrl, x => x.recording_file_url)
  32. .Map(d => d.Gateway, x => x.gateway)
  33. .Map(d => d.OtherStr, x => x.other_str)
  34. .Map(d => d.OtherAccept, x => x.other_accept)
  35. .Map(d => d.Status, x => x.status)
  36. .Map(d => d.OlaQueue, x => x.ola_queue)
  37. .Map(d => d.BatchAccept, x => x.batch_accept)
  38. .Map(d => d.IvrDtmf, x => x.ivr_dtmf)
  39. .Map(d => d.DtmfType, x => x.dtmf_type)
  40. .AfterMapping((s, d) => { d.CreatedTime = DateTime.Parse(s.created_time); })
  41. .AfterMapping((s, d) => { d.AnsweredTime = FormatDateTime(s.answered_time); })
  42. .AfterMapping((s, d) => { d.OverTime = DateTime.Parse(s.over_time); })
  43. .AfterMapping((s, d) => { d.BeginIvrTime = FormatDateTime(s.beginIvrTime); })
  44. .AfterMapping((s, d) => { d.EndIvrTime = FormatDateTime(s.endIvrTime); })
  45. .AfterMapping((s, d) => { d.BeginQueueTime = FormatDateTime(s.beginQueueTime); })
  46. .AfterMapping((s, d) => { d.EndQueueTime = FormatDateTime(s.endQueueTime); })
  47. .AfterMapping((s, d) => { d.BeginRingTime = FormatDateTime(s.beginRingTime); })
  48. .AfterMapping((s, d) => { d.EndRingTimg = FormatDateTime(s.endRingTime); })
  49. .AfterMapping((s, d) =>
  50. {
  51. if (string.IsNullOrEmpty(s.recording_file_url)) return;
  52. var uri = new Uri(s.recording_file_url);
  53. d.RecordingBaseAddress = $"{uri.Scheme}://{uri.Host}:{uri.Port}";
  54. d.RecordingAbsolutePath = uri.AbsolutePath;
  55. })
  56. ;
  57. config.ForType<ReceiveCallEvaluateDto, TrCallEvaluate>()
  58. .Map(d => d.Dtmf, x => x.dtmf)
  59. .Map(d => d.CallAccept, x => x.call_accept)
  60. .Map(d => d.Type, x => x.type);
  61. config.ForType<XingtangCall, CallNative>()
  62. .Map(d => d.CallNo, s => s.CallGuid)
  63. .Map(d => d.Direction, s => s.CallType)
  64. .Map(d => d.FromNo, s => s.Caller)
  65. .Map(d => d.ToNo, s => s.Called)
  66. .Map(d => d.TelNo, s => s.Ext)
  67. .Map(d => d.BeginIvrTime, s => s.CallStartTime)
  68. .Map(d => d.EndIvrTime, s => s.EnqueueTime)
  69. .Map(d => d.BeginQueueTime, s => s.EnqueueTime)
  70. .Map(d => d.EndQueueTime, s => s.DequeueTime)
  71. .Map(d => d.BeginRingTime, s => s.RingStartTime)
  72. .Map(d => d.EndRingTime, s => s.ReceiveEndTime.HasValue ? s.ReceiveEndTime : s.CallEndTime)
  73. .Map(d => d.AnsweredTime, s => s.ReceiveEndTime)
  74. .Map(d => d.EndTime, s => s.CallEndTime)
  75. .Map(d => d.GroupId, s => s.SkillId.ToString())
  76. .Map(d => d.StaffNo, s => s.UserCode)
  77. .Map(d => d.Duration, s => s.Duration)
  78. .Map(d => d.RingDuration, s => s.RingTime)
  79. .Map(d => d.WaitDuration, s => s.WaitTime)
  80. .Map(d => d.AudioFile, s => s.AudioFile)
  81. .AfterMapping((s, d) =>
  82. {
  83. //todo 等待兴唐补全Disposition字段
  84. d.EndBy = d.Direction == ECallDirection.In
  85. ? EEndBy.From
  86. : EEndBy.To;
  87. });
  88. config.ForType<XingtangSeatOperation, TelOperation>()
  89. .Map(d => d.StaffNo, s => s.UserCode)
  90. .Map(d => d.TelNo, s => s.Ext)
  91. .Map(d => d.OperateState, s => s.ExecutionState)
  92. //.Map(d => d.OperateStateText, s => s.GetExecutionStateText())
  93. .Map(d => d.OperateTime, s => s.ExecutionTime)
  94. .AfterMapping((s, d) => d.OperateStateText = s.GetExecutionStateText())
  95. ;
  96. config.ForType<CallNative, TrCallDto>()
  97. .Map(d => d.CPN, s => s.FromNo)
  98. .Map(d => d.OnState, s => s.AnsweredTime.HasValue ? EOnState.On : EOnState.NoOn)
  99. .Map(d => d.CallDirection, s => s.Direction)
  100. .Map(d => d.AnsweredTime, s => s.AnsweredTime)
  101. .Map(d => d.OverTime, s => s.EndTime)
  102. .Map(d => d.BeginIvrTime, s => s.BeginIvrTime)
  103. .Map(d => d.BeginQueueTime, s => s.BeginQueueTime)
  104. .Map(d => d.BeginRingTime, s => s.BeginRingTime)
  105. .Map(d => d.Duration, s => s.Duration)
  106. .Map(d => d.TelNo, s => s.TelNo)
  107. .Map(d => d.RecordingFileUrl, s => s.AudioFile)
  108. .Map(d => d.OtherAccept, s => s.Id)
  109. ;
  110. config.ForType<TrCallRecord, TrCallDtoNew>()
  111. .Map(d => d.Cpn, s => s.CPN)
  112. .Map(d => d.Cdpn, s => s.CDPN)
  113. ;
  114. config.ForType<TrCallRecord, CallNative>()
  115. .Map(d => d.CallNo, s => s.OtherAccept)
  116. .Map(d => d.FromNo, s => s.CPN)
  117. .Map(d => d.ToNo, s => s.CDPN)
  118. .Map(d => d.EndRingTime, s => s.EndRingTimg)
  119. .Map(d => d.AudioFile, s => s.RecordingAbsolutePath);
  120. }
  121. private DateTime? FormatDateTime(string? time)
  122. {
  123. if (string.IsNullOrEmpty(time)) return null;
  124. try
  125. {
  126. return DateTime.Parse(time);
  127. }
  128. catch
  129. {
  130. return null;
  131. }
  132. }
  133. }
  134. }