瀏覽代碼

回访量导出接口

Dun.Jason 4 月之前
父節點
當前提交
182b2a74b5

+ 48 - 8
src/Hotline.Api/Controllers/Bi/BiOrderController.cs

@@ -1048,6 +1048,47 @@ namespace Hotline.Api.Controllers.Bi
             return await _orderRepository.HotPortJoinOrgStatistics(dto.StartTime, dto.EndTime, IsCenter, _sessionContext.OrgId);
         }
 
+        /// <summary>
+        /// 回访量统计导出
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        [HttpPost("visit-measure-statistics-export")]
+        public async Task<FileStreamResult> VisitMeasureStatisticsExport([FromBody] ExportExcelDto<VisitMeasureStatisticsRequest> dto)
+        {
+            var query = _orderVisitRepository.Queryable()
+                .Includes(x => x.Employee)
+                 .Where(x => x.VisitTime >= dto.QueryDto.StartTime && x.VisitTime <= dto.QueryDto.EndTime && x.VisitState == EVisitState.Visited)
+                 .WhereIF(!string.IsNullOrEmpty(dto.QueryDto.VisitName), x => x.Employee.Name.Contains(dto.QueryDto.VisitName))
+                 .GroupBy(x => new { x.EmployeeId, x.Employee.Name })
+                 .Select(x => new VisitMeasureStatisticsModelDto()
+                 {
+                     VisitName = x.Employee.Name,
+                     CallVisitCount = SqlFunc.AggregateSum(SqlFunc.IIF(x.VisitType == EVisitType.CallVisit, 1, 0)),
+                     ArtificialVisitCount = SqlFunc.AggregateSum(SqlFunc.IIF(x.VisitType != EVisitType.CallVisit, 1, 0)),
+                     SumCount = SqlFunc.AggregateCount(x.EmployeeId)
+                 });
+            var list = await query.ToListAsync();
+            //合计
+            var SumModel = new VisitMeasureStatisticsModelDto()
+            {
+                VisitName = "合计",
+                CallVisitCount = list.Sum(x=>x.CallVisitCount),
+                ArtificialVisitCount = list.Sum(x=>x.ArtificialVisitCount),
+                SumCount = list.Sum(x=>x.SumCount)
+            };
+            list.Add(SumModel);
+            dynamic? dynamicClass = DynamicClassHelper.CreateDynamicClass(dto.ColumnInfos);
+            var dtos = list
+             .Select(stu => _mapper.Map(stu, typeof(VisitAndOrgSatisfactionStatisticsDto), dynamicClass))
+             .Cast<object>()
+             .ToList();
+
+            var stream = ExcelHelper.CreateStream(dtos);
+            return ExcelStreamResult(stream, "回访量统计");
+        }
+
+
         /// <summary>
         /// 回访量统计
         /// </summary>
@@ -1056,12 +1097,12 @@ namespace Hotline.Api.Controllers.Bi
         /// <param name="VisitName"></param>
         /// <returns></returns>
         [HttpGet("visit-measure-statistics")]
-        public async Task<VisitMeasureStatisticsDto> VisitMeasureStatistics(DateTime StartTime, DateTime EndTime, string? VisitName)
+        public async Task<VisitMeasureStatisticsDto> VisitMeasureStatistics([FromQuery] VisitMeasureStatisticsRequest dto)
         {
             var query = _orderVisitRepository.Queryable()
                 .Includes(x => x.Employee)
-                 .Where(x => x.VisitTime >= StartTime && x.VisitTime <= EndTime && x.VisitState == EVisitState.Visited)
-                 .WhereIF(!string.IsNullOrEmpty(VisitName), x => x.Employee.Name.Contains(VisitName))
+                 .Where(x => x.VisitTime >= dto.StartTime && x.VisitTime <= dto.EndTime && x.VisitState == EVisitState.Visited)
+                 .WhereIF(!string.IsNullOrEmpty(dto.VisitName), x => x.Employee.Name.Contains(dto.VisitName))
                  .GroupBy(x => new { x.EmployeeId, x.Employee.Name })
                  .Select(x => new VisitMeasureStatisticsModelDto()
                  {
@@ -1070,25 +1111,24 @@ namespace Hotline.Api.Controllers.Bi
                      ArtificialVisitCount = SqlFunc.AggregateSum(SqlFunc.IIF(x.VisitType != EVisitType.CallVisit, 1, 0)),
                      SumCount = SqlFunc.AggregateCount(x.EmployeeId)
                  });
-            Console.Write(query.ToSqlString());
             var list =await query.ToListAsync();
             var returnModel = new VisitMeasureStatisticsDto();
             returnModel.VisitMeasureStatisticsModelList = list;
 
             //查询AIVisit
             returnModel.AiVisitCount = await _aiOrderVisitDetailRepository.Queryable()
-                .Where(x => x.AiVisitTime >= StartTime && x.AiVisitTime <= EndTime && x.IsSuccess != null).CountAsync();
+                .Where(x => x.AiVisitTime >= dto.StartTime && x.AiVisitTime <= dto.EndTime && x.IsSuccess != null).CountAsync();
 
             returnModel.AiVisitSatisfiedCount = await _aiOrderVisitDetailRepository.Queryable()
                 //.Includes(x => x.OrderVisit)
-                .Where(x => x.AiVisitTime >= StartTime && x.AiVisitTime <= EndTime && x.IsSuccess == true && SqlFunc.JsonField(x.AiOrgProcessingResults, "Key") == "4").CountAsync();
+                .Where(x => x.AiVisitTime >= dto.StartTime && x.AiVisitTime <= dto.EndTime && x.IsSuccess == true && SqlFunc.JsonField(x.AiOrgProcessingResults, "Key") == "4").CountAsync();
 
             returnModel.AiVisitNoSatisfiedCount = await _aiOrderVisitDetailRepository.Queryable()
                 //.Includes(x => x.OrderVisit)
-                .Where(x => x.AiVisitTime >= StartTime && x.AiVisitTime <= EndTime && x.IsSuccess == true && SqlFunc.JsonField(x.AiOrgProcessingResults, "Key") == "2").CountAsync();
+                .Where(x => x.AiVisitTime >= dto.StartTime && x.AiVisitTime <= dto.EndTime && x.IsSuccess == true && SqlFunc.JsonField(x.AiOrgProcessingResults, "Key") == "2").CountAsync();
 
             returnModel.AIVisitFailCount = await _aiOrderVisitDetailRepository.Queryable()
-                .Where(x => x.AiVisitTime >= StartTime && x.AiVisitTime <= EndTime && x.IsSuccess == false).CountAsync();
+                .Where(x => x.AiVisitTime >= dto.StartTime && x.AiVisitTime <= dto.EndTime && x.IsSuccess == false).CountAsync();
 
 
             return returnModel;

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

@@ -244,6 +244,13 @@ public record HotPortJoinOrgStatisticsRequest
     public DateTime EndTime { get; set; }
 }
 
+public record VisitMeasureStatisticsRequest
+{
+    public DateTime StartTime { get; set; }
+    public DateTime EndTime { get; set; }
+    
+    public string? VisitName { get; set; }
+}
 
 public record HotspotReportPagedRequest : ReportPagedRequest
 {