|
@@ -23,7 +23,9 @@ using Hotline.Tools;
|
|
|
using MapsterMapper;
|
|
|
using Microsoft.AspNetCore.Mvc;
|
|
|
using MiniExcelLibs;
|
|
|
+using NPOI.OpenXmlFormats.Vml;
|
|
|
using SqlSugar;
|
|
|
+using System.Collections;
|
|
|
using System.Data;
|
|
|
using XF.Domain.Authentications;
|
|
|
using XF.Domain.Exceptions;
|
|
@@ -2988,106 +2990,129 @@ namespace Hotline.Api.Controllers.Bi
|
|
|
[HttpGet("hotspot-area-statistics")]
|
|
|
public async Task<object> HotspotAndAreaStatistics([FromQuery] HotspotAndAreaStatisticsReq dto)
|
|
|
{
|
|
|
- dto.EndTime = dto.EndTime.AddDays(1).AddSeconds(-1);
|
|
|
- var areaList = await _systemAreaRepository.Queryable().Where(x => SqlFunc.Length(x.Id) == 6 && x.Id!= "510000").OrderBy(x=>x.Id).ToListAsync();
|
|
|
- List<dynamic> returnList = new List<dynamic>();
|
|
|
- foreach (var item in areaList)
|
|
|
+ var (areaList ,returnList) = await _orderApplication.HotspotAndAreaStatistics(dto);
|
|
|
+
|
|
|
+ return new { AreaList = areaList, Data = returnList };
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 热点区域统计导出
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="dto"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ [HttpGet("hotspot-area-statistics-export")]
|
|
|
+ public async Task<FileStreamResult> HotspotAndAreaStatisticsExport([FromBody]HotspotAndAreaStatisticsReq dto)
|
|
|
+ {
|
|
|
+ var (areaList, returnList) = await _orderApplication.HotspotAndAreaStatistics(dto);
|
|
|
+ //var table = InitHotspotTable(returnList, dto.AddColumnName, dto.HotspotLevel);
|
|
|
+
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+ private DataTable InitHotspotTable(DataTable dt,List<string> AddColumnName,int HotspotLevel)
|
|
|
+ {
|
|
|
+ //修改列名
|
|
|
+ if (dt.Columns.Contains("HotspotName"))
|
|
|
+ dt.Columns["HotspotName"].ColumnName = "一级热点";
|
|
|
+
|
|
|
+ //增加小计
|
|
|
+ DataColumn totalColumn = new DataColumn("小计", typeof(decimal));
|
|
|
+ dt.Columns.Add(totalColumn);
|
|
|
+ if (dt.Columns.Contains("Column1"))
|
|
|
+ dt.Columns.Remove("Column1");
|
|
|
+
|
|
|
+ //计算小计
|
|
|
+ for (int i = 0; i < dt.Rows.Count; i++)
|
|
|
{
|
|
|
- List<dynamic> list = new List<dynamic>();
|
|
|
+ int sumcount = 0;
|
|
|
+ for (int j = 1; j < dt.Columns.Count - 1; j++)
|
|
|
+ {
|
|
|
+ sumcount += Convert.ToInt32(dt.Rows[i][j].ToString());
|
|
|
+ }
|
|
|
+ dt.Rows[i][dt.Columns.Count - 1] = sumcount;
|
|
|
+ }
|
|
|
|
|
|
- switch (dto.HotspotLevel)
|
|
|
+ //增加合计
|
|
|
+ DataRow totalRow = dt.NewRow();
|
|
|
+ if (dt.Columns[0].ColumnName == "日期") totalRow["日期"] = "合计";
|
|
|
+ else totalRow["时间段"] = "合计";
|
|
|
+ for (int i = 1; i < dt.Columns.Count; i++)
|
|
|
+ {
|
|
|
+ int sumcount = 0;
|
|
|
+ for (int j = 0; j < dt.Rows.Count; j++)
|
|
|
{
|
|
|
- case 1:
|
|
|
- list = await _orderRepository.Queryable()
|
|
|
- .LeftJoin<Hotspot>((it, o) => it.HotspotId.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>("2")) == o.Id)
|
|
|
- .Where((it, o) => it.CreationTime >= dto.StartTime && it.CreationTime < dto.EndTime && it.AreaCode.StartsWith(item.Id) && SqlFunc.Length(it.HotspotId)>=2)
|
|
|
- .GroupBy((it, o) => new
|
|
|
- {
|
|
|
- HotspotId = it.HotspotId.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>("2")),
|
|
|
- o.HotSpotFullName,
|
|
|
- o.OrderBy
|
|
|
- })
|
|
|
- .OrderBy((it,o)=> new {
|
|
|
- o.OrderBy
|
|
|
- } )
|
|
|
- .Select((it, o) => new
|
|
|
- {
|
|
|
- HotspotId = it.HotspotId.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>("2")),
|
|
|
- Key = item.Id,
|
|
|
- HotSpotNameOne = o.HotSpotFullName,
|
|
|
- Count = SqlFunc.AggregateCount(o.HotSpotFullName)
|
|
|
- }).ToPivotListAsync(x => x.Key, x => new { x.HotspotId, x.HotSpotNameOne }, x => x.Sum(x => x.Count));
|
|
|
- break;
|
|
|
- case 2:
|
|
|
- list = await _orderRepository.Queryable()
|
|
|
- .LeftJoin<Hotspot>((it, o) => it.HotspotId.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>("4")) == o.Id)
|
|
|
- .Where((it, o) => it.CreationTime >= dto.StartTime && it.CreationTime < dto.EndTime && it.AreaCode.StartsWith(item.Id) && SqlFunc.Length(it.HotspotId) >= 4)
|
|
|
- .GroupBy((it, o) => new
|
|
|
- {
|
|
|
- HotspotId = it.HotspotId.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>("4")),
|
|
|
- o.HotSpotFullName,
|
|
|
- o.OrderBy
|
|
|
- })
|
|
|
- .OrderBy((it, o) => new {
|
|
|
- o.OrderBy
|
|
|
- })
|
|
|
- .Select((it, o) => new
|
|
|
- {
|
|
|
- HotspotId = it.HotspotId.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>("4")),
|
|
|
- Key = item.Id,
|
|
|
- HotSpotName = o.HotSpotFullName,
|
|
|
- Count = SqlFunc.AggregateCount(o.HotSpotFullName)
|
|
|
- }).ToPivotListAsync(x => x.Key, x => new { x.HotspotId, x.HotSpotName }, x => x.Sum(x => x.Count));
|
|
|
- break;
|
|
|
- case 3:
|
|
|
- list = await _orderRepository.Queryable()
|
|
|
- .LeftJoin<Hotspot>((it, o) => it.HotspotId.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>("6")) == o.Id)
|
|
|
- .Where((it, o) => it.CreationTime >= dto.StartTime && it.CreationTime < dto.EndTime && it.AreaCode.StartsWith(item.Id) && SqlFunc.Length(it.HotspotId) >= 6)
|
|
|
- .GroupBy((it, o) => new
|
|
|
- {
|
|
|
- HotspotId = it.HotspotId.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>("6")),
|
|
|
- o.HotSpotFullName,
|
|
|
- o.OrderBy
|
|
|
- })
|
|
|
- .OrderBy((it, o) => new {
|
|
|
- o.OrderBy
|
|
|
- })
|
|
|
- .Select((it, o) => new
|
|
|
- {
|
|
|
- HotspotId = it.HotspotId.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>("6")),
|
|
|
- Key = item.Id,
|
|
|
- HotSpotName = o.HotSpotFullName,
|
|
|
- Count = SqlFunc.AggregateCount(o.HotSpotFullName)
|
|
|
- }).ToPivotListAsync(x => x.Key, x => new { x.HotspotId, x.HotSpotName }, x => x.Sum(x => x.Count));
|
|
|
- break;
|
|
|
- case 4:
|
|
|
- list = await _orderRepository.Queryable()
|
|
|
- .LeftJoin<Hotspot>((it, o) => it.HotspotId.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>("8")) == o.Id && SqlFunc.Length(it.HotspotId) >= 8)
|
|
|
- .Where((it, o) => it.CreationTime >= dto.StartTime && it.CreationTime < dto.EndTime && it.AreaCode.StartsWith(item.Id))
|
|
|
- .GroupBy((it, o) => new
|
|
|
- {
|
|
|
- HotspotId = it.HotspotId.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>("8")),
|
|
|
- o.HotSpotFullName,
|
|
|
- o.OrderBy
|
|
|
- })
|
|
|
- .OrderBy((it, o) => new {
|
|
|
- o.OrderBy
|
|
|
- })
|
|
|
- .Select((it, o) => new
|
|
|
- {
|
|
|
- HotspotId = it.HotspotId.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>("8")),
|
|
|
- Key = item.Id,
|
|
|
- HotSpotName = o.HotSpotFullName,
|
|
|
- Count = SqlFunc.AggregateCount(o.HotSpotFullName)
|
|
|
- }).ToPivotListAsync(x => x.Key, x => new { x.HotspotId, x.HotSpotName }, x => x.Sum(x => x.Count));
|
|
|
- break;
|
|
|
- default:
|
|
|
- break;
|
|
|
+ sumcount += Convert.ToInt32(dt.Rows[j][i].ToString());
|
|
|
}
|
|
|
- returnList.AddRange(list);
|
|
|
+ totalRow[i] = sumcount;
|
|
|
}
|
|
|
+ dt.Rows.Add(totalRow);
|
|
|
|
|
|
- return new { AreaList = areaList, Data = returnList };
|
|
|
+ //创建新表
|
|
|
+ DataTable dt2 = new DataTable();
|
|
|
+
|
|
|
+ //添加表头
|
|
|
+ foreach (var item in AddColumnName)
|
|
|
+ {
|
|
|
+ if (item.Equals("一级热点"))
|
|
|
+ {
|
|
|
+ dt2.Columns.Add(item);
|
|
|
+ if (HotspotLevel==2)
|
|
|
+ {
|
|
|
+ dt.Columns.Add("二级热点");
|
|
|
+ }
|
|
|
+ else if(HotspotLevel==3)
|
|
|
+ {
|
|
|
+ dt.Columns.Add("二级热点");
|
|
|
+ dt.Columns.Add("三级热点");
|
|
|
+ }
|
|
|
+ else if(HotspotLevel==4)
|
|
|
+ {
|
|
|
+ dt.Columns.Add("二级热点");
|
|
|
+ dt.Columns.Add("三级热点");
|
|
|
+ dt.Columns.Add("四级热点");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ if (dt.Columns.Contains(item))
|
|
|
+ dt2.Columns.Add(item);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //处理数据
|
|
|
+ foreach (DataRow sourceRow in dt.Rows)
|
|
|
+ {
|
|
|
+ DataRow targetRow = dt2.NewRow();
|
|
|
+ foreach (var item in AddColumnName)
|
|
|
+ {
|
|
|
+ if (item.Equals("一级热点"))
|
|
|
+ {
|
|
|
+ targetRow["一级热点"] = sourceRow["一级热点"].ToString()?.Split('-')[0];
|
|
|
+ if (HotspotLevel==2)
|
|
|
+ {
|
|
|
+ targetRow["二级热点"] = sourceRow["一级热点"].ToString()?.Split('-')[1];
|
|
|
+ }
|
|
|
+ else if(HotspotLevel==3)
|
|
|
+ {
|
|
|
+ targetRow["二级热点"] = sourceRow["一级热点"].ToString()?.Split('-')[1];
|
|
|
+ targetRow["三级热点"] = sourceRow["一级热点"].ToString()?.Split('-')[2];
|
|
|
+ }
|
|
|
+ else if(HotspotLevel==4)
|
|
|
+ {
|
|
|
+ targetRow["二级热点"] = sourceRow["一级热点"].ToString()?.Split('-')[1];
|
|
|
+ targetRow["三级热点"] = sourceRow["一级热点"].ToString()?.Split('-')[2];
|
|
|
+ targetRow["四级热点"] = sourceRow["一级热点"].ToString()?.Split('-')[3];
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ targetRow[item] = sourceRow[item];
|
|
|
+ }
|
|
|
+ }
|
|
|
+ dt2.Rows.Add(targetRow);
|
|
|
+ }
|
|
|
+
|
|
|
+ return dt2;
|
|
|
}
|
|
|
}
|
|
|
|