Browse Source

修改部门受理类型统计周期

tangjiang 10 tháng trước cách đây
mục cha
commit
34edd766d7

+ 148 - 80
src/Hotline.Api/Controllers/Bi/BiOrderController.cs

@@ -969,7 +969,6 @@ namespace Hotline.Api.Controllers.Bi
             return ExcelStreamResult(stream, "部门满意度统计数据");
         }
 
-
         /// <summary>
         /// 子部门满意度明细
         /// </summary>
@@ -1357,80 +1356,125 @@ namespace Hotline.Api.Controllers.Bi
         /// <summary>
         /// 部门受理类型统计周期
         /// </summary>
-        /// <param name="StartTime"></param>
-        /// <param name="EndTime"></param>
-        /// <param name="TypeCode">0:全部,1:中心,2:部门</param>
+        /// <param name="dto"></param>
         /// <returns></returns>
         [HttpGet("department_acceptance_type_statistics")]
-        public async Task<List<DepartmentAcceptanceTypeStatisticsDto>> DepartmentAcceptanceTypeStatistics(DateTime StartTime, DateTime EndTime, int TypeCode)
+        public async Task<object> DepartmentAcceptanceTypeStatistics([FromQuery] DepartmentKeyWordRequest dto)
         {
-            EndTime = EndTime.AddDays(1).AddSeconds(-1);
+            var items = await _orderReportApplication.DepartmentAcceptanceTypeStatistics(dto).ToListAsync();
 
-            var IsCenter = _sessionContext.OrgIsCenter;
+            var total = new DepartmentAcceptanceTypeStatisticsDto
+            {
+                OrgName = "合计",
+                OrgCode = "",
+                OrgType = "",
+                ZxAllCount = items.Sum(p => p.ZxAllCount),
+                ZxAllTimes = items.Sum(p => p.ZxAllTimes),
+                ZxAcceptanceTypeCode = "10",
+
+                JyAllCount = items.Sum(p => p.JyAllCount),
+                JyAllTimes = items.Sum(p => p.JyAllTimes),
+                JyAcceptanceTypeCode = "15",
+
+                QzAllCount = items.Sum(p => p.QzAllCount),
+                QzAllTimes = items.Sum(p => p.QzAllTimes),
+                QzAcceptanceTypeCode = "20",
+
+                ByAllCount = items.Sum(p => p.ByAllCount),
+                ByAllTimes = items.Sum(p => p.ByAllTimes),
+                ByAcceptanceTypeCode = "25",
+
+                JbAllCount = items.Sum(p => p.JbAllCount),
+                JbAllTimes = items.Sum(p => p.JbAllTimes),
+                JbAcceptanceTypeCode = "30",
+
+                TsAllCount = items.Sum(p => p.TsAllCount),
+                TsAllTimes = items.Sum(p => p.TsAllTimes),
+                TsAcceptanceTypeCode = "35",
+
+                QtAllCount = items.Sum(p => p.QtAllCount),
+                QtAllTimes = items.Sum(p => p.QtAllTimes),
+                QtAcceptanceTypeCode = "40",
+
+                YjAllCount = items.Sum(p => p.YjAllCount),
+                YjAllTimes = items.Sum(p => p.YjAllTimes),
+                YjAcceptanceTypeCode = "1"
+            };
 
-            var orderData = await _orderRepository.Queryable()
-              .Where(it => it.CreationTime >= StartTime && it.CreationTime <= EndTime && it.Status >= EOrderStatus.Filed)
-              .Select(it => new
-              {
-                  OrgCode = IsCenter == true ? it.ActualHandleOrgCode.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>("6")) : it.ActualHandleOrgCode.Substring(0, _sessionContext.RequiredOrgId.Length + 3),
-                  AcceptTypeCode = it.AcceptTypeCode,
-                  ProcessType = it.ProcessType,
-                  AllTime = it.ProcessType == EProcessType.Zhiban ? it.CreationTimeHandleDurationWorkday : it.CenterToOrgHandleDurationWorkday
-
-              })
-              .MergeTable()
-              .LeftJoin<SystemOrganize>((it, o) => it.OrgCode == o.Id)
-              //.WhereIF(TypeCode == 1, (it, o) => it.OrgCode == "001")
-              //.WhereIF(TypeCode == 2, (it, o) => it.OrgCode != "001")
-              .WhereIF(TypeCode == 1, (it, o) => it.ProcessType == EProcessType.Zhiban)
-              .WhereIF(TypeCode == 2, (it, o) => it.ProcessType == EProcessType.Jiaoban)
-              .WhereIF(IsCenter == false, (it, o) => it.OrgCode.StartsWith(_sessionContext.RequiredOrgId))
-               .GroupBy((it, o) => new
-               {
-                   it.OrgCode,
-                   o.Name,
-                   o.OrgType
-               })
-                .Select((it, o) => new DepartmentAcceptanceTypeStatisticsDto
-                {
-                    OrgName = it.OrgCode == "001" ? "热线中心" : o.Name,
-                    OrgCode = it.OrgCode,
-                    OrgType = o.OrgType == EOrgType.County ? "区县部门" : "市直部门",
-                    ZxAllCount = SqlFunc.AggregateSum(SqlFunc.IIF(it.AcceptTypeCode == "10", 1, 0)),
-                    ZxAllTimes = SqlFunc.AggregateSum(SqlFunc.IIF(it.AcceptTypeCode == "10" && it.AllTime != null, it.AllTime, 0)),
-                    ZxAcceptanceTypeCode = "10",
-
-                    JyAllCount = SqlFunc.AggregateSum(SqlFunc.IIF(it.AcceptTypeCode == "15", 1, 0)),
-                    JyAllTimes = SqlFunc.AggregateSum(SqlFunc.IIF(it.AcceptTypeCode == "15" && it.AllTime != null, it.AllTime, 0)),
-                    JyAcceptanceTypeCode = "15",
-
-                    QzAllCount = SqlFunc.AggregateSum(SqlFunc.IIF(it.AcceptTypeCode == "20", 1, 0)),
-                    QzAllTimes = SqlFunc.AggregateSum(SqlFunc.IIF(it.AcceptTypeCode == "20" && it.AllTime != null, it.AllTime, 0)),
-                    QzAcceptanceTypeCode = "20",
-
-                    ByAllCount = SqlFunc.AggregateSum(SqlFunc.IIF(it.AcceptTypeCode == "25", 1, 0)),
-                    ByAllTimes = SqlFunc.AggregateSum(SqlFunc.IIF(it.AcceptTypeCode == "25" && it.AllTime != null, it.AllTime, 0)),
-                    ByAcceptanceTypeCode = "25",
-
-                    JbAllCount = SqlFunc.AggregateSum(SqlFunc.IIF(it.AcceptTypeCode == "30", 1, 0)),
-                    JbAllTimes = SqlFunc.AggregateSum(SqlFunc.IIF(it.AcceptTypeCode == "30" && it.AllTime != null, it.AllTime, 0)),
-                    JbAcceptanceTypeCode = "30",
-
-                    TsAllCount = SqlFunc.AggregateSum(SqlFunc.IIF(it.AcceptTypeCode == "35", 1, 0)),
-                    TsAllTimes = SqlFunc.AggregateSum(SqlFunc.IIF(it.AcceptTypeCode == "35" && it.AllTime != null, it.AllTime, 0)),
-                    TsAcceptanceTypeCode = "35",
-
-                    QtAllCount = SqlFunc.AggregateSum(SqlFunc.IIF(it.AcceptTypeCode == "40", 1, 0)),
-                    QtAllTimes = SqlFunc.AggregateSum(SqlFunc.IIF(it.AcceptTypeCode == "40" && it.AllTime != null, it.AllTime, 0)),
-                    QtAcceptanceTypeCode = "40",
-
-                    YjAllCount = SqlFunc.AggregateSum(SqlFunc.IIF(it.AcceptTypeCode == "1", 1, 0)),
-                    YjAllTimes = SqlFunc.AggregateSum(SqlFunc.IIF(it.AcceptTypeCode == "1" && it.AllTime != null, it.AllTime, 0)),
-                    YjAcceptanceTypeCode = "1"
-                })
-              .ToListAsync();
+            return new { List = items, Total = total };
+        }
+
+        /// <summary>
+        /// 部门受理类型统计周期---导出
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        [HttpPost("department_acceptance_type_statistics_export")]
+        public async Task<FileStreamResult> ExportDepartmentAcceptanceTypeStatistics([FromBody] ExportExcelDto<DepartmentKeyWordRequest> dto)
+        {
+            var query = _orderReportApplication.DepartmentAcceptanceTypeStatistics(dto.QueryDto);
+            List<DepartmentAcceptanceTypeStatisticsDto> list;
+            if (dto.IsExportAll)
+            {
+                list = await query.ToListAsync(HttpContext.RequestAborted);
+            }
+            else
+            {
+                var (_, items) = await query.ToPagedListAsync(dto.QueryDto, HttpContext.RequestAborted);
+                list = items;
+            }
+
+            //增加合计
+            list.Add(new DepartmentAcceptanceTypeStatisticsDto
+            {
+                OrgName = "合计",
+                OrgCode = "",
+                OrgType = "",
+                ZxAllCount = list.Sum(p => p.ZxAllCount),
+                ZxAllTimes = list.Sum(p => p.ZxAllTimes),
+                ZxAcceptanceTypeCode = "10",
+
+                JyAllCount = list.Sum(p => p.JyAllCount),
+                JyAllTimes = list.Sum(p => p.JyAllTimes),
+                JyAcceptanceTypeCode = "15",
+
+                QzAllCount = list.Sum(p => p.QzAllCount),
+                QzAllTimes = list.Sum(p => p.QzAllTimes),
+                QzAcceptanceTypeCode = "20",
+
+                ByAllCount = list.Sum(p => p.ByAllCount),
+                ByAllTimes = list.Sum(p => p.ByAllTimes),
+                ByAcceptanceTypeCode = "25",
+
+                JbAllCount = list.Sum(p => p.JbAllCount),
+                JbAllTimes = list.Sum(p => p.JbAllTimes),
+                JbAcceptanceTypeCode = "30",
+
+                TsAllCount = list.Sum(p => p.TsAllCount),
+                TsAllTimes = list.Sum(p => p.TsAllTimes),
+                TsAcceptanceTypeCode = "35",
+
+                QtAllCount = list.Sum(p => p.QtAllCount),
+                QtAllTimes = list.Sum(p => p.QtAllTimes),
+                QtAcceptanceTypeCode = "40",
+
+                YjAllCount = list.Sum(p => p.YjAllCount),
+                YjAllTimes = list.Sum(p => p.YjAllTimes),
+                YjAcceptanceTypeCode = "1"
+            });
+
+            var orderDtos = _mapper.Map<ICollection<DepartmentAcceptanceTypeStatisticsDto>>(list);
 
-            return orderData;
+            dynamic? dynamicClass = DynamicClassHelper.CreateDynamicClass(dto.ColumnInfos);
+
+            var dtos = orderDtos
+                .Select(stu => _mapper.Map(stu, typeof(DepartmentAcceptanceTypeStatisticsDto), dynamicClass))
+                .Cast<object>()
+                .ToList();
+
+            var stream = ExcelHelper.CreateStream(dtos);
+
+            return ExcelStreamResult(stream, "部门受理类型统计周期数据");
         }
 
         /// <summary>
