Просмотр исходного кода

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

Dun.Jason 1 неделя назад
Родитель
Сommit
a55197e790
38 измененных файлов с 928 добавлено и 348 удалено
  1. 37 1
      src/Hotline.Api/Controllers/Exam/TrainRecordController.cs
  2. 71 2
      src/Hotline.Api/Controllers/Exam/UserExamController.cs
  3. 59 0
      src/Hotline.Api/Controllers/KnowledgeController.cs
  4. 32 6
      src/Hotline.Api/Controllers/OrderController.cs
  5. 9 1
      src/Hotline.Api/Controllers/Snapshot/SnapshotController.cs
  6. 1 1
      src/Hotline.Api/config/appsettings.Development.json
  7. 2 0
      src/Hotline.Application/Exam/Constants/ApiRoutes/TrainRecordApiRoute.cs
  8. 4 0
      src/Hotline.Application/Exam/Constants/ApiRoutes/UserExamApiRoute.cs
  9. 8 1
      src/Hotline.Application/Exam/Interface/ExamManages/IUserExamService.cs
  10. 34 14
      src/Hotline.Application/Exam/Service/ExamManages/UserExamService.cs
  11. 4 1
      src/Hotline.Application/Exam/Service/Trains/TrainRecordService.cs
  12. 5 7
      src/Hotline.Application/Jobs/ApptaskJob.cs
  13. 13 0
      src/Hotline.Application/Mappers/ExamMapperConfigs.cs
  14. 3 1
      src/Hotline.Application/Mappers/OrderMapperConfigs.cs
  15. 1 1
      src/Hotline.Application/OrderApp/OrderDelayApp/OrderDelayApplication.cs
  16. 2 2
      src/Hotline.Application/OrderApp/OrderDelayApp/OrderDelayReviewTaskExecutor.cs
  17. 2 7
      src/Hotline.Application/OrderApp/OrderDelayApp/OrderDelayReviewWithSessionRequest.cs
  18. 2 2
      src/Hotline.Application/OrderApp/OrderVisitApp/VoiceVisitTaskExecutor.cs
  19. 2 1
      src/Hotline.Application/OrderApp/OrderVisitApp/VoiceVisitWithSessionRequest.cs
  20. 4 0
      src/Hotline.Application/Snapshot/BiSnapshotApplication.cs
  21. 360 127
      src/Hotline.Application/StatisticalReport/OrderReportApplication.cs
  22. 5 1
      src/Hotline.Share/Dtos/Knowledge/KnowledgeDataDto.cs
  23. 134 112
      src/Hotline.Share/Dtos/Knowledge/KnowledgeDto.cs
  24. 5 0
      src/Hotline.Share/Dtos/Order/OrderDelay/OrderDelayDto.cs
  25. 2 0
      src/Hotline.Share/Requests/Exam/AnalysisReportRequest.cs
  26. 0 15
      src/Hotline/Authentications/FakeSessionContext.cs
  27. 56 19
      src/Hotline/Authentications/SessionContextManager.cs
  28. 4 2
      src/Hotline/Authentications/SessionContextProvider.cs
  29. 10 4
      src/Hotline/BatchTask/ApptaskDomainService.cs
  30. 2 1
      src/Hotline/BatchTask/IApptaskRequest.cs
  31. 5 0
      src/Hotline/Caching/Interfaces/ISystemSettingCacheManager.cs
  32. 10 0
      src/Hotline/Caching/Services/SystemSettingCacheManager.cs
  33. 18 18
      src/Hotline/KnowledgeBase/KnowledgeDomainService.cs
  34. 5 0
      src/Hotline/Settings/SettingConstants.cs
  35. 1 1
      src/XF.Domain/Authentications/ISessionContextProvider.cs
  36. 8 0
      test/Hotline.Tests/Application/BiSnapshotApplicationTest.cs
  37. 3 0
      test/Hotline.Tests/Application/SystemSettingCacheManagerTest.cs
  38. 5 0
      test/Hotline.Tests/Controller/TestSessionContextManager.cs

+ 37 - 1
src/Hotline.Api/Controllers/Exam/TrainRecordController.cs

@@ -1,13 +1,17 @@
 using DocumentFormat.OpenXml.Office2010.ExcelAc;
 using Exam.Infrastructure.Data.Entity;
 using Exam.Share.Dtos.Trains;
+using Exam.Share.ViewResponses.Exam;
 using Exam.Share.ViewResponses.Train;
 using Hotline.Application.Exam.Constants.ApiRoutes;
 using Hotline.Application.Exam.Interface.Train;
+using Hotline.Share.Dtos.Order;
 using Hotline.Share.Dtos.Trains;
 using Hotline.Share.Requests.Exam;
 using Hotline.Share.Requests.Train;
 using Hotline.Share.ViewResponses.Trains;
+using Hotline.Tools;
+using MapsterMapper;
 using Microsoft.AspNetCore.Http;
 using Microsoft.AspNetCore.Mvc;
 using Train.Application.Interface.Train;
@@ -17,10 +21,12 @@ namespace Hotline.Api.Controllers.Exam
     public class TrainRecordController : BaseController
     {
         private readonly ITrainRecordService _trainRecordService;
+        private readonly IMapper _mapper;
 
-        public TrainRecordController(ITrainRecordService trainRecordService)
+        public TrainRecordController(ITrainRecordService trainRecordService,IMapper mapper)
         {
             this._trainRecordService = trainRecordService;
+            this._mapper = mapper;
         }
 
         /// <summary>
@@ -102,6 +108,36 @@ namespace Hotline.Api.Controllers.Exam
             return await _trainRecordService.AnalysisTrainResult(trainResultReportPagedRequest);
         }
 
+        /// <summary>
+        /// 导出培训结果统计
+        /// </summary>
+        /// <param name="exportExcelDto"></param>
+        /// <returns></returns>
+        [HttpPost(TrainRecordApiRoute.ExportTrainResult)]
+        public async Task<FileStreamResult> ExportTrainResult([FromBody] ExportExcelDto<TrainResultReportPagedRequest> exportExcelDto)
+        {
+            if (exportExcelDto.IsExportAll)
+            {
+                exportExcelDto.QueryDto.IsPaged = false;
+            }
+
+            var result = await _trainRecordService.AnalysisTrainResult(exportExcelDto.QueryDto);
+
+            var items = result.Items;
+
+            dynamic? dynamicClass = DynamicClassHelper.CreateDynamicClass<TrainResultViewResponse>(exportExcelDto.ColumnInfos ?? new List<ColumnInfo>());
+
+            var dtos = items
+                .Select(stu => _mapper.Map(stu, typeof(TrainResultViewResponse), dynamicClass))
+                .Cast<object>()
+                .ToList();
+
+            var stream = ExcelHelper.CreateStream(dtos);
+
+            return ExcelStreamResult(stream, "导出培训结果统计");
+
+        }
+
         /// <summary>
         /// 计算培训结果比例
         /// </summary>

+ 71 - 2
src/Hotline.Api/Controllers/Exam/UserExamController.cs

@@ -11,6 +11,9 @@ using Microsoft.AspNetCore.Mvc;
 using System.ComponentModel;
 using Hotline.Application.Exam.Interface.ExamManages;
 using Exam.Infrastructure.Data.Entity;
+using Hotline.Share.Dtos.Order;
+using Hotline.Tools;
+using MapsterMapper;
 
 namespace Hotline.Api.Controllers.Exam
 {
@@ -18,11 +21,13 @@ namespace Hotline.Api.Controllers.Exam
     {
         private readonly IUserExamService _userExamService;
         private readonly IExamManageService _examManageService;
+        private readonly IMapper _mapper;
 
-        public UserExamController(IUserExamService userExamService,IExamManageService examManageService)
+        public UserExamController(IUserExamService userExamService,IExamManageService examManageService,IMapper mapper)
         {
             this._userExamService = userExamService;
             this._examManageService = examManageService;
+            this._mapper = mapper;
         }
 
         /// <summary>
@@ -190,7 +195,38 @@ namespace Hotline.Api.Controllers.Exam
         [HttpPost(UserExamApiRoute.GetUnExamUsers)]
         public async Task<UnExamUserPageViewResponse> GetUnExamUsers([FromBody] UnExamUserReportPagedRequest unExamUserReportPagedRequest)
         {
-            return await _userExamService.GetUnExamUsers(unExamUserReportPagedRequest);
+            return await _userExamService.GetUnExamUsersPaged(unExamUserReportPagedRequest);
+        }
+
+        /// <summary>
+        /// 导出未考试的考生信息
+        /// </summary>
+        /// <param name="exportExcelDto"></param>
+        /// <returns></returns>
+        [HttpPost(UserExamApiRoute.ExportUnExamUsers)]
+        public async Task<FileStreamResult> ExportUnExamUsers([FromBody] ExportExcelDto<UnExamUserReportPagedRequest> exportExcelDto)
+        {
+            if (exportExcelDto.IsExportAll)
+            {
+                exportExcelDto.QueryDto.IsPaged = false;
+            }
+            var result = await _userExamService.GetUnExamUsersPaged(exportExcelDto.QueryDto);
+
+            var items = result.Items;
+
+            var viewResponses = _mapper.Map<ICollection<UnExamUserViewResponse>>(items);
+
+            dynamic? dynamicClass = DynamicClassHelper.CreateDynamicClass<UnExamUserViewResponse>(exportExcelDto.ColumnInfos??new List<ColumnInfo>());
+
+            var dtos = viewResponses
+                .Select(stu => _mapper.Map(stu, typeof(UnExamUserViewResponse), dynamicClass))
+                .Cast<object>()
+                .ToList();
+
+            var stream = ExcelHelper.CreateStream(dtos);
+
+            return ExcelStreamResult(stream, "未考试的考生信息");
+
         }
 
         /// <summary>
@@ -205,6 +241,39 @@ namespace Hotline.Api.Controllers.Exam
             return await _userExamService.GetUserExamResults(userExamResultReportPagedRequest); 
         }
 
+
+        /// <summary>
+        /// 导出成绩统计分析
+        /// </summary>
+        /// <param name="exportExcelDto"></param>
+        /// <returns></returns>
+
+        [HttpPost(UserExamApiRoute.ExportUserExamResults)]
+        public async Task<FileStreamResult> ExportUserExamResults([FromBody] ExportExcelDto<UserExamResultReportPagedRequest> exportExcelDto)
+        {
+            if (exportExcelDto.IsExportAll)
+            {
+                exportExcelDto.QueryDto.IsPaged = false;
+            }
+
+            var result = await _userExamService.GetUserExamResults(exportExcelDto.QueryDto);
+
+            var items = result.Items;
+
+            dynamic? dynamicClass = DynamicClassHelper.CreateDynamicClass<UserExamResultViewResponse>(exportExcelDto.ColumnInfos ?? new List<ColumnInfo>());
+
+            var dtos = items
+                .Select(stu => _mapper.Map(stu, typeof(UserExamResultViewResponse), dynamicClass))
+                .Cast<object>()
+                .ToList();
+
+            var stream = ExcelHelper.CreateStream(dtos);
+
+            return ExcelStreamResult(stream, "成绩统计分析");
+        }
+
+
+
         /// <summary>
         /// 查看考试试题
         /// </summary>

+ 59 - 0
src/Hotline.Api/Controllers/KnowledgeController.cs

@@ -36,6 +36,7 @@ using MediatR;
 using Microsoft.AspNetCore.Mvc;
 using Microsoft.Extensions.Options;
 using MiniExcelLibs;
+using NPOI.SS.Formula.Functions;
 using SqlSugar;
 using System.Text;
 using XF.Domain.Authentications;
@@ -319,6 +320,28 @@ namespace Hotline.Api.Controllers
                 throw UserFriendlyException.SameMessage("知识上架失败");
         }
 
+        /// <summary>
+        /// 批量上架
+        /// </summary>
+        /// <returns></returns>
+        [HttpPost("ontheshelfbatch")]
+        [LogFilter("批量上架")]
+        public async Task KnowledgeOnTheShelfBatch([FromBody] UnshelveBatchRequest request)
+        {
+            var kns = request.KnowledgeIds.Select(d => new Knowledge
+            {
+                Id = d,
+                Status = EKnowledgeStatus.OnShelf,
+                OnShelfTime = DateTime.Now,
+                OffShelfTime = null
+            }).ToList();
+            await _knowledgeRepository.Updateable(kns)
+                .UpdateColumns(d => d.Status)
+                .Where(d => d.Status == EKnowledgeStatus.OffShelf)
+                .ExecuteCommandAsync(HttpContext.RequestAborted);
+        }
+
+
         /// <summary>
         /// 知识库-标题
         /// </summary>
@@ -444,6 +467,42 @@ namespace Hotline.Api.Controllers
             }
         }
 
+        /// <summary>
+        /// 知识库-修改(new)
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        [HttpPut("update-and-approve-batch")]
+        [LogFilter("知识修改批量")]
+        public async Task UpdateAndApproveBatch([FromBody] UpdateKnowledgeAndApproveBatchDto dto)
+        {
+            foreach (var item in dto.KnowledgeIds)
+            {
+                var knowledge = await _knowledgeRepository.GetAsync(d => d.Id == item && d.Status == EKnowledgeStatus.Drafts);
+                UpdateKnowledgeAndApproveDto ukaa = _mapper.Map<UpdateKnowledgeAndApproveDto>(knowledge);
+                ukaa.Opinion = dto.Opinion;
+
+                var kn = await _knowledgeDomainService.UpdateKnowledgeAsync(ukaa, HttpContext.RequestAborted);
+
+                var exists = await _knowledgeApproRepository.Queryable()
+                    .AnyAsync(d => d.KnowledgeId == item && d.KnowledgeApproveStatus == EKnowledgeApproveStatus.Unhandle,
+                        HttpContext.RequestAborted);
+                if (!exists)
+                {
+                    if (kn.Status == EKnowledgeStatus.Drafts)
+                    {
+                        await _knowledgeDomainService.AddKnowledgeApproveAsync(EKnowledgeApproveType.Add, kn, null,
+                            HttpContext.RequestAborted);
+                    }
+                    else
+                    {
+                        await _knowledgeDomainService.AddKnowledgeApproveAsync(EKnowledgeApproveType.Update, kn, dto.Opinion,
+                            HttpContext.RequestAborted);
+                    }
+                }
+            }
+        }
+
         /// <summary>
         /// 批量更新公开状态(new)
         /// </summary>

+ 32 - 6
src/Hotline.Api/Controllers/OrderController.cs

@@ -532,7 +532,7 @@ public class OrderController : BaseController
             throw UserFriendlyException.SameMessage("当前状态无法发布");
 
 
-        if(order.SourceChannelCode=="SZMHD" && order.IsProvince && dto.PublishState && dto.IsOpenReview is null)
+        if (order.SourceChannelCode == "SZMHD" && order.IsProvince && dto.PublishState && dto.IsOpenReview is null)
         {
             throw UserFriendlyException.SameMessage("公开信件必须选择开展保密审查");
         }
@@ -821,7 +821,7 @@ public class OrderController : BaseController
             Content = order.Content,
             ActualOpinion = order.FileOpinion,
             IsPublic = order.IsPublic,
-            IsProvincePublic = (order.SourceChannelCode == "SZMHD" && order.IsProvince == true) ? true :false,
+            IsProvincePublic = (order.SourceChannelCode == "SZMHD" && order.IsProvince == true) ? true : false,
             NetizenEvaluateType = _sysDicDataCacheManager.GetSysDicDataCache(SysDicTypeConsts.NetizenEvaluateType)
                 .Select(x => new Kv { Key = x.DicDataValue, Value = x.DicDataName }).ToList()
         };
@@ -2921,7 +2921,7 @@ public class OrderController : BaseController
         }
         var rsp = new
         {
-            DelayStatisticalNodes= delayStatisticalNodesList,
+            DelayStatisticalNodes = delayStatisticalNodesList,
             DelayState = EnumExts.GetDescriptions<EDelayState>(),
             QueryDelayState = EnumExts.GetDescriptions<EQueryDelayState>(),
             TimeType = EnumExts.GetDescriptions<ETimeType>(),
@@ -3655,9 +3655,23 @@ public class OrderController : BaseController
     {
         var orders = await _orderApplication.QueryTravel(dto)
             .ToPageListWithoutTotalAsync(dto, HttpContext.RequestAborted);
+
+        orders.ForEach(x =>
+        {
+            if (x.OrderVisits != null && x.OrderVisits.Count > 0)
+            {
+                x.OrgProcessingResults = x.OrderVisits[0].NowEvaluate;
+            }
+            else
+            {
+                x.OrgProcessingResults = null;
+            }
+        });
+
         var list = _mapper.Map<IReadOnlyList<OrderDto>>(orders);
         if (_appOptions.Value.IsLuZhou && !_sessionContext.OrgIsCenter)
             list = list.Select(p => p.DataMask(false)).ToList();
+
         return list;
     }
 
@@ -3687,6 +3701,18 @@ public class OrderController : BaseController
             orders = items;
         }
 
+        orders.ForEach(x =>
+        {
+            if (x.OrderVisits != null && x.OrderVisits.Count > 0)
+            {
+                x.OrgProcessingResults = x.OrderVisits[0].NowEvaluate;
+            }
+            else
+            {
+                x.OrgProcessingResults = null;
+            }
+        });
+
         var orderDtos = _mapper.Map<ICollection<OrderDto>>(orders);
 
         if (_appOptions.Value.IsLuZhou)
@@ -6263,9 +6289,9 @@ public class OrderController : BaseController
             OrderTags = _sysDicDataCacheManager.GetSysDicDataCache(SysDicTypeConsts.OrderTag),
             FocusOnEvents = _sysDicDataCacheManager.GetSysDicDataCache(SysDicTypeConsts.FocusOnEvent),
             PoliticalIdentity = _sysDicDataCacheManager.GetSysDicDataCache(SysDicTypeConsts.PoliticalIdentity),
-			SeatEvaluate = EnumExts.GetDescriptions<ESeatEvaluate>(),
-			VisitSatisfaction = _sysDicDataCacheManager.GetSysDicDataCache(SysDicTypeConsts.VisitSatisfaction),
-		};
+            SeatEvaluate = EnumExts.GetDescriptions<ESeatEvaluate>(),
+            VisitSatisfaction = _sysDicDataCacheManager.GetSysDicDataCache(SysDicTypeConsts.VisitSatisfaction),
+        };
         return rsp;
     }
 

+ 9 - 1
src/Hotline.Api/Controllers/Snapshot/SnapshotController.cs

@@ -3,6 +3,7 @@ using Fw.Utility.UnifyResponse;
 using Hotline.Api.Filter;
 using Hotline.Application.Snapshot.Contracts;
 using Hotline.Caching.Interfaces;
+using Hotline.Caching.Services;
 using Hotline.File;
 using Hotline.Orders;
 using Hotline.Repository.SqlSugar.Snapshot;
@@ -53,8 +54,9 @@ public class SnapshotController : BaseController
     private readonly IThirdAccountRepository _thirdAccountRepository;
     private readonly ILogger<SnapshotController> _logger;
     private readonly IRepository<SystemWebPageSetting> _webPageRepository;
+    private readonly ISystemSettingCacheManager _systemSettingCacheManager;
 
-    public SnapshotController(IRepository<Order> orderRepository, ISnapshotApplication snapshotApplication, ISystemAreaDomainService systemAreaDomainService, IIndustryRepository industryRepository, IOrderDomainService orderDomainService, IFileRepository fileRepository, IOrderSnapshotRepository orderSnapshotRepository, ISystemDicDataCacheManager systemDicDataCacheManager, ISessionContext sessionContext, IThirdAccountRepository thirdAccountRepository, ILogger<SnapshotController> logger, IRepository<SystemWebPageSetting> webPageRepository)
+    public SnapshotController(IRepository<Order> orderRepository, ISnapshotApplication snapshotApplication, ISystemAreaDomainService systemAreaDomainService, IIndustryRepository industryRepository, IOrderDomainService orderDomainService, IFileRepository fileRepository, IOrderSnapshotRepository orderSnapshotRepository, ISystemDicDataCacheManager systemDicDataCacheManager, ISessionContext sessionContext, IThirdAccountRepository thirdAccountRepository, ILogger<SnapshotController> logger, IRepository<SystemWebPageSetting> webPageRepository, ISystemSettingCacheManager systemSettingCacheManager)
     {
         _orderRepository = orderRepository;
         _snapshotApplication = snapshotApplication;
@@ -68,6 +70,7 @@ public class SnapshotController : BaseController
         _thirdAccountRepository = thirdAccountRepository;
         _logger = logger;
         _webPageRepository = webPageRepository;
+        _systemSettingCacheManager = systemSettingCacheManager;
     }
 
     /// <summary>
