|
@@ -1048,6 +1048,47 @@ namespace Hotline.Api.Controllers.Bi
|
|
return await _orderRepository.HotPortJoinOrgStatistics(dto.StartTime, dto.EndTime, IsCenter, _sessionContext.OrgId);
|
|
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>
|
|
/// 回访量统计
|
|
/// 回访量统计
|
|
/// </summary>
|
|
/// </summary>
|
|
@@ -1056,12 +1097,12 @@ namespace Hotline.Api.Controllers.Bi
|
|
/// <param name="VisitName"></param>
|
|
/// <param name="VisitName"></param>
|
|
/// <returns></returns>
|
|
/// <returns></returns>
|
|
[HttpGet("visit-measure-statistics")]
|
|
[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()
|
|
var query = _orderVisitRepository.Queryable()
|
|
.Includes(x => x.Employee)
|
|
.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 })
|
|
.GroupBy(x => new { x.EmployeeId, x.Employee.Name })
|
|
.Select(x => new VisitMeasureStatisticsModelDto()
|
|
.Select(x => new VisitMeasureStatisticsModelDto()
|
|
{
|
|
{
|
|
@@ -1070,25 +1111,24 @@ namespace Hotline.Api.Controllers.Bi
|
|
ArtificialVisitCount = 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)
|
|
SumCount = SqlFunc.AggregateCount(x.EmployeeId)
|
|
});
|
|
});
|
|
- Console.Write(query.ToSqlString());
|
|
|
|
var list =await query.ToListAsync();
|
|
var list =await query.ToListAsync();
|
|
var returnModel = new VisitMeasureStatisticsDto();
|
|
var returnModel = new VisitMeasureStatisticsDto();
|
|
returnModel.VisitMeasureStatisticsModelList = list;
|
|
returnModel.VisitMeasureStatisticsModelList = list;
|
|
|
|
|
|
//查询AIVisit
|
|
//查询AIVisit
|
|
returnModel.AiVisitCount = await _aiOrderVisitDetailRepository.Queryable()
|
|
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()
|
|
returnModel.AiVisitSatisfiedCount = await _aiOrderVisitDetailRepository.Queryable()
|
|
//.Includes(x => x.OrderVisit)
|
|
//.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()
|
|
returnModel.AiVisitNoSatisfiedCount = await _aiOrderVisitDetailRepository.Queryable()
|
|
//.Includes(x => x.OrderVisit)
|
|
//.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()
|
|
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;
|
|
return returnModel;
|