|
@@ -18,6 +18,7 @@ using XF.Domain.Repository;
|
|
|
using Microsoft.AspNetCore.Http;
|
|
|
using Hotline.Share.Dtos;
|
|
|
using MapsterMapper;
|
|
|
+using System.Threading;
|
|
|
|
|
|
namespace Hotline.Application.StatisticalReport.CallReport;
|
|
|
|
|
@@ -290,6 +291,35 @@ public class YiBinCallReportApplication : CallReportApplicationBase, ICallReport
|
|
|
return await _trCallRecordRepositoryEx.QueryCallOutDateStatisticsDetail(dto.StartTime.Value, dto.EndTime.Value,enterpriseTels);
|
|
|
}
|
|
|
|
|
|
+ public override async Task<List<QuerySeatMonthCallResp>> QuerySeatMonthCall(QuerySeatMonthCallRequest dto)
|
|
|
+ {
|
|
|
+ //获取配置
|
|
|
+ int noConnectByeTimes = _systemSettingCacheManager.NoConnectByeTimes;
|
|
|
+ int effectiveTimes = _systemSettingCacheManager.EffectiveTimes;
|
|
|
+ int connectByeTimes = _systemSettingCacheManager.ConnectByeTimes;
|
|
|
+ int ringTimes = _systemSettingCacheManager.RingTimes;
|
|
|
+
|
|
|
+ var list = await _userRepository.Queryable()
|
|
|
+ .LeftJoin<TrCallRecord>((u, c) => u.Id == c.UserId)
|
|
|
+ .Where(u => !u.IsDeleted && u.UserType == EUserType.Seat)
|
|
|
+ .Where((u, c) => c.CreatedTime >= dto.StartTime)
|
|
|
+ .Where((u, c) => c.CreatedTime <= dto.EndTime)
|
|
|
+ .Where((u, c) => c.CallDirection == ECallDirection.In)
|
|
|
+ .GroupBy((u, c) => new { c.UserName, c.UserId })
|
|
|
+ .Select((u, c) => new QuerySeatMonthCallResp
|
|
|
+ {
|
|
|
+ Name = c.UserName,
|
|
|
+ InAnswered = SqlFunc.AggregateSum(SqlFunc.IIF(c.AnsweredTime != null, 1, 0)), //呼入接通量
|
|
|
+ InAvailableAnswer = SqlFunc.AggregateSum(SqlFunc.IIF(c.AnsweredTime != null && c.Duration >= effectiveTimes, 1, 0)), //有效接通量
|
|
|
+ InHangupImmediateWhenAnswered = SqlFunc.AggregateSum(SqlFunc.IIF(c.AnsweredTime != null && c.Duration < connectByeTimes, 1, 0)),//接通秒挂
|
|
|
+ OverTimeImmediate = SqlFunc.AggregateSum(SqlFunc.IIF(c.AnsweredTime != null && c.RingTimes > ringTimes, 1, 0)),//超时接通量
|
|
|
+ InTimeImmediate = SqlFunc.AggregateSum(SqlFunc.IIF(c.AnsweredTime != null && c.RingTimes <= ringTimes, 1, 0)),//按时接通量
|
|
|
+ InHanguped = SqlFunc.AggregateSum(SqlFunc.IIF(c.AnsweredTime == null, 1, 0)),
|
|
|
+ InHangupImmediate = SqlFunc.AggregateSum(SqlFunc.IIF(c.AnsweredTime == null && c.RingTimes <= noConnectByeTimes, 1, 0)),
|
|
|
+ OverTimeInHanguped = SqlFunc.AggregateSum(SqlFunc.IIF(c.AnsweredTime == null && c.RingTimes > noConnectByeTimes, 1, 0)),
|
|
|
+ }).ToListAsync();
|
|
|
+ return list;
|
|
|
+ }
|
|
|
|
|
|
//public override async Task<PagedDto<TrCallDto>> GetCallDetailListAsync(GetCallListDto dto, CancellationToken cancellationToken)
|
|
|
//{
|