Bläddra i källkod

中心待办查询

田爽 10 månader sedan
förälder
incheckning
3002f209b5

+ 123 - 120
src/Hotline.Api/Controllers/Bi/BiOrderController.cs

@@ -116,121 +116,88 @@ namespace Hotline.Api.Controllers.Bi
         [HttpGet("org_data_list_detail")]
         public async Task<PagedDto<OrderDto>> OrgDataListDetail([FromQuery] OrgDataListDetailRequest dto)
         {
-            dto.EndTime = dto.EndTime.AddDays(1).AddSeconds(-1);
-
-            var quer = _orderRepository.Queryable()
-                    .InnerJoin<SystemOrganize>((x, so) => x.ActualHandleOrgCode == so.Id)
-                    .Where(x => x.CreationTime >= dto.StartTime && x.CreationTime <= dto.EndTime)
-                    .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 =>
-                        (x.Status >= EOrderStatus.Filed && x.ExpiredTime < x.FiledTime) || (x.Status < EOrderStatus.Filed && x.ExpiredTime < SqlFunc.GetDate()))
-                    .WhereIF(!string.IsNullOrEmpty(dto.OrgCode) && dto.QueryType is 1 or 3 && dto.OrgCode == "001", x => x.ActualHandleOrgCode == dto.OrgCode)
-                    .WhereIF(!string.IsNullOrEmpty(dto.OrgCode) && dto.QueryType is 1 or 3 && dto.OrgCode != "001", x => x.ActualHandleOrgCode.StartsWith(dto.OrgCode))
-                    .MergeTable();
-
-            if (dto.QueryType is 2 or 4 or 5)
-            {
-                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(dto.QueryType == 2, (x, o) => o.IsHandled == true) //会签已办超期
-                    .WhereIF(dto.QueryType == 4, (x, o) => o.IsHandled == false) //会签待办超期
-                    .WhereIF(!string.IsNullOrEmpty(dto.OrgCode) && dto.QueryType is 2 or 4 or 5, (x, o) => o.Key.StartsWith(dto.OrgCode))
-                    //.GroupBy((x,o)=>x.WorkflowId)
-                    .Select((x, o) => new { Id = x.WorkflowId })
-                    .MergeTable();
-
-                quer = quer.InnerJoin(queryCountersign, (x, c) => x.WorkflowId == c.Id);
-
-            }
-            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));
         }
 
-
         /// <summary>
-        /// 部门超期统计
+        /// 部门超期统计明细导出
         /// </summary>
-        /// <param name="dto"></param>
         /// <returns></returns>
