Browse Source

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

xf 9 months ago
parent
commit
d4d1907790

+ 54 - 6
src/Hotline.Api/Controllers/Bi/BiOrderController.cs

@@ -4,6 +4,7 @@ using Hotline.Caching.Interfaces;
 using Hotline.CallCenter.Calls;
 using Hotline.FlowEngine.Workflows;
 using Hotline.Orders;
+using Hotline.Quality;
 using Hotline.Repository.SqlSugar.Extensions;
 using Hotline.Schedulings;
 using Hotline.Settings;
@@ -21,8 +22,10 @@ using Hotline.Share.Enums.Order;
 using Hotline.Share.Requests;
 using Hotline.Tools;
 using MapsterMapper;
+using Microsoft.AspNetCore.Cors.Infrastructure;
 using Microsoft.AspNetCore.Mvc;
 using MiniExcelLibs;
+using NPOI.SS.Formula.Functions;
 using SqlSugar;
 using System.Data;
 using XF.Domain.Authentications;
@@ -45,7 +48,7 @@ namespace Hotline.Api.Controllers.Bi
         private readonly IRepository<OrderVisit> _orderVisitRepository;
         private readonly IRepository<TrCallRecord> _trCallRecordRepository;
         private readonly IRepository<OrderPublish> _orderPublishRepository;
-        private readonly IRepository<SystemOrganize> _systemOrganizeRepository;
+        private readonly ISystemOrganizeRepository _systemOrganizeRepository;
         private readonly IRepository<AiOrderVisitDetail> _aiOrderVisitDetailRepository;
         private readonly ISessionContext _sessionContext;
         private readonly ISystemSettingCacheManager _systemSettingCacheManager;
@@ -59,6 +62,7 @@ namespace Hotline.Api.Controllers.Bi
         private readonly IRepository<SystemArea> _systemAreaRepository;
         private readonly IRepository<Hotspot> _hotspotRepository;
         private readonly IRepository<SystemDicData> _systemDicDataRepository;
+        private readonly ISystemDicDataCacheManager _systemDicDataCacheManager;
 
         public BiOrderController(
             IOrderRepository orderRepository,
@@ -72,7 +76,7 @@ namespace Hotline.Api.Controllers.Bi
             IRepository<OrderVisit> orderVisitRepository,
             IRepository<TrCallRecord> trCallRecordRepository,
             IRepository<OrderPublish> orderPublishRepository,
-            IRepository<SystemOrganize> systemOrganizeRepository,
+            ISystemOrganizeRepository systemOrganizeRepository,
             IRepository<AiOrderVisitDetail> aiOrderVisitDetailRepository,
             ISessionContext sessionContext,
             ISystemSettingCacheManager systemSettingCacheManager,
@@ -85,7 +89,8 @@ namespace Hotline.Api.Controllers.Bi
             IOrderReportApplication orderReportApplication,
             IRepository<SystemArea> systemAreaRepository,
             IRepository<Hotspot> hotspotRepository,
-             IRepository<SystemDicData> systemDicDataRepository
+             IRepository<SystemDicData> systemDicDataRepository,
+            ISystemDicDataCacheManager systemDicDataCacheManager
             )
         {
             _orderRepository = orderRepository;
@@ -113,6 +118,7 @@ namespace Hotline.Api.Controllers.Bi
             _systemAreaRepository = systemAreaRepository;
             _hotspotRepository = hotspotRepository;
             _systemDicDataRepository = systemDicDataRepository;
+            _systemDicDataCacheManager = systemDicDataCacheManager;
         }
 
         /// <summary>