@@ -107,6 +110,11 @@ public class SnapshotController : BaseController
     [LogFilterAlpha("添加随手拍工单")]
     public async Task<AddSnapshotOrderOutDto> AddOrderAsync([FromBody] AddSnapshotOrderInDto dto)
     {
+        var minute = _systemSettingCacheManager.SnapshotIntervalMinutes;
+        var timeout = await _orderRepository.Queryable().Where(m => m.CreatorId == _sessionContext.UserId
+                        && DateTime.Now.AddMinutes(-minute) < m.CreationTime)
+            .AnyAsync();
+        if (timeout) throw UserFriendlyException.SameMessage($"请{minute}分钟后再提交工单");
         var ssp = _systemDicDataCacheManager.SourceChannel.FirstOrDefault(m => m.DicDataName == "随手拍")
             ?? throw UserFriendlyException.SameMessage("请添加[随手拍]来源.");
         var order = dto.Adapt<Order>();

+ 1 - 1
src/Hotline.Api/config/appsettings.Development.json

@@ -1,7 +1,7 @@
 {
   "AllowedHosts": "*",
   "AppConfiguration": {
-    "AppScope": "YiBin",
+    "AppScope": "ZiGong",
     "YiBin": {
       "AreaCode": "511500",
       "CallCenterType": "TianRun", //XunShi、WeiErXin、TianRun、XingTang

+ 2 - 0
src/Hotline.Application/Exam/Constants/ApiRoutes/TrainRecordApiRoute.cs

@@ -20,5 +20,7 @@ namespace Hotline.Application.Exam.Constants.ApiRoutes
         public const string AnalysisTrainResult = "AnalysisTrainResult";
 
         public const string CalcuteAnalysisRate = "CalcuteAnalysisRate";
+
+        public const string ExportTrainResult = "ExportTrainResult";
     }
 }

+ 4 - 0
src/Hotline.Application/Exam/Constants/ApiRoutes/UserExamApiRoute.cs

@@ -42,5 +42,9 @@ namespace Hotline.Application.Exam.Constants.ApiRoutes
         public const string GetGradingPagedList = "GetGradingPagedList";
 
         public const string GetUserList = "GetUserList";
+
+        public const string ExportUnExamUsers = "ExportUnExamUsers";
+
+        public const string ExportUserExamResults = "ExportUserExamResults";
     }
 }

+ 8 - 1
src/Hotline.Application/Exam/Interface/ExamManages/IUserExamService.cs

@@ -92,7 +92,14 @@ namespace Hotline.Application.Exam.Interface.ExamManages
         /// </summary>
         /// <param name="unExamUserReportPagedRequest"></param>
         /// <returns></returns>
-        Task<UnExamUserPageViewResponse> GetUnExamUsers(UnExamUserReportPagedRequest unExamUserReportPagedRequest);
+        Task<UnExamUserPageViewResponse> GetUnExamUsersPaged(UnExamUserReportPagedRequest unExamUserReportPagedRequest);
+
+        /// <summary>
+        /// 获取缺考考生名单(不分页)
+        /// </summary>
+        /// <param name="unExamUserReportPagedRequest"></param>
+        /// <returns></returns>
+        Task<List<UnExamUserViewResponse>> GetUnExamUsers(UnExamUserReportPagedRequest unExamUserReportPagedRequest);
 
         /// <summary>
         /// 获取用户考试成绩

+ 34 - 14
src/Hotline.Application/Exam/Service/ExamManages/UserExamService.cs

@@ -698,7 +698,34 @@ namespace Hotline.Application.Exam.Service.ExamManages
         }
 
 
-        public async Task<UnExamUserPageViewResponse> GetUnExamUsers(UnExamUserReportPagedRequest unExamUserReportPagedRequest)
+        public async Task<UnExamUserPageViewResponse> GetUnExamUsersPaged(UnExamUserReportPagedRequest unExamUserReportPagedRequest)
+        {
+            ISugarQueryable<UnExamUserViewResponse> queryResult = GEtUnExamUserQueryable(unExamUserReportPagedRequest);
+
+            var total = await queryResult.CountAsync();
+
+            var items = unExamUserReportPagedRequest.IsPaged ?
+                await queryResult.ToPageListAsync(unExamUserReportPagedRequest.PageIndex, unExamUserReportPagedRequest.PageSize)
+                : await queryResult.ToListAsync();
+
+            return new UnExamUserPageViewResponse
+            {
+                Items = items,
+                Pagination = new Pagination(unExamUserReportPagedRequest.PageIndex, unExamUserReportPagedRequest.PageSize, total)
+            };
+
+        }
+
+        public async Task<List<UnExamUserViewResponse>> GetUnExamUsers(UnExamUserReportPagedRequest unExamUserReportPagedRequest)
+        {
+            ISugarQueryable<UnExamUserViewResponse> queryResult = GEtUnExamUserQueryable(unExamUserReportPagedRequest);
+
+            var items = await queryResult.ToListAsync();
+
+            return items;
+        }
+
+        private ISugarQueryable<UnExamUserViewResponse> GEtUnExamUserQueryable(UnExamUserReportPagedRequest unExamUserReportPagedRequest)
         {
             if (unExamUserReportPagedRequest.EndTime == null)
                 unExamUserReportPagedRequest.ResolveEndTime();
@@ -722,18 +749,8 @@ namespace Hotline.Application.Exam.Service.ExamManages
                 })
                 .MergeTable()
                 .OrderByPropertyNameIF(!string.IsNullOrEmpty(unExamUserReportPagedRequest.SortField), unExamUserReportPagedRequest.SortField, (OrderByType)(unExamUserReportPagedRequest.SortRule ?? 0));
-
-            var total = await queryResult.CountAsync();
-            var items = await queryResult.ToPageListAsync(unExamUserReportPagedRequest.PageIndex, unExamUserReportPagedRequest.PageSize);
-
-            return new UnExamUserPageViewResponse
-            {
-                Items = items,
-                Pagination = new Pagination(unExamUserReportPagedRequest.PageIndex, unExamUserReportPagedRequest.PageSize, total)
-            };
-
+            return queryResult;
         }
-
         public async Task<UserExamResultPageViewResponse> GetUserExamResults(UserExamResultReportPagedRequest userExamResultReportPagedRequest)
         {
             if (userExamResultReportPagedRequest.EndTime == null)
@@ -764,9 +781,12 @@ namespace Hotline.Application.Exam.Service.ExamManages
                .OrderByPropertyNameIF(!string.IsNullOrEmpty(userExamResultReportPagedRequest.SortField), userExamResultReportPagedRequest.SortField, (OrderByType)(userExamResultReportPagedRequest.SortRule ?? 0))
                 .OrderByDescending(x => x.Score)
       ;
-
+            
             var total = await queryResult.CountAsync();
-            var items = await queryResult.ToPageListAsync(userExamResultReportPagedRequest.PageIndex, userExamResultReportPagedRequest.PageSize);
+            var items = userExamResultReportPagedRequest.IsPaged ?
+                await queryResult.ToPageListAsync(userExamResultReportPagedRequest.PageIndex, userExamResultReportPagedRequest.PageSize)
+                : await queryResult.ToListAsync();
+                ;
 
             return new UserExamResultPageViewResponse
             {

+ 4 - 1
src/Hotline.Application/Exam/Service/Trains/TrainRecordService.cs

@@ -243,7 +243,10 @@ namespace Hotline.Application.Exam.Service.Trains
 
             var total = await queryResult.CountAsync();
 
-            var items = await queryResult.ToPageListAsync(trainResultReportPagedRequest.PageIndex, trainResultReportPagedRequest.PageSize);
+            var items = trainResultReportPagedRequest.IsPaged ?
+                await queryResult.ToPageListAsync(trainResultReportPagedRequest.PageIndex, trainResultReportPagedRequest.PageSize)
+                : await queryResult.ToListAsync();
+                ;
 
             return new TrainResultPagedViewResponse
             {

+ 5 - 7
src/Hotline.Application/Jobs/ApptaskJob.cs

@@ -4,10 +4,9 @@ using Quartz;
 using Hotline.Share.Enums.BatchTask;
 using Microsoft.Extensions.DependencyInjection;
 using Hotline.EventBus;
-using Hotline.Share.Dtos.Order.OrderVisit;
-using Hotline.Share.Dtos.Order.OrderDelay;
 using Hotline.Application.OrderApp.OrderDelayApp;
 using Hotline.Application.OrderApp.OrderVisitApp;
+using Microsoft.AspNetCore.Http;
 
 namespace Hotline.Application.Jobs
 {
@@ -32,6 +31,8 @@ namespace Hotline.Application.Jobs
             //Console.WriteLine($"执行ApptaskJob: {DateTime.Now}");
             var task = await _apptaskDomainService.GetWaitingTaskAsync(context.CancellationToken);
             if (task is null) return;
+            var httpContextAccessor = _serviceProvider.GetRequiredService<IHttpContextAccessor>();
+            httpContextAccessor.HttpContext ??= new DefaultHttpContext();
             ApptaskExecuteResult? result = null;
             switch (task.TaskType)
             {
@@ -59,7 +60,7 @@ namespace Hotline.Application.Jobs
                     //todo check if task is all complete
                     //pub all complete
                     var isCompleted = await _apptaskDomainService.IsCompletedAsync(task.ApptaskId, context.CancellationToken);
-                    if (isCompleted) 
+                    if (isCompleted)
                         await _publisher.PublishAsync(new ApptaskCompletedNotify(task), PublishStrategy.Async, context.CancellationToken);
                 }
                 else
@@ -67,7 +68,6 @@ namespace Hotline.Application.Jobs
                     //todo pub single complete fail
                     await _publisher.PublishAsync(new ApptaskFailNotify(task), PublishStrategy.Async, context.CancellationToken);
                 }
-
             }
         }
 
@@ -76,7 +76,5 @@ namespace Hotline.Application.Jobs
         {
             GC.SuppressFinalize(this);
         }
-
-
     }
-}
+}

+ 13 - 0
src/Hotline.Application/Mappers/ExamMapperConfigs.cs

@@ -0,0 +1,13 @@
+using Mapster;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Hotline.Application.Mappers
+{
+    public partial class MapperConfigs : IRegister
+    {
+    }
+}

+ 3 - 1
src/Hotline.Application/Mappers/OrderMapperConfigs.cs

@@ -176,10 +176,12 @@ public class OrderMapperConfigs : IRegister
             .Map(d => d.StepId, s => s.WorkflowSteps.First().Id)
             .Map(d => d.CurrentStepName, s => s.WorkflowSteps.First().Name)
             .Map(d => d.ActualHandlerName, s => s.WorkflowSteps.First().HandlerName)
+            .Map(d => d.DelayCurrentStepName, s => s.WorkflowSteps.First().Name)
             .IgnoreIf((s, d) => s.WorkflowSteps == null || !s.WorkflowSteps.Any(),
                 d => d.StepId,
                 d => d.CurrentStepName,
-                d => d.ActualHandlerName)
+                d => d.ActualHandlerName,
+                d => d.DelayCurrentStepName)
             ;
 
         config.ForType<ExpiredTimeWithConfig, UpdateOrderDto>()

+ 1 - 1
src/Hotline.Application/OrderApp/OrderDelayApp/OrderDelayApplication.cs

@@ -189,7 +189,7 @@ public class OrderDelayApplication : IOrderDelayApplication, IScopeDependency
         var apptaskItems = new List<AddApptaskItemRequest>();
         var req = new OrderDelayReviewWithSessionRequest
         {
-            SessionContext = _sessionContext,
+            SessionContext = (FakeSessionContext)_sessionContext,
             IsPass = request.IsPass,
             NextWorkflow = request.NextWorkflow
         };

+ 2 - 2
src/Hotline.Application/OrderApp/OrderDelayApp/OrderDelayReviewTaskExecutor.cs

@@ -5,7 +5,7 @@ using XF.Domain.Dependency;
 
 namespace Hotline.Application.OrderApp.OrderDelayApp;
 
