|
@@ -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();
|
|
|
|