Browse Source

热点统计

田爽 1 year ago
parent
commit
475ecac14b

+ 78 - 6
src/Hotline.Api/Controllers/Bi/BiOrderController.cs

@@ -160,12 +160,12 @@ namespace Hotline.Api.Controllers.Bi
         }
         }
 
 
         /// <summary>
         /// <summary>
-        /// 热点数据统计
+        /// 热点数据小计统计
         /// </summary>
         /// </summary>
         /// <param name="dto"></param>
         /// <param name="dto"></param>
         /// <returns></returns>
         /// <returns></returns>
-        [HttpGet("hotspot_data_list")]
-        public async Task<PagedDto<HotspotDataLsitVo>> HotspotDataLsit([FromQuery] HotspotReportPagedRequest dto)
+        [HttpGet("hotspot_subtotal_data_list")]
+        public async Task<PagedDto<HotspotDataLsitVo>> HotspotSubtotalDataLsit([FromQuery] HotspotSubtotalReportPagedRequest dto)
         {
         {
 	        if (!dto.StartTime.HasValue || !dto.EndTime.HasValue) throw UserFriendlyException.SameMessage("请选择时间!");
 	        if (!dto.StartTime.HasValue || !dto.EndTime.HasValue) throw UserFriendlyException.SameMessage("请选择时间!");
 			var query = _hotspotTypeRepository.Queryable(false, true)
 			var query = _hotspotTypeRepository.Queryable(false, true)
@@ -186,13 +186,85 @@ namespace Hotline.Api.Controllers.Bi
             return new PagedDto<HotspotDataLsitVo>(total, items);
             return new PagedDto<HotspotDataLsitVo>(total, items);
         }
         }
 
 
-
         /// <summary>
         /// <summary>
-        /// 部门不满意统计
+        /// 热点数据统计
         /// </summary>
         /// </summary>
         /// <param name="dto"></param>
         /// <param name="dto"></param>
         /// <returns></returns>
         /// <returns></returns>
