ソースを参照

信件来源时分统计

田爽 10 ヶ月 前
コミット
bc67bf5346

+ 30 - 1
src/Hotline.Api/Controllers/Bi/BiOrderController.cs

@@ -2672,5 +2672,34 @@ namespace Hotline.Api.Controllers.Bi
             var stream = ExcelHelper.CreateStream(dtos);
             return ExcelStreamResult(stream, "信件来源统计明细数据");
         }
-    }
+
+        /// <summary>
+        /// 信件来源时分统计列表
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        [HttpGet("order_source_hours_report_list")]
+        public async Task<List<OrderSourceHeaderVo>> QueryOrderSourceHoursReportList([FromQuery] QueryOrderSourceRequest dto)
+        {
+	        var data = await _orderApplication.QueryOrderSourceHoursList(dto);
+	        return data;
+	        ;
+        }
+		/// <summary>
+		/// 信件来源时分统计导出
+		/// </summary>
+		/// <returns></returns>
+		[HttpPost("order_source_hours_list/_export")]
+        public async Task<FileStreamResult> QueryOrderSourceHoursReportList([FromBody] ExportExcelDto<QueryOrderSourceRequest> dto)
+        {
+	        var data = await _orderApplication.QueryOrderSourceHoursList(dto.QueryDto);
+	        dynamic? dynamicClass = DynamicClassHelper.CreateDynamicClass(dto.ColumnInfos);
+	        var dtos = data
+		        .Select(stu => _mapper.Map(stu, typeof(OrderSourceHeaderVo), dynamicClass))
+		        .Cast<object>()
+		        .ToList();
+	        var stream = ExcelHelper.CreateStream(dtos);
+	        return ExcelStreamResult(stream, "信件来源统计列表数据");
+        }
+	}
 }

+ 7 - 0
src/Hotline.Application/Orders/IOrderApplication.cs

@@ -98,6 +98,13 @@ namespace Hotline.Application.Orders
         /// <returns></returns>
         ISugarQueryable<Order> QueryOrderSourceDetail(QueryOrderSourceDetailRequest dto);
 
+		/// <summary>
+		/// 信件来源时分统计列表
+		/// </summary>
+		/// <param name="dto"></param>
+		/// <returns></returns>
+		Task<List<OrderSourceHeaderVo>> QueryOrderSourceHoursList(QueryOrderSourceRequest dto);
+
 		/// <summary>
 		/// 部门超期统计
 		/// </summary>

+ 7 - 25
src/Hotline.Application/Orders/OrderApplication.cs

@@ -35,6 +35,7 @@ using XF.Domain.Repository;
 using Hotline.Repository.SqlSugar.System;
 using Microsoft.AspNetCore.Mvc;
 using Hotline.Share.Dtos.Bi;
+using System.Net;
 
 namespace Hotline.Application.Orders;
 
@@ -605,21 +606,17 @@ public class OrderApplication : IOrderApplication, IScopeDependency
 	{
 		if (dto.EndTime.HasValue)
 			dto.EndTime = dto.EndTime.Value.AddDays(1).AddSeconds(-1);
-        var stTime = DateTime.Parse(DateTime.Now.ToShortDateString() + " 00:00:00");
-        List<Kv> times = new List<Kv>();
-		for (int i = 0; i < 24; i++)
-        {
-            var item = new Kv { Key = stTime.AddHours(i).ToString("hh:mm"), Value = stTime.AddHours(i + 1).AddMinutes(-1).ToString("hh:mm") };
-		}
-        var data = await _orderRepository.Queryable()
+
+        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("hh:mm"), d.SourceChannel })
+			.GroupBy(d => new { Time = d.CreationTime.ToString("HH"), d.SourceChannel })
 			.Select(d => new OrderSourceHeaderVo
 			{
-				Time = d.CreationTime.ToString("hh:mm"),
+				Time = d.CreationTime.ToString("HH")+":00 - " + d.CreationTime.ToString("HH")+":59",
+                TimeSort = d.CreationTime.ToString("HH"),
 				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)),
@@ -638,22 +635,7 @@ public class OrderApplication : IOrderApplication, IScopeDependency
 				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 res = (from t1 in times
-				   //join t2 in data on t1.Key < t2.Time 
-       //            into t1_t2
-	      //  from item in t1_t2.DefaultIfEmpty()
-	      //  select new
-	      //  {
-		     //   UserId = t1.UserId,
-		     //   UserName = t1.UserName,
-		     //   SendOrderNum = t1.SendOrderNum,
-		     //   NoSendOrderNum = t1.NoSendOrderNum,
-		     //   ReSendOrderNum = t1_t2.Select(x => x.ReSendOrderNum).FirstOrDefault(),
-		     //   ChainRate = t1_t2.Select(x => x.ReSendOrderNum).FirstOrDefault() > 0 ?
-			    //    ((double.Parse(t1.SendOrderNum.ToString()) - double.Parse(t1_t2.Select(x => x.ReSendOrderNum).FirstOrDefault().ToString())) / double.Parse(t1.SendOrderNum.ToString()) * 100).ToString("F2") + "%" : "100.00%",
-	      //  }).ToList();
+			}).OrderBy(d=> d.TimeSort).ToListAsync();
 
 		var totalVo = new OrderSourceHeaderVo()
 		{

+ 6 - 0
src/Hotline.Share/Dtos/Order/OrderBiDto.cs

@@ -765,6 +765,12 @@ namespace Hotline.Share.Dtos.Order
 		/// 日期
 		/// </summary>
 		public string? Time { get; set; }
+
+		/// <summary>
+		/// 日期(不显示)
+		/// </summary>
+		public string? TimeSort { get; set; }
+
 		/// <summary>
 		/// 小计
 		/// </summary>