Browse Source

信件来源统计

田爽 10 months ago
parent
commit
9c37a35702

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

@@ -3305,11 +3305,11 @@ namespace Hotline.Api.Controllers.Bi
 		/// <param name="dto"></param>
 		/// <returns></returns>
 		[HttpGet("order_source_report_list")]
-		public async Task<Object> QueryOrderSourceReportList([FromQuery] QueryOrderSourceRequest dto)
+		public async Task<List<OrderSourceHeaderVo>> QueryOrderSourceReportList([FromQuery] QueryOrderSourceRequest dto)
 		{
 			var data = await _orderApplication.QueryOrderSourceList(dto);
-            var header = await _orderApplication.QueryOrderSourceHeaderList(dto);
-			return new {Data =data, Header =header };
+			return data;
+			;
 		}
 		/// <summary>
 		/// 信件来源统计导出
@@ -3319,10 +3319,9 @@ namespace Hotline.Api.Controllers.Bi
 		public async Task<FileStreamResult> QueryOrderSourceReportList([FromBody] ExportExcelDto<QueryOrderSourceRequest> dto)
 		{
             var data = await _orderApplication.QueryOrderSourceList(dto.QueryDto);
-            //var data = new ExpandoObject();
 			dynamic? dynamicClass = DynamicClassHelper.CreateDynamicClass(dto.ColumnInfos);
 			var dtos = data
-				.Select(stu => _mapper.Map(stu, typeof(OrderSourceTimeVo), dynamicClass))
+				.Select(stu => _mapper.Map(stu, typeof(OrderSourceHeaderVo), dynamicClass))
 				.Cast<object>()
 				.ToList();
 			var stream = ExcelHelper.CreateStream(dtos);

+ 1 - 8
src/Hotline.Application/Orders/IOrderApplication.cs

@@ -88,14 +88,7 @@ namespace Hotline.Application.Orders
         /// </summary>
 		/// <param name="dto"></param>
 		/// <returns></returns>
-		Task<List<dynamic>> QueryOrderSourceList(QueryOrderSourceRequest dto);
-
-        /// <summary>
-        /// 信件来源统计列表表头
-        /// </summary>
-        /// <param name="dto"></param>
-        /// <returns></returns>
-        Task<List<OrderSourceHeaderVo>> QueryOrderSourceHeaderList(QueryOrderSourceRequest dto);
+		Task<List<OrderSourceHeaderVo>> QueryOrderSourceList(QueryOrderSourceRequest dto);
 
         /// <summary>
         /// 信件来源统计

+ 45 - 67
src/Hotline.Application/Orders/OrderApplication.cs

@@ -496,84 +496,62 @@ public class OrderApplication : IOrderApplication, IScopeDependency
 	/// </summary>
 	/// <param name="dto"></param>
 	/// <returns></returns>
-	public async Task<List<dynamic>> QueryOrderSourceList(QueryOrderSourceRequest dto)
+	public async Task<List<OrderSourceHeaderVo>> QueryOrderSourceList(QueryOrderSourceRequest dto)
     {
 	    if (dto.EndTime.HasValue)
 		    dto.EndTime = dto.EndTime.Value.AddDays(1).AddSeconds(-1);
-        var time = await _orderRepository.Queryable()
-            .WhereIF(dto.StartTime.HasValue, d => d.CreationTime >= dto.StartTime)
-            .WhereIF(dto.EndTime.HasValue, d => d.CreationTime <= dto.EndTime)
-            .WhereIF(dto.IdentityType.HasValue, d => d.IdentityType == dto.IdentityType)
-            .Where(d => d.SourceChannel != null && d.SourceChannel != "")
-            .GroupBy(d=>  d.CreationTime.ToString("yyyy-MM-dd"))
-            .Select(d => new OrderSourceTimeVo { Time = d.CreationTime.ToString("yyyy-MM-dd") }).ToListAsync();
         var data = await _orderRepository.Queryable()
             .WhereIF(dto.StartTime.HasValue, d => d.CreationTime >= dto.StartTime)
             .WhereIF(dto.EndTime.HasValue, d => d.CreationTime <= dto.EndTime)
             .WhereIF(dto.IdentityType.HasValue, d => d.IdentityType == dto.IdentityType)
             .Where(d => d.SourceChannel != null && d.SourceChannel != "")
             .GroupBy(d => new { Time = d.CreationTime.ToString("yyyy-MM-dd"), d.SourceChannel })
-            .Select(d => new OrderSourceTimeListVo
-            {
+            .Select(d => new OrderSourceHeaderVo
+			{
                 Time = d.CreationTime.ToString("yyyy-MM-dd"),
-                Source = d.SourceChannel,
-                Num = SqlFunc.AggregateCount(d.Id)
-            }).ToListAsync() ;
-        var header = await QueryOrderSourceHeaderList(dto);
-        List<dynamic> res = new List<dynamic>();
-        foreach (var item in time)
+                Phone = SqlFunc.AggregateSum(SqlFunc.IIF(d.SourceChannelCode == "RGDH", 1, 0)),
+                Web = SqlFunc.AggregateSum(SqlFunc.IIF(d.SourceChannelCode == "YTW", 1, 0)),
+                Rests = SqlFunc.AggregateSum(SqlFunc.IIF(d.SourceChannelCode == "QT", 1, 0)),
+                Created = SqlFunc.AggregateSum(SqlFunc.IIF(d.SourceChannelCode == "ZJ", 1, 0)),
+                WeChat = SqlFunc.AggregateSum(SqlFunc.IIF(d.SourceChannelCode == "WX", 1, 0)),
+                APP = SqlFunc.AggregateSum(SqlFunc.IIF(d.SourceChannelCode == "AP", 1, 0)),
+                WisdomYB = SqlFunc.AggregateSum(SqlFunc.IIF(d.SourceChannelCode == "ZHYB", 1, 0)),
+                Platform = SqlFunc.AggregateSum(SqlFunc.IIF(d.SourceChannelCode == "ZZPT", 1, 0)),
+                Platform12328 = SqlFunc.AggregateSum(SqlFunc.IIF(d.SourceChannelCode == "S12328", 1, 0)),
+                MayorAndNetizens = SqlFunc.AggregateSum(SqlFunc.IIF(d.SourceChannelCode == "SZYSM", 1, 0)),
+                MediaYB = SqlFunc.AggregateSum(SqlFunc.IIF(d.SourceChannelCode == "YBRMT", 1, 0)),
+                Platform12345 = SqlFunc.AggregateSum(SqlFunc.IIF(d.SourceChannelCode == "S12345", 1, 0)),
+                Interaction = SqlFunc.AggregateSum(SqlFunc.IIF(d.SourceChannelCode == "SZMHD", 1, 0)),
+                ServiceYB = SqlFunc.AggregateSum(SqlFunc.IIF(d.SourceChannelCode == "YBS", 1, 0)),
+                CityTransfer = SqlFunc.AggregateSum(SqlFunc.IIF(d.SourceChannelCode == "SZHZ", 1, 0)),
+                Platform110 = SqlFunc.AggregateSum(SqlFunc.IIF(d.SourceChannelCode == "YB110", 1, 0)),
+                NoService = SqlFunc.AggregateSum(SqlFunc.IIF(d.SourceChannelCode == "SMZXBNCS", 1, 0)),
+                IYB = SqlFunc.AggregateSum(SqlFunc.IIF(d.SourceChannelCode == "IYB", 1, 0))
+			}).ToListAsync() ;
+        var totalVo = new OrderSourceHeaderVo()
         {
-	        List<dynamic> hraderRes = new List<dynamic>();
-			foreach (var item1 in header)
-            {
-                dynamic dynamicObj = new ExpandoObject();
-                dynamicObj.Name = item1.Code;
-                if ("Subtotal".Equals(item1.Code))
-                {
-                    var sum = data.Where(x => x.Time == item.Time).Sum(x => x.Num);
-                    dynamicObj.GetNumber = new Func<int>(() => sum);
-
-                    continue;
-                }
-                if ("Time".Equals(item1.Code))
-                {
-                    continue;
-                }
-                var timeVo = data.FirstOrDefault(x => x.Time == item.Time && x.Source == item1.Header);
-                if (timeVo != null)
-                {
-                    dynamicObj.GetNumber = new Func<int>(() => timeVo.Num);
-                }
-                else
-                {
-                    dynamicObj.GetNumber = 0;
-                }
-                hraderRes.Add(dynamicObj);
-			}
-            res.Add(hraderRes);
-        }
-        return res;
-	}
-
-	/// <summary>
-	/// 信件来源统计列表表头
-	/// </summary>
-	/// <param name="dto"></param>
-	/// <returns></returns>
-	public async Task<List<OrderSourceHeaderVo>> QueryOrderSourceHeaderList(QueryOrderSourceRequest dto) 
-    {
-		if (dto.EndTime.HasValue)
-			dto.EndTime = dto.EndTime.Value.AddDays(1).AddSeconds(-1);
-		var list =  await _orderRepository.Queryable()
-			.WhereIF(dto.StartTime.HasValue, d => d.CreationTime >= dto.StartTime)
-			.WhereIF(dto.EndTime.HasValue, d => d.CreationTime <= dto.EndTime)
-			.WhereIF(dto.IdentityType.HasValue, d => d.IdentityType == dto.IdentityType)
-			.Where(d => d.SourceChannel != null && d.SourceChannel != "")
-			.GroupBy(d => d.SourceChannel)
-			.Select(d => new OrderSourceHeaderVo { Header = d.SourceChannel,Code = d.SourceChannel }).ToListAsync();
-		list.Insert(0, new OrderSourceHeaderVo { Header = "小计", Code = "Subtotal" });
-		list.Insert(0, new OrderSourceHeaderVo { Header = "日期", Code = "Time" });
-		return list;
+            Time = "合计",
+            Phone = data.Sum(x => x.Phone),
+            Web = data.Sum(x => x.Web),
+            Rests = data.Sum(x => x.Rests),
+            Created = data.Sum(x => x.Created),
+            WeChat = data.Sum(x => x.WeChat),
+            APP = data.Sum(x => x.APP),
+            WisdomYB = data.Sum(x => x.WisdomYB),
+            Platform = data.Sum(x => x.Platform),
+            Platform12328 = data.Sum(x => x.Platform12328),
+            MayorAndNetizens = data.Sum(x => x.MayorAndNetizens),
+            MediaYB = data.Sum(x => x.MediaYB),
+            Platform12345 = data.Sum(x => x.Platform12345),
+            Interaction = data.Sum(x => x.Interaction),
+            ServiceYB = data.Sum(x => x.ServiceYB),
+            CityTransfer = data.Sum(x => x.CityTransfer),
+            Platform110 = data.Sum(x => x.Platform110),
+            NoService = data.Sum(x => x.NoService),
+            IYB = data.Sum(x => x.IYB)
+        };
+        data.Add(totalVo);
+		return data;
 	}
 
     public ISugarQueryable<Order> QueryOrderSourceDetail(QueryOrderSourceDetailRequest dto) {

+ 74 - 22
src/Hotline.Share/Dtos/Order/OrderBiDto.cs

@@ -758,51 +758,103 @@ namespace Hotline.Share.Dtos.Order
 
 	public class OrderSourceHeaderVo {
 		/// <summary>
-		/// 来源渠道(电话、网站、APP等)
+		/// 日期
+		/// </summary>
+		public string? Time { get; set; }
+		/// <summary>
+		/// 小计
 		/// </summary>
-		public string? Header { get; set; }
+		public int? Subtotal => Phone + Web + Rests + Created + WeChat + APP + WisdomYB + Platform + Platform12328 + MayorAndNetizens + MediaYB + Platform12345 + Interaction + ServiceYB + CityTransfer + Platform110 + NoService + IYB;
 
-		public string? Code { get; set; }
-	}
+		/// <summary>
+		/// 电话
+		/// </summary>
+		public int? Phone { get; set; }
 
-	public class OrderSourceTimeVo
-	{
+		/// <summary>
+		/// 因特网
+		/// </summary>
+		public int? Web { get; set; }
 
 		/// <summary>
-		/// 日期
+		/// 其他
 		/// </summary>
-		public string Time { get; set; }
+		public int? Rests { get; set; }
 
 		/// <summary>
-		/// 信件来源
+		/// 自建
 		/// </summary>
-		public string Source { get; set; }
+		public int? Created { get; set; }
 
 		/// <summary>
-		/// 小计
+		/// 微信
 		/// </summary>
-		public int Subtotal { get; set; }
+		public int? WeChat { get; set; }
 
-		public List<OrderSourceTimeListVo> Lists { get; set; }
+		/// <summary>
+		/// APP
+		/// </summary>
+		public int? APP { get; set; }
 
-	}
+		/// <summary>
+		/// 智慧宜宾
+		/// </summary>
+		public int? WisdomYB { get; set; }
 
-	public class OrderSourceTimeListVo
-	{
 		/// <summary>
-		/// 日期
+		/// 综治平台
 		/// </summary>
-		public string Time { get; set; }
+		public int? Platform { get; set; }
 
 		/// <summary>
-		/// 信件来源
+		/// 省12328平台
 		/// </summary>
-		public string Source { get; set; }
+		public int? Platform12328 { get; set; }
 
 		/// <summary>
-		/// 小计
+		/// 市长和网民
 		/// </summary>
-		public int Num { get; set; }
+		public int? MayorAndNetizens { get; set; }
 
+		/// <summary>
+		/// 宜宾融媒体
+		/// </summary>
+		public int? MediaYB { get; set; }
+
+		/// <summary>
+		/// 省12345平台
+		/// </summary>
+		public int? Platform12345 { get; set; }
+
+		/// <summary>
+		/// 省政民互动
+		/// </summary>
+		public int? Interaction { get; set; }
+
+		/// <summary>
+		/// 宜办事
+		/// </summary>
+		public int? ServiceYB { get; set; }
+
+		/// <summary>
+		/// 市州互转
+		/// </summary>
+		public int? CityTransfer { get; set; }
+
+		/// <summary>
+		/// 宜宾110平台
+		/// </summary>
+		public int? Platform110 { get; set; }
+
+		/// <summary>
+		/// 办不成事反映窗口
+		/// </summary>
+		public int? NoService { get; set; }
+
+		// <summary>
+		/// i宜宾
+		/// </summary>
+		public int? IYB { get; set; }
 	}
+
 }