CallRecordManager.cs 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288
  1. //using DotNetCore.CAP;
  2. //using Hotline.CallCenter.Calls;
  3. //using Hotline.Orders;
  4. //using Hotline.Repository.SqlSugar;
  5. //using Hotline.Share.Dtos.CallCenter;
  6. //using Hotline.Share.Dtos.Order;
  7. //using Hotline.Share.Mq;
  8. //using MapsterMapper;
  9. //using Microsoft.Extensions.DependencyInjection;
  10. //using Microsoft.Extensions.Hosting;
  11. //using Microsoft.Extensions.Logging;
  12. //using SqlSugar;
  13. //namespace Hotline.Application.CallCenter
  14. //{
  15. // public class CallRecordManager : BackgroundService
  16. // {
  17. // private readonly IServiceScopeFactory _serviceScopeFactory;
  18. // public CallRecordManager(IServiceScopeFactory serviceScopeFactory, ISugarUnitOfWork<WexDbContext> uowWex)
  19. // {
  20. // _serviceScopeFactory = serviceScopeFactory;
  21. // }
  22. // protected override async Task ExecuteAsync(CancellationToken stoppingToken)
  23. // {
  24. // //20秒扫描一次威尔信数据库
  25. // using var sc = _serviceScopeFactory.CreateScope();
  26. // var _logger = sc.ServiceProvider.GetService<ILogger<CallRecordManager>>();
  27. // var time = TimeSpan.FromSeconds(20);
  28. // while (!stoppingToken.IsCancellationRequested)
  29. // {
  30. // using var scope = _serviceScopeFactory.CreateScope();
  31. // var _wexCallRecordRepository = scope.ServiceProvider.GetService<IWexCallRecordRepository>();
  32. // var _uowWex = scope.ServiceProvider.GetService<ISugarUnitOfWork<WexDbContext>>();
  33. // var _mapper = scope.ServiceProvider.GetService<IMapper>();
  34. // var _capPublisher = scope.ServiceProvider.GetService<ICapPublisher>();
  35. // var _orderRepository = scope.ServiceProvider.GetService<IOrderRepository>();
  36. // var wexRes = _uowWex?.Db.Ado.SqlQuery<WexRecord>("select * from view_telinfo_full where IsSynch=@IsSynch and IsOk = @IsOk and CallType<>'会议' ", new { IsSynch = 0, IsOk = 1 });
  37. // if (wexRes != null)
  38. // {
  39. // List<CallConnectOrderDto> list = new List<CallConnectOrderDto>();
  40. // foreach (var item in wexRes)
  41. // {
  42. // var wexCallRecord = new WexCallRecord();
  43. // wexCallRecord.CallId = item.CallId;
  44. // //呼叫方向
  45. // switch (item.CallType)
  46. // {
  47. // case "外呼":
  48. // wexCallRecord.Direction = Share.Enums.CallCenter.ECallDirection.Out;
  49. // break;
  50. // case "来电":
  51. // wexCallRecord.Direction = Share.Enums.CallCenter.ECallDirection.In;
  52. // break;
  53. // case "中继":
  54. // wexCallRecord.Direction = Share.Enums.CallCenter.ECallDirection.In;
  55. // break;
  56. // case "留言":
  57. // wexCallRecord.Direction = Share.Enums.CallCenter.ECallDirection.In;
  58. // break;
  59. // case "黑名单":
  60. // wexCallRecord.Direction = Share.Enums.CallCenter.ECallDirection.In;
  61. // break;
  62. // default:
  63. // break;
  64. // }
  65. // if (wexCallRecord.Direction == Share.Enums.CallCenter.ECallDirection.Out)
  66. // {
  67. // wexCallRecord.CPN = item.TelPhone;
  68. // wexCallRecord.CDPN = item.TrunkNum;
  69. // }
  70. // else
  71. // {
  72. // wexCallRecord.CPN = item.TrunkNum;
  73. // wexCallRecord.CDPN = item.TelPhone;
  74. // }
  75. // wexCallRecord.StaffNo = item.GongHao;
  76. // wexCallRecord.TelNo = item.FenJi;
  77. // wexCallRecord.AreaName = item.AreaName;
  78. // wexCallRecord.InIvrTime = item.BeginIvrTime;
  79. // wexCallRecord.OutIvrTime = item.EndIvrTime;
  80. // wexCallRecord.InQueueTime = item.BeginQueueTime;
  81. // wexCallRecord.OutQueueTime = item.EndQueueTime;
  82. // wexCallRecord.BeginTime = item.CallTime;
  83. // wexCallRecord.BeginRingTime = item.BeginRingTime;
  84. // wexCallRecord.EndRingTime = item.EndRingTime;
  85. // wexCallRecord.RingTimes = int.Parse(item.RingTimes);
  86. // wexCallRecord.AnsweredTime = item.BeginTalking;
  87. // wexCallRecord.ByeTime = item.EndTalking;
  88. // wexCallRecord.TalkTime = int.Parse(item.TalkLength);
  89. // wexCallRecord.RecordUrl = item.RecordUrl;
  90. // wexCallRecord.RecordName = item.RecordName;
  91. // wexCallRecord.OtherRecordUrl = item.OtherRecordUrl;
  92. // wexCallRecord.OtherRecordName = item.OtherRecordName;
  93. // wexCallRecord.OtherSourceRecord = item.OtherSourceRecord;
  94. // wexCallRecord.SourceRecord = item.SourceRecord;
  95. // wexCallRecord.TrunkLine = item.TrunkNum;
  96. // switch (item.NoAnswerResult)
  97. // {
  98. // case "客户先挂机":
  99. // wexCallRecord.EndBy = Share.Enums.CallCenter.EEndBy.From;
  100. // break;
  101. // case "外呼挂机":
  102. // wexCallRecord.EndBy = Share.Enums.CallCenter.EEndBy.From;
  103. // break;
  104. // case "员工先挂机":
  105. // if (wexCallRecord.Direction == Share.Enums.CallCenter.ECallDirection.In)
  106. // {
  107. // wexCallRecord.EndBy = Share.Enums.CallCenter.EEndBy.To;
  108. // }
  109. // else
  110. // {
  111. // wexCallRecord.EndBy = Share.Enums.CallCenter.EEndBy.From;
  112. // }
  113. // break;
  114. // case "坐席振铃挂机":
  115. // wexCallRecord.EndBy = Share.Enums.CallCenter.EEndBy.To;
  116. // break;
  117. // case "对端振铃挂机":
  118. // wexCallRecord.EndBy = Share.Enums.CallCenter.EEndBy.From;
  119. // break;
  120. // case "自助语音挂机":
  121. // //TODO 确定不了是自动挂机 还是来电挂机(默认为来电挂机)
  122. // wexCallRecord.EndBy = Share.Enums.CallCenter.EEndBy.From;
  123. // break;
  124. // case "排队挂机":
  125. // wexCallRecord.EndBy = Share.Enums.CallCenter.EEndBy.From;
  126. // break;
  127. // case "中继转接挂机":
  128. // wexCallRecord.EndBy = Share.Enums.CallCenter.EEndBy.From;
  129. // break;
  130. // case "来电挂机":
  131. // wexCallRecord.EndBy = Share.Enums.CallCenter.EEndBy.From;
  132. // break;
  133. // case "开始转人工挂机":
  134. // wexCallRecord.EndBy = Share.Enums.CallCenter.EEndBy.From;
  135. // break;
  136. // case "电话广播":
  137. // wexCallRecord.EndBy = Share.Enums.CallCenter.EEndBy.From;
  138. // break;
  139. // case "播放工号":
  140. // wexCallRecord.EndBy = Share.Enums.CallCenter.EEndBy.From;
  141. // break;
  142. // default:
  143. // wexCallRecord.EndBy = Share.Enums.CallCenter.EEndBy.From;
  144. // break;
  145. // }
  146. // switch (item.Result)
  147. // {
  148. // case "成功":
  149. // wexCallRecord.OnState = Share.Enums.CallCenter.EOnState.On;
  150. // break;
  151. // case "失败":
  152. // wexCallRecord.OnState = Share.Enums.CallCenter.EOnState.NoOn;
  153. // break;
  154. // case "接听":
  155. // wexCallRecord.OnState = Share.Enums.CallCenter.EOnState.On;
  156. // break;
  157. // case "未接":
  158. // wexCallRecord.OnState = Share.Enums.CallCenter.EOnState.NoOn;
  159. // break;
  160. // default:
  161. // break;
  162. // }
  163. // wexCallRecord.Result = item.Result;
  164. // wexCallRecord.EvaluateResult = item.AssessName;
  165. // var id = await _wexCallRecordRepository.AddAsync(wexCallRecord);
  166. // if (!string.IsNullOrEmpty(id))
  167. // {
  168. // //执行更新来源数据库已下载数据
  169. // _uowWex?.Db.Ado.ExecuteCommand("update telinfo set IsSynch=1 where GUID=@CallId", new { CallId = wexCallRecord.CallId });
  170. // var callRecord = _mapper.Map<CallRecordDto>(wexCallRecord);
  171. // var callConnectionOrder = new CallConnectOrderDto() { CallRecord = callRecord };
  172. // var order = await _orderRepository.GetAsync(x => x.CallId == wexCallRecord.CallId);
  173. // if (order != null)
  174. // {
  175. // var orderDto = _mapper.Map<OrderDto>(order);
  176. // callConnectionOrder.Order = orderDto;
  177. // }
  178. // list.Add(callConnectionOrder);
  179. // }
  180. // }
  181. // //推省上
  182. // if (list.Count > 0)
  183. // {
  184. // await _capPublisher.PublishAsync(EventNames.HotlineCallBye, list);
  185. // }
  186. // }
  187. // else
  188. // {
  189. // await Task.Delay(time, stoppingToken);
  190. // }
  191. // }
  192. // }
  193. // public class WexRecord
  194. // {
  195. // [SugarColumn(ColumnName = "CallID")]
  196. // public string CallId { get; set; }
  197. // [SugarColumn(ColumnName = "CallType")]
  198. // public string CallType { get; set; }
  199. // [SugarColumn(ColumnName = "Telphone")]
  200. // public string TelPhone { get; set; }
  201. // [SugarColumn(ColumnName = "TrunkLinePhone")]
  202. // public string TrunkNum { get; set; }
  203. // [SugarColumn(ColumnName = "GongHao")]
  204. // public string GongHao { get; set; }
  205. // [SugarColumn(ColumnName = "FenJi")]
  206. // public string FenJi { get; set; }
  207. // [SugarColumn(ColumnName = "AreaName")]
  208. // public string AreaName { get; set; }
  209. // [SugarColumn(ColumnName = "BeginIvrTime")]
  210. // public DateTime? BeginIvrTime { get; set; }
  211. // [SugarColumn(ColumnName = "EndIvrTime")]
  212. // public DateTime? EndIvrTime { get; set; }
  213. // [SugarColumn(ColumnName = "BeginQueueTime")]
  214. // public DateTime? BeginQueueTime { get; set; }
  215. // [SugarColumn(ColumnName = "EndQueueTime")]
  216. // public DateTime? EndQueueTime { get; set; }
  217. // [SugarColumn(ColumnName = "BeginRingTime")]
  218. // public DateTime? BeginRingTime { get; set; }
  219. // [SugarColumn(ColumnName = "EndRingTime")]
  220. // public DateTime? EndRingTime { get; set; }
  221. // [SugarColumn(ColumnName = "RingTimes")]
  222. // public string RingTimes { get; set; }
  223. // [SugarColumn(ColumnName = "CallTime")]
  224. // public DateTime? CallTime { get; set; }
  225. // [SugarColumn(ColumnName = "BeginTalking")]
  226. // public DateTime? BeginTalking { get; set; }
  227. // [SugarColumn(ColumnName = "EndTalking")]
  228. // public DateTime? EndTalking { get; set; }
  229. // /// <summary>
  230. // /// 通话时长
  231. // /// </summary>
  232. // [SugarColumn(ColumnName = "TalkLenth")]
  233. // public string TalkLength { get; set; }
  234. // [SugarColumn(ColumnName = "RecordUrl")]
  235. // public string RecordUrl { get; set; }
  236. // [SugarColumn(ColumnName = "RecordName")]
  237. // public string RecordName { get; set; }
  238. // [SugarColumn(ColumnName = "SourceRecord")]
  239. // public string SourceRecord { get; set; }
  240. // [SugarColumn(ColumnName = "OtherRecordUrl")]
  241. // public string OtherRecordUrl { get; set; }
  242. // [SugarColumn(ColumnName ="OtherRecordName")]
  243. // public string OtherRecordName { get; set; }
  244. // [SugarColumn(ColumnName = "OtherSourceRecord")]
  245. // public string OtherSourceRecord { get; set; }
  246. // [SugarColumn(ColumnName = "noAnswerResult")]
  247. // public string NoAnswerResult { get; set; }
  248. // [SugarColumn(ColumnName = "Result")]
  249. // public string Result { get; set; }
  250. // [SugarColumn(ColumnName = "AssessName")]
  251. // public string AssessName { get; set; }
  252. // }
  253. // }
  254. //}