Quellcode durchsuchen

Merge branch 'test' of http://110.188.24.182:10023/Fengwo/hotline into test
合并代码

guqiang vor 1 Woche
Ursprung
Commit
3144475fea

+ 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

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

@@ -2358,146 +2358,41 @@ public class OrderController : BaseController
     /// <summary>
     /// 批量审批延期
     /// </summary>
-    //[HttpPost("delay/batch_audit")]
-    //[LogFilter("批量审批延期")]
-    ////[LogFilterAlpha("延期审核")]
-    //public async Task<string> BatchAuditDelay([FromBody] BatchDelayNextFlowDto dto)
-    //{
-    //    var result = new StringBuilder();
-    //    var fail = 0;
-    //    var success = 0;
-    //    var workflow = dto.NextWorkflow;
-    //    foreach (var item in dto.DelayId)
-    //    {
-    //        try
-    //        {
-    //            //if (workflow.NextHandlers.Any() && workflow.NextHandlers.Count() == 1)
-    //            //{
-    //            //    var handler = workflow.NextHandlers.FirstOrDefault();
-    //            //    if (string.IsNullOrEmpty(handler.UserId))
-    //            //    {
-    //            //        workflow.NextHandlers = new List<StepAssignInfo>();
-    //            //    }
-    //            //}
-
-    //            var delay = await _orderDelayRepository.Queryable().Includes(x => x.Order).Where(x => x.Id == item)
-    //                .FirstAsync(HttpContext.RequestAborted);
-    //            workflow.WorkflowId = delay.WorkflowId;
-    //            var workflowEntuty = await _workflowDomainService.GetWorkflowAsync(workflow.WorkflowId, withDefine: true, withSteps: true,
-    //                cancellationToken: HttpContext.RequestAborted);
-    //            var currentStep = workflowEntuty.Steps.FirstOrDefault(d =>
-    //                d.Status == EWorkflowStepStatus.WaitForAccept || d.Status == EWorkflowStepStatus.WaitForHandle);
-
-    //            NextStepsWithOpinionDto<NextStepOption> next = null;
-
-    //            try
-    //            {
-    //                next = await _workflowApplication.GetNextStepsAsync(delay.WorkflowId, HttpContext.RequestAborted);
-    //            }
-    //            catch (UserFriendlyException e)
-    //            {
-    //                if (e.Message.Contains("未找到对应节点"))
-    //                {
-    //                    result.Append("无权审核:" + delay.No);
-    //                    fail++;
-    //                }
-    //                else
-    //                {
-    //                    throw;
-    //                }
-    //            }
-
-    //            if (next == null) continue;
-
-    //            if (!delay.Order.IsProvince)
-    //            {
-    //                if (next.Steps.Any(x => x.Value == "省审批"))
-    //                {
-    //                    next.Steps.Remove(next.Steps.First(x => x.Value == "省审批"));
-    //                }
-    //            }
-
-    //            if (!_sessionContext.OrgIsCenter && currentStep.Name != "中心初审")
-    //            {
-    //                if (next.Steps.Any(x => x.Value == "中心终审"))
-    //                {
-    //                    next.Steps.Remove(next.Steps.First(x => x.Value == "中心终审"));
-    //                }
-    //            }
-
-    //            workflow.StepId = next.StepId;
-    //            workflow.ReviewResult = dto.IsPass ? EReviewResult.Approval : EReviewResult.Failed;
-
-    //            if (workflow.ReviewResult == EReviewResult.Approval)
-    //            {
-    //                var isBatch = next.Steps.Where(x => x.Value == workflow.NextStepName).Any();
-    //                if (isBatch)
-    //                {
-    //                    var step = next.Steps.Where(x => x.Value == workflow.NextStepName).FirstOrDefault();
-    //                    workflow.NextStepCode = step.Key;
-    //                    workflow.NextStepName = step.Value;
-    //                }
-    //                else
-    //                {
-    //                    result.Append("无权审核:" + delay.No);
-    //                    fail++;
-    //                    continue;
-    //                }
-
-    //                await _workflowDomainService.NextAsync(workflow, cancellationToken: HttpContext.RequestAborted);
-    //            }
-    //            else
-    //            {
-    //                var reject = workflow.Adapt<RejectDto>();
-    //                await _workflowApplication.RejectAsync(reject, HttpContext.RequestAborted);
-    //            }
-
-    //            success++;
-    //        }
-    //        catch (UserFriendlyException e)
-    //        {
-    //            result.Append(e.Message);
-    //            fail++;
-    //        }
-    //    }
-
-    //    return $"总共: {dto.DelayId.Length}, 成功: {success}, 失败: {fail}, 失败原因: {result.ToString()}";
-    //}
-
     [HttpPost("delay/batch_audit")]
     [LogFilter("批量审批延期")]
