CallRecordManager.cs 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249
  1. //using Hotline.CallCenter.Calls;
  2. //using Hotline.Repository.SqlSugar;
  3. //using Microsoft.Extensions.DependencyInjection;
  4. //using Microsoft.Extensions.Hosting;
  5. //using Microsoft.Extensions.Logging;
  6. //using SqlSugar;
  7. //namespace Hotline.Application.CallCenter
  8. //{
  9. // public class CallRecordManager : BackgroundService
  10. // {
  11. // private readonly IServiceScopeFactory _serviceScopeFactory;
  12. // public CallRecordManager(IServiceScopeFactory serviceScopeFactory, ISugarUnitOfWork<WexDbContext> uowWex)
  13. // {
  14. // _serviceScopeFactory = serviceScopeFactory;
  15. // }
  16. // //TODO
  17. // protected override async Task ExecuteAsync(CancellationToken stoppingToken)
  18. // {
  19. // //20秒扫描一次威尔信数据库
  20. // using var sc = _serviceScopeFactory.CreateScope();
  21. // var _logger = sc.ServiceProvider.GetService<ILogger<CallRecordManager>>();
  22. // var time = TimeSpan.FromSeconds(20);
  23. // while (!stoppingToken.IsCancellationRequested)
  24. // {
  25. // using var scope = _serviceScopeFactory.CreateScope();
  26. // var _wexCallRecordRepository = scope.ServiceProvider.GetService<IWexCallRecordRepository>();
  27. // var _uowWex = scope.ServiceProvider.GetService<ISugarUnitOfWork<WexDbContext>>();
  28. // 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 });
  29. // if (wexRes != null)
  30. // {
  31. // foreach (var item in wexRes)
  32. // {
  33. // var wexCallRecord = new WexCallRecord();
  34. // wexCallRecord.CallId = item.CallId;
  35. // //呼叫方向
  36. // switch (item.CallType)
  37. // {
  38. // case "外呼":
  39. // wexCallRecord.Direction = Share.Enums.CallCenter.ECallDirection.Out;
  40. // break;
  41. // case "来电":
  42. // wexCallRecord.Direction = Share.Enums.CallCenter.ECallDirection.In;
  43. // break;
  44. // case "中继":
  45. // wexCallRecord.Direction = Share.Enums.CallCenter.ECallDirection.In;
  46. // break;
  47. // case "留言":
  48. // wexCallRecord.Direction = Share.Enums.CallCenter.ECallDirection.In;
  49. // break;
  50. // case "黑名单":
  51. // wexCallRecord.Direction = Share.Enums.CallCenter.ECallDirection.In;
  52. // break;
  53. // default:
  54. // break;
  55. // }
  56. // //TODO 分机号取出有误差(可能存在工号的问题)
  57. // if (wexCallRecord.Direction == Share.Enums.CallCenter.ECallDirection.Out)
  58. // {
  59. // wexCallRecord.CPN = item.TelPhone;
  60. // wexCallRecord.CDPN = item.GongHao;
  61. // }
  62. // else
  63. // {
  64. // wexCallRecord.CPN = item.GongHao;
  65. // wexCallRecord.CDPN = item.TelPhone;
  66. // }
  67. // wexCallRecord.StaffNo = item.GongHao;
  68. // wexCallRecord.AreaName = item.AreaName;
  69. // wexCallRecord.InIvrTime = item.BeginIvrTime;
  70. // wexCallRecord.OutIvrTime = item.EndIvrTime;
  71. // wexCallRecord.InQueueTime = item.BeginQueueTime;
  72. // wexCallRecord.OutQueueTime = item.EndQueueTime;
  73. // wexCallRecord.BeginTime = item.CallTime;
  74. // wexCallRecord.BeginRingTime = item.BeginRingTime;
  75. // wexCallRecord.EndRingTime = item.EndRingTime;
  76. // wexCallRecord.RingTimes = int.Parse(item.RingTimes);
  77. // wexCallRecord.AnsweredTime = item.BeginTalking;
  78. // wexCallRecord.ByeTime = item.EndTalking;
  79. // wexCallRecord.TalkTime = int.Parse(item.TalkLength);
  80. // wexCallRecord.RecordUrl = item.RecordUrl;
  81. // wexCallRecord.RecordName = item.RecordName;
  82. // wexCallRecord.SourceRecord = item.SourceRecord;
  83. // wexCallRecord.TrunkLine = item.TrunkNum;
  84. // switch (item.NoAnswerResult)
  85. // {
  86. // case "客户先挂机":
  87. // wexCallRecord.EndBy = Share.Enums.CallCenter.EEndBy.From;
  88. // break;
  89. // case "外呼挂机":
  90. // wexCallRecord.EndBy = Share.Enums.CallCenter.EEndBy.From;
  91. // break;
  92. // case "员工先挂机":
  93. // if (wexCallRecord.Direction == Share.Enums.CallCenter.ECallDirection.In)
  94. // {
  95. // wexCallRecord.EndBy = Share.Enums.CallCenter.EEndBy.To;
  96. // }
  97. // else
  98. // {
  99. // wexCallRecord.EndBy = Share.Enums.CallCenter.EEndBy.From;
  100. // }
  101. // break;
  102. // case "坐席振铃挂机":
  103. // wexCallRecord.EndBy = Share.Enums.CallCenter.EEndBy.To;
  104. // break;
  105. // case "对端振铃挂机":
  106. // wexCallRecord.EndBy = Share.Enums.CallCenter.EEndBy.From;
  107. // break;
  108. // case "自助语音挂机":
  109. // //TODO 确定不了是自动挂机 还是来电挂机
  110. // wexCallRecord.EndBy = Share.Enums.CallCenter.EEndBy.From;
  111. // break;
  112. // case "排队挂机":
  113. // wexCallRecord.EndBy = Share.Enums.CallCenter.EEndBy.From;
  114. // break;
  115. // case "中继转接挂机":
  116. // wexCallRecord.EndBy = Share.Enums.CallCenter.EEndBy.From;
  117. // break;
  118. // case "来电挂机":
  119. // wexCallRecord.EndBy = Share.Enums.CallCenter.EEndBy.From;
  120. // break;
  121. // case "开始转人工挂机":
  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. // default:
  131. // wexCallRecord.EndBy = Share.Enums.CallCenter.EEndBy.From;
  132. // break;
  133. // }
  134. // switch (item.Result)
  135. // {
  136. // case "成功":
  137. // wexCallRecord.OnState = Share.Enums.CallCenter.EOnState.On;
  138. // break;
  139. // case "失败":
  140. // wexCallRecord.OnState = Share.Enums.CallCenter.EOnState.NoOn;
  141. // break;
  142. // case "接听":
  143. // wexCallRecord.OnState = Share.Enums.CallCenter.EOnState.On;
  144. // break;
  145. // case "未接":
  146. // wexCallRecord.OnState = Share.Enums.CallCenter.EOnState.NoOn;
  147. // break;
  148. // default:
  149. // break;
  150. // }
  151. // wexCallRecord.Result = item.Result;
  152. // wexCallRecord.EvaluateResult = item.AssessName;
  153. // var id = await _wexCallRecordRepository.AddAsync(wexCallRecord);
  154. // if (!string.IsNullOrEmpty(id))
  155. // {
  156. // //执行更新已下载数据
  157. // _uowWex?.Db.Ado.ExecuteCommand("update telinfo set IsSynch=1 where GUID=@CallId", new { CallId = wexCallRecord.CallId });
  158. // }
  159. // }
  160. // }
  161. // else
  162. // {
  163. // await Task.Delay(time, stoppingToken);
  164. // }
  165. // }
  166. // }
  167. // public class WexRecord
  168. // {
  169. // [SugarColumn(ColumnName = "CallID")]
  170. // public string CallId { get; set; }
  171. // [SugarColumn(ColumnName = "CallType")]
  172. // public string CallType { get; set; }
  173. // [SugarColumn(ColumnName = "Telphone")]
  174. // public string TelPhone { get; set; }
  175. // [SugarColumn(ColumnName = "TrunkLinePhone")]
  176. // public string TrunkNum { get; set; }
  177. // [SugarColumn(ColumnName = "GongHao")]
  178. // public string GongHao { get; set; }
  179. // [SugarColumn(ColumnName = "AreaName")]
  180. // public string AreaName { get; set; }
  181. // [SugarColumn(ColumnName = "BeginIvrTime")]
  182. // public DateTime? BeginIvrTime { get; set; }
  183. // [SugarColumn(ColumnName = "EndIvrTime")]
  184. // public DateTime? EndIvrTime { get; set; }
  185. // [SugarColumn(ColumnName = "BeginQueueTime")]
  186. // public DateTime? BeginQueueTime { get; set; }
  187. // [SugarColumn(ColumnName = "EndQueueTime")]
  188. // public DateTime? EndQueueTime { get; set; }
  189. // [SugarColumn(ColumnName = "BeginRingTime")]
  190. // public DateTime? BeginRingTime { get; set; }
  191. // [SugarColumn(ColumnName = "EndRingTime")]
  192. // public DateTime? EndRingTime { get; set; }
  193. // [SugarColumn(ColumnName = "RingTimes")]
  194. // public string RingTimes { get; set; }
  195. // [SugarColumn(ColumnName = "CallTime")]
  196. // public DateTime? CallTime { get; set; }
  197. // [SugarColumn(ColumnName = "BeginTalking")]
  198. // public DateTime? BeginTalking { get; set; }
  199. // [SugarColumn(ColumnName = "EndTalking")]
  200. // public DateTime? EndTalking { get; set; }
  201. // /// <summary>
  202. // /// 通话时长
  203. // /// </summary>
  204. // [SugarColumn(ColumnName = "TalkLenth")]
  205. // public string TalkLength { get; set; }
  206. // [SugarColumn(ColumnName = "RecordUrl")]
  207. // public string RecordUrl { get; set; }
  208. // [SugarColumn(ColumnName = "RecordName")]
  209. // public string RecordName { get; set; }
  210. // [SugarColumn(ColumnName = "SourceRecord")]
  211. // public string SourceRecord { get; set; }
  212. // [SugarColumn(ColumnName = "noAnswerResult")]
  213. // public string NoAnswerResult { get; set; }
  214. // [SugarColumn(ColumnName = "Result")]
  215. // public string Result { get; set; }
  216. // [SugarColumn(ColumnName = "AssessName")]
  217. // public string AssessName { get; set; }
  218. // }
  219. // }
  220. //}