-        [HttpGet("org_data_list")]
-        public async Task<PagedDto<OrderBiOrgDataListVo>> OrgDataList([FromQuery] ReportPagedRequest dto)
+        [HttpPost("org_data_list_detail/_export")]
+        public async Task<FileStreamResult> OrgDataListDetailExport([FromBody] ExportExcelDto<OrgDataListDetailRequest> dto)
         {
-            if (!dto.StartTime.HasValue || !dto.EndTime.HasValue) throw UserFriendlyException.SameMessage("请选择时间!");
+            var query = _orderApplication.QueryOrgDataListDetail(dto.QueryDto);
+            List<Order> secondaryHandling;
+            if (dto.IsExportAll)
+            {
+                secondaryHandling = await query.ToListAsync(HttpContext.RequestAborted);
+            }
+            else
+            {
+                var (_, items) = await query.ToPagedListAsync(dto.QueryDto, HttpContext.RequestAborted);
+                secondaryHandling = items;
+            }
 
-            dto.EndTime = dto.EndTime.Value.AddDays(1).AddSeconds(-1);
+            var secondaryHandlingDtos = _mapper.Map<ICollection<OrderDto>>(secondaryHandling);
 
-            var IsCenter = _sessionContext.OrgIsCenter;
+            dynamic? dynamicClass = DynamicClassHelper.CreateDynamicClass(dto.ColumnInfos);
 
+            var dtos = secondaryHandlingDtos
+                .Select(stu => _mapper.Map(stu, typeof(OrderDto), dynamicClass))
+                .Cast<object>()
+                .ToList();
 
-            var queryOrder = _systemOrganizeRepository.Queryable()
-                .LeftJoin<Order>((x, o) => x.Id == o.ActualHandleOrgCode)
-                .WhereIF(dto.StartTime.HasValue, (x, o) => o.CreationTime >= dto.StartTime)
-                .WhereIF(dto.EndTime.HasValue, (x, o) => o.CreationTime <= dto.EndTime)
-                .WhereIF(IsCenter == false, (x, o) => o.ActualHandleOrgCode == _sessionContext.RequiredOrgId)
-                .GroupBy((x, o) => new { x.Id, x.Name })
-                .Select((x, o) => new OrderBiOrgDataListVo
-                {
-                    OrgName = x.Name,
-                    OrgId = x.Id,
-                    HandlerExtendedNum = SqlFunc.AggregateSum(SqlFunc.IIF(o.Status >= EOrderStatus.Filed && o.ExpiredTime < o.FiledTime, 1, 0)),
-                    NoHandlerExtendedNum = SqlFunc.AggregateSum(SqlFunc.IIF(o.Status < EOrderStatus.Filed && o.ExpiredTime < SqlFunc.GetDate(), 1, 0)),
-                }).MergeTable();
+            var stream = ExcelHelper.CreateStream(dtos);
 
-            var queryCountersign = _workflowCountersignRepository.Queryable()
-                .LeftJoin<WorkflowCountersignMember>((x, o) => x.Id == o.WorkflowCountersignId)
-                .WhereIF(dto.StartTime.HasValue, x => x.CreationTime >= dto.StartTime)
-                .WhereIF(dto.EndTime.HasValue, x => x.CreationTime <= dto.EndTime)
-                .GroupBy((x, o) => o.Key)
-                .Select((x, o) => new OrderBiOrgDataListVo
-                {
-                    OrgId = o.Key,
-                    CounterHandlerExtendedNum = SqlFunc.AggregateSum(SqlFunc.IIF(o.IsHandled && x.IsExpired.HasValue && x.IsExpired.Value == true, 1, 0)),
-                    CounterNoHandlerExtendedNum = SqlFunc.AggregateSum(SqlFunc.IIF(o.IsHandled == false && x.IsExpired.HasValue && x.IsExpired.Value == true, 1, 0)),
-                }).MergeTable();
+            return ExcelStreamResult(stream, "部门超期统计明细数据");
+        }
 
-            var query = queryOrder.LeftJoin(queryCountersign, (or, co) => or.OrgId == co.OrgId)
-                .LeftJoin<SystemOrganize>((or, co, so) => or.OrgId.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>("6")) == so.Id)
-                .GroupBy((or, co, so) => new { so.Id, so.Name })
-                .Select((or, co, so) => new OrderBiOrgDataListVo
-                {
-                    OrgName = so.Name,
-                    OrgId = so.Id,
-                    HandlerExtendedNum = SqlFunc.AggregateSum(or.HandlerExtendedNum),
-                    NoHandlerExtendedNum = SqlFunc.AggregateSum(or.NoHandlerExtendedNum),
-                    CounterHandlerExtendedNum = SqlFunc.AggregateSum(co.CounterHandlerExtendedNum),
-                    CounterNoHandlerExtendedNum = SqlFunc.AggregateSum(co.CounterNoHandlerExtendedNum)
-                }).MergeTable();
 
