|
@@ -8,6 +8,7 @@ using Hotline.Share.Dtos.CallCenter;
|
|
|
using Hotline.Share.Enums.CallCenter;
|
|
|
using Hotline.Share.Requests;
|
|
|
using SqlSugar;
|
|
|
+using System.Data;
|
|
|
using System.Reflection;
|
|
|
using XF.Domain.Dependency;
|
|
|
|
|
@@ -183,28 +184,126 @@ namespace Hotline.Repository.SqlSugar.Orders
|
|
|
var listOrg = Db.Queryable<SystemArea>()
|
|
|
.LeftJoin(listOrder, (s, p) => s.Id == p.AreaCode)
|
|
|
.Where((s, p) => s.Id.Length == 6 && s.Id != "510000")
|
|
|
- .GroupBy((s, p) => s.Id)
|
|
|
+ .GroupBy((s, p) => s.Id).GroupBy((s, p) => s.AreaName)
|
|
|
.GroupBy((s, p) => p.Hour)
|
|
|
.Select((s, p) => new
|
|
|
{
|
|
|
count = SqlFunc.AggregateSum(SqlFunc.IIF(p.AreaCode != null && p.AreaCode != "", 1, 0)),
|
|
|
AreaCode = s.Id,
|
|
|
- Hour = SqlFunc.IIF(p.Hour == null || p.Hour == "", "0", p.Hour)
|
|
|
+ Hour = SqlFunc.IIF(p.Hour == null || p.Hour == "", "0", p.Hour),
|
|
|
+ AreaName = s.AreaName
|
|
|
})
|
|
|
.MergeTable();
|
|
|
|
|
|
- return await listHour.LeftJoin(listOrg, (x, p) => x.ColumnName.ToString() == p.Hour)
|
|
|
+ var list = await listHour.LeftJoin(listOrg, (x, p) => x.ColumnName.ToString() == p.Hour)
|
|
|
.OrderBy(x => x.ColumnName)
|
|
|
.Select((x, p) => new
|
|
|
{
|
|
|
- Hour = x.ColumnName.ToString()+":00 - "+ x.ColumnName.ToString()+":59",
|
|
|
+ Hour = x.ColumnName.ToString() + ":00 - " + x.ColumnName.ToString() + ":59",
|
|
|
p.AreaCode,
|
|
|
p.count
|
|
|
})
|
|
|
.ToPivotListAsync(p => p.AreaCode, p => p.Hour, p => p.Sum(x => x.count));
|
|
|
+ return list;
|
|
|
|
|
|
}
|
|
|
|
|
|
+ /// <summary>
|
|
|
+ /// 区域分时统计
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="StartTime"></param>
|
|
|
+ /// <param name="EndTime"></param>
|
|
|
+ /// <param name="RemoveColumnName"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ public async Task<DataTable> OrderAreaTimeExport(DateTime? StartTime, DateTime? EndTime, List<string> AddColumnName)
|
|
|
+ {
|
|
|
+ List<int> dts = new();
|
|
|
+ for (int i = 0; i < 24; i++)
|
|
|
+ {
|
|
|
+ dts.Add(i);
|
|
|
+ }
|
|
|
+
|
|
|
+ var listHour = Db.Reportable(dts).ToQueryable<int>();
|
|
|
+ var listOrder = Db.Queryable<Order>()
|
|
|
+ .Where(p => p.CreationTime >= StartTime && p.CreationTime <= EndTime)
|
|
|
+ .Select(p => new
|
|
|
+ {
|
|
|
+ AreaCode = p.AreaCode.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>("6")),
|
|
|
+ Hour = p.CreationTime.Hour.ToString()
|
|
|
+ })
|
|
|
+ .MergeTable();
|
|
|
+
|
|
|
+ var listOrg = Db.Queryable<SystemArea>()
|
|
|
+ .LeftJoin(listOrder, (s, p) => s.Id == p.AreaCode)
|
|
|
+ .Where((s, p) => s.Id.Length == 6 && s.Id != "510000")
|
|
|
+ .GroupBy((s, p) => s.Id).GroupBy((s, p) => s.AreaName)
|
|
|
+ .GroupBy((s, p) => p.Hour)
|
|
|
+ .Select((s, p) => new
|
|
|
+ {
|
|
|
+ count = SqlFunc.AggregateSum(SqlFunc.IIF(p.AreaCode != null && p.AreaCode != "", 1, 0)),
|
|
|
+ AreaCode = s.Id,
|
|
|
+ Hour = SqlFunc.IIF(p.Hour == null || p.Hour == "", "0", p.Hour),
|
|
|
+ AreaName = s.AreaName
|
|
|
+ })
|
|
|
+ .MergeTable();
|
|
|
+
|
|
|
+ var dt = await listHour.LeftJoin(listOrg, (x, p) => x.ColumnName.ToString() == p.Hour)
|
|
|
+ .OrderBy(x => x.ColumnName)
|
|
|
+ .Select((x, p) => new
|
|
|
+ {
|
|
|
+ Hour = x.ColumnName.ToString() + ":00 - " + x.ColumnName.ToString() + ":59",
|
|
|
+ p.AreaName,
|
|
|
+ p.count
|
|
|
+ })
|
|
|
+ .ToPivotTableAsync(p => p.AreaName, p => p.Hour, p => p.Sum(x => x.count));
|
|
|
+
|
|
|
+ //修改列名
|
|
|
+ dt.Columns["Hour"].ColumnName = "时间段";
|
|
|
+ dt.Columns.Remove("Column1");
|
|
|
+
|
|
|
+ //增加小计
|
|
|
+ DataColumn totalColumn = new DataColumn("小计", typeof(decimal));
|
|
|
+ dt.Columns.Add(totalColumn);
|
|
|
+ for (int i = 0; i < dt.Rows.Count; i++)
|
|
|
+ {
|
|
|
+ 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;
|
|
|
+ }
|
|
|
+
|
|
|
+ //增加合计
|
|
|
+ DataRow totalRow = dt.NewRow();
|
|
|
+ totalRow["时间段"] = "合计";
|
|
|
+ for (int i = 1; i < dt.Columns.Count; i++)
|
|
|
+ {
|
|
|
+ int sumcount = 0;
|
|
|
+ for (int j = 0; j < dt.Rows.Count; j++)
|
|
|
+ {
|
|
|
+ sumcount += Convert.ToInt32(dt.Rows[j][i].ToString());
|
|
|
+ }
|
|
|
+ totalRow[i] = sumcount;
|
|
|
+ }
|
|
|
+ dt.Rows.Add(totalRow);
|
|
|
+
|
|
|
+ //移除列
|
|
|
+ if (AddColumnName.Any())
|
|
|
+ {
|
|
|
+ for (int i = 0; i < dt.Columns.Count; i++)
|
|
|
+ {
|
|
|
+ var name = dt.Columns[i].ColumnName;
|
|
|
+ if (!AddColumnName.Contains(name))
|
|
|
+ {
|
|
|
+ dt.Columns.Remove(name);
|
|
|
+ i = 0;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return dt;
|
|
|
+ }
|
|
|
+
|
|
|
public ISugarQueryable<SelectOrderId> OrderListUnionAll(ISugarQueryable<SelectOrderId> t1, ISugarQueryable<SelectOrderId> t2)
|
|
|
{
|
|
|
return Db.UnionAll(t1, t2).Select(it => new SelectOrderId { Id = it.Id }).MergeTable();
|