Procházet zdrojové kódy

Merge branch 'dev' of http://110.188.24.182:10023/Fengwo/hotline into dev

xf před 9 měsíci
rodič
revize
ba52cf26b9

+ 119 - 94
src/Hotline.Api/Controllers/Bi/BiOrderController.cs

@@ -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;
         }
     }
 

+ 7 - 2
src/Hotline.Api/Controllers/OrderController.cs

@@ -406,7 +406,10 @@ public class OrderController : BaseController
         orderVisit.VisitState = EVisitState.WaitForVisit;
         orderVisit.PublishTime = DateTime.Now;
         orderVisit.IsCanHandle = true;
-        orderVisit.EmployeeId = _sessionContext.RequiredUserId;
+        if (!order.IsProvince)
+        {
+            orderVisit.EmployeeId = _sessionContext.RequiredUserId;
+        }
 
         if (order is { ProcessType: EProcessType.Zhiban, CounterSignType: null })
         {
@@ -680,7 +683,9 @@ public class OrderController : BaseController
             .WhereIF(dto.IsCountersign != null && dto.IsCountersign == true, d => d.Order.CounterSignType != null)
             .WhereIF(dto.IsCountersign != null && dto.IsCountersign == false, d => d.Order.CounterSignType == null)
             .WhereIF(dto.QuerySelf.HasValue && dto.QuerySelf.Value, d => d.EmployeeId == _sessionContext.RequiredUserId)
-            .WhereIF(!string.IsNullOrEmpty(dto.EmployeeName), d=> !string.IsNullOrEmpty(d.EmployeeId)  && d.Employee.Name == dto.EmployeeName)
+            .WhereIF(!string.IsNullOrEmpty(dto.EmployeeName), d => !string.IsNullOrEmpty(d.EmployeeId) && d.Employee.Name == dto.EmployeeName)
+            .WhereIF(dto.IsProvince != null && dto.IsProvince == true, d => d.Order.IsProvince == true)
+            .WhereIF(dto.IsProvince != null && dto.IsProvince == false, d => d.Order.IsProvince == false)
             .OrderByDescending(x => x.PublishTime)
             .ToPagedListAsync(dto.PageIndex, dto.PageSize, HttpContext.RequestAborted);
         return new PagedDto<OrderVisitDto>(total, _mapper.Map<IReadOnlyList<OrderVisitDto>>(items));

+ 1 - 1
src/Hotline.Api/Controllers/TestController.cs

@@ -496,7 +496,7 @@ IRepository<EnforcementOrdersHandler> enforcementOrdersHandlerRepository
         //var r = _timeLimitDomainService.CalcWorkTime(DateTime.Parse("2024-3-24 17:20:00"), DateTime.Parse("2024-3-24 17:21:00"), false);
         //await _aiVisitService.QueryAiVisitTask(batchId, taskId, HttpContext.RequestAborted);
         //var r = _timeLimitDomainService.CalcWorkTimeReduce(DateTime.Now, 5);
-        //var r = _timeLimitDomainService.CalcWorkTimeToDecimal(DateTime.Parse("2024-05-14 14:41:42"), DateTime.Parse("2024-05-14 14:50:46"), false);
+        var r = _timeLimitDomainService.CalcWorkTimeToDecimal(DateTime.Parse("2024-07-09 14:57:51"), DateTime.Parse("2024-07-10 14:20:42"), false);
         return OpenResponse.Ok(DateTime.Now.ToString("F"));
     }
 

+ 1 - 1
src/Hotline.Application/CallCenter/Calls/TelsStatusRefreshService.cs

@@ -46,7 +46,7 @@ namespace Hotline.Application.CallCenter.Calls
                         {
                             if (telmodel.State == "logout")
                             {
-                                var telRest = await _telRestRepository.GetAsync(x => x.TelNo == item.TelNo && x.EndTime != null, stoppingToken);
+                                var telRest = await _telRestRepository.GetAsync(x => x.TelNo == item.TelNo && !x.EndTime.HasValue, stoppingToken);
                                 if (telRest is not null)
                                 {
                                     telRest.EndRest();

+ 10 - 1
src/Hotline.Application/Orders/IOrderApplication.cs

@@ -7,6 +7,7 @@ using System.Text;
 using System.Threading.Tasks;
 using Hotline.FlowEngine.Workflows;
 using Hotline.Orders;
+using Hotline.Settings;
 using Hotline.Share.Dtos;
 using Hotline.Share.Dtos.Bi;
 using Hotline.Share.Dtos.DataSharing.PusherHotlineDto;
@@ -145,5 +146,13 @@ namespace Hotline.Application.Orders
 		/// <param name="dto"></param>
 		/// <returns></returns>
 		ISugarQueryable<OrderVisitDetail> VisitAndOrgSatisfactionDetail(VisitAndOrgSatisfactionDetailDto dto);
-	}
+
+        /// <summary>
+        /// 热点-区域统计
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        Task<(List<SystemArea> area, object items)> HotspotAndAreaStatistics(HotspotAndAreaStatisticsReq dto);
+
+    }
 }

