|
@@ -14,6 +14,7 @@ using Hotline.FlowEngine.Workflows;
|
|
|
using Hotline.Share.Dtos.CallCenter;
|
|
|
using MapsterMapper;
|
|
|
using XF.Domain.Exceptions;
|
|
|
+using Microsoft.AspNetCore.Authorization;
|
|
|
|
|
|
namespace Hotline.Api.Controllers.Bi
|
|
|
{
|
|
@@ -160,12 +161,12 @@ namespace Hotline.Api.Controllers.Bi
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
- /// 热点数据统计
|
|
|
+ /// 热点数据小计统计
|
|
|
/// </summary>
|
|
|
/// <param name="dto"></param>
|
|
|
/// <returns></returns>
|
|
|
- [HttpGet("hotspot_data_list")]
|
|
|
- public async Task<PagedDto<HotspotDataLsitVo>> HotspotDataLsit([FromQuery] HotspotReportPagedRequest dto)
|
|
|
+ [HttpGet("hotspot_subtotal_data_list")]
|
|
|
+ public async Task<PagedDto<HotspotDataLsitVo>> HotspotSubtotalDataLsit([FromQuery] HotspotSubtotalReportPagedRequest dto)
|
|
|
{
|
|
|
if (!dto.StartTime.HasValue || !dto.EndTime.HasValue) throw UserFriendlyException.SameMessage("请选择时间!");
|
|
|
var query = _hotspotTypeRepository.Queryable(false, true)
|
|
@@ -186,13 +187,88 @@ namespace Hotline.Api.Controllers.Bi
|
|
|
return new PagedDto<HotspotDataLsitVo>(total, items);
|
|
|
}
|
|
|
|
|
|
-
|
|
|
/// <summary>
|
|
|
- /// 部门不满意统计
|
|
|
+ /// 热点数据统计
|
|
|
/// </summary>
|
|
|
/// <param name="dto"></param>
|
|
|
/// <returns></returns>
|
|
|
- [HttpGet("visit-nosatisfied")]
|
|
|
+ [HttpGet("hotspot_data_list")]
|
|
|
+ public async Task<object> HotspotDataLsit([FromQuery] HotspotReportPagedRequest dto)
|
|
|
+ {
|
|
|
+ if (!dto.StartTime.HasValue || !dto.EndTime.HasValue) throw UserFriendlyException.SameMessage("请选择时间!");
|
|
|
+ var items = await _hotspotTypeRepository.Queryable(false, true)
|
|
|
+ .LeftJoin<Order>((x, o) => o.HotspotSpliceName != null && (x.HotSpotName == o.HotspotSpliceName || o.HotspotSpliceName.Contains(x.HotSpotName)) && o.IsDeleted == false)
|
|
|
+ .WhereIF(dto.StartTime.HasValue, (x, o) => o.CreationTime >= dto.StartTime)
|
|
|
+ .WhereIF(dto.EndTime.HasValue, (x, o) => o.CreationTime <= dto.EndTime)
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.Keyword), (x, o) => x.HotSpotName.Contains(dto.Keyword!))
|
|
|
+ .Where((x, o) => x.ParentId == dto.Id)
|
|
|
+ .Where((x, o) => x.IsDeleted == false)
|
|
|
+ .GroupBy((x, o) => new { x.Id, x.HotSpotName })
|
|
|
+ .Select((x, o) => new HotspotDataLsitVo
|
|
|
+ {
|
|
|
+ Id = x.Id,
|
|
|
+ Name = x.HotSpotName,
|
|
|
+ Num = SqlFunc.AggregateSum(SqlFunc.IIF(o.Id != null, 1, 0)),
|
|
|
+ Sublevel = SqlFunc.AggregateSum(SqlFunc.IIF(x.HotSpotName != o.HotspotName, 1, 0)) > 0,
|
|
|
+ }).MergeTable().ToListAsync();
|
|
|
+ if (dto.Type > 0)
|
|
|
+ {
|
|
|
+ var chainStartTime = dto.StartTime;
|
|
|
+ var chainEndTime = dto.EndTime;
|
|
|
+ switch (dto.Type)
|
|
|
+ {
|
|
|
+ case 1://日
|
|
|
+ chainStartTime = dto.StartTime.Value.AddDays(-1);
|
|
|
+ chainEndTime = dto.EndTime.Value.AddDays(-1);
|
|
|
+ break;
|
|
|
+ case 2://月
|
|
|
+ chainStartTime = dto.StartTime.Value.AddMonths(-1);
|
|
|
+ chainEndTime = dto.EndTime.Value.AddMonths(-1);
|
|
|
+ break;
|
|
|
+ case 3://年
|
|
|
+ chainStartTime = dto.StartTime.Value.AddYears(-1);
|
|
|
+ chainEndTime = dto.EndTime.Value.AddYears(-1);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ var chainItems = await _hotspotTypeRepository.Queryable(false, true)
|
|
|
+ .LeftJoin<Order>((x, o) => o.HotspotSpliceName != null && (x.HotSpotName == o.HotspotSpliceName || o.HotspotSpliceName.Contains(x.HotSpotName)) && o.IsDeleted == false)
|
|
|
+ .WhereIF(dto.StartTime.HasValue, (x, o) => o.CreationTime >= chainStartTime)
|
|
|
+ .WhereIF(dto.EndTime.HasValue, (x, o) => o.CreationTime <= chainEndTime)
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.Keyword), (x, o) => x.HotSpotName.Contains(dto.Keyword!))
|
|
|
+ .Where((x, o) => x.ParentId == dto.Id)
|
|
|
+ .Where((x, o) => x.IsDeleted == false)
|
|
|
+ .GroupBy((x, o) => new { x.Id, x.HotSpotName })
|
|
|
+ .Select((x, o) => new
|
|
|
+ {
|
|
|
+ Id = x.Id,
|
|
|
+ ChainNum = SqlFunc.AggregateSum(SqlFunc.IIF(o.Id != null, 1, 0)),
|
|
|
+ }).MergeTable().ToListAsync();
|
|
|
+ var res = (from t1 in items
|
|
|
+ join t2 in chainItems on t1.Id equals t2.Id into t1_t2
|
|
|
+ from item in t1_t2.DefaultIfEmpty()
|
|
|
+ select new
|
|
|
+ {
|
|
|
+ Id = t1.Id,
|
|
|
+ Name = t1.Name,
|
|
|
+ Num = t1.Num,
|
|
|
+ Sublevel = t1.Sublevel,
|
|
|
+ Children = new List<HotspotDataLsitVo>(),
|
|
|
+ ChainNum = t1_t2.Select(x => x.ChainNum).FirstOrDefault(),
|
|
|
+ ChainRate = t1_t2.Select(x => x.ChainNum).FirstOrDefault() > 0 ?
|
|
|
+ ((double.Parse(t1.Num.ToString()) - double.Parse(t1_t2.Select(x => x.ChainNum).FirstOrDefault().ToString())) / double.Parse(t1_t2.Select(x => x.ChainNum).FirstOrDefault().ToString()) * 100).ToString("F2")+"%" : "100.00%",
|
|
|
+ }).ToList();
|
|
|
+ return res;
|
|
|
+ }
|
|
|
+ return items;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 部门不满意统计
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="dto"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ [HttpGet("visit-nosatisfied")]
|
|
|
public async Task<object> QueryVisitNoSatisfied([FromQuery] QueryVisitNoSatiisfiedRequest dto)
|
|
|
{
|
|
|
if (!dto.StartTime.HasValue || !dto.EndTime.HasValue) throw UserFriendlyException.SameMessage("请选择时间!");
|
|
@@ -413,5 +489,18 @@ namespace Hotline.Api.Controllers.Bi
|
|
|
var (total, items) = await query.ToPagedListAsync(dto, HttpContext.RequestAborted);
|
|
|
return new PagedDto<AcceptTypeTop10Vo>(total, items);
|
|
|
}
|
|
|
- }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 热点类型部门统计
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="dto"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ [HttpGet("hotport-org-statistics")]
|
|
|
+ public async Task<object> HotPortJoinOrgStatistics([FromQuery]HotPortJoinOrgStatisticsRequest dto)
|
|
|
+ {
|
|
|
+ return await _orderRepository.HotPortJoinOrgStatistics(dto.StartTime, dto.EndTime);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
}
|