-public class OrderDelayReviewTaskExecutor : IApptaskExecutor<OrderDelayReviewRequest>, IScopeDependency
+public class OrderDelayReviewTaskExecutor : IApptaskExecutor<OrderDelayReviewWithSessionRequest>, IScopeDependency
 {
     private readonly IOrderDelayApplication _orderDelayApplication;
 
@@ -20,7 +20,7 @@ public class OrderDelayReviewTaskExecutor : IApptaskExecutor<OrderDelayReviewReq
     /// <param name="request"></param>
     /// <param name="cancellation"></param>
     /// <returns>是否成功执行</returns>
-    public async Task<ApptaskExecuteResult> ExecuteAsync(OrderDelayReviewRequest? request, CancellationToken cancellation)
+    public async Task<ApptaskExecuteResult> ExecuteAsync(OrderDelayReviewWithSessionRequest? request, CancellationToken cancellation)
     {
         if (request == null)
             return ApptaskExecuteResult.Fail("请求参数为空");

+ 2 - 7
src/Hotline.Application/OrderApp/OrderDelayApp/OrderDelayReviewWithSessionRequest.cs

@@ -1,16 +1,11 @@
 using Hotline.Share.Dtos.Order.OrderDelay;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
 using Hotline.BatchTask;
-using XF.Domain.Authentications;
+using Hotline.Authentications;
 
 namespace Hotline.Application.OrderApp.OrderDelayApp
 {
     public class OrderDelayReviewWithSessionRequest : OrderDelayReviewRequest, IApptaskRequest
     {
-        public ISessionContext SessionContext { get; set; }
+        public FakeSessionContext SessionContext { get; set; }
     }
 }

+ 2 - 2
src/Hotline.Application/OrderApp/OrderVisitApp/VoiceVisitTaskExecutor.cs

@@ -11,7 +11,7 @@ using Hotline.Share.Dtos.Order.OrderVisit;
 
 namespace Hotline.Application.OrderApp.OrderVisitApp
 {
-    public class VoiceVisitTaskExecutor : IApptaskExecutor<VoiceVisitRequest>, IScopeDependency
+    public class VoiceVisitTaskExecutor : IApptaskExecutor<VoiceVisitWithSessionRequest>, IScopeDependency
     {
         private readonly IHttpClientFactory _httpClientFactory;
         private readonly IOptionsSnapshot<CallCenterConfiguration> _callcenterOptions;
@@ -30,7 +30,7 @@ namespace Hotline.Application.OrderApp.OrderVisitApp
         /// <param name="request"></param>
         /// <param name="cancellation"></param>
         /// <returns>是否成功执行</returns>
-        public async Task<ApptaskExecuteResult> ExecuteAsync(VoiceVisitRequest? request, CancellationToken cancellation)
+        public async Task<ApptaskExecuteResult> ExecuteAsync(VoiceVisitWithSessionRequest? request, CancellationToken cancellation)
         {
             Console.WriteLine($"执行vv: {DateTime.Now}");
             if (request == null)

+ 2 - 1
src/Hotline.Application/OrderApp/OrderVisitApp/VoiceVisitWithSessionRequest.cs

@@ -6,11 +6,12 @@ using System.Text;
 using System.Threading.Tasks;
 using Hotline.BatchTask;
 using XF.Domain.Authentications;
+using Hotline.Authentications;
 
 namespace Hotline.Application.OrderApp.OrderVisitApp
 {
     public class VoiceVisitWithSessionRequest : VoiceVisitRequest, IApptaskRequest
     {
-        public ISessionContext SessionContext { get; set; }
+        public FakeSessionContext SessionContext { get; set; }
     }
 }

+ 4 - 0
src/Hotline.Application/Snapshot/BiSnapshotApplication.cs

@@ -540,6 +540,7 @@ public class BiSnapshotApplication : IBiSnapshotApplication, IScopeDependency
     {
         var query = _orderSnapshotRepository.Queryable(includeDeleted: true)
             .LeftJoin<Order>((snapshot, order) => order.Id == snapshot.Id)
+            .Where((snapshot, order) => order.DuplicateIds != null && SqlFunc.JsonArrayLength(order.DuplicateIds) > 0)
             .WhereIF(dto.No.NotNullOrEmpty(), (snapshot, order) => order.No.Contains(dto.No))
             .WhereIF(dto.Title.NotNullOrEmpty(), (snapshot, order) => order.Title.Contains(dto.Title))
             .WhereIF(dto.FromName.NotNullOrEmpty(), (snapshot, order) => order.FromName.Contains(dto.FromName))
@@ -552,6 +553,9 @@ public class BiSnapshotApplication : IBiSnapshotApplication, IScopeDependency
             .WhereIF(dto.AcceptorName.NotNullOrEmpty(), (snapshot, order) => order.AcceptorName == dto.AcceptorName)
             .WhereIF(dto.IndustryId.NotNullOrEmpty(), (snapshot, order) => snapshot.IndustryId == dto.IndustryId)
             .Select((snapshot, order) => new DuplicateItemsOutDto(), true);
+#if DEBUG
+        var sql = query.ToSqlString();
+#endif
         return query;
     }
 

+ 360 - 127
src/Hotline.Application/StatisticalReport/OrderReportApplication.cs

@@ -346,6 +346,13 @@ namespace Hotline.Application.StatisticalReport
             if (string.IsNullOrEmpty(dto.ParentOrgCode) && dto.OrgCode == _sessionContext.RequiredOrgId)
                 dto.ParentOrgCode = _sessionContext.RequiredOrgId;
 
+            bool isEmpy = false;
+            if (string.IsNullOrEmpty(dto.ParentOrgCode))
+                isEmpy = true;
+
+            if (string.IsNullOrEmpty(dto.ParentOrgCode) && string.IsNullOrEmpty(dto.OrgCode))
+                dto.ParentOrgCode = _sessionContext.RequiredOrgId;
+
             switch (dto.StatisticsType)
             {
                 case EStatisticsType.YBOrderCountNum:
@@ -355,10 +362,15 @@ namespace Hotline.Application.StatisticalReport
                               .WhereIF(dto.IsProvince.HasValue && dto.IsProvince == true, o => o.Source == ESource.ProvinceStraight)
                               .WhereIF(dto.TypeId != null && dto.TypeId == 1, o => o.IdentityType == EIdentityType.Citizen)
                                .WhereIF(dto.TypeId != null && dto.TypeId == 2, o => o.IdentityType == EIdentityType.Enterprise)
-                               .WhereIF(dto.OrgCode == "001", o => o.ActualHandleOrgCode == dto.OrgCode)
-                               .WhereIF(dto.OrgCode != "001" && dto.OrgCode != dto.ParentOrgCode, o => o.ActualHandleOrgCode.StartsWith(dto.OrgCode))
-                               .WhereIF(dto.OrgCode != "001" && dto.OrgCode == dto.ParentOrgCode, o => o.ActualHandleOrgCode == dto.OrgCode)
-                                .Select(o => new SelectOrderId { Id = o.Id })
+                               .WhereIF(dto.OrgCode == "001" && !string.IsNullOrEmpty(dto.OrgCode), o => o.ActualHandleOrgCode == dto.OrgCode)
+                               .WhereIF(dto.OrgCode != "001" && !string.IsNullOrEmpty(dto.OrgCode) && dto.OrgCode != dto.ParentOrgCode, o => o.ActualHandleOrgCode.StartsWith(dto.OrgCode))
+                               .WhereIF(dto.OrgCode != "001" && !string.IsNullOrEmpty(dto.OrgCode) && dto.OrgCode == dto.ParentOrgCode, o => o.ActualHandleOrgCode == dto.OrgCode)
+
+                               .WhereIF(dto.ParentOrgCode == "001" && isEmpy == false && string.IsNullOrEmpty(dto.OrgCode) && !string.IsNullOrEmpty(dto.ParentOrgCode),
+                               o => o.ActualHandleOrgCode == dto.ParentOrgCode)
+                               .WhereIF(dto.ParentOrgCode != "001" && string.IsNullOrEmpty(dto.OrgCode) && !string.IsNullOrEmpty(dto.ParentOrgCode),
+                               o => o.ActualHandleOrgCode.StartsWith(dto.ParentOrgCode))
+                               .Select(o => new SelectOrderId { Id = o.Id })
                              .MergeTable();
                     //会签已办
                     var hqybquery = _workflowTraceRepository.Queryable()
@@ -369,10 +381,16 @@ namespace Hotline.Application.StatisticalReport
                                 .WhereIF(dto.IsProvince.HasValue && dto.IsProvince == true, (t, o) => o.Source == ESource.ProvinceStraight)
                                   .WhereIF(dto.TypeId != null && dto.TypeId == 1, (t, o) => o.IdentityType == EIdentityType.Citizen)
                              .WhereIF(dto.TypeId != null && dto.TypeId == 2, (t, o) => o.IdentityType == EIdentityType.Enterprise)
-                                .WhereIF(dto.OrgCode == "001", (t, o) => t.HandlerOrgId == dto.OrgCode)
-                             .WhereIF(dto.OrgCode != "001" && dto.OrgCode != dto.ParentOrgCode, (t, o) => t.HandlerOrgId.StartsWith(dto.OrgCode))
-                             .WhereIF(dto.OrgCode != "001" && dto.OrgCode == dto.ParentOrgCode, (t, o) => t.HandlerOrgId == dto.OrgCode)
-                                .GroupBy((t, o) => o.Id)
+                                .WhereIF(dto.OrgCode == "001" && !string.IsNullOrEmpty(dto.OrgCode), (t, o) => t.HandlerOrgId == dto.OrgCode)
+                             .WhereIF(dto.OrgCode != "001" && !string.IsNullOrEmpty(dto.OrgCode) && dto.OrgCode != dto.ParentOrgCode, (t, o) => t.HandlerOrgId.StartsWith(dto.OrgCode))
+                             .WhereIF(dto.OrgCode != "001" && !string.IsNullOrEmpty(dto.OrgCode) && dto.OrgCode == dto.ParentOrgCode, (t, o) => t.HandlerOrgId == dto.OrgCode)
+
+                             .WhereIF(dto.ParentOrgCode == "001" && isEmpy == false && string.IsNullOrEmpty(dto.OrgCode) && !string.IsNullOrEmpty(dto.ParentOrgCode),
+                               (t, o) => t.HandlerOrgId == dto.ParentOrgCode)
+                               .WhereIF(dto.ParentOrgCode != "001" && string.IsNullOrEmpty(dto.OrgCode) && !string.IsNullOrEmpty(dto.ParentOrgCode),
+                              (t, o) => t.HandlerOrgId.StartsWith(dto.ParentOrgCode))
+
+                             .GroupBy((t, o) => o.Id)
                                 .Select((t, o) => new SelectOrderId { Id = o.Id })
                                 .MergeTable();
                     query = _orderRepository.UnionAll(orderybquery, hqybquery).GroupBy(p => p.Id).MergeTable();
@@ -380,14 +398,20 @@ namespace Hotline.Application.StatisticalReport
                 case EStatisticsType.ZBOrderCountNum:
                     //工单在办
                     var orderzbquery = _orderRepository.Queryable()
-                             .Where(o => o.CreationTime >= dto.StartTime && o.CreationTime <= dto.EndTime && o.Status < EOrderStatus.Filed)
+                             .Where(o => o.CreationTime >= dto.StartTime && o.CreationTime <= dto.EndTime && o.Status < EOrderStatus.Filed&&o.Status>EOrderStatus.WaitForAccept)
                              .WhereIF(dto.IsProvince.HasValue && dto.IsProvince == true, o => o.Source == ESource.ProvinceStraight)
                              .WhereIF(dto.TypeId != null && dto.TypeId == 1, o => o.IdentityType == EIdentityType.Citizen)
                               .WhereIF(dto.TypeId != null && dto.TypeId == 2, o => o.IdentityType == EIdentityType.Enterprise)
-                              .WhereIF(dto.OrgCode == "001", o => o.CurrentHandleOrgId == dto.OrgCode)
-                              .WhereIF(dto.OrgCode != "001" && dto.OrgCode != dto.ParentOrgCode, o => o.CurrentHandleOrgId.StartsWith(dto.OrgCode))
-                              .WhereIF(dto.OrgCode != "001" && dto.OrgCode == dto.ParentOrgCode, o => o.CurrentHandleOrgId == dto.OrgCode)
-                               .Select(o => new SelectOrderId { Id = o.Id })
+                              .WhereIF(dto.OrgCode == "001" && !string.IsNullOrEmpty(dto.OrgCode), o => o.CurrentHandleOrgId == dto.OrgCode)
+                              .WhereIF(dto.OrgCode != "001" && !string.IsNullOrEmpty(dto.OrgCode) && dto.OrgCode != dto.ParentOrgCode, o => o.CurrentHandleOrgId.StartsWith(dto.OrgCode))
+                              .WhereIF(dto.OrgCode != "001" && !string.IsNullOrEmpty(dto.OrgCode) && dto.OrgCode == dto.ParentOrgCode, o => o.CurrentHandleOrgId == dto.OrgCode)
+
+                              .WhereIF(dto.ParentOrgCode == "001" && isEmpy == false && string.IsNullOrEmpty(dto.OrgCode) && !string.IsNullOrEmpty(dto.ParentOrgCode),
+                               o => o.CurrentHandleOrgId == dto.ParentOrgCode)
+                               .WhereIF(dto.ParentOrgCode != "001" && string.IsNullOrEmpty(dto.OrgCode) && !string.IsNullOrEmpty(dto.ParentOrgCode),
+                               o => o.CurrentHandleOrgId.StartsWith(dto.ParentOrgCode))
+
+                              .Select(o => new SelectOrderId { Id = o.Id })
                             .MergeTable();
                     //会签在办
                     var hqzbquery = _workflowTraceRepository.Queryable()
@@ -397,10 +421,16 @@ namespace Hotline.Application.StatisticalReport
                                .WhereIF(dto.IsProvince.HasValue && dto.IsProvince == true, (t, o) => o.Source == ESource.ProvinceStraight)
                                  .WhereIF(dto.TypeId != null && dto.TypeId == 1, (t, o) => o.IdentityType == EIdentityType.Citizen)
                            .WhereIF(dto.TypeId != null && dto.TypeId == 2, (t, o) => o.IdentityType == EIdentityType.Enterprise)
-                               .WhereIF(dto.OrgCode == "001", (t, o) => t.HandlerOrgId == dto.OrgCode)
-                           .WhereIF(dto.OrgCode != "001" && dto.OrgCode != dto.ParentOrgCode, (t, o) => t.HandlerOrgId.StartsWith(dto.OrgCode))
-                           .WhereIF(dto.OrgCode != "001" && dto.OrgCode == dto.ParentOrgCode, (t, o) => t.HandlerOrgId == dto.OrgCode)
-                               .GroupBy((t, o) => o.Id)
+                               .WhereIF(dto.OrgCode == "001" && !string.IsNullOrEmpty(dto.OrgCode), (t, o) => t.HandlerOrgId == dto.OrgCode)
+                           .WhereIF(dto.OrgCode != "001" && !string.IsNullOrEmpty(dto.OrgCode) && dto.OrgCode != dto.ParentOrgCode, (t, o) => t.HandlerOrgId.StartsWith(dto.OrgCode))
+                           .WhereIF(dto.OrgCode != "001" && !string.IsNullOrEmpty(dto.OrgCode) && dto.OrgCode == dto.ParentOrgCode, (t, o) => t.HandlerOrgId == dto.OrgCode)
+
+                              .WhereIF(dto.ParentOrgCode == "001" && isEmpy == false && string.IsNullOrEmpty(dto.OrgCode) && !string.IsNullOrEmpty(dto.ParentOrgCode),
+                               (t, o) => t.HandlerOrgId == dto.ParentOrgCode)
+                               .WhereIF(dto.ParentOrgCode != "001" && string.IsNullOrEmpty(dto.OrgCode) && !string.IsNullOrEmpty(dto.ParentOrgCode),
+                               (t, o) => t.HandlerOrgId.StartsWith(dto.ParentOrgCode))
+
+                           .GroupBy((t, o) => o.Id)
                                .Select((t, o) => new SelectOrderId { Id = o.Id })
                                .MergeTable();
                     query = _orderRepository.UnionAll(orderzbquery, hqzbquery).GroupBy(p => p.Id).MergeTable();
@@ -412,9 +442,15 @@ namespace Hotline.Application.StatisticalReport
                         .WhereIF(dto.IsProvince.HasValue && dto.IsProvince == true, (d, o) => o.Source == ESource.ProvinceStraight)
                           .WhereIF(dto.TypeId != null && dto.TypeId == 1, (d, o) => o.IdentityType == EIdentityType.Citizen)
                          .WhereIF(dto.TypeId != null && dto.TypeId == 2, (d, o) => o.IdentityType == EIdentityType.Enterprise)
-                        .WhereIF(dto.OrgCode == "001", (d, o) => d.ApplyOrgCode == dto.OrgCode)
-                        .WhereIF(dto.OrgCode != "001" && dto.OrgCode != dto.ParentOrgCode, (d, o) => d.ApplyOrgCode.StartsWith(dto.OrgCode))
-                        .WhereIF(dto.OrgCode != "001" && dto.OrgCode == dto.ParentOrgCode, (d, o) => d.ApplyOrgCode == dto.OrgCode)
+                        .WhereIF(dto.OrgCode == "001" && !string.IsNullOrEmpty(dto.OrgCode), (d, o) => d.ApplyOrgCode == dto.OrgCode)
+                        .WhereIF(dto.OrgCode != "001" && !string.IsNullOrEmpty(dto.OrgCode) && dto.OrgCode != dto.ParentOrgCode, (d, o) => d.ApplyOrgCode.StartsWith(dto.OrgCode))
+                        .WhereIF(dto.OrgCode != "001" && !string.IsNullOrEmpty(dto.OrgCode) && dto.OrgCode == dto.ParentOrgCode, (d, o) => d.ApplyOrgCode == dto.OrgCode)
+
+                         .WhereIF(dto.ParentOrgCode == "001" && isEmpy == false && string.IsNullOrEmpty(dto.OrgCode) && !string.IsNullOrEmpty(dto.ParentOrgCode),
+                               (d, o) => d.ApplyOrgCode == dto.ParentOrgCode)
+                               .WhereIF(dto.ParentOrgCode != "001" && string.IsNullOrEmpty(dto.OrgCode) && !string.IsNullOrEmpty(dto.ParentOrgCode),
+                               (d, o) => d.ApplyOrgCode.StartsWith(dto.ParentOrgCode))
+
                         .OrderByDescending((d, o) => o.CreationTime)
                         .Select((d, o) => new SelectOrderId { Id = o.Id })
                        .MergeTable();
@@ -425,22 +461,34 @@ namespace Hotline.Application.StatisticalReport
                          .WhereIF(dto.IsProvince.HasValue && dto.IsProvince == true, o => o.Source == ESource.ProvinceStraight)
                          .WhereIF(dto.TypeId != null && dto.TypeId == 1, o => o.IdentityType == EIdentityType.Citizen)
                           .WhereIF(dto.TypeId != null && dto.TypeId == 2, o => o.IdentityType == EIdentityType.Enterprise)
-                          .WhereIF(dto.OrgCode == "001", o => o.ActualHandleOrgCode == dto.OrgCode)
-                          .WhereIF(dto.OrgCode != "001" && dto.OrgCode != dto.ParentOrgCode, o => o.ActualHandleOrgCode.StartsWith(dto.OrgCode))
-                          .WhereIF(dto.OrgCode != "001" && dto.OrgCode == dto.ParentOrgCode, o => o.ActualHandleOrgCode == dto.OrgCode)
-                           .Select(o => new SelectOrderId { Id = o.Id })
+                          .WhereIF(dto.OrgCode == "001" && !string.IsNullOrEmpty(dto.OrgCode), o => o.ActualHandleOrgCode == dto.OrgCode)
+                          .WhereIF(dto.OrgCode != "001" && !string.IsNullOrEmpty(dto.OrgCode) && dto.OrgCode != dto.ParentOrgCode, o => o.ActualHandleOrgCode.StartsWith(dto.OrgCode))
+                          .WhereIF(dto.OrgCode != "001" && !string.IsNullOrEmpty(dto.OrgCode) && dto.OrgCode == dto.ParentOrgCode, o => o.ActualHandleOrgCode == dto.OrgCode)
+
+                          .WhereIF(dto.ParentOrgCode == "001" && isEmpy == false && string.IsNullOrEmpty(dto.OrgCode) && !string.IsNullOrEmpty(dto.ParentOrgCode),
+                               o => o.ActualHandleOrgCode == dto.ParentOrgCode)
+                               .WhereIF(dto.ParentOrgCode != "001" && string.IsNullOrEmpty(dto.OrgCode) && !string.IsNullOrEmpty(dto.ParentOrgCode),
+                                o => o.ActualHandleOrgCode.StartsWith(dto.ParentOrgCode))
+
+                          .Select(o => new SelectOrderId { Id = o.Id })
                         .MergeTable();
                     break;
                 case EStatisticsType.ZBOverdue://待办超期
                     query = _orderRepository.Queryable()
-                          .Where(o => o.CreationTime >= dto.StartTime && o.CreationTime <= dto.EndTime && o.Status < EOrderStatus.Filed && o.ExpiredTime < DateTime.Now)
+                          .Where(o => o.CreationTime >= dto.StartTime && o.CreationTime <= dto.EndTime && o.Status > EOrderStatus.WaitForAccept && o.Status < EOrderStatus.Filed && o.ExpiredTime < DateTime.Now)
                           .WhereIF(dto.IsProvince.HasValue && dto.IsProvince == true, o => o.Source == ESource.ProvinceStraight)
                           .WhereIF(dto.TypeId != null && dto.TypeId == 1, o => o.IdentityType == EIdentityType.Citizen)
                            .WhereIF(dto.TypeId != null && dto.TypeId == 2, o => o.IdentityType == EIdentityType.Enterprise)
-                           .WhereIF(dto.OrgCode == "001", o => o.CurrentHandleOrgId == dto.OrgCode)
-                           .WhereIF(dto.OrgCode != "001" && dto.OrgCode != dto.ParentOrgCode, o => o.CurrentHandleOrgId.StartsWith(dto.OrgCode))
-                           .WhereIF(dto.OrgCode != "001" && dto.OrgCode == dto.ParentOrgCode, o => o.CurrentHandleOrgId == dto.OrgCode)
-                            .Select(o => new SelectOrderId { Id = o.Id })
+                           .WhereIF(dto.OrgCode == "001" && !string.IsNullOrEmpty(dto.OrgCode), o => o.CurrentHandleOrgId == dto.OrgCode)
+                           .WhereIF(dto.OrgCode != "001" && !string.IsNullOrEmpty(dto.OrgCode) && dto.OrgCode != dto.ParentOrgCode, o => o.CurrentHandleOrgId.StartsWith(dto.OrgCode))
+                           .WhereIF(dto.OrgCode != "001" && !string.IsNullOrEmpty(dto.OrgCode) && dto.OrgCode == dto.ParentOrgCode, o => o.CurrentHandleOrgId == dto.OrgCode)
+
+                            .WhereIF(dto.ParentOrgCode == "001" && isEmpy == false && string.IsNullOrEmpty(dto.OrgCode) && !string.IsNullOrEmpty(dto.ParentOrgCode),
+                               o => o.CurrentHandleOrgId == dto.ParentOrgCode)
+                               .WhereIF(dto.ParentOrgCode != "001" && string.IsNullOrEmpty(dto.OrgCode) && !string.IsNullOrEmpty(dto.ParentOrgCode),
+                                o => o.CurrentHandleOrgId.StartsWith(dto.ParentOrgCode))
+
+                           .Select(o => new SelectOrderId { Id = o.Id })
                          .MergeTable();
                     break;
                 case EStatisticsType.HQYBOverdue://会签已办超期
@@ -452,9 +500,14 @@ namespace Hotline.Application.StatisticalReport
                          .WhereIF(dto.IsProvince.HasValue && dto.IsProvince == true, (t, o) => o.Source == ESource.ProvinceStraight)
                            .WhereIF(dto.TypeId != null && dto.TypeId == 1, (t, o) => o.IdentityType == EIdentityType.Citizen)
                          .WhereIF(dto.TypeId != null && dto.TypeId == 2, (t, o) => o.IdentityType == EIdentityType.Enterprise)
-                         .WhereIF(dto.OrgCode == "001", (t, o) => t.HandlerOrgId == dto.OrgCode)
-                         .WhereIF(dto.OrgCode != "001" && dto.OrgCode != dto.ParentOrgCode, (t, o) => t.HandlerOrgId.StartsWith(dto.OrgCode))
-                         .WhereIF(dto.OrgCode != "001" && dto.OrgCode == dto.ParentOrgCode, (t, o) => t.HandlerOrgId == dto.OrgCode)
+                         .WhereIF(dto.OrgCode == "001" && !string.IsNullOrEmpty(dto.OrgCode), (t, o) => t.HandlerOrgId == dto.OrgCode)
+                         .WhereIF(dto.OrgCode != "001" && !string.IsNullOrEmpty(dto.OrgCode) && dto.OrgCode != dto.ParentOrgCode, (t, o) => t.HandlerOrgId.StartsWith(dto.OrgCode))
+                         .WhereIF(dto.OrgCode != "001" && !string.IsNullOrEmpty(dto.OrgCode) && dto.OrgCode == dto.ParentOrgCode, (t, o) => t.HandlerOrgId == dto.OrgCode)
+                        .WhereIF(dto.ParentOrgCode == "001" && isEmpy == false && string.IsNullOrEmpty(dto.OrgCode) && !string.IsNullOrEmpty(dto.ParentOrgCode),
+                             (t, o) => t.HandlerOrgId == dto.ParentOrgCode)
+                               .WhereIF(dto.ParentOrgCode != "001" && string.IsNullOrEmpty(dto.OrgCode) && !string.IsNullOrEmpty(dto.ParentOrgCode),
+                                (t, o) => t.HandlerOrgId.StartsWith(dto.ParentOrgCode))
+
                          .GroupBy((t, o) => o.Id)
                          .Select((t, o) => new SelectOrderId { Id = o.Id })
                          .MergeTable();
@@ -467,9 +520,14 @@ namespace Hotline.Application.StatisticalReport
                          .WhereIF(dto.IsProvince.HasValue && dto.IsProvince == true, (t, o) => o.Source == ESource.ProvinceStraight)
                            .WhereIF(dto.TypeId != null && dto.TypeId == 1, (t, o) => o.IdentityType == EIdentityType.Citizen)
                          .WhereIF(dto.TypeId != null && dto.TypeId == 2, (t, o) => o.IdentityType == EIdentityType.Enterprise)
-                         .WhereIF(dto.OrgCode == "001", (t, o) => t.HandlerOrgId == dto.OrgCode)
-                         .WhereIF(dto.OrgCode != "001" && dto.OrgCode != dto.ParentOrgCode, (t, o) => t.HandlerOrgId.StartsWith(dto.OrgCode))
-                         .WhereIF(dto.OrgCode != "001" && dto.OrgCode == dto.ParentOrgCode, (t, o) => t.HandlerOrgId == dto.OrgCode)
+                         .WhereIF(dto.OrgCode == "001" && !string.IsNullOrEmpty(dto.OrgCode), (t, o) => t.HandlerOrgId == dto.OrgCode)
+                         .WhereIF(dto.OrgCode != "001" && !string.IsNullOrEmpty(dto.OrgCode) && !string.IsNullOrEmpty(dto.OrgCode) && dto.OrgCode != dto.ParentOrgCode, (t, o) => t.HandlerOrgId.StartsWith(dto.OrgCode))
+                         .WhereIF(dto.OrgCode != "001" && !string.IsNullOrEmpty(dto.OrgCode) && dto.OrgCode == dto.ParentOrgCode, (t, o) => t.HandlerOrgId == dto.OrgCode)
+                         .WhereIF(dto.ParentOrgCode == "001" && isEmpy == false && string.IsNullOrEmpty(dto.OrgCode) && !string.IsNullOrEmpty(dto.ParentOrgCode),
+                             (t, o) => t.HandlerOrgId == dto.ParentOrgCode)
+                               .WhereIF(dto.ParentOrgCode != "001" && string.IsNullOrEmpty(dto.OrgCode) && !string.IsNullOrEmpty(dto.ParentOrgCode),
+                                (t, o) => t.HandlerOrgId.StartsWith(dto.ParentOrgCode))
+
                          .GroupBy((t, o) => o.Id)
                          .Select((t, o) => new SelectOrderId { Id = o.Id })
                          .MergeTable();
@@ -477,25 +535,36 @@ namespace Hotline.Application.StatisticalReport
                 case EStatisticsType.SubtotalOverdue://超期件数
                     //已办超期
                     var ybcqquery = _orderRepository.Queryable()
-                        .Where(o => o.CreationTime >= dto.StartTime && o.CreationTime <= dto.EndTime && o.Status >= EOrderStatus.Filed && o.ActualHandleTime > o.ExpiredTime)
+                        .Where(o => o.CreationTime >= dto.StartTime && o.CreationTime <= dto.EndTime && o.Status > EOrderStatus.WaitForAccept && o.Status >= EOrderStatus.Filed && o.ActualHandleTime > o.ExpiredTime)
                         .WhereIF(dto.IsProvince.HasValue && dto.IsProvince == true, o => o.Source == ESource.ProvinceStraight)
                         .WhereIF(dto.TypeId != null && dto.TypeId == 1, o => o.IdentityType == EIdentityType.Citizen)
                          .WhereIF(dto.TypeId != null && dto.TypeId == 2, o => o.IdentityType == EIdentityType.Enterprise)
-                         .WhereIF(dto.OrgCode == "001", o => o.ActualHandleOrgCode == dto.OrgCode)
-                         .WhereIF(dto.OrgCode != "001" && dto.OrgCode != dto.ParentOrgCode, o => o.ActualHandleOrgCode.StartsWith(dto.OrgCode))
-                         .WhereIF(dto.OrgCode != "001" && dto.OrgCode == dto.ParentOrgCode, o => o.ActualHandleOrgCode == dto.OrgCode)
-                          .Select(o => new SelectOrderId { Id = o.Id })
+                         .WhereIF(dto.OrgCode == "001" && !string.IsNullOrEmpty(dto.OrgCode), o => o.ActualHandleOrgCode == dto.OrgCode)
+                         .WhereIF(dto.OrgCode != "001" && !string.IsNullOrEmpty(dto.OrgCode) && dto.OrgCode != dto.ParentOrgCode, o => o.ActualHandleOrgCode.StartsWith(dto.OrgCode))
+                         .WhereIF(dto.OrgCode != "001" && !string.IsNullOrEmpty(dto.OrgCode) && dto.OrgCode == dto.ParentOrgCode, o => o.ActualHandleOrgCode == dto.OrgCode)
+
+                         .WhereIF(dto.ParentOrgCode == "001" && isEmpy == false && string.IsNullOrEmpty(dto.OrgCode) && !string.IsNullOrEmpty(dto.ParentOrgCode),
+                               o => o.ActualHandleOrgCode == dto.ParentOrgCode)
+                               .WhereIF(dto.ParentOrgCode != "001" && string.IsNullOrEmpty(dto.OrgCode) && !string.IsNullOrEmpty(dto.ParentOrgCode),
+                                o => o.ActualHandleOrgCode.StartsWith(dto.ParentOrgCode))
+
+                         .Select(o => new SelectOrderId { Id = o.Id })
                           .MergeTable();
                     //待办超期
                     var dbcqquery = _orderRepository.Queryable()
-                          .Where(o => o.CreationTime >= dto.StartTime && o.CreationTime <= dto.EndTime && o.Status < EOrderStatus.Filed && o.ExpiredTime < DateTime.Now)
+                          .Where(o => o.CreationTime >= dto.StartTime && o.CreationTime <= dto.EndTime && o.Status > EOrderStatus.WaitForAccept && o.Status < EOrderStatus.Filed && o.ExpiredTime < DateTime.Now)
                           .WhereIF(dto.IsProvince.HasValue && dto.IsProvince == true, o => o.Source == ESource.ProvinceStraight)
                           .WhereIF(dto.TypeId != null && dto.TypeId == 1, o => o.IdentityType == EIdentityType.Citizen)
                            .WhereIF(dto.TypeId != null && dto.TypeId == 2, o => o.IdentityType == EIdentityType.Enterprise)
-                           .WhereIF(dto.OrgCode == "001", o => o.CurrentHandleOrgId == dto.OrgCode)
-                           .WhereIF(dto.OrgCode != "001" && dto.OrgCode != dto.ParentOrgCode, o => o.CurrentHandleOrgId.StartsWith(dto.OrgCode))
-                           .WhereIF(dto.OrgCode != "001" && dto.OrgCode == dto.ParentOrgCode, o => o.CurrentHandleOrgId == dto.OrgCode)
-                            .Select(o => new SelectOrderId { Id = o.Id })
+                           .WhereIF(dto.OrgCode == "001" && !string.IsNullOrEmpty(dto.OrgCode), o => o.CurrentHandleOrgId == dto.OrgCode)
+                           .WhereIF(dto.OrgCode != "001" && !string.IsNullOrEmpty(dto.OrgCode) && dto.OrgCode != dto.ParentOrgCode, o => o.CurrentHandleOrgId.StartsWith(dto.OrgCode))
+                           .WhereIF(dto.OrgCode != "001" && !string.IsNullOrEmpty(dto.OrgCode) && dto.OrgCode == dto.ParentOrgCode, o => o.CurrentHandleOrgId == dto.OrgCode)
+                           .WhereIF(dto.ParentOrgCode == "001" && isEmpy == false && string.IsNullOrEmpty(dto.OrgCode) && !string.IsNullOrEmpty(dto.ParentOrgCode),
+                               o => o.CurrentHandleOrgId == dto.ParentOrgCode)
+                               .WhereIF(dto.ParentOrgCode != "001" && string.IsNullOrEmpty(dto.OrgCode) && !string.IsNullOrEmpty(dto.ParentOrgCode),
+                                o => o.CurrentHandleOrgId.StartsWith(dto.ParentOrgCode))
+
+                           .Select(o => new SelectOrderId { Id = o.Id })
                          .MergeTable();
                     //会签已办超期
                     var hqybcqquery = _workflowTraceRepository.Queryable()
@@ -506,9 +575,14 @@ namespace Hotline.Application.StatisticalReport
                          .WhereIF(dto.IsProvince.HasValue && dto.IsProvince == true, (t, o) => o.Source == ESource.ProvinceStraight)
                            .WhereIF(dto.TypeId != null && dto.TypeId == 1, (t, o) => o.IdentityType == EIdentityType.Citizen)
                          .WhereIF(dto.TypeId != null && dto.TypeId == 2, (t, o) => o.IdentityType == EIdentityType.Enterprise)
-                         .WhereIF(dto.OrgCode == "001", (t, o) => t.HandlerOrgId == dto.OrgCode)
-                         .WhereIF(dto.OrgCode != "001" && dto.OrgCode != dto.ParentOrgCode, (t, o) => t.HandlerOrgId.StartsWith(dto.OrgCode))
-                         .WhereIF(dto.OrgCode != "001" && dto.OrgCode == dto.ParentOrgCode, (t, o) => t.HandlerOrgId == dto.OrgCode)
+                         .WhereIF(dto.OrgCode == "001" && !string.IsNullOrEmpty(dto.OrgCode), (t, o) => t.HandlerOrgId == dto.OrgCode)
+                         .WhereIF(dto.OrgCode != "001" && !string.IsNullOrEmpty(dto.OrgCode) && dto.OrgCode != dto.ParentOrgCode, (t, o) => t.HandlerOrgId.StartsWith(dto.OrgCode))
+                         .WhereIF(dto.OrgCode != "001" && !string.IsNullOrEmpty(dto.OrgCode) && dto.OrgCode == dto.ParentOrgCode, (t, o) => t.HandlerOrgId == dto.OrgCode)
+                               .WhereIF(dto.ParentOrgCode == "001" && isEmpy == false && string.IsNullOrEmpty(dto.OrgCode) && !string.IsNullOrEmpty(dto.ParentOrgCode),
+                               (t, o) => t.HandlerOrgId == dto.ParentOrgCode)
+                               .WhereIF(dto.ParentOrgCode != "001" && string.IsNullOrEmpty(dto.OrgCode) && !string.IsNullOrEmpty(dto.ParentOrgCode),
+                                (t, o) => t.HandlerOrgId.StartsWith(dto.ParentOrgCode))
+
                          .GroupBy((t, o) => o.Id)
                          .Select((t, o) => new SelectOrderId { Id = o.Id })
                          .MergeTable();
@@ -519,9 +593,13 @@ namespace Hotline.Application.StatisticalReport
                           .WhereIF(dto.IsProvince.HasValue && dto.IsProvince == true, (t, o) => o.Source == ESource.ProvinceStraight)
                             .WhereIF(dto.TypeId != null && dto.TypeId == 1, (t, o) => o.IdentityType == EIdentityType.Citizen)
                           .WhereIF(dto.TypeId != null && dto.TypeId == 2, (t, o) => o.IdentityType == EIdentityType.Enterprise)
-                          .WhereIF(dto.OrgCode == "001", (t, o) => t.HandlerOrgId == dto.OrgCode)
-                          .WhereIF(dto.OrgCode != "001" && dto.OrgCode != dto.ParentOrgCode, (t, o) => t.HandlerOrgId.StartsWith(dto.OrgCode))
-                          .WhereIF(dto.OrgCode != "001" && dto.OrgCode == dto.ParentOrgCode, (t, o) => t.HandlerOrgId == dto.OrgCode)
+                          .WhereIF(dto.OrgCode == "001" && !string.IsNullOrEmpty(dto.OrgCode), (t, o) => t.HandlerOrgId == dto.OrgCode)
+                          .WhereIF(dto.OrgCode != "001" && !string.IsNullOrEmpty(dto.OrgCode) && dto.OrgCode != dto.ParentOrgCode, (t, o) => t.HandlerOrgId.StartsWith(dto.OrgCode))
+                          .WhereIF(dto.OrgCode != "001" && !string.IsNullOrEmpty(dto.OrgCode) && dto.OrgCode == dto.ParentOrgCode, (t, o) => t.HandlerOrgId == dto.OrgCode)
+                             .WhereIF(dto.ParentOrgCode == "001" && isEmpy == false && string.IsNullOrEmpty(dto.OrgCode) && !string.IsNullOrEmpty(dto.ParentOrgCode),
+                               (t, o) => t.HandlerOrgId == dto.ParentOrgCode)
+                               .WhereIF(dto.ParentOrgCode != "001" && string.IsNullOrEmpty(dto.OrgCode) && !string.IsNullOrEmpty(dto.ParentOrgCode),
+                                (t, o) => t.HandlerOrgId.StartsWith(dto.ParentOrgCode))
                           .GroupBy((t, o) => o.Id)
                           .Select((t, o) => new SelectOrderId { Id = o.Id })
                           .MergeTable();
@@ -536,10 +614,14 @@ namespace Hotline.Application.StatisticalReport
                             .WhereIF(dto.IsProvince.HasValue && dto.IsProvince == true, (t, o) => o.Source == ESource.ProvinceStraight)
                               .WhereIF(dto.TypeId != null && dto.TypeId == 1, (t, o) => o.IdentityType == EIdentityType.Citizen)
                          .WhereIF(dto.TypeId != null && dto.TypeId == 2, (t, o) => o.IdentityType == EIdentityType.Enterprise)
-                            .WhereIF(dto.OrgCode == "001", (t, o) => t.HandlerOrgId == dto.OrgCode)
-                         .WhereIF(dto.OrgCode != "001" && dto.OrgCode != dto.ParentOrgCode, (t, o) => t.HandlerOrgId.StartsWith(dto.OrgCode))
-                         .WhereIF(dto.OrgCode != "001" && dto.OrgCode == dto.ParentOrgCode, (t, o) => t.HandlerOrgId == dto.OrgCode)
-                            .GroupBy((t, o) => o.Id)
+                            .WhereIF(dto.OrgCode == "001" && !string.IsNullOrEmpty(dto.OrgCode), (t, o) => t.HandlerOrgId == dto.OrgCode)
+                         .WhereIF(dto.OrgCode != "001" && !string.IsNullOrEmpty(dto.OrgCode) && dto.OrgCode != dto.ParentOrgCode, (t, o) => t.HandlerOrgId.StartsWith(dto.OrgCode))
+                         .WhereIF(dto.OrgCode != "001" && !string.IsNullOrEmpty(dto.OrgCode) && dto.OrgCode == dto.ParentOrgCode, (t, o) => t.HandlerOrgId == dto.OrgCode)
+                             .WhereIF(dto.ParentOrgCode == "001" && isEmpy == false && string.IsNullOrEmpty(dto.OrgCode) && !string.IsNullOrEmpty(dto.ParentOrgCode),
+                               (t, o) => t.HandlerOrgId == dto.ParentOrgCode)
+                               .WhereIF(dto.ParentOrgCode != "001" && string.IsNullOrEmpty(dto.OrgCode) && !string.IsNullOrEmpty(dto.ParentOrgCode),
+                                (t, o) => t.HandlerOrgId.StartsWith(dto.ParentOrgCode))
+                         .GroupBy((t, o) => o.Id)
                             .Select((t, o) => new SelectOrderId { Id = o.Id })
                             .MergeTable();
                     break;
@@ -551,10 +633,14 @@ namespace Hotline.Application.StatisticalReport
                              .WhereIF(dto.IsProvince.HasValue && dto.IsProvince == true, (t, o) => o.Source == ESource.ProvinceStraight)
                                .WhereIF(dto.TypeId != null && dto.TypeId == 1, (t, o) => o.IdentityType == EIdentityType.Citizen)
                          .WhereIF(dto.TypeId != null && dto.TypeId == 2, (t, o) => o.IdentityType == EIdentityType.Enterprise)
-                             .WhereIF(dto.OrgCode == "001", (t, o) => t.HandlerOrgId == dto.OrgCode)
-                         .WhereIF(dto.OrgCode != "001" && dto.OrgCode != dto.ParentOrgCode, (t, o) => t.HandlerOrgId.StartsWith(dto.OrgCode))
-                         .WhereIF(dto.OrgCode != "001" && dto.OrgCode == dto.ParentOrgCode, (t, o) => t.HandlerOrgId == dto.OrgCode)
-                             .GroupBy((t, o) => o.Id)
+                             .WhereIF(dto.OrgCode == "001" && !string.IsNullOrEmpty(dto.OrgCode), (t, o) => t.HandlerOrgId == dto.OrgCode)
+                         .WhereIF(dto.OrgCode != "001" && !string.IsNullOrEmpty(dto.OrgCode) && dto.OrgCode != dto.ParentOrgCode, (t, o) => t.HandlerOrgId.StartsWith(dto.OrgCode))
+                         .WhereIF(dto.OrgCode != "001" && !string.IsNullOrEmpty(dto.OrgCode) && dto.OrgCode == dto.ParentOrgCode, (t, o) => t.HandlerOrgId == dto.OrgCode)
+                             .WhereIF(dto.ParentOrgCode == "001" && isEmpy == false && string.IsNullOrEmpty(dto.OrgCode) && !string.IsNullOrEmpty(dto.ParentOrgCode),
+                               (t, o) => t.HandlerOrgId == dto.ParentOrgCode)
+                               .WhereIF(dto.ParentOrgCode != "001" && string.IsNullOrEmpty(dto.OrgCode) && !string.IsNullOrEmpty(dto.ParentOrgCode),
+                                (t, o) => t.HandlerOrgId.StartsWith(dto.ParentOrgCode))
+                         .GroupBy((t, o) => o.Id)
                              .Select((t, o) => new SelectOrderId { Id = o.Id })
                              .MergeTable();
                     break;
@@ -564,10 +650,15 @@ namespace Hotline.Application.StatisticalReport
                            .WhereIF(dto.IsProvince.HasValue && dto.IsProvince == true, o => o.Source == ESource.ProvinceStraight)
                              .WhereIF(dto.TypeId != null && dto.TypeId == 1, o => o.IdentityType == EIdentityType.Citizen)
                          .WhereIF(dto.TypeId != null && dto.TypeId == 2, o => o.IdentityType == EIdentityType.Enterprise)
-                            .WhereIF(dto.OrgCode == "001", o => o.ActualHandleOrgCode == dto.OrgCode)
-                            .WhereIF(dto.OrgCode != "001" && dto.OrgCode != dto.ParentOrgCode, o => o.ActualHandleOrgCode.StartsWith(dto.OrgCode))
-                            .WhereIF(dto.OrgCode != "001" && dto.OrgCode == dto.ParentOrgCode, o => o.ActualHandleOrgCode == dto.OrgCode)
-                             .Select(o => new SelectOrderId { Id = o.Id })
+                            .WhereIF(dto.OrgCode == "001" && !string.IsNullOrEmpty(dto.OrgCode), o => o.ActualHandleOrgCode == dto.OrgCode)
+                            .WhereIF(dto.OrgCode != "001" && !string.IsNullOrEmpty(dto.OrgCode) && dto.OrgCode != dto.ParentOrgCode, o => o.ActualHandleOrgCode.StartsWith(dto.OrgCode))
+                            .WhereIF(dto.OrgCode != "001" && !string.IsNullOrEmpty(dto.OrgCode) && dto.OrgCode == dto.ParentOrgCode, o => o.ActualHandleOrgCode == dto.OrgCode)
+                                .WhereIF(dto.ParentOrgCode == "001" && isEmpy == false && string.IsNullOrEmpty(dto.OrgCode) && !string.IsNullOrEmpty(dto.ParentOrgCode),
+                             o => o.ActualHandleOrgCode == dto.ParentOrgCode)
+                               .WhereIF(dto.ParentOrgCode != "001" && string.IsNullOrEmpty(dto.OrgCode) && !string.IsNullOrEmpty(dto.ParentOrgCode),
+                               o => o.ActualHandleOrgCode.StartsWith(dto.ParentOrgCode))
+
+                            .Select(o => new SelectOrderId { Id = o.Id })
                           .MergeTable();
                     break;
                 case EStatisticsType.Archived://已归档
@@ -576,10 +667,15 @@ namespace Hotline.Application.StatisticalReport
                          .WhereIF(dto.IsProvince.HasValue && dto.IsProvince == true, o => o.Source == ESource.ProvinceStraight)
                              .WhereIF(dto.TypeId != null && dto.TypeId == 1, o => o.IdentityType == EIdentityType.Citizen)
                          .WhereIF(dto.TypeId != null && dto.TypeId == 2, o => o.IdentityType == EIdentityType.Enterprise)
-                          .WhereIF(dto.OrgCode == "001", o => o.ActualHandleOrgCode == dto.OrgCode)
-                            .WhereIF(dto.OrgCode != "001" && dto.OrgCode != dto.ParentOrgCode, o => o.ActualHandleOrgCode.StartsWith(dto.OrgCode))
-                            .WhereIF(dto.OrgCode != "001" && dto.OrgCode == dto.ParentOrgCode, o => o.ActualHandleOrgCode == dto.OrgCode)
-                           .Select(o => new SelectOrderId { Id = o.Id })
+                          .WhereIF(dto.OrgCode == "001" && !string.IsNullOrEmpty(dto.OrgCode), o => o.ActualHandleOrgCode == dto.OrgCode)
+                            .WhereIF(dto.OrgCode != "001" && !string.IsNullOrEmpty(dto.OrgCode) && dto.OrgCode != dto.ParentOrgCode, o => o.ActualHandleOrgCode.StartsWith(dto.OrgCode))
+                            .WhereIF(dto.OrgCode != "001" && !string.IsNullOrEmpty(dto.OrgCode) && dto.OrgCode == dto.ParentOrgCode, o => o.ActualHandleOrgCode == dto.OrgCode)
+                              .WhereIF(dto.ParentOrgCode == "001" && isEmpy == false && string.IsNullOrEmpty(dto.OrgCode) && !string.IsNullOrEmpty(dto.ParentOrgCode),
+                             o => o.ActualHandleOrgCode == dto.ParentOrgCode)
+                               .WhereIF(dto.ParentOrgCode != "001" && string.IsNullOrEmpty(dto.OrgCode) && !string.IsNullOrEmpty(dto.ParentOrgCode),
+                               o => o.ActualHandleOrgCode.StartsWith(dto.ParentOrgCode))
+
+                            .Select(o => new SelectOrderId { Id = o.Id })
                         .MergeTable();
                     break;
                 case EStatisticsType.WaitPublished://待发布
@@ -588,10 +684,15 @@ namespace Hotline.Application.StatisticalReport
                         .WhereIF(dto.IsProvince.HasValue && dto.IsProvince == true, o => o.Source == ESource.ProvinceStraight)
                              .WhereIF(dto.TypeId != null && dto.TypeId == 1, o => o.IdentityType == EIdentityType.Citizen)
                          .WhereIF(dto.TypeId != null && dto.TypeId == 2, o => o.IdentityType == EIdentityType.Enterprise)
-                         .WhereIF(dto.OrgCode == "001", o => o.ActualHandleOrgCode == dto.OrgCode)
-                            .WhereIF(dto.OrgCode != "001" && dto.OrgCode != dto.ParentOrgCode, o => o.ActualHandleOrgCode.StartsWith(dto.OrgCode))
-                            .WhereIF(dto.OrgCode != "001" && dto.OrgCode == dto.ParentOrgCode, o => o.ActualHandleOrgCode == dto.OrgCode)
-                          .Select(o => new SelectOrderId { Id = o.Id })
+                         .WhereIF(dto.OrgCode == "001" && !string.IsNullOrEmpty(dto.OrgCode), o => o.ActualHandleOrgCode == dto.OrgCode)
+                            .WhereIF(dto.OrgCode != "001" && !string.IsNullOrEmpty(dto.OrgCode) && dto.OrgCode != dto.ParentOrgCode, o => o.ActualHandleOrgCode.StartsWith(dto.OrgCode))
+                            .WhereIF(dto.OrgCode != "001" && !string.IsNullOrEmpty(dto.OrgCode) && dto.OrgCode == dto.ParentOrgCode, o => o.ActualHandleOrgCode == dto.OrgCode)
+                             .WhereIF(dto.ParentOrgCode == "001" && isEmpy == false && string.IsNullOrEmpty(dto.OrgCode) && !string.IsNullOrEmpty(dto.ParentOrgCode),
+                             o => o.ActualHandleOrgCode == dto.ParentOrgCode)
+                               .WhereIF(dto.ParentOrgCode != "001" && string.IsNullOrEmpty(dto.OrgCode) && !string.IsNullOrEmpty(dto.ParentOrgCode),
+                               o => o.ActualHandleOrgCode.StartsWith(dto.ParentOrgCode))
+
+                            .Select(o => new SelectOrderId { Id = o.Id })
                        .MergeTable();
                     break;
                 case EStatisticsType.PublishedOpen://发布公开
@@ -600,10 +701,15 @@ namespace Hotline.Application.StatisticalReport
                         .WhereIF(dto.IsProvince.HasValue && dto.IsProvince == true, o => o.Source == ESource.ProvinceStraight)
                              .WhereIF(dto.TypeId != null && dto.TypeId == 1, o => o.IdentityType == EIdentityType.Citizen)
                          .WhereIF(dto.TypeId != null && dto.TypeId == 2, o => o.IdentityType == EIdentityType.Enterprise)
-                         .WhereIF(dto.OrgCode == "001", o => o.ActualHandleOrgCode == dto.OrgCode)
-                            .WhereIF(dto.OrgCode != "001" && dto.OrgCode != dto.ParentOrgCode, o => o.ActualHandleOrgCode.StartsWith(dto.OrgCode))
-                            .WhereIF(dto.OrgCode != "001" && dto.OrgCode == dto.ParentOrgCode, o => o.ActualHandleOrgCode == dto.OrgCode)
-                          .Select(o => new SelectOrderId { Id = o.Id })
+                         .WhereIF(dto.OrgCode == "001" && !string.IsNullOrEmpty(dto.OrgCode), o => o.ActualHandleOrgCode == dto.OrgCode)
+                            .WhereIF(dto.OrgCode != "001" && !string.IsNullOrEmpty(dto.OrgCode) && dto.OrgCode != dto.ParentOrgCode, o => o.ActualHandleOrgCode.StartsWith(dto.OrgCode))
+                            .WhereIF(dto.OrgCode != "001" && !string.IsNullOrEmpty(dto.OrgCode) && dto.OrgCode == dto.ParentOrgCode, o => o.ActualHandleOrgCode == dto.OrgCode)
+                             .WhereIF(dto.ParentOrgCode == "001" && isEmpy == false && string.IsNullOrEmpty(dto.OrgCode) && !string.IsNullOrEmpty(dto.ParentOrgCode),
+                             o => o.ActualHandleOrgCode == dto.ParentOrgCode)
+                               .WhereIF(dto.ParentOrgCode != "001" && string.IsNullOrEmpty(dto.OrgCode) && !string.IsNullOrEmpty(dto.ParentOrgCode),
+                               o => o.ActualHandleOrgCode.StartsWith(dto.ParentOrgCode))
+
+                            .Select(o => new SelectOrderId { Id = o.Id })
                        .MergeTable();
                     break;
                 case EStatisticsType.PublishedNoOpen://发布不公开
@@ -612,10 +718,15 @@ namespace Hotline.Application.StatisticalReport
                        .WhereIF(dto.IsProvince.HasValue && dto.IsProvince == true, o => o.Source == ESource.ProvinceStraight)
                              .WhereIF(dto.TypeId != null && dto.TypeId == 1, o => o.IdentityType == EIdentityType.Citizen)
                          .WhereIF(dto.TypeId != null && dto.TypeId == 2, o => o.IdentityType == EIdentityType.Enterprise)
-                        .WhereIF(dto.OrgCode == "001", o => o.ActualHandleOrgCode == dto.OrgCode)
-                            .WhereIF(dto.OrgCode != "001" && dto.OrgCode != dto.ParentOrgCode, o => o.ActualHandleOrgCode.StartsWith(dto.OrgCode))
-                            .WhereIF(dto.OrgCode != "001" && dto.OrgCode == dto.ParentOrgCode, o => o.ActualHandleOrgCode == dto.OrgCode)
-                         .Select(o => new SelectOrderId { Id = o.Id })
+                        .WhereIF(dto.OrgCode == "001" && !string.IsNullOrEmpty(dto.OrgCode), o => o.ActualHandleOrgCode == dto.OrgCode)
+                            .WhereIF(dto.OrgCode != "001" && !string.IsNullOrEmpty(dto.OrgCode) && dto.OrgCode != dto.ParentOrgCode, o => o.ActualHandleOrgCode.StartsWith(dto.OrgCode))
+                            .WhereIF(dto.OrgCode != "001" && !string.IsNullOrEmpty(dto.OrgCode) && dto.OrgCode == dto.ParentOrgCode, o => o.ActualHandleOrgCode == dto.OrgCode)
+                          .WhereIF(dto.ParentOrgCode == "001" && isEmpy == false && string.IsNullOrEmpty(dto.OrgCode) && !string.IsNullOrEmpty(dto.ParentOrgCode),
+                             o => o.ActualHandleOrgCode == dto.ParentOrgCode)
+                               .WhereIF(dto.ParentOrgCode != "001" && string.IsNullOrEmpty(dto.OrgCode) && !string.IsNullOrEmpty(dto.ParentOrgCode),
+                               o => o.ActualHandleOrgCode.StartsWith(dto.ParentOrgCode))
+
+                            .Select(o => new SelectOrderId { Id = o.Id })
                       .MergeTable();
                     break;
                 case EStatisticsType.ScreenCount://甄别总量
@@ -625,10 +736,14 @@ namespace Hotline.Application.StatisticalReport
                        .WhereIF(dto.IsProvince.HasValue && dto.IsProvince == true, (d, o) => o.Source == ESource.ProvinceStraight)
                        .WhereIF(dto.TypeId != null && dto.TypeId == 1, (d, o) => o.IdentityType == EIdentityType.Citizen)
                        .WhereIF(dto.TypeId != null && dto.TypeId == 2, (d, o) => o.IdentityType == EIdentityType.Enterprise)
-                       .WhereIF(dto.OrgCode == "001", (d, o) => d.CreatorOrgId == dto.OrgCode)
-                       .WhereIF(dto.OrgCode != "001" && dto.OrgCode != dto.ParentOrgCode, (d, o) => d.CreatorOrgId.StartsWith(dto.OrgCode))
-                       .WhereIF(dto.OrgCode != "001" && dto.OrgCode == dto.ParentOrgCode, (d, o) => d.CreatorOrgId == dto.OrgCode)
-                        .Select((d, o) => new SelectOrderId { Id = o.Id })
+                       .WhereIF(dto.OrgCode == "001" && !string.IsNullOrEmpty(dto.OrgCode), (d, o) => d.CreatorOrgId == dto.OrgCode)
+                       .WhereIF(dto.OrgCode != "001" && !string.IsNullOrEmpty(dto.OrgCode) && dto.OrgCode != dto.ParentOrgCode, (d, o) => d.CreatorOrgId.StartsWith(dto.OrgCode))
+                       .WhereIF(dto.OrgCode != "001" && !string.IsNullOrEmpty(dto.OrgCode) && dto.OrgCode == dto.ParentOrgCode, (d, o) => d.CreatorOrgId == dto.OrgCode)
+                        .WhereIF(dto.ParentOrgCode == "001" && isEmpy == false && string.IsNullOrEmpty(dto.OrgCode) && !string.IsNullOrEmpty(dto.ParentOrgCode),
+                            (d, o) => d.CreatorOrgId == dto.ParentOrgCode)
+                               .WhereIF(dto.ParentOrgCode != "001" && string.IsNullOrEmpty(dto.OrgCode) && !string.IsNullOrEmpty(dto.ParentOrgCode),
+                              (d, o) => d.CreatorOrgId.StartsWith(dto.ParentOrgCode))
+                       .Select((d, o) => new SelectOrderId { Id = o.Id })
                        .MergeTable();
                     break;
                 case EStatisticsType.ScreenApproval://带甄别
@@ -638,10 +753,15 @@ namespace Hotline.Application.StatisticalReport
                        .WhereIF(dto.IsProvince.HasValue && dto.IsProvince == true, (d, o) => o.Source == ESource.ProvinceStraight)
                        .WhereIF(dto.TypeId != null && dto.TypeId == 1, (d, o) => o.IdentityType == EIdentityType.Citizen)
                        .WhereIF(dto.TypeId != null && dto.TypeId == 2, (d, o) => o.IdentityType == EIdentityType.Enterprise)
-                       .WhereIF(dto.OrgCode == "001", (d, o) => d.CreatorOrgId == dto.OrgCode)
-                       .WhereIF(dto.OrgCode != "001" && dto.OrgCode != dto.ParentOrgCode, (d, o) => d.CreatorOrgId.StartsWith(dto.OrgCode))
-                       .WhereIF(dto.OrgCode != "001" && dto.OrgCode == dto.ParentOrgCode, (d, o) => d.CreatorOrgId == dto.OrgCode)
-                        .Select((d, o) => new SelectOrderId { Id = o.Id })
+                       .WhereIF(dto.OrgCode == "001" && !string.IsNullOrEmpty(dto.OrgCode), (d, o) => d.CreatorOrgId == dto.OrgCode)
+                       .WhereIF(dto.OrgCode != "001" && !string.IsNullOrEmpty(dto.OrgCode) && dto.OrgCode != dto.ParentOrgCode, (d, o) => d.CreatorOrgId.StartsWith(dto.OrgCode))
+                       .WhereIF(dto.OrgCode != "001" && !string.IsNullOrEmpty(dto.OrgCode) && dto.OrgCode == dto.ParentOrgCode, (d, o) => d.CreatorOrgId == dto.OrgCode)
+                       .WhereIF(dto.ParentOrgCode == "001" && isEmpy == false && string.IsNullOrEmpty(dto.OrgCode) && !string.IsNullOrEmpty(dto.ParentOrgCode),
+                            (d, o) => d.CreatorOrgId == dto.ParentOrgCode)
+                               .WhereIF(dto.ParentOrgCode != "001" && string.IsNullOrEmpty(dto.OrgCode) && !string.IsNullOrEmpty(dto.ParentOrgCode),
+                              (d, o) => d.CreatorOrgId.StartsWith(dto.ParentOrgCode))
+
+                       .Select((d, o) => new SelectOrderId { Id = o.Id })
                        .MergeTable();
                     break;
                 case EStatisticsType.ScreenPass://甄别通过
@@ -651,10 +771,14 @@ namespace Hotline.Application.StatisticalReport
                        .WhereIF(dto.IsProvince.HasValue && dto.IsProvince == true, (d, o) => o.Source == ESource.ProvinceStraight)
                        .WhereIF(dto.TypeId != null && dto.TypeId == 1, (d, o) => o.IdentityType == EIdentityType.Citizen)
                        .WhereIF(dto.TypeId != null && dto.TypeId == 2, (d, o) => o.IdentityType == EIdentityType.Enterprise)
-                       .WhereIF(dto.OrgCode == "001", (d, o) => d.CreatorOrgId == dto.OrgCode)
-                       .WhereIF(dto.OrgCode != "001" && dto.OrgCode != dto.ParentOrgCode, (d, o) => d.CreatorOrgId.StartsWith(dto.OrgCode))
-                       .WhereIF(dto.OrgCode != "001" && dto.OrgCode == dto.ParentOrgCode, (d, o) => d.CreatorOrgId == dto.OrgCode)
-                        .Select((d, o) => new SelectOrderId { Id = o.Id })
+                       .WhereIF(dto.OrgCode == "001" && !string.IsNullOrEmpty(dto.OrgCode), (d, o) => d.CreatorOrgId == dto.OrgCode)
+                       .WhereIF(dto.OrgCode != "001" && !string.IsNullOrEmpty(dto.OrgCode) && dto.OrgCode != dto.ParentOrgCode, (d, o) => d.CreatorOrgId.StartsWith(dto.OrgCode))
+                       .WhereIF(dto.OrgCode != "001" && !string.IsNullOrEmpty(dto.OrgCode) && dto.OrgCode == dto.ParentOrgCode, (d, o) => d.CreatorOrgId == dto.OrgCode)
+                        .WhereIF(dto.ParentOrgCode == "001" && isEmpy == false && string.IsNullOrEmpty(dto.OrgCode) && !string.IsNullOrEmpty(dto.ParentOrgCode),
+                            (d, o) => d.CreatorOrgId == dto.ParentOrgCode)
+                               .WhereIF(dto.ParentOrgCode != "001" && string.IsNullOrEmpty(dto.OrgCode) && !string.IsNullOrEmpty(dto.ParentOrgCode),
+                              (d, o) => d.CreatorOrgId.StartsWith(dto.ParentOrgCode))
+                       .Select((d, o) => new SelectOrderId { Id = o.Id })
                        .MergeTable();
                     break;
                 case EStatisticsType.ScreenNotPass://甄别不通过
@@ -664,10 +788,14 @@ namespace Hotline.Application.StatisticalReport
                       .WhereIF(dto.IsProvince.HasValue && dto.IsProvince == true, (d, o) => o.Source == ESource.ProvinceStraight)
                       .WhereIF(dto.TypeId != null && dto.TypeId == 1, (d, o) => o.IdentityType == EIdentityType.Citizen)
                       .WhereIF(dto.TypeId != null && dto.TypeId == 2, (d, o) => o.IdentityType == EIdentityType.Enterprise)
-                      .WhereIF(dto.OrgCode == "001", (d, o) => d.CreatorOrgId == dto.OrgCode)
-                       .WhereIF(dto.OrgCode != "001" && dto.OrgCode != dto.ParentOrgCode, (d, o) => d.CreatorOrgId.StartsWith(dto.OrgCode))
-                       .WhereIF(dto.OrgCode != "001" && dto.OrgCode == dto.ParentOrgCode, (d, o) => d.CreatorOrgId == dto.OrgCode)
-                        .Select((d, o) => new SelectOrderId { Id = o.Id })
+                      .WhereIF(dto.OrgCode == "001" && !string.IsNullOrEmpty(dto.OrgCode), (d, o) => d.CreatorOrgId == dto.OrgCode)
+                       .WhereIF(dto.OrgCode != "001" && !string.IsNullOrEmpty(dto.OrgCode) && dto.OrgCode != dto.ParentOrgCode, (d, o) => d.CreatorOrgId.StartsWith(dto.OrgCode))
+                       .WhereIF(dto.OrgCode != "001" && !string.IsNullOrEmpty(dto.OrgCode) && dto.OrgCode == dto.ParentOrgCode, (d, o) => d.CreatorOrgId == dto.OrgCode)
+                        .WhereIF(dto.ParentOrgCode == "001" && isEmpy == false && string.IsNullOrEmpty(dto.OrgCode) && !string.IsNullOrEmpty(dto.ParentOrgCode),
+                            (d, o) => d.CreatorOrgId == dto.ParentOrgCode)
+                               .WhereIF(dto.ParentOrgCode != "001" && string.IsNullOrEmpty(dto.OrgCode) && !string.IsNullOrEmpty(dto.ParentOrgCode),
+                              (d, o) => d.CreatorOrgId.StartsWith(dto.ParentOrgCode))
+                       .Select((d, o) => new SelectOrderId { Id = o.Id })
                        .MergeTable();
                     break;
                 default:
@@ -927,6 +1055,13 @@ namespace Hotline.Application.StatisticalReport
             if (string.IsNullOrEmpty(dto.ParentOrgCode) && dto.OrgCode == _sessionContext.RequiredOrgId)
                 dto.ParentOrgCode = _sessionContext.RequiredOrgId;
 
+            bool isEmpy = false;
+            if (string.IsNullOrEmpty(dto.ParentOrgCode))
+                isEmpy = true;
+
+            if (string.IsNullOrEmpty(dto.ParentOrgCode) && string.IsNullOrEmpty(dto.OrgCode))
+                dto.ParentOrgCode = _sessionContext.RequiredOrgId;
+
             switch (dto.StatisticsType)
             {
                 case EStatisticsType.YBOrderCountNum:
@@ -939,6 +1074,11 @@ namespace Hotline.Application.StatisticalReport
                                .WhereIF(dto.OrgCode == "001", o => o.ActualHandleOrgCode == dto.OrgCode)
                                .WhereIF(dto.OrgCode != "001" && dto.OrgCode != dto.ParentOrgCode, o => o.ActualHandleOrgCode.StartsWith(dto.OrgCode))
                                .WhereIF(dto.OrgCode != "001" && dto.OrgCode == dto.ParentOrgCode, o => o.ActualHandleOrgCode == dto.OrgCode)
+
+                            .WhereIF(dto.ParentOrgCode == "001" && isEmpy == false && string.IsNullOrEmpty(dto.OrgCode) && !string.IsNullOrEmpty(dto.ParentOrgCode),
+                            o => o.ActualHandleOrgCode == dto.ParentOrgCode)
+                            .WhereIF(dto.ParentOrgCode != "001" && string.IsNullOrEmpty(dto.OrgCode) && !string.IsNullOrEmpty(dto.ParentOrgCode),
+                            o => o.ActualHandleOrgCode.StartsWith(dto.ParentOrgCode))
                                .Select(o => new SelectOrderId { Id = o.Id })
                              .MergeTable()
                              .GroupBy(p => p.Id).MergeTable();
@@ -946,13 +1086,18 @@ namespace Hotline.Application.StatisticalReport
                 case EStatisticsType.ZBOrderCountNum:
                     //工单在办
                     var orderzbquery = _orderRepository.Queryable()
-                             .Where(o => o.CreationTime >= dto.StartTime && o.CreationTime <= dto.EndTime && o.Status < EOrderStatus.Filed)
+                             .Where(o => o.CreationTime >= dto.StartTime && o.CreationTime <= dto.EndTime && o.Status < EOrderStatus.Filed && o.Status > EOrderStatus.WaitForAccept)
                              .WhereIF(dto.IsProvince.HasValue && dto.IsProvince == true, o => o.Source == ESource.ProvinceStraight)
                              .WhereIF(dto.TypeId != null && dto.TypeId == 1, o => o.IdentityType == EIdentityType.Citizen)
                               .WhereIF(dto.TypeId != null && dto.TypeId == 2, o => o.IdentityType == EIdentityType.Enterprise)
                               .WhereIF(dto.OrgCode == "001", o => o.CurrentHandleOrgId == dto.OrgCode)
                               .WhereIF(dto.OrgCode != "001" && dto.OrgCode != dto.ParentOrgCode, o => o.CurrentHandleOrgId.StartsWith(dto.OrgCode))
                               .WhereIF(dto.OrgCode != "001" && dto.OrgCode == dto.ParentOrgCode, o => o.CurrentHandleOrgId == dto.OrgCode)
+                              .WhereIF(dto.ParentOrgCode == "001" && isEmpy == false && string.IsNullOrEmpty(dto.OrgCode) && !string.IsNullOrEmpty(dto.ParentOrgCode),
+                            o => o.CurrentHandleOrgId == dto.ParentOrgCode)
+                            .WhereIF(dto.ParentOrgCode != "001" && string.IsNullOrEmpty(dto.OrgCode) && !string.IsNullOrEmpty(dto.ParentOrgCode),
+                            o => o.CurrentHandleOrgId.StartsWith(dto.ParentOrgCode))
+
                                .Select(o => new SelectOrderId { Id = o.Id })
                             .MergeTable();
                     //会签在办
@@ -981,6 +1126,11 @@ namespace Hotline.Application.StatisticalReport
                         .WhereIF(dto.OrgCode == "001", (d, o) => d.ApplyOrgCode == dto.OrgCode)
                         .WhereIF(dto.OrgCode != "001" && dto.OrgCode != dto.ParentOrgCode, (d, o) => d.ApplyOrgCode.StartsWith(dto.OrgCode))
                         .WhereIF(dto.OrgCode != "001" && dto.OrgCode == dto.ParentOrgCode, (d, o) => d.ApplyOrgCode == dto.OrgCode)
+
+                         .WhereIF(dto.ParentOrgCode == "001" && isEmpy == false && string.IsNullOrEmpty(dto.OrgCode) && !string.IsNullOrEmpty(dto.ParentOrgCode),
+                            (d, o) => d.ApplyOrgCode == dto.ParentOrgCode)
+                            .WhereIF(dto.ParentOrgCode != "001" && string.IsNullOrEmpty(dto.OrgCode) && !string.IsNullOrEmpty(dto.ParentOrgCode),
+                            (d, o) => d.ApplyOrgCode.StartsWith(dto.ParentOrgCode))
                         .OrderByDescending((d, o) => o.CreationTime)
                         .Select((d, o) => new SelectOrderId { Id = o.Id })
                        .MergeTable();
@@ -994,18 +1144,28 @@ namespace Hotline.Application.StatisticalReport
                           .WhereIF(dto.OrgCode == "001", o => o.ActualHandleOrgCode == dto.OrgCode)
                           .WhereIF(dto.OrgCode != "001" && dto.OrgCode != dto.ParentOrgCode, o => o.ActualHandleOrgCode.StartsWith(dto.OrgCode))
                           .WhereIF(dto.OrgCode != "001" && dto.OrgCode == dto.ParentOrgCode, o => o.ActualHandleOrgCode == dto.OrgCode)
+
+                          .WhereIF(dto.ParentOrgCode == "001" && isEmpy == false && string.IsNullOrEmpty(dto.OrgCode) && !string.IsNullOrEmpty(dto.ParentOrgCode),
+                            o => o.ActualHandleOrgCode == dto.ParentOrgCode)
+                            .WhereIF(dto.ParentOrgCode != "001" && string.IsNullOrEmpty(dto.OrgCode) && !string.IsNullOrEmpty(dto.ParentOrgCode),
+                             o => o.ActualHandleOrgCode.StartsWith(dto.ParentOrgCode))
                            .Select(o => new SelectOrderId { Id = o.Id })
                         .MergeTable();
                     break;
                 case EStatisticsType.ZBOverdue://待办超期
                     query = _orderRepository.Queryable()
-                          .Where(o => o.CreationTime >= dto.StartTime && o.CreationTime <= dto.EndTime && o.Status < EOrderStatus.Filed && o.ExpiredTime < DateTime.Now)
+                          .Where(o => o.CreationTime >= dto.StartTime && o.CreationTime <= dto.EndTime && o.Status > EOrderStatus.WaitForAccept && o.Status < EOrderStatus.Filed && o.ExpiredTime < DateTime.Now)
                           .WhereIF(dto.IsProvince.HasValue && dto.IsProvince == true, o => o.Source == ESource.ProvinceStraight)
                           .WhereIF(dto.TypeId != null && dto.TypeId == 1, o => o.IdentityType == EIdentityType.Citizen)
                            .WhereIF(dto.TypeId != null && dto.TypeId == 2, o => o.IdentityType == EIdentityType.Enterprise)
                            .WhereIF(dto.OrgCode == "001", o => o.CurrentHandleOrgId == dto.OrgCode)
                            .WhereIF(dto.OrgCode != "001" && dto.OrgCode != dto.ParentOrgCode, o => o.CurrentHandleOrgId.StartsWith(dto.OrgCode))
                            .WhereIF(dto.OrgCode != "001" && dto.OrgCode == dto.ParentOrgCode, o => o.CurrentHandleOrgId == dto.OrgCode)
+                            .WhereIF(dto.ParentOrgCode == "001" && isEmpy == false && string.IsNullOrEmpty(dto.OrgCode) && !string.IsNullOrEmpty(dto.ParentOrgCode),
+                            o => o.CurrentHandleOrgId == dto.ParentOrgCode)
+                            .WhereIF(dto.ParentOrgCode != "001" && string.IsNullOrEmpty(dto.OrgCode) && !string.IsNullOrEmpty(dto.ParentOrgCode),
+                             o => o.CurrentHandleOrgId.StartsWith(dto.ParentOrgCode))
+
                             .Select(o => new SelectOrderId { Id = o.Id })
                          .MergeTable();
                     break;
@@ -1021,6 +1181,10 @@ namespace Hotline.Application.StatisticalReport
                          .WhereIF(dto.OrgCode == "001", (t, o) => t.HandlerOrgId == dto.OrgCode)
                          .WhereIF(dto.OrgCode != "001" && dto.OrgCode != dto.ParentOrgCode, (t, o) => t.HandlerOrgId.StartsWith(dto.OrgCode))
                          .WhereIF(dto.OrgCode != "001" && dto.OrgCode == dto.ParentOrgCode, (t, o) => t.HandlerOrgId == dto.OrgCode)
+                         .WhereIF(dto.ParentOrgCode == "001" && isEmpy == false && string.IsNullOrEmpty(dto.OrgCode) && !string.IsNullOrEmpty(dto.ParentOrgCode),
+                          (t, o) => t.HandlerOrgId == dto.ParentOrgCode)
+                            .WhereIF(dto.ParentOrgCode != "001" && string.IsNullOrEmpty(dto.OrgCode) && !string.IsNullOrEmpty(dto.ParentOrgCode),
+                             (t, o) => t.HandlerOrgId.StartsWith(dto.ParentOrgCode))
                          .GroupBy((t, o) => o.Id)
                          .Select((t, o) => new SelectOrderId { Id = o.Id })
                          .MergeTable();
@@ -1036,6 +1200,10 @@ namespace Hotline.Application.StatisticalReport
                          .WhereIF(dto.OrgCode == "001", (t, o) => t.HandlerOrgId == dto.OrgCode)
                          .WhereIF(dto.OrgCode != "001" && dto.OrgCode != dto.ParentOrgCode, (t, o) => t.HandlerOrgId.StartsWith(dto.OrgCode))
                          .WhereIF(dto.OrgCode != "001" && dto.OrgCode == dto.ParentOrgCode, (t, o) => t.HandlerOrgId == dto.OrgCode)
+                           .WhereIF(dto.ParentOrgCode == "001" && isEmpy == false && string.IsNullOrEmpty(dto.OrgCode) && !string.IsNullOrEmpty(dto.ParentOrgCode),
+                          (t, o) => t.HandlerOrgId == dto.ParentOrgCode)
+                            .WhereIF(dto.ParentOrgCode != "001" && string.IsNullOrEmpty(dto.OrgCode) && !string.IsNullOrEmpty(dto.ParentOrgCode),
+                             (t, o) => t.HandlerOrgId.StartsWith(dto.ParentOrgCode))
                          .GroupBy((t, o) => o.Id)
                          .Select((t, o) => new SelectOrderId { Id = o.Id })
                          .MergeTable();
@@ -1043,24 +1211,34 @@ namespace Hotline.Application.StatisticalReport
                 case EStatisticsType.SubtotalOverdue://超期件数
                     //已办超期
                     var ybcqquery = _orderRepository.Queryable()
-                        .Where(o => o.CreationTime >= dto.StartTime && o.CreationTime <= dto.EndTime && o.Status >= EOrderStatus.Filed && o.ActualHandleTime > o.ExpiredTime)
+                        .Where(o => o.CreationTime >= dto.StartTime && o.CreationTime <= dto.EndTime && o.Status > EOrderStatus.WaitForAccept && o.Status >= EOrderStatus.Filed && o.ActualHandleTime > o.ExpiredTime)
                         .WhereIF(dto.IsProvince.HasValue && dto.IsProvince == true, o => o.Source == ESource.ProvinceStraight)
                         .WhereIF(dto.TypeId != null && dto.TypeId == 1, o => o.IdentityType == EIdentityType.Citizen)
                          .WhereIF(dto.TypeId != null && dto.TypeId == 2, o => o.IdentityType == EIdentityType.Enterprise)
                          .WhereIF(dto.OrgCode == "001", o => o.ActualHandleOrgCode == dto.OrgCode)
                          .WhereIF(dto.OrgCode != "001" && dto.OrgCode != dto.ParentOrgCode, o => o.ActualHandleOrgCode.StartsWith(dto.OrgCode))
                          .WhereIF(dto.OrgCode != "001" && dto.OrgCode == dto.ParentOrgCode, o => o.ActualHandleOrgCode == dto.OrgCode)
+                      .WhereIF(dto.ParentOrgCode == "001" && isEmpy == false && string.IsNullOrEmpty(dto.OrgCode) && !string.IsNullOrEmpty(dto.ParentOrgCode),
+                            o => o.ActualHandleOrgCode == dto.ParentOrgCode)
+                            .WhereIF(dto.ParentOrgCode != "001" && string.IsNullOrEmpty(dto.OrgCode) && !string.IsNullOrEmpty(dto.ParentOrgCode),
+                             o => o.ActualHandleOrgCode.StartsWith(dto.ParentOrgCode))
+
                           .Select(o => new SelectOrderId { Id = o.Id })
                           .MergeTable();
                     //待办超期
                     var dbcqquery = _orderRepository.Queryable()
-                          .Where(o => o.CreationTime >= dto.StartTime && o.CreationTime <= dto.EndTime && o.Status < EOrderStatus.Filed && o.ExpiredTime < DateTime.Now)
+                          .Where(o => o.CreationTime >= dto.StartTime && o.CreationTime <= dto.EndTime && o.Status > EOrderStatus.WaitForAccept && o.Status < EOrderStatus.Filed && o.ExpiredTime < DateTime.Now)
                           .WhereIF(dto.IsProvince.HasValue && dto.IsProvince == true, o => o.Source == ESource.ProvinceStraight)
                           .WhereIF(dto.TypeId != null && dto.TypeId == 1, o => o.IdentityType == EIdentityType.Citizen)
                            .WhereIF(dto.TypeId != null && dto.TypeId == 2, o => o.IdentityType == EIdentityType.Enterprise)
                            .WhereIF(dto.OrgCode == "001", o => o.CurrentHandleOrgId == dto.OrgCode)
                            .WhereIF(dto.OrgCode != "001" && dto.OrgCode != dto.ParentOrgCode, o => o.CurrentHandleOrgId.StartsWith(dto.OrgCode))
                            .WhereIF(dto.OrgCode != "001" && dto.OrgCode == dto.ParentOrgCode, o => o.CurrentHandleOrgId == dto.OrgCode)
+                     .WhereIF(dto.ParentOrgCode == "001" && isEmpy == false && string.IsNullOrEmpty(dto.OrgCode) && !string.IsNullOrEmpty(dto.ParentOrgCode),
+                            o => o.CurrentHandleOrgId == dto.ParentOrgCode)
+                            .WhereIF(dto.ParentOrgCode != "001" && string.IsNullOrEmpty(dto.OrgCode) && !string.IsNullOrEmpty(dto.ParentOrgCode),
+                             o => o.CurrentHandleOrgId.StartsWith(dto.ParentOrgCode))
+
                             .Select(o => new SelectOrderId { Id = o.Id })
                          .MergeTable();
                     //会签已办超期
@@ -1075,6 +1253,10 @@ namespace Hotline.Application.StatisticalReport
                          .WhereIF(dto.OrgCode == "001", (t, o) => t.HandlerOrgId == dto.OrgCode)
                          .WhereIF(dto.OrgCode != "001" && dto.OrgCode != dto.ParentOrgCode, (t, o) => t.HandlerOrgId.StartsWith(dto.OrgCode))
                          .WhereIF(dto.OrgCode != "001" && dto.OrgCode == dto.ParentOrgCode, (t, o) => t.HandlerOrgId == dto.OrgCode)
+                                .WhereIF(dto.ParentOrgCode == "001" && isEmpy == false && string.IsNullOrEmpty(dto.OrgCode) && !string.IsNullOrEmpty(dto.ParentOrgCode),
+                            (t, o) => t.HandlerOrgId == dto.ParentOrgCode)
+                            .WhereIF(dto.ParentOrgCode != "001" && string.IsNullOrEmpty(dto.OrgCode) && !string.IsNullOrEmpty(dto.ParentOrgCode),
+                             (t, o) => t.HandlerOrgId.StartsWith(dto.ParentOrgCode))
                          .GroupBy((t, o) => o.Id)
                          .Select((t, o) => new SelectOrderId { Id = o.Id })
                          .MergeTable();
@@ -1088,6 +1270,11 @@ namespace Hotline.Application.StatisticalReport
                           .WhereIF(dto.OrgCode == "001", (t, o) => t.HandlerOrgId == dto.OrgCode)
                           .WhereIF(dto.OrgCode != "001" && dto.OrgCode != dto.ParentOrgCode, (t, o) => t.HandlerOrgId.StartsWith(dto.OrgCode))
                           .WhereIF(dto.OrgCode != "001" && dto.OrgCode == dto.ParentOrgCode, (t, o) => t.HandlerOrgId == dto.OrgCode)
+
+                          .WhereIF(dto.ParentOrgCode == "001" && isEmpy == false && string.IsNullOrEmpty(dto.OrgCode) && !string.IsNullOrEmpty(dto.ParentOrgCode),
+                            (t, o) => t.HandlerOrgId == dto.ParentOrgCode)
+                            .WhereIF(dto.ParentOrgCode != "001" && string.IsNullOrEmpty(dto.OrgCode) && !string.IsNullOrEmpty(dto.ParentOrgCode),
+                             (t, o) => t.HandlerOrgId.StartsWith(dto.ParentOrgCode))
                           .GroupBy((t, o) => o.Id)
                           .Select((t, o) => new SelectOrderId { Id = o.Id })
                           .MergeTable();
@@ -1105,6 +1292,10 @@ namespace Hotline.Application.StatisticalReport
                             .WhereIF(dto.OrgCode == "001", (t, o) => t.HandlerOrgId == dto.OrgCode)
                          .WhereIF(dto.OrgCode != "001" && dto.OrgCode != dto.ParentOrgCode, (t, o) => t.HandlerOrgId.StartsWith(dto.OrgCode))
                          .WhereIF(dto.OrgCode != "001" && dto.OrgCode == dto.ParentOrgCode, (t, o) => t.HandlerOrgId == dto.OrgCode)
+                          .WhereIF(dto.ParentOrgCode == "001" && isEmpy == false && string.IsNullOrEmpty(dto.OrgCode) && !string.IsNullOrEmpty(dto.ParentOrgCode),
+                            (t, o) => t.HandlerOrgId == dto.ParentOrgCode)
+                            .WhereIF(dto.ParentOrgCode != "001" && string.IsNullOrEmpty(dto.OrgCode) && !string.IsNullOrEmpty(dto.ParentOrgCode),
+                             (t, o) => t.HandlerOrgId.StartsWith(dto.ParentOrgCode))
                             .GroupBy((t, o) => o.Id)
                             .Select((t, o) => new SelectOrderId { Id = o.Id })
                             .MergeTable();
@@ -1120,6 +1311,11 @@ namespace Hotline.Application.StatisticalReport
                              .WhereIF(dto.OrgCode == "001", (t, o) => t.HandlerOrgId == dto.OrgCode)
                          .WhereIF(dto.OrgCode != "001" && dto.OrgCode != dto.ParentOrgCode, (t, o) => t.HandlerOrgId.StartsWith(dto.OrgCode))
                          .WhereIF(dto.OrgCode != "001" && dto.OrgCode == dto.ParentOrgCode, (t, o) => t.HandlerOrgId == dto.OrgCode)
+                          .WhereIF(dto.ParentOrgCode == "001" && isEmpy == false && string.IsNullOrEmpty(dto.OrgCode) && !string.IsNullOrEmpty(dto.ParentOrgCode),
+                            (t, o) => t.HandlerOrgId == dto.ParentOrgCode)
+                            .WhereIF(dto.ParentOrgCode != "001" && string.IsNullOrEmpty(dto.OrgCode) && !string.IsNullOrEmpty(dto.ParentOrgCode),
+                             (t, o) => t.HandlerOrgId.StartsWith(dto.ParentOrgCode))
+
                              .GroupBy((t, o) => o.Id)
                              .Select((t, o) => new SelectOrderId { Id = o.Id })
                              .MergeTable();
@@ -1133,6 +1329,10 @@ namespace Hotline.Application.StatisticalReport
                             .WhereIF(dto.OrgCode == "001", o => o.ActualHandleOrgCode == dto.OrgCode)
                             .WhereIF(dto.OrgCode != "001" && dto.OrgCode != dto.ParentOrgCode, o => o.ActualHandleOrgCode.StartsWith(dto.OrgCode))
                             .WhereIF(dto.OrgCode != "001" && dto.OrgCode == dto.ParentOrgCode, o => o.ActualHandleOrgCode == dto.OrgCode)
+                            .WhereIF(dto.ParentOrgCode == "001" && isEmpy == false && string.IsNullOrEmpty(dto.OrgCode) && !string.IsNullOrEmpty(dto.ParentOrgCode),
+                          o => o.ActualHandleOrgCode == dto.ParentOrgCode)
+                            .WhereIF(dto.ParentOrgCode != "001" && string.IsNullOrEmpty(dto.OrgCode) && !string.IsNullOrEmpty(dto.ParentOrgCode),
+                            o => o.ActualHandleOrgCode.StartsWith(dto.ParentOrgCode))
                              .Select(o => new SelectOrderId { Id = o.Id })
                           .MergeTable();
                     break;
@@ -1145,6 +1345,10 @@ namespace Hotline.Application.StatisticalReport
                           .WhereIF(dto.OrgCode == "001", o => o.ActualHandleOrgCode == dto.OrgCode)
                             .WhereIF(dto.OrgCode != "001" && dto.OrgCode != dto.ParentOrgCode, o => o.ActualHandleOrgCode.StartsWith(dto.OrgCode))
                             .WhereIF(dto.OrgCode != "001" && dto.OrgCode == dto.ParentOrgCode, o => o.ActualHandleOrgCode == dto.OrgCode)
+                            .WhereIF(dto.ParentOrgCode == "001" && isEmpy == false && string.IsNullOrEmpty(dto.OrgCode) && !string.IsNullOrEmpty(dto.ParentOrgCode),
+                          o => o.ActualHandleOrgCode == dto.ParentOrgCode)
+                            .WhereIF(dto.ParentOrgCode != "001" && string.IsNullOrEmpty(dto.OrgCode) && !string.IsNullOrEmpty(dto.ParentOrgCode),
+                            o => o.ActualHandleOrgCode.StartsWith(dto.ParentOrgCode))
                            .Select(o => new SelectOrderId { Id = o.Id })
                         .MergeTable();
                     break;
@@ -1157,6 +1361,10 @@ namespace Hotline.Application.StatisticalReport
                          .WhereIF(dto.OrgCode == "001", o => o.ActualHandleOrgCode == dto.OrgCode)
                             .WhereIF(dto.OrgCode != "001" && dto.OrgCode != dto.ParentOrgCode, o => o.ActualHandleOrgCode.StartsWith(dto.OrgCode))
                             .WhereIF(dto.OrgCode != "001" && dto.OrgCode == dto.ParentOrgCode, o => o.ActualHandleOrgCode == dto.OrgCode)
+                            .WhereIF(dto.ParentOrgCode == "001" && isEmpy == false && string.IsNullOrEmpty(dto.OrgCode) && !string.IsNullOrEmpty(dto.ParentOrgCode),
+                          o => o.ActualHandleOrgCode == dto.ParentOrgCode)
+                            .WhereIF(dto.ParentOrgCode != "001" && string.IsNullOrEmpty(dto.OrgCode) && !string.IsNullOrEmpty(dto.ParentOrgCode),
+                            o => o.ActualHandleOrgCode.StartsWith(dto.ParentOrgCode))
                           .Select(o => new SelectOrderId { Id = o.Id })
                        .MergeTable();
                     break;
@@ -1169,6 +1377,10 @@ namespace Hotline.Application.StatisticalReport
                          .WhereIF(dto.OrgCode == "001", o => o.ActualHandleOrgCode == dto.OrgCode)
                             .WhereIF(dto.OrgCode != "001" && dto.OrgCode != dto.ParentOrgCode, o => o.ActualHandleOrgCode.StartsWith(dto.OrgCode))
                             .WhereIF(dto.OrgCode != "001" && dto.OrgCode == dto.ParentOrgCode, o => o.ActualHandleOrgCode == dto.OrgCode)
+                            .WhereIF(dto.ParentOrgCode == "001" && isEmpy == false && string.IsNullOrEmpty(dto.OrgCode) && !string.IsNullOrEmpty(dto.ParentOrgCode),
+                          o => o.ActualHandleOrgCode == dto.ParentOrgCode)
+                            .WhereIF(dto.ParentOrgCode != "001" && string.IsNullOrEmpty(dto.OrgCode) && !string.IsNullOrEmpty(dto.ParentOrgCode),
+                            o => o.ActualHandleOrgCode.StartsWith(dto.ParentOrgCode))
                           .Select(o => new SelectOrderId { Id = o.Id })
                        .MergeTable();
                     break;
@@ -1181,6 +1393,11 @@ namespace Hotline.Application.StatisticalReport
                         .WhereIF(dto.OrgCode == "001", o => o.ActualHandleOrgCode == dto.OrgCode)
                             .WhereIF(dto.OrgCode != "001" && dto.OrgCode != dto.ParentOrgCode, o => o.ActualHandleOrgCode.StartsWith(dto.OrgCode))
                             .WhereIF(dto.OrgCode != "001" && dto.OrgCode == dto.ParentOrgCode, o => o.ActualHandleOrgCode == dto.OrgCode)
+                            .WhereIF(dto.ParentOrgCode == "001" && isEmpy == false && string.IsNullOrEmpty(dto.OrgCode) && !string.IsNullOrEmpty(dto.ParentOrgCode),
+                          o => o.ActualHandleOrgCode == dto.ParentOrgCode)
+                            .WhereIF(dto.ParentOrgCode != "001" && string.IsNullOrEmpty(dto.OrgCode) && !string.IsNullOrEmpty(dto.ParentOrgCode),
+                            o => o.ActualHandleOrgCode.StartsWith(dto.ParentOrgCode))
+
                          .Select(o => new SelectOrderId { Id = o.Id })
                       .MergeTable();
                     break;
@@ -1194,6 +1411,10 @@ namespace Hotline.Application.StatisticalReport
                        .WhereIF(dto.OrgCode == "001", (d, o) => d.CreatorOrgId == dto.OrgCode)
                        .WhereIF(dto.OrgCode != "001" && dto.OrgCode != dto.ParentOrgCode, (d, o) => d.CreatorOrgId.StartsWith(dto.OrgCode))
                        .WhereIF(dto.OrgCode != "001" && dto.OrgCode == dto.ParentOrgCode, (d, o) => d.CreatorOrgId == dto.OrgCode)
+                        .WhereIF(dto.ParentOrgCode == "001" && isEmpy == false && string.IsNullOrEmpty(dto.OrgCode) && !string.IsNullOrEmpty(dto.ParentOrgCode),
+                         (d, o) => d.CreatorOrgId == dto.ParentOrgCode)
+                            .WhereIF(dto.ParentOrgCode != "001" && string.IsNullOrEmpty(dto.OrgCode) && !string.IsNullOrEmpty(dto.ParentOrgCode),
+                           (d, o) => d.CreatorOrgId.StartsWith(dto.ParentOrgCode))
                         .Select((d, o) => new SelectOrderId { Id = o.Id })
                        .MergeTable();
                     break;
@@ -1207,6 +1428,10 @@ namespace Hotline.Application.StatisticalReport
                        .WhereIF(dto.OrgCode == "001", (d, o) => d.CreatorOrgId == dto.OrgCode)
                        .WhereIF(dto.OrgCode != "001" && dto.OrgCode != dto.ParentOrgCode, (d, o) => d.CreatorOrgId.StartsWith(dto.OrgCode))
                        .WhereIF(dto.OrgCode != "001" && dto.OrgCode == dto.ParentOrgCode, (d, o) => d.CreatorOrgId == dto.OrgCode)
+                        .WhereIF(dto.ParentOrgCode == "001" && isEmpy == false && string.IsNullOrEmpty(dto.OrgCode) && !string.IsNullOrEmpty(dto.ParentOrgCode),
+                         (d, o) => d.CreatorOrgId == dto.ParentOrgCode)
+                            .WhereIF(dto.ParentOrgCode != "001" && string.IsNullOrEmpty(dto.OrgCode) && !string.IsNullOrEmpty(dto.ParentOrgCode),
+                           (d, o) => d.CreatorOrgId.StartsWith(dto.ParentOrgCode))
                         .Select((d, o) => new SelectOrderId { Id = o.Id })
                        .MergeTable();
                     break;
@@ -1220,6 +1445,10 @@ namespace Hotline.Application.StatisticalReport
                        .WhereIF(dto.OrgCode == "001", (d, o) => d.CreatorOrgId == dto.OrgCode)
                        .WhereIF(dto.OrgCode != "001" && dto.OrgCode != dto.ParentOrgCode, (d, o) => d.CreatorOrgId.StartsWith(dto.OrgCode))
                        .WhereIF(dto.OrgCode != "001" && dto.OrgCode == dto.ParentOrgCode, (d, o) => d.CreatorOrgId == dto.OrgCode)
+                        .WhereIF(dto.ParentOrgCode == "001" && isEmpy == false && string.IsNullOrEmpty(dto.OrgCode) && !string.IsNullOrEmpty(dto.ParentOrgCode),
+                         (d, o) => d.CreatorOrgId == dto.ParentOrgCode)
+                            .WhereIF(dto.ParentOrgCode != "001" && string.IsNullOrEmpty(dto.OrgCode) && !string.IsNullOrEmpty(dto.ParentOrgCode),
+                           (d, o) => d.CreatorOrgId.StartsWith(dto.ParentOrgCode))
                         .Select((d, o) => new SelectOrderId { Id = o.Id })
                        .MergeTable();
                     break;
@@ -1233,6 +1462,10 @@ namespace Hotline.Application.StatisticalReport
                       .WhereIF(dto.OrgCode == "001", (d, o) => d.CreatorOrgId == dto.OrgCode)
                        .WhereIF(dto.OrgCode != "001" && dto.OrgCode != dto.ParentOrgCode, (d, o) => d.CreatorOrgId.StartsWith(dto.OrgCode))
                        .WhereIF(dto.OrgCode != "001" && dto.OrgCode == dto.ParentOrgCode, (d, o) => d.CreatorOrgId == dto.OrgCode)
+                        .WhereIF(dto.ParentOrgCode == "001" && isEmpy == false && string.IsNullOrEmpty(dto.OrgCode) && !string.IsNullOrEmpty(dto.ParentOrgCode),
+                         (d, o) => d.CreatorOrgId == dto.ParentOrgCode)
+                            .WhereIF(dto.ParentOrgCode != "001" && string.IsNullOrEmpty(dto.OrgCode) && !string.IsNullOrEmpty(dto.ParentOrgCode),
+                           (d, o) => d.CreatorOrgId.StartsWith(dto.ParentOrgCode))
                         .Select((d, o) => new SelectOrderId { Id = o.Id })
                        .MergeTable();
                     break;
@@ -2303,7 +2536,7 @@ namespace Hotline.Application.StatisticalReport
         {
             return _orderRepository.Queryable()
                  .WhereIF(dto.TimeType == 2, p => p.FiledTime >= dto.StartTime && p.FiledTime <= dto.EndTime && p.Status >= EOrderStatus.Filed)
-                 .WhereIF(dto.TimeType == 1,p=> p.CreationTime>= dto.StartTime && p.CreationTime<=dto.EndTime)
+                 .WhereIF(dto.TimeType == 1, p => p.CreationTime >= dto.StartTime && p.CreationTime <= dto.EndTime)
                  .WhereIF(!string.IsNullOrEmpty(dto.OrgCode) && dto.OrgCode == "001", p => p.ActualHandleOrgCode == dto.OrgCode)
                  .WhereIF(dto.TypeId != null && dto.TypeId == 1, p => p.IdentityType == EIdentityType.Citizen)
                  .WhereIF(dto.TypeId != null && dto.TypeId == 2, p => p.IdentityType == EIdentityType.Enterprise)
@@ -3020,7 +3253,7 @@ namespace Hotline.Application.StatisticalReport
             var IsCenter = _sessionContext.OrgIsCenter;
             DataTable data = new DataTable();
 
-            var  list = await _hotspotTypeRepository.Queryable()
+            var list = await _hotspotTypeRepository.Queryable()
             .LeftJoin<Order>((it, o) => o.HotspotId.StartsWith(it.Id))
             .Where((it, o) => o.CreationTime >= dto.QueryDto.StartTime && o.CreationTime <= dto.QueryDto.EndTime && o.Id != null)
             .WhereIF(dto.QueryDto.TypeId == 1, (it, o) => o.IdentityType == EIdentityType.Citizen)
@@ -3029,7 +3262,7 @@ namespace Hotline.Application.StatisticalReport
             .GroupBy((it, o) => it.Id)
             .OrderBy((it, o) => new { it.Id }, OrderByType.Asc)
             .Select((it, o) => new HotspotStatisticsDto
-			{
+            {
                 HotspotName = it.HotSpotName,
                 HotSpotFullName = it.HotSpotFullName,
                 SumCount = SqlFunc.AggregateSum(SqlFunc.IIF(o.HotspotId.StartsWith(it.Id), 1, 0))
@@ -3037,33 +3270,33 @@ namespace Hotline.Application.StatisticalReport
             .ToListAsync();
             data = list.ToDataTable("HotspotStatistics");
 
-			data.Columns["Name"].SetOrdinal(0);
+            data.Columns["Name"].SetOrdinal(0);
             data.Columns["OneHotspotName"].SetOrdinal(1);
-			data.Columns["TwoHotspotName"].SetOrdinal(2);
-			data.Columns["ThreeHotspotName"].SetOrdinal(3);
-			data.Columns["FourHotspotName"].SetOrdinal(4);
-			data.Columns["FiveHotspotName"].SetOrdinal(5);
-			data.Columns["SumCount"].ColumnName = "分类统计";
+            data.Columns["TwoHotspotName"].SetOrdinal(2);
+            data.Columns["ThreeHotspotName"].SetOrdinal(3);
+            data.Columns["FourHotspotName"].SetOrdinal(4);
+            data.Columns["FiveHotspotName"].SetOrdinal(5);
+            data.Columns["SumCount"].ColumnName = "分类统计";
             data.Columns["Name"].ColumnName = "热点名称";
-			data.Columns["OneHotspotName"].ColumnName = "一级热点";
-			data.Columns["TwoHotspotName"].ColumnName = "二级热点";
-			data.Columns["ThreeHotspotName"].ColumnName = "三级热点";
-			data.Columns["FourHotspotName"].ColumnName = "四级热点";
-			data.Columns["FiveHotspotName"].ColumnName = "五级热点";
-			data.Columns.Remove("HotSpotFullName");
-			data.Columns.Remove("HotspotName");
-			//data.Columns["HotSpotFullName"].ColumnName = "热点分级";
-			//合计
-			//DataRow sumRow = data.NewRow();
-			//         sumRow["热点名称"] = "合计";
-			//         decimal totalAmount = 0;
-			//         foreach (DataRow row in data.Rows)
-			//         {
-			//             totalAmount += Convert.ToDecimal(row["分类统计"]);
-			//         }
-			//         sumRow["分类统计"] = totalAmount;
-			//         data.Rows.Add(sumRow);
-			return data;
+            data.Columns["OneHotspotName"].ColumnName = "一级热点";
+            data.Columns["TwoHotspotName"].ColumnName = "二级热点";
+            data.Columns["ThreeHotspotName"].ColumnName = "三级热点";
+            data.Columns["FourHotspotName"].ColumnName = "四级热点";
+            data.Columns["FiveHotspotName"].ColumnName = "五级热点";
+            data.Columns.Remove("HotSpotFullName");
+            data.Columns.Remove("HotspotName");
+            //data.Columns["HotSpotFullName"].ColumnName = "热点分级";
+            //合计
+            //DataRow sumRow = data.NewRow();
+            //         sumRow["热点名称"] = "合计";
+            //         decimal totalAmount = 0;
+            //         foreach (DataRow row in data.Rows)
+            //         {
+            //             totalAmount += Convert.ToDecimal(row["分类统计"]);
+            //         }
+            //         sumRow["分类统计"] = totalAmount;
+            //         data.Rows.Add(sumRow);
+            return data;
         }
     }
 }

+ 5 - 1
src/Hotline.Share/Dtos/Knowledge/KnowledgeDataDto.cs

@@ -284,7 +284,11 @@ namespace Hotline.Share.Dtos.Knowledge
 			return "";
 		}
 
-	}
+        /// <summary>
+        /// 上架时间
+        /// </summary>
+        public DateTime? OnShelfTime { get; set; }
+    }
 
     /// <summary>
     /// 获取知识创建部门信息

+ 134 - 112
src/Hotline.Share/Dtos/Knowledge/KnowledgeDto.cs

@@ -21,6 +21,20 @@ namespace Hotline.Share.Dtos.Knowledge
         public string Opinion { get; set; }
     }
 
+    public class UpdateKnowledgeAndApproveBatchDto : AddKnowledgeDto
+    {
+        /// <summary>
+        /// 更新意见
+        /// </summary>
+        public string Opinion { get; set; }
+
+        /// <summary>
+        /// 知识库ID
+        /// </summary>
+
+        public List<string> KnowledgeIds { get; set; }
+    }
+
     /// <summary>
     /// 编辑
     /// </summary>
@@ -30,7 +44,7 @@ namespace Hotline.Share.Dtos.Knowledge
         /// ID
         /// </summary>
         public string Id { get; set; }
-	}
+    }
 
     /// <summary>
     /// 新增知识
@@ -57,15 +71,15 @@ namespace Hotline.Share.Dtos.Knowledge
         /// </summary>
         public List<KnowledgeRelationTypeDto> KnowledgeType { get; set; }
 
-		/// <summary>
-		/// 知识归属
-		/// </summary>
-		public List<string> KnowledgeOrg { get; set; }
+        /// <summary>
+        /// 知识归属
+        /// </summary>
+        public List<string> KnowledgeOrg { get; set; }
 
-		/// <summary>
-		/// 到期时间
-		/// </summary>
-		public DateTime? ExpiredTime { get; set; }
+        /// <summary>
+        /// 到期时间
+        /// </summary>
+        public DateTime? ExpiredTime { get; set; }
 
         /// <summary>
         /// 是否公开
@@ -81,7 +95,7 @@ namespace Hotline.Share.Dtos.Knowledge
         /// 外部数据(为前端提供级联功能)
         /// </summary>
         public string HotspotExternal { get; set; }
-        
+
         /// <summary>
         /// 标题
         /// </summary>
@@ -126,36 +140,37 @@ namespace Hotline.Share.Dtos.Knowledge
 
     }
 
-    public record KnowledgeRelationTypeDto {
+    public record KnowledgeRelationTypeDto
+    {
 
 
-		/// <summary>
-		/// 知识库类型ID
-		/// </summary>
-		public string KnowledgeTypeId { get; set; }
+        /// <summary>
+        /// 知识库类型ID
+        /// </summary>
+        public string KnowledgeTypeId { get; set; }
 
-		/// <summary>
-		/// 知识库类型名称
-		/// </summary>
-		public string KnowledgeTypeName { get; set; }
+        /// <summary>
+        /// 知识库类型名称
+        /// </summary>
+        public string KnowledgeTypeName { get; set; }
 
 
-		/// <summary>
-		/// 知识库类型名称
-		/// </summary>
-		public string KnowledgeTypeSpliceName { get; set; }
-	}
+        /// <summary>
+        /// 知识库类型名称
+        /// </summary>
+        public string KnowledgeTypeSpliceName { get; set; }
+    }
 
-	public record KnowledgeRelationOrgDto
-	{
-		public string OrgId { get; set; }
-	}
+    public record KnowledgeRelationOrgDto
+    {
+        public string OrgId { get; set; }
+    }
 
-	/// <summary>
-	/// 基础
-	/// </summary>
-	public class KnowledgeDto : UpdateKnowledgeDto
-	{
+    /// <summary>
+    /// 基础
+    /// </summary>
+    public class KnowledgeDto : UpdateKnowledgeDto
+    {
         /// <summary>
         /// 来源部门
         /// </summary>
@@ -182,7 +197,7 @@ namespace Hotline.Share.Dtos.Knowledge
         public EKnowledgeStatus Status { get; set; }
 
         public string StatusText => Status.GetDescription();
-        
+
         /// <summary>
         /// 知识归属
         /// </summary>
@@ -193,15 +208,15 @@ namespace Hotline.Share.Dtos.Knowledge
         /// </summary>
         public int PageView { get; set; } = 0;
 
-		/// <summary>
-		/// 搜索量
-		/// </summary>
-		public int? SearchNum { get; set; } = 0;
+        /// <summary>
+        /// 搜索量
+        /// </summary>
+        public int? SearchNum { get; set; } = 0;
 
-		/// <summary>
-		/// 评分
-		/// </summary>
-		public decimal? Score { get; set; } = decimal.Zero;
+        /// <summary>
+        /// 评分
+        /// </summary>
+        public decimal? Score { get; set; } = decimal.Zero;
 
         /// <summary>
         /// 评论数
@@ -255,105 +270,112 @@ namespace Hotline.Share.Dtos.Knowledge
         /// </summary>
         public List<string> Knowledges { get; set; }
 
-		/// <summary>
-		/// 关联知识对象
-		/// </summary>
-		public List<KnowledgeDto> KnowledgeDtos { get; set; }
+        /// <summary>
+        /// 关联知识对象
+        /// </summary>
+        public List<KnowledgeDto> KnowledgeDtos { get; set; }
 
-		/// <summary>
-		/// 关键词
-		/// </summary>
-		public List<KnowledgeWordDto> KeywordsDto { get; set; }
+        /// <summary>
+        /// 关键词
+        /// </summary>
+        public List<KnowledgeWordDto> KeywordsDto { get; set; }
 
         public List<FileJson>? FileJson { get; set; }
 
         public List<KnowledgeTypeDto> KnowledgeTypes { get; set; }
-		public List<OrgDto> KnowledgeOrganizes { get; set; }
-	}
+        public List<OrgDto> KnowledgeOrganizes { get; set; }
 
-    public class KnowledgeBaseDto {
-		public DateTime? LastModificationTime { get; set; }
+        /// <summary>
+        /// 上架时间
+        /// </summary>
+        public DateTime? OnShelfTime { get; set; }
+    }
 
-		public bool IsDeleted { get; set; }
+    public class KnowledgeBaseDto
+    {
+        public DateTime? LastModificationTime { get; set; }
 
-		/// <summary>
-		/// 删除时间
-		/// </summary>
-		public DateTime? DeletionTime { get; set; }
+        public bool IsDeleted { get; set; }
 
+        /// <summary>
+        /// 删除时间
+        /// </summary>
+        public DateTime? DeletionTime { get; set; }
 
-		/// <summary>
-		/// 创建时间
-		/// </summary>
-		public DateTime CreationTime { get; set; }
 
-		public string Id { get; set; }
+        /// <summary>
+        /// 创建时间
+        /// </summary>
+        public DateTime CreationTime { get; set; }
 
-		/// <summary>
-		/// 组织Id
-		/// </summary>
-		public string? CreatorOrgId { get; set; }
+        public string Id { get; set; }
 
+        /// <summary>
+        /// 组织Id
+        /// </summary>
+        public string? CreatorOrgId { get; set; }
 
-		public string? CreatorOrgName { get; set; }
 
-		/// <summary>
-		/// 创建人
-		/// </summary>
-		public string? CreatorId { get; set; }
+        public string? CreatorOrgName { get; set; }
 
-		public string? CreatorName { get; set; }
-	}
+        /// <summary>
+        /// 创建人
+        /// </summary>
+        public string? CreatorId { get; set; }
 
-    public class KnowledgeTitleDto {
+        public string? CreatorName { get; set; }
+    }
 
-		/// <summary>
-		/// ID
-		/// </summary>
-		public string? Id { get; set; }
+    public class KnowledgeTitleDto
+    {
 
-		/// <summary>
-		/// 标题
-		/// </summary>
-		public string Title { get; set; }
+        /// <summary>
+        /// ID
+        /// </summary>
+        public string? Id { get; set; }
 
-	}
+        /// <summary>
+        /// 标题
+        /// </summary>
+        public string Title { get; set; }
+
+    }
 
     public class KnowledgeSearchNumDto
-	{
+    {
 
-	    /// <summary>
-	    /// ID
-	    /// </summary>
-	    public string? Id { get; set; }
+        /// <summary>
+        /// ID
+        /// </summary>
+        public string? Id { get; set; }
 
     }
 
     public class KnowledgeFindingDuplicateDto
     {
-	    /// <summary>
-	    /// 标题
-	    /// </summary>
-	    public string Title { get; set; }
+        /// <summary>
+        /// 标题
+        /// </summary>
+        public string Title { get; set; }
 
-	    /// <summary>
-	    /// 摘要
-	    /// </summary>
-	    public string? Summary { get; set; }
+        /// <summary>
+        /// 摘要
+        /// </summary>
+        public string? Summary { get; set; }
 
-	    /// <summary>
-	    /// 内容
-	    /// </summary>
-	    public string Content { get; set; }
+        /// <summary>
+        /// 内容
+        /// </summary>
+        public string Content { get; set; }
 
-	    /// <summary>
-	    /// ID
-	    /// </summary>
-	    public string? Id { get; set; }
-	}
+        /// <summary>
+        /// ID
+        /// </summary>
+        public string? Id { get; set; }
+    }
 
 
-	public class AddStartFlowDto : StartWorkflowDto<AddKnowledgeDto>
+    public class AddStartFlowDto : StartWorkflowDto<AddKnowledgeDto>
     {
 
     }
@@ -378,7 +400,7 @@ namespace Hotline.Share.Dtos.Knowledge
 
     }
 