-            query = query.WhereIF(!string.IsNullOrEmpty(dto.Keyword), x => x.OrgName.Contains(dto.Keyword!)).Where(x => x.HandlerExtendedNum > 0 || x.NoHandlerExtendedNum > 0 || x.CounterHandlerExtendedNum > 0 || x.CounterNoHandlerExtendedNum > 0);
-            switch (dto.SortField)
-            {
-                case "handlerExtendedNum":
-                    query = dto.SortRule == 0 ? query.OrderBy(x => x.HandlerExtendedNum) : query.OrderByDescending(x => x.HandlerExtendedNum);
-                    break;
-                case "counterHandlerExtendedNum":
-                    query = dto.SortRule == 0 ? query.OrderBy(x => x.CounterHandlerExtendedNum) : query.OrderByDescending(x => x.CounterHandlerExtendedNum);
-                    break;
-                case "noHandlerExtendedNum":
-                    query = dto.SortRule == 0 ? query.OrderBy(x => x.NoHandlerExtendedNum) : query.OrderByDescending(x => x.NoHandlerExtendedNum);
-                    break;
-                case "counterNoHandlerExtendedNum":
-                    query = dto.SortRule == 0 ? query.OrderBy(x => x.CounterNoHandlerExtendedNum) : query.OrderByDescending(x => x.CounterNoHandlerExtendedNum);
-                    break;
-            }
+        /// <summary>
+        /// 部门超期统计
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        [HttpGet("org_data_list")]
+        public async Task<PagedDto<OrderBiOrgDataListVo>> OrgDataList([FromQuery] ReportPagedRequest dto)
+        {
 
-            var (total, items) = await query.ToPagedListAsync(dto, HttpContext.RequestAborted);
+            var query = _orderApplication.QueryOrgDataList(dto);
+			var (total, items) = await query.ToPagedListAsync(dto, HttpContext.RequestAborted);
             return new PagedDto<OrderBiOrgDataListVo>(total, items);
         }
 
         /// <summary>
-        /// 话务员办件统计
+        /// 部门超期统计导出
         /// </summary>
-        /// <param name="dto"></param>
         /// <returns></returns>
-        [HttpGet("centre_data_list")]
+        [HttpPost("org_data_list/_export")]
+        public async Task<FileStreamResult> OrgDataListExport([FromBody] ExportExcelDto<ReportPagedRequest> dto)
+        {
+            var query = _orderApplication.QueryOrgDataList(dto.QueryDto);
+            List<OrderBiOrgDataListVo> secondaryHandling;
+            secondaryHandling = await query.ToListAsync(HttpContext.RequestAborted);
+            dynamic? dynamicClass = DynamicClassHelper.CreateDynamicClass(dto.ColumnInfos);
+            var dtos = secondaryHandling
+             .Select(stu => _mapper.Map(stu, typeof(OrderBiOrgDataListVo), dynamicClass))
+             .Cast<object>()
+             .ToList();
+
+            var stream = ExcelHelper.CreateStream(dtos);
+
+            return ExcelStreamResult(stream, "部门超期统计数据");
+        }
+
+
+		/// <summary>
+		/// 话务员办件统计
+		/// </summary>
+		/// <param name="dto"></param>
+		/// <returns></returns>
+		[HttpGet("centre_data_list")]
         public async Task<List<OrderBiCentreDataListVo>> CentreDataList([FromQuery] ReportPagedRequest dto)
         {
             if (!dto.StartTime.HasValue || !dto.EndTime.HasValue) throw UserFriendlyException.SameMessage("请选择时间!");
@@ -2758,26 +2725,34 @@ namespace Hotline.Api.Controllers.Bi
             if (!dto.StartTime.HasValue || !dto.EndTime.HasValue)
                 throw UserFriendlyException.SameMessage("请选择时间!");
             dto.EndTime = dto.EndTime.Value.AddDays(1).AddSeconds(-1);
-            var (total, items) = await _orderSpecialDetailRepository.Queryable()
-                .Includes(x => x.OrderSpecial)
-                .WhereIF(!string.IsNullOrEmpty(dto.OrgName), x => x.OrgName.Contains(dto.OrgName!))
-                .Where(x => x.OrderSpecial.ESpecialType == ESpecialType.ReTransact)
-                .Where(x => x.OrderSpecial.CreationTime >= dto.StartTime)
-                .Where(x => x.OrderSpecial.CreationTime <= dto.EndTime)
-                .GroupBy(x => new { Time = x.OrderSpecial.CreationTime.ToString("yyyy-MM-dd"), x.OrgId, x.OrgName })
-                .Select(x => new OrderReTransactVo
-                {
-                    Time = x.OrderSpecial.CreationTime.ToString("yyyy-MM-dd"),
-                    OrgId = x.OrgId,
-                    OrgName = x.OrgName,
-                    Num = SqlFunc.AggregateCount(1)
-                }).MergeTable()
-                .OrderByIF(dto.SortRule == 0, x => x.Num, OrderByType.Asc)
-                .OrderByIF(dto.SortRule == 1, x => x.Num, OrderByType.Desc)
-                .ToPagedListAsync(dto, HttpContext.RequestAborted);
+            var query = _orderApplication.OrderReTransact(dto);
+			var (total, items) =  await query
+				.ToPagedListAsync(dto, HttpContext.RequestAborted);
             return new PagedDto<OrderReTransactVo>(total, _mapper.Map<IReadOnlyList<OrderReTransactVo>>(items));
         }
 
