|
@@ -538,6 +538,119 @@ namespace Hotline.Api.Controllers.Bi
|
|
|
return new PagedDto<HotspotDataLsitVo>(total, items);
|
|
|
}
|
|
|
|
|
|
+ /// <summary>
|
|
|
+ /// 热点数据统计导出
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="dto"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ [HttpPost("hotspot_data_list/export")]
|
|
|
+ public async Task<FileStreamResult> HotspotDataLsitExprot([FromBody] ExportExcelDto<HotspotReportPagedRequest> dto)
|
|
|
+ {
|
|
|
+ if (!dto.QueryDto.StartTime.HasValue || !dto.QueryDto.EndTime.HasValue) throw UserFriendlyException.SameMessage("请选择时间!");
|
|
|
+ if (dto.QueryDto.Type == 0 && (!dto.QueryDto.ChainStartTime.HasValue || !dto.QueryDto.ChainEndTime.HasValue)) throw UserFriendlyException.SameMessage("请选择环比时间!");
|
|
|
+
|
|
|
+ dto.QueryDto.EndTime = dto.QueryDto.EndTime.Value.AddDays(1).AddSeconds(-1);
|
|
|
+
|
|
|
+ var IsCenter = _sessionContext.OrgIsCenter;
|
|
|
+
|
|
|
+ if (dto.QueryDto.Type == 0)
|
|
|
+ {
|
|
|
+ dto.QueryDto.ChainEndTime = dto.QueryDto.ChainEndTime.Value.AddDays(1).AddSeconds(-1);
|
|
|
+ }
|
|
|
+
|
|
|
+ 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.QueryDto.StartTime.HasValue, (x, o) => o.CreationTime >= dto.QueryDto.StartTime)
|
|
|
+ .WhereIF(dto.QueryDto.EndTime.HasValue, (x, o) => o.CreationTime <= dto.QueryDto.EndTime)
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.QueryDto.Keyword), (x, o) => x.HotSpotName.Contains(dto.QueryDto.Keyword!))
|
|
|
+ .WhereIF(IsCenter == false, (x, o) => o.ActualHandleOrgCode == _sessionContext.RequiredOrgId)
|
|
|
+ .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();
|
|
|
+ var chainStartTime = dto.QueryDto.StartTime;
|
|
|
+ var chainEndTime = dto.QueryDto.EndTime;
|
|
|
+ switch (dto.QueryDto.Type)
|
|
|
+ {
|
|
|
+ case 1://日
|
|
|
+ chainStartTime = dto.QueryDto.StartTime.Value.AddDays(-1);
|
|
|
+ chainEndTime = dto.QueryDto.EndTime.Value.AddDays(-1);
|
|
|
+ break;
|
|
|
+ case 2://月
|
|
|
+ chainStartTime = dto.QueryDto.StartTime.Value.AddMonths(-1);
|
|
|
+ chainEndTime = dto.QueryDto.EndTime.Value.AddMonths(-1);
|
|
|
+ break;
|
|
|
+ case 3://年
|
|
|
+ chainStartTime = dto.QueryDto.StartTime.Value.AddYears(-1);
|
|
|
+ chainEndTime = dto.QueryDto.EndTime.Value.AddYears(-1);
|
|
|
+ break;
|
|
|
+ case 0:
|
|
|
+ chainStartTime = dto.QueryDto.ChainStartTime.Value;
|
|
|
+ chainEndTime = dto.QueryDto.ChainEndTime.Value;
|
|
|
+ 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.QueryDto.StartTime.HasValue, (x, o) => o.CreationTime >= chainStartTime)
|
|
|
+ .WhereIF(dto.QueryDto.EndTime.HasValue, (x, o) => o.CreationTime <= chainEndTime)
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.QueryDto.Keyword), (x, o) => x.HotSpotName.Contains(dto.QueryDto.Keyword!))
|
|
|
+ .WhereIF(IsCenter == false, (x, o) => o.ActualHandleOrgCode == _sessionContext.RequiredOrgId)
|
|
|
+ .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 HotspotDataLsitVo
|
|
|
+ {
|
|
|
+ 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();
|
|
|
+ var total = new HotspotDataLsitVo()
|
|
|
+ {
|
|
|
+ Id = "0",
|
|
|
+ Name = "合计",
|
|
|
+ Num = res.Sum(x => x.Num),
|
|
|
+ Sublevel = false,
|
|
|
+ Children = new List<HotspotDataLsitVo>(),
|
|
|
+ ChainNum = res.Sum(x => x.ChainNum),
|
|
|
+ ChainRate = res.Sum(x => x.ChainNum) > 0 ? ((double.Parse(res.Sum(x => x.Num).ToString()) - double.Parse(res.Sum(x => x.ChainNum).ToString())) / double.Parse(res.Sum(x => x.ChainNum).ToString()) * 100).ToString("F2") + "%" : "100.00%"
|
|
|
+ };
|
|
|
+ res.Add(total);
|
|
|
+
|
|
|
+ List<HotspotDataLsitVo> data;
|
|
|
+ data = res;
|
|
|
+
|
|
|
+ var dataDtos = _mapper.Map<ICollection<HotspotDataLsitVo>>(data);
|
|
|
+
|
|
|
+ dynamic? dynamicClass = DynamicClassHelper.CreateDynamicClass(dto.ColumnInfos);
|
|
|
+
|
|
|
+ var dtos = dataDtos
|
|
|
+ .Select(stu => _mapper.Map(stu, typeof(HotspotDataLsitVo), dynamicClass))
|
|
|
+ .Cast<object>()
|
|
|
+ .ToList();
|
|
|
+
|
|
|
+ var stream = ExcelHelper.CreateStream(dtos);
|
|
|
+
|
|
|
+ return ExcelStreamResult(stream, "部门不满意统计明细");
|
|
|
+ //return new { List = res, Total = total };
|
|
|
+ }
|
|
|
+
|
|
|
/// <summary>
|
|
|
/// 热点数据统计 TODO和前端沟通
|
|
|
/// </summary>
|
|
@@ -612,7 +725,7 @@ namespace Hotline.Api.Controllers.Bi
|
|
|
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
|
|
|
+ select new HotspotDataLsitVo()
|
|
|
{
|
|
|
Id = t1.Id,
|
|
|
Name = t1.Name,
|
|
@@ -623,7 +736,7 @@ namespace Hotline.Api.Controllers.Bi
|
|
|
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();
|
|
|
- var total = new
|
|
|
+ var total = new HotspotDataLsitVo()
|
|
|
{
|
|
|
Id = "0",
|
|
|
Name = "合计",
|