-	public class KnowledgeCollectGroupOutDto
+    public class KnowledgeCollectGroupOutDto
     {
         /// <summary>
         /// Id
@@ -392,7 +414,7 @@ namespace Hotline.Share.Dtos.Knowledge
     }
 
     public class KnowledgeCollectGroupInDto
-    { 
+    {
         /// <summary>
         /// 名字
         /// </summary>
@@ -476,7 +498,7 @@ namespace Hotline.Share.Dtos.Knowledge
     {
         public KnowledgeWordOutDto()
         {
-            
+
         }
         public KnowledgeWordOutDto(string keyId, string tag)
         {
@@ -524,7 +546,7 @@ namespace Hotline.Share.Dtos.Knowledge
     }
 
     public class UpdateKnowledgeHotWordInDto : AddKnowledgeHotWordInDto
-    { 
+    {
         /// <summary>
         /// Id
         /// </summary>

+ 5 - 0
src/Hotline.Share/Dtos/Order/OrderDelay/OrderDelayDto.cs

@@ -135,4 +135,9 @@ public class OrderDelayDto
     /// 自动延期次数
     /// </summary>
     public int? AutomaticDelayNum { get; set; }
+
+    /// <summary>
+    /// 延期流程当前节点名称(空值表示不该当前操作人办)
+    /// </summary>
+    public string? DelayCurrentStepName { get; set; }
 }

+ 2 - 0
src/Hotline.Share/Requests/Exam/AnalysisReportRequest.cs

@@ -6,5 +6,7 @@ namespace Hotline.Share.Requests.Exam
     public record AnalysisReportRequest : ReportPagedRequest,IQueryRequest
     {
         public EAnlysisType AnlysisType { get; set; }
+
+        public bool IsPaged { get; set; } = true;
     }
 }

+ 0 - 15
src/Hotline/Authentications/FakeSessionContext.cs

@@ -50,20 +50,5 @@ namespace Hotline.Authentications
         /// 例如: 微信的OpenId
         /// </summary>
         public string? OpenId { get; init; }
-
-        public void ChangeSession(string id)
-        {
-            throw new NotImplementedException();
-        }
-
-        public async Task ChangeSessionAsync(string userId, CancellationToken cancellation)
-        {
-            throw new NotImplementedException();
-        }
-
-        public void ChangeSession(string userId, string username, string orgId, string orgname, int orgLevel)
-        {
-            throw new NotImplementedException();
-        }
     }
 }

+ 56 - 19
src/Hotline/Authentications/SessionContextManager.cs

@@ -22,6 +22,8 @@ public interface ISessionContextManager
     /// 依据source创建对应Session
     /// </summary>
     void ChangeSessionContext(string source);
+
+    void ChangeSessionContext(ISessionContext sessionContext);
 }
 
 public class SessionContextManager : ISessionContextManager, IScopeDependency