+    //[LogFilterAlpha("延期审核")]
     public async Task<string> BatchAuditDelay([FromBody] BatchDelayNextFlowDto dto)
     {
         var result = new StringBuilder();
         var fail = 0;
         var success = 0;
-        var workflowDto = dto.NextWorkflow;
-        var delays = await _orderDelayRepository.Queryable()
-            .Includes(x => x.Order)
-            .Includes(x => x.Workflow, d => d.WorkflowDefinition)
-            .Includes(x => x.Workflow, d => d.Steps)
-            .Includes(x => x.Workflow, d => d.Traces)
-            .Includes(x => x.Workflow, d => d.Countersigns)
-            .Where(x => dto.DelayId.Contains(x.Id))
-            .ToListAsync(HttpContext.RequestAborted);
-
-        if (!delays.Any())
-            return string.Empty;
-
-        var currentStep = delays.First().Workflow.Steps.FirstOrDefault(d =>
-            d.Status == EWorkflowStepStatus.WaitForAccept || d.Status == EWorkflowStepStatus.WaitForHandle);
-
-        var updateDelays = new List<OrderDelay>();
-        var updateOrders = new List<Order>();
-        foreach (var delay in delays)
+        var workflow = dto.NextWorkflow;
+        foreach (var item in dto.DelayId)
         {
             try
             {
+                //if (workflow.NextHandlers.Any() && workflow.NextHandlers.Count() == 1)
+                //{
+                //    var handler = workflow.NextHandlers.FirstOrDefault();
+                //    if (string.IsNullOrEmpty(handler.UserId))
+                //    {
+                //        workflow.NextHandlers = new List<StepAssignInfo>();
+                //    }
+                //}
+
+                var delay = await _orderDelayRepository.Queryable().Includes(x => x.Order).Where(x => x.Id == item)
+                    .FirstAsync(HttpContext.RequestAborted);
+                workflow.WorkflowId = delay.WorkflowId;
+                var workflowEntuty = await _workflowDomainService.GetWorkflowAsync(workflow.WorkflowId, withDefine: true, withSteps: true,
+                    cancellationToken: HttpContext.RequestAborted);
+                var currentStep = workflowEntuty.Steps.FirstOrDefault(d =>
+                    d.Status == EWorkflowStepStatus.WaitForAccept || d.Status == EWorkflowStepStatus.WaitForHandle);
+
                 NextStepsWithOpinionDto<NextStepOption> next = null;
 
                 try
                 {
-                    next = await _workflowApplication.GetNextStepsAsync(delay.Workflow, HttpContext.RequestAborted);
+                    next = await _workflowApplication.GetNextStepsAsync(delay.WorkflowId, HttpContext.RequestAborted);
                 }
                 catch (UserFriendlyException e)
                 {
@@ -2530,70 +2425,33 @@ public class OrderController : BaseController
                     }
                 }
 
-                workflowDto.StepId = next.StepId;
-                workflowDto.ReviewResult = dto.IsPass ? EReviewResult.Approval : EReviewResult.Failed;
+                workflow.StepId = next.StepId;
+                workflow.ReviewResult = dto.IsPass ? EReviewResult.Approval : EReviewResult.Failed;
 
-                if (dto.IsPass)
+                if (workflow.ReviewResult == EReviewResult.Approval)
                 {
-                    var step = next.Steps.FirstOrDefault(x => x.Value == workflowDto.NextStepName);
-                    if (step is null)
+                    var isBatch = next.Steps.Where(x => x.Value == workflow.NextStepName).Any();
+                    if (isBatch)
+                    {
+                        var step = next.Steps.Where(x => x.Value == workflow.NextStepName).FirstOrDefault();
+                        workflow.NextStepCode = step.Key;
+                        workflow.NextStepName = step.Value;
+                    }
+                    else
                     {
                         result.Append("无权审核:" + delay.No);
                         fail++;
                         continue;
                     }
 
-                    workflowDto.NextStepCode = step.Key;
-                    workflowDto.NextStepName = step.Value;
-
-                    //处理工单延期
-                    var order = delay.Order;
-                    var expiredTimeBase = DateTime.Now;
-                    if (_appOptions.Value.IsZiGong)
-                    {
-                        expiredTimeBase = order.ExpiredTime.Value;
-                    }
-
-                    var startTime = DateTime.Now;
-                    if (order.CenterToOrgTime.HasValue)
-                    {
-                        startTime = order.CenterToOrgTime!.Value;
-                    }
-
-                    var expiredTimeConfig =
-                        await _expireTime.CalcEndTime(expiredTimeBase, startTime, new TimeConfig(delay.DelayNum, delay.DelayUnit),
-                            order.AcceptTypeCode);
-                    order.ExpiredTime = expiredTimeConfig.ExpiredTime;
-                    order.NearlyExpiredTime = expiredTimeConfig.NearlyExpiredTime;
-                    order.NearlyExpiredTimeOne = expiredTimeConfig.NearlyExpiredTimeOne;
-                    //TODO发送短信即将超期
-                    if (delay.IsProDelay)
-                    {
-                        order.ExpiredTimeProvince = expiredTimeConfig.ExpiredTime;
-                    }
-
-                    updateOrders.Add(order);
-
-                    await _workflowDomainService.NextAsync(delay.Workflow, workflowDto,
-                        expiredTime: order.ExpiredTime,
-                        cancellationToken: HttpContext.RequestAborted);
-
-                    await _workflowDomainService.UpdateUnhandleExpiredTimeAsync(order.WorkflowId, order.ExpiredTime, HttpContext.RequestAborted);
-
-                    var orderDto = _mapper.Map<OrderDto>(order);
-                    await _capPublisher.PublishAsync(Hotline.Share.Mq.EventNames.HotlineOrderExpiredTimeUpdate, orderDto,
-                        cancellationToken: HttpContext.RequestAborted);
+                    await _workflowDomainService.NextAsync(workflow, cancellationToken: HttpContext.RequestAborted);
                 }
                 else
                 {
-                    var reject = workflowDto.Adapt<RejectDto>();
+                    var reject = workflow.Adapt<RejectDto>();
                     await _workflowApplication.RejectAsync(reject, HttpContext.RequestAborted);
                 }
 
-
-                delay.DelayState = dto.IsPass ? EDelayState.Pass : EDelayState.NoPass;
-                updateDelays.Add(delay);
-
                 success++;
             }
             catch (UserFriendlyException e)
@@ -2603,23 +2461,165 @@ public class OrderController : BaseController
             }
         }
 
+        return $"总共: {dto.DelayId.Length}, 成功: {success}, 失败: {fail}, 失败原因: {result.ToString()}";
+    }
 
-        await _orderDelayRepository.Updateable(updateDelays)
-            .UpdateColumns(d => d.DelayState)
-            .ExecuteCommandAsync(HttpContext.RequestAborted);
+    //[HttpPost("delay/batch_audit")]
+    //[LogFilter("批量审批延期")]
+    //public async Task<string> BatchAuditDelay([FromBody] BatchDelayNextFlowDto dto)
+    //{
+    //    var result = new StringBuilder();
+    //    var fail = 0;
+    //    var success = 0;
+    //    var workflowDto = dto.NextWorkflow;
+    //    var delays = await _orderDelayRepository.Queryable()
+    //        .Includes(x => x.Order)
+    //        .Includes(x => x.Workflow, d => d.WorkflowDefinition)
+    //        .Includes(x => x.Workflow, d => d.Steps)
+    //        .Includes(x => x.Workflow, d => d.Traces)
+    //        .Includes(x => x.Workflow, d => d.Countersigns)
+    //        .Where(x => dto.DelayId.Contains(x.Id))
+    //        .ToListAsync(HttpContext.RequestAborted);
+
+    //    if (!delays.Any())
+    //        return string.Empty;
+
+    //    var currentStep = delays.First().Workflow.Steps.FirstOrDefault(d =>
+    //        d.Status == EWorkflowStepStatus.WaitForAccept || d.Status == EWorkflowStepStatus.WaitForHandle);
+
+    //    var updateDelays = new List<OrderDelay>();
+    //    var updateOrders = new List<Order>();
+    //    foreach (var delay in delays)
+    //    {
+    //        try
+    //        {
+    //            NextStepsWithOpinionDto<NextStepOption> next = null;
 
-        await _orderRepository.Updateable(updateOrders)
-            .UpdateColumns(d => new
-            {
-                d.ExpiredTime,
-                d.NearlyExpiredTime,
-                d.NearlyExpiredTimeOne,
-                d.ExpiredTimeProvince
-            })
-            .ExecuteCommandAsync(HttpContext.RequestAborted);
+    //            try
+    //            {
+    //                next = await _workflowApplication.GetNextStepsAsync(delay.Workflow, HttpContext.RequestAborted);
+    //            }
+    //            catch (UserFriendlyException e)
+    //            {
+    //                if (e.Message.Contains("未找到对应节点"))
+    //                {
+    //                    result.Append("无权审核:" + delay.No);
+    //                    fail++;
+    //                }
+    //                else
+    //                {
+    //                    throw;
+    //                }
+    //            }
 
-        return $"总共: {dto.DelayId.Length}, 成功: {success}, 失败: {fail}, 失败原因: {result}";
-    }
+    //            if (next == null) continue;
+
+    //            if (!delay.Order.IsProvince)
+    //            {
+    //                if (next.Steps.Any(x => x.Value == "省审批"))
+    //                {
+    //                    next.Steps.Remove(next.Steps.First(x => x.Value == "省审批"));
+    //                }
+    //            }
+
+    //            if (!_sessionContext.OrgIsCenter && currentStep.Name != "中心初审")
+    //            {
+    //                if (next.Steps.Any(x => x.Value == "中心终审"))
+    //                {
+    //                    next.Steps.Remove(next.Steps.First(x => x.Value == "中心终审"));
+    //                }
+    //            }
+
+    //            workflowDto.StepId = next.StepId;
+    //            workflowDto.ReviewResult = dto.IsPass ? EReviewResult.Approval : EReviewResult.Failed;
+
+    //            if (dto.IsPass)
+    //            {
+    //                var step = next.Steps.FirstOrDefault(x => x.Value == workflowDto.NextStepName);
+    //                if (step is null)
+    //                {
+    //                    result.Append("无权审核:" + delay.No);
+    //                    fail++;
+    //                    continue;
+    //                }
+
+    //                workflowDto.NextStepCode = step.Key;
+    //                workflowDto.NextStepName = step.Value;
+
+    //                //处理工单延期
+    //                var order = delay.Order;
+    //                var expiredTimeBase = DateTime.Now;
+    //                if (_appOptions.Value.IsZiGong)
+    //                {
+    //                    expiredTimeBase = order.ExpiredTime.Value;
+    //                }
+
+    //                var startTime = DateTime.Now;
+    //                if (order.CenterToOrgTime.HasValue)
+    //                {
+    //                    startTime = order.CenterToOrgTime!.Value;
+    //                }
+
+    //                var expiredTimeConfig =
+    //                    await _expireTime.CalcEndTime(expiredTimeBase, startTime, new TimeConfig(delay.DelayNum, delay.DelayUnit),
+    //                        order.AcceptTypeCode);
+    //                order.ExpiredTime = expiredTimeConfig.ExpiredTime;
+    //                order.NearlyExpiredTime = expiredTimeConfig.NearlyExpiredTime;
+    //                order.NearlyExpiredTimeOne = expiredTimeConfig.NearlyExpiredTimeOne;
+    //                //TODO发送短信即将超期
+    //                if (delay.IsProDelay)
+    //                {
+    //                    order.ExpiredTimeProvince = expiredTimeConfig.ExpiredTime;
+    //                }
+
+    //                updateOrders.Add(order);
+
+    //                await _workflowDomainService.NextAsync(delay.Workflow, workflowDto,
+    //                    expiredTime: order.ExpiredTime,
+    //                    cancellationToken: HttpContext.RequestAborted);
+
+    //                await _workflowDomainService.UpdateUnhandleExpiredTimeAsync(order.WorkflowId, order.ExpiredTime, HttpContext.RequestAborted);
+
+    //                var orderDto = _mapper.Map<OrderDto>(order);
+    //                await _capPublisher.PublishAsync(Hotline.Share.Mq.EventNames.HotlineOrderExpiredTimeUpdate, orderDto,
+    //                    cancellationToken: HttpContext.RequestAborted);
+    //            }
+    //            else
+    //            {
+    //                var reject = workflowDto.Adapt<RejectDto>();
+    //                await _workflowApplication.RejectAsync(reject, HttpContext.RequestAborted);
+    //            }
+
+
+    //            delay.DelayState = dto.IsPass ? EDelayState.Pass : EDelayState.NoPass;
+    //            updateDelays.Add(delay);
+
+    //            success++;
+    //        }
+    //        catch (UserFriendlyException e)
+    //        {
+    //            result.Append(e.Message);
+    //            fail++;
+    //        }
+    //    }
+
+
+    //    await _orderDelayRepository.Updateable(updateDelays)
+    //        .UpdateColumns(d => d.DelayState)
+    //        .ExecuteCommandAsync(HttpContext.RequestAborted);
+
+    //    await _orderRepository.Updateable(updateOrders)
+    //        .UpdateColumns(d => new
+    //        {
+    //            d.ExpiredTime,
+    //            d.NearlyExpiredTime,
+    //            d.NearlyExpiredTimeOne,
+    //            d.ExpiredTimeProvince
+    //        })
+    //        .ExecuteCommandAsync(HttpContext.RequestAborted);
+
+    //    return $"总共: {dto.DelayId.Length}, 成功: {success}, 失败: {fail}, 失败原因: {result}";
+    //}
 
 
 

+ 8 - 4
src/Hotline.Application/CallCenter/DefaultCallApplication.cs

@@ -362,15 +362,19 @@ public abstract class DefaultCallApplication : ICallApplication
 
         if (dto.Type == 2)
         {
-            return query.Select((d, o, v) => new CallNativeDto
+            var d = query.Select((d, o, v) => new CallNativeDto
             {
-                OrderId = v.OrderId,
-                OrderNo = v.Order.No,
-                Title = v.Order.Title,
+                OrderId = SqlFunc.IsNull(v.OrderId, v.OrderId),
+                OrderNo = SqlFunc.IsNull(v.Order.No, o.No),
+                Title = SqlFunc.IsNull(v.Order.Title, o.Title),
                 CallState = d.CallState,
                 IsVisit = !SqlFunc.IsNullOrEmpty(v.Id),
                 IsOrder = !SqlFunc.IsNullOrEmpty(o.Id),
             }, true);
+#if DEBUG
+            var sql = d.ToSqlString();
+#endif
+            return d;
         }
         if (dto.Type == 3)
         {

+ 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.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.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.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

+ 5 - 3
test/Hotline.Tests/Application/DefaultCallApplicationTest.cs

@@ -59,9 +59,11 @@ public class DefaultCallApplicationTest : TestBase
     public async Task QueryCallsFixed_Test()
     {
         var inDto = new QueryCallsFixedDto();
-        inDto.CallStartTimeEnd = DateTime.Now;
-        inDto.CallStartTimeStart = "2024/10/01 00:00:00".ObjToDate();
-        inDto.StaffNo = "8029";
+        //inDto.CallStartTimeEnd = DateTime.Now;
+        //inDto.CallStartTimeStart = "2024/10/01 00:00:00".ObjToDate();
+        //inDto.StaffNo = "8029";
+        inDto.Type = 2;
+        inDto.ToNo = "15892228077";
 
         var items = await _defaultCallApplication.QueryCallsFixedAsync(inDto, new CancellationToken()).ToPageListWithoutTotalAsync(inDto, CancellationToken.None);
         items.ShouldNotBeNull();