using Hotline.Application.ExportExcel;
using Hotline.Share.Tools;
using Hotline.Application.StatisticalReport;
using Hotline.Application.Systems;
using Hotline.Caching.Interfaces;
using Hotline.CallCenter.Calls;
using Hotline.CallCenter.Tels;
using Hotline.Share.Dtos;
using Hotline.Share.Dtos.CallCenter;
using Hotline.Share.Dtos.Order;
using Hotline.Share.Dtos.TrCallCenter;
using Hotline.Share.Requests;
using Hotline.Tools;
using Hotline.Users;
using MapsterMapper;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using SqlSugar;
using System.Data;
using System.Linq.Dynamic.Core;
using XF.Domain.Repository;
using Hotline.Settings;
using XF.Utility.EnumExtensions;
using Hotline.Share.Enums.CallCenter;
using Hotline.Repository.SqlSugar.Extensions;
namespace Hotline.Api.Controllers.Bi;
///
/// 话务报表
///
public class BiCallController : BaseController
{
private readonly IRepository _trCallRecordRepository;
private readonly BaseDataApplication _baseDataApplication;
private readonly IRepository _userRepository;
private readonly IRepository _telRestRepository;
private readonly IMapper _mapper;
private readonly ISystemSettingCacheManager _systemSettingCacheManager;
private readonly IRepository _workRepository;
private readonly ISystemDicDataCacheManager _sysDicDataCacheManager;
private readonly ICallReportApplication _callReportApplication;
private readonly IExportApplication _exportApplication;
public BiCallController(
IRepository trCallRecordRepository,
IRepository userRepository,
IRepository telRestRepository,
IMapper mapper,
ISystemSettingCacheManager systemSettingCacheManager,
ISystemDicDataCacheManager sysDicDataCacheManager,
IRepository workRepository,
ICallReportApplication callReportApplication,
IExportApplication exportApplication,
BaseDataApplication baseDataApplication)
{
_trCallRecordRepository = trCallRecordRepository;
_userRepository = userRepository;
_telRestRepository = telRestRepository;
_mapper = mapper;
_systemSettingCacheManager = systemSettingCacheManager;
_workRepository = workRepository;
_sysDicDataCacheManager = sysDicDataCacheManager;
_callReportApplication = callReportApplication;
_exportApplication = exportApplication;
_baseDataApplication = baseDataApplication;
}
///
/// 话务统计分析
///
///
///
[HttpGet("calls")]
[AllowAnonymous]
public async Task> QueryCallsAsync([FromQuery] BiQueryCallsDto dto)
=> await _callReportApplication.QueryCallsAsync(dto, HttpContext.RequestAborted);
///
/// 话务统计分析---导出
///
///
///
[HttpPost("calls_export")]
[AllowAnonymous]
public async Task ExportQueryCallsAsync([FromBody] ExportExcelDto dto)
=> ExcelStreamResult(
_exportApplication.GetExcelStream(
dto,
await _callReportApplication.QueryCallsAsync(dto.QueryDto, HttpContext.RequestAborted),
list =>
{
return new BiCallDto()
{
HourRange = "合计",
Hour = 13,
Total = list.Sum(p => p.Total),
Answered = list.Sum(p => p.Answered),
Hanguped = list.Sum(p => p.Hanguped)
};
}),
"话务统计分析");
///
/// 话务日期统计
///
///
///
[HttpGet("query_calls_statistics")]
public async Task> QueryCallsStatisticsAsync([FromQuery] StartEndTimeDto dto)
{
var items = await _callReportApplication.QueryCallsDetailStatisticsAsync(dto, HttpContext.RequestAborted);
var total = new QueryCallsDetailStatistics
{
Date = "合计",
//InTotal = items.Sum(m => m.InTotal),
NotAcceptedHang = items.Sum(m => m.NotAcceptedHang),
InConnectionQuantity = items.Sum(m => m.InConnectionQuantity),
InNotAnswered = items.Sum(m => m.InNotAnswered),
IvrByeCount = items.Sum(m => m.IvrByeCount),
OutConnectionQuantity = items.Sum(m => m.OutConnectionQuantity),
OutNotAnswered = items.Sum(m => m.OutNotAnswered)
};
return new TotalList(items, total);
}
///
/// 话务日期统计-导出
///
///
///
[HttpPost("query_calls_statistics_export")]
public async Task QueryCallsStatisticsExportAsync([FromBody] ExportExcelDto dto)
{
var items = (await _callReportApplication.QueryCallsDetailStatisticsAsync(dto.QueryDto, HttpContext.RequestAborted));
return _exportApplication.GetExcelFile(dto, items, "话务日期统计", "Date");
}
///
/// 话务日期统计详情
///
///
///
[HttpGet("query_calls_statistics_detail")]
public async Task> QueryCallsStatisticsDetailAsync([FromQuery] QueryCallsStatisticsDetailInDto dto)
=> (await _callReportApplication.QueryCallsStatisticsDetailAsync(dto, HttpContext.RequestAborted))
.ToPaged();
///
/// 话务日期统计详情--导出
///
///
///
[HttpPost("query_calls_statistics_detail/export")]
public async Task QueryCallsStatisticsDetailAsync([FromBody] ExportExcelDto dto)
{
var items = (await _callReportApplication.QueryCallsStatisticsDetailAsync(dto.QueryDto, HttpContext.RequestAborted)).Item2;
return _exportApplication.GetExcelFile(dto, items, "话务日期统计详情", "OrderNo");
}
///
/// 话务日期统计详情页面基础数据
///
///
///
[HttpGet("query_calls_statistics_detail/base-data")]
public Dictionary QueryCallsStatisticsDetailBaseData()
{
return new Dictionary
{
{ "endBy", EnumExts.GetDescriptions() }
};
}
///
/// 话务日期明细
///
///
///
[HttpGet("query_calls_detail")]
public async Task