+        /// <summary>
+        /// 回退错件导出
+        /// </summary>
+        /// <returns></returns>
+        [HttpPost("reTransact/_export")]
+        public async Task<FileStreamResult> OrderReTransactExport([FromBody] ExportExcelDto<QueryOrderReTransactRequest> dto)
+        {
+            var query = _orderApplication.OrderReTransact(dto.QueryDto);
+            List<OrderReTransactVo> secondaryHandling;
+            secondaryHandling = await query.ToListAsync(HttpContext.RequestAborted);
+            dynamic? dynamicClass = DynamicClassHelper.CreateDynamicClass(dto.ColumnInfos);
+            var dtos = secondaryHandling
+             .Select(stu => _mapper.Map(stu, typeof(OrderReTransactVo), dynamicClass))
+             .Cast<object>()
+             .ToList();
+
+            var stream = ExcelHelper.CreateStream(dtos);
+
+            return ExcelStreamResult(stream, "回退错件统计数据");
+        }
+
+
         /// <summary>
         /// 回退错件明细
         /// </summary>
@@ -2789,24 +2764,52 @@ namespace Hotline.Api.Controllers.Bi
             if (!dto.StartTime.HasValue || !dto.EndTime.HasValue)
                 throw UserFriendlyException.SameMessage("请选择时间!");
             dto.EndTime = dto.EndTime.Value.AddDays(1).AddSeconds(-1);
-            var (total, items) = await _orderSpecialDetailRepository.Queryable()
-                .Includes(x => x.OrderSpecial, s => s.Order)
-                .WhereIF(!string.IsNullOrEmpty(dto.OrgName), x => x.OrgName.Contains(dto.OrgName!))
-                .WhereIF(!string.IsNullOrEmpty(dto.ErrorName), x => x.ErrorName.Contains(dto.ErrorName!))
-                .WhereIF(!string.IsNullOrEmpty(dto.No), x => x.OrderSpecial!.Order!.No!.Contains(dto.No!))
-                .Where(x => x.OrderSpecial.ESpecialType == ESpecialType.ReTransact)
-                .Where(x => x.OrderSpecial.CreationTime >= dto.StartTime)
-                .Where(x => x.OrderSpecial.CreationTime <= dto.EndTime)
-                .ToPagedListAsync(dto, HttpContext.RequestAborted);
+
+            var query = _orderApplication.QueryOrderSourceDetail(dto);
+			var (total, items) = await
+				query.ToPagedListAsync(dto, HttpContext.RequestAborted);
             return new PagedDto<OrderSpecialDetailDto>(total, _mapper.Map<IReadOnlyList<OrderSpecialDetailDto>>(items));
         }
 
