OrderVisitApplication.cs 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. using Hotline.Orders;
  2. using Hotline.Share.Dtos.Order;
  3. using Hotline.Share.Enums.Order;
  4. using Hotline.Share.Tools;
  5. using SqlSugar;
  6. using XF.Domain.Dependency;
  7. namespace Hotline.Application.Orders;
  8. /// <summary>
  9. /// 回访服务
  10. /// </summary>
  11. public class OrderVisitApplication : IOrderVisitApplication, IScopeDependency
  12. {
  13. private readonly IOrderVisitRepository _orderVisitRepository;
  14. public OrderVisitApplication(IOrderVisitRepository orderVisitRepository)
  15. {
  16. _orderVisitRepository = orderVisitRepository;
  17. }
  18. public async Task<List<OrderVisitQuantityOutDto>> QueryOrderVisitQuantityAsync(QueryOrderVisitQuantity dto, CancellationToken cancellationToken)
  19. {
  20. var query = _orderVisitRepository
  21. .Queryable()
  22. .WhereIF(dto.EmployeeName.NotNullOrEmpty(), m => m.Employee.Name.Contains(dto.EmployeeName))
  23. .Where(m => m.VisitTime >= dto.StartTime && m.VisitTime <= dto.EndTime && m.VisitType != null)
  24. .GroupBy(m => m.EmployeeId)
  25. .Select(m => new OrderVisitQuantityOutDto
  26. {
  27. EmployeeId = m.EmployeeId,
  28. EmployeeName = m.Employee.Name,
  29. CallVisitCount = SqlFunc.AggregateSum(SqlFunc.IIF(m.VisitType == EVisitType.CallVisit, 1, 0)), // 电话回访量
  30. DefaultVisitCount = SqlFunc.AggregateSum(SqlFunc.IIF(m.VisitType == EVisitType.ArtificialVisit, 1, 0)), // 默认回访量(人工回访)
  31. SmsVisitCount = SqlFunc.AggregateSum(SqlFunc.IIF(m.VisitType == EVisitType.SmsVisit, 1, 0)), // 短信回访量
  32. // TotalVisitCount = SqlFunc.AggregateSum(SqlFunc.IIF(m.VisitType != null, 1, 0)) // 总回访量
  33. });
  34. return await query.ToListAsync(cancellationToken);
  35. }
  36. }