Преглед на файлове

市州通用-【类型区域->热点类型小类统计】需支持查看明细

田爽 преди 4 месеца
родител
ревизия
81fdcf940b

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

@@ -1286,11 +1286,56 @@ namespace Hotline.Api.Controllers.Bi
 			return ExcelStreamResult(stream, "热点类型小类统计");
 		}
 
-        /// <summary>
-        /// 部门满意度统计表基础数据
-        /// </summary>
-        /// <returns></returns>
-        [HttpGet("visit-org-satisfaction-statisticsBaseData")]
+		/// <summary>
+		/// 热点类型小类统计明细
+		/// </summary>
+		/// <param name="dto"></param>
+		/// <returns></returns>
+		[HttpGet("hotspot-statistics-detail")]
+		public async Task<PagedDto<OrderDto>> HotspotStatisticsDetail([FromQuery] HotspotStatisticsRep dto)
+		{
+			var (total, items) = await _orderApplication.HotspotStatisticsDetail(dto)
+				.ToPagedListAsync(dto.PageIndex, dto.PageSize, HttpContext.RequestAborted);
+			return new PagedDto<OrderDto>(total, _mapper.Map<IReadOnlyList<OrderDto>>(items));
+		}
+
+		/// <summary>
+		/// 热点类型小类统计明细导出
+		/// </summary>
+		/// <param name="dto"></param>
+		/// <returns></returns>
+		[HttpPost("hotspot-statistics-detail/export")]
+		public async Task<FileStreamResult> HotspotStatisticsDetailExport([FromBody] ExportExcelDto<HotspotStatisticsRep> dto)
+		{
+			var query = _orderApplication.HotspotStatisticsDetail(dto.QueryDto);
+			List<Order> data;
+			if (dto.IsExportAll)
+			{
+				data = await query.ToListAsync(HttpContext.RequestAborted);
+			}
+			else
+			{
+				var (_, items) = await query.ToPagedListAsync(dto.QueryDto, HttpContext.RequestAborted);
+				data = items;
+			}
+			var orderDtos = _mapper.Map<IReadOnlyList<OrderDto>>(data);
+			dynamic? dynamicClass = DynamicClassHelper.CreateDynamicClass(dto.ColumnInfos);
+
+			var dtos = orderDtos
+				.Select(stu => _mapper.Map(stu, typeof(OrderDto), dynamicClass))
+				.Cast<object>()
+				.ToList();
+
+			var stream = ExcelHelper.CreateStream(dtos);
+
+			return ExcelStreamResult(stream, "热点类型小类统计明细");
+		}
+
+		/// <summary>
+		/// 部门满意度统计表基础数据
+		/// </summary>
+		/// <returns></returns>
+		[HttpGet("visit-org-satisfaction-statisticsBaseData")]
         public async Task<object> VisitAndOrgSatisfactionStatisticsBaseData()
         {
             return new { 

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

@@ -355,5 +355,13 @@ namespace Hotline.Application.Orders
         /// <param name="dto"></param>
         /// <returns></returns>
         ISugarQueryable<OrderVisit> QueryOrderVisitList(QueryOrderVisitDto dto);
+
+		/// <summary>
+		/// 热点类型小类统计明细
+		/// </summary>
+		/// <param name="dto"></param>
+		/// <returns></returns>
+		ISugarQueryable<Order> HotspotStatisticsDetail(HotspotStatisticsRep dto);
+
     }
 }

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

@@ -2905,14 +2905,33 @@ public class OrderApplication : IOrderApplication, IScopeDependency
         return query;
     }
 
+	/// <summary>
+	/// 热点类型小类统计明细
+	/// </summary>
+	/// <param name="dto"></param>
+	/// <returns></returns>
+
+	public ISugarQueryable<Order> HotspotStatisticsDetail(HotspotStatisticsRep dto)
+    {
+	    var IsCenter = _sessionContext.OrgIsCenter;
+	    var query = _orderRepository.Queryable()
+		    .Includes(d => d.OrderVisits)
+		    .Where(d => d.CreationTime >= dto.StartTime && d.CreationTime <= dto.EndTime)
+		    .Where(d => d.HotspotId.StartsWith(dto.HotspotCode))
+		    .WhereIF(dto.TypeId == 1, d => d.IdentityType == EIdentityType.Citizen)
+		    .WhereIF(dto.TypeId == 2, d => d.IdentityType == EIdentityType.Enterprise)
+		    .WhereIF(IsCenter == false, d => d.ActualHandleOrgCode.StartsWith(_sessionContext.RequiredOrgId));
+	    return query;
+    }
+
     #region private
-    /// <summary>
-    /// 接受外部工单(除省平台)
-    /// </summary>
-    /// <param name="dto"></param>
-    /// <param name="cancellationToken"></param>
-    /// <returns></returns>
-    private async Task<AddOrderResponse> ReceiveOrderFromOtherPlatformAsync(AddOrderDto dto, List<FileDto> files, CancellationToken cancellationToken)
+	/// <summary>
+	/// 接受外部工单(除省平台)
+	/// </summary>
+	/// <param name="dto"></param>
+	/// <param name="cancellationToken"></param>
+	/// <returns></returns>
+	private async Task<AddOrderResponse> ReceiveOrderFromOtherPlatformAsync(AddOrderDto dto, List<FileDto> files, CancellationToken cancellationToken)
     {
         if (string.IsNullOrEmpty(dto.ExternalId))
             throw new UserFriendlyException("工单外部编号不能为空");

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

@@ -1335,16 +1335,17 @@ public class OrderVisitJudeDetailRep
 
 }
 
-public class HotspotStatisticsRep {
-	/// <summary>
-	/// 开始时间
-	/// </summary>
-	public DateTime? StartTime { get; set; }
-
-	/// <summary>
-	/// 结束时间
-	/// </summary>
-	public DateTime? EndTime { get; set; }
+public record HotspotStatisticsRep : PagedKeywordRequest
+{ 
+	///// <summary>
+	///// 开始时间
+	///// </summary>
+	//public DateTime? StartTime { get; set; }
+
+	///// <summary>
+	///// 结束时间
+	///// </summary>
+	//public DateTime? EndTime { get; set; }
 
 	public int TypeId { get; set; }
 	public string? HotspotCode { get; set; }