+        /// <summary>
+        /// 回退错件明细导出
+        /// </summary>
+        /// <returns></returns>
+        [HttpPost("reTransact_detail/_export")]
+        public async Task<FileStreamResult> OrderReTransactDetailExport([FromBody] ExportExcelDto<QueryOrderReTransactDetailRequest> dto)
+        {
+            var query = _orderApplication.QueryOrderSourceDetail(dto.QueryDto);
+            List<OrderSpecialDetail> secondaryHandling;
+            if (dto.IsExportAll)
+            {
+                secondaryHandling = await query.ToListAsync(HttpContext.RequestAborted);
+            }
+            else
+            {
+                var (_, items) = await query.ToPagedListAsync(dto.QueryDto, HttpContext.RequestAborted);
+                secondaryHandling = items;
+            }
+
+            var secondaryHandlingDtos = _mapper.Map<ICollection<OrderSpecialDetailDto>>(secondaryHandling);
+
+            dynamic? dynamicClass = DynamicClassHelper.CreateDynamicClass(dto.ColumnInfos);
+
+            var dtos = secondaryHandlingDtos
+                .Select(stu => _mapper.Map(stu, typeof(OrderSpecialDetailDto), dynamicClass))
+                .Cast<object>()
+                .ToList();
+
+            var stream = ExcelHelper.CreateStream(dtos);
+
+            return ExcelStreamResult(stream, "回退错件明细列表数据");
+        }
+
         /// <summary>
         /// 获取基本信息
         /// </summary>
         /// <param name="id"></param>
         /// <returns></returns>
-		[HttpGet("reTransact_base")]
+        [HttpGet("reTransact_base")]
         public async Task<object> ReTransactBaseData()
         {
             var rsp = new

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

@@ -3216,7 +3216,7 @@ public class OrderController : BaseController
             //  )))
             //.Where(d => d.Workflow.Steps.Any(s => s.Status < EWorkflowStepStatus.Handled && s.HandlerOrgId == OrgSeedData.CenterId))
             .LeftJoin<WorkflowStep>((d, step) => d.Id == step.ExternalId)
-            .Where((d,step)=> (step.Id  == null || step.HandlerOrgId == OrgSeedData.CenterId))
+            .Where((d, step) => (step.Id == null || (step.HandlerOrgId == OrgSeedData.CenterId && step.Status < EWorkflowStepStatus.Handled )))
             .Where(d => d.Source < ESource.MLSQ || d.Source > ESource.WZSC)
             .Where(d => d.Status != EOrderStatus.BackToProvince && d.Status < EOrderStatus.Filed)
             .WhereIF(!string.IsNullOrEmpty(dto.No), d => d.No!.Contains(dto.No!))

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

@@ -96,5 +96,33 @@ namespace Hotline.Application.Orders
         /// <param name="dto"></param>
         /// <returns></returns>
         ISugarQueryable<Order> QueryOrderSourceDetail(QueryOrderSourceDetailRequest dto);
+
+		/// <summary>
+		/// 部门超期统计
+		/// </summary>
+		/// <param name="dto"></param>
+		/// <returns></returns>
+		ISugarQueryable<OrderBiOrgDataListVo> QueryOrgDataList(ReportPagedRequest dto);
+
+        /// <summary>
+        /// 部门超期统计明细
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+		ISugarQueryable<Order> QueryOrgDataListDetail(OrgDataListDetailRequest dto);
+
+		/// <summary>
+		/// 回退错件统计
+		/// </summary>
+		/// <param name="dto"></param>
+		/// <returns></returns>
+		ISugarQueryable<OrderReTransactVo> OrderReTransact(QueryOrderReTransactRequest dto);
+
+		/// <summary>
+		/// 回退错件明细统计
+        /// </summary>
+		/// <param name="dto"></param>
+		/// <returns></returns>
+		ISugarQueryable<OrderSpecialDetail> QueryOrderSourceDetail(QueryOrderReTransactDetailRequest dto);
 	}
 }

+ 171 - 8
src/Hotline.Application/Orders/OrderApplication.cs

@@ -32,6 +32,7 @@ using XF.Domain.Constants;
 using XF.Domain.Dependency;
 using XF.Domain.Exceptions;
 using XF.Domain.Repository;
+using Hotline.Repository.SqlSugar.System;
 
 namespace Hotline.Application.Orders;
 
@@ -51,8 +52,11 @@ public class OrderApplication : IOrderApplication, IScopeDependency
     private readonly IRepository<OrderVisitDetail> _orderVisitDetailRepository;
     private readonly IQualityApplication _qualityApplication;
     private readonly ICapPublisher _capPublisher;