+ 84 - 2
src/Hotline.Application/Orders/OrderApplication.cs

@@ -39,6 +39,7 @@ using System.Net;
 using PanGu;
 using Hotline.Users;
 using PanGu.Match;
+using Hotline.Settings.Hotspots;
 
 namespace Hotline.Application.Orders;
 
@@ -61,8 +62,11 @@ public class OrderApplication : IOrderApplication, IScopeDependency
     private readonly IRepository<SystemOrganize> _systemOrganizeRepository;
     private readonly IRepository<WorkflowCountersign> _workflowCountersignRepository;
     private readonly IRepository<OrderSpecialDetail> _orderSpecialDetailRepository;
+    private readonly IRepository<SystemArea> _systemAreaRepository;
+    private readonly IRepository<Hotspot> _hotspotRepository;
 
-	public OrderApplication(
+
+    public OrderApplication(
         IOrderDomainService orderDomainService,
         IOrderRepository orderRepository,
         IWorkflowDomainService workflowDomainService,
@@ -79,7 +83,9 @@ public class OrderApplication : IOrderApplication, IScopeDependency
         ICapPublisher capPublisher,
         IRepository<SystemOrganize> systemOrganizeRepository,
         IRepository<WorkflowCountersign> workflowCountersignRepository,
-        IRepository<OrderSpecialDetail> orderSpecialDetailRepository
+        IRepository<OrderSpecialDetail> orderSpecialDetailRepository,
+        IRepository<SystemArea> systemAreaRepository,
+        IRepository<Hotspot> hotspotRepository
 		)
     {
         _orderDomainService = orderDomainService;
@@ -99,6 +105,8 @@ public class OrderApplication : IOrderApplication, IScopeDependency
 		_systemOrganizeRepository = systemOrganizeRepository;
 		_workflowCountersignRepository = workflowCountersignRepository;
         _orderSpecialDetailRepository = orderSpecialDetailRepository;
+        _systemAreaRepository = systemAreaRepository;
+        _hotspotRepository = hotspotRepository;
 	}
 
     /// <summary>
@@ -911,6 +919,80 @@ public class OrderApplication : IOrderApplication, IScopeDependency
             .WhereIF(dto.TypeId is 2, x => SqlFunc.JsonField(x.OrgHandledAttitude, "Key") == dto.DateValue)
             .WhereIF(!string.IsNullOrEmpty(dto.LineNum), x => x.OrderVisit.Order.CallRecord.Gateway == dto.LineNum);
 	}
+
+    public async Task<(List<SystemArea> area,object items)> HotspotAndAreaStatistics(HotspotAndAreaStatisticsReq dto)
+    {
+        dto.EndTime = dto.EndTime.AddDays(1).AddSeconds(-1);
+        var areaList = _systemAreaRepository.Queryable().Where(x => SqlFunc.Length(x.Id) == 6 && x.Id != "510000").OrderBy(x => x.Id).MergeTable();
+
+        var endIndex = (2 * dto.HotspotLevel).ToString();
+        var hotspotList = _hotspotRepository.Queryable().Where(x => SqlFunc.Length(x.Id) == int.Parse(endIndex))
+            .Select(x => new { 
+                HotspotId = x.Id,
+                HotspotName = x.HotSpotFullName,
+            }).MergeTable();
+
+
+        var orderList = _orderRepository.Queryable().Where(x => x.CreationTime >= dto.StartTime && x.CreationTime < dto.EndTime)
+            .Select(x => new
+            {
+                HotspotId= x.HotspotId.Substring(0,int.Parse(endIndex)),
+                AreaCode = x.AreaCode,
+            }).MergeTable();
+
+
+       var hotListAndOrder = hotspotList.LeftJoin(orderList, (it, o) => it.HotspotId == o.HotspotId)
+            .GroupBy((it, o) => new
+            {
+                it.HotspotId,
+                it.HotspotName,
+                AreaCode = o.AreaCode.Substring(0,6),
+            })
+            .OrderBy((it, o) => it.HotspotId)
+            .Select((it, o) => new
+            {
+                HotspotId=it.HotspotId,
+                HotspotName=it.HotspotName,
+                AreaCode=o.AreaCode,
+                Count = SqlFunc.AggregateCount(it.HotspotId)
+            }).MergeTable();
+
+
+        hotListAndOrder.LeftJoin(areaList, (it, o) => it.AreaCode == o.Id)
+            .GroupBy((it, o) => new
+            {
+
+            });
+
+        //List<dynamic> returnList =  new List<dynamic>();
+        //var endIndex = (2 * dto.HotspotLevel).ToString();
+        //foreach (var item in areaList)
+        //{
+        //    List<dynamic> list= new List<dynamic>();
+        //    list = await _hotspotRepository.Queryable()
+        //        .LeftJoin<Order>((it, o) => it.Id == o.HotspotId.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>(endIndex)))
+        //        .Where((it, o) => o.CreationTime >= dto.StartTime && o.CreationTime < dto.EndTime && o.AreaCode.StartsWith(item.Id) && SqlFunc.Length(it.Id) >= int.Parse(endIndex))
+        //        .GroupBy((it, o) => new
+        //        {
+        //            HotspotId = o.HotspotId.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>(endIndex)),
+        //            it.HotSpotFullName,
+        //            it.OrderBy
+        //        })
+        //        .OrderBy((it, o) => new
+        //        {
+        //            it.OrderBy
+        //        }).Select((it, o) => new
+        //        {Z
+        //            HotspotId = o.HotspotId.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>(endIndex)),
+        //            Key = item.Id,
+        //            HotSpotNameOne = it.HotSpotFullName,
+        //            Count = SqlFunc.AggregateCount(it.HotSpotFullName)
+        //        }).ToPivotListAsync(x => x.Key, x => new { x.HotspotId, x.HotSpotNameOne }, x => x.Sum(x => x.Count));
+        //    returnList.AddRange(list);
+        //}
+        //return (areaList, returnList );
+        return (null,null);
+    }
 	#region private
 
 	/// <summary>

