qinchaoyue 8 månader sedan
förälder
incheckning
d113bcf1f0

+ 82 - 0
src/Hotline.Api/Controllers/Bi/BiOrderController.cs

@@ -3442,5 +3442,87 @@ namespace Hotline.Api.Controllers.Bi
 	        var stream = ExcelHelper.CreateStream(dtos);
 	        return ExcelStreamResult(stream, "热点受理类型明细");
         }
+
+		/// <summary>
+		/// 甄别申请统计
+		/// </summary>
+		/// <param name="dto"></param>
+		/// <returns></returns>
+		[HttpGet("screen-apply")]
+		public async Task<PagedDto<OrderScreenApplyVo>> OrderScreenApply([FromQuery] OrderScreenApplyPagedRequest dto)
+		{
+			var (total, items) = await _orderApplication.OrderScreenApply(dto).ToPagedListAsync(dto.PageIndex, dto.PageSize, HttpContext.RequestAborted);
+			return new PagedDto<OrderScreenApplyVo>(total, items);
+		}
+		/// <summary>
+		/// 甄别申请统计导出
+		/// </summary>
+		/// <param name="dto"></param>
+		/// <returns></returns>
+		[HttpPost("screen-apply-export")]
+		public async Task<FileStreamResult> OrderScreenApplyExport([FromBody] ExportExcelDto<OrderScreenApplyPagedRequest> dto)
+		{
+			var query = _orderApplication.OrderScreenApply(dto.QueryDto);
+
+			List<OrderScreenApplyVo> datas;
+			if (dto.IsExportAll)
+			{
+				datas = await query.ToListAsync(HttpContext.RequestAborted);
+			}
+			else
+			{
+				var (_, items) = await query.ToPagedListAsync(dto.QueryDto, HttpContext.RequestAborted);
+				datas = items;
+			}
+			dynamic? dynamicClass = DynamicClassHelper.CreateDynamicClass(dto.ColumnInfos);
+			var dtos = datas
+				.Select(stu => _mapper.Map(stu, typeof(OrderScreenApplyVo), dynamicClass))
+				.Cast<object>()
+				.ToList();
+
+			var stream = ExcelHelper.CreateStream(dtos);
+			return ExcelStreamResult(stream, "甄别申请统计");
+		}
+
+		/// <summary>
+		/// 甄别审批统计
+		/// </summary>
+		/// <param name="dto"></param>
+		/// <returns></returns>
+		[HttpGet("screen-audit")]
+		public async Task<PagedDto<OrderScreenAuditVo>> OrderScreenAudit([FromQuery] OrderScreenAuditPagedRequest dto)
+		{
+			var (total, items) = await _orderApplication.OrderScreenAudit(dto).ToPagedListAsync(dto.PageIndex, dto.PageSize, HttpContext.RequestAborted);
+			return new PagedDto<OrderScreenAuditVo>(total, items);
+		}
+		/// <summary>
+		/// 甄别审批统计导出
+		/// </summary>
+		/// <param name="dto"></param>
+		/// <returns></returns>
+		[HttpPost("screen-audit-export")]
+		public async Task<FileStreamResult> OrderScreenAuditExport([FromBody] ExportExcelDto<OrderScreenAuditPagedRequest> dto)
+		{
+			var query = _orderApplication.OrderScreenAudit(dto.QueryDto);
+
+			List<OrderScreenAuditVo> datas;
+			if (dto.IsExportAll)
+			{
+				datas = await query.ToListAsync(HttpContext.RequestAborted);
+			}
+			else
+			{
+				var (_, items) = await query.ToPagedListAsync(dto.QueryDto, HttpContext.RequestAborted);
+				datas = items;
+			}
+			dynamic? dynamicClass = DynamicClassHelper.CreateDynamicClass(dto.ColumnInfos);
+			var dtos = datas
+				.Select(stu => _mapper.Map(stu, typeof(OrderScreenAuditVo), dynamicClass))
+				.Cast<object>()
+				.ToList();
+
+			var stream = ExcelHelper.CreateStream(dtos);
+			return ExcelStreamResult(stream, "甄别审批统计");
+		}
 	}
 }

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