+    private readonly IRepository<SystemOrganize> _systemOrganizeRepository;
+    private readonly IRepository<WorkflowCountersign> _workflowCountersignRepository;
+    private readonly IRepository<OrderSpecialDetail> _orderSpecialDetailRepository;
 
-    public OrderApplication(
+	public OrderApplication(
         IOrderDomainService orderDomainService,
         IOrderRepository orderRepository,
         IWorkflowDomainService workflowDomainService,
@@ -66,8 +70,11 @@ public class OrderApplication : IOrderApplication, IScopeDependency
         IRepository<OrderVisit> orderVisitRepository,
         IRepository<OrderVisitDetail> orderVisitDetailRepository,
         IQualityApplication qualityApplication,
-        ICapPublisher capPublisher
-        )
+        ICapPublisher capPublisher,
+        IRepository<SystemOrganize> systemOrganizeRepository,
+        IRepository<WorkflowCountersign> workflowCountersignRepository,
+        IRepository<OrderSpecialDetail> orderSpecialDetailRepository
+		)
     {
         _orderDomainService = orderDomainService;
         _workflowDomainService = workflowDomainService;
@@ -83,7 +90,10 @@ public class OrderApplication : IOrderApplication, IScopeDependency
         _orderVisitDetailRepository = orderVisitDetailRepository;
         _qualityApplication = qualityApplication;
         _capPublisher = capPublisher;
-    }
+		_systemOrganizeRepository = systemOrganizeRepository;
+		_workflowCountersignRepository = workflowCountersignRepository;
+        _orderSpecialDetailRepository = orderSpecialDetailRepository;
+	}
 
     /// <summary>
     /// 更新工单办理期满时间(延期调用,其他不调用)
@@ -568,15 +578,168 @@ public class OrderApplication : IOrderApplication, IScopeDependency
             .Where(d => d.SourceChannel != null && d.SourceChannel != "");
     }
 
