BiQueryCallsDto.cs 9.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397
  1. using Hotline.Share.Enums.CallCenter;
  2. using Hotline.Share.Requests;
  3. using System.ComponentModel.DataAnnotations;
  4. using XF.Utility.EnumExtensions;
  5. namespace Hotline.Share.Dtos.CallCenter;
  6. public record BiQueryCallsDto : ReportRequiredPagedRequest
  7. {
  8. /// <summary>
  9. /// 线路
  10. /// </summary>
  11. public string? Line { get; set; }
  12. /// <summary>
  13. /// 查询类型 1:呼入总量明细;2:接通总量明细
  14. /// </summary>
  15. public string? TypeCode { get; set; } = "1";
  16. }
  17. public record QueryCallListDto : PagedRequest
  18. {
  19. public DateTime StartTime { get; set; }
  20. public DateTime EndTime { get; set; }
  21. public string Type { get; set; }
  22. public string Source { get; set; }
  23. public TimeSpan? StartHourTo { get; set; }
  24. }
  25. public class BiQueryHourCallDto : StartEndTimeDto
  26. {
  27. public string Source { get; set; }
  28. }
  29. public class BiQueryGateWayDto : StartEndTimeDto
  30. {
  31. public string Gateway { get; set; }
  32. }
  33. public class StartEndTimeDto
  34. {
  35. [Required]
  36. public DateTime StartTime { get; set; }
  37. [Required]
  38. public DateTime EndTime { get; set; }
  39. }
  40. public record PagedStartEndTimeDto : PagedRequest
  41. {
  42. [Required]
  43. public DateTime StartTime { get; set; }
  44. [Required]
  45. public DateTime EndTime { get; set; }
  46. }
  47. public class TotalList<T>
  48. {
  49. public TotalList()
  50. {
  51. }
  52. public TotalList(List<T> list, T total)
  53. {
  54. List = list;
  55. Total = total;
  56. }
  57. public T Total { get; set; }
  58. public List<T> List { get; set; }
  59. }
  60. public class TotalData<T>
  61. {
  62. public TotalData()
  63. {
  64. }
  65. public TotalData(List<T> list, int total)
  66. {
  67. Data = list;
  68. Total = total;
  69. }
  70. public int Total { get; set; }
  71. public List<T> Data { get; set; }
  72. }
  73. public record QueryCallsStatisticsDetailInDto : PagedStartEndTimeDto
  74. {
  75. /// <summary>
  76. /// 工单编号
  77. /// </summary>
  78. public string? OrderNo { get; set; }
  79. /// <summary>
  80. /// 主叫
  81. /// </summary>
  82. public string? FromNo { get; set; }
  83. /// <summary>
  84. /// 被叫
  85. /// </summary>
  86. public string? ToNo { get; set; }
  87. /// <summary>
  88. /// 分机号码
  89. /// </summary>
  90. public string? TelNo { get; set; }
  91. /// <summary>
  92. /// 挂断方
  93. /// </summary>
  94. public EEndBy? EndBy { get; set; }
  95. /// <summary>
  96. /// 上一个页面点击的字段名称
  97. /// </summary>
  98. public string? FieldName { get; set; }
  99. }
  100. public class QueryCallsStatisticsDetailOutDto
  101. {
  102. public string Id { get; set; }
  103. public string? OrderId { get; set; }
  104. /// <summary>
  105. /// 工单号
  106. /// </summary>
  107. public string? OrderNo { get; set; }
  108. /// <summary>
  109. /// 工单标题
  110. /// </summary>
  111. public string? OrderTitle { get; set; }
  112. /// <summary>
  113. /// 主叫
  114. /// </summary>
  115. public string FromNo { get; set; }
  116. /// <summary>
  117. /// 被叫
  118. /// </summary>
  119. public string ToNo { get; set; }
  120. /// <summary>
  121. /// 响应分机号
  122. /// </summary>
  123. public string TelNo { get; set; }
  124. /// <summary>
  125. /// 挂断方
  126. /// </summary>
  127. public EEndBy? EndBy { get; set; }
  128. public string EndByTxt => EndBy.GetDescription();
  129. /// <summary>
  130. /// 话务员姓名
  131. /// </summary>
  132. public string UserName { get; set; }
  133. /// <summary>
  134. /// 分机组id(技能组Id)
  135. /// </summary>
  136. public string? GroupId { get; set; }
  137. /// <summary>
  138. /// IVR开始时间
  139. /// </summary>
  140. public DateTime? BeginIvrTime { get; set; }
  141. /// <summary>
  142. /// 接听时间
  143. /// </summary>
  144. public DateTime? AnsweredTime { get; set; }
  145. /// <summary>
  146. /// 挂机时间
  147. /// </summary>
  148. public DateTime EndTime { get; set; }
  149. /// <summary>
  150. /// 通话时长(秒)
  151. /// </summary>
  152. public int Duration { get; set; }
  153. /// <summary>
  154. /// 语音文件路径
  155. /// </summary>
  156. public string AudioFile { get; set; }
  157. }
  158. #region 宜宾新话务报表
  159. public class QueryCallDateStatisticsDetailDto
  160. {
  161. public DateTime? StartTime { get; set; }
  162. public DateTime? EndTime { get; set; }
  163. }
  164. public class QueryCallDateStatisticsDetailResp
  165. {
  166. /// <summary>
  167. /// 日期
  168. /// </summary>
  169. public string Date { get; set; }
  170. /// <summary>
  171. /// 呼入总量(计算所得)
  172. /// </summary>
  173. public int CallInTotal => IvrCallInTotal + PersonCallInCount + EnterpriseCallInCount + AiCallInCount;
  174. /// <summary>
  175. /// IVR呼入总量
  176. /// </summary>
  177. public int IvrCallInTotal { get; set; }
  178. /// <summary>
  179. /// 个人服务呼入总量
  180. /// </summary>
  181. public int PersonCallInCount { get; set; }
  182. /// <summary>
  183. /// 企业服务呼入总量
  184. /// </summary>
  185. public int EnterpriseCallInCount { get; set; }
  186. /// <summary>
  187. /// 智能应答呼入总量
  188. /// </summary>
  189. public int AiCallInCount { get; set; }
  190. /// <summary>
  191. /// 接通总量(计算所得)
  192. /// </summary>
  193. public int PutthroughCount => PersonCallInPutthroughCount+ EnterpriseCallInPutthroughCount + AiCallInPutthroughCount;
  194. /// <summary>
  195. /// 个人服务接通量
  196. /// </summary>
  197. public int PersonCallInPutthroughCount { get; set; }
  198. /// <summary>
  199. /// 企业服务接通量
  200. /// </summary>
  201. public int EnterpriseCallInPutthroughCount { get; set; }
  202. /// <summary>
  203. /// 智能应答呼入总量
  204. /// </summary>
  205. public int AiCallInPutthroughCount { get; set; }
  206. /// <summary>
  207. /// 挂断总量
  208. /// </summary>
  209. public int RingOffCount => PersonRingOffCount + EnterpriseRingOffCount + IvrRingOffCount;
  210. /// <summary>
  211. /// 个人服务挂断总量
  212. /// </summary>
  213. public int PersonRingOffCount { get; set; }
  214. /// <summary>
  215. /// 企业服务挂断总量
  216. /// </summary>
  217. public int EnterpriseRingOffCount { get; set; }
  218. /// <summary>
  219. /// IVR挂断总量
  220. /// </summary>
  221. public int IvrRingOffCount { get; set; }
  222. /// <summary>
  223. /// 总体接通率
  224. /// </summary>
  225. public double TotalPutthroughRate => PutthroughCount == 0 ? 0 : Math.Round(((double)PutthroughCount / CallInTotal)*100,2);
  226. /// <summary>
  227. /// 总体接通率(文本)
  228. /// </summary>
  229. public string TotalPutthroughRateText => TotalPutthroughRate + "%";
  230. /// <summary>
  231. /// 服务接通率
  232. /// </summary>
  233. public double ServicePutthorughRate => PutthroughCount == 0 ? 0 : Math.Round(((double)PutthroughCount / CallInTotal) * 100, 2);
  234. /// <summary>
  235. /// 服务接通率(文本)
  236. /// </summary>
  237. public string ServicePutthorughRateText => ServicePutthorughRate + "%";
  238. /// <summary>
  239. /// 话务接通率
  240. /// </summary>
  241. public double CallPutthorughRate => (PersonCallInPutthroughCount + EnterpriseCallInPutthroughCount) == 0 ? 0 : Math.Round(((double)(PersonCallInPutthroughCount + EnterpriseCallInPutthroughCount)) / (PersonCallInCount + EnterpriseCallInCount) * 100, 2);
  242. /// <summary>
  243. /// 话务接通率(文本)
  244. /// </summary>
  245. public string CallPutthorughRateText => CallPutthorughRate + "%";
  246. }
  247. public class QueryPersonCallDateStatisticsDetailResp
  248. {
  249. /// <summary>
  250. /// 日期
  251. /// </summary>
  252. public string Date { get; set; }
  253. /// <summary>
  254. /// 个人服务呼入总量
  255. /// </summary>
  256. public int PersonCallInCount { get; set; }
  257. /// <summary>
  258. /// 个人服务接通量
  259. /// </summary>
  260. public int PersonCallInPutthroughCount { get; set; }
  261. /// <summary>
  262. /// 个人服务挂断总量
  263. /// </summary>
  264. public int PersonRingOffCount { get; set; }
  265. /// <summary>
  266. /// 个人服务队列挂断
  267. /// </summary>
  268. public int PersonQueueOffCount { get; set; }
  269. /// <summary>
  270. /// 个人服务等待挂断
  271. /// </summary>
  272. public int PersonWaitOffCount { get; set; }
  273. /// <summary>
  274. /// 个人服务接通率
  275. /// </summary>
  276. public double PersonCallPutthorughRate => PersonCallInPutthroughCount == 0 ? 0 : Math.Round(((double)(PersonCallInPutthroughCount)) / (PersonCallInCount) * 100, 2);
  277. /// <summary>
  278. /// 个人服务接通率
  279. /// </summary>
  280. public string PersonCallPutthorughRateText => PersonCallPutthorughRate + "%";
  281. }
  282. public class QueryEnterpriseCallDateStatisticsDetailResp
  283. {
  284. /// <summary>
  285. /// 日期
  286. /// </summary>
  287. public string Date { get; set; }
  288. /// <summary>
  289. /// 企业服务呼入总量
  290. /// </summary>
  291. public int EnterpriseCallInCount { get; set; }
  292. /// <summary>
  293. /// 企业服务接通量
  294. /// </summary>
  295. public int EnterpriseCallInPutthroughCount { get; set; }
  296. /// <summary>
  297. /// 企业服务挂断总量
  298. /// </summary>
  299. public int EnterpriseRingOffCount { get; set; }
  300. /// <summary>
  301. /// 企业服务队列挂断
  302. /// </summary>
  303. public int EnterpriseQueueOffCount { get; set; }
  304. /// <summary>
  305. /// 企业服务等待挂断
  306. /// </summary>
  307. public int EnterpriseWaitOffCount { get; set; }
  308. /// <summary>
  309. /// 企业服务接通率
  310. /// </summary>
  311. public double EnterpriseCallPutthorughRate => EnterpriseCallInPutthroughCount == 0 ? 0 : Math.Round(((double)(EnterpriseCallInPutthroughCount)) / (EnterpriseCallInCount) * 100, 2);
  312. /// <summary>
  313. /// 个人服务接通率
  314. /// </summary>
  315. public string EnterpriseCallPutthorughRateText => EnterpriseCallPutthorughRate + "%";
  316. }
  317. #endregion