@@ -1441,22 +1485,46 @@ namespace Hotline.Api.Controllers.Bi
         [HttpGet("department_acceptance_type_order_list")]
         public async Task<PagedDto<OrderDto>> DepartmentAcceptanceTypeOrderList([FromQuery] DepartmentKeyWordRequest dto)
         {
-            dto.EndTime = dto.EndTime.AddDays(1).AddSeconds(-1);
-            var (total, items) = await _orderRepository.Queryable()
-                .Where(p => p.CreationTime >= dto.StartTime && p.CreationTime <= dto.EndTime && p.Status >= EOrderStatus.Filed)
-                .WhereIF(!string.IsNullOrEmpty(dto.OrgCode) && dto.OrgCode == "001", p => p.ActualHandleOrgCode == dto.OrgCode)
-
-                .WhereIF(!string.IsNullOrEmpty(dto.OrgCode) && dto.OrgCode != "001" && _sessionContext.RequiredOrgId != dto.OrgCode, p => p.ActualHandleOrgCode.StartsWith(dto.OrgCode))
-                .WhereIF(!string.IsNullOrEmpty(dto.OrgCode) && dto.OrgCode != "001" && _sessionContext.RequiredOrgId == dto.OrgCode, p => p.ActualHandleOrgCode == dto.OrgCode)
-                .WhereIF(!string.IsNullOrEmpty(dto.AcceptTypeCode), p => p.AcceptTypeCode == dto.AcceptTypeCode)
-                .WhereIF(dto.TypeCode == 1, p => p.ProcessType == EProcessType.Zhiban)
-                .WhereIF(dto.TypeCode == 2, p => p.ProcessType == EProcessType.Jiaoban)
-                .OrderByDescending(d => d.CreationTime)
+            var (total, items) = await _orderReportApplication.DepartmentAcceptanceTypeOrderList(dto)
                 .ToPagedListAsync(dto, HttpContext.RequestAborted);
 
             return new PagedDto<OrderDto>(total, _mapper.Map<IReadOnlyList<OrderDto>>(items));
         }
 