-    #region private
+    /// <summary>
+    /// 部门超期统计
+    /// </summary>
+    /// <param name="dto"></param>
+    /// <returns></returns>
+    public ISugarQueryable<OrderBiOrgDataListVo> QueryOrgDataList(ReportPagedRequest dto)
+    {
+		if (!dto.StartTime.HasValue || !dto.EndTime.HasValue) throw UserFriendlyException.SameMessage("请选择时间!");
+
+		dto.EndTime = dto.EndTime.Value.AddDays(1).AddSeconds(-1);
+
+		var IsCenter = _sessionContext.OrgIsCenter;
+
+
+		var queryOrder = _systemOrganizeRepository.Queryable()
+			.LeftJoin<Order>((x, o) => x.Id == o.ActualHandleOrgCode)
+			.WhereIF(dto.StartTime.HasValue, (x, o) => o.CreationTime >= dto.StartTime)
+			.WhereIF(dto.EndTime.HasValue, (x, o) => o.CreationTime <= dto.EndTime)
+			.WhereIF(IsCenter == false, (x, o) => o.ActualHandleOrgCode == _sessionContext.RequiredOrgId)
+			.GroupBy((x, o) => new { x.Id, x.Name })
+			.Select((x, o) => new OrderBiOrgDataListVo
+			{
+				OrgName = x.Name,
+				OrgId = x.Id,
+				HandlerExtendedNum = SqlFunc.AggregateSum(SqlFunc.IIF(o.Status >= EOrderStatus.Filed && o.ExpiredTime < o.FiledTime, 1, 0)),
+				NoHandlerExtendedNum = SqlFunc.AggregateSum(SqlFunc.IIF(o.Status < EOrderStatus.Filed && o.ExpiredTime < SqlFunc.GetDate(), 1, 0)),
+			}).MergeTable();
+
+		var queryCountersign = _workflowCountersignRepository.Queryable()
+			.LeftJoin<WorkflowCountersignMember>((x, o) => x.Id == o.WorkflowCountersignId)
+			.WhereIF(dto.StartTime.HasValue, x => x.CreationTime >= dto.StartTime)
+			.WhereIF(dto.EndTime.HasValue, x => x.CreationTime <= dto.EndTime)
+			.GroupBy((x, o) => o.Key)
+			.Select((x, o) => new OrderBiOrgDataListVo
+			{
+				OrgId = o.Key,
+				CounterHandlerExtendedNum = SqlFunc.AggregateSum(SqlFunc.IIF(o.IsHandled && x.IsExpired.HasValue && x.IsExpired.Value == true, 1, 0)),
+				CounterNoHandlerExtendedNum = SqlFunc.AggregateSum(SqlFunc.IIF(o.IsHandled == false && x.IsExpired.HasValue && x.IsExpired.Value == true, 1, 0)),
+			}).MergeTable();
+
+		var query = queryOrder.LeftJoin(queryCountersign, (or, co) => or.OrgId == co.OrgId)
+			.LeftJoin<SystemOrganize>((or, co, so) => or.OrgId.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>("6")) == so.Id)
+			.GroupBy((or, co, so) => new { so.Id, so.Name })
+			.Select((or, co, so) => new OrderBiOrgDataListVo
+			{
+				OrgName = so.Name,
+				OrgId = so.Id,
+				HandlerExtendedNum = SqlFunc.AggregateSum(or.HandlerExtendedNum),
+				NoHandlerExtendedNum = SqlFunc.AggregateSum(or.NoHandlerExtendedNum),
+				CounterHandlerExtendedNum = SqlFunc.AggregateSum(co.CounterHandlerExtendedNum),
+				CounterNoHandlerExtendedNum = SqlFunc.AggregateSum(co.CounterNoHandlerExtendedNum)
+			}).MergeTable();
+
+		query = query.WhereIF(!string.IsNullOrEmpty(dto.Keyword), x => x.OrgName.Contains(dto.Keyword!)).Where(x => x.HandlerExtendedNum > 0 || x.NoHandlerExtendedNum > 0 || x.CounterHandlerExtendedNum > 0 || x.CounterNoHandlerExtendedNum > 0);
+		switch (dto.SortField)
+		{
+			case "handlerExtendedNum":
+				query = dto.SortRule == 0 ? query.OrderBy(x => x.HandlerExtendedNum) : query.OrderByDescending(x => x.HandlerExtendedNum);
+				break;
+			case "counterHandlerExtendedNum":
+				query = dto.SortRule == 0 ? query.OrderBy(x => x.CounterHandlerExtendedNum) : query.OrderByDescending(x => x.CounterHandlerExtendedNum);
+				break;
+			case "noHandlerExtendedNum":
+				query = dto.SortRule == 0 ? query.OrderBy(x => x.NoHandlerExtendedNum) : query.OrderByDescending(x => x.NoHandlerExtendedNum);
+				break;
+			case "counterNoHandlerExtendedNum":
+				query = dto.SortRule == 0 ? query.OrderBy(x => x.CounterNoHandlerExtendedNum) : query.OrderByDescending(x => x.CounterNoHandlerExtendedNum);
+				break;
+		}
+        return query;
+	}
 
     /// <summary>
-    /// 接受外部工单(除省平台)
+    /// 部门超期统计明细
     /// </summary>
     /// <param name="dto"></param>
-    /// <param name="cancellationToken"></param>
     /// <returns></returns>
