Explorar el Código

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

xf hace 9 meses
padre
commit
d477005343

+ 97 - 8
src/Hotline.Api/Controllers/Bi/BiOrderController.cs

@@ -161,13 +161,60 @@ namespace Hotline.Api.Controllers.Bi
             return ExcelStreamResult(stream, "部门超期统计明细数据");
         }
 
-
         /// <summary>
-        /// 部门超期统计
+        /// 全量部门超期统计明细
         /// </summary>
         /// <param name="dto"></param>
         /// <returns></returns>
-        [HttpGet("org_data_list")]
+        [HttpGet("org_data_list_detail_all")]
+        public async Task<PagedDto<OrderDto>> OrgDataListDetail([FromQuery] OrgDataListAllDetailRequest dto)
+        {
+	        var quer = _orderApplication.QueryOrgDataListDetail(dto);
+	        var (total, items) = await quer.ToPagedListAsync(dto.PageIndex, dto.PageSize);
+
+	        return new PagedDto<OrderDto>(total, _mapper.Map<IReadOnlyList<OrderDto>>(items));
+        }
+
+        /// <summary>
+        /// 部门超期统计明细导出
+        /// </summary>
+        /// <returns></returns>
+        [HttpPost("org_data_list_detail_all/_export")]
+        public async Task<FileStreamResult> OrgDataListDetailExport([FromBody] ExportExcelDto<OrgDataListAllDetailRequest> dto)
+        {
+	        var query = _orderApplication.QueryOrgDataListDetail(dto.QueryDto);
+	        List<Order> data;
+	        if (dto.IsExportAll)
+	        {
+		        data = await query.ToListAsync(HttpContext.RequestAborted);
+	        }
+	        else
+	        {
+		        var (_, items) = await query.ToPagedListAsync(dto.QueryDto, HttpContext.RequestAborted);
+		        data = items;
+	        }
+
+	        var dataDtos = _mapper.Map<ICollection<OrderDto>>(data);
+
+	        dynamic? dynamicClass = DynamicClassHelper.CreateDynamicClass(dto.ColumnInfos);
+
+	        var dtos = dataDtos
+		        .Select(stu => _mapper.Map(stu, typeof(OrderDto), dynamicClass))
+		        .Cast<object>()
+		        .ToList();
+
+	        var stream = ExcelHelper.CreateStream(dtos);
+
+	        return ExcelStreamResult(stream, "部门超期统计明细数据");
+        }
+
+
+		/// <summary>
+		/// 部门超期统计
+		/// </summary>
+		/// <param name="dto"></param>
+		/// <returns></returns>
+		[HttpGet("org_data_list")]
         public async Task<PagedDto<OrderBiOrgDataListVo>> OrgDataList([FromQuery] ReportPagedRequest dto)
         {
             var query = _orderApplication.QueryOrgDataList(dto);
@@ -1732,8 +1779,9 @@ namespace Hotline.Api.Controllers.Bi
         {
             RefAsync<int> total = 0;
 
-            var queryData = await _orderReportApplication.GetDepartmentalProcessingStatisticsList(dto, HttpContext.RequestAborted)
+            var queryData = await _orderReportApplication.GetDepartmentalProcessingStatisticsListNew(dto, HttpContext.RequestAborted)
                         .LeftJoin<Order>((x, o) => x.Id == o.Id)
+                        .OrderByDescending((x, o) =>o.CreationTime)
                          .Select((x, o) => new { o })
                         .ToPageListAsync(dto.PageIndex, dto.PageSize, total, HttpContext.RequestAborted);
 
@@ -1746,7 +1794,7 @@ namespace Hotline.Api.Controllers.Bi
         }
 
         /// <summary>
-        /// 部门办件统计表--明细
+        /// 部门办件统计表--明细--导出
         /// </summary>
         /// <param name="dto"></param>
         /// <returns></returns>
@@ -1754,8 +1802,9 @@ namespace Hotline.Api.Controllers.Bi
         [HttpPost("departmental_processing_statistics_list_export")]
         public async Task<FileStreamResult> ExportGetDepartmentalProcessingStatisticsList([FromBody] ExportExcelDto<DepartmentalProcessingStatisticsRequest> dto)
         {
-            var query = _orderReportApplication.GetDepartmentalProcessingStatisticsList(dto.QueryDto, HttpContext.RequestAborted)
+            var query = _orderReportApplication.GetDepartmentalProcessingStatisticsListNew(dto.QueryDto, HttpContext.RequestAborted)
                  .LeftJoin<Order>((x, o) => x.Id == o.Id)
+                 .OrderByDescending((x, o) => o.CreationTime)
                  .Select((x, o) => new { o });
             List<OrderDto> list = new List<OrderDto>();
             if (dto.IsExportAll)
@@ -1778,8 +1827,6 @@ namespace Hotline.Api.Controllers.Bi
                 }).ToList();
             }
 
-            //   var orderDtos = _mapper.Map<ICollection<OrderDto>>(list);
-
             dynamic? dynamicClass = DynamicClassHelper.CreateDynamicClass(dto.ColumnInfos);
 
             var dtos = list
@@ -2849,6 +2896,48 @@ namespace Hotline.Api.Controllers.Bi
             var stream = ExcelHelper.CreateStream(dtos);
             return ExcelStreamResult(stream, "部门满意度明细");
         }
+
+        /// <summary>
+        /// 热点区域统计
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        [HttpGet("hotspot-area-statistics")]
+        public async Task<object> HotspotAndAreaStatistics([FromQuery]HotspotAndAreaStatisticsReq dto)
+        {
+            dto.EndTime = dto.EndTime.AddDays(1).AddSeconds(-1);
+            var areaList = await _systemOrganizeRepository.Queryable().Where(x => SqlFunc.Length(x.Id) == 6).ToListAsync();
+            List<dynamic> list = new List<dynamic>();
+            foreach (var item in areaList)
+            {
+                var table =await _orderRepository.Queryable()
+                   .Where(x => x.CreationTime >= dto.StartTime && x.CreationTime < dto.EndTime && x.AreaCode.StartsWith(item.Id))
+                   .GroupByIF(dto.HotspotLevel == 1, x => new {
+                       HotspotId = x.HotspotId.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>("2"))
+                   })
+                   .GroupByIF(dto.HotspotLevel == 2, x => new {
+                       HotspotId = x.HotspotId.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>("4"))
+                   })
+                   .GroupByIF(dto.HotspotLevel == 3, x => new {
+                       HotspotId = x.HotspotId.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>("6"))
+                   })
+                   .GroupByIF(dto.HotspotLevel == 4, x => new {
+                       HotspotId = x.HotspotId.Substring(SqlFunc.MappingColumn<int>("0"),SqlFunc.MappingColumn<int>("8"))
+                   })
+                   .Select(x => new {
+                       HotspotId = SqlFunc.IIF(dto.HotspotLevel == 1, x.HotspotId.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>("2")),
+                                   SqlFunc.IIF(dto.HotspotLevel == 2, x.HotspotId.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>("4")),
+                                   SqlFunc.IIF(dto.HotspotLevel == 3, x.HotspotId.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>("6")),
+                                   SqlFunc.IIF(dto.HotspotLevel == 4, x.HotspotId.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>("8")), "")))),
+                       Key = item.Id,
+                       AreaName = item.AreaName,
+                       Count = 1//SqlFunc.AggregateSum(SqlFunc.IIF(x.Hotspot.))
+                   }).ToPivotListAsync(x=>x.Key,x=> new { x.HotspotId,x.AreaName},x=>x.Sum(x=> x.Count));
+                list.AddRange(table);
+            }
+
+            return new { AreaList = areaList,Data = list};
+        }
     }
 
 }