-        [HttpGet("visit-nosatisfied")]
+        [HttpGet("hotspot_data_list")]
+        public async Task<object> HotspotDataLsit([FromQuery] HotspotReportPagedRequest dto)
+        {
+	        if (!dto.StartTime.HasValue || !dto.EndTime.HasValue) throw UserFriendlyException.SameMessage("请选择时间!");
+			var items = await _hotspotTypeRepository.Queryable(false, true)
+		        .LeftJoin<Order>((x, o) => o.HotspotSpliceName != null && (x.HotSpotFullName == o.HotspotSpliceName || o.HotspotSpliceName.Contains(x.HotSpotFullName)) && o.IsDeleted == false)
+		        .WhereIF(dto.StartTime.HasValue, (x, o) => o.CreationTime >= dto.StartTime)
+		        .WhereIF(dto.EndTime.HasValue, (x, o) => o.CreationTime <= dto.EndTime)
+		        .WhereIF(!string.IsNullOrEmpty(dto.Keyword), (x, o) => x.HotSpotName.Contains(dto.Keyword!))
+		        .Where((x, o) => x.ParentId == dto.Id)
+		        .Where((x, o) => x.IsDeleted == false)
+		        .GroupBy((x, o) => new { x.Id, x.HotSpotName })
+		        .Select((x, o) => new HotspotDataLsitVo
+		        {
+			        Id = x.Id,
+			        Name = x.HotSpotName,
+			        Num = SqlFunc.AggregateSum(SqlFunc.IIF(o.Id != null, 1, 0)),
+		        }).MergeTable().ToListAsync();
+			if (dto.Type > 0)
+	        {
+		        var chainStartTime = dto.StartTime;
+                var chainEndTime = dto.EndTime;
+                switch (dto.Type) 
+                {
+                    case 1://日
+                        chainStartTime = dto.StartTime.Value.AddDays(-1);
+                        chainEndTime = dto.EndTime.Value.AddDays(-1);
+						break;
+                    case 2://月
+	                    chainStartTime = dto.StartTime.Value.AddMonths(-1);
+	                    chainEndTime = dto.EndTime.Value.AddMonths(-1);
+						break;
+                    case 3://年
+	                    chainStartTime = dto.StartTime.Value.AddYears(-1);
+	                    chainEndTime = dto.EndTime.Value.AddYears(-1);
+						break;
+                }
+                var chainItems = await  _hotspotTypeRepository.Queryable(false, true)
+	                .LeftJoin<Order>((x, o) => o.HotspotSpliceName != null && (x.HotSpotFullName == o.HotspotSpliceName || o.HotspotSpliceName.Contains(x.HotSpotFullName)) && o.IsDeleted == false)
+	                .WhereIF(dto.StartTime.HasValue, (x, o) => o.CreationTime >= chainStartTime)
+	                .WhereIF(dto.EndTime.HasValue, (x, o) => o.CreationTime <= chainEndTime)
+	                .WhereIF(!string.IsNullOrEmpty(dto.Keyword), (x, o) => x.HotSpotName.Contains(dto.Keyword!))
+	                .Where((x, o) => x.ParentId == dto.Id)
+	                .Where((x, o) => x.IsDeleted == false)
+	                .GroupBy((x, o) => new { x.Id, x.HotSpotName })
+	                .Select((x, o) => new 
+	                {
+		                Id = x.Id,
+		                ChainNum = SqlFunc.AggregateSum(SqlFunc.IIF(o.Id != null, 1, 0)),
+	                }).MergeTable().ToListAsync();
+                var res = (from t1 in items
+                           join t2 in chainItems on t1.Id equals t2.Id into t1_t2
+                           from item in t1_t2.DefaultIfEmpty()
+                           select new
+                           {
+                               Id = t1.Id,
+                               Name = t1.Name,
+                               Num = t1.Num,
+                               ChainNum = t1_t2.Select(x => x.ChainNum).FirstOrDefault(),
+							   ChainRate = t1_t2.Select(x => x.ChainNum).FirstOrDefault() > 0 ?
+                               ((double.Parse(t1.Num.ToString()) - double.Parse(t1_t2.Select(x => x.ChainNum).FirstOrDefault().ToString())) / double.Parse(t1_t2.Select(x => x.ChainNum).FirstOrDefault().ToString()) * 100).ToString("F2")+"%" : "100%",
+                           }).ToList();
+                return res;
+			}
+	        return items;
+        }
+
+
+		/// <summary>
+		/// 部门不满意统计
+		/// </summary>
+		/// <param name="dto"></param>
+		/// <returns></returns>
+		[HttpGet("visit-nosatisfied")]
         public async Task<object> QueryVisitNoSatisfied([FromQuery] QueryVisitNoSatiisfiedRequest dto)
         public async Task<object> QueryVisitNoSatisfied([FromQuery] QueryVisitNoSatiisfiedRequest dto)
         {
         {
 	        if (!dto.StartTime.HasValue || !dto.EndTime.HasValue) throw UserFriendlyException.SameMessage("请选择时间!");
 	        if (!dto.StartTime.HasValue || !dto.EndTime.HasValue) throw UserFriendlyException.SameMessage("请选择时间!");

+ 11 - 0
src/Hotline.Share/Requests/PagedKeywordRequest.cs

@@ -30,9 +30,20 @@ public record ReportPagedRequest : PagedKeywordRequest
 
 
 }
 }
 
 
+public record HotspotSubtotalReportPagedRequest : ReportPagedRequest
+{
+
+	public string Id { get; set; }
+}
+
 public record HotspotReportPagedRequest : ReportPagedRequest { 
 public record HotspotReportPagedRequest : ReportPagedRequest { 
 
 
 	public string Id { get; set; }
 	public string Id { get; set; }
+
+	/// <summary>
+	/// 查询类型  年 3 月 2 日 1 自定义 0
+	/// </summary>
+	public int Type { get; set; }
 }
 }