+        /// <summary>
+        /// 部门受理类型统计周期--明细列表---导出
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        [HttpPost("department_acceptance_type_order_list_export")]
+        public async Task<FileStreamResult> ExportDepartmentAcceptanceTypeOrderList([FromBody] ExportExcelDto<DepartmentKeyWordRequest> dto)
+        {
+            var query = _orderReportApplication.DepartmentAcceptanceTypeOrderList(dto.QueryDto);
+            List<Order> 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<OrderDto>>(list);
+
+            dynamic? dynamicClass = DynamicClassHelper.CreateDynamicClass(dto.ColumnInfos);
+
+            var dtos = orderDtos
+                .Select(stu => _mapper.Map(stu, typeof(OrderDto), dynamicClass))
+                .Cast<object>()
+                .ToList();
+
+            var stream = ExcelHelper.CreateStream(dtos);
+
+            return ExcelStreamResult(stream, "部门受理类型统计周期数据");
+        }
+
         /// <summary>
         /// 部门办件统计表
         /// </summary>

+ 18 - 0
src/Hotline.Application/StatisticalReport/IOrderReportApplication.cs

@@ -1,7 +1,11 @@
 using Hotline.Orders;
+using Hotline.Repository.SqlSugar.Orders;
+using Hotline.Settings;
 using Hotline.Share.Dtos.Order;
