田爽 4 сар өмнө
parent
commit
27f9c5a811

+ 21 - 5
src/Hotline.Api/Controllers/Bi/BiOrderController.cs

@@ -40,6 +40,7 @@ using XF.Domain.Exceptions;
 using XF.Domain.Filters;
 using XF.Domain.Repository;
 using XF.Utility.EnumExtensions;
+using DocumentFormat.OpenXml.Drawing;
 
 namespace Hotline.Api.Controllers.Bi
 {
@@ -1865,11 +1866,24 @@ namespace Hotline.Api.Controllers.Bi
             if (callData != null)
                 callData.InvalidCount = callData.InvalidCount - callData.QueueByeCount - callData.IvrByeCount;
             centerReportStatisticsDto.CenterReportCall = callData;
-            #endregion
-
-            #region 工单
-            //工单
-            var orderData = await _orderRepository.Queryable()
+			#endregion
+
+			#region 语音分类
+			var callTypeDto = await _trCallRecordRepository.Queryable()
+			.Where(x => x.CreatedTime >= StartTime && x.CreatedTime <= EndTime && SqlFunc.Length(x.Gateway) > 4 && x.CallDirection == ECallDirection.In)
+			.GroupBy(x => x.CreatedTime.ToString("yyyy-MM-dd"))
+				.Select(x => new IVRCallTypeDto()
+				{
+					PersonCallInCount = SqlFunc.AggregateSum(SqlFunc.IIF(x.IvrDtmf.Substring(x.IvrDtmf.Length - 1, 1) == "1", 1, 0)),
+					EnterpriseCallInCount = SqlFunc.AggregateSum(SqlFunc.IIF(x.IvrDtmf.Substring(x.IvrDtmf.Length - 1, 1) == "2", 1, 0)),
+					AiCallInCount = SqlFunc.AggregateSum(SqlFunc.IIF(x.Gateway == "82826886", 1, 0)),
+				}).FirstAsync();
+            centerReportStatisticsDto.iVRCallTypeDto = callTypeDto;
+			#endregion
+
+			#region 工单
+			//工单
+			var orderData = await _orderRepository.Queryable()
                 .Where(p => p.CreationTime >= StartTime && p.CreationTime <= EndTime)
                 .Select(x => new CenterReportOrderDto
                 {
@@ -1963,6 +1977,8 @@ namespace Hotline.Api.Controllers.Bi
              .Where(x => x.VisitTime >= StartTime && x.VisitTime <= EndTime && x.VisitState != EVisitState.None && x.VisitState != EVisitState.Visited).CountAsync()
             };
 
+
+
             //部门
             var listOrg = await _orderVisitDetailRepository.Queryable()
                 .LeftJoin<OrderVisit>((it, o) => it.VisitId == o.Id)

+ 99 - 3
src/Hotline.Share/Dtos/CallCenter/CenterReportStatisticsDto.cs

@@ -19,9 +19,14 @@ namespace Hotline.Share.Dtos.CallCenter
         public CenterReportCallDto CenterReportCall { get; set; }
 
         /// <summary>
-        /// 工单
+        /// 语音分类
         /// </summary>
-        public CenterReportOrderDto CenterReportOrder { get; set; }
+        public IVRCallTypeDto iVRCallTypeDto { get; set; }
+
+		/// <summary>
+		/// 工单
+		/// </summary>
+		public CenterReportOrderDto CenterReportOrder { get; set; }
 
         /// <summary>
         /// 信件回访量
@@ -139,8 +144,99 @@ namespace Hotline.Share.Dtos.CallCenter
         /// IVR挂断
         /// </summary>
         public int IvrByeCount { get; set; }
-    }
 
+
+		/// <summary>
+		/// 总体接通率
+		/// </summary>
+		public double AllEffectiveCountRate => AllEffectiveRate();
+
+		/// <summary>
+		/// 计算总体接通率
+		/// </summary>
+		/// <returns></returns>
+		public double AllEffectiveRate()
+		{
+			if (AllCallCount > 0 && EffectiveCount > 0)
+				return Math.Round(((double)EffectiveCount / AllCallCount) * 100, 2);
+			return 0;
+		}
+	}
+
+    /// <summary>
+    /// 语音分类
+    /// </summary>
+    public class IVRCallTypeDto {
+
+		/// <summary>
+		/// 个人服务呼入总量
+		/// </summary>
+		public int PersonCallInCount { get; set; }
+
+		/// <summary>
+		/// 企业服务呼入总量
+		/// </summary>
+		public int EnterpriseCallInCount { get; set; }
+
+		/// <summary>
+		/// 智能应答呼入总量
+		/// </summary>
+		public int AiCallInCount { get; set; }
+
+
+		/// <summary>
+		/// 呼入电话量
+		/// </summary>
+		public int AllCallInCount => PersonCallInCount + EnterpriseCallInCount + AiCallInCount;
+
+		/// <summary>
+		/// 个人服务呼入总量 占比
+		/// </summary>
+		public double PersonCallInRate => GetPersonCallInRate();
+
+		/// <summary>
+		/// 个人服务呼入总量 占比
+		/// </summary>
+		/// <returns></returns>
+		public double GetPersonCallInRate()
+		{
+			if (AllCallInCount > 0 && PersonCallInCount > 0)
+				return Math.Round(((double)PersonCallInCount / AllCallInCount) * 100, 2);
+			return 0;
+		}
+
+		/// <summary>
+		/// 企业服务呼入总量 占比
+		/// </summary>
+		public double EnterpriseCallInRate => GetEnterpriseCallInRate();
+
+		/// <summary>
+		/// 企业服务呼入总量 占比
+		/// </summary>
+		/// <returns></returns>
+		public double GetEnterpriseCallInRate()
+		{
+			if (AllCallInCount > 0 && EnterpriseCallInCount > 0)
+				return Math.Round(((double)EnterpriseCallInCount / AllCallInCount) * 100, 2);
+			return 0;
+		}
+
+		/// <summary>
+		/// 智能应答呼入总量 占比
+		/// </summary>
+		public double AiCallInRate => GetAiCallInRate();
+
+		/// <summary>
+		/// 智能应答呼入总量 占比
+		/// </summary>
+		/// <returns></returns>
+		public double GetAiCallInRate()
+		{
+			if (AllCallInCount > 0 && AiCallInCount > 0)
+				return Math.Round(((double)AiCallInCount / AllCallInCount) * 100, 2);
+			return 0;
+		}
+	}
     /// <summary>
     /// 工单数据
     /// </summary>