Browse Source

部门延期统计明细-单独菜单 导出

Dun.Jason 3 tháng trước cách đây
mục cha
commit
6a57c41381
1 tập tin đã thay đổi với 77 bổ sung27 xóa
  1. 77 27
      src/Hotline.Api/Controllers/Bi/BiOrderController.cs

+ 77 - 27
src/Hotline.Api/Controllers/Bi/BiOrderController.cs

@@ -966,6 +966,83 @@ namespace Hotline.Api.Controllers.Bi
             return ExcelStreamResult(stream, "部门延期统计明细数据");
         }
 
+
+        /// <summary>
+        /// 部门延期统计明细-单独菜单
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        [HttpGet("order_delay_detail")]
+        public async Task<PagedDto<OrderDelayDto>> QueryOrderDelayDataDetailAsync([FromQuery] QueryOrderDelayDataDetailRequest dto)
+        {
+            var query = _orderDelayRepository.Queryable()
+                 .Includes(x => x.Order)
+                 .WhereIF(dto.StartTime.HasValue, x => x.CreationTime >= dto.StartTime)
+                 .WhereIF(dto.EndTime.HasValue, x => x.CreationTime <= dto.EndTime)
+                .WhereIF(dto.TypeId != null && dto.TypeId == 1, x => x.Order.IdentityType == EIdentityType.Citizen)
+                .WhereIF(dto.TypeId != null && dto.TypeId == 2, x => x.Order.IdentityType == EIdentityType.Enterprise)
+                 .WhereIF(dto.Type is 1, x => x.DelayState == EDelayState.Pass)
+                 .WhereIF(dto.Type is 2, x => x.DelayState == EDelayState.NoPass)
+                 .WhereIF(dto.Type is 3, x => x.DelayState == EDelayState.Examining)
+                 .WhereIF(dto.Type is 4, x => x.DelayState < EDelayState.Withdraw)
+             .MergeTable();
+
+            if (_sessionContext.OrgIsCenter == false)
+                query = query.Where(x => x.ApplyOrgCode.StartsWith(_sessionContext.OrgId));
+
+            var (total, items) = await query.ToPagedListAsync(dto.PageIndex, dto.PageSize, HttpContext.RequestAborted);
+            return new PagedDto<OrderDelayDto>(total, _mapper.Map<IReadOnlyList<OrderDelayDto>>(items));
+        }
+
+        /// <summary>
+        /// 部门延期统计明细-单独菜单 导出
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        [HttpPost("order-delay-detail/exprot")]
+        public async Task<FileStreamResult> ExportQueryOrderDelayDataDetailAsync([FromBody] ExportExcelDto<QueryOrderDelayDataDetailRequest> dto)
+        {
+            var query = _orderDelayRepository.Queryable()
+                 .Includes(x => x.Order)
+                 .WhereIF(dto.QueryDto.StartTime.HasValue, x => x.CreationTime >= dto.QueryDto.StartTime)
+                 .WhereIF(dto.QueryDto.EndTime.HasValue, x => x.CreationTime <= dto.QueryDto.EndTime)
+                .WhereIF(dto.QueryDto.TypeId != null && dto.QueryDto.TypeId == 1, x => x.Order.IdentityType == EIdentityType.Citizen)
+                .WhereIF(dto.QueryDto.TypeId != null && dto.QueryDto.TypeId == 2, x => x.Order.IdentityType == EIdentityType.Enterprise)
+                 .WhereIF(dto.QueryDto.Type is 1, x => x.DelayState == EDelayState.Pass)
+                 .WhereIF(dto.QueryDto.Type is 2, x => x.DelayState == EDelayState.NoPass)
+                 .WhereIF(dto.QueryDto.Type is 3, x => x.DelayState == EDelayState.Examining)
+                 .WhereIF(dto.QueryDto.Type is 4, x => x.DelayState < EDelayState.Withdraw)
+             .MergeTable();
+
+            if (_sessionContext.OrgIsCenter == false)
+                query = query.Where(x => x.ApplyOrgCode.StartsWith(_sessionContext.OrgId));
+
+            List<OrderDelay> list;
+            if (dto.IsExportAll)
+            {
+                list = await query.ToListAsync(HttpContext.RequestAborted);
+            }
+            else
+            {
+                var (_, items) = await query.ToPagedListAsync(dto.QueryDto, HttpContext.RequestAborted);
+                list = items;
+            }
+
+
+            var orderDtos = _mapper.Map<ICollection<OrderDelayDto>>(list);
+
+            dynamic? dynamicClass = DynamicClassHelper.CreateDynamicClass(dto.ColumnInfos);
+
+            var dtos = orderDtos
+                .Select(stu => _mapper.Map(stu, typeof(OrderDelayDto), dynamicClass))
+                .Cast<object>()
+                .ToList();
+
+            var stream = ExcelHelper.CreateStream(dtos);
+            return ExcelStreamResult(stream, "部门延期统计明细数据");
+
+        }
+
         /// <summary>
         /// 特提统计
         /// </summary>
@@ -5512,33 +5589,6 @@ namespace Hotline.Api.Controllers.Bi
             return ExcelStreamResult(stream, "扭转信件统计");
         }
 
-        /// <summary>
-        /// 部门延期统计明细-单独菜单
-        /// </summary>
-        /// <param name="dto"></param>
-        /// <returns></returns>
-        [HttpGet("order_delay_detail")]
-        public async Task<PagedDto<OrderDelayDto>> QueryOrderDelayDataDetailAsync([FromQuery] QueryOrderDelayDataDetailRequest dto)
-        {
-            var query = _orderDelayRepository.Queryable()
-                 .Includes(x => x.Order)
-                 .WhereIF(dto.StartTime.HasValue, x => x.CreationTime >= dto.StartTime)
-                 .WhereIF(dto.EndTime.HasValue, x => x.CreationTime <= dto.EndTime)
-                .WhereIF(dto.TypeId != null && dto.TypeId == 1, x => x.Order.IdentityType == EIdentityType.Citizen)
-                .WhereIF(dto.TypeId != null && dto.TypeId == 2, x => x.Order.IdentityType == EIdentityType.Enterprise)
-                 .WhereIF(dto.Type is 1, x => x.DelayState == EDelayState.Pass)
-                 .WhereIF(dto.Type is 2, x => x.DelayState == EDelayState.NoPass)
-                 .WhereIF(dto.Type is 3, x => x.DelayState == EDelayState.Examining)
-                 .WhereIF(dto.Type is 4, x => x.DelayState < EDelayState.Withdraw)
-             .MergeTable();
-
-            if (_sessionContext.OrgIsCenter == false)
-                query = query.Where(x => x.ApplyOrgCode.StartsWith(_sessionContext.OrgId));
-
-            var (total, items) = await query.ToPagedListAsync(dto.PageIndex, dto.PageSize, HttpContext.RequestAborted);
-            return new PagedDto<OrderDelayDto>(total, _mapper.Map<IReadOnlyList<OrderDelayDto>>(items));
-        }
-
         /// <summary>
         /// 工单热词分析
         /// </summary>