+using Hotline.Share.Enums.Order;
 using Hotline.Share.Requests;
 using SqlSugar;
+using XF.Domain.Authentications;
 
 namespace Hotline.Application.StatisticalReport
 {
@@ -41,5 +45,19 @@ namespace Hotline.Application.StatisticalReport
         /// <param name="dto"></param>
         /// <returns></returns>
         ISugarQueryable<OrderDelay> QueryOrderDelayDataDetail(QueryOrderDelayDataDetailRequest dto);
+
+        /// <summary>
+        /// 部门受理类型统计周期
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        ISugarQueryable<DepartmentAcceptanceTypeStatisticsDto> DepartmentAcceptanceTypeStatistics(DepartmentKeyWordRequest dto);
+
+        /// <summary>
+        /// 部门受理类型统计周期--明细列表
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        ISugarQueryable<Order> DepartmentAcceptanceTypeOrderList(DepartmentKeyWordRequest dto);
     }
 }

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

@@ -812,7 +812,7 @@ namespace Hotline.Application.StatisticalReport
             if (stye == "0")
             {
                 var ybQuery = _orderRepository.Queryable()
-                                  .Where(it => it.CreationTime >= dto.StartTime && it.CreationTime <= dto.EndTime&& it.Status > EOrderStatus.WaitForAccept)
+                                  .Where(it => it.CreationTime >= dto.StartTime && it.CreationTime <= dto.EndTime && it.Status > EOrderStatus.WaitForAccept)
                                   .WhereIF(dto.OrgCode == "001", it => it.ActualHandleOrgCode == dto.OrgCode)
                                   .WhereIF(dto.OrgCode != "001", it => it.ActualHandleOrgCode.StartsWith(dto.OrgCode))
                                  .WhereIF(dto.StatisticsType == EStatisticsType.YBOrderCountNum, it => it.Status >= EOrderStatus.Filed)//已办
@@ -1045,5 +1045,99 @@ namespace Hotline.Application.StatisticalReport
 
         }
 