+ 7 - 0
src/Hotline.Application/Orders/IOrderApplication.cs

@@ -105,6 +105,13 @@ namespace Hotline.Application.Orders
         /// <returns></returns>
 		ISugarQueryable<Order> QueryOrgDataListDetail(OrgDataListDetailRequest dto);
 
+		/// <summary>
+		/// 部门全量超期统计明细
+		/// </summary>
+		/// <param name="dto"></param>
+		/// <returns></returns>
+		ISugarQueryable<Order> QueryOrgDataListDetail(OrgDataListAllDetailRequest dto);
+
 		/// <summary>
 		/// 回退错件统计
 		/// </summary>

+ 37 - 6
src/Hotline.Application/Orders/OrderApplication.cs

@@ -633,6 +633,7 @@ public class OrderApplication : IOrderApplication, IScopeDependency
 		var quer = _orderRepository.Queryable()
 			.InnerJoin<SystemOrganize>((x, so) => x.ActualHandleOrgCode == so.Id)
 			.Where(x => x.CreationTime >= dto.StartTime && x.CreationTime <= dto.EndTime)
+			//.WhereIF(dto.Statuses.Any(), x => dto.Statuses.Contains(x.Status))  //工单状态
 			.WhereIF(dto.QueryType == 1, x => x.Status >= EOrderStatus.Filed && x.ExpiredTime < x.FiledTime) //业务已办超期
 			.WhereIF(dto.QueryType == 3, x => x.Status < EOrderStatus.Filed && x.ExpiredTime < SqlFunc.GetDate()) //业务待办超期
 			.WhereIF(dto.QueryType == 5, x =>
@@ -659,12 +660,42 @@ public class OrderApplication : IOrderApplication, IScopeDependency
         return quer;
 	}
 