@@ -49,22 +51,32 @@ public class SessionContextManager : ISessionContextManager, IScopeDependency
             .Includes(d => d.Roles)
             .FirstAsync(d => d.Id == userId, cancellation);
 
-        List<Claim> userClaims =
-        [
-            new(JwtClaimTypes.Subject, account.Id),
-            new(JwtClaimTypes.PhoneNumber, account.PhoneNo ?? string.Empty),
-            new(ClaimTypes.NameIdentifier, account.Id),
-            new(AppClaimTypes.UserDisplayName, account.Name),
-            new(AppClaimTypes.DepartmentId, account.User?.OrgId ?? string.Empty),
-            new(AppClaimTypes.DepartmentIsCenter, account.User?.Organization?.IsCenter.ToString() ?? string.Empty),
-            new(AppClaimTypes.DepartmentName, account.User?.Organization?.Name ?? string.Empty),
-            new(AppClaimTypes.DepartmentAreaCode, account.User?.Organization?.AreaCode ?? string.Empty),
-            new(AppClaimTypes.DepartmentAreaName, account.User?.Organization?.AreaName ?? string.Empty),
-            new(AppClaimTypes.DepartmentLevel, account.User?.Organization?.Level.ToString() ?? string.Empty),
-            new(AppClaimTypes.AreaId, account.User?.OrgId?.GetHigherOrgId() ?? string.Empty),
-        ];
-        userClaims.AddRange(account.Roles.Select(d => new Claim(JwtClaimTypes.Role, d.Name)));
-        httpContextAccessor.HttpContext.User = new ClaimsPrincipal(new ClaimsIdentity(userClaims));
+        ChangeSession(account.Id, account.Name,
+            account.User?.OrgId, account.User?.Organization?.Name,
+            account.User?.Organization?.Level,
+            account.User?.Organization?.IsCenter,
+            account.PhoneNo,
+            account.User?.Organization?.AreaCode,
+            account.User?.Organization?.AreaName,
+            account.Roles.Select(d=>d.Name).ToList()
+        );
+        //
+        // List<Claim> userClaims =
+        // [
+        //     new(JwtClaimTypes.Subject, account.Id),
+        //     new(JwtClaimTypes.PhoneNumber, account.PhoneNo ?? string.Empty),
+        //     new(ClaimTypes.NameIdentifier, account.Id),
+        //     new(AppClaimTypes.UserDisplayName, account.Name),
+        //     new(AppClaimTypes.DepartmentId, account.User?.OrgId ?? string.Empty),
+        //     new(AppClaimTypes.DepartmentIsCenter, account.User?.Organization?.IsCenter.ToString() ?? string.Empty),
+        //     new(AppClaimTypes.DepartmentName, account.User?.Organization?.Name ?? string.Empty),
+        //     new(AppClaimTypes.DepartmentAreaCode, account.User?.Organization?.AreaCode ?? string.Empty),
+        //     new(AppClaimTypes.DepartmentAreaName, account.User?.Organization?.AreaName ?? string.Empty),
+        //     new(AppClaimTypes.DepartmentLevel, account.User?.Organization?.Level.ToString() ?? string.Empty),
+        //     new(AppClaimTypes.AreaId, account.User?.OrgId?.GetHigherOrgId() ?? string.Empty),
+        // ];
+        // userClaims.AddRange(account.Roles.Select(d => new Claim(JwtClaimTypes.Role, d.Name)));
+        // httpContextAccessor.HttpContext.User = new ClaimsPrincipal(new ClaimsIdentity(userClaims));
     }
 
     /// <summary>
@@ -86,9 +98,27 @@ public class SessionContextManager : ISessionContextManager, IScopeDependency
         ChangeSession(config.UserId, config.UserName, config.OrgId, config.OrgName, config.OrgId.CalcOrgLevel());
     }
 
+    public void ChangeSessionContext(ISessionContext sessionContext)
+    {
+        ChangeSession(sessionContext.UserId, sessionContext.UserName,
+            sessionContext.OrgId, sessionContext.OrgName,
+            sessionContext.OrgLevel, sessionContext.OrgIsCenter,
+            sessionContext.Phone,
+            sessionContext.OrgAreaCode, sessionContext.OrgAreaName,
+            sessionContext.Roles.ToList());
+    }
+
     #region private
 
-    private void ChangeSession(string userId, string username, string orgId, string orgname, int orgLevel)
+    private void ChangeSession(
+        string userId, string username,
+        string orgId, string orgname,
+        int? orgLevel, 
+        bool? isCenter = null,
+        string? phoneNo = null,
+        string? orgAreaCode = null,
+        string? orgAreaName = null,
+        List<string>? roles = null)
     {
         var httpContextAccessor = _serviceProvider.GetRequiredService<IHttpContextAccessor>();
         if (httpContextAccessor.HttpContext == null)
@@ -99,12 +129,19 @@ public class SessionContextManager : ISessionContextManager, IScopeDependency
             new(JwtClaimTypes.Subject, userId),
             new(ClaimTypes.NameIdentifier, userId),
             new(AppClaimTypes.UserDisplayName, username),
+            new(JwtClaimTypes.PhoneNumber, phoneNo ?? string.Empty),
             new(AppClaimTypes.DepartmentId, orgId ?? string.Empty),
-            new(AppClaimTypes.DepartmentIsCenter, orgId?.IsCenter().ToString() ?? string.Empty),
             new(AppClaimTypes.DepartmentName, orgname ?? string.Empty),
-            new(AppClaimTypes.DepartmentLevel, orgLevel.ToString() ?? string.Empty),
+            new(AppClaimTypes.DepartmentIsCenter, isCenter.HasValue 
+                ? isCenter.Value.ToString() 
+                : (orgId?.IsCenter().ToString() ?? string.Empty)),
+            new(AppClaimTypes.DepartmentAreaCode, orgAreaCode ?? string.Empty),
+            new(AppClaimTypes.DepartmentAreaName, orgAreaName ?? string.Empty),
+            new(AppClaimTypes.DepartmentLevel, orgLevel?.ToString() ?? string.Empty),
             new(AppClaimTypes.AreaId, orgId?.GetHigherOrgId() ?? string.Empty),
         ];
+        if (roles != null && roles.Count > 0)
+            userClaims.AddRange(roles.Select(d => new Claim(JwtClaimTypes.Role, d)));
         httpContextAccessor.HttpContext.User = new ClaimsPrincipal(new ClaimsIdentity(userClaims));
     }
 

+ 4 - 2
src/Hotline/Authentications/SessionContextProvider.cs

@@ -84,7 +84,7 @@ public class SessionContextProvider : ISessionContextProvider, IScopeDependency
         httpContext.User = new ClaimsPrincipal(new ClaimsIdentity(userClaims));
     }
 
-    public void ChangeSession(string userId, string username, string orgId, string orgname, int orgLevel, string orgAreaCode, string orgAreaName)
+    public void ChangeSession(string userId, string username, string orgId, string orgname, int orgLevel, string orgAreaCode, string orgAreaName, string[] roles)
     {
         var httpContext = _serviceProvider.GetRequiredService<IHttpContextAccessor>().HttpContext;
         httpContext ??= new DefaultHttpContext();
@@ -102,6 +102,7 @@ public class SessionContextProvider : ISessionContextProvider, IScopeDependency
             new(AppClaimTypes.DepartmentLevel, orgLevel.ToString() ?? string.Empty),
             new(AppClaimTypes.AreaId, orgId?.GetHigherOrgId() ?? string.Empty),
         ];