+        /// <summary>
+        /// 部门受理类型统计周期
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        public ISugarQueryable<DepartmentAcceptanceTypeStatisticsDto> DepartmentAcceptanceTypeStatistics(DepartmentKeyWordRequest dto)
+        {
+            dto.EndTime = dto.EndTime.AddDays(1).AddSeconds(-1);
+
+            var IsCenter = _sessionContext.OrgIsCenter;
+
+            var orderData = _orderRepository.Queryable()
+              .Where(it => it.CreationTime >= dto.StartTime && it.CreationTime <= dto.EndTime && it.Status >= EOrderStatus.Filed)
+              .Select(it => new
+              {
+                  OrgCode = IsCenter == true ? it.ActualHandleOrgCode.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>("6")) : it.ActualHandleOrgCode.Substring(0, _sessionContext.RequiredOrgId.Length + 3),
+                  AcceptTypeCode = it.AcceptTypeCode,
+                  ProcessType = it.ProcessType,
+                  AllTime = it.ProcessType == EProcessType.Zhiban ? it.CreationTimeHandleDurationWorkday : it.CenterToOrgHandleDurationWorkday
+
+              })
+              .MergeTable()
+              .LeftJoin<SystemOrganize>((it, o) => it.OrgCode == o.Id)
+              //.WhereIF(TypeCode == 1, (it, o) => it.OrgCode == "001")
+              //.WhereIF(TypeCode == 2, (it, o) => it.OrgCode != "001")
+              .WhereIF(dto.TypeCode == 1, (it, o) => it.ProcessType == EProcessType.Zhiban)
+              .WhereIF(dto.TypeCode == 2, (it, o) => it.ProcessType == EProcessType.Jiaoban)
+              .WhereIF(IsCenter == false, (it, o) => it.OrgCode.StartsWith(_sessionContext.RequiredOrgId))
+               .GroupBy((it, o) => new
+               {
+                   it.OrgCode,
+                   o.Name,
+                   o.OrgType
+               })
+                .Select((it, o) => new DepartmentAcceptanceTypeStatisticsDto
+                {
+                    OrgName = it.OrgCode == "001" ? "热线中心" : o.Name,
+                    OrgCode = it.OrgCode,
+                    OrgType = o.OrgType == EOrgType.County ? "区县部门" : "市直部门",
+                    ZxAllCount = SqlFunc.AggregateSum(SqlFunc.IIF(it.AcceptTypeCode == "10", 1, 0)),
+                    ZxAllTimes = SqlFunc.AggregateSum(SqlFunc.IIF(it.AcceptTypeCode == "10" && it.AllTime != null, it.AllTime, 0)),
+                    ZxAcceptanceTypeCode = "10",
+
+                    JyAllCount = SqlFunc.AggregateSum(SqlFunc.IIF(it.AcceptTypeCode == "15", 1, 0)),
+                    JyAllTimes = SqlFunc.AggregateSum(SqlFunc.IIF(it.AcceptTypeCode == "15" && it.AllTime != null, it.AllTime, 0)),
+                    JyAcceptanceTypeCode = "15",
+
+                    QzAllCount = SqlFunc.AggregateSum(SqlFunc.IIF(it.AcceptTypeCode == "20", 1, 0)),
+                    QzAllTimes = SqlFunc.AggregateSum(SqlFunc.IIF(it.AcceptTypeCode == "20" && it.AllTime != null, it.AllTime, 0)),
+                    QzAcceptanceTypeCode = "20",
+
+                    ByAllCount = SqlFunc.AggregateSum(SqlFunc.IIF(it.AcceptTypeCode == "25", 1, 0)),
+                    ByAllTimes = SqlFunc.AggregateSum(SqlFunc.IIF(it.AcceptTypeCode == "25" && it.AllTime != null, it.AllTime, 0)),
+                    ByAcceptanceTypeCode = "25",
+
+                    JbAllCount = SqlFunc.AggregateSum(SqlFunc.IIF(it.AcceptTypeCode == "30", 1, 0)),
+                    JbAllTimes = SqlFunc.AggregateSum(SqlFunc.IIF(it.AcceptTypeCode == "30" && it.AllTime != null, it.AllTime, 0)),
+                    JbAcceptanceTypeCode = "30",
+
+                    TsAllCount = SqlFunc.AggregateSum(SqlFunc.IIF(it.AcceptTypeCode == "35", 1, 0)),
+                    TsAllTimes = SqlFunc.AggregateSum(SqlFunc.IIF(it.AcceptTypeCode == "35" && it.AllTime != null, it.AllTime, 0)),
+                    TsAcceptanceTypeCode = "35",
+
+                    QtAllCount = SqlFunc.AggregateSum(SqlFunc.IIF(it.AcceptTypeCode == "40", 1, 0)),
+                    QtAllTimes = SqlFunc.AggregateSum(SqlFunc.IIF(it.AcceptTypeCode == "40" && it.AllTime != null, it.AllTime, 0)),
+                    QtAcceptanceTypeCode = "40",
+
+                    YjAllCount = SqlFunc.AggregateSum(SqlFunc.IIF(it.AcceptTypeCode == "1", 1, 0)),
+                    YjAllTimes = SqlFunc.AggregateSum(SqlFunc.IIF(it.AcceptTypeCode == "1" && it.AllTime != null, it.AllTime, 0)),
+                    YjAcceptanceTypeCode = "1"
+                }).MergeTable();
+            return orderData;
+        }
+
+        /// <summary>
+        /// 部门受理类型统计周期--明细列表
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        public ISugarQueryable<Order> DepartmentAcceptanceTypeOrderList(DepartmentKeyWordRequest dto)
+        {
+            dto.EndTime = dto.EndTime.AddDays(1).AddSeconds(-1);
+            return _orderRepository.Queryable()
+                 .Where(p => p.CreationTime >= dto.StartTime && p.CreationTime <= dto.EndTime && p.Status >= EOrderStatus.Filed)
+                 .WhereIF(!string.IsNullOrEmpty(dto.OrgCode) && dto.OrgCode == "001", p => p.ActualHandleOrgCode == dto.OrgCode)
+
+                 .WhereIF(!string.IsNullOrEmpty(dto.OrgCode) && dto.OrgCode != "001" && _sessionContext.RequiredOrgId != dto.OrgCode, p => p.ActualHandleOrgCode.StartsWith(dto.OrgCode))
+                 .WhereIF(!string.IsNullOrEmpty(dto.OrgCode) && dto.OrgCode != "001" && _sessionContext.RequiredOrgId == dto.OrgCode, p => p.ActualHandleOrgCode == dto.OrgCode)
+                 .WhereIF(!string.IsNullOrEmpty(dto.AcceptTypeCode), p => p.AcceptTypeCode == dto.AcceptTypeCode)
+                 .WhereIF(dto.TypeCode == 1, p => p.ProcessType == EProcessType.Zhiban)
+                 .WhereIF(dto.TypeCode == 2, p => p.ProcessType == EProcessType.Jiaoban)
+                 .OrderByDescending(d => d.CreationTime)
+                 .MergeTable();
+        }
     }
 }