@@ -224,5 +224,19 @@ namespace Hotline.Application.Orders
         /// <returns></returns>
         ISugarQueryable<Order> HotspotAndAcceptTypeStatisticsDetail(HotspotAndAcceptTypeStatisticsDetailReq dto);
 
+        /// <summary>
+        /// 甄别申请统计
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        ISugarQueryable<OrderScreenApplyVo> OrderScreenApply(OrderScreenApplyPagedRequest dto);
+
+        /// <summary>
+        /// 甄别审批统计
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        ISugarQueryable<OrderScreenAuditVo> OrderScreenAudit(OrderScreenAuditPagedRequest dto);
+
 	}
 }

+ 53 - 2
src/Hotline.Application/Orders/OrderApplication.cs

@@ -76,6 +76,7 @@ public class OrderApplication : IOrderApplication, IScopeDependency
     private readonly IRepository<WorkflowStep> _workflowStepRepository;
     private readonly IRepository<WorkflowTrace> _workflowTraceRepository;
     private readonly IRepository<SystemDicData> _systemDicDataRepository;
+    private readonly IRepository<OrderScreen> _orderScreenRepository;
 
 
 	public OrderApplication(
@@ -100,7 +101,8 @@ public class OrderApplication : IOrderApplication, IScopeDependency
         IRepository<Hotspot> hotspotRepository,
         IRepository<WorkflowStep> workflowStepRepository,
         IRepository<SystemDicData> systemDicDataRepository,
-        IRepository<WorkflowTrace> workflowTraceRepository)
+        IRepository<WorkflowTrace> workflowTraceRepository,
+        IRepository<OrderScreen> orderScreenRepository)
     {
         _orderDomainService = orderDomainService;
         _workflowDomainService = workflowDomainService;
@@ -124,7 +126,9 @@ public class OrderApplication : IOrderApplication, IScopeDependency
         _workflowStepRepository = workflowStepRepository;
         _systemDicDataRepository = systemDicDataRepository;
         _workflowTraceRepository = workflowTraceRepository;
-    }
+        _orderScreenRepository = orderScreenRepository;
+
+	}
 
     /// <summary>
     /// 更新工单办理期满时间(延期调用,其他不调用)
@@ -1607,6 +1611,53 @@ public class OrderApplication : IOrderApplication, IScopeDependency
 		return query;
 	}
 