-    private async Task<AddOrderResponse> ReceiveOrderFromOtherPlatformAsync(AddOrderDto dto, List<FileDto> files,
+	public ISugarQueryable<Order> QueryOrgDataListDetail(OrgDataListDetailRequest dto)
+	{
+		dto.EndTime = dto.EndTime.AddDays(1).AddSeconds(-1);
+
+		var quer = _orderRepository.Queryable()
+			.InnerJoin<SystemOrganize>((x, so) => x.ActualHandleOrgCode == so.Id)
+			.Where(x => x.CreationTime >= dto.StartTime && x.CreationTime <= dto.EndTime)
+			.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 =>
+				(x.Status >= EOrderStatus.Filed && x.ExpiredTime < x.FiledTime) || (x.Status < EOrderStatus.Filed && x.ExpiredTime < SqlFunc.GetDate()))
+			.WhereIF(!string.IsNullOrEmpty(dto.OrgCode) && dto.QueryType is 1 or 3 && dto.OrgCode == "001", x => x.ActualHandleOrgCode == dto.OrgCode)
+			.WhereIF(!string.IsNullOrEmpty(dto.OrgCode) && dto.QueryType is 1 or 3 && dto.OrgCode != "001", x => x.ActualHandleOrgCode.StartsWith(dto.OrgCode))
+			.MergeTable();
+
+		if (dto.QueryType is 2 or 4 or 5)
+		{
+			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(dto.QueryType == 2, (x, o) => o.IsHandled == true) //会签已办超期
+				.WhereIF(dto.QueryType == 4, (x, o) => o.IsHandled == false) //会签待办超期
+				.WhereIF(!string.IsNullOrEmpty(dto.OrgCode) && dto.QueryType is 2 or 4 or 5, (x, o) => o.Key.StartsWith(dto.OrgCode))
+				//.GroupBy((x,o)=>x.WorkflowId)
+				.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()
+			.Includes(x => x.OrderSpecial)
+			.WhereIF(!string.IsNullOrEmpty(dto.OrgName), x => x.OrgName.Contains(dto.OrgName!))
+			.Where(x => x.OrderSpecial.ESpecialType == ESpecialType.ReTransact)
+			.Where(x => x.OrderSpecial.CreationTime >= dto.StartTime)
+			.Where(x => x.OrderSpecial.CreationTime <= dto.EndTime)
+			.GroupBy(x => new { Time = x.OrderSpecial.CreationTime.ToString("yyyy-MM-dd"), x.OrgId, x.OrgName })
+			.Select(x => new OrderReTransactVo
+			{
+				Time = x.OrderSpecial.CreationTime.ToString("yyyy-MM-dd"),
+				OrgId = x.OrgId,
+				OrgName = x.OrgName,
+				Num = SqlFunc.AggregateCount(1)
+			}).MergeTable()
+			.OrderByIF(dto.SortRule == 0, x => x.Num, OrderByType.Asc)
+			.OrderByIF(dto.SortRule == 1, x => x.Num, OrderByType.Desc); ;
+    }
+    /// <summary>
+    /// 回退错件明细统计
+    /// </summary>
+    /// <param name="dto"></param>
+    /// <returns></returns>
+    public ISugarQueryable<OrderSpecialDetail> QueryOrderSourceDetail(QueryOrderReTransactDetailRequest dto)
+    {
+
+	    return  _orderSpecialDetailRepository.Queryable()
+		    .Includes(x => x.OrderSpecial, s => s.Order)
+		    .WhereIF(!string.IsNullOrEmpty(dto.OrgName), x => x.OrgName.Contains(dto.OrgName!))
+		    .WhereIF(!string.IsNullOrEmpty(dto.ErrorName), x => x.ErrorName.Contains(dto.ErrorName!))
+		    .WhereIF(!string.IsNullOrEmpty(dto.No), x => x.OrderSpecial!.Order!.No!.Contains(dto.No!))
+		    .Where(x => x.OrderSpecial.ESpecialType == ESpecialType.ReTransact)
+		    .Where(x => x.OrderSpecial.CreationTime >= dto.StartTime)
+		    .Where(x => x.OrderSpecial.CreationTime <= dto.EndTime);
+	}
+
+	#region private
+
+	/// <summary>
+	/// 接受外部工单(除省平台)
+	/// </summary>
+	/// <param name="dto"></param>
+	/// <param name="cancellationToken"></param>
+	/// <returns></returns>
+	private async Task<AddOrderResponse> ReceiveOrderFromOtherPlatformAsync(AddOrderDto dto, List<FileDto> files,
         ISessionContext current, CancellationToken cancellationToken)
     {
         if (string.IsNullOrEmpty(dto.ExternalId))