TrCallRecordRepository.cs 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. using Hotline.Caching.Interfaces;
  2. using Hotline.CallCenter.Calls;
  3. using Hotline.Orders;
  4. using Hotline.Repository.SqlSugar.DataPermissions;
  5. using Hotline.Share.Dtos.CallCenter;
  6. using Hotline.Share.Enums.CallCenter;
  7. using SqlSugar;
  8. using System;
  9. using System.Collections.Generic;
  10. using System.Linq;
  11. using System.Text;
  12. using System.Threading.Tasks;
  13. using XF.Domain.Dependency;
  14. namespace Hotline.Repository.SqlSugar.CallCenter
  15. {
  16. public class TrCallRecordRepository : BaseRepository<TrCallRecord>, ITrCallRecordRepository, IScopeDependency
  17. {
  18. public TrCallRecordRepository(ISugarUnitOfWork<HotlineDbContext> uow, IDataPermissionFilterBuilder dataPermissionFilterBuilder) : base(uow, dataPermissionFilterBuilder)
  19. {
  20. }
  21. public async Task<List<TrCallHourDto>?> GetCallHourList(DateTime beginDate,DateTime? endDate,int noConnectByeTimes,int effectiveTimes)
  22. {
  23. //List<DateTime> dts = new List<DateTime>() { beginDate.Date.AddDays(1) };
  24. //for (int i = 0; i < 24; i++)
  25. //{
  26. // dts.Add(dts.Last().AddHours(-1));
  27. //}
  28. //var list = await Db.Reportable(dts).ToQueryable<DateTime>()
  29. // .LeftJoin<TrCallRecord>((it, o) => o.CreatedTime >= it.ColumnName && o.CreatedTime <= it.ColumnName.AddHours(1))
  30. // .Where((it, o) => o.CreatedTime >= beginDate)
  31. // .WhereIF(endDate.HasValue, (it, o) => o.CreatedTime <= endDate.Value.Date.AddDays(1).AddMilliseconds(-1))
  32. // .WhereIF(!endDate.HasValue, (it, o) => o.CreatedTime <= beginDate.Date.AddDays(1).AddMilliseconds(-1))
  33. // .GroupBy(it => it.ColumnName)
  34. // .OrderBy(it => it.ColumnName)
  35. // .Select((it, o) => new TrCallHourDto()
  36. // {
  37. // Dates = it.ColumnName,
  38. // Hour = it.ColumnName.Hour, //小时段
  39. // Count = SqlFunc.AggregateSum(SqlFunc.IIF(o.CallDirection == ECallDirection.In, 1, 0)), //呼入总量
  40. // EffectiveCount = SqlFunc.AggregateSum(SqlFunc.IIF(o.CallDirection == ECallDirection.In && o.Duration >= 15, 1, 0)),//有效接通
  41. // ConnectByeCount = SqlFunc.AggregateSum(SqlFunc.IIF(o.CallDirection == ECallDirection.In && o.Duration > 0 && o.Duration <= 5, 1, 0)), //接通秒挂
  42. // NoConnectByeCount = SqlFunc.AggregateSum(SqlFunc.IIF(o.CallDirection == ECallDirection.In && o.Duration == 0 && o.RingTimes <= 5, 1, 0)), //未接通秒挂
  43. // QueueByeCount = SqlFunc.AggregateSum(SqlFunc.IIF(o.CallDirection == ECallDirection.In && o.QueueTims > 0 && o.RingTimes == 0, 1, 0)), //队列挂断
  44. // IvrByeCount = SqlFunc.AggregateSum(SqlFunc.IIF(o.CallDirection == ECallDirection.In && o.BeginIvrTime.HasValue && !o.BeginQueueTime.HasValue && !o.BeginRingTime.HasValue && o.OnState == EOnState.NoOn, 1, 0)), //IVR挂断
  45. // }).ToListAsync();
  46. //计算小时差
  47. //if (!endDate.HasValue)
  48. //{
  49. // endDate = beginDate.Date.AddDays(1).AddMilliseconds(-1);
  50. //}
  51. //TimeSpan timeDifference = endDate.Value.Subtract(beginDate).Duration();
  52. //int hourDiff = (int)(timeDifference.TotalHours);
  53. //if (!endDate.HasValue)
  54. //{
  55. // endDate = beginDate.Date.AddDays(1).AddMilliseconds(-1);
  56. //}
  57. ////计算时间差
  58. //int hour = Convert.ToInt32((endDate - beginDate).Value.TotalHours);
  59. //List<DateTime> dts = new List<DateTime>() { beginDate };
  60. //for (int i = 0; i < hour - 1; i++)
  61. //{
  62. // dts.Add(dts.Last().AddHours(1));
  63. //}
  64. //var list = await Db.Reportable(dts).ToQueryable<DateTime>()
  65. // .LeftJoin<TrCallRecord>((it, o) => o.CreatedTime >= it.ColumnName && o.CreatedTime < it.ColumnName.AddHours(1))
  66. // .GroupBy(it => it.ColumnName)
  67. // .OrderBy(it => it.ColumnName)
  68. // .Select((it, o) => new TrCallHourDto()
  69. // {
  70. // Dates = it.ColumnName,
  71. // //Hour = it.ColumnName.Hour,
  72. // Count = SqlFunc.AggregateSum(SqlFunc.IIF(o.CallDirection == ECallDirection.In, 1, 0)), //呼入总量
  73. // })
  74. // .ToListAsync();
  75. List<DateTime> dts = new List<DateTime>() { beginDate.Date.AddDays(1) };
  76. for (int i = 0; i < 24; i++)//搞出所有时间断
  77. {
  78. dts.Add(dts.Last().AddHours(-1));
  79. }
  80. var list = Db.Reportable(dts).ToQueryable<DateTime>()
  81. .LeftJoin<TrCallRecord>((it, o) => o.CreatedTime >= it.ColumnName && o.CreatedTime <= it.ColumnName.AddHours(1))
  82. .GroupBy(it => it.ColumnName)
  83. .OrderBy(it => it.ColumnName)
  84. .Select((it, o) => new TrCallHourDto()
  85. {
  86. Dates = it.ColumnName,
  87. Count = SqlFunc.AggregateSum(SqlFunc.IIF(o.CallDirection == ECallDirection.In,1,0))
  88. }).ToList();
  89. return list;
  90. }
  91. }
  92. }