+    /// <summary>
+    /// 甄别申请统计
+    /// </summary>
+    /// <returns></returns>
+	public ISugarQueryable<OrderScreenApplyVo> OrderScreenApply(OrderScreenApplyPagedRequest dto)
+	{
+		if (dto.EndTime.HasValue)
+		    dto.EndTime = dto.EndTime.Value.AddDays(1).AddSeconds(-1);
+        var query = _orderScreenRepository.Queryable()
+            .WhereIF(dto.StartTime.HasValue && dto.EndTime.HasValue, x => x.CreationTime >= dto.StartTime && x.CreationTime <= dto.EndTime)
+            .WhereIF(!string.IsNullOrEmpty(dto.ApplyUserName),x=> x.CreatorName == dto.ApplyUserName)
+            .WhereIF(!string.IsNullOrEmpty(dto.ApplyOrgName), x => x.CreatorOrgName == dto.ApplyOrgName)
+			.GroupBy(x => new { ApplyTime = x.CreationTime.ToString("yyyy-MM-dd"), x.CreatorName, x.CreatorOrgName })
+            .Select(x => new OrderScreenApplyVo
+            {
+                ApplyTime = x.CreationTime.ToString("yyyy-MM-dd"),
+                ApplyUserName = x.CreatorName,
+                ApplyOrgName = x.CreatorOrgName,
+                ApplyNum = SqlFunc.AggregateCount(1)
+            });
+		return query;
+	}
+
+    /// <summary>
+    /// 甄别审批统计
+    /// </summary>
+    /// <returns></returns>
+    public ISugarQueryable<OrderScreenAuditVo> OrderScreenAudit(OrderScreenAuditPagedRequest dto)
+    {
+	    if (dto.EndTime.HasValue)
+		    dto.EndTime = dto.EndTime.Value.AddDays(1).AddSeconds(-1);
+	    var query = _workflowTraceRepository.Queryable()
+		    .WhereIF(dto.StartTime.HasValue && dto.EndTime.HasValue, x => x.HandleTime >= dto.StartTime && x.HandleTime <= dto.EndTime)
+		    .WhereIF(!string.IsNullOrEmpty(dto.AuditUserName), x => x.HandlerName == dto.AuditUserName)
+            .Where(x=> x.HandlerName != null && x.HandlerName != "" && x.Status == EWorkflowStepStatus.Handled)
+            .WhereIF(dto.AuditType is 1,x=>x.Name == "班长审批")
+		    .WhereIF(dto.AuditType is 2, x => x.Name == "中心领导")
+			.GroupBy(x => new { x.HandlerName })
+		    .Select(x => new OrderScreenAuditVo
+			{
+			  AuditName = x.HandlerName,
+              AuditNum = SqlFunc.AggregateSum(SqlFunc.IIF(x.TraceState  == EWorkflowTraceState.Normal, 1, 0)),
+              AuditBackNum = SqlFunc.AggregateSum(SqlFunc.IIF( x.TraceState != EWorkflowTraceState.Normal, 1, 0)),
+			});
+	    return query;
+    }
+
 	#region private
 
 	/// <summary>

+ 45 - 1
src/Hotline.Share/Dtos/Order/OrderBiDto.cs

@@ -1174,5 +1174,49 @@ namespace Hotline.Share.Dtos.Order
 	}
 
 
-    
+	public class OrderScreenApplyVo
+	{
+		/// <summary>
+		/// 提起时间
+		/// </summary>
+		public string ApplyTime { get; set; }
+
+		/// <summary>
+		/// 提起人
+		/// </summary>
+		public string ApplyUserName { get; set; }
+
+		/// <summary>
+		/// 部门名称
+		/// </summary>
+		public string ApplyOrgName { get; set; }
+
+		/// <summary>
+		/// 数量
+		/// </summary>
+		public int ApplyNum { get; set; }
+	}
+
+	public class OrderScreenAuditVo { 
+	
+		/// <summary>
+		/// 审批人
+		/// </summary>
+		public string AuditName { get; set; }
+
+		/// <summary>
+		/// 审批数量
+		/// </summary>
+		public int AuditNum { get; set; }
+
+		/// <summary>
+		/// 退回数量
+		/// </summary>
+		public int AuditBackNum { get; set; }
+
+		/// <summary>
+		/// 小计
+		/// </summary>
+		public int Total => AuditNum + AuditBackNum;
+	}
 }

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

@@ -715,3 +715,30 @@ public record HotspotAndAcceptTypeStatisticsDetailReq : PagedRequest
 
 	public DateTime EndTime { get; set; }
 }
+
+public record OrderScreenApplyPagedRequest : PagedKeywordRequest
+{
+	/// <summary>
+	/// 提起人
+	/// </summary>
+	public string ApplyUserName { get; set; }
+
+	/// <summary>
+	/// 部门名称
+	/// </summary>
+	public string ApplyOrgName { get; set; }
+}
+
+public record OrderScreenAuditPagedRequest : PagedKeywordRequest
+{
+	/// <summary>
+	/// 审批人
+	/// </summary>
+	public string AuditUserName { get; set; }
+
+	/// <summary>
+	///  1 中心班长   2 中心领导
+	/// </summary>
+	public int? AuditType { get; set; }
+
+}