-    /// <summary>
-    /// 回退错件统计
-    /// </summary>
-    /// <param name="dto"></param>
-    /// <returns></returns>
-    public ISugarQueryable<OrderReTransactVo> OrderReTransact(QueryOrderReTransactRequest dto)
+	/// <summary>
+	/// 部门超期统计明细
+	/// </summary>
+	/// <param name="dto"></param>
+	/// <returns></returns>
+	public ISugarQueryable<Order> QueryOrgDataListDetail(OrgDataListAllDetailRequest dto)
+	{
+		dto.EndTime = dto.EndTime.AddDays(1).AddSeconds(-1);
+		bool IsCenter = _sessionContext.OrgIsCenter;
+
+		var quer = _orderRepository.Queryable()
+			.InnerJoin<SystemOrganize>((x, so) => x.ActualHandleOrgCode == so.Id)
+			.Where(x => x.CreationTime >= dto.StartTime && x.CreationTime <= dto.EndTime)
+            .WhereIF(dto.Statuses.Any(), x => dto.Statuses.Contains(x.Status))  //工单状态
+            .Where(x =>
+				(x.Status >= EOrderStatus.Filed && x.ExpiredTime < x.FiledTime) || (x.Status < EOrderStatus.Filed && x.ExpiredTime < SqlFunc.GetDate()))
+			.WhereIF(!string.IsNullOrEmpty(dto.OrgCode) && IsCenter == false, x => x.ActualHandleOrgCode.StartsWith(dto.OrgCode))
+			.MergeTable();
+
+        var queryCountersign = _workflowCountersignRepository.Queryable()
+            .LeftJoin<WorkflowCountersignMember>((x, o) => x.Id == o.WorkflowCountersignId)
+            .Where((x, o) => x.CreationTime >= dto.StartTime && x.CreationTime <= dto.EndTime && x.IsExpired.HasValue && x.IsExpired.Value == true)
+            .WhereIF(!string.IsNullOrEmpty(dto.OrgCode) && IsCenter == false, (x, o) => o.Key.StartsWith(dto.OrgCode))
+            .Select((x, o) => new { Id = x.WorkflowId })
+            .MergeTable();
+
+         quer = quer.InnerJoin(queryCountersign, (x, c) => x.WorkflowId == c.Id);
+        return quer;
+	}
+
+	/// <summary>
+	/// 回退错件统计
+	/// </summary>
+	/// <param name="dto"></param>
+	/// <returns></returns>
+	public ISugarQueryable<OrderReTransactVo> OrderReTransact(QueryOrderReTransactRequest dto)
     {
 
 		return _orderSpecialDetailRepository.Queryable()

+ 9 - 2
src/Hotline.Application/StatisticalReport/IOrderReportApplication.cs

@@ -22,11 +22,18 @@ namespace Hotline.Application.StatisticalReport
         Task<List<DepartmentalProcessingStatisticsDataDto>> DepartmentalProcessingChildStatisticsNew(DepartmentalProcessingStatisticsRequest dto);
 
         /// <summary>
-        /// 部门办件统计表
+        /// 部门办件统计表--明细---新
         /// </summary>
         /// <param name="dto"></param>
         /// <returns></returns>
-        ISugarQueryable<DepartmentalProcessingStatisticsDataDto> DepartmentalProcessingStatistics(DepartmentalProcessingStatisticsRequest dto);
+        ISugarQueryable<SelectOrderId> GetDepartmentalProcessingStatisticsListNew(DepartmentalProcessingStatisticsRequest dto, CancellationToken cancellationToken);
+
+            /// <summary>
+            /// 部门办件统计表
+            /// </summary>
+            /// <param name="dto"></param>
+            /// <returns></returns>
+            ISugarQueryable<DepartmentalProcessingStatisticsDataDto> DepartmentalProcessingStatistics(DepartmentalProcessingStatisticsRequest dto);
 
         /// <summary>
         /// 部门办件统计表--子级

+ 243 - 11
src/Hotline.Application/StatisticalReport/OrderReportApplication.cs

@@ -192,7 +192,7 @@ FROM (
 		select  ""HandlerOrgId"",0 ""YbOrderCountNum"",0 ""ZbOrderCountNum"",0 ""YbOverdue"" ,0 ""ZbOverdue"",SUM(( CASE  WHEN ( ""HandlerOrgId"" IS NOT NULL ) THEN 1  ELSE 0 END )) AS ""HqybOverdue"",0 ""HqzbOverdue"",0 ""DelayEnd"",0 ""DelayWait"",0""Archived"",0 ""ToBeArchived"",0 ""WaitPublished"",0 ""PublishedOpen"",0 ""PublishedNoOpen"",0 ""OrderDelayCount"",0 ""ScreenCount"",0 ""ScreenApproval"", 0 ""ScreenPass"" , 0 ""ScreenNotPass"" ,0 ""SatisfactionCount"", 0 ""NotSatisfactionCount"" from(
 		 select ""o"".""Id"",SUBSTRING(""t"".""HandlerOrgId"",1,{3}) ""HandlerOrgId"" from ""workflow_trace"" ""t""
 			left join ""order"" ""o"" on ""o"".""Id""=""t"".""ExternalId""
-			where ""o"".""CreationTime"">='{0}' and ""o"".""CreationTime""<='{1}'  and ""t"".""ModuleCode""='OrderHandle' and ""t"".""Status"">=2 and ""HandleTime"">""StepExpiredTime"" and ""CountersignPosition"">0 and ""t"".""CountersignPosition"">=1   {2}
+			where ""o"".""CreationTime"">='{0}' and ""o"".""CreationTime""<='{1}'  and ""t"".""ModuleCode""='OrderHandle' and ""t"".""Status"">=2 and ""HandleTime"">""StepExpiredTime"" and ""CountersignPosition"">0  {2}
 			GROUP BY ""HandlerOrgId"",""o"".""Id""
 		)""s"" where ""HandlerOrgId"" IS not NULL {4}
 		GROUP BY ""HandlerOrgId""
@@ -202,7 +202,7 @@ FROM (
 		 select ""o"".""Id"",SUBSTRING(""t"".""HandlerOrgId"",1,{3}) ""HandlerOrgId"" from ""workflow_trace"" ""t""
 			left join ""order"" ""o"" on ""o"".""Id""=""t"".""ExternalId""
 			where ""o"".""CreationTime"">='{0}' and ""o"".""CreationTime""<='{1}'  and ""t"".""ModuleCode""='OrderHandle' and ""t"".""Status""<2 and (SELECT NOW())>""StepExpiredTime"" 
-			and   ""CountersignPosition"">0 and ""t"".""CountersignPosition"">=1   {2}
+			and   ""CountersignPosition"">0  {2}
 			GROUP BY ""HandlerOrgId"",""o"".""Id""
 		)""s"" where ""HandlerOrgId"" IS not NULL {4}
 		GROUP BY ""HandlerOrgId""
@@ -211,7 +211,7 @@ FROM (
 		select  ""HandlerOrgId"",0 ""YbOrderCountNum"",0 ""ZbOrderCountNum"",0 ""YbOverdue"" ,0 ""ZbOverdue"",0 ""HqybOverdue"",0 ""HqzbOverdue"",SUM(( CASE  WHEN ( ""HandlerOrgId"" IS NOT NULL ) THEN 1  ELSE 0 END )) AS ""DelayEnd"",0 ""DelayWait"" ,0""Archived"",0 ""ToBeArchived"",0 ""WaitPublished"",0 ""PublishedOpen"",0 ""PublishedNoOpen"",0 ""OrderDelayCount"",0 ""ScreenCount"",0 ""ScreenApproval"", 0 ""ScreenPass"" , 0 ""ScreenNotPass"" ,0 ""SatisfactionCount"", 0 ""NotSatisfactionCount"" from(
 		 select ""o"".""Id"",SUBSTRING(""t"".""HandlerOrgId"",1,{3}) ""HandlerOrgId"" from ""workflow_trace"" ""t""
 			left join ""order"" ""o"" on ""o"".""Id""=""t"".""ExternalId""
-			where ""o"".""CreationTime"">='{0}' and ""o"".""CreationTime""<='{1}'  and ""t"".""ModuleCode""='OrderHandle' and ""t"".""Status"">=2 and ""HandleTime"">""StepExpiredTime"" and ""CountersignPosition"">0 and ""t"".""CountersignPosition"">=1   {2}
+			where ""o"".""CreationTime"">='{0}' and ""o"".""CreationTime""<='{1}'  and ""t"".""ModuleCode""='OrderHandle' and ""t"".""Status"">=2 and ""CountersignPosition"">0 {2}
 			GROUP BY ""HandlerOrgId"",""o"".""Id""
 		)""s"" where ""HandlerOrgId"" IS not NULL {4}
 		GROUP BY ""HandlerOrgId""
@@ -220,8 +220,7 @@ FROM (
 		select  ""HandlerOrgId"",0 ""YbOrderCountNum"",0 ""ZbOrderCountNum"",0 ""YbOverdue"" ,0 ""ZbOverdue"",0 ""HqybOverdue"",0 ""HqzbOverdue"",0 ""DelayEnd"",SUM(( CASE  WHEN ( ""HandlerOrgId"" IS NOT NULL ) THEN 1  ELSE 0 END )) AS  ""DelayWait"" ,0""Archived"",0 ""ToBeArchived"",0 ""WaitPublished"",0 ""PublishedOpen"",0 ""PublishedNoOpen"",0 ""OrderDelayCount"",0 ""ScreenCount"",0 ""ScreenApproval"", 0 ""ScreenPass"" , 0 ""ScreenNotPass"",0 ""SatisfactionCount"", 0 ""NotSatisfactionCount"" from(
 		 select ""o"".""Id"",SUBSTRING(""t"".""HandlerOrgId"",1,{3}) ""HandlerOrgId"" from ""workflow_trace"" ""t""
 			left join ""order"" ""o"" on ""o"".""Id""=""t"".""ExternalId""
-			where ""o"".""CreationTime"">='{0}' and ""o"".""CreationTime""<='{1}'  and ""t"".""ModuleCode""='OrderHandle' and ""t"".""Status""<2 and (SELECT NOW())>""StepExpiredTime"" 
-			and   ""CountersignPosition"">0 and ""t"".""CountersignPosition"">=1   {2}
+			where ""o"".""CreationTime"">='{0}' and ""o"".""CreationTime""<='{1}'  and ""t"".""ModuleCode""='OrderHandle' and ""t"".""Status""<2 and ""CountersignPosition"">0 {2}
 			GROUP BY ""HandlerOrgId"",""o"".""Id""
 		)""s"" where ""HandlerOrgId"" IS not NULL  {4}
 		GROUP BY ""HandlerOrgId""
@@ -295,7 +294,6 @@ order by ""su"".""OrgCode""";
         public async Task<List<DepartmentalProcessingStatisticsDataDto>> DepartmentalProcessingChildStatisticsNew(DepartmentalProcessingStatisticsRequest dto)
         {
             dto.EndTime = dto.EndTime.AddDays(1).AddSeconds(-1);
-            var IsCenter = _sessionContext.OrgIsCenter;
 
             //信件总量:信件总量=已办件数+在办件数,工单需去重
             //已办件数:该部门已办理完成的工单总数(含参与会签的工单),若工单被部门多次办理,只统计一次
@@ -392,7 +390,7 @@ FROM (
 		select  ""HandlerOrgId"",0 ""YbOrderCountNum"",0 ""ZbOrderCountNum"",0 ""YbOverdue"" ,0 ""ZbOverdue"",SUM(( CASE  WHEN ( ""HandlerOrgId"" IS NOT NULL ) THEN 1  ELSE 0 END )) AS ""HqybOverdue"",0 ""HqzbOverdue"",0 ""DelayEnd"",0 ""DelayWait"",0""Archived"",0 ""ToBeArchived"",0 ""WaitPublished"",0 ""PublishedOpen"",0 ""PublishedNoOpen"",0 ""OrderDelayCount"",0 ""ScreenCount"",0 ""ScreenApproval"", 0 ""ScreenPass"" , 0 ""ScreenNotPass"" ,0 ""SatisfactionCount"", 0 ""NotSatisfactionCount"" from(
 		 select ""o"".""Id"",SUBSTRING(""t"".""HandlerOrgId"",1,{3}) ""HandlerOrgId"" from ""workflow_trace"" ""t""
 			left join ""order"" ""o"" on ""o"".""Id""=""t"".""ExternalId""
-			where ""o"".""CreationTime"">='{0}' and ""o"".""CreationTime""<='{1}'  and ""t"".""ModuleCode""='OrderHandle' and ""t"".""Status"">=2 and ""HandleTime"">""StepExpiredTime"" and ""CountersignPosition"">0 and ""t"".""CountersignPosition"">=1   {2}
+			where ""o"".""CreationTime"">='{0}' and ""o"".""CreationTime""<='{1}'  and ""t"".""ModuleCode""='OrderHandle' and ""t"".""Status"">=2 and ""HandleTime"">""StepExpiredTime"" and ""CountersignPosition"">0  {2}
 			GROUP BY ""HandlerOrgId"",""o"".""Id""
 		)""s"" where ""HandlerOrgId"" IS not NULL {4}
 		GROUP BY ""HandlerOrgId""
@@ -402,7 +400,7 @@ FROM (
 		 select ""o"".""Id"",SUBSTRING(""t"".""HandlerOrgId"",1,{3}) ""HandlerOrgId"" from ""workflow_trace"" ""t""
 			left join ""order"" ""o"" on ""o"".""Id""=""t"".""ExternalId""
 			where ""o"".""CreationTime"">='{0}' and ""o"".""CreationTime""<='{1}'  and ""t"".""ModuleCode""='OrderHandle' and ""t"".""Status""<2 and (SELECT NOW())>""StepExpiredTime"" 
-			and   ""CountersignPosition"">0 and ""t"".""CountersignPosition"">=1   {2}
+			and   ""CountersignPosition"">0  {2}
 			GROUP BY ""HandlerOrgId"",""o"".""Id""
 		)""s"" where ""HandlerOrgId"" IS not NULL {4}
 		GROUP BY ""HandlerOrgId""
@@ -411,7 +409,7 @@ FROM (
 		select  ""HandlerOrgId"",0 ""YbOrderCountNum"",0 ""ZbOrderCountNum"",0 ""YbOverdue"" ,0 ""ZbOverdue"",0 ""HqybOverdue"",0 ""HqzbOverdue"",SUM(( CASE  WHEN ( ""HandlerOrgId"" IS NOT NULL ) THEN 1  ELSE 0 END )) AS ""DelayEnd"",0 ""DelayWait"" ,0""Archived"",0 ""ToBeArchived"",0 ""WaitPublished"",0 ""PublishedOpen"",0 ""PublishedNoOpen"",0 ""OrderDelayCount"",0 ""ScreenCount"",0 ""ScreenApproval"", 0 ""ScreenPass"" , 0 ""ScreenNotPass"" ,0 ""SatisfactionCount"", 0 ""NotSatisfactionCount"" from(
 		 select ""o"".""Id"",SUBSTRING(""t"".""HandlerOrgId"",1,{3}) ""HandlerOrgId"" from ""workflow_trace"" ""t""
 			left join ""order"" ""o"" on ""o"".""Id""=""t"".""ExternalId""
-			where ""o"".""CreationTime"">='{0}' and ""o"".""CreationTime""<='{1}'  and ""t"".""ModuleCode""='OrderHandle' and ""t"".""Status"">=2 and ""HandleTime"">""StepExpiredTime"" and ""CountersignPosition"">0 and ""t"".""CountersignPosition"">=1   {2}
+			where ""o"".""CreationTime"">='{0}' and ""o"".""CreationTime""<='{1}'  and ""t"".""ModuleCode""='OrderHandle' and ""t"".""Status"">=2 and ""CountersignPosition"">0 {2}
 			GROUP BY ""HandlerOrgId"",""o"".""Id""
 		)""s"" where ""HandlerOrgId"" IS not NULL {4}
 		GROUP BY ""HandlerOrgId""
@@ -420,8 +418,7 @@ FROM (
 		select  ""HandlerOrgId"",0 ""YbOrderCountNum"",0 ""ZbOrderCountNum"",0 ""YbOverdue"" ,0 ""ZbOverdue"",0 ""HqybOverdue"",0 ""HqzbOverdue"",0 ""DelayEnd"",SUM(( CASE  WHEN ( ""HandlerOrgId"" IS NOT NULL ) THEN 1  ELSE 0 END )) AS  ""DelayWait"" ,0""Archived"",0 ""ToBeArchived"",0 ""WaitPublished"",0 ""PublishedOpen"",0 ""PublishedNoOpen"",0 ""OrderDelayCount"",0 ""ScreenCount"",0 ""ScreenApproval"", 0 ""ScreenPass"" , 0 ""ScreenNotPass"",0 ""SatisfactionCount"", 0 ""NotSatisfactionCount"" from(
 		 select ""o"".""Id"",SUBSTRING(""t"".""HandlerOrgId"",1,{3}) ""HandlerOrgId"" from ""workflow_trace"" ""t""
 			left join ""order"" ""o"" on ""o"".""Id""=""t"".""ExternalId""
-			where ""o"".""CreationTime"">='{0}' and ""o"".""CreationTime""<='{1}'  and ""t"".""ModuleCode""='OrderHandle' and ""t"".""Status""<2 and (SELECT NOW())>""StepExpiredTime"" 
-			and   ""CountersignPosition"">0 and ""t"".""CountersignPosition"">=1   {2}
+			where ""o"".""CreationTime"">='{0}' and ""o"".""CreationTime""<='{1}'  and ""t"".""ModuleCode""='OrderHandle' and ""t"".""Status""<2 and ""CountersignPosition"">0 {2}
 			GROUP BY ""HandlerOrgId"",""o"".""Id""
 		)""s"" where ""HandlerOrgId"" IS not NULL  {4}
 		GROUP BY ""HandlerOrgId""
@@ -490,6 +487,241 @@ order by ""su"".""OrgCode""";
             return _orderRepository.DepartmentalProcessingStatisticsNew(strSql);
         }
 
+        /// <summary>
+        /// 部门办件统计表--明细---新
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        public ISugarQueryable<SelectOrderId> GetDepartmentalProcessingStatisticsListNew(DepartmentalProcessingStatisticsRequest dto, CancellationToken cancellationToken)
+        {
+            dto.EndTime = dto.EndTime.AddDays(1).AddSeconds(-1);
+
+            RefAsync<int> total = 0;
+            ISugarQueryable<SelectOrderId> query =null;
+            switch (dto.StatisticsType)
+            {
+                case EStatisticsType.YBOrderCountNum://工单已办
+                    query = _workflowTraceRepository.Queryable()
+                        .LeftJoin<Order>((t, o) => t.ExternalId == o.Id)
+                         .Where((t, o) => t.ModuleCode == WorkflowModuleConsts.OrderHandle && o.CreationTime >= dto.StartTime && o.CreationTime <= dto.EndTime
+                         && t.Status >= EWorkflowStepStatus.Handled)
+                         .WhereIF(dto.IsProvince.HasValue && dto.IsProvince == true, (t, o) => o.Source == ESource.ProvinceStraight)
+                         .WhereIF(dto.OrgCode == "001", (t, o) => t.HandlerOrgId == dto.OrgCode)
+                         .WhereIF(dto.OrgCode != "001", (t, o) => t.HandlerOrgId.StartsWith(dto.OrgCode))
+                         .GroupBy((t, o) => o.Id)
+                         .Select((t, o) => new SelectOrderId { Id = o.Id })
+                         .MergeTable();
+                    break;
+                case EStatisticsType.ZBOrderCountNum://工单在办
+                    query = _workflowTraceRepository.Queryable()
+                      .LeftJoin<Order>((t, o) => t.ExternalId == o.Id)
+                       .Where((t, o) => t.ModuleCode == WorkflowModuleConsts.OrderHandle && o.CreationTime >= dto.StartTime && o.CreationTime <= dto.EndTime
+                       && t.Status < EWorkflowStepStatus.Handled)
+                       .WhereIF(dto.IsProvince.HasValue && dto.IsProvince == true, (t, o) => o.Source == ESource.ProvinceStraight)
+                       .WhereIF(dto.OrgCode == "001", (t, o) => t.HandlerOrgId == dto.OrgCode)
+                       .WhereIF(dto.OrgCode != "001", (t, o) => t.HandlerOrgId.StartsWith(dto.OrgCode))
+                       .GroupBy((t, o) => o.Id)
+                       .Select((t, o) => new SelectOrderId { Id = o.Id })
+                       .MergeTable();
+                    break;
+                case EStatisticsType.OrderDelayCount://延期次数
+                    query = _orderDelayRepository.Queryable()
+                        .Includes(x => x.Order)
+                        .Where(x => x.Order.CreationTime >= dto.StartTime && x.Order.CreationTime <= dto.EndTime && x.DelayState == EDelayState.Pass)
+                        .WhereIF(dto.IsProvince.HasValue && dto.IsProvince == true, x => x.Order.Source == ESource.ProvinceStraight)
+                        .WhereIF(dto.OrgCode == "001", x => x.ApplyOrgCode == dto.OrgCode)
+                        .WhereIF(dto.OrgCode != "001", x => x.ApplyOrgCode.StartsWith(dto.OrgCode))
+                        .OrderByDescending(x => x.Order.CreationTime)
+                        .Select(x => new SelectOrderId { Id = x.Order.Id })
+                       .MergeTable();
+                    break;
+                case EStatisticsType.YBOverdue://已办超期
+                    query = _workflowTraceRepository.Queryable()
+                        .LeftJoin<Order>((t, o) => t.ExternalId == o.Id)
+                         .Where((t, o) => t.ModuleCode == WorkflowModuleConsts.OrderHandle && o.CreationTime >= dto.StartTime && o.CreationTime <= dto.EndTime
+                         && t.Status >= EWorkflowStepStatus.Handled && t.HandleTime > t.StepExpiredTime && t.CountersignPosition == ECountersignPosition.None)
+                         .WhereIF(dto.IsProvince.HasValue && dto.IsProvince == true, (t, o) => o.Source == ESource.ProvinceStraight)
+                         .WhereIF(dto.OrgCode == "001", (t, o) => t.HandlerOrgId == dto.OrgCode)
+                         .WhereIF(dto.OrgCode != "001", (t, o) => t.HandlerOrgId.StartsWith(dto.OrgCode))
+                         .GroupBy((t, o) => o.Id)
+                         .Select((t, o) => new SelectOrderId { Id = o.Id })
+                         .MergeTable();
+                    break;
+                case EStatisticsType.ZBOverdue://待办超期
+                    query = _workflowTraceRepository.Queryable()
+                        .LeftJoin<Order>((t, o) => t.ExternalId == o.Id)
+                         .Where((t, o) => t.ModuleCode == WorkflowModuleConsts.OrderHandle && o.CreationTime >= dto.StartTime && o.CreationTime <= dto.EndTime
+                         && t.Status < EWorkflowStepStatus.Handled && DateTime.Now > t.StepExpiredTime && t.CountersignPosition == ECountersignPosition.None)
+                         .WhereIF(dto.IsProvince.HasValue && dto.IsProvince == true, (t, o) => o.Source == ESource.ProvinceStraight)
+                         .WhereIF(dto.OrgCode == "001", (t, o) => t.HandlerOrgId == dto.OrgCode)
+                         .WhereIF(dto.OrgCode != "001", (t, o) => t.HandlerOrgId.StartsWith(dto.OrgCode))
+                         .GroupBy((t, o) => o.Id)
+                         .Select((t, o) => new SelectOrderId { Id = o.Id })
+                         .MergeTable();
+                    break;
+                case EStatisticsType.HQYBOverdue://会签已办超期
+                    query = _workflowTraceRepository.Queryable()
+                        .LeftJoin<Order>((t, o) => t.ExternalId == o.Id)
+                         .Where((t, o) => t.ModuleCode == WorkflowModuleConsts.OrderHandle && o.CreationTime >= dto.StartTime && o.CreationTime <= dto.EndTime
+                         && t.Status >= EWorkflowStepStatus.Handled && t.HandleTime > t.StepExpiredTime && t.CountersignPosition > ECountersignPosition.None)
+                         .WhereIF(dto.IsProvince.HasValue && dto.IsProvince == true, (t, o) => o.Source == ESource.ProvinceStraight)
+                         .WhereIF(dto.OrgCode == "001", (t, o) => t.HandlerOrgId == dto.OrgCode)
+                         .WhereIF(dto.OrgCode != "001", (t, o) => t.HandlerOrgId.StartsWith(dto.OrgCode))
+                         .GroupBy((t, o) => o.Id)
+                         .Select((t, o) => new SelectOrderId { Id = o.Id })
+                         .MergeTable();
+                    break;
+                case EStatisticsType.HQZBOverdue://会签待办超期
+                    query = _workflowTraceRepository.Queryable()
+                        .LeftJoin<Order>((t, o) => t.ExternalId == o.Id)
+                         .Where((t, o) => t.ModuleCode == WorkflowModuleConsts.OrderHandle && o.CreationTime >= dto.StartTime && o.CreationTime <= dto.EndTime
+                         && t.Status < EWorkflowStepStatus.Handled && DateTime.Now > t.StepExpiredTime && t.CountersignPosition > ECountersignPosition.None)
+                         .WhereIF(dto.IsProvince.HasValue && dto.IsProvince == true, (t, o) => o.Source == ESource.ProvinceStraight)
+                         .WhereIF(dto.OrgCode == "001", (t, o) => t.HandlerOrgId == dto.OrgCode)
+                         .WhereIF(dto.OrgCode != "001", (t, o) => t.HandlerOrgId.StartsWith(dto.OrgCode))
+                         .GroupBy((t, o) => o.Id)
+                         .Select((t, o) => new SelectOrderId { Id = o.Id })
+                         .MergeTable();
+                    break;
+                case EStatisticsType.SubtotalOverdue://超期件数
+                    var cqybquery = _workflowTraceRepository.Queryable()
+                           .LeftJoin<Order>((t, o) => t.ExternalId == o.Id)
+                            .Where((t, o) => t.ModuleCode == WorkflowModuleConsts.OrderHandle && o.CreationTime >= dto.StartTime && o.CreationTime <= dto.EndTime
+                            && t.Status >= EWorkflowStepStatus.Handled && t.HandleTime > t.StepExpiredTime && t.CountersignPosition >= ECountersignPosition.None)
+                            .WhereIF(dto.IsProvince.HasValue && dto.IsProvince == true, (t, o) => o.Source == ESource.ProvinceStraight)
+                            .WhereIF(dto.OrgCode == "001", (t, o) => t.HandlerOrgId == dto.OrgCode)
+                            .WhereIF(dto.OrgCode != "001", (t, o) => t.HandlerOrgId.StartsWith(dto.OrgCode))
+                            .GroupBy((t, o) => o.Id)
+                            .Select((t, o) => new SelectOrderId { Id = o.Id })
+                            .MergeTable();
+                    var cqdbquery = _workflowTraceRepository.Queryable()
+                            .LeftJoin<Order>((t, o) => t.ExternalId == o.Id)
+                             .Where((t, o) => t.ModuleCode == WorkflowModuleConsts.OrderHandle && o.CreationTime >= dto.StartTime && o.CreationTime <= dto.EndTime
+                             && t.Status < EWorkflowStepStatus.Handled && DateTime.Now > t.StepExpiredTime && t.CountersignPosition >= ECountersignPosition.None)
+                             .WhereIF(dto.IsProvince.HasValue && dto.IsProvince == true, (t, o) => o.Source == ESource.ProvinceStraight)
+                             .WhereIF(dto.OrgCode == "001", (t, o) => t.HandlerOrgId == dto.OrgCode)
+                             .WhereIF(dto.OrgCode != "001", (t, o) => t.HandlerOrgId.StartsWith(dto.OrgCode))
+                             .GroupBy((t, o) => o.Id)
+                             .Select((t, o) => new SelectOrderId { Id = o.Id })
+                             .MergeTable();
+                    query = _orderRepository.UnionAll(cqybquery, cqdbquery).GroupBy(p => p.Id).MergeTable();
+                    break;
+                case EStatisticsType.DelayEnd://会签已办
+                    query = _workflowTraceRepository.Queryable()
+                           .LeftJoin<Order>((t, o) => t.ExternalId == o.Id)
+                            .Where((t, o) => t.ModuleCode == WorkflowModuleConsts.OrderHandle && o.CreationTime >= dto.StartTime && o.CreationTime <= dto.EndTime
+                            && t.Status >= EWorkflowStepStatus.Handled && t.CountersignPosition > ECountersignPosition.None)
+                            .WhereIF(dto.IsProvince.HasValue && dto.IsProvince == true, (t, o) => o.Source == ESource.ProvinceStraight)
+                            .WhereIF(dto.OrgCode == "001", (t, o) => t.HandlerOrgId == dto.OrgCode)
+                            .WhereIF(dto.OrgCode != "001", (t, o) => t.HandlerOrgId.StartsWith(dto.OrgCode))
+                            .GroupBy((t, o) => o.Id)
+                            .Select((t, o) => new SelectOrderId { Id = o.Id })
+                            .MergeTable();
+                    break;
+                case EStatisticsType.DelayWait://会签待办
+                    query = _workflowTraceRepository.Queryable()
+                            .LeftJoin<Order>((t, o) => t.ExternalId == o.Id)
+                             .Where((t, o) => t.ModuleCode == WorkflowModuleConsts.OrderHandle && o.CreationTime >= dto.StartTime && o.CreationTime <= dto.EndTime
+                             && t.Status < EWorkflowStepStatus.Handled && t.CountersignPosition > ECountersignPosition.None)
+                             .WhereIF(dto.IsProvince.HasValue && dto.IsProvince == true, (t, o) => o.Source == ESource.ProvinceStraight)
+                             .WhereIF(dto.OrgCode == "001", (t, o) => t.HandlerOrgId == dto.OrgCode)
+                             .WhereIF(dto.OrgCode != "001", (t, o) => t.HandlerOrgId.StartsWith(dto.OrgCode))
+                             .GroupBy((t, o) => o.Id)
+                             .Select((t, o) => new SelectOrderId { Id = o.Id })
+                             .MergeTable();
+                    break;
+                case EStatisticsType.ToBeArchived://待归档没得数据
+                    query = _orderRepository.Queryable()
+                            .Where(o => o.CreationTime >= dto.StartTime && o.CreationTime <= dto.EndTime && o.Status < EOrderStatus.WaitForAccept)
+                           .WhereIF(dto.IsProvince.HasValue && dto.IsProvince == true, o => o.Source == ESource.ProvinceStraight)
+                            .WhereIF(dto.OrgCode == "001", o => o.ActualHandleOrgCode == dto.OrgCode)
+                            .WhereIF(dto.OrgCode != "001", o => o.ActualHandleOrgCode.StartsWith(dto.OrgCode))
+                             .Select(o => new SelectOrderId { Id = o.Id })
+                          .MergeTable();
+                    break;
+                case EStatisticsType.Archived://已归档
+                    query = _orderRepository.Queryable()
+                          .Where(o => o.CreationTime >= dto.StartTime && o.CreationTime <= dto.EndTime && o.Status >= EOrderStatus.Filed)
+                         .WhereIF(dto.IsProvince.HasValue && dto.IsProvince == true, o => o.Source == ESource.ProvinceStraight)
+                          .WhereIF(dto.OrgCode == "001", o => o.ActualHandleOrgCode == dto.OrgCode)
+                          .WhereIF(dto.OrgCode != "001", o => o.ActualHandleOrgCode.StartsWith(dto.OrgCode))
+                           .Select(o => new SelectOrderId { Id = o.Id })
+                        .MergeTable();
+                    break;
+                case EStatisticsType.WaitPublished://待发布
+                    query = _orderRepository.Queryable()
+                         .Where(o => o.CreationTime >= dto.StartTime && o.CreationTime <= dto.EndTime && o.Status == EOrderStatus.Filed)
+                        .WhereIF(dto.IsProvince.HasValue && dto.IsProvince == true, o => o.Source == ESource.ProvinceStraight)
+                         .WhereIF(dto.OrgCode == "001", o => o.ActualHandleOrgCode == dto.OrgCode)
+                         .WhereIF(dto.OrgCode != "001", o => o.ActualHandleOrgCode.StartsWith(dto.OrgCode))
+                          .Select(o => new SelectOrderId { Id = o.Id })
+                       .MergeTable();
+                    break;
+                case EStatisticsType.PublishedOpen://发布公开
+                    query = _orderRepository.Queryable()
+                         .Where(o => o.CreationTime >= dto.StartTime && o.CreationTime <= dto.EndTime && o.Status >= EOrderStatus.Published && o.IsPublicity == true)
+                        .WhereIF(dto.IsProvince.HasValue && dto.IsProvince == true, o => o.Source == ESource.ProvinceStraight)
+                         .WhereIF(dto.OrgCode == "001", o => o.ActualHandleOrgCode == dto.OrgCode)
+                         .WhereIF(dto.OrgCode != "001", o => o.ActualHandleOrgCode.StartsWith(dto.OrgCode))
+                          .Select(o => new SelectOrderId { Id = o.Id })
+                       .MergeTable();
+                    break;
+                case EStatisticsType.PublishedNoOpen://发布不公开
+                    query = _orderRepository.Queryable()
+                        .Where(o => o.CreationTime >= dto.StartTime && o.CreationTime <= dto.EndTime && o.Status >= EOrderStatus.Published && o.IsPublicity == false)
+                       .WhereIF(dto.IsProvince.HasValue && dto.IsProvince == true, o => o.Source == ESource.ProvinceStraight)
+                        .WhereIF(dto.OrgCode == "001", o => o.ActualHandleOrgCode == dto.OrgCode)
+                        .WhereIF(dto.OrgCode != "001", o => o.ActualHandleOrgCode.StartsWith(dto.OrgCode))
+                         .Select(o => new SelectOrderId { Id = o.Id })
+                      .MergeTable();
+                    break;
+                case EStatisticsType.ScreenCount://甄别总量
+                    query = _orderScreenRepository.Queryable()
+                        .Includes(x => x.Order)
+                       .Where(x => x.Order.CreationTime >= dto.StartTime && x.Order.CreationTime <= dto.EndTime && x.Order.Id != null)
+                       .WhereIF(dto.IsProvince.HasValue && dto.IsProvince == true, x => x.Order.Source == ESource.ProvinceStraight)
+                       .WhereIF(dto.OrgCode == "001", x => x.CreatorOrgId == dto.OrgCode)
+                       .WhereIF(dto.OrgCode != "001", x => x.CreatorOrgId.StartsWith(dto.OrgCode))
+                        .Select(x => new SelectOrderId { Id = x.Order.Id })
+                       .MergeTable();
+                    break;
+                case EStatisticsType.ScreenApproval://带甄别
+                    query = _orderScreenRepository.Queryable()
+                        .Includes(x => x.Order)
+                       .Where(x => x.Order.CreationTime >= dto.StartTime && x.Order.CreationTime <= dto.EndTime && x.Order.Id != null
+                       && (x.Status == EScreenStatus.Approval || x.Status == EScreenStatus.Apply))
+                       .WhereIF(dto.IsProvince.HasValue && dto.IsProvince == true, x => x.Order.Source == ESource.ProvinceStraight)
+                       .WhereIF(dto.OrgCode == "001", x => x.CreatorOrgId == dto.OrgCode)
+                       .WhereIF(dto.OrgCode != "001", x => x.CreatorOrgId.StartsWith(dto.OrgCode))
+                        .Select(x => new SelectOrderId { Id = x.Order.Id })
+                       .MergeTable();
+                    break;
+                case EStatisticsType.ScreenPass://甄别通过
+                    query = _orderScreenRepository.Queryable()
+                        .Includes(x => x.Order)
+                       .Where(x => x.Order.CreationTime >= dto.StartTime && x.Order.CreationTime <= dto.EndTime && x.Order.Id != null && x.Status == EScreenStatus.End)
+                       .WhereIF(dto.IsProvince.HasValue && dto.IsProvince == true, x => x.Order.Source == ESource.ProvinceStraight)
+                       .WhereIF(dto.OrgCode == "001", x => x.CreatorOrgId == dto.OrgCode)
+                       .WhereIF(dto.OrgCode != "001", x => x.CreatorOrgId.StartsWith(dto.OrgCode))
+                        .Select(x => new SelectOrderId { Id = x.Order.Id })
+                       .MergeTable();
+                    break;
+                case EStatisticsType.ScreenNotPass://甄别不通过
+                    query = _orderScreenRepository.Queryable()
+                       .Includes(x => x.Order)
+                      .Where(x => x.Order.CreationTime >= dto.StartTime && x.Order.CreationTime <= dto.EndTime && x.Order.Id != null && x.Status == EScreenStatus.Refuse)
+                      .WhereIF(dto.IsProvince.HasValue && dto.IsProvince == true, x => x.Order.Source == ESource.ProvinceStraight)
+                      .WhereIF(dto.OrgCode == "001", x => x.CreatorOrgId == dto.OrgCode)
+                      .WhereIF(dto.OrgCode != "001", x => x.CreatorOrgId.StartsWith(dto.OrgCode))
+                       .Select(x => new SelectOrderId { Id = x.Order.Id })
+                      .MergeTable();
+                    break;
+                default:
+                    break;
+            }
+            return query;
+        }
+
 
         /// <summary>
         /// 部门办件统计表

+ 22 - 1
src/Hotline.Share/Dtos/Order/OrderDto.cs

@@ -399,7 +399,28 @@ namespace Hotline.Share.Dtos.Order
             }
         }
 
-        public EExpiredStatus? CalculateExpiredState()
+        /// <summary>
+        /// 超期天数
+        /// </summary>
+        public string DaysOverdue => DaysOverdueText();
+
+        private string DaysOverdueText()
+        {
+            DateTime? dateTime = DateTime.Now;
+            if (Status >= EOrderStatus.Filed)
+            {
+                var days = (FiledTime.Value - ExpiredTime.Value).TotalDays;
+                return $"超期{days:N1}天";
+            }
+            if (ExpiredTime.HasValue)
+            {
+                var days = (dateTime.Value - ExpiredTime.Value).TotalDays;
+                return $"超期{days:N1}天";
+            }
+            return string.Empty;
+        }
+
+		public EExpiredStatus? CalculateExpiredState()
         {
             DateTime? dateTime = DateTime.Now;
             if (Status >= EOrderStatus.Filed)

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

@@ -83,6 +83,39 @@ public record OrgDataListDetailRequest : PagedRequest
     /// </summary>
     public int ExpiredType { get; set; }
 }
+/// <summary>
+/// 部门超期全部数据
+/// </summary>
+public record OrgDataListAllDetailRequest : PagedRequest
+{
+	/// <summary>
+	/// 开始时间
+	/// </summary>
+	public DateTime StartTime { get; set; }
+	/// <summary>
+	/// 结束时间
+	/// </summary>
+	public DateTime EndTime { get; set; }
+	/// <summary>
+	/// 部门Code
+	/// </summary>
+	public string OrgCode { get; set; }
+
+	/// <summary>
+	/// 工单编号
+	/// </summary>
+	public string? No { get; set; }
+
+	/// <summary>
+	/// 超期类型 1:系统中超期  2:申请延期超期
+	/// </summary>
+	public int ExpiredType { get; set; }
+
+	/// <summary>
+	/// 工单状态(√)
+	/// </summary>
+	public List<EOrderStatus> Statuses { get; set; } = new();
+}
 
 public record PublishedPagedRequest : PagedKeywordRequest
 {
@@ -350,3 +383,13 @@ public record OrgVisitDetailListReq: PagedKeywordRequest
     public DateTime? ActualHandleTimeEnd { get; set; }
 }
 
+
+public record HotspotAndAreaStatisticsReq
+{
+    public int HotspotLevel { get; set; }
+
+    public DateTime StartTime { get; set; }
+
+    public DateTime EndTime { get; set; }
+
+}

+ 39 - 0
src/Hotline/Permissions/EPermission.cs

@@ -223,6 +223,12 @@ namespace Hotline.Permissions
         /// </summary>
         [Display(GroupName ="工单列表",Name ="交办单导出",Description ="交办单导出")]
         BusinessOrderJbdExport = 200116,
+
+        /// <summary>
+        /// 工单待办
+        /// </summary>
+        [Display(GroupName ="工单列表",Name ="工单待办",Description ="工单待办")]
+        OrderAgent = 200117,
         #endregion
 
         #region 延期管理
@@ -1969,6 +1975,19 @@ namespace Hotline.Permissions
         #endregion
         #endregion
 
+        #region 省平台对接
+        /// <summary>
+        /// 省平台对接
+        /// </summary>
+        [Display(GroupName ="省平台对接",Name ="省平台对接",Description ="省平台对接")]
+        ProvinceAbutment = 701600,
+        /// <summary>
+        /// 政民互动发布
+        /// </summary>
+        [Display(GroupName ="省平台对接",Name ="政民互动发布",Description ="政民互动发布")]
+        GovernmentpPeopleInteractPublish = 701601,
+
+        #endregion
         #endregion
 
         #region 话务管理(80,00,00)
@@ -2229,6 +2248,21 @@ namespace Hotline.Permissions
         /// </summary>
         [Display(GroupName ="数据统计",Name ="信件来源分时统计",Description ="信件来源分时统计")]
         OrderSourceTimeStatistics = 110216,
+        /// <summary>
+        /// 受理类型时分统计
+        /// </summary>
+        [Display(GroupName ="数据统计",Name = "受理类型分时统计", Description = "受理类型分时统计")]
+        AcceptTypeTimeStatistics = 110217,
+        /// <summary>
+        /// 热点类型分时统计
+        /// </summary>
+        [Display(GroupName ="数据统计",Name ="热点类型分时统计",Description = "热点类型分时统计")]
+        HotspotTypeTimeStatistics = 110218,
+        /// <summary>
+        /// 区域分时统计
+        /// </summary>
+        [Display(GroupName ="数据统计",Name ="区域分时统计",Description ="区域分时统计")]
+        AreaTimeStatistics = 110219,
         #endregion
 
         #region 知识库统计(11,03,00)
@@ -2459,6 +2493,11 @@ namespace Hotline.Permissions
         /// </summary>
         [Display(GroupName = "数据共享平台", Name = "及时率(新)", Description = "及时率(新)")]
         TimelinessRateNew = 131300,
+        /// <summary>
+        /// 推送失败查询
+        /// </summary>
+        [Display(GroupName ="数据共享平台",Name = "推送失败查询",Description ="推送失败查询")]
+        PublishErrorQuery = 131400,
         #endregion
 
         #region 公用(99,00,00)