+        userClaims.AddRange(roles.Select(d => new Claim(JwtClaimTypes.Role, d)));
         httpContext.User = new ClaimsPrincipal(new ClaimsIdentity(userClaims));
     }
 
@@ -113,6 +114,7 @@ public class SessionContextProvider : ISessionContextProvider, IScopeDependency
             sessionContext.OrgName,
             sessionContext.OrgLevel,
             sessionContext.OrgAreaCode,
-            sessionContext.OrgAreaName
+            sessionContext.OrgAreaName,
+            sessionContext.Roles
         );
 }

+ 10 - 4
src/Hotline/BatchTask/ApptaskDomainService.cs

@@ -1,8 +1,10 @@
 using FluentValidation;
+using Hotline.Authentications;
 using Hotline.Share.Dtos.BatchTask;
 using Hotline.Share.Enums.BatchTask;
 using Hotline.Validators.BatchTask;
 using MapsterMapper;
+using Microsoft.AspNetCore.Http;
 using Microsoft.Extensions.Logging;
 using XF.Domain.Authentications;
 using XF.Domain.Dependency;
@@ -15,20 +17,20 @@ public class ApptaskDomainService : IApptaskDomainService, IScopeDependency
 {
     private readonly IRepository<Apptask> _apptaskRepository;
     private readonly IRepository<ApptaskItem> _apptaskItemRepository;
-    private readonly ISessionContextProvider _sessionContextProvider;
+    private readonly ISessionContextManager _sessionContextManager;
     private readonly IMapper _mapper;
     private readonly ILogger<ApptaskDomainService> _logger;
 
     public ApptaskDomainService(
         IRepository<Apptask> apptaskRepository,
         IRepository<ApptaskItem> apptaskItemRepository,
-        ISessionContextProvider sessionContextProvider,
+        ISessionContextManager sessionContextManager,
         IMapper mapper,
         ILogger<ApptaskDomainService> logger)
     {
         _apptaskRepository = apptaskRepository;
         _apptaskItemRepository = apptaskItemRepository;
-        _sessionContextProvider = sessionContextProvider;
+        _sessionContextManager = sessionContextManager;
         _mapper = mapper;
         _logger = logger;
     }
@@ -175,7 +177,11 @@ public class ApptaskDomainService : IApptaskDomainService, IScopeDependency
             var request = System.Text.Json.JsonSerializer.Deserialize<TRequest>(apptaskItem.TaskParams);
             if (request is null)
                 throw new UserFriendlyException($"任务参数反序列化失败, taskItemId: {apptaskItem.Id}");
-            _sessionContextProvider.ChangeSession(request.SessionContext);
+
+            _sessionContextManager.ChangeSessionContext(request.SessionContext);
+            
+            //if (request is IApptaskRequest reqWithSession)
+            //    _sessionContextProvider.ChangeSession(reqWithSession.SessionContext);
             var result = await executor.ExecuteAsync(request, cancellation);
             apptaskItem.TaskStatus = result.IsSuccess ? ETaskStatus.Succeeded : ETaskStatus.Failed;
             apptaskItem.Message = result.Message;

+ 2 - 1
src/Hotline/BatchTask/IApptaskRequest.cs

@@ -3,12 +3,13 @@ using System.Collections.Generic;
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
+using Hotline.Authentications;
 using XF.Domain.Authentications;
 
 namespace Hotline.BatchTask
 {
     public interface IApptaskRequest
     {
-        public ISessionContext SessionContext { get; set; }
+        public FakeSessionContext SessionContext { get; set; }
     }
 }

+ 5 - 0
src/Hotline/Caching/Interfaces/ISystemSettingCacheManager.cs

@@ -112,6 +112,11 @@ namespace Hotline.Caching.Interfaces
 
         bool Snapshot { get; }
 
+        /// <summary>
+        /// 小程序同一个用户上报工单间隔时间(单位:分)
+        /// </summary>
+        int SnapshotIntervalMinutes { get; }
+
         /// <summary>
         /// 是否开启自动填写办理意见至汇总节点
         /// </summary>

+ 10 - 0
src/Hotline/Caching/Services/SystemSettingCacheManager.cs

@@ -234,6 +234,16 @@ namespace Hotline.Caching.Services
             }
         }
 
+        /// <summary>
+        /// 小程序同一个用户上报工单间隔时间(单位:分)
+        /// </summary>
+        public int SnapshotIntervalMinutes =>
+                        GetOrDefault("08dcf5d6-fcda-40c4-8f25-65a636f4d99d",
+                            SettingConstants.SnapshotIntervalMinutes,
+                            "小程序同一个用户上报工单间隔时间(单位:分)",
+                            20,
+                            "小程序同一个用户上报工单间隔时间(单位:分)");
+
         /// <summary>
         /// 是否开启自动填写办理意见至汇总节点
         /// </summary>

+ 18 - 18
src/Hotline/KnowledgeBase/KnowledgeDomainService.cs

@@ -94,8 +94,8 @@ namespace Hotline.KnowledgeBase
             double min = 0.10;
             double max = 0.29;
             randomInRange = min + (max - min) * random.NextDouble();
-            var browseTime = Convert.ToInt32((randomInRange * length)/60);
-            if (browseTime<=1)
+            var browseTime = Convert.ToInt32((randomInRange * length) / 60);
+            if (browseTime <= 1)
             {
                 browseTime = random.Next(2, 6);
             }
@@ -426,7 +426,7 @@ namespace Hotline.KnowledgeBase
             if (dto.KnowledgeOrg.Any())
             {
                 kn.KnowledgeOrganizes = dto.KnowledgeOrg.Select(x => new SystemOrganize { Id = x }).ToList();
-			}
+            }
 
             await _knowledgeRepository.AddNav(kn)
                 .Include(d => d.KnowledgeTypes)
@@ -471,7 +471,7 @@ namespace Hotline.KnowledgeBase
             if (any) throw UserFriendlyException.SameMessage("当前知识标题已存在!");
 
             _mapper.Map(dto, knowledge);
-            if (dto.Files.Any())
+            if (dto.Files != null && dto.Files.Any())
                 knowledge.FileJson = await _fileRepository.AddFileAsync(dto.Files, knowledge.Id, "", cancellation);
             else
                 knowledge.FileJson = new List<Share.Dtos.File.FileJson>();
@@ -490,20 +490,20 @@ namespace Hotline.KnowledgeBase
                 knowledge.CreatorOrgLevel = _sessionContext.OrgLevel;
             }
 
-           
-			if (dto.KnowledgeType.Any())
-			{
-				knowledge.KnowledgeTypes = dto.KnowledgeType.Select(x => new KnowledgeType { Id = x.KnowledgeTypeId }).ToList();
-			}
-			if (dto.KnowledgeOrg.Any())
-			{
-				knowledge.KnowledgeOrganizes = dto.KnowledgeOrg.Select(x => new SystemOrganize { Id = x }).ToList();
-			}
-
-			await _knowledgeRepository.UpdateNav(knowledge)
-				.Include(d => d.KnowledgeTypes, new UpdateNavOptions { ManyToManyIsUpdateA =true})
-				.Include(d => d.KnowledgeOrganizes, new UpdateNavOptions { ManyToManyIsUpdateA = true})
-				.ExecuteCommandAsync();
+
+            if (dto.KnowledgeType != null && dto.KnowledgeType.Any())
+            {
+                knowledge.KnowledgeTypes = dto.KnowledgeType.Select(x => new KnowledgeType { Id = x.KnowledgeTypeId }).ToList();
+            }
+            if (dto.KnowledgeOrg != null && dto.KnowledgeOrg.Any())
+            {
+                knowledge.KnowledgeOrganizes = dto.KnowledgeOrg.Select(x => new SystemOrganize { Id = x }).ToList();
+            }
+
+            await _knowledgeRepository.UpdateNav(knowledge)
+                .Include(d => d.KnowledgeTypes, new UpdateNavOptions { ManyToManyIsUpdateA = true })
+                .Include(d => d.KnowledgeOrganizes, new UpdateNavOptions { ManyToManyIsUpdateA = true })
+                .ExecuteCommandAsync();
             //if (dto.KnowledgeType.Any())
             //         {
             //             knowledge.KnowledgeTypes = dto.KnowledgeType.Select(d => new KnowledgeType

+ 5 - 0
src/Hotline/Settings/SettingConstants.cs

@@ -830,5 +830,10 @@ namespace Hotline.Settings
         /// 是否开启白名单查询
         /// </summary>
         public const string IsOpenWhiteList = "IsOpenWhiteList";
+
+        /// <summary>
+        /// 小程序同一个用户上报工单间隔时间(单位:分)
+        /// </summary>
+        public const string SnapshotIntervalMinutes = "SnapshotIntervalMinutes";
     }
 }

+ 1 - 1
src/XF.Domain/Authentications/ISessionContextProvider.cs

@@ -15,7 +15,7 @@ namespace XF.Domain.Authentications
 
         HttpContext ChangeSessionByUserId(string id, HttpContext httpContext);
         Task ChangeSessionByUserIdAsync(string userId, CancellationToken cancellation);
-        void ChangeSession(string userId, string username, string orgId, string orgname, int orgLevel, string orgAreaCode, string orgAreaName);
+        void ChangeSession(string userId, string username, string orgId, string orgname, int orgLevel, string orgAreaCode, string orgAreaName, string[] roles);
         void ChangeSession(ISessionContext sessionContext);
     }
 }

+ 8 - 0
test/Hotline.Tests/Application/BiSnapshotApplicationTest.cs

@@ -32,6 +32,14 @@ public class BiSnapshotApplicationTest : TestBase
         _biSnapshotApplication = biSnapshotApplication;
     }
 
+    [Fact]
+    public async Task GetDuplicateItems_Test()
+    {
+        var inDto = new DuplicateItemsInDto();
+        var items = await _biSnapshotApplication.GetDuplicateItems(inDto).ToListAsync();
+        var count = items.Count;
+    }
+
     [Fact]
     public async Task GetCountyStatistics_Test()
     {

+ 3 - 0
test/Hotline.Tests/Application/SystemSettingCacheManagerTest.cs

@@ -1,5 +1,6 @@
 using Hotline.Api.Controllers;
 using Hotline.Caching.Interfaces;
+using Hotline.Caching.Services;
 using Hotline.Identity.Accounts;
 using Hotline.Identity.Roles;
 using Hotline.Settings;
@@ -34,6 +35,8 @@ public class SystemSettingCacheManagerTest : TestBase
     [Fact]
     public void CancelPublishOrderEnabled_Test()
     {
+        var time = _systemSettingCacheManager.SnapshotIntervalMinutes;
+        time.ShouldBe(20);
         var dd = DateTime.Parse("11/19/2024 18:08:00");
         _systemSettingCacheManager.CallSyncUnPushDateTime.ShouldBe(DateTime.Parse("2025/04/11 15:40:00"));
         //var result = _systemSettingCacheManager.CancelPublishOrderEnabled;

+ 5 - 0
test/Hotline.Tests/Controller/TestSessionContextManager.cs

@@ -85,6 +85,11 @@ public class TestSessionContextManager : ISessionContextManager, IScopeDependenc
         ChangeSession(config.UserId, config.UserName, config.OrgId, config.OrgName, config.OrgId.CalcOrgLevel());
     }
 
+    public void ChangeSessionContext(ISessionContext sessionContext)
+    {
+        throw new NotImplementedException();
+    }
+
     #region private
 
     private void ChangeSession(string userId, string username, string orgId, string orgname, int orgLevel)