|
@@ -26,6 +26,7 @@ using Hotline.Share.Tools;
|
|
|
using Hotline.Tools;
|
|
|
using MapsterMapper;
|
|
|
using MediatR;
|
|
|
+using Microsoft.AspNetCore.Authorization;
|
|
|
using Microsoft.AspNetCore.Mvc;
|
|
|
using SqlSugar;
|
|
|
using System.Data;
|
|
@@ -132,6 +133,173 @@ namespace Hotline.Api.Controllers.Bi
|
|
|
_organizeRepository = organizeRepository;
|
|
|
}
|
|
|
|
|
|
+ /// <summary>
|
|
|
+ /// 部门发布量统计
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="dto"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ [HttpGet("published/statistics/department")]
|
|
|
+ public async Task<PagedDto<PublishedOrderStatisticsDto>> QueryPublishedOrderDepartmentAsync([FromQuery] QueryOrderPublishStatisticsAllDto dto)
|
|
|
+ {
|
|
|
+ var (total, items) = await _orderApplication.QueryPublishedOrderDepartmentAsync(dto, false);
|
|
|
+ return new PagedDto<PublishedOrderStatisticsDto>(total, _mapper.Map<IReadOnlyList<PublishedOrderStatisticsDto>>(items));
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 部门发布量统计-导出
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="dto"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ [HttpPost("published/statistics/department/export")]
|
|
|
+ public async Task<FileStreamResult> ExportQueryPublishedOrderDepartmentAsync([FromBody] ExportExcelDto<QueryOrderPublishStatisticsAllDto> dto)
|
|
|
+ {
|
|
|
+ var (total, list) = await _orderApplication.QueryPublishedOrderDepartmentAsync(dto.QueryDto, dto.IsExportAll);
|
|
|
+ if (list != null && list.Count > 0)
|
|
|
+ {
|
|
|
+ list.Add(new PublishedOrderStatisticsDto()
|
|
|
+ {
|
|
|
+ Name = "合计",
|
|
|
+ PrivateCount = list.Sum(m => m.PrivateCount),
|
|
|
+ // TotalCount = list.Sum(p => p.TotalCount),
|
|
|
+ PublicCount = list.Sum(m => m.PublicCount),
|
|
|
+ WaitCount = list.Sum(m => m.WaitCount)
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ dynamic? dynamicClass = DynamicClassHelper.CreateDynamicClass(dto.ColumnInfos);
|
|
|
+
|
|
|
+ var dtos = list
|
|
|
+ .Select(stu => _mapper.Map(stu, typeof(PublishedOrderStatisticsDto), dynamicClass))
|
|
|
+ .Cast<object>()
|
|
|
+ .ToList();
|
|
|
+
|
|
|
+ var stream = ExcelHelper.CreateStream(dtos);
|
|
|
+
|
|
|
+ return ExcelStreamResult(stream, "部门发布量统计");
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 发布量统计
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="dto"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ [HttpGet("published/statistics/user")]
|
|
|
+ public async Task<PagedDto<PublishedOrderStatisticsDto>> QueryPublishedOrderUserAsync([FromQuery] QueryOrderPublishStatisticsDto dto)
|
|
|
+ {
|
|
|
+ var (total, list) = await _orderApplication.QueryPublishedOrderAsync(dto, false);
|
|
|
+ return new PagedDto<PublishedOrderStatisticsDto>(total, _mapper.Map<IReadOnlyList<PublishedOrderStatisticsDto>>(list));
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 发布量统计-导出
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="dto"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ [HttpPost("published/statistics/user/export")]
|
|
|
+ public async Task<FileStreamResult> ExportQueryPublishedOrder([FromBody] ExportExcelDto<QueryOrderPublishStatisticsDto> dto)
|
|
|
+ {
|
|
|
+ var (total, list) = await _orderApplication.QueryPublishedOrderAsync(dto.QueryDto, dto.IsExportAll);
|
|
|
+ if (list != null && list.Count > 0)
|
|
|
+ {
|
|
|
+ list.Add(new PublishedOrderStatisticsDto()
|
|
|
+ {
|
|
|
+ Name = "合计",
|
|
|
+ PrivateCount = list.Sum(m => m.PrivateCount),
|
|
|
+ //TotalCount = list.Sum(p => p.TotalCount),
|
|
|
+ PublicCount = list.Sum(m => m.PublicCount),
|
|
|
+ WaitCount = list.Sum(m => m.WaitCount)
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ dynamic? dynamicClass = DynamicClassHelper.CreateDynamicClass(dto.ColumnInfos);
|
|
|
+
|
|
|
+ var dtos = list
|
|
|
+ .Select(stu => _mapper.Map(stu, typeof(PublishedOrderStatisticsDto), dynamicClass))
|
|
|
+ .Cast<object>()
|
|
|
+ .ToList();
|
|
|
+
|
|
|
+ var stream = ExcelHelper.CreateStream(dtos);
|
|
|
+
|
|
|
+ return ExcelStreamResult(stream, "发布量统计");
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 发布量统计
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="dto"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ [HttpGet("published/statistics")]
|
|
|
+ public async Task<PublishedOrderStatisticsDto> QueryPublishedOrderAsync([FromQuery] QueryOrderPublishStatisticsAllDto dto)
|
|
|
+ {
|
|
|
+ dto.EndTime = dto.EndTime.AddDays(1).AddSeconds(-1);
|
|
|
+
|
|
|
+ var waitCount = await _orderRepository.Queryable()
|
|
|
+ .Where(order => order.CreationTime >= dto.StartTime && order.CreationTime <= dto.EndTime)
|
|
|
+ .Where(order => order.Status == EOrderStatus.Filed)
|
|
|
+ .Select(order => SqlFunc.AggregateCount(order.Id))
|
|
|
+ .FirstAsync();
|
|
|
+
|
|
|
+ var publicCount = await _orderPublishRepository.Queryable()
|
|
|
+ .Where(publish => publish.CreationTime >= dto.StartTime && publish.CreationTime <= dto.EndTime)
|
|
|
+ .Where(publish => publish.PublishState == true)
|
|
|
+ .Select(publish => SqlFunc.AggregateCount(publish.Id))
|
|
|
+ .FirstAsync();
|
|
|
+
|
|
|
+ var privateCount = await _orderPublishRepository.Queryable()
|
|
|
+ .Where(publish => publish.CreationTime >= dto.StartTime && publish.CreationTime <= dto.EndTime)
|
|
|
+ .Where(publish => publish.PublishState == false)
|
|
|
+ .Select(publish => SqlFunc.AggregateCount(publish.Id))
|
|
|
+ .FirstAsync();
|
|
|
+
|
|
|
+
|
|
|
+ return new PublishedOrderStatisticsDto
|
|
|
+ {
|
|
|
+ // TotalCount = totalCount,
|
|
|
+ PrivateCount = privateCount,
|
|
|
+ PublicCount = publicCount,
|
|
|
+ WaitCount = waitCount
|
|
|
+ };
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 回访来源统计
|
|
|
+ /// </summary>
|
|
|
+ /// <returns></returns>
|
|
|
+ [HttpGet("visit/source")]
|
|
|
+ [AllowAnonymous]
|
|
|
+ public async Task<IList<OrderVisitSourceChannelDto>> QueryOrderVisitSourceChannelAsync([FromQuery] QueryOrderVisitSourceChannelDto dto)
|
|
|
+ => await _orderApplication.QueryOrderVisitSourceChannelAsync(dto);
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 回访来源统计--导出
|
|
|
+ /// </summary>
|
|
|
+ /// <returns></returns>
|
|
|
+ [HttpPost("visit/source/export")]
|
|
|
+ [AllowAnonymous]
|
|
|
+ public async Task<FileStreamResult> QueryOrderVisitSourceChannelExportAsync([FromBody] ExportExcelDto<QueryOrderVisitSourceChannelDto> dto)
|
|
|
+ {
|
|
|
+ var list = await _orderApplication.QueryOrderVisitSourceChannelAsync(dto.QueryDto);
|
|
|
+ if (list != null && list.Count > 0)
|
|
|
+ {
|
|
|
+ list.Add(new OrderVisitSourceChannelDto()
|
|
|
+ {
|
|
|
+ SourceChannel = "合计",
|
|
|
+ Count = list.Sum(p => p.Count)
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ dynamic? dynamicClass = DynamicClassHelper.CreateDynamicClass(dto.ColumnInfos);
|
|
|
+
|
|
|
+ var dtos = list
|
|
|
+ .Select(stu => _mapper.Map(stu, typeof(OrderVisitSourceChannelDto), dynamicClass))
|
|
|
+ .Cast<object>()
|
|
|
+ .ToList();
|
|
|
+
|
|
|
+ var stream = ExcelHelper.CreateStream(dtos);
|
|
|
+
|
|
|
+ return ExcelStreamResult(stream, "回访来源统计");
|
|
|
+ }
|
|
|
+
|
|
|
/// <summary>
|
|
|
/// 部门超期统计明细
|
|
|
/// </summary>
|
|
@@ -522,7 +690,7 @@ namespace Hotline.Api.Controllers.Bi
|
|
|
.Where(x => SqlFunc.JsonListObjectAny(x.OrgNoSatisfiedReason, "Key", dto.DissatisfiedKey))
|
|
|
.WhereIF(dto.VisitOrgName.NotNullOrEmpty(), x => x.VisitOrgName.Contains(dto.VisitOrgName))
|
|
|
.WhereIF(IsCenter == false, x => x.VisitOrgCode.StartsWith(_sessionContext.RequiredOrgId))
|
|
|
- .WhereIF(IsCenter == true,x => x.VisitOrgCode.StartsWith(dto.OrgCode))
|
|
|
+ .WhereIF(IsCenter == true, x => x.VisitOrgCode.StartsWith(dto.OrgCode))
|
|
|
.WhereIF(!string.IsNullOrEmpty(dto.Keyword), x => x.OrderVisit.Order.No.Contains(dto.Keyword) || x.OrderVisit.Order.Title.Contains(dto.Keyword))
|
|
|
.OrderBy(x => x.OrderVisit.VisitTime)
|
|
|
.ToPagedListAsync(dto.PageIndex, dto.PageSize, HttpContext.RequestAborted);
|
|
@@ -1142,7 +1310,7 @@ namespace Hotline.Api.Controllers.Bi
|
|
|
public async Task<PagedDto<OrgVisitDetailListResp>> VisitAndOrgSatisfactionDetail([FromQuery] VisitAndOrgSatisfactionDetailDto dto)
|
|
|
{
|
|
|
//var (total, items) = await _orderApplication.VisitAndOrgSatisfactionDetail(dto)
|
|
|
- var (total,items) = await _orderRepository.VisitAndOrgSatisfactionDetail(dto)
|
|
|
+ var (total, items) = await _orderRepository.VisitAndOrgSatisfactionDetail(dto)
|
|
|
.ToPagedListAsync(dto.PageIndex, dto.PageSize, HttpContext.RequestAborted);
|
|
|
return new PagedDto<OrgVisitDetailListResp>(total, _mapper.Map<IReadOnlyList<OrgVisitDetailListResp>>(items));
|
|
|
}
|
|
@@ -2671,7 +2839,7 @@ namespace Hotline.Api.Controllers.Bi
|
|
|
foreach (var item in itemsVo)
|
|
|
{
|
|
|
// item.UnsignedTime = _timeLimitDomainService.CalcWorkTimeToHour(item.WorkflowStep.CreationTime, item.WorkflowStep.Status != EWorkflowStepStatus.WaitForAccept && item.WorkflowStep.AcceptTime.HasValue ? item.WorkflowStep.AcceptTime!.Value : DateTime.Now, false);
|
|
|
- item.UnsignedTime = await _expireTime.CalcWorkTimeToHour(item.WorkflowStep.CreationTime, item.WorkflowStep.Status != EWorkflowStepStatus.WaitForAccept && item.WorkflowStep.AcceptTime.HasValue ? item.WorkflowStep.AcceptTime!.Value : DateTime.Now, false);
|
|
|
+ item.UnsignedTime = await _expireTime.CalcWorkTimeToHour(item.WorkflowStep.CreationTime, item.WorkflowStep.Status != EWorkflowStepStatus.WaitForAccept && item.WorkflowStep.AcceptTime.HasValue ? item.WorkflowStep.AcceptTime!.Value : DateTime.Now, false);
|
|
|
}
|
|
|
return new PagedDto<UnsignedOrderDto>(total, itemsVo);
|
|
|
}
|
|
@@ -2724,9 +2892,13 @@ namespace Hotline.Api.Controllers.Bi
|
|
|
[HttpGet("order_source_report")]
|
|
|
public async Task<IReadOnlyList<OrderSourceVo>> QueryOrderSourceReport([FromQuery] QueryOrderSourceRequest dto)
|
|
|
{
|
|
|
- var count = await _orderApplication.QueryOrderSource(dto).CountAsync();
|
|
|
+ if (dto.EndTime.HasValue)
|
|
|
+ dto.EndTime = dto.EndTime.Value.AddDays(1).AddSeconds(-1);
|
|
|
+ //var count = await _orderApplication.QueryOrderSource(dto).CountAsync();
|
|
|
var query = _orderApplication.QueryOrderSource(dto);
|
|
|
- var items = await query.GroupBy(d => d.SourceChannel).Select(d => new OrderSourceVo { Source = d.SourceChannel, Num = SqlFunc.AggregateCount(d.Id), TotalSumCount = count }).ToListAsync(HttpContext.RequestAborted);
|
|
|
+ var items = await query.GroupBy(d => d.SourceChannel).Select(d => new OrderSourceVo { Source = d.SourceChannel, Num = SqlFunc.AggregateCount(d.Id) }).ToListAsync(HttpContext.RequestAborted);
|
|
|
+ var count = items.Sum(x => x.Num);
|
|
|
+ items.ForEach(x => x.TotalSumCount = count);
|
|
|
items.Add(new OrderSourceVo { Source = "合计", Num = count, TotalSumCount = count });
|
|
|
return items;
|
|
|
}
|
|
@@ -2738,8 +2910,10 @@ namespace Hotline.Api.Controllers.Bi
|
|
|
[HttpPost("order_source/_export")]
|
|
|
public async Task<FileStreamResult> QueryOrderSourceReport([FromBody] ExportExcelDto<QueryOrderSourceRequest> dto)
|
|
|
{
|
|
|
- var count = await _orderApplication.QueryOrderSource(dto.QueryDto).CountAsync();
|
|
|
- var query = _orderApplication.QueryOrderSource(dto.QueryDto).GroupBy(d => d.SourceChannel).Select(d => new OrderSourceVo { Source = d.SourceChannel, Num = SqlFunc.AggregateCount(d.Id), TotalSumCount = count });
|
|
|
+ if (dto.QueryDto.EndTime.HasValue)
|
|
|
+ dto.QueryDto.EndTime = dto.QueryDto.EndTime.Value.AddDays(1).AddSeconds(-1);
|
|
|
+ //var count = await _orderApplication.QueryOrderSource(dto.QueryDto).CountAsync();
|
|
|
+ var query = _orderApplication.QueryOrderSource(dto.QueryDto).GroupBy(d => d.SourceChannel).Select(d => new OrderSourceVo { Source = d.SourceChannel, Num = SqlFunc.AggregateCount(d.Id) });
|
|
|
List<OrderSourceVo> orderSources;
|
|
|
if (dto.IsExportAll)
|
|
|
{
|
|
@@ -2750,6 +2924,8 @@ namespace Hotline.Api.Controllers.Bi
|
|
|
var (_, items) = await query.ToPagedListAsync(dto.QueryDto, HttpContext.RequestAborted);
|
|
|
orderSources = items;
|
|
|
}
|
|
|
+ var count = orderSources.Sum(x => x.Num);
|
|
|
+ orderSources.ForEach(x => x.TotalSumCount = count);
|
|
|
orderSources.Add(new OrderSourceVo { Source = "合计", Num = count, TotalSumCount = count });
|
|
|
dynamic? dynamicClass = DynamicClassHelper.CreateDynamicClass(dto.ColumnInfos);
|
|
|
var dtos = orderSources
|
|
@@ -3156,7 +3332,6 @@ namespace Hotline.Api.Controllers.Bi
|
|
|
[HttpGet("accepttype-statistics")]
|
|
|
public async Task<List<AcceptTypeStatisticsDto>> AcceptTypeStatistics([FromQuery] AcceptTypeStatisticsReq dto)
|
|
|
{
|
|
|
- dto.EndTime = dto.EndTime.AddDays(1).AddSeconds(-1);
|
|
|
var list = await _orderReportApplication.AcceptTypeStatistics(dto).ToListAsync();
|
|
|
int SumCount = list.Sum(x => x.SumCount);
|
|
|
list.Add(new AcceptTypeStatisticsDto()
|
|
@@ -3183,7 +3358,6 @@ namespace Hotline.Api.Controllers.Bi
|
|
|
[HttpPost("accepttype-statistics-export")]
|
|
|
public async Task<FileStreamResult> AcceptTypeStatisticsExport([FromBody] ExportExcelDto<AcceptTypeStatisticsReq> dto)
|
|
|
{
|
|
|
-
|
|
|
var list = await _orderReportApplication.AcceptTypeStatistics(dto.QueryDto).ToListAsync();
|
|
|
int SumCount = list.Sum(x => x.SumCount);
|
|
|
list.Add(new AcceptTypeStatisticsDto()
|
|
@@ -3820,18 +3994,18 @@ namespace Hotline.Api.Controllers.Bi
|
|
|
{
|
|
|
var items = await _orderApplication.OrderCenterAccept(dto).ToListAsync(HttpContext.RequestAborted);
|
|
|
items.Add(new OrderCenterAcceptVo
|
|
|
- {
|
|
|
- Time = "合计",
|
|
|
- AcceptNum = items.Sum(p => p.AcceptNum),
|
|
|
- ValidNum = items.Sum(p => p.ValidNum),
|
|
|
- RepetitionNum = items.Sum(p => p.RepetitionNum),
|
|
|
- InvalidNum = items.Sum(p => p.InvalidNum),
|
|
|
- HandleNum = items.Sum(p => p.HandleNum),
|
|
|
- NoHandleNum = items.Sum(p => p.NoHandleNum),
|
|
|
- BackNum = items.Sum(p => p.BackNum),
|
|
|
- DutyDeskNum = items.Sum(p => p.DutyDeskNum),
|
|
|
- });
|
|
|
- return items;
|
|
|
+ {
|
|
|
+ Time = "合计",
|
|
|
+ AcceptNum = items.Sum(p => p.AcceptNum),
|
|
|
+ ValidNum = items.Sum(p => p.ValidNum),
|
|
|
+ RepetitionNum = items.Sum(p => p.RepetitionNum),
|
|
|
+ InvalidNum = items.Sum(p => p.InvalidNum),
|
|
|
+ HandleNum = items.Sum(p => p.HandleNum),
|
|
|
+ NoHandleNum = items.Sum(p => p.NoHandleNum),
|
|
|
+ BackNum = items.Sum(p => p.BackNum),
|
|
|
+ DutyDeskNum = items.Sum(p => p.DutyDeskNum),
|
|
|
+ });
|
|
|
+ return items;
|
|
|
}
|
|
|
/// <summary>
|
|
|
/// 中心受理统计导出
|
|
@@ -3855,17 +4029,17 @@ namespace Hotline.Api.Controllers.Bi
|
|
|
}
|
|
|
datas.Add(new OrderCenterAcceptVo
|
|
|
{
|
|
|
- Time = "合计",
|
|
|
- AcceptNum = datas.Sum(p => p.AcceptNum),
|
|
|
- ValidNum = datas.Sum(p => p.ValidNum),
|
|
|
- RepetitionNum = datas.Sum(p => p.RepetitionNum),
|
|
|
- InvalidNum = datas.Sum(p => p.InvalidNum),
|
|
|
- HandleNum = datas.Sum(p => p.HandleNum),
|
|
|
- NoHandleNum = datas.Sum(p => p.NoHandleNum),
|
|
|
- BackNum = datas.Sum(p => p.BackNum),
|
|
|
- DutyDeskNum = datas.Sum(p => p.DutyDeskNum),
|
|
|
+ Time = "合计",
|
|
|
+ AcceptNum = datas.Sum(p => p.AcceptNum),
|
|
|
+ ValidNum = datas.Sum(p => p.ValidNum),
|
|
|
+ RepetitionNum = datas.Sum(p => p.RepetitionNum),
|
|
|
+ InvalidNum = datas.Sum(p => p.InvalidNum),
|
|
|
+ HandleNum = datas.Sum(p => p.HandleNum),
|
|
|
+ NoHandleNum = datas.Sum(p => p.NoHandleNum),
|
|
|
+ BackNum = datas.Sum(p => p.BackNum),
|
|
|
+ DutyDeskNum = datas.Sum(p => p.DutyDeskNum),
|
|
|
});
|
|
|
- dynamic? dynamicClass = DynamicClassHelper.CreateDynamicClass(dto.ColumnInfos);
|
|
|
+ dynamic? dynamicClass = DynamicClassHelper.CreateDynamicClass(dto.ColumnInfos);
|
|
|
var dtos = datas
|
|
|
.Select(stu => _mapper.Map(stu, typeof(OrderCenterAcceptVo), dynamicClass))
|
|
|
.Cast<object>()
|
|
@@ -3883,9 +4057,9 @@ namespace Hotline.Api.Controllers.Bi
|
|
|
[HttpGet("center-accept-user")]
|
|
|
public async Task<PagedDto<OrderCenterAcceptUserVo>> OrderCenterAcceptUser([FromQuery] OrderCenterAcceptPagedRequest dto)
|
|
|
{
|
|
|
- var (total, items) = await _orderApplication.OrderCenterAcceptUser(dto).ToPagedListAsync(dto.PageIndex, dto.PageSize, HttpContext.RequestAborted);
|
|
|
- return new PagedDto<OrderCenterAcceptUserVo>(total, items);
|
|
|
- }
|
|
|
+ var (total, items) = await _orderApplication.OrderCenterAcceptUser(dto).ToPagedListAsync(dto.PageIndex, dto.PageSize, HttpContext.RequestAborted);
|
|
|
+ return new PagedDto<OrderCenterAcceptUserVo>(total, items);
|
|
|
+ }
|
|
|
/// <summary>
|
|
|
/// 中心受理值班坐席统计导出
|
|
|
/// </summary>
|
|
@@ -4044,7 +4218,7 @@ namespace Hotline.Api.Controllers.Bi
|
|
|
/// <param name="dto"></param>
|
|
|
/// <returns></returns>
|
|
|
[HttpPost("ordervisit-jude-statistics-export")]
|
|
|
- public async Task<FileStreamResult> OrderVisitJudeStatisticsExport([FromBody]ExportExcelDto<OrderVisitJudeStatisticsReq> dto)
|
|
|
+ public async Task<FileStreamResult> OrderVisitJudeStatisticsExport([FromBody] ExportExcelDto<OrderVisitJudeStatisticsReq> dto)
|
|
|
{
|
|
|
var query = _orderApplication.OrderVisitJudeStatistics(dto.QueryDto);
|
|
|
List<OrderVisitJudeStatisticsRep> exportList;
|