Dun.Jason 1 year ago
parent
commit
a38a699c94

+ 2 - 9
src/Hotline.Api/Controllers/Bi/BiCallController.cs

@@ -53,7 +53,7 @@ public class BiCallController : BaseController
 
     [HttpGet("calls")]
     [AllowAnonymous]
-    public async Task<IReadOnlyList<BiCallDto>> QueryCallsAsync([FromQuery] BiQueryCallsDto dto)
+    public async Task<List<BiCallDto>> QueryCallsAsync([FromQuery] BiQueryCallsDto dto)
     {
 
         #region 注释
@@ -103,16 +103,9 @@ public class BiCallController : BaseController
 
         dto.StartTime ??= DateTime.Today;
         dto.EndTime ??= DateTime.Today.AddDays(1).AddSeconds(-1);
-        
-        TimeSpan timeDifference = dto.EndTime.Value.Subtract(dto.StartTime.Value).Duration();
 
-        int hourDiff = (int)(timeDifference.TotalHours);
-       
-        //计算时间差
-        int hour = Convert.ToInt32((dto.EndTime- dto.StartTime).Value.TotalHours);
+         return await _trCallRecordRepositoryEx.GetQueryCalls(dto.StartTime.Value, dto.EndTime.Value);
 
-
-        return null;
     }
 
     [HttpGet("seats")]

+ 45 - 5
src/Hotline.Repository.SqlSugar/CallCenter/TrCallRecordRepository.cs

@@ -20,6 +20,45 @@ namespace Hotline.Repository.SqlSugar.CallCenter
         {
         }
 
+        public async Task<List<BiCallDto>?> GetQueryCalls(DateTime beginDate,DateTime endDate)
+        {
+            TimeSpan timeDifference = endDate.Subtract(beginDate).Duration();
+
+            int hourDiff = (int)(timeDifference.TotalHours);
+
+            //计算时间差
+            int hour = Convert.ToInt32((endDate - beginDate).TotalHours);
+
+            List<DateTime> dts = new List<DateTime>() { beginDate };
+            for (int i = 0; i < hour - 1; i++)
+            {
+                dts.Add(dts.Last().AddHours(1));
+            }
+
+            var list = await Db.Reportable(dts).ToQueryable<DateTime>()
+                .LeftJoin<TrCallRecord>((it, o) => o.CreatedTime >= it.ColumnName && o.CreatedTime < it.ColumnName.AddHours(1))
+                .Where((it,o)=> o.CallDirection == ECallDirection.In)
+                .GroupBy(it => it.ColumnName)
+                .OrderBy(it => it.ColumnName)
+                .Select((it, o) => new BiCallDto()
+                {
+                    Hour = it.ColumnName.Hour, //小时段
+                    Total = SqlFunc.AggregateCount(it.ColumnName),
+                    Answered = SqlFunc.AggregateSum(SqlFunc.IIF(o.AnsweredTime!=null,1,0)), //应答数
+                    Hanguped = SqlFunc.AggregateSum(SqlFunc.IIF(o.AnsweredTime==null && o.EndBy!=null && o.EndBy.Value == EEndBy.To,1,0)),//挂断数
+                }).ToListAsync();
+            var returnList = list.GroupBy(x => x.Hour)
+               .Select(x => new BiCallDto()
+               {
+                   Hour = x.Key,
+                   Total = x.Sum(d=>d.Total),
+                   Answered = x.Sum(d=>d.Answered),
+                   Hanguped = x.Sum(d=>d.Hanguped),
+                   HourRange = x.Key.ToString().PadLeft(2, '0') + ":00 - " + (x.Key + 1).ToString().PadLeft(2, '0') + ":00",
+               }).OrderBy(x=>x.Hour).ToList();
+            return returnList;
+        }
+
         public async Task<List<TrCallHourDto>?> GetCallHourList(DateTime beginDate,DateTime? endDate,int noConnectByeTimes,int effectiveTimes,int connectByeTimes)
         {
             //计算小时差
@@ -42,16 +81,17 @@ namespace Hotline.Repository.SqlSugar.CallCenter
 
             var list = await Db.Reportable(dts).ToQueryable<DateTime>()
                 .LeftJoin<TrCallRecord>((it, o) => o.CreatedTime >= it.ColumnName && o.CreatedTime < it.ColumnName.AddHours(1))
+                .Where((it, o) => o.CallDirection == ECallDirection.In)
                 .GroupBy(it => it.ColumnName)
                 .OrderBy(it => it.ColumnName)
                 .Select((it, o) => new TrCallHourDto()
                 {
                     Hour = it.ColumnName.Hour, //小时段
-                    EffectiveCount = SqlFunc.AggregateSum(SqlFunc.IIF(o.CallDirection == ECallDirection.In && o.Duration >= effectiveTimes, 1, 0)),//有效接通
-                    ConnectByeCount = SqlFunc.AggregateSum(SqlFunc.IIF(o.CallDirection == ECallDirection.In && o.Duration > 0 && o.Duration <= connectByeTimes, 1, 0)), //接通秒挂
-                    NoConnectByeCount = SqlFunc.AggregateSum(SqlFunc.IIF(o.CallDirection == ECallDirection.In && o.Duration == 0 && o.RingTimes <= noConnectByeTimes && o.RingTimes>0, 1, 0)), //未接通秒挂
-                    QueueByeCount = SqlFunc.AggregateSum(SqlFunc.IIF(o.CallDirection == ECallDirection.In && o.QueueTims > 0 && o.RingTimes == 0, 1, 0)), //队列挂断
-                    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挂断
+                    EffectiveCount = SqlFunc.AggregateSum(SqlFunc.IIF(o.Duration >= effectiveTimes, 1, 0)),//有效接通
+                    ConnectByeCount = SqlFunc.AggregateSum(SqlFunc.IIF(o.Duration > 0 && o.Duration <= connectByeTimes, 1, 0)), //接通秒挂
+                    NoConnectByeCount = SqlFunc.AggregateSum(SqlFunc.IIF(o.Duration == 0 && o.RingTimes <= noConnectByeTimes && o.RingTimes>0, 1, 0)), //未接通秒挂
+                    QueueByeCount = SqlFunc.AggregateSum(SqlFunc.IIF(o.QueueTims > 0 && o.RingTimes == 0, 1, 0)), //队列挂断
+                    IvrByeCount = SqlFunc.AggregateSum(SqlFunc.IIF(o.BeginIvrTime.HasValue && !o.BeginQueueTime.HasValue && !o.BeginRingTime.HasValue && o.OnState == EOnState.NoOn, 1, 0)), //IVR挂断
                 })
                 .ToListAsync();
 

+ 1 - 1
src/Hotline.Share/Dtos/CallCenter/BiCallDto.cs

@@ -11,7 +11,7 @@ namespace Hotline.Share.Dtos.CallCenter
         /// <summary>
         /// 小时跨度
         /// </summary>
-        public string HourRange => Hour == 23 ? "23:00~24:00" : $"{Hour.ToString():00}~{(Hour + 1).ToString():00}";
+        public string HourRange { get; set; }
 
         public int Hour { get; set; }
 

+ 1 - 0
src/Hotline/CallCenter/Calls/ITrCallRecordRepository.cs

@@ -6,6 +6,7 @@ namespace Hotline.CallCenter.Calls
     public interface ITrCallRecordRepository
     {
 
+        Task<List<BiCallDto>?> GetQueryCalls(DateTime beginDate, DateTime endDate);
         Task<List<TrCallHourDto>?> GetCallHourList(DateTime beginDate, DateTime? endDate, int noConnectByeTimes, int effectiveTimes,int connectByeTimes);