@@ -1426,6 +1432,19 @@ namespace Hotline.Api.Controllers.Bi
         {
             var items = await _orderReportApplication.DepartmentAcceptanceTypeStatistics(dto).ToListAsync();
 
+            foreach (var item in items)
+            {
+                item.ZxAllTimes = Math.Round(((double)item.ZxAllTimes / 3600), 2);
+                item.JyAllTimes = Math.Round(((double)item.JyAllTimes / 3600), 2);
+                item.QzAllTimes = Math.Round(((double)item.QzAllTimes / 3600), 2);
+                item.ByAllTimes = Math.Round(((double)item.ByAllTimes / 3600), 2);
+                item.JbAllTimes = Math.Round(((double)item.JbAllTimes / 3600), 2);
+                item.TsAllTimes = Math.Round(((double)item.TsAllTimes / 3600), 2);
+                item.QtAllTimes = Math.Round(((double)item.QtAllTimes / 3600), 2);
+                item.YjAllTimes = Math.Round(((double)item.YjAllTimes / 3600), 2);
+            }
+
+
             var total = new DepartmentAcceptanceTypeStatisticsDto
             {
                 OrgName = "合计",
@@ -1486,7 +1505,17 @@ namespace Hotline.Api.Controllers.Bi
                 var (_, items) = await query.ToPagedListAsync(dto.QueryDto, HttpContext.RequestAborted);
                 list = items;
             }
-
+            foreach (var item in list)
+            {
+                item.ZxAllTimes = Math.Round(((double)item.ZxAllTimes / 3600), 2);
+                item.JyAllTimes = Math.Round(((double)item.JyAllTimes / 3600), 2);
+                item.QzAllTimes = Math.Round(((double)item.QzAllTimes / 3600), 2);
+                item.ByAllTimes = Math.Round(((double)item.ByAllTimes / 3600), 2);
+                item.JbAllTimes = Math.Round(((double)item.JbAllTimes / 3600), 2);
+                item.TsAllTimes = Math.Round(((double)item.TsAllTimes / 3600), 2);
+                item.QtAllTimes = Math.Round(((double)item.QtAllTimes / 3600), 2);
+                item.YjAllTimes = Math.Round(((double)item.YjAllTimes / 3600), 2);
+            }
             //增加合计
             list.Add(new DepartmentAcceptanceTypeStatisticsDto
             {
@@ -2943,12 +2972,31 @@ namespace Hotline.Api.Controllers.Bi
         [HttpGet("org-visitdetail-list")]
         public async Task<PagedDto<OrgVisitDetailListResp>> OrgVisitDetailList([FromQuery] OrgVisitDetailListReq dto)
         {
-            var query = _orderRepository.OrgVisitDetailList(dto);
+            var query = _orderReportApplication.OrgVisitDetailList(dto);
             var (total, items) = await query.ToPagedListAsync(dto.PageIndex, dto.PageSize, HttpContext.RequestAborted);
 
             return new PagedDto<OrgVisitDetailListResp>(total, _mapper.Map<IReadOnlyList<OrgVisitDetailListResp>>(items));
         }
 
+        /// <summary>
+        /// 部门满意度明细页面基础数据
+        /// </summary>
+        /// <returns></returns>
+        [HttpGet("org-visitdetail-list-basedata")]
+        public async Task<object> OrgVisitDetailListBaseData()
+        {
+            var VisitSatisfaction =  _systemDicDataCacheManager.GetSysDicDataCache(SysDicTypeConsts.VisitSatisfaction);
+            
+            if (_sessionContext.OrgIsCenter)
+            {
+                return new { OrgsOptions = await _systemOrganizeRepository.GetOrgJson() , VisitSatisfaction= VisitSatisfaction };
+            }
+            else
+            {
+                return new { OrgsOptions = await _systemOrganizeRepository.GetOrgJsonForUser(_sessionContext.RequiredOrgId), VisitSatisfaction = VisitSatisfaction };
+            }
+        }
+
         /// <summary>
         /// 部门满意度明细导出
         /// </summary>
@@ -2957,7 +3005,7 @@ namespace Hotline.Api.Controllers.Bi
         [HttpPost("org-visitdetail-list-export")]
         public async Task<FileStreamResult> OrgVisitDetailListExport([FromBody] ExportExcelDto<OrgVisitDetailListReq> dto)
         {
-            var query = _orderRepository.OrgVisitDetailList(dto.QueryDto);
+            var query = _orderReportApplication.OrgVisitDetailList(dto.QueryDto);
 
             List<OrderVisitDetail> orders;
             if (dto.IsExportAll)

+ 13 - 8
src/Hotline.Api/Controllers/OrderController.cs

@@ -2868,7 +2868,7 @@ public class OrderController : BaseController
         var order = await _orderRepository.Queryable()
             .FirstAsync(d => d.WorkflowId == dto.WorkflowId, HttpContext.RequestAborted);
         if (order is null)
-            throw new UserFriendlyException("无效工单编号");
+            throw UserFriendlyException.SameMessage("无效工单编号");
         //if (await _orderDelayRepository.AnyAsync(x => x.OrderId == order.Id && x.DelayState == EDelayState.Examining, HttpContext.RequestAborted))
         //{
         //    throw UserFriendlyException.SameMessage("该工单存在正在审核中的延期,不能办理");
@@ -5159,7 +5159,7 @@ public class OrderController : BaseController
         if (order == null)
             throw new UserFriendlyException($"无效工单编号, orderId: {orderId}", "无效工单编号");
         if (order.IsSigned())
-            throw new UserFriendlyException("该工单已被签收");
+            throw UserFriendlyException.SameMessage("该工单已被签收");
         order.Sign(_sessionContext.RequiredUserId, _sessionContext.UserName);
         order.AutoAccept(_sessionContext.RequiredUserId, _sessionContext.UserName, _sessionContext.StaffNo);
 
@@ -5795,13 +5795,15 @@ public class OrderController : BaseController
         var order = await _orderRepository.GetAsync(orderId, HttpContext.RequestAborted);
         var step = new WorkflowStep();
         var setting = _systemSettingCacheManager.GetSetting(SettingConstants.RoleZuoXi);
-        if (!string.IsNullOrEmpty(order.WorkflowId))
+        if (string.IsNullOrEmpty(order.SignerId))
+	        throw UserFriendlyException.SameMessage("工单尚未签收,暂不支持平移");
+		if (!string.IsNullOrEmpty(order.WorkflowId))
         {
             var steps = await _workflowStepRepository.Queryable()
                 .Where(d => d.ExternalId == orderId && d.Status != EWorkflowStepStatus.Handled)
                 .ToListAsync(HttpContext.RequestAborted);
             if (steps.Count > 1)
-                throw new UserFriendlyException("多个待办理节点暂不支持平移");
+                throw UserFriendlyException.SameMessage("多个待办理节点暂不支持平移");
             step = steps.First();
             if (step.BusinessType is not EBusinessType.Center and not EBusinessType.Send)
                 throw UserFriendlyException.SameMessage("当前办理节点非中心暂不支持平移");
@@ -5837,7 +5839,10 @@ public class OrderController : BaseController
     [HttpPost("change-handler")]
     public async Task ChangeHandler([FromBody] ChangeHandlerDto dto)
     {
-        if (string.IsNullOrEmpty(dto.StepId))
+        var special = await _orderSpecialRepository.Queryable().Where(x => x.OrderId == dto.OrderId && x.State == 0).AnyAsync();
+        if (special)
+	        throw  UserFriendlyException.SameMessage("当前工单特提审批中,请审批后再操作!");
+		if (string.IsNullOrEmpty(dto.StepId))
         {
             await _orderRepository.Updateable().SetColumns(o => new Orders.Order() { SignerId = dto.Handler.UserId, SignerName = dto.Handler.Username })
                 .Where(o => o.Id == dto.OrderId).ExecuteCommandAsync(HttpContext.RequestAborted);
@@ -5848,10 +5853,10 @@ public class OrderController : BaseController
                 .Includes(d => d.WorkflowTrace)
                 .FirstAsync(d => d.Id == dto.StepId, HttpContext.RequestAborted);
             if (step is null)
-                throw new UserFriendlyException("无效节点编号");
-            await _workflowDomainService.ChangeHandlerBatchAsync(new List<(string userId, string username, string orgId, string orgName, ICollection<WorkflowStep> steps)>
+                throw UserFriendlyException.SameMessage("无效节点编号");
+            await _workflowDomainService.ChangeHandlerBatchAsync(new List<(string userId, string username, string orgId, string orgName, string? roleId, string? roleName, ICollection<WorkflowStep> steps)>
             {
-                new(dto.Handler.UserId,dto.Handler.Username,dto.Handler.OrgId,dto.Handler.OrgName, new List<WorkflowStep>{step})
+                new(dto.Handler.UserId,dto.Handler.Username,dto.Handler.OrgId,dto.Handler.OrgName,step.RoleId,step.RoleName, new List<WorkflowStep>{step})
             }, HttpContext.RequestAborted);
         }
     }

+ 2 - 2
src/Hotline.Api/Controllers/WorkflowController.cs

@@ -666,9 +666,9 @@ public class WorkflowController : BaseController
         //.GetAsync(dto.StepId, HttpContext.RequestAborted);
         if (step is null)
             throw new UserFriendlyException("无效节点编号");
-        await _workflowDomainService.ChangeHandlerBatchAsync(new List<(string userId, string username, string orgId, string orgName, ICollection<WorkflowStep> steps)>
+        await _workflowDomainService.ChangeHandlerBatchAsync(new List<(string userId, string username, string orgId, string orgName, string? roleId, string? roleName, ICollection<WorkflowStep> steps)>
             {
-                new(dto.Handler.UserId,dto.Handler.Username,dto.Handler.OrgId,dto.Handler.OrgName, new List<WorkflowStep>{step})
+                new(dto.Handler.UserId,dto.Handler.Username,dto.Handler.OrgId,dto.Handler.OrgName,step.RoleId,step.RoleName, new List<WorkflowStep>{step})
             }, HttpContext.RequestAborted);
     }
 

+ 1 - 1
src/Hotline.Application/CallCenter/Calls/TelsStatusRefreshService.cs

@@ -46,7 +46,7 @@ namespace Hotline.Application.CallCenter.Calls
                         {
                             if (telmodel.State == "logout")
                             {
-                                var telRest = await _telRestRepository.GetAsync(x => x.TelNo == item.TelNo && x.EndTime != null, stoppingToken);
+                                var telRest = await _telRestRepository.GetAsync(x => x.TelNo == item.TelNo && !x.EndTime.HasValue, stoppingToken);
                                 if (telRest is not null)
                                 {
                                     telRest.EndRest();

+ 6 - 3
src/Hotline.Application/FlowEngine/WorkflowApplication.cs

@@ -853,8 +853,9 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
                 if (flowType is EFlowType.Handle
                     && (stepDefine.StepType != EStepType.Summary && stepDefine.BusinessType != EBusinessType.Center))
                     users1 = users1.Where(d => d.OrgId.StartsWith(levelOneOrgId));
+                var defineTypeItem = stepDefine.HandlerTypeItems.First();
 
-                handlers = users1.Where(d => d != null && !string.IsNullOrEmpty(d.Id))
+				handlers = users1.Where(d => d != null && !string.IsNullOrEmpty(d.Id))
                     .Select(d => new FlowStepHandler
                     {
                         Key = d.Id,
@@ -862,8 +863,10 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
                         UserId = d.Id,
                         Username = d.Name,
                         OrgId = d.OrgId,
-                        OrgName = d.Organization.Name
-                    })
+                        OrgName = d.Organization.Name,
+                        RoleId = defineTypeItem.Key,
+                        RoleName = defineTypeItem.Value
+					})
                     .ToList();
                 break;
             case EHandlerType.OrgLevel:

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

@@ -83,5 +83,12 @@ namespace Hotline.Application.StatisticalReport
         /// <param name="dto"></param>
         /// <returns></returns>
         ISugarQueryable<Order> DepartmentAcceptanceTypeOrderList(DepartmentKeyWordRequest dto);
+
+        /// <summary>
+        /// 满意度明细
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        ISugarQueryable<OrderVisitDetail> OrgVisitDetailList(OrgVisitDetailListReq dto);
     }
 }

+ 106 - 53
src/Hotline.Application/StatisticalReport/OrderReportApplication.cs

@@ -42,6 +42,7 @@ namespace Hotline.Application.StatisticalReport
         private readonly IRepository<OrderScreen> _orderScreenRepository;
         private readonly IOrderSecondaryHandlingApplication _orderSecondaryHandlingApplication;
         private readonly ITimeLimitDomainService _timeLimitDomainService;
+        
 
         public OrderReportApplication(
             IOrderRepository orderRepository,
@@ -86,6 +87,7 @@ namespace Hotline.Application.StatisticalReport
             _orderScreenRepository = orderScreenRepository;
             _orderSecondaryHandlingApplication = orderSecondaryHandlingApplication;
             _timeLimitDomainService = timeLimitDomainService;
+            
         }
         /// <summary>
         /// 部门办件统计表---新
@@ -504,10 +506,11 @@ order by ""su"".""OrgCode""";
                     query = _workflowTraceRepository.Queryable()
                         .LeftJoin<Order>((t, o) => t.ExternalId == o.Id)
                          .Where((t, o) => t.ModuleCode == WorkflowModuleConsts.OrderHandle && o.CreationTime >= dto.StartTime && o.CreationTime <= dto.EndTime
-                         && t.Status >= EWorkflowStepStatus.Handled &&t.TraceState!= EWorkflowTraceState.StepRemoveByPrevious)
+                         && t.Status >= EWorkflowStepStatus.Handled)
                          .WhereIF(dto.IsProvince.HasValue && dto.IsProvince == true, (t, o) => o.Source == ESource.ProvinceStraight)
                          .WhereIF(dto.OrgCode == "001", (t, o) => t.HandlerOrgId == dto.OrgCode)
-                         .WhereIF(dto.OrgCode != "001", (t, o) => t.HandlerOrgId.StartsWith(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)
                          .Select((t, o) => new SelectOrderId { Id = o.Id })
                          .MergeTable();
@@ -519,30 +522,33 @@ order by ""su"".""OrgCode""";
                        && t.Status < EWorkflowStepStatus.Handled)
                        .WhereIF(dto.IsProvince.HasValue && dto.IsProvince == true, (t, o) => o.Source == ESource.ProvinceStraight)
                        .WhereIF(dto.OrgCode == "001", (t, o) => t.HandlerOrgId == dto.OrgCode)
-                       .WhereIF(dto.OrgCode != "001", (t, o) => t.HandlerOrgId.StartsWith(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)
                        .Select((t, o) => new SelectOrderId { Id = o.Id })
                        .MergeTable();
                     break;
                 case EStatisticsType.OrderDelayCount://延期次数
                     query = _orderDelayRepository.Queryable()
-                        .Includes(x => x.Order)
-                        .Where(x => x.Order.CreationTime >= dto.StartTime && x.Order.CreationTime <= dto.EndTime && x.DelayState == EDelayState.Pass)
-                        .WhereIF(dto.IsProvince.HasValue && dto.IsProvince == true, x => x.Order.Source == ESource.ProvinceStraight)
-                        .WhereIF(dto.OrgCode == "001", x => x.ApplyOrgCode == dto.OrgCode)
-                        .WhereIF(dto.OrgCode != "001", x => x.ApplyOrgCode.StartsWith(dto.OrgCode))
-                        .OrderByDescending(x => x.Order.CreationTime)
-                        .Select(x => new SelectOrderId { Id = x.OrderId })
+                          .LeftJoin<Order>((d, o) => d.OrderId == o.Id)
+                        .Where((d, o) => o.CreationTime >= dto.StartTime && o.CreationTime <= dto.EndTime && d.DelayState == EDelayState.Pass)
+                        .WhereIF(dto.IsProvince.HasValue && dto.IsProvince == true, (d, o) => o.Source == ESource.ProvinceStraight)
+                        .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)
+                        .OrderByDescending((d, o) => o.CreationTime)
+                        .Select((d, o) => new SelectOrderId { Id = o.Id })
                        .MergeTable();
                     break;
                 case EStatisticsType.YBOverdue://已办超期
                     query = _workflowTraceRepository.Queryable()
                         .LeftJoin<Order>((t, o) => t.ExternalId == o.Id)
                          .Where((t, o) => t.ModuleCode == WorkflowModuleConsts.OrderHandle && o.CreationTime >= dto.StartTime && o.CreationTime <= dto.EndTime
-                         && t.Status >= EWorkflowStepStatus.Handled && t.HandleTime > t.StepExpiredTime && t.CountersignPosition == ECountersignPosition.None && t.TraceState != EWorkflowTraceState.StepRemoveByPrevious)
+                         && t.Status >= EWorkflowStepStatus.Handled && t.HandleTime > t.StepExpiredTime && t.CountersignPosition == ECountersignPosition.None)
                          .WhereIF(dto.IsProvince.HasValue && dto.IsProvince == true, (t, o) => o.Source == ESource.ProvinceStraight)
                          .WhereIF(dto.OrgCode == "001", (t, o) => t.HandlerOrgId == dto.OrgCode)
-                         .WhereIF(dto.OrgCode != "001", (t, o) => t.HandlerOrgId.StartsWith(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)
                          .Select((t, o) => new SelectOrderId { Id = o.Id })
                          .MergeTable();
@@ -554,7 +560,8 @@ order by ""su"".""OrgCode""";
                          && t.Status < EWorkflowStepStatus.Handled && DateTime.Now > t.StepExpiredTime && t.CountersignPosition == ECountersignPosition.None)
                          .WhereIF(dto.IsProvince.HasValue && dto.IsProvince == true, (t, o) => o.Source == ESource.ProvinceStraight)
                          .WhereIF(dto.OrgCode == "001", (t, o) => t.HandlerOrgId == dto.OrgCode)
-                         .WhereIF(dto.OrgCode != "001", (t, o) => t.HandlerOrgId.StartsWith(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)
                          .Select((t, o) => new SelectOrderId { Id = o.Id })
                          .MergeTable();
@@ -563,10 +570,11 @@ order by ""su"".""OrgCode""";
                     query = _workflowTraceRepository.Queryable()
                         .LeftJoin<Order>((t, o) => t.ExternalId == o.Id)
                          .Where((t, o) => t.ModuleCode == WorkflowModuleConsts.OrderHandle && o.CreationTime >= dto.StartTime && o.CreationTime <= dto.EndTime
-                         && t.Status >= EWorkflowStepStatus.Handled && t.HandleTime > t.StepExpiredTime && t.CountersignPosition > ECountersignPosition.None && t.TraceState != EWorkflowTraceState.StepRemoveByPrevious)
+                         && t.Status >= EWorkflowStepStatus.Handled && t.HandleTime > t.StepExpiredTime && t.CountersignPosition > ECountersignPosition.None)
                          .WhereIF(dto.IsProvince.HasValue && dto.IsProvince == true, (t, o) => o.Source == ESource.ProvinceStraight)
                          .WhereIF(dto.OrgCode == "001", (t, o) => t.HandlerOrgId == dto.OrgCode)
-                         .WhereIF(dto.OrgCode != "001", (t, o) => t.HandlerOrgId.StartsWith(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)
                          .Select((t, o) => new SelectOrderId { Id = o.Id })
                          .MergeTable();
@@ -578,7 +586,8 @@ order by ""su"".""OrgCode""";
                          && t.Status < EWorkflowStepStatus.Handled && DateTime.Now > t.StepExpiredTime && t.CountersignPosition > ECountersignPosition.None)
                          .WhereIF(dto.IsProvince.HasValue && dto.IsProvince == true, (t, o) => o.Source == ESource.ProvinceStraight)
                          .WhereIF(dto.OrgCode == "001", (t, o) => t.HandlerOrgId == dto.OrgCode)
-                         .WhereIF(dto.OrgCode != "001", (t, o) => t.HandlerOrgId.StartsWith(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)
                          .Select((t, o) => new SelectOrderId { Id = o.Id })
                          .MergeTable();
@@ -587,10 +596,11 @@ order by ""su"".""OrgCode""";
                     var cqybquery = _workflowTraceRepository.Queryable()
                            .LeftJoin<Order>((t, o) => t.ExternalId == o.Id)
                             .Where((t, o) => t.ModuleCode == WorkflowModuleConsts.OrderHandle && o.CreationTime >= dto.StartTime && o.CreationTime <= dto.EndTime
-                            && t.Status >= EWorkflowStepStatus.Handled && t.HandleTime > t.StepExpiredTime && t.CountersignPosition >= ECountersignPosition.None && t.TraceState != EWorkflowTraceState.StepRemoveByPrevious)
+                            && t.Status >= EWorkflowStepStatus.Handled && t.HandleTime > t.StepExpiredTime && t.CountersignPosition >= ECountersignPosition.None)
                             .WhereIF(dto.IsProvince.HasValue && dto.IsProvince == true, (t, o) => o.Source == ESource.ProvinceStraight)
                             .WhereIF(dto.OrgCode == "001", (t, o) => t.HandlerOrgId == dto.OrgCode)
-                            .WhereIF(dto.OrgCode != "001", (t, o) => t.HandlerOrgId.StartsWith(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)
                             .Select((t, o) => new SelectOrderId { Id = o.Id })
                             .MergeTable();
@@ -600,7 +610,8 @@ order by ""su"".""OrgCode""";
                              && t.Status < EWorkflowStepStatus.Handled && DateTime.Now > t.StepExpiredTime && t.CountersignPosition >= ECountersignPosition.None)
                              .WhereIF(dto.IsProvince.HasValue && dto.IsProvince == true, (t, o) => o.Source == ESource.ProvinceStraight)
                              .WhereIF(dto.OrgCode == "001", (t, o) => t.HandlerOrgId == dto.OrgCode)
-                             .WhereIF(dto.OrgCode != "001", (t, o) => t.HandlerOrgId.StartsWith(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)
                              .Select((t, o) => new SelectOrderId { Id = o.Id })
                              .MergeTable();
@@ -610,10 +621,11 @@ order by ""su"".""OrgCode""";
                     query = _workflowTraceRepository.Queryable()
                            .LeftJoin<Order>((t, o) => t.ExternalId == o.Id)
                             .Where((t, o) => t.ModuleCode == WorkflowModuleConsts.OrderHandle && o.CreationTime >= dto.StartTime && o.CreationTime <= dto.EndTime
-                            && t.Status >= EWorkflowStepStatus.Handled && t.CountersignPosition > ECountersignPosition.None && t.TraceState != EWorkflowTraceState.StepRemoveByPrevious)
+                            && t.Status >= EWorkflowStepStatus.Handled && t.CountersignPosition > ECountersignPosition.None)
                             .WhereIF(dto.IsProvince.HasValue && dto.IsProvince == true, (t, o) => o.Source == ESource.ProvinceStraight)
                             .WhereIF(dto.OrgCode == "001", (t, o) => t.HandlerOrgId == dto.OrgCode)
-                            .WhereIF(dto.OrgCode != "001", (t, o) => t.HandlerOrgId.StartsWith(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)
                             .Select((t, o) => new SelectOrderId { Id = o.Id })
                             .MergeTable();
@@ -625,7 +637,8 @@ order by ""su"".""OrgCode""";
                              && t.Status < EWorkflowStepStatus.Handled && t.CountersignPosition > ECountersignPosition.None)
                              .WhereIF(dto.IsProvince.HasValue && dto.IsProvince == true, (t, o) => o.Source == ESource.ProvinceStraight)
                              .WhereIF(dto.OrgCode == "001", (t, o) => t.HandlerOrgId == dto.OrgCode)
-                             .WhereIF(dto.OrgCode != "001", (t, o) => t.HandlerOrgId.StartsWith(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)
                              .Select((t, o) => new SelectOrderId { Id = o.Id })
                              .MergeTable();
@@ -635,7 +648,8 @@ order by ""su"".""OrgCode""";
                             .Where(o => o.CreationTime >= dto.StartTime && o.CreationTime <= dto.EndTime && o.Status < EOrderStatus.WaitForAccept)
                            .WhereIF(dto.IsProvince.HasValue && dto.IsProvince == true, o => o.Source == ESource.ProvinceStraight)
                             .WhereIF(dto.OrgCode == "001", o => o.ActualHandleOrgCode == dto.OrgCode)
-                            .WhereIF(dto.OrgCode != "001", o => o.ActualHandleOrgCode.StartsWith(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 })
                           .MergeTable();
                     break;
@@ -644,7 +658,8 @@ order by ""su"".""OrgCode""";
                           .Where(o => o.CreationTime >= dto.StartTime && o.CreationTime <= dto.EndTime && o.Status >= EOrderStatus.Filed)
                          .WhereIF(dto.IsProvince.HasValue && dto.IsProvince == true, o => o.Source == ESource.ProvinceStraight)
                           .WhereIF(dto.OrgCode == "001", o => o.ActualHandleOrgCode == dto.OrgCode)
-                          .WhereIF(dto.OrgCode != "001", o => o.ActualHandleOrgCode.StartsWith(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 })
                         .MergeTable();
                     break;
@@ -653,7 +668,8 @@ order by ""su"".""OrgCode""";
                          .Where(o => o.CreationTime >= dto.StartTime && o.CreationTime <= dto.EndTime && o.Status == EOrderStatus.Filed)
                         .WhereIF(dto.IsProvince.HasValue && dto.IsProvince == true, o => o.Source == ESource.ProvinceStraight)
                          .WhereIF(dto.OrgCode == "001", o => o.ActualHandleOrgCode == dto.OrgCode)
-                         .WhereIF(dto.OrgCode != "001", o => o.ActualHandleOrgCode.StartsWith(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 })
                        .MergeTable();
                     break;
@@ -662,7 +678,8 @@ order by ""su"".""OrgCode""";
                          .Where(o => o.CreationTime >= dto.StartTime && o.CreationTime <= dto.EndTime && o.Status >= EOrderStatus.Published && o.IsPublicity == true)
                         .WhereIF(dto.IsProvince.HasValue && dto.IsProvince == true, o => o.Source == ESource.ProvinceStraight)
                          .WhereIF(dto.OrgCode == "001", o => o.ActualHandleOrgCode == dto.OrgCode)
-                         .WhereIF(dto.OrgCode != "001", o => o.ActualHandleOrgCode.StartsWith(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 })
                        .MergeTable();
                     break;
@@ -671,50 +688,55 @@ order by ""su"".""OrgCode""";
                         .Where(o => o.CreationTime >= dto.StartTime && o.CreationTime <= dto.EndTime && o.Status >= EOrderStatus.Published && o.IsPublicity == false)
                        .WhereIF(dto.IsProvince.HasValue && dto.IsProvince == true, o => o.Source == ESource.ProvinceStraight)
                         .WhereIF(dto.OrgCode == "001", o => o.ActualHandleOrgCode == dto.OrgCode)
-                        .WhereIF(dto.OrgCode != "001", o => o.ActualHandleOrgCode.StartsWith(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 })
                       .MergeTable();
                     break;
                 case EStatisticsType.ScreenCount://甄别总量
                     query = _orderScreenRepository.Queryable()
-                        .Includes(x => x.Order)
-                       .Where(x => x.Order.CreationTime >= dto.StartTime && x.Order.CreationTime <= dto.EndTime && x.Order.Id != null)
-                       .WhereIF(dto.IsProvince.HasValue && dto.IsProvince == true, x => x.Order.Source == ESource.ProvinceStraight)
-                       .WhereIF(dto.OrgCode == "001", x => x.CreatorOrgId == dto.OrgCode)
-                       .WhereIF(dto.OrgCode != "001", x => x.CreatorOrgId.StartsWith(dto.OrgCode))
-                        .Select(x => new SelectOrderId { Id = x.OrderId})
+                        .LeftJoin<Order>((d, o) => d.OrderId == o.Id)
+                       .Where((d, o) => o.CreationTime >= dto.StartTime && o.CreationTime <= dto.EndTime && o.Id != null)
+                       .WhereIF(dto.IsProvince.HasValue && dto.IsProvince == true, (d, o) => o.Source == ESource.ProvinceStraight)
+                       .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 })
                        .MergeTable();
                     break;
                 case EStatisticsType.ScreenApproval://带甄别
                     query = _orderScreenRepository.Queryable()
-                        .Includes(x => x.Order)
-                       .Where(x => x.Order.CreationTime >= dto.StartTime && x.Order.CreationTime <= dto.EndTime && x.Order.Id != null
-                       && (x.Status == EScreenStatus.Approval || x.Status == EScreenStatus.Apply))
-                       .WhereIF(dto.IsProvince.HasValue && dto.IsProvince == true, x => x.Order.Source == ESource.ProvinceStraight)
-                       .WhereIF(dto.OrgCode == "001", x => x.CreatorOrgId == dto.OrgCode)
-                       .WhereIF(dto.OrgCode != "001", x => x.CreatorOrgId.StartsWith(dto.OrgCode))
-                        .Select(x => new SelectOrderId { Id = x.OrderId})
+                       .LeftJoin<Order>((d, o) => d.OrderId == o.Id)
+                       .Where((d, o) => o.CreationTime >= dto.StartTime && o.CreationTime <= dto.EndTime && o.Id != null
+                       && (d.Status == EScreenStatus.Approval || d.Status == EScreenStatus.Apply))
+                       .WhereIF(dto.IsProvince.HasValue && dto.IsProvince == true, (d, o) => o.Source == ESource.ProvinceStraight)
+                       .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 })
                        .MergeTable();
                     break;
                 case EStatisticsType.ScreenPass://甄别通过
                     query = _orderScreenRepository.Queryable()
