Преглед изворни кода

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

qinchaoyue пре 1 недеља
родитељ
комит
a2602ea4aa

+ 1 - 59
src/Hotline.Api/Controllers/IPPbxController.cs

@@ -684,66 +684,8 @@ namespace Hotline.Api.Controllers
                 //await _iPPbxApplication.ResetTelStatus(null, dto.TelNo, CancellationToken.None);
             }
             dto.Status = await _callTelClient.GetStatusAsync(dto.Status);
-            //await _callApplication.EndActionAsync(dto.Adapt<EndActionInDto>());
-            TelOperation telOperation = new TelOperation
-            {
-                StaffNo = dto.StaffNo,
-                TelNo = dto.TelNo,
-                OperateState = dto.Status,
-                OperateTime = DateTime.Now,
-            };
+            await _callApplication.EndActionAsync(dto.Adapt<EndActionInDto>());
 
-            switch (dto.Status)
-            {
-                case 0:
-                    telOperation.OperateStateText = "签出";
-                    break;
-                case 100:
-                    telOperation.OperateStateText = "签入";
-                    break;
-                case 200:
-                    telOperation.OperateStateText = "空闲";
-                    break;
-                case 201:
-                    telOperation.OperateStateText = "小休";
-                    break;
-                case 202:
-                    telOperation.OperateStateText = "繁忙";
-                    break;
-                case 300:
-                    telOperation.OperateStateText = "呼入振铃";
-                    break;
-                case 301:
-                    telOperation.OperateStateText = "呼入通话";
-                    break;
-                case 302:
-                    telOperation.OperateStateText = "呼出振铃";
-                    break;
-                case 303:
-                    telOperation.OperateStateText = "呼出通话";
-                    break;
-                case 310:
-                    telOperation.OperateStateText = "通话保持";
-                    break;
-                case 320:
-                    telOperation.OperateStateText = "会议";
-                    break;
-                case 330:
-                    telOperation.OperateStateText = "咨询";
-                    break;
-                case 400:
-                    telOperation.OperateStateText = "整理";
-                    break;
-                case 900:
-                    telOperation.OperateStateText = "注册";
-                    break;
-                case 901:
-                    telOperation.OperateStateText = "注销";
-                    break;
-                default:
-                    break;
-            }
-            await _telOperationRepository.AddAsync(telOperation);
         }
 
         #endregion

+ 35 - 25
src/Hotline.Application/JudicialManagement/EnforcementApplication.cs

@@ -1,4 +1,5 @@
-using Hotline.JudicialManagement;
+using Hotline.IndustryClassification;
+using Hotline.JudicialManagement;
 using Hotline.Orders;
 using Hotline.Settings;
 using Hotline.Share.Dtos;
@@ -370,18 +371,17 @@ namespace Hotline.Application.JudicialManagement
 
         public async Task<List<IndustryOrderStaticsDto>> QueryIndustryOrderStatics(QueryIndustryOrderStatisticsRequest queryIndustryOrderStatisticsRequest)
         {
-            var judicialManagementOrderTable = _judicialManagementOrdersRepository.Queryable()
-                .Where(x => x.CreationTime >= queryIndustryOrderStatisticsRequest.StartTime && x.CreationTime <= queryIndustryOrderStatisticsRequest.EndTime);
-            var queryable = judicialManagementOrderTable.InnerJoin<OrderSnapshot>((j, o) => j.Id == o.Id)
-                .GroupBy((j, o) => o.IndustryName)
-                .Select((j, o) => new IndustryOrderStaticsDto
-                {
-                    IndustryName = o.IndustryName,
-                    TotalOrderCount = SqlFunc.AggregateCount(o.Id),
-                    EnforcementOrderCount = SqlFunc.AggregateCount(SqlFunc.IIF(j.IsEnforcementOrder.HasValue && j.IsEnforcementOrder == true, 1, 0)),
-                    NotEnforcementOrderCount = SqlFunc.AggregateCount(SqlFunc.IIF(j.IsEnforcementOrder.HasValue && j.IsEnforcementOrder != true, 1, 0)),
-                    ToBeVerifiedOrderCount = SqlFunc.AggregateCount(SqlFunc.IIF(j.IsEnforcementOrder == null, 1, 0))
-                });
+            var queryIndustryOrderStatisticsRateRequest = _mapper.Map<QueryIndustryOrderStatisticsRateRequest>(queryIndustryOrderStatisticsRequest);
+            ISugarQueryable<JudicialManagementOrders, Order, IndustryAssociations, IndustrialManagement> groupByQueryable = IndustryGroupBy(queryIndustryOrderStatisticsRateRequest);
+
+            var queryable = groupByQueryable.Select((x, o, a, i) => new IndustryOrderStaticsDto
+            {
+                IndustryName = i.IndustrialName,
+                TotalOrderCount = SqlFunc.AggregateCount(x.Id),
+                EnforcementOrderCount = SqlFunc.AggregateSum(SqlFunc.IIF(x.IsEnforcementOrder.HasValue && x.IsEnforcementOrder == true, 1, 0)),
+                NotEnforcementOrderCount = SqlFunc.AggregateSum(SqlFunc.IIF(x.IsEnforcementOrder.HasValue && x.IsEnforcementOrder != true, 1, 0)),
+                ToBeVerifiedOrderCount = SqlFunc.AggregateSum(SqlFunc.IIF(x.IsEnforcementOrder == null, 1, 0))
+            });
 
 
             var result = await queryable.ToListAsync();
@@ -391,25 +391,35 @@ namespace Hotline.Application.JudicialManagement
 
         public async Task<List<IndustryOrderStaticsRateDto>> QueryIndustryOrderStaticsRate(QueryIndustryOrderStatisticsRateRequest queryIndustryOrderStatisticsRateRequest)
         {
-            var judicialManagementOrderTable = _judicialManagementOrdersRepository.Queryable()
-                .LeftJoin<Order>((x, o) => x.Id == o.Id)
-                .Where((x, o) => x.CreationTime >= queryIndustryOrderStatisticsRateRequest.StartTime && x.CreationTime <= queryIndustryOrderStatisticsRateRequest.EndTime)
-                .WhereIF(string.IsNullOrEmpty(queryIndustryOrderStatisticsRateRequest.AreaCode), (x, o) => o.AreaCode != null && o.AreaCode.StartsWith(queryIndustryOrderStatisticsRateRequest.AreaCode));
+            ISugarQueryable<JudicialManagementOrders, Order, IndustryAssociations, IndustrialManagement> groupByQueryable = IndustryGroupBy(queryIndustryOrderStatisticsRateRequest);
 
-            var queryable = judicialManagementOrderTable.InnerJoin<OrderSnapshot>((x, o, s) => x.Id == s.Id)
-               .GroupBy((x, o, s) => s.IndustryName)
-               .Select((x, o, s) => new IndustryOrderStaticsRateDto
-               {
-                   IndustryName = s.IndustryName,
-                   Rate = SqlFunc.AggregateCount(SqlFunc.IIF(o.IsEnforcementOrder.HasValue && o.IsEnforcementOrder == true, 1, 0)) / SqlFunc.AggregateCount(o.Id),
-                   Count = SqlFunc.AggregateCount(SqlFunc.IIF(o.IsEnforcementOrder.HasValue && o.IsEnforcementOrder == true, 1, 0))
-               });
+            var queryable = groupByQueryable.Select((x, o, a, i) => new IndustryOrderStaticsRateDto
+            {
+                IndustryName = i.IndustrialName,
+                Rate = SqlFunc.AggregateSum(SqlFunc.IIF(x.IsEnforcementOrder.HasValue && x.IsEnforcementOrder == true, 1, 0)) / SqlFunc.AggregateCount(x.Id),
+                Count = SqlFunc.AggregateSum(SqlFunc.IIF(x.IsEnforcementOrder.HasValue && x.IsEnforcementOrder == true, 1, 0))
+            });
 
             var result = await queryable.ToListAsync();
 
             return result;
         }
 
+        private ISugarQueryable<JudicialManagementOrders, Order, IndustryAssociations, IndustrialManagement> IndustryGroupBy(QueryIndustryOrderStatisticsRateRequest queryIndustryOrderStatisticsRateRequest)
+        {
+            var judicialManagementOrderTable = _judicialManagementOrdersRepository.Queryable()
+                            .LeftJoin<Order>((x, o) => x.Id == o.Id)
+                            .Where((x, o) => x.CreationTime >= queryIndustryOrderStatisticsRateRequest.StartTime && x.CreationTime <= queryIndustryOrderStatisticsRateRequest.EndTime)
+                            .WhereIF(string.IsNullOrEmpty(queryIndustryOrderStatisticsRateRequest.AreaCode), (x, o) => o.AreaCode != null && o.AreaCode.StartsWith(queryIndustryOrderStatisticsRateRequest.AreaCode));
+
+            var queryable = judicialManagementOrderTable
+                .LeftJoin<IndustryAssociations>((x, o, a) => a.OrganizeId == o.ActualHandleOrgCode.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>("9")))
+                .LeftJoin<IndustrialManagement>((x, o, a, i) => a.IndustrialManagementId == i.Id);
+
+            var groupby = queryable.GroupBy((x, o, a, i) => i.IndustrialName);
+            return groupby;
+        }
+
         public async Task<List<EventTypeOrderStaticsDto>> QueryEventTypeOrderStatics(QueryEventTypeOrderStaticsRequest queryEventTypeOrderStaticsRequest)
         {
             var judicialManagementOrderTable = _judicialManagementOrdersRepository.Queryable()

+ 167 - 143
src/Hotline.Application/OrderApp/OrderApplication.cs

@@ -1,4 +1,5 @@
-using DocumentFormat.OpenXml.Spreadsheet;
+using DocumentFormat.OpenXml.Drawing.Diagrams;
+using DocumentFormat.OpenXml.Spreadsheet;
 using DotNetCore.CAP;
 using FluentValidation;
 using Hotline.Application.FlowEngine;
@@ -4030,24 +4031,44 @@ public class OrderApplication : IOrderApplication, IScopeDependency
     /// <returns></returns>
     public ISugarQueryable<OrderScreenAuditVo> OrderScreenAudit(OrderScreenAuditPagedRequest dto)
     {
-        var query = _workflowTraceRepository.Queryable()
-            .Where(x => x.ModuleCode == "OrderScreen")
-            .WhereIF(dto.StartTime.HasValue && dto.EndTime.HasValue, x => x.HandleTime >= dto.StartTime && x.HandleTime <= dto.EndTime)
-            .WhereIF(!string.IsNullOrEmpty(dto.AuditUserName), x => x.HandlerName == dto.AuditUserName)
-            .Where(x => x.HandlerName != null && x.HandlerName != "")
-            .WhereIF(dto.AuditType is 1, x => x.Name == "班长审批")
-            .WhereIF(dto.AuditType is 2, x => x.Name == "中心领导")
-             .WhereIF(_appOptions.Value.IsZiGong && dto.AuditType is 3, x => x.Name == "中心初审")
-            .GroupBy(x => new { x.HandlerName })
-            .Select(x => new OrderScreenAuditVo
-            {
-                AuditName = x.HandlerName,
-                AuditNum = SqlFunc.AggregateSum(SqlFunc.IIF(x.TraceType == EWorkflowTraceType.Normal && x.TraceState == EWorkflowTraceState.Normal, 1,
-                    0)),
-                AuditBackNum = SqlFunc.AggregateSum(SqlFunc.IIF(x.TraceState == EWorkflowTraceState.StepRemoveByPrevious ||
-                x.TraceState == EWorkflowTraceState.StepRemoveByRecall, 1, 0)),
-            });
-        return query;
+        if (_appOptions.Value.IsZiGong)
+        {
+            return _workflowTraceRepository.Queryable()
+                .Where(x => x.ModuleCode == "OrderScreen")
+                .WhereIF(dto.StartTime.HasValue && dto.EndTime.HasValue, x => x.HandleTime >= dto.StartTime && x.HandleTime <= dto.EndTime)
+                .WhereIF(!string.IsNullOrEmpty(dto.AuditUserName), x => x.HandlerName == dto.AuditUserName)
+                .Where(x => x.HandlerName != null && x.HandlerName != "")
+                .WhereIF(!string.IsNullOrEmpty(dto.StepName), x => x.Name == dto.StepName)
+                //.WhereIF(dto.AuditType is 1, x => x.Name == "班长审批")
+                //.WhereIF(dto.AuditType is 2, x => x.Name == "中心领导")
+                // .WhereIF(_appOptions.Value.IsZiGong && dto.AuditType is 3, x => x.Name == "中心初审")
+                .GroupBy(x => new { x.HandlerName, x.Name })
+                .Select(x => new OrderScreenAuditVo
+                {
+                    AuditName = x.HandlerName,
+                    StepName = x.Name,
+                    AuditNum = SqlFunc.AggregateSum(SqlFunc.IIF(x.TraceType == EWorkflowTraceType.Normal && x.TraceState == EWorkflowTraceState.Normal, 1, 0)),
+                    AuditBackNum = SqlFunc.AggregateSum(SqlFunc.IIF(x.TraceState == EWorkflowTraceState.StepRemoveByPrevious || x.TraceState == EWorkflowTraceState.StepRemoveByRecall, 1, 0)),
+                });
+        }
+        else
+        {
+            return _workflowTraceRepository.Queryable()
+               .Where(x => x.ModuleCode == "OrderScreen")
+               .WhereIF(dto.StartTime.HasValue && dto.EndTime.HasValue, x => x.HandleTime >= dto.StartTime && x.HandleTime <= dto.EndTime)
+               .WhereIF(!string.IsNullOrEmpty(dto.AuditUserName), x => x.HandlerName == dto.AuditUserName)
+               .Where(x => x.HandlerName != null && x.HandlerName != "")
+               .WhereIF(dto.AuditType is 1, x => x.Name == "班长审批")
+               .WhereIF(dto.AuditType is 2, x => x.Name == "中心领导")
+                .WhereIF(_appOptions.Value.IsZiGong && dto.AuditType is 3, x => x.Name == "中心初审")
+               .GroupBy(x => new { x.HandlerName })
+               .Select(x => new OrderScreenAuditVo
+               {
+                   AuditName = x.HandlerName,
+                   AuditNum = SqlFunc.AggregateSum(SqlFunc.IIF(x.TraceType == EWorkflowTraceType.Normal && x.TraceState == EWorkflowTraceState.Normal, 1, 0)),
+                   AuditBackNum = SqlFunc.AggregateSum(SqlFunc.IIF(x.TraceState == EWorkflowTraceState.StepRemoveByPrevious, 1, 0)),
+               });
+        }
     }
 
     /// <summary>
@@ -4769,15 +4790,16 @@ public class OrderApplication : IOrderApplication, IScopeDependency
                     case EBusinessType.Send:
                         // 平均派单
                         var averageSendOrder = bool.Parse(_systemSettingCacheManager.GetSetting(SettingConstants.AverageSendOrder).SettingValue[0]);
-                        if (averageSendOrder) {
-							var sendOrderTrace = workflow.Traces
-		                    .Where(x => x.BusinessType == EBusinessType.Send && x.HandlerId != AppDefaults.SendPoolId)
-		                    .MaxBy(x => x.CreationTime);
-							var prevSendOrder = sendOrderTrace is not null;
-							if (prevSendOrder)
-							{
-								prevSendOrder = await _orderDomainService.SchedulingAtWork(sendOrderTrace.HandlerId);
-							}
+                        if (averageSendOrder)
+                        {
+                            var sendOrderTrace = workflow.Traces
+                            .Where(x => x.BusinessType == EBusinessType.Send && x.HandlerId != AppDefaults.SendPoolId)
+                            .MaxBy(x => x.CreationTime);
+                            var prevSendOrder = sendOrderTrace is not null;
+                            if (prevSendOrder)
+                            {
+                                prevSendOrder = await _orderDomainService.SchedulingAtWork(sendOrderTrace.HandlerId);
+                            }
                             if (prevSendOrder)
                             {
                                 rsp = new StepAssignInfo()
@@ -4792,10 +4814,11 @@ public class OrderApplication : IOrderApplication, IScopeDependency
 
                                 };
                             }
-                            else {
-								rsp = await _orderDomainService.AverageOrder(cancellationToken);
-							}
-						}
+                            else
+                            {
+                                rsp = await _orderDomainService.AverageOrder(cancellationToken);
+                            }
+                        }
                         break;
                     case EBusinessType.Department:
                         rsp = new StepAssignInfo
@@ -4980,37 +5003,37 @@ public class OrderApplication : IOrderApplication, IScopeDependency
                     case EBusinessType.Send:
                         // 平均派单
                         var averageSendOrder = bool.Parse(_systemSettingCacheManager.GetSetting(SettingConstants.AverageSendOrder).SettingValue[0]);
-						if (averageSendOrder)
-						{
-							var sendOrderTrace = workflow.Traces
-							.Where(x => x.BusinessType == EBusinessType.Send && x.HandlerId != AppDefaults.SendPoolId)
-							.MaxBy(x => x.CreationTime);
-							var prevSendOrder = sendOrderTrace is not null;
-							if (prevSendOrder)
-							{
-								prevSendOrder = await _orderDomainService.SchedulingAtWork(sendOrderTrace.HandlerId);
-							}
-							if (prevSendOrder)
-							{
-								//todo
-								rsp = new StepAssignInfo()
-								{
-									Key = sendOrderTrace.HandlerId,
-									Value = sendOrderTrace.HandlerName,
-									UserId = sendOrderTrace.HandlerId,
-									Username = sendOrderTrace.HandlerName,
-									OrgId = sendOrderTrace.HandlerOrgId,
-									OrgName = sendOrderTrace.HandlerOrgName,
-									FlowAssignType = EFlowAssignType.User
-
-								};
-							}
-							else
-							{
-								rsp = await _orderDomainService.AverageOrder(cancellationToken);
-							}
-						}
-						break;
+                        if (averageSendOrder)
+                        {
+                            var sendOrderTrace = workflow.Traces
+                            .Where(x => x.BusinessType == EBusinessType.Send && x.HandlerId != AppDefaults.SendPoolId)
+                            .MaxBy(x => x.CreationTime);
+                            var prevSendOrder = sendOrderTrace is not null;
+                            if (prevSendOrder)
+                            {
+                                prevSendOrder = await _orderDomainService.SchedulingAtWork(sendOrderTrace.HandlerId);
+                            }
+                            if (prevSendOrder)
+                            {
+                                //todo
+                                rsp = new StepAssignInfo()
+                                {
+                                    Key = sendOrderTrace.HandlerId,
+                                    Value = sendOrderTrace.HandlerName,
+                                    UserId = sendOrderTrace.HandlerId,
+                                    Username = sendOrderTrace.HandlerName,
+                                    OrgId = sendOrderTrace.HandlerOrgId,
+                                    OrgName = sendOrderTrace.HandlerOrgName,
+                                    FlowAssignType = EFlowAssignType.User
+
+                                };
+                            }
+                            else
+                            {
+                                rsp = await _orderDomainService.AverageOrder(cancellationToken);
+                            }
+                        }
+                        break;
                     case EBusinessType.Department:
                         rsp = new StepAssignInfo
                         {
@@ -6489,40 +6512,40 @@ public class OrderApplication : IOrderApplication, IScopeDependency
     }
 
 
-	#region 坐席退回统计表
-	/// <summary>
-	/// 坐席退回统计表
-	/// </summary>
-	/// <param name="dto"></param>
-	/// <returns></returns>
-	public ISugarQueryable<SeatSendBackStatisticsVo> SeatSendBackStatistics(PagedKeywordRequest dto) 
+    #region 坐席退回统计表
+    /// <summary>
+    /// 坐席退回统计表
+    /// </summary>
+    /// <param name="dto"></param>
+    /// <returns></returns>
+    public ISugarQueryable<SeatSendBackStatisticsVo> SeatSendBackStatistics(PagedKeywordRequest dto)
     {
-		var setting = _systemSettingCacheManager.GetSetting(SettingConstants.RoleZuoXi);
-		var roles = setting?.SettingValue.ToList();
-		var seats =  _userRepository.Queryable()
-			.Includes(d => d.Organization)
-			.Includes(d => d.Roles)
-			.Where(d => d.Roles.Any(x => roles.Contains(x.Name)));
+        var setting = _systemSettingCacheManager.GetSetting(SettingConstants.RoleZuoXi);
+        var roles = setting?.SettingValue.ToList();
+        var seats = _userRepository.Queryable()
+            .Includes(d => d.Organization)
+            .Includes(d => d.Roles)
+            .Where(d => d.Roles.Any(x => roles.Contains(x.Name)));
         var send = _workflowTraceRepository.Queryable()
             .LeftJoin<Order>((x, o) => x.ExternalId == o.Id)
-            .Where((x, o) => x.HandlerOrgId  != OrgSeedData.CenterId && (x.PrevStepName == "班长审批"|| x.PrevStepName == "派单组") && o.CreationTime >= dto.StartTime && o.CreationTime <= dto.EndTime && x.CreationTime >= dto.StartTime)
-            .GroupBy((x, o) => new {o.AcceptorId  })
-            .Select((x, o) => new SeatSendBackStatisticsVo { UserId = o.AcceptorId , SendOrderNum = SqlFunc.AggregateDistinctCount(x.ExternalId) });
-
-      //  var sendBack = _workflowTraceRepository.Queryable()
-			   //.LeftJoin<Order>((x, o) => x.ExternalId == o.Id)
-      //         .Where((x, o) => o.CreationTime >= dto.StartTime && o.CreationTime <= dto.EndTime && x.CreationTime >= dto.StartTime && x.BusinessType == EBusinessType.Seat && (x.PrevStepName == "班长审批" || x.PrevStepName == "派单组"))
-			   //.GroupBy((x, o) => new { o.AcceptorId})
-			   //.Select((x, o) => new { UserId = o.AcceptorId, SendOrderBackNum = SqlFunc.AggregateDistinctCount(x.ExternalId), SendOrderBackNumber = SqlFunc.AggregateCount(x.ExternalId) });
+            .Where((x, o) => x.HandlerOrgId != OrgSeedData.CenterId && (x.PrevStepName == "班长审批" || x.PrevStepName == "派单组") && o.CreationTime >= dto.StartTime && o.CreationTime <= dto.EndTime && x.CreationTime >= dto.StartTime)
+            .GroupBy((x, o) => new { o.AcceptorId })
+            .Select((x, o) => new SeatSendBackStatisticsVo { UserId = o.AcceptorId, SendOrderNum = SqlFunc.AggregateDistinctCount(x.ExternalId) });
+
+        //  var sendBack = _workflowTraceRepository.Queryable()
+        //.LeftJoin<Order>((x, o) => x.ExternalId == o.Id)
+        //         .Where((x, o) => o.CreationTime >= dto.StartTime && o.CreationTime <= dto.EndTime && x.CreationTime >= dto.StartTime && x.BusinessType == EBusinessType.Seat && (x.PrevStepName == "班长审批" || x.PrevStepName == "派单组"))
+        //.GroupBy((x, o) => new { o.AcceptorId})
+        //.Select((x, o) => new { UserId = o.AcceptorId, SendOrderBackNum = SqlFunc.AggregateDistinctCount(x.ExternalId), SendOrderBackNumber = SqlFunc.AggregateCount(x.ExternalId) });
         var sendBack = _orderSendBackAuditRepository.Queryable()
 			.LeftJoin<Order>((x, o) => x.OrderId == o.Id)
-			.Where((x, o) => x.ApplyOrgId != OrgSeedData.CenterId && (x.SendBackStepName == "班长审批" || x.SendBackStepName == "派单组") && o.CreationTime >= dto.StartTime && o.CreationTime <= dto.EndTime)
+			.Where((x, o) => x.ApplyOrgId != OrgSeedData.CenterId && (x.SendBackStepName == "话务部") && o.CreationTime >= dto.StartTime && o.CreationTime <= dto.EndTime)
 			.GroupBy((x, o) => new { o.AcceptorId })
 			.Select((x, o) => new SeatSendBackStatisticsVo { UserId = o.AcceptorId, SendOrderBackNum = SqlFunc.AggregateDistinctCount(x.OrderId), SendOrderBackNumber = SqlFunc.AggregateCount(x.Id) });
 
 
 		var filed = _orderRepository.Queryable()
-            .Where(x=> x.CreationTime >= dto.StartTime && x.CreationTime <= dto.EndTime && x.Status >= EOrderStatus.Filed && x.FileOrgIsCenter == true)
+            .Where(x=> x.CreationTime >= dto.StartTime && x.CreationTime <= dto.EndTime && x.Status >= EOrderStatus.Filed && x.FileOrgIsCenter == true && x.FileUserRole == EFileUserType.Seat)
             .GroupBy(x=>x.AcceptorId)
             .Select(x => new SeatSendBackStatisticsVo { UserId = x.AcceptorId, CentreFileNum = SqlFunc.AggregateDistinctCount(x.Id) });
 
@@ -6530,56 +6553,57 @@ public class OrderApplication : IOrderApplication, IScopeDependency
              .LeftJoin<Order>((x, o) => x.OrderId == o.Id)
              .Where((x, o) => o.CreationTime >= dto.StartTime && o.CreationTime <= dto.EndTime && x.SpecialType == ESpecialType.SendBack && x.NextStepCode == "start")
              .GroupBy((x, o) => new { o.AcceptorId })
-             .Select((x, o) => new SeatSendBackStatisticsVo { UserId = o.AcceptorId, CentreFileBackNum = SqlFunc.AggregateDistinctCount(x.OrderId), CentreFileBackNumber = SqlFunc.AggregateCount(x.OrderId)});
-
-      var query =   seats.LeftJoin(send, (s, sd) => s.Id == sd.UserId)
-            .LeftJoin(sendBack, (s, sd, sb) => s.Id == sb.UserId)
-            .LeftJoin(filed, (s, sd, sb, f) => s.Id == f.UserId)
-            .LeftJoin(back, (s, sd, sb, f, b) => s.Id == b.UserId)
-            .GroupBy((s, sd, sb, f, b) => new { s.Id, s.Name })
-			.Select((s, sd, sb, f, b) => new SeatSendBackStatisticsVo
-			{
-				UserId = s.Id,
-				UserName = s.Name,
-				SendOrderNum = SqlFunc.AggregateSum(sd.SendOrderNum),
-				SendOrderBackNum = SqlFunc.AggregateSum(sb.SendOrderBackNum),
-				SendOrderBackNumber = SqlFunc.AggregateSum(sb.SendOrderBackNumber),
-				CentreFileNum = SqlFunc.AggregateSum(f.CentreFileNum),
-				CentreFileBackNum = SqlFunc.AggregateSum(b.CentreFileBackNum),
-				CentreFileBackNumber = SqlFunc.AggregateSum(b.CentreFileBackNumber),
-			});
+             .Select((x, o) => new SeatSendBackStatisticsVo { UserId = o.AcceptorId, CentreFileBackNum = SqlFunc.AggregateDistinctCount(x.OrderId), CentreFileBackNumber = SqlFunc.AggregateCount(x.OrderId) });
+
+        var query = seats.LeftJoin(send, (s, sd) => s.Id == sd.UserId)
+              .LeftJoin(sendBack, (s, sd, sb) => s.Id == sb.UserId)
+              .LeftJoin(filed, (s, sd, sb, f) => s.Id == f.UserId)
+              .LeftJoin(back, (s, sd, sb, f, b) => s.Id == b.UserId)
+              .GroupBy((s, sd, sb, f, b) => new { s.Id, s.Name })
+              .Select((s, sd, sb, f, b) => new SeatSendBackStatisticsVo
+              {
+                  UserId = s.Id,
+                  UserName = s.Name,
+                  SendOrderNum = SqlFunc.AggregateSum(sd.SendOrderNum),
+                  SendOrderBackNum = SqlFunc.AggregateSum(sb.SendOrderBackNum),
+                  SendOrderBackNumber = SqlFunc.AggregateSum(sb.SendOrderBackNumber),
+                  CentreFileNum = SqlFunc.AggregateSum(f.CentreFileNum),
+                  CentreFileBackNum = SqlFunc.AggregateSum(b.CentreFileBackNum),
+                  CentreFileBackNumber = SqlFunc.AggregateSum(b.CentreFileBackNumber),
+              });
         return query;
-	}
+    }
 
 
-	/// <summary>
-	/// 坐席退回统计表明细
-	/// </summary>
-	/// <param name="dto"></param>
-	/// <returns></returns>
-	public ISugarQueryable<OrderDto> SeatSendBackStatisticsDetail(SeatSendBackStatisticsDetail dto) {
+    /// <summary>
+    /// 坐席退回统计表明细
+    /// </summary>
+    /// <param name="dto"></param>
+    /// <returns></returns>
+    public ISugarQueryable<OrderDto> SeatSendBackStatisticsDetail(SeatSendBackStatisticsDetail dto)
+    {
 
-		if (dto.StatisticsType == "sendOrderNum")
+        if (dto.StatisticsType == "sendOrderNum")
         {
-           var query = _orderRepository.Queryable().Where(x => x.CreationTime >= dto.StartTime && x.CreationTime <= dto.EndTime)
-                .WhereIF(!string.IsNullOrEmpty(dto.UserId ),x=> x.AcceptorId == dto.UserId)
-				.WhereIF(!string.IsNullOrEmpty(dto.No), x => x.No.Contains(dto.No!))
-				.WhereIF(!string.IsNullOrEmpty(dto.Title), x => x.Title.Contains(dto.Title!))
-				.WhereIF(!string.IsNullOrEmpty(dto.AcceptType), x => x.AcceptTypeCode == dto.AcceptType) //受理类型
-				.WhereIF(!string.IsNullOrEmpty(dto.Channel), x => x.SourceChannelCode == dto.Channel) //来源渠道
-				 .WhereIF(!string.IsNullOrEmpty(dto.Hotspot),
-					x => x.HotspotSpliceName != null && x.HotspotSpliceName.Contains(dto.Hotspot)) //热点分类
-				.Where(x => SqlFunc.Subqueryable<WorkflowTrace>().Where(wt => wt.ExternalId == x.Id && wt.HandlerOrgId != OrgSeedData.CenterId && (wt.PrevStepName == "班长审批" || wt.PrevStepName == "派单组")).Any())
-                .Select(x=> new OrderDto() { Id = x.Id.SelectAll() })
-				.OrderByIF(dto is { SortField: "startTime", SortRule: 0 }, x => x.StartTime, OrderByType.Asc)
-				.OrderByIF(dto is { SortField: "startTime", SortRule: 1 }, x => x.StartTime, OrderByType.Desc)
-				.OrderByIF(dto is { SortField: "filedTime", SortRule: 0 }, x => x.FiledTime, OrderByType.Asc)
-				.OrderByIF(dto is { SortField: "filedTime", SortRule: 1 }, x => x.FiledTime, OrderByType.Desc)
-				.OrderByIF(dto is { SortField: "sendBackAuditTime", SortRule: 0 }, x => x.SendBackAuditTime, OrderByType.Asc)
-				.OrderByIF(dto is { SortField: "sendBackAuditTime", SortRule: 1 }, x => x.SendBackAuditTime, OrderByType.Desc);
+            var query = _orderRepository.Queryable().Where(x => x.CreationTime >= dto.StartTime && x.CreationTime <= dto.EndTime)
+                 .WhereIF(!string.IsNullOrEmpty(dto.UserId), x => x.AcceptorId == dto.UserId)
+                 .WhereIF(!string.IsNullOrEmpty(dto.No), x => x.No.Contains(dto.No!))
+                 .WhereIF(!string.IsNullOrEmpty(dto.Title), x => x.Title.Contains(dto.Title!))
+                 .WhereIF(!string.IsNullOrEmpty(dto.AcceptType), x => x.AcceptTypeCode == dto.AcceptType) //受理类型
+                 .WhereIF(!string.IsNullOrEmpty(dto.Channel), x => x.SourceChannelCode == dto.Channel) //来源渠道
+                  .WhereIF(!string.IsNullOrEmpty(dto.Hotspot),
+                     x => x.HotspotSpliceName != null && x.HotspotSpliceName.Contains(dto.Hotspot)) //热点分类
+                 .Where(x => SqlFunc.Subqueryable<WorkflowTrace>().Where(wt => wt.ExternalId == x.Id && wt.HandlerOrgId != OrgSeedData.CenterId && (wt.PrevStepName == "班长审批" || wt.PrevStepName == "派单组")).Any())
+                 .Select(x => new OrderDto() { Id = x.Id.SelectAll() })
+                 .OrderByIF(dto is { SortField: "startTime", SortRule: 0 }, x => x.StartTime, OrderByType.Asc)
+                 .OrderByIF(dto is { SortField: "startTime", SortRule: 1 }, x => x.StartTime, OrderByType.Desc)
+                 .OrderByIF(dto is { SortField: "filedTime", SortRule: 0 }, x => x.FiledTime, OrderByType.Asc)
+                 .OrderByIF(dto is { SortField: "filedTime", SortRule: 1 }, x => x.FiledTime, OrderByType.Desc)
+                 .OrderByIF(dto is { SortField: "sendBackAuditTime", SortRule: 0 }, x => x.SendBackAuditTime, OrderByType.Asc)
+                 .OrderByIF(dto is { SortField: "sendBackAuditTime", SortRule: 1 }, x => x.SendBackAuditTime, OrderByType.Desc);
             return query;
         }
-        else if(dto.StatisticsType == "sendOrderBackNum")
+        else if (dto.StatisticsType == "sendOrderBackNum")
         {
 			var query = _orderRepository.Queryable().Where(x => x.CreationTime >= dto.StartTime && x.CreationTime <= dto.EndTime )
 				.WhereIF(!string.IsNullOrEmpty(dto.UserId), x => x.AcceptorId == dto.UserId)
@@ -6589,7 +6613,7 @@ public class OrderApplication : IOrderApplication, IScopeDependency
 				.WhereIF(!string.IsNullOrEmpty(dto.Channel), x => x.SourceChannelCode == dto.Channel) //来源渠道
 				 .WhereIF(!string.IsNullOrEmpty(dto.Hotspot),
 					x => x.HotspotSpliceName != null && x.HotspotSpliceName.Contains(dto.Hotspot)) //热点分类
-				.Where(x => SqlFunc.Subqueryable<OrderSendBackAudit>().Where(os => os.OrderId == x.Id && os.ApplyOrgId != OrgSeedData.CenterId && (os.SendBackStepName == "班长审批" || os.SendBackStepName == "派单组")).Any())
+				.Where(x => SqlFunc.Subqueryable<OrderSendBackAudit>().Where(os => os.OrderId == x.Id && os.ApplyOrgId != OrgSeedData.CenterId && (os.SendBackStepName == "话务部")).Any())
 				.Select(x => new OrderDto() { Id = x.Id.SelectAll() })
 				.OrderByIF(dto is { SortField: "startTime", SortRule: 0 }, x => x.StartTime, OrderByType.Asc)
 				.OrderByIF(dto is { SortField: "startTime", SortRule: 1 }, x => x.StartTime, OrderByType.Desc)
@@ -6602,7 +6626,7 @@ public class OrderApplication : IOrderApplication, IScopeDependency
 		else if (dto.StatisticsType == "sendOrderBackNumber")
 		{
 			var query = _orderRepository.Queryable()
-                .LeftJoin<OrderSendBackAudit>((x, os) => x.Id == os.OrderId && os.ApplyOrgId != OrgSeedData.CenterId && (os.SendBackStepName == "班长审批" || os.SendBackStepName == "派单组"))
+                .LeftJoin<OrderSendBackAudit>((x, os) => x.Id == os.OrderId && os.ApplyOrgId != OrgSeedData.CenterId && (os.SendBackStepName == "话务部"))
 				.WhereIF(!string.IsNullOrEmpty(dto.No), (x, os) => x.No.Contains(dto.No!))
 				.WhereIF(!string.IsNullOrEmpty(dto.Title), (x, os) => x.Title.Contains(dto.Title!))
 				.WhereIF(!string.IsNullOrEmpty(dto.AcceptType), (x, os) => x.AcceptTypeCode == dto.AcceptType) //受理类型
@@ -6623,7 +6647,7 @@ public class OrderApplication : IOrderApplication, IScopeDependency
 		}
 		else if (dto.StatisticsType == "centreFileNum")
 		{
-			var query = _orderRepository.Queryable().Where(x => x.CreationTime >= dto.StartTime && x.CreationTime <= dto.EndTime )
+			var query = _orderRepository.Queryable().Where(x => x.CreationTime >= dto.StartTime && x.CreationTime <= dto.EndTime && x.FileUserRole == EFileUserType.Seat )
 				.WhereIF(!string.IsNullOrEmpty(dto.UserId), x => x.AcceptorId == dto.UserId)
 				.WhereIF(!string.IsNullOrEmpty(dto.No), x => x.No.Contains(dto.No!))
 				.WhereIF(!string.IsNullOrEmpty(dto.Title), x => x.Title.Contains(dto.Title!))
@@ -6673,15 +6697,15 @@ public class OrderApplication : IOrderApplication, IScopeDependency
 				.WhereIF(!string.IsNullOrEmpty(dto.UserId), (x, os) => x.AcceptorId == dto.UserId)
 				.Select((x, os) => new OrderDto() { Id = x.Id.SelectAll() , SendBackOpinion = os.Reason , SendBackAuditTime = os.CreationTime })
                 .MergeTable()
-				.OrderByIF(dto is { SortField: "startTime", SortRule: 0 }, x => x.StartTime, OrderByType.Asc)
-				.OrderByIF(dto is { SortField: "startTime", SortRule: 1 }, x => x.StartTime, OrderByType.Desc)
-				.OrderByIF(dto is { SortField: "filedTime", SortRule: 0 }, x => x.FiledTime, OrderByType.Asc)
-				.OrderByIF(dto is { SortField: "filedTime", SortRule: 1 }, x => x.FiledTime, OrderByType.Desc)
-				.OrderByIF(dto is { SortField: "sendBackAuditTime", SortRule: 0 }, x => x.SendBackAuditTime, OrderByType.Asc)
-				.OrderByIF(dto is { SortField: "sendBackAuditTime", SortRule: 1 }, x => x.SendBackAuditTime, OrderByType.Desc);
-			return query;
-		}
+                .OrderByIF(dto is { SortField: "startTime", SortRule: 0 }, x => x.StartTime, OrderByType.Asc)
+                .OrderByIF(dto is { SortField: "startTime", SortRule: 1 }, x => x.StartTime, OrderByType.Desc)
+                .OrderByIF(dto is { SortField: "filedTime", SortRule: 0 }, x => x.FiledTime, OrderByType.Asc)
+                .OrderByIF(dto is { SortField: "filedTime", SortRule: 1 }, x => x.FiledTime, OrderByType.Desc)
+                .OrderByIF(dto is { SortField: "sendBackAuditTime", SortRule: 0 }, x => x.SendBackAuditTime, OrderByType.Asc)
+                .OrderByIF(dto is { SortField: "sendBackAuditTime", SortRule: 1 }, x => x.SendBackAuditTime, OrderByType.Desc);
+            return query;
+        }
         return null;
-	}
-	#endregion
+    }
+    #endregion
 }

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

@@ -1570,6 +1570,11 @@ namespace Hotline.Share.Dtos.Order
         /// </summary>
         public string AuditName { get; set; }
 
+        /// <summary>
+        /// 节点名称
+        /// </summary>
+        public string StepName { get; set; }
+
         /// <summary>
         /// 审批数量
         /// </summary>

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

@@ -1046,6 +1046,11 @@ public record OrderScreenAuditPagedRequest : PagedKeywordRequest
     /// </summary>
     public int? AuditType { get; set; }
 
+    /// <summary>
+    /// 节点名称
+    /// </summary>
+    public string? StepName { get; set; }
+
 }
 
 public record OrderCenterAcceptPagedRequest : PagedKeywordRequest