+ 8 - 6
src/Hotline.Repository.SqlSugar/Orders/OrderRepository.cs

@@ -524,12 +524,15 @@ namespace Hotline.Repository.SqlSugar.Orders
             var listOrg = Db.Queryable<SystemDicData>()
               .LeftJoin(listOrder, (s, p) => s.DicDataValue == p.SourceChannelCode)
               .Where((s, p) => s.DicTypeCode == "SourceChannel")
-              .GroupBy((s, p) => s.DicDataValue).GroupBy((s, p) => s.DicDataName)
-              .GroupBy((s, p) => p.Hour)
+              .GroupBy((s, p) => new {
+                  DicDataValue = s.DicDataValue,
+                  DicDataName = s.DicDataName,
+                  Hour = p.Hour,
+              })
               .OrderBy((s, p) => s.DicDataValue)
               .Select((s, p) => new
               {
-                  count = SqlFunc.AggregateSum(SqlFunc.IIF(p.SourceChannelCode != null && p.SourceChannelCode != "", 1, 0)),
+                  Count = SqlFunc.AggregateSum(SqlFunc.IIF(p.SourceChannelCode != null && p.SourceChannelCode != "", 1, 0)),
                   DicDataValue = s.DicDataValue,
                   Hour = SqlFunc.IIF(p.Hour == null || p.Hour == "", "0", p.Hour),
                   DicDataName = s.DicDataName
@@ -542,9 +545,9 @@ namespace Hotline.Repository.SqlSugar.Orders
                {
                    Hour = x.ColumnName.ToString() + ":00 - " + x.ColumnName.ToString() + ":59",
                    p.DicDataValue,
-                   p.count
+                   p.Count
                })
-                .ToPivotListAsync(p => p.DicDataValue, p => p.Hour, p => p.Sum(x => x.count));
+                .ToPivotListAsync(p => p.DicDataValue, p => p.Hour, p => p.Sum(x => x.Count));
             return list;
 
         }
@@ -767,7 +770,6 @@ namespace Hotline.Repository.SqlSugar.Orders
         }
 
 
-
         public ISugarQueryable<SelectOrderId> OrderListUnionAll(ISugarQueryable<SelectOrderId> t1, ISugarQueryable<SelectOrderId> t2)
         {
             return Db.UnionAll(t1, t2).Select(it => new SelectOrderId { Id = it.Id }).MergeTable();

+ 5 - 0
src/Hotline.Share/Dtos/Order/OrderVisitDto.cs

@@ -48,6 +48,11 @@ namespace Hotline.Share.Dtos.Order
         /// 回访人
         /// </summary>
         public string? EmployeeName { get; set; }
+
+        /// <summary>
+        /// 是否省工单
+        /// </summary>
+        public bool? IsProvince { get; set; }
 	}
 
     public record VisitJudgeQueryReq:PagedKeywordRequest

+ 5 - 0
src/Hotline.Share/Requests/PagedKeywordRequest.cs

@@ -392,4 +392,9 @@ public record HotspotAndAreaStatisticsReq
 
     public DateTime EndTime { get; set; }
 
+    /// <summary>
+    /// 导出列名
+    /// </summary>
+    public List<string> AddColumnName { get; set; } = new();
+
 }