-                        .Includes(x => x.Order)
-                       .Where(x => x.Order.CreationTime >= dto.StartTime && x.Order.CreationTime <= dto.EndTime && x.Order.Id != null && x.Status == EScreenStatus.End)
-                       .WhereIF(dto.IsProvince.HasValue && dto.IsProvince == true, x => x.Order.Source == ESource.ProvinceStraight)
-                       .WhereIF(dto.OrgCode == "001", x => x.CreatorOrgId == dto.OrgCode)
-                       .WhereIF(dto.OrgCode != "001", x => x.CreatorOrgId.StartsWith(dto.OrgCode))
-                        .Select(x => new SelectOrderId { Id = x.OrderId })
+                       .LeftJoin<Order>((d, o) => d.OrderId == o.Id)
+                       .Where((d, o) => o.CreationTime >= dto.StartTime && o.CreationTime <= dto.EndTime && o.Id != null && d.Status == EScreenStatus.End)
+                       .WhereIF(dto.IsProvince.HasValue && dto.IsProvince == true, (d, o) => o.Source == ESource.ProvinceStraight)
+                       .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 })
                        .MergeTable();
                     break;
                 case EStatisticsType.ScreenNotPass://甄别不通过
                     query = _orderScreenRepository.Queryable()
-                       .Includes(x => x.Order)
-                      .Where(x => x.Order.CreationTime >= dto.StartTime && x.Order.CreationTime <= dto.EndTime && x.Order.Id != null && x.Status == EScreenStatus.Refuse)
-                      .WhereIF(dto.IsProvince.HasValue && dto.IsProvince == true, x => x.Order.Source == ESource.ProvinceStraight)
-                      .WhereIF(dto.OrgCode == "001", x => x.CreatorOrgId == dto.OrgCode)
-                      .WhereIF(dto.OrgCode != "001", x => x.CreatorOrgId.StartsWith(dto.OrgCode))
-                       .Select(x => new SelectOrderId { Id = x.OrderId})
-                      .MergeTable();
+                      .LeftJoin<Order>((d, o) => d.OrderId == o.Id)
+                      .Where((d, o) => o.CreationTime >= dto.StartTime && o.CreationTime <= dto.EndTime && o.Id != null && d.Status == EScreenStatus.Refuse)
+                      .WhereIF(dto.IsProvince.HasValue && dto.IsProvince == true, (d, o) => o.Source == ESource.ProvinceStraight)
+                      .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 })
+                       .MergeTable();
                     break;
                 default:
                     break;
@@ -1782,5 +1804,36 @@ order by ""su"".""OrgCode""";
                  .OrderByDescending(d => d.CreationTime)
                  .MergeTable();
         }
+
+
+        /// <summary>
+        /// 满意度明细
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        public ISugarQueryable<OrderVisitDetail> OrgVisitDetailList(OrgVisitDetailListReq dto)
+        {
+            var IsCenter = _sessionContext.OrgIsCenter;
+
+            return _orderVisitDetailRepository.Queryable()
+                .Includes(x => x.OrderVisit, x => x.Order, x => x.OrderScreens)
+                .Includes(x => x.OrderVisit, x => x.Employee)
+                .Where(x => x.OrderVisit.VisitState == EVisitState.Visited && x.VisitTarget == EVisitTarget.Org)
+                .WhereIF(IsCenter == false, x => x.VisitOrgCode.StartsWith(_sessionContext.RequiredOrgId))
+                .WhereIF(dto.OrgVisitStatisticsType.HasValue, x => x.OrderVisit.Order.ProcessType == (EProcessType)((int)dto.OrgVisitStatisticsType))
+                .WhereIF(!string.IsNullOrEmpty(dto.OrgProcessingResults), x => SqlFunc.JsonField(x.OrgProcessingResults, "Key") == dto.OrgProcessingResults)
+                .WhereIF(!string.IsNullOrEmpty(dto.VisitUser), x => x.OrderVisit.Employee.Name.Contains(dto.VisitUser))
+                .WhereIF(!string.IsNullOrEmpty(dto.No), x => x.OrderVisit.Order.No == dto.No)
+                .WhereIF(!string.IsNullOrEmpty(dto.Title), x => x.OrderVisit.Order.Title.Contains(dto.Title))
+                .WhereIF(dto.OrgCodes.Any(), x => dto.OrgCodes.Contains(x.VisitOrgCode))
+                .WhereIF(dto.HotspotIds.Any(), x => dto.HotspotIds.Contains(x.OrderVisit.Order.HotspotId))
+                .WhereIF(dto.Channels.Any(), x => dto.Channels.Contains(x.OrderVisit.Order.SourceChannelCode))
+                .WhereIF(dto.CreationTimeStart.HasValue, x => x.OrderVisit.Order.CreationTime >= dto.CreationTimeStart) //受理时间开始
+                .WhereIF(dto.CreationTimeEnd.HasValue, x => x.OrderVisit.Order.CreationTime <= dto.CreationTimeEnd) //受理时间结束
+                .WhereIF(dto.ActualHandleTimeStart.HasValue, x => x.OrderVisit.Order.ActualHandleTime >= dto.ActualHandleTimeStart) //办结时间开始
+                .WhereIF(dto.ActualHandleTimeEnd.HasValue, x => x.OrderVisit.Order.ActualHandleTime <= dto.ActualHandleTimeEnd)
+                .OrderBy(x => x.OrderVisit.VisitTime); //办结时间结束
+
+        }
     }
 }

+ 2 - 24
src/Hotline.Repository.SqlSugar/Orders/OrderRepository.cs

@@ -14,6 +14,7 @@ using System.Linq;
 using System.Linq.Dynamic.Core;
 using System.Reflection;
 using System.Reflection.Emit;
+using XF.Domain.Authentications;
 using XF.Domain.Dependency;
 
 namespace Hotline.Repository.SqlSugar.Orders
@@ -741,30 +742,7 @@ namespace Hotline.Repository.SqlSugar.Orders
             return dt2;
         }
 
-        /// <summary>
-        /// 满意度明细
-        /// </summary>
-        /// <param name="dto"></param>
-        /// <returns></returns>
-        public ISugarQueryable<OrderVisitDetail> OrgVisitDetailList(OrgVisitDetailListReq dto)
-        {
-            return Db.Queryable<OrderVisitDetail>()
-                .Includes(x => x.OrderVisit, x => x.Order, x => x.OrderScreens)
-                .Includes(x => x.OrderVisit, x => x.Employee)
-                .Where(x => x.OrderVisit.VisitState == EVisitState.Visited && x.VisitTarget == EVisitTarget.Org)
-                .WhereIF(dto.OrgVisitStatisticsType.HasValue, x => x.OrderVisit.Order.ProcessType == (EProcessType)((int)dto.OrgVisitStatisticsType))
-                .WhereIF(!string.IsNullOrEmpty(dto.OrgProcessingResults), x => SqlFunc.JsonField(x.OrgProcessingResults, "Key") == dto.OrgProcessingResults)
-                .WhereIF(!string.IsNullOrEmpty(dto.VisitUser), x => x.OrderVisit.Employee.Name.Contains(dto.VisitUser))
-                .WhereIF(!string.IsNullOrEmpty(dto.No), x => x.OrderVisit.Order.No == dto.No)
-                .WhereIF(!string.IsNullOrEmpty(dto.Title), x => x.OrderVisit.Order.Title.Contains(dto.Title))
-                .WhereIF(dto.OrgCodes.Any(), x => dto.OrgCodes.Contains(x.VisitOrgCode))
-                .WhereIF(dto.HotspotIds.Any(), x => dto.HotspotIds.Contains(x.OrderVisit.Order.HotspotId))
-                .WhereIF(dto.Channels.Any(), x => dto.Channels.Contains(x.OrderVisit.Order.SourceChannelCode))
-                .WhereIF(dto.CreationTimeStart.HasValue, x => x.OrderVisit.Order.CreationTime >= dto.CreationTimeStart) //受理时间开始
-                .WhereIF(dto.CreationTimeEnd.HasValue, x => x.OrderVisit.Order.CreationTime <= dto.CreationTimeEnd) //受理时间结束
-                .WhereIF(dto.ActualHandleTimeStart.HasValue, x => x.OrderVisit.Order.ActualHandleTime >= dto.ActualHandleTimeStart) //办结时间开始
-                .WhereIF(dto.ActualHandleTimeEnd.HasValue, x => x.OrderVisit.Order.ActualHandleTime <= dto.ActualHandleTimeEnd); //办结时间结束
-        }
+        
 
 
 

+ 5 - 0
src/Hotline.Share/Requests/DepartmentalProcessingStatisticsDto.cs

@@ -231,6 +231,11 @@ namespace Hotline.Share.Requests
         /// </summary>
         public string OrgCode { get; set; }
 
+        /// <summary>
+        /// 父级ID
+        /// </summary>
+        public string ParentOrgCode { get; set; }
+
         /// <summary>
         /// 部门名称
         /// </summary>

+ 1 - 1
src/Hotline/FlowEngine/Workflows/IWorkflowDomainService.cs

@@ -234,7 +234,7 @@ namespace Hotline.FlowEngine.Workflows
         /// 批量修改工单办理对象
         /// </summary>
         Task ChangeHandlerBatchAsync(
-            IReadOnlyList<(string userId, string username, string orgId, string orgName, ICollection<WorkflowStep> steps)> handlers,
+            IReadOnlyList<(string userId, string username, string orgId, string orgName, string? roleId, string? roleName, ICollection<WorkflowStep> steps)> handlers,
             CancellationToken cancellationToken);
 
         /// <summary>

+ 4 - 2
src/Hotline/FlowEngine/Workflows/StepBasicEntity.cs

@@ -490,8 +490,10 @@ public abstract class StepBasicEntity : CreationEntity
                     UserId = HandlerId,
                     Username = HandlerName,
                     OrgId = HandlerOrgId,
-                    OrgName = HandlerOrgName
-                };
+                    OrgName = HandlerOrgName,
+                    RoleId = RoleId,
+                    RoleName = RoleName
+				};
             case EFlowAssignType.Role:
                 return new FlowStepHandler
                 {

+ 2 - 2
src/Hotline/FlowEngine/Workflows/WorkflowDomainService.cs

@@ -788,7 +788,7 @@ namespace Hotline.FlowEngine.Workflows
         /// 批量修改工单办理对象
         /// </summary>
         public async Task ChangeHandlerBatchAsync(
-            IReadOnlyList<(string userId, string username, string orgId, string orgName, ICollection<WorkflowStep> steps
+            IReadOnlyList<(string userId, string username, string orgId, string orgName,string? roleId,string? roleName, ICollection<WorkflowStep> steps
                 )> handlers,
             CancellationToken cancellationToken)
         {
@@ -798,7 +798,7 @@ namespace Hotline.FlowEngine.Workflows
                 {
                     step.FlowAssignType = EFlowAssignType.User;
                     step.Assign(handler.userId, handler.username,
-                        handler.orgId, handler.orgName);
+                        handler.orgId, handler.orgName,handler.roleId,handler.roleName);
                     if (step.WorkflowTrace is null)
                         throw new UserFriendlyException("未查询节点对应快照信息");
                     step.WorkflowTrace.Assign(handler.userId, handler.username,

+ 0 - 6
src/Hotline/Orders/IOrderRepository.cs

@@ -82,12 +82,6 @@ namespace Hotline.Orders
         /// <returns></returns>
         Task<DataTable> OrderSourceTimeExport(TimeSharingPagedKeywordRequest dto);
 
-        /// <summary>
-        /// 满意度明细
-        /// </summary>
-        /// <param name="dto"></param>
-        /// <returns></returns>
-        ISugarQueryable<OrderVisitDetail> OrgVisitDetailList(OrgVisitDetailListReq dto);
 
         /// <summary>
         /// 信件来源统计

+ 3 - 3
src/Hotline/Orders/OrderDomainService.cs

@@ -247,14 +247,14 @@ public class OrderDomainService : IOrderDomainService, IScopeDependency
 	            .Where(s => s.Id == scheduling.Id).ExecuteCommandAsync(cancellationToken);
 			if (sendNum <= 0) return;
             var sendSteps = steps.Take(sendNum).ToList();
-            await _workflowDomainService.ChangeHandlerBatchAsync(new List<(string userId, string username, string orgId, string orgName, ICollection<WorkflowStep> steps)>
+            await _workflowDomainService.ChangeHandlerBatchAsync(new List<(string userId, string username, string orgId, string orgName, string? roleId, string? roleName, ICollection<WorkflowStep> steps)>
             {
-                new(user.Id, user.Name, user.OrgId, user.Organization.Name, sendSteps)
+                new(user.Id, user.Name, user.OrgId, user.Organization.Name,null,null, sendSteps)
             }, cancellationToken);
         }
 
     }
-
+        
     /// <summary>
     /// 触发平均派单
     /// </summary>