Ver código fonte

优化待回访统计逻辑及多表查询方式

重构了待回访统计逻辑,使用 SqlFunc.AggregateSum 替代 CountAsync(),通过条件累加实现更灵活的统计方式。调整了查询方式,将 VisitState 的过滤逻辑从 Where 条件移至 Select 中,提升代码可读性和维护性。同时优化了多表关联查询的统计逻辑,确保与业务需求一致。更改集中在 BiOrderController.cs 文件,需验证统计结果的正确性。
田爽 4 dias atrás
pai
commit
3151937209

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

@@ -3035,7 +3035,9 @@ namespace Hotline.Api.Controllers.Bi
               }).FirstAsync();
 
 			var waitVisitd = await _orderVisitRepository.Queryable()
-			 .Where(x => x.CreationTime >= StartTime && x.CreationTime <= EndTime && x.VisitState != EVisitState.None && x.VisitState != EVisitState.Visited).CountAsync();
+			 .Where(x => x.CreationTime >= StartTime && x.CreationTime <= EndTime).Select(x =>
+				   SqlFunc.AggregateSum(SqlFunc.IIF(x.VisitState != EVisitState.None && x.VisitState != EVisitState.Visited, 1, 0)) //待回访
+			  ).FirstAsync();
 			centerReportVisitd.WaitVisitd = waitVisitd;
 
 			//部门
@@ -3277,7 +3279,9 @@ namespace Hotline.Api.Controllers.Bi
             var waitVisitd = await _orderVisitRepository.Queryable()
 			  .LeftJoin<Order>((x, o) => x.OrderId == o.Id)
 			  .WhereIF(IdentityType.HasValue, (x, o) => o.IdentityType == IdentityType)
-			  .Where((x, o) => x.CreationTime >= StartTime && x.CreationTime <= EndTime && x.VisitState != EVisitState.None && x.VisitState != EVisitState.Visited).CountAsync();
+			  .Where((x, o) => x.CreationTime >= StartTime && x.CreationTime <= EndTime).Select((x, o) => 
+                    SqlFunc.AggregateSum(SqlFunc.IIF(x.VisitState != EVisitState.None && x.VisitState != EVisitState.Visited, 1, 0)) //待回访
+               ).FirstAsync();
             centerReportVisitd.WaitVisitd = waitVisitd;
 
 			//部门