Browse Source

增加部门办件统计明细

tangjiang 9 months ago
parent
commit
bf8bc38661

+ 117 - 44
src/Hotline.Api/Controllers/Bi/BiOrderController.cs

@@ -170,10 +170,10 @@ namespace Hotline.Api.Controllers.Bi
         [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);
+            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));
+            return new PagedDto<OrderDto>(total, _mapper.Map<IReadOnlyList<OrderDto>>(items));
         }
 
         /// <summary>
@@ -183,30 +183,30 @@ namespace Hotline.Api.Controllers.Bi
         [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 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);
+            var dataDtos = _mapper.Map<ICollection<OrderDto>>(data);
 
-	        dynamic? dynamicClass = DynamicClassHelper.CreateDynamicClass(dto.ColumnInfos);
+            dynamic? dynamicClass = DynamicClassHelper.CreateDynamicClass(dto.ColumnInfos);
 
-	        var dtos = dataDtos
-		        .Select(stu => _mapper.Map(stu, typeof(OrderDto), dynamicClass))
-		        .Cast<object>()
-		        .ToList();
+            var dtos = dataDtos
+                .Select(stu => _mapper.Map(stu, typeof(OrderDto), dynamicClass))
+                .Cast<object>()
+                .ToList();
 
-	        var stream = ExcelHelper.CreateStream(dtos);
+            var stream = ExcelHelper.CreateStream(dtos);
 
-	        return ExcelStreamResult(stream, "部门超期统计明细数据");
+            return ExcelStreamResult(stream, "部门超期统计明细数据");
         }
 
 
@@ -217,19 +217,19 @@ namespace Hotline.Api.Controllers.Bi
         [HttpGet("org_data_list_detail_all/base-data")]
         public async Task<object> BaseData()
         {
-	        var rsp = new
-	        {
-		        OrderStatusOptions = EnumExts.GetDescriptions<EOrderStatus>()
-	        };
-	        return rsp;
+            var rsp = new
+            {
+                OrderStatusOptions = EnumExts.GetDescriptions<EOrderStatus>()
+            };
+            return rsp;
         }
 
-		/// <summary>
-		/// 部门超期统计
-		/// </summary>
-		/// <param name="dto"></param>
-		/// <returns></returns>
-		[HttpGet("org_data_list")]
+        /// <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);
@@ -1796,7 +1796,7 @@ namespace Hotline.Api.Controllers.Bi
 
             var queryData = await _orderReportApplication.GetDepartmentalProcessingStatisticsListNew(dto, HttpContext.RequestAborted)
                         .LeftJoin<Order>((x, o) => x.Id == o.Id)
-                        .OrderByDescending((x, o) =>o.CreationTime)
+                        .OrderByDescending((x, o) => o.CreationTime)
                          .Select((x, o) => new { o })
                         .ToPageListAsync(dto.PageIndex, dto.PageSize, total, HttpContext.RequestAborted);
 
@@ -1854,6 +1854,74 @@ namespace Hotline.Api.Controllers.Bi
             return ExcelStreamResult(stream, "部门办件统计明细数据");
         }
 
+        /// <summary>
+        /// 部门办件统计明细表
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        [HttpGet("departmental_processing_statistics_details_list")]
+        public async Task<PagedDto<OrderDto>> DepartmentalProcessingStatisticsDetailsList([FromQuery] DepartmentalProcessingStatisticsRequest dto)
+        {
+            RefAsync<int> total = 0;
+
+            var queryData = await _orderReportApplication.DepartmentalProcessingStatisticsDetailsList(dto)
+                        .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);
+
+            var dtos = queryData.Select(d =>
+            {
+                var dto = _mapper.Map<OrderDto>(d.o);
+                return dto;
+            }).ToList();
+            return new PagedDto<OrderDto>(total, dtos);
+        }
+
+        /// <summary>
+        /// 部门办件统计明细表--导出
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        [HttpGet("departmental_processing_statistics_details_list_export")]
+        public async Task<FileStreamResult> ExportDepartmentalProcessingStatisticsDetailsList([FromBody] ExportExcelDto<DepartmentalProcessingStatisticsRequest> dto)
+        {
+            var query = _orderReportApplication.DepartmentalProcessingStatisticsDetailsList(dto.QueryDto)
+                  .LeftJoin<Order>((x, o) => x.Id == o.Id)
+                  .OrderByDescending((x, o) => o.CreationTime)
+                  .Select((x, o) => new { o });
+            var list = new List<OrderDto>();
+            if (dto.IsExportAll)
+            {
+                var listData = await query.ToListAsync(HttpContext.RequestAborted);
+                list = listData.Select(d =>
+                {
+                    var dto = _mapper.Map<OrderDto>(d.o);
+                    return dto;
+                }).ToList();
+            }
+            else
+            {
+                RefAsync<int> total = 0;
+                var listData = await query.ToPageListAsync(dto.QueryDto.PageIndex, dto.QueryDto.PageSize, total, HttpContext.RequestAborted);
+                list = listData.Select(d =>
+                {
+                    var dto = _mapper.Map<OrderDto>(d.o);
+                    return dto;
+                }).ToList();
+            }
+
+            dynamic? dynamicClass = DynamicClassHelper.CreateDynamicClass(dto.ColumnInfos);
+
+            var dtos = list
+                .Select(stu => _mapper.Map(stu, typeof(OrderDto), dynamicClass))
+                .Cast<object>()
+                .ToList();
+
+            var stream = ExcelHelper.CreateStream(dtos);
+
+            return ExcelStreamResult(stream, "部门办件统计明细表数据");
+        }
 
         /// <summary>
         /// 高频来电统计
@@ -2918,28 +2986,33 @@ namespace Hotline.Api.Controllers.Bi
         /// <param name="dto"></param>
         /// <returns></returns>
         [HttpGet("hotspot-area-statistics")]
-        public async Task<object> HotspotAndAreaStatistics([FromQuery]HotspotAndAreaStatisticsReq dto)
+        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()
+                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 {
+                   .GroupByIF(dto.HotspotLevel == 1, x => new
+                   {
                        HotspotId = x.HotspotId.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>("2"))
                    })
-                   .GroupByIF(dto.HotspotLevel == 2, x => new {
+                   .GroupByIF(dto.HotspotLevel == 2, x => new
+                   {
                        HotspotId = x.HotspotId.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>("4"))
                    })
-                   .GroupByIF(dto.HotspotLevel == 3, x => new {
+                   .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"))
+                   .GroupByIF(dto.HotspotLevel == 4, x => new
+                   {
+                       HotspotId = x.HotspotId.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>("8"))
                    })
-                   .Select(x => new {
+                   .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")),
@@ -2947,11 +3020,11 @@ namespace Hotline.Api.Controllers.Bi
                        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));
+                   }).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};
+            return new { AreaList = areaList, Data = list };
         }
     }
 

+ 13 - 6
src/Hotline.Application/StatisticalReport/IOrderReportApplication.cs

@@ -28,12 +28,19 @@ namespace Hotline.Application.StatisticalReport
         /// <returns></returns>
         ISugarQueryable<SelectOrderId> GetDepartmentalProcessingStatisticsListNew(DepartmentalProcessingStatisticsRequest dto, CancellationToken cancellationToken);
 
-            /// <summary>
-            /// 部门办件统计表
-            /// </summary>
-            /// <param name="dto"></param>
-            /// <returns></returns>
-            ISugarQueryable<DepartmentalProcessingStatisticsDataDto> DepartmentalProcessingStatistics(DepartmentalProcessingStatisticsRequest dto);
+        /// <summary>
+        /// 部门办件统计明细表
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        ISugarQueryable<SelectOrderId> DepartmentalProcessingStatisticsDetailsList(DepartmentalProcessingStatisticsRequest dto);
+
+        /// <summary>
+        /// 部门办件统计表
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        ISugarQueryable<DepartmentalProcessingStatisticsDataDto> DepartmentalProcessingStatistics(DepartmentalProcessingStatisticsRequest dto);
 
         /// <summary>
         /// 部门办件统计表--子级

+ 20 - 1
src/Hotline.Application/StatisticalReport/OrderReportApplication.cs

@@ -497,7 +497,7 @@ order by ""su"".""OrgCode""";
             dto.EndTime = dto.EndTime.AddDays(1).AddSeconds(-1);
 
             RefAsync<int> total = 0;
-            ISugarQueryable<SelectOrderId> query =null;
+            ISugarQueryable<SelectOrderId> query = null;
             switch (dto.StatisticsType)
             {
                 case EStatisticsType.YBOrderCountNum://工单已办
@@ -722,6 +722,25 @@ order by ""su"".""OrgCode""";
             return query;
         }
 
+        /// <summary>
+        /// 部门办件统计明细表
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        public ISugarQueryable<SelectOrderId> DepartmentalProcessingStatisticsDetailsList(DepartmentalProcessingStatisticsRequest dto)
+        {
+            var 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)
+                         .WhereIF(dto.IsProvince.HasValue && dto.IsProvince == true, (t, o) => o.Source == ESource.ProvinceStraight)
+                         // .WhereIF(IsCenter, (t, o) => t.HandlerOrgId == dto.OrgCode)
+                         .WhereIF(!_sessionContext.OrgIsCenter, (t, o) => t.HandlerOrgId.StartsWith(dto.OrgCode))
+                         .GroupBy((t, o) => o.Id)
+                         .Select((t, o) => new SelectOrderId { Id = o.Id })
+                         .MergeTable();
+
+            return query;
+        }
 
         /// <summary>
         /// 部门办件统计表