Эх сурвалжийг харах

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

xf 5 өдөр өмнө
parent
commit
d442655228

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

@@ -4124,6 +4124,7 @@ public class OrderController : BaseController
             .WhereIF(dto.CrTimeStart.HasValue, x => x.CreationTime >= dto.CrTimeStart)                               //催办时间Start
             .WhereIF(dto.CrTimeStart.HasValue, x => x.CreationTime >= dto.CrTimeStart)                               //催办时间Start
             .WhereIF(dto.CrTimeEnd.HasValue, x => x.CreationTime <= dto.CrTimeEnd)                                   //催办时间End
             .WhereIF(dto.CrTimeEnd.HasValue, x => x.CreationTime <= dto.CrTimeEnd)                                   //催办时间End
             .WhereIF(!string.IsNullOrEmpty(dto.OrgName), x => x.OrgName.Contains(dto.OrgName))                       //催办部门
             .WhereIF(!string.IsNullOrEmpty(dto.OrgName), x => x.OrgName.Contains(dto.OrgName))                       //催办部门
+            .WhereIF(!string.IsNullOrEmpty(dto.ApplyContent), x => x.ApplyContent.Contains(dto.ApplyContent))        //催办内容
             .WhereIF(!string.IsNullOrEmpty(dto.CurrentStepName), x => x.Order.CurrentStepName == dto.CurrentStepName) //当前办理节点
             .WhereIF(!string.IsNullOrEmpty(dto.CurrentStepName), x => x.Order.CurrentStepName == dto.CurrentStepName) //当前办理节点
             .WhereIF(dto.CrState.HasValue, x => x.State == dto.CrState)
             .WhereIF(dto.CrState.HasValue, x => x.State == dto.CrState)
             .OrderByDescending(x => x.CreationTime)
             .OrderByDescending(x => x.CreationTime)

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

@@ -176,7 +176,7 @@ namespace Hotline.Api.Controllers
                 .WhereIF(!string.IsNullOrEmpty(dto.NameOrNo), x => x.Order.AcceptorName == dto.NameOrNo! || x.Order.AcceptorStaffNo == dto.NameOrNo!)   //受理人/坐席
                 .WhereIF(!string.IsNullOrEmpty(dto.NameOrNo), x => x.Order.AcceptorName == dto.NameOrNo! || x.Order.AcceptorStaffNo == dto.NameOrNo!)   //受理人/坐席
                 .WhereIF(!string.IsNullOrEmpty(dto.FromPhone), x => x.Order.FromPhone.Contains(dto.FromPhone)) //来电号码
                 .WhereIF(!string.IsNullOrEmpty(dto.FromPhone), x => x.Order.FromPhone.Contains(dto.FromPhone)) //来电号码
                 .WhereIF(!string.IsNullOrEmpty(dto.UserName), x => x.UserName.Contains(dto.UserName))          //质检人
                 .WhereIF(!string.IsNullOrEmpty(dto.UserName), x => x.UserName.Contains(dto.UserName))          //质检人
-                .WhereIF(dto.QualityTimeStart.HasValue, x => x.QualityTime >= dto.QualityTimeStart)              //质检时间Star
+                .WhereIF(dto.QualityTimeStar.HasValue, x => x.QualityTime >= dto.QualityTimeStar)              //质检时间Star
                 .WhereIF(dto.QualityTimeEnd.HasValue, x => x.QualityTime <= dto.QualityTimeEnd)                //质检时间End
                 .WhereIF(dto.QualityTimeEnd.HasValue, x => x.QualityTime <= dto.QualityTimeEnd)                //质检时间End
                 .OrderByDescending(x => x.CreationTime)
                 .OrderByDescending(x => x.CreationTime)
                 .ToPagedListAsync(dto.PageIndex, dto.PageSize, HttpContext.RequestAborted);
                 .ToPagedListAsync(dto.PageIndex, dto.PageSize, HttpContext.RequestAborted);

+ 18 - 1
src/Hotline.Application/Handlers/FlowEngine/WorkflowEndHandler.cs

@@ -10,6 +10,7 @@ using Hotline.FlowEngine.WorkflowModules;
 using Hotline.JudicialManagement.Notifies;
 using Hotline.JudicialManagement.Notifies;
 using Hotline.KnowledgeBase;
 using Hotline.KnowledgeBase;
 using Hotline.Orders;
 using Hotline.Orders;
+using Hotline.Schedulings;
 using Hotline.Settings;
 using Hotline.Settings;
 using Hotline.Settings.TimeLimitDomain;
 using Hotline.Settings.TimeLimitDomain;
 using Hotline.Share.Dtos.FlowEngine.Workflow;
 using Hotline.Share.Dtos.FlowEngine.Workflow;
@@ -24,6 +25,7 @@ using MapsterMapper;
 using MediatR;
 using MediatR;
 using Microsoft.Extensions.Logging;
 using Microsoft.Extensions.Logging;
 using Microsoft.Extensions.Options;
 using Microsoft.Extensions.Options;
+using SqlSugar.Extensions;
 using XF.Domain.Repository;
 using XF.Domain.Repository;
 
 
 namespace Hotline.Application.Handlers.FlowEngine;
 namespace Hotline.Application.Handlers.FlowEngine;
@@ -48,6 +50,7 @@ public class WorkflowEndHandler : INotificationHandler<EndWorkflowNotify>
     private readonly ICalcExpireTime _expireTime;
     private readonly ICalcExpireTime _expireTime;
     private readonly IRepository<OrderTerminate> _orderTerminateRepository;
     private readonly IRepository<OrderTerminate> _orderTerminateRepository;
     private readonly IRepository<OrderSecondaryHandling> _orderSecondaryHandlingRepository;
     private readonly IRepository<OrderSecondaryHandling> _orderSecondaryHandlingRepository;
+    private readonly IRepository<Scheduling> _schedulingRepository;
 
 
     public WorkflowEndHandler(
     public WorkflowEndHandler(
         IMapper mapper,
         IMapper mapper,
@@ -198,7 +201,7 @@ public class WorkflowEndHandler : INotificationHandler<EndWorkflowNotify>
                     order.FileUserOrgName = notification.Trace.HandlerOrgName;
                     order.FileUserOrgName = notification.Trace.HandlerOrgName;
                     order.FileOrgIsCenter = notification.Trace.HandlerOrgIsCenter;
                     order.FileOrgIsCenter = notification.Trace.HandlerOrgIsCenter;
                     order.FileOpinion = notification.Dto.Opinion;
                     order.FileOpinion = notification.Dto.Opinion;
-
+                    
                     /*
                     /*
                      *需求:
                      *需求:
                      *1、判断工单属于哪种归档类型,需由谁归档来判断,热线中心归档的就叫中心归档件,部门归档就叫做部门归档件
                      *1、判断工单属于哪种归档类型,需由谁归档来判断,热线中心归档的就叫中心归档件,部门归档就叫做部门归档件
@@ -217,6 +220,20 @@ public class WorkflowEndHandler : INotificationHandler<EndWorkflowNotify>
                             if (order.CounterSignType is ECounterSignType.Center)
                             if (order.CounterSignType is ECounterSignType.Center)
                                 order.CounterSignType = null;
                                 order.CounterSignType = null;
                         }
                         }
+                        //随机派单员(市中心综合办)
+                        if (order.FileUserOrgId == "001175")
+                        {
+                            try
+                            {
+                                var schedulingList = await _schedulingRepository.Queryable().Includes(x => x.SchedulingUser).Where(x => x.SchedulingTime!.Value.Date == DateTime.Now.Date).ToListAsync();
+                                Random random = new Random();
+                                int randomNum = random.Next(schedulingList.Count);
+                                var userId = schedulingList[randomNum].SchedulingUser.UserId;
+                                order.WaitForPublisherId = userId;
+                            }
+                            catch
+                            {}
+                        }
                     }
                     }
 
 
                     //记录冗余归档数据
                     //记录冗余归档数据

+ 355 - 354
src/Hotline.Application/OrderApp/OrderApplication.cs

@@ -121,9 +121,9 @@ public class OrderApplication : IOrderApplication, IScopeDependency
     private readonly ISessionContextManager _sessionContextManager;
     private readonly ISessionContextManager _sessionContextManager;
     private readonly IOrderVisitApplication _orderVisitApplication;
     private readonly IOrderVisitApplication _orderVisitApplication;
     private readonly IRepository<OrderVisitDetailCopy> _orderVisitDetailCopyRepository;
     private readonly IRepository<OrderVisitDetailCopy> _orderVisitDetailCopyRepository;
-	private readonly IRepository<OrderDelayAutomatic> _orderDelayAutomaticRepository;
+    private readonly IRepository<OrderDelayAutomatic> _orderDelayAutomaticRepository;
 
 
-	public OrderApplication(
+    public OrderApplication(
         IOrderDomainService orderDomainService,
         IOrderDomainService orderDomainService,
         IOrderRepository orderRepository,
         IOrderRepository orderRepository,
         IWorkflowDomainService workflowDomainService,
         IWorkflowDomainService workflowDomainService,
@@ -175,8 +175,8 @@ public class OrderApplication : IOrderApplication, IScopeDependency
         IOrderVisitApplication orderVisitApplication,
         IOrderVisitApplication orderVisitApplication,
         IRepository<Role> roleRepository,
         IRepository<Role> roleRepository,
         IRepository<OrderVisitDetailCopy> orderVisitDetailCopyRepository,
         IRepository<OrderVisitDetailCopy> orderVisitDetailCopyRepository,
-		IRepository<OrderDelayAutomatic> orderDelayAutomaticRepository
-		)
+        IRepository<OrderDelayAutomatic> orderDelayAutomaticRepository
+        )
     {
     {
         _orderDomainService = orderDomainService;
         _orderDomainService = orderDomainService;
         _workflowDomainService = workflowDomainService;
         _workflowDomainService = workflowDomainService;
@@ -228,8 +228,8 @@ public class OrderApplication : IOrderApplication, IScopeDependency
         _orderVisitApplication = orderVisitApplication;
         _orderVisitApplication = orderVisitApplication;
         _roleRepository = roleRepository;
         _roleRepository = roleRepository;
         _orderVisitDetailCopyRepository = orderVisitDetailCopyRepository;
         _orderVisitDetailCopyRepository = orderVisitDetailCopyRepository;
-		_orderDelayAutomaticRepository = orderDelayAutomaticRepository;
-	}
+        _orderDelayAutomaticRepository = orderDelayAutomaticRepository;
+    }
 
 
     /// <summary>
     /// <summary>
     /// 更新工单办理期满时间(延期调用,其他不调用)
     /// 更新工单办理期满时间(延期调用,其他不调用)
@@ -1871,7 +1871,7 @@ public class OrderApplication : IOrderApplication, IScopeDependency
                 .WhereIF(!string.IsNullOrEmpty(dto.ActualHandlerName), d => d.ActualHandlerName == dto.ActualHandlerName) //接办人
                 .WhereIF(!string.IsNullOrEmpty(dto.ActualHandlerName), d => d.ActualHandlerName == dto.ActualHandlerName) //接办人
                 .WhereIF(dto.IsScreen == true, d => d.OrderScreens.Any(x => x.Status != EScreenStatus.Refuse)) //有甄别
                 .WhereIF(dto.IsScreen == true, d => d.OrderScreens.Any(x => x.Status != EScreenStatus.Refuse)) //有甄别
                 .WhereIF(dto.IsScreen == false, d => !d.OrderScreens.Any(x => x.Status != EScreenStatus.Refuse)) //无甄别
                 .WhereIF(dto.IsScreen == false, d => !d.OrderScreens.Any(x => x.Status != EScreenStatus.Refuse)) //无甄别
-                .WhereIF(!string.IsNullOrEmpty(dto.CurrentStepCode), d => d.CurrentStepCode == dto.CurrentStepCode) //当前办理节点
+                .WhereIF(!string.IsNullOrEmpty(dto.CurrentStepName), d => d.CurrentStepName == dto.CurrentStepName) //当前办理节点
                 .WhereIF(dto.ActualHandleTimeStart.HasValue, d => d.FiledTime >= dto.ActualHandleTimeStart) //办结时间开始
                 .WhereIF(dto.ActualHandleTimeStart.HasValue, d => d.FiledTime >= dto.ActualHandleTimeStart) //办结时间开始
                 .WhereIF(dto.ActualHandleTimeEnd.HasValue, d => d.FiledTime <= dto.ActualHandleTimeEnd) //办结时间结束
                 .WhereIF(dto.ActualHandleTimeEnd.HasValue, d => d.FiledTime <= dto.ActualHandleTimeEnd) //办结时间结束
                 .WhereIF(dto.IsOverTime == true,
                 .WhereIF(dto.IsOverTime == true,
@@ -2445,12 +2445,12 @@ public class OrderApplication : IOrderApplication, IScopeDependency
         quer = _orderRepository.UnionAll(quer, queryCountersignOrder).MergeTable()
         quer = _orderRepository.UnionAll(quer, queryCountersignOrder).MergeTable()
             .InnerJoin<SystemOrganize>((x, so) => x.ActualHandleOrgCode == so.Id)
             .InnerJoin<SystemOrganize>((x, so) => x.ActualHandleOrgCode == so.Id)
             .WhereIF(!string.IsNullOrEmpty(dto.No), (x, so) => x.No == dto.No)
             .WhereIF(!string.IsNullOrEmpty(dto.No), (x, so) => x.No == dto.No)
-			.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: "expiredTime", SortRule: 0 }, x => x.ExpiredTime, OrderByType.Asc)
-			.OrderByIF(dto is { SortField: "expiredTime", SortRule: 1 }, x => x.ExpiredTime, OrderByType.Desc);
+            .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: "expiredTime", SortRule: 0 }, x => x.ExpiredTime, OrderByType.Asc)
+            .OrderByIF(dto is { SortField: "expiredTime", SortRule: 1 }, x => x.ExpiredTime, OrderByType.Desc);
         return quer;
         return quer;
     }
     }
 
 
@@ -4479,7 +4479,7 @@ public class OrderApplication : IOrderApplication, IScopeDependency
         query = query.WhereIF(dto.VisitStateQuery == EVisitStateQuery.Visited, d => d.VisitState == EVisitState.Visited)
         query = query.WhereIF(dto.VisitStateQuery == EVisitStateQuery.Visited, d => d.VisitState == EVisitState.Visited)
             .WhereIF(dto.VisitStateQuery == EVisitStateQuery.SMSUnsatisfied, d => d.VisitState == EVisitState.SMSUnsatisfied)
             .WhereIF(dto.VisitStateQuery == EVisitStateQuery.SMSUnsatisfied, d => d.VisitState == EVisitState.SMSUnsatisfied)
             .WhereIF(dto.VisitStateQuery == EVisitStateQuery.SMSVisiting, d => d.VisitState == EVisitState.SMSVisiting)
             .WhereIF(dto.VisitStateQuery == EVisitStateQuery.SMSVisiting, d => d.VisitState == EVisitState.SMSVisiting)
-            .WhereIF(dto.VisitStateQuery == EVisitStateQuery.AiVisitWaitForVisit,d=>d.VisitState == EVisitState.AiVisitWaitForVisit)
+            .WhereIF(dto.VisitStateQuery == EVisitStateQuery.AiVisitWaitForVisit, d => d.VisitState == EVisitState.AiVisitWaitForVisit)
             .WhereIF(dto.VisitStateQuery == EVisitStateQuery.NoPutThrough,
             .WhereIF(dto.VisitStateQuery == EVisitStateQuery.NoPutThrough,
                 d => d.IsPutThrough == false && d.VisitState != EVisitState.Visited && d.VisitState != EVisitState.None)
                 d => d.IsPutThrough == false && d.VisitState != EVisitState.Visited && d.VisitState != EVisitState.None)
             .WhereIF(_appOptions.Value.IsZiGong && dto.VisitStateQuery == EVisitStateQuery.NoPutThrough,
             .WhereIF(_appOptions.Value.IsZiGong && dto.VisitStateQuery == EVisitStateQuery.NoPutThrough,
@@ -5511,7 +5511,7 @@ public class OrderApplication : IOrderApplication, IScopeDependency
     {
     {
         if (_appOptions.Value.IsLuZhou)
         if (_appOptions.Value.IsLuZhou)
         {
         {
-           return  await SendOrderReportAsync_LZ(dto);
+            return await SendOrderReportAsync_LZ(dto);
         }
         }
         var itemsHandled = _workflowTraceRepository.Queryable()
         var itemsHandled = _workflowTraceRepository.Queryable()
             .LeftJoin<Workflow>((x, w) => x.WorkflowId == w.Id)
             .LeftJoin<Workflow>((x, w) => x.WorkflowId == w.Id)
@@ -5601,69 +5601,69 @@ public class OrderApplication : IOrderApplication, IScopeDependency
         return res;
         return res;
     }
     }
 
 
-	/// <summary>
-	/// 泸州派单量统计
-	/// </summary>
-	/// <param name="dto"></param>
-	/// <returns></returns>
-	public async Task<List<SendOrderReportOutDto>> SendOrderReportAsync_LZ(QuerySendOrderRequest dto)
+    /// <summary>
+    /// 泸州派单量统计
+    /// </summary>
+    /// <param name="dto"></param>
+    /// <returns></returns>
+    public async Task<List<SendOrderReportOutDto>> SendOrderReportAsync_LZ(QuerySendOrderRequest dto)
     {
     {
-		var itemsHandled = _workflowTraceRepository.Queryable()
-			   .LeftJoin<Workflow>((x, w) => x.WorkflowId == w.Id)
-			   .Where((x, w) => w.ModuleCode == WorkflowModuleConsts.OrderHandle && x.Status == EWorkflowStepStatus.Handled && (x.Name =="派单组" || x.Name == "班长审批"))
-			   .Where((x, w) => x.HandleTime >= dto.StartTime.Value)
-			   .Where((x, w) => x.HandleTime <= dto.EndTime.Value)
-			   .WhereIF(!string.IsNullOrEmpty(dto.UserName), (x, w) => x.HandlerName == dto.UserName)
-			   .GroupBy((x, w) => new { x.HandlerId,x.HandlerName,x.Name})
-			   .Select((x, w) => new BiOrderSendVo
-			   {
-				   UserId = x.HandlerId,
-				   UserName = x.HandlerName,
+        var itemsHandled = _workflowTraceRepository.Queryable()
+               .LeftJoin<Workflow>((x, w) => x.WorkflowId == w.Id)
+               .Where((x, w) => w.ModuleCode == WorkflowModuleConsts.OrderHandle && x.Status == EWorkflowStepStatus.Handled && (x.Name == "派单组" || x.Name == "班长审批"))
+               .Where((x, w) => x.HandleTime >= dto.StartTime.Value)
+               .Where((x, w) => x.HandleTime <= dto.EndTime.Value)
+               .WhereIF(!string.IsNullOrEmpty(dto.UserName), (x, w) => x.HandlerName == dto.UserName)
+               .GroupBy((x, w) => new { x.HandlerId, x.HandlerName, x.Name })
+               .Select((x, w) => new BiOrderSendVo
+               {
+                   UserId = x.HandlerId,
+                   UserName = x.HandlerName,
                    StepName = x.Name,
                    StepName = x.Name,
-				   SendOrderNum = SqlFunc.AggregateDistinctCount(w.ExternalId),
-				   NoSendOrderNum = 0,
-				   ReSendOrderNum = 0,
-			   });
-		var itemsNo = _workflowTraceRepository.Queryable()
-			.LeftJoin<Workflow>((x, w) => x.WorkflowId == w.Id)
-			.Where((x, w) => w.ModuleCode == WorkflowModuleConsts.OrderHandle && x.Status != EWorkflowStepStatus.Handled && (x.Name == "派单组" || x.Name == "班长审批"))
-			.Where((x, w) => x.CreationTime >= dto.StartTime.Value)
-			.Where((x, w) => x.CreationTime <= dto.EndTime.Value)
-			.WhereIF(!string.IsNullOrEmpty(dto.UserName), (x, w) => x.HandlerName == dto.UserName)
-			.GroupBy((x, w) => new { x.HandlerId, x.HandlerName, x.Name })
-			.Select((x, w) => new BiOrderSendVo
-			{
-				UserId = x.HandlerId,
-				UserName = x.HandlerName,
-				StepName = x.Name,
-				SendOrderNum = 0,
-				NoSendOrderNum = SqlFunc.AggregateDistinctCount(w.ExternalId),
-				ReSendOrderNum =0,
-			});
-        
-		var items2 =  _workflowTraceRepository.Queryable()
-			.LeftJoin<Workflow>((x, w) => x.WorkflowId == w.Id)
-			.Where((x, w) => w.ModuleCode == WorkflowModuleConsts.OrderHandle  &&
-								 x.Status == EWorkflowStepStatus.Handled
-								 && !string.IsNullOrEmpty(x.NextMainHandler) && x.NextMainHandler != OrgSeedData.CenterId && (x.Name == "派单组" || x.Name == "班长审批"))
-			.Where((x, w) => x.CreationTime >= dto.StartTime.Value)
-			.Where((x, w) => x.CreationTime <= dto.EndTime.Value)
-			.GroupBy((x, w) => x.WorkflowId)
-			.Having((x, w) => SqlFunc.AggregateCount(x.WorkflowId) > 1)
-			.Select((x, w) => new { Id = x.WorkflowId, CreationTime = SqlFunc.AggregateMin(x.CreationTime) })
-			.MergeTable()
-			.LeftJoin<WorkflowTrace>((a, wt) => a.Id == wt.WorkflowId)
-			.WhereIF(!string.IsNullOrEmpty(dto.UserName), ((a, wt) => wt.HandlerName == dto.UserName))
-			.GroupBy((a, wt) => new { wt.HandlerId, wt.HandlerName ,wt.Name })
-			.Select((a, wt) => new BiOrderSendVo
-			{
-				UserId = wt.HandlerId,
-				UserName = wt.HandlerName,
-				StepName = wt.Name,
-				SendOrderNum = 0,
-				NoSendOrderNum = 0,
-				ReSendOrderNum = SqlFunc.AggregateDistinctCount(wt.ExternalId),
-			});
+                   SendOrderNum = SqlFunc.AggregateDistinctCount(w.ExternalId),
+                   NoSendOrderNum = 0,
+                   ReSendOrderNum = 0,
+               });
+        var itemsNo = _workflowTraceRepository.Queryable()
+            .LeftJoin<Workflow>((x, w) => x.WorkflowId == w.Id)
+            .Where((x, w) => w.ModuleCode == WorkflowModuleConsts.OrderHandle && x.Status != EWorkflowStepStatus.Handled && (x.Name == "派单组" || x.Name == "班长审批"))
+            .Where((x, w) => x.CreationTime >= dto.StartTime.Value)
+            .Where((x, w) => x.CreationTime <= dto.EndTime.Value)
+            .WhereIF(!string.IsNullOrEmpty(dto.UserName), (x, w) => x.HandlerName == dto.UserName)
+            .GroupBy((x, w) => new { x.HandlerId, x.HandlerName, x.Name })
+            .Select((x, w) => new BiOrderSendVo
+            {
+                UserId = x.HandlerId,
+                UserName = x.HandlerName,
+                StepName = x.Name,
+                SendOrderNum = 0,
+                NoSendOrderNum = SqlFunc.AggregateDistinctCount(w.ExternalId),
+                ReSendOrderNum = 0,
+            });
+
+        var items2 = _workflowTraceRepository.Queryable()
+            .LeftJoin<Workflow>((x, w) => x.WorkflowId == w.Id)
+            .Where((x, w) => w.ModuleCode == WorkflowModuleConsts.OrderHandle &&
+                                 x.Status == EWorkflowStepStatus.Handled
+                                 && !string.IsNullOrEmpty(x.NextMainHandler) && x.NextMainHandler != OrgSeedData.CenterId && (x.Name == "派单组" || x.Name == "班长审批"))
+            .Where((x, w) => x.CreationTime >= dto.StartTime.Value)
+            .Where((x, w) => x.CreationTime <= dto.EndTime.Value)
+            .GroupBy((x, w) => x.WorkflowId)
+            .Having((x, w) => SqlFunc.AggregateCount(x.WorkflowId) > 1)
+            .Select((x, w) => new { Id = x.WorkflowId, CreationTime = SqlFunc.AggregateMin(x.CreationTime) })
+            .MergeTable()
+            .LeftJoin<WorkflowTrace>((a, wt) => a.Id == wt.WorkflowId)
+            .WhereIF(!string.IsNullOrEmpty(dto.UserName), ((a, wt) => wt.HandlerName == dto.UserName))
+            .GroupBy((a, wt) => new { wt.HandlerId, wt.HandlerName, wt.Name })
+            .Select((a, wt) => new BiOrderSendVo
+            {
+                UserId = wt.HandlerId,
+                UserName = wt.HandlerName,
+                StepName = wt.Name,
+                SendOrderNum = 0,
+                NoSendOrderNum = 0,
+                ReSendOrderNum = SqlFunc.AggregateDistinctCount(wt.ExternalId),
+            });
 
 
         var items = await _orderRepository.UnionAll(itemsHandled, itemsNo, items2)
         var items = await _orderRepository.UnionAll(itemsHandled, itemsNo, items2)
          .GroupBy(x => new { x.UserId, x.UserName, x.StepName })
          .GroupBy(x => new { x.UserId, x.UserName, x.StepName })
@@ -5676,51 +5676,52 @@ public class OrderApplication : IOrderApplication, IScopeDependency
              NoSendOrderNum = SqlFunc.AggregateSum(x.NoSendOrderNum),
              NoSendOrderNum = SqlFunc.AggregateSum(x.NoSendOrderNum),
              ReSendOrderNum = SqlFunc.AggregateSum(x.ReSendOrderNum)
              ReSendOrderNum = SqlFunc.AggregateSum(x.ReSendOrderNum)
          }).ToListAsync();
          }).ToListAsync();
-        var res = items.Select(p=> new SendOrderReportOutDto {
-             UserId =p.UserId,
-			 UserName = p.UserName,
-			 StepName = p.StepName,
-			 SendOrderNum = p.SendOrderNum,
-             NoSendOrderNum = p.NoSendOrderNum,
-			 ReSendOrderNum = p.ReSendOrderNum,
-             ChainRate = p.AccuracyRate
-		 }).ToList();
-		return res;
-	}
-
-
-    public ISugarQueryable<Order> QuerySendOrderDetail(QuerySendOrderDetailRequest dto) 
+        var res = items.Select(p => new SendOrderReportOutDto
+        {
+            UserId = p.UserId,
+            UserName = p.UserName,
+            StepName = p.StepName,
+            SendOrderNum = p.SendOrderNum,
+            NoSendOrderNum = p.NoSendOrderNum,
+            ReSendOrderNum = p.ReSendOrderNum,
+            ChainRate = p.AccuracyRate
+        }).ToList();
+        return res;
+    }
+
+
+    public ISugarQueryable<Order> QuerySendOrderDetail(QuerySendOrderDetailRequest dto)
     {
     {
         if (_appOptions.Value.IsLuZhou)
         if (_appOptions.Value.IsLuZhou)
         {
         {
             return QuerySendOrderDetail_LZ(dto);
             return QuerySendOrderDetail_LZ(dto);
 
 
-		}
-		if (dto.TitleCode.ToUpper() == "RESENDORDERNUM")
+        }
+        if (dto.TitleCode.ToUpper() == "RESENDORDERNUM")
         {
         {
-           var query = _workflowTraceRepository.Queryable()
-                         .LeftJoin<Workflow>((x, w) => x.WorkflowId == w.Id)
-                         .InnerJoin<SchedulingUser>((x, w, su) => x.HandlerId == su.UserId)
-                         .Where((x, w, su) => w.ModuleCode == WorkflowModuleConsts.OrderHandle && x.BusinessType == EBusinessType.Send && x.Status == EWorkflowStepStatus.Handled
-                                              && !string.IsNullOrEmpty(x.NextMainHandler) && x.NextMainHandler != OrgSeedData.CenterId)
-                         .Where((x, w, su) => x.CreationTime >= dto.StartTime.Value)
-                         .Where((x, w, su) => x.CreationTime <= dto.EndTime.Value)
-                         .GroupBy((x, w, su) => x.WorkflowId)
-                         .Having((x, w, su) => SqlFunc.AggregateCount(x.WorkflowId) > 1)
-                          .Select((x, w, su) => new { Id = x.WorkflowId, CreationTime = SqlFunc.AggregateMin(x.CreationTime) })
-                         .MergeTable()
-                         .LeftJoin<WorkflowTrace>((a, wt) => a.Id == wt.WorkflowId)
-                         .LeftJoin<Workflow>((a, wt, wf) => wt.WorkflowId == wf.Id)
-                         .InnerJoin<SchedulingUser>((a, wt, wf, su) => wt.HandlerId == su.UserId)
-                         .Where((a, wt, wf, su) => su.UserId == dto.UserId)
-                         .GroupBy((a, wt, wf, su) => wf.ExternalId)
-                         .Select((a, wt, wf, su) => new { Id = wf.ExternalId })
-                         .MergeTable()
-                         .LeftJoin<Order>((a, b) => a.Id == b.Id)
-                         .Select((a, b) => b);
+            var query = _workflowTraceRepository.Queryable()
+                          .LeftJoin<Workflow>((x, w) => x.WorkflowId == w.Id)
+                          .InnerJoin<SchedulingUser>((x, w, su) => x.HandlerId == su.UserId)
+                          .Where((x, w, su) => w.ModuleCode == WorkflowModuleConsts.OrderHandle && x.BusinessType == EBusinessType.Send && x.Status == EWorkflowStepStatus.Handled
+                                               && !string.IsNullOrEmpty(x.NextMainHandler) && x.NextMainHandler != OrgSeedData.CenterId)
+                          .Where((x, w, su) => x.CreationTime >= dto.StartTime.Value)
+                          .Where((x, w, su) => x.CreationTime <= dto.EndTime.Value)
+                          .GroupBy((x, w, su) => x.WorkflowId)
+                          .Having((x, w, su) => SqlFunc.AggregateCount(x.WorkflowId) > 1)
+                           .Select((x, w, su) => new { Id = x.WorkflowId, CreationTime = SqlFunc.AggregateMin(x.CreationTime) })
+                          .MergeTable()
+                          .LeftJoin<WorkflowTrace>((a, wt) => a.Id == wt.WorkflowId)
+                          .LeftJoin<Workflow>((a, wt, wf) => wt.WorkflowId == wf.Id)
+                          .InnerJoin<SchedulingUser>((a, wt, wf, su) => wt.HandlerId == su.UserId)
+                          .Where((a, wt, wf, su) => su.UserId == dto.UserId)
+                          .GroupBy((a, wt, wf, su) => wf.ExternalId)
+                          .Select((a, wt, wf, su) => new { Id = wf.ExternalId })
+                          .MergeTable()
+                          .LeftJoin<Order>((a, b) => a.Id == b.Id)
+                          .Select((a, b) => b);
             return query;
             return query;
         }
         }
-        var  query2 = _workflowTraceRepository.Queryable()
+        var query2 = _workflowTraceRepository.Queryable()
                 .InnerJoin<SchedulingUser>((x, su) => x.HandlerId == su.UserId)
                 .InnerJoin<SchedulingUser>((x, su) => x.HandlerId == su.UserId)
                 .Where((x, su) => x.ModuleCode == WorkflowModuleConsts.OrderHandle && x.BusinessType == EBusinessType.Send)
                 .Where((x, su) => x.ModuleCode == WorkflowModuleConsts.OrderHandle && x.BusinessType == EBusinessType.Send)
                 .Where((x, su) => x.CreationTime >= dto.StartTime.Value && x.CreationTime <= dto.EndTime.Value && su.UserId == dto.UserId)
                 .Where((x, su) => x.CreationTime >= dto.StartTime.Value && x.CreationTime <= dto.EndTime.Value && su.UserId == dto.UserId)
@@ -5732,34 +5733,34 @@ public class OrderApplication : IOrderApplication, IScopeDependency
                 .LeftJoin<Order>((a, b) => a.Id == b.Id)
                 .LeftJoin<Order>((a, b) => a.Id == b.Id)
                 .Select((a, b) => b);
                 .Select((a, b) => b);
         return query2;
         return query2;
-	}
-
-	public ISugarQueryable<Order> QuerySendOrderDetail_LZ(QuerySendOrderDetailRequest dto)
-	{
-		if (dto.TitleCode.ToUpper() == "RESENDORDERNUM")
-		{
-			var query = _workflowTraceRepository.Queryable()
-						  .LeftJoin<Workflow>((x, w) => x.WorkflowId == w.Id)
-						  .Where((x, w) => w.ModuleCode == WorkflowModuleConsts.OrderHandle && x.Status == EWorkflowStepStatus.Handled
-											   && !string.IsNullOrEmpty(x.NextMainHandler) && x.NextMainHandler != OrgSeedData.CenterId && (x.Name == "派单组" || x.Name == "班长审批"))
-						  .Where((x, w) => x.CreationTime >= dto.StartTime.Value)
-						  .Where((x, w) => x.CreationTime <= dto.EndTime.Value)
+    }
+
+    public ISugarQueryable<Order> QuerySendOrderDetail_LZ(QuerySendOrderDetailRequest dto)
+    {
+        if (dto.TitleCode.ToUpper() == "RESENDORDERNUM")
+        {
+            var query = _workflowTraceRepository.Queryable()
+                          .LeftJoin<Workflow>((x, w) => x.WorkflowId == w.Id)
+                          .Where((x, w) => w.ModuleCode == WorkflowModuleConsts.OrderHandle && x.Status == EWorkflowStepStatus.Handled
+                                               && !string.IsNullOrEmpty(x.NextMainHandler) && x.NextMainHandler != OrgSeedData.CenterId && (x.Name == "派单组" || x.Name == "班长审批"))
+                          .Where((x, w) => x.CreationTime >= dto.StartTime.Value)
+                          .Where((x, w) => x.CreationTime <= dto.EndTime.Value)
                           .WhereIF(dto.RoleName is "派单员", (x, w) => x.Name == "派单组")
                           .WhereIF(dto.RoleName is "派单员", (x, w) => x.Name == "派单组")
-						  .WhereIF(dto.RoleName is "中心班长", (x, w) => x.Name == "班长审批")
-						  .GroupBy((x, w) => x.WorkflowId)
-						  .Having((x, w) => SqlFunc.AggregateCount(x.WorkflowId) > 1)
-						   .Select((x, w) => new { Id = x.WorkflowId, CreationTime = SqlFunc.AggregateMin(x.CreationTime) })
-						  .MergeTable()
-						  .LeftJoin<WorkflowTrace>((a, wt) => a.Id == wt.WorkflowId)
-						  .LeftJoin<Workflow>((a, wt, wf) => wt.WorkflowId == wf.Id)
-						  .Where((a, wt, wf) => wt.HandlerId == dto.UserId)
-						  .GroupBy((a, wt, wf) => wf.ExternalId)
-						  .Select((a, wt, wf) => new { Id = wf.ExternalId })
-						  .MergeTable()
-						  .LeftJoin<Order>((a, b) => a.Id == b.Id)
-						  .Select((a, b) => b);
-			return query;
-		}
+                          .WhereIF(dto.RoleName is "中心班长", (x, w) => x.Name == "班长审批")
+                          .GroupBy((x, w) => x.WorkflowId)
+                          .Having((x, w) => SqlFunc.AggregateCount(x.WorkflowId) > 1)
+                           .Select((x, w) => new { Id = x.WorkflowId, CreationTime = SqlFunc.AggregateMin(x.CreationTime) })
+                          .MergeTable()
+                          .LeftJoin<WorkflowTrace>((a, wt) => a.Id == wt.WorkflowId)
+                          .LeftJoin<Workflow>((a, wt, wf) => wt.WorkflowId == wf.Id)
+                          .Where((a, wt, wf) => wt.HandlerId == dto.UserId)
+                          .GroupBy((a, wt, wf) => wf.ExternalId)
+                          .Select((a, wt, wf) => new { Id = wf.ExternalId })
+                          .MergeTable()
+                          .LeftJoin<Order>((a, b) => a.Id == b.Id)
+                          .Select((a, b) => b);
+            return query;
+        }
         var query2 = _workflowTraceRepository.Queryable()
         var query2 = _workflowTraceRepository.Queryable()
                 .Where(x => x.ModuleCode == WorkflowModuleConsts.OrderHandle && (x.Name == "派单组" || x.Name == "班长审批"))
                 .Where(x => x.ModuleCode == WorkflowModuleConsts.OrderHandle && (x.Name == "派单组" || x.Name == "班长审批"))
                 .Where(x => x.CreationTime >= dto.StartTime.Value && x.CreationTime <= dto.EndTime.Value && x.HandlerId == dto.UserId)
                 .Where(x => x.CreationTime >= dto.StartTime.Value && x.CreationTime <= dto.EndTime.Value && x.HandlerId == dto.UserId)
@@ -5772,15 +5773,15 @@ public class OrderApplication : IOrderApplication, IScopeDependency
                 .MergeTable()
                 .MergeTable()
                 .LeftJoin<Order>((a, b) => a.Id == b.Id)
                 .LeftJoin<Order>((a, b) => a.Id == b.Id)
                 .Select((a, b) => b);
                 .Select((a, b) => b);
-		return query2;
-	}
-
-	/// <summary>
-	/// 扭转信件统计
-	/// </summary>
-	/// <param name="dto"></param>
-	/// <returns></returns>
-	public ISugarQueryable<OrderVisitJudeStatisticsRep> OrderVisitJudeStatistics(OrderVisitJudeStatisticsReq dto)
+        return query2;
+    }
+
+    /// <summary>
+    /// 扭转信件统计
+    /// </summary>
+    /// <param name="dto"></param>
+    /// <returns></returns>
+    public ISugarQueryable<OrderVisitJudeStatisticsRep> OrderVisitJudeStatistics(OrderVisitJudeStatisticsReq dto)
     {
     {
         if (!dto.EndTime.HasValue)
         if (!dto.EndTime.HasValue)
         {
         {
@@ -6926,220 +6927,220 @@ public class OrderApplication : IOrderApplication, IScopeDependency
     }
     }
 
 
 
 
-	#region 自动延期
+    #region 自动延期
 
 
     /// <summary>
     /// <summary>
     /// 自动延期记录写入
     /// 自动延期记录写入
     /// </summary>
     /// </summary>
     /// <returns></returns>
     /// <returns></returns>
-	public async Task OrderDelayAutomatic()
-	{
-
-		var data = new List<OrderDelayAutomatic>();
-		var automatic = await _orderRepository.Queryable()
-		   .Where(x => x.Status < EOrderStatus.Filed && x.ExpiredTime <= DateTime.Now.AddHours(1) && x.ExpiredTime >= DateTime.Now)
-		   .Where(x => SqlFunc.Subqueryable<OrderDelay>().Where(od => od.OrderId == x.Id && od.DelayState == EDelayState.Examining).NotAny())
-		   .Where(x => SqlFunc.Subqueryable<OrderDelayAutomatic>().Where(oda => oda.OrderId == x.Id && oda.Status == EOrderDelayAutomaticStatus.Pending && oda.Type == EOrderDelayAutomaticType.Automatic).NotAny())
-		   .Select(x => new OrderDelayAutomatic
-		   {
-			   OrderId = x.Id,
-			   WorkflowId = x.WorkflowId,
-			   Title = x.Title,
-			   No = x.No,
-			   ExpiredTime = x.ExpiredTime,
-			   CenterToOrgTime =x.CenterToOrgTime,
-			   AcceptTypeCode =x.AcceptTypeCode,
-			   Type = EOrderDelayAutomaticType.Automatic
-		   })
-		   .ToListAsync();
-		if (automatic.Any())
-		{
-			data.AddRange(automatic);
-		}
-		var automaticSMS = await _orderRepository.Queryable()
-			.Where(x => x.Status < EOrderStatus.Filed && x.ExpiredTime <= DateTime.Now.AddHours(2) && x.ExpiredTime > DateTime.Now.AddHours(1) && x.ExpiredTime >= DateTime.Now)
-			.Where(x => SqlFunc.Subqueryable<OrderDelay>().Where(od => od.OrderId == x.Id && od.DelayState == EDelayState.Examining).NotAny())
-			.Where(x => SqlFunc.Subqueryable<OrderDelayAutomatic>().Where(oda => oda.OrderId == x.Id && oda.Status == EOrderDelayAutomaticStatus.Pending && oda.Type == EOrderDelayAutomaticType.Sms).NotAny())
-			.Select(x => new OrderDelayAutomatic
-			{
-				OrderId = x.Id,
-				WorkflowId = x.WorkflowId,
-				Title = x.Title,
-				No = x.No,
-				ExpiredTime = x.ExpiredTime,
-				CenterToOrgTime = x.CenterToOrgTime,
-				AcceptTypeCode = x.AcceptTypeCode,
-				Type = EOrderDelayAutomaticType.Sms
-			})
-			.ToListAsync();
-		if (automaticSMS.Any())
-		{
-			data.AddRange(automaticSMS);
-		}
-		if (data.Any())
-		{
-			await _orderDelayAutomaticRepository.AddRangeAsync(data);
-		}
-	}
-
-	/// <summary>
-	/// 自动延期处理
-	/// </summary>
-	/// <param name="type"></param>
-	/// <returns></returns>
-	public async Task OrderDelayAutomaticHandle(EOrderDelayAutomaticType type)
-	{
+    public async Task OrderDelayAutomatic()
+    {
+
+        var data = new List<OrderDelayAutomatic>();
+        var automatic = await _orderRepository.Queryable()
+           .Where(x => x.Status < EOrderStatus.Filed && x.ExpiredTime <= DateTime.Now.AddHours(1) && x.ExpiredTime >= DateTime.Now)
+           .Where(x => SqlFunc.Subqueryable<OrderDelay>().Where(od => od.OrderId == x.Id && od.DelayState == EDelayState.Examining).NotAny())
+           .Where(x => SqlFunc.Subqueryable<OrderDelayAutomatic>().Where(oda => oda.OrderId == x.Id && oda.Status == EOrderDelayAutomaticStatus.Pending && oda.Type == EOrderDelayAutomaticType.Automatic).NotAny())
+           .Select(x => new OrderDelayAutomatic
+           {
+               OrderId = x.Id,
+               WorkflowId = x.WorkflowId,
+               Title = x.Title,
+               No = x.No,
+               ExpiredTime = x.ExpiredTime,
+               CenterToOrgTime = x.CenterToOrgTime,
+               AcceptTypeCode = x.AcceptTypeCode,
+               Type = EOrderDelayAutomaticType.Automatic
+           })
+           .ToListAsync();
+        if (automatic.Any())
+        {
+            data.AddRange(automatic);
+        }
+        var automaticSMS = await _orderRepository.Queryable()
+            .Where(x => x.Status < EOrderStatus.Filed && x.ExpiredTime <= DateTime.Now.AddHours(2) && x.ExpiredTime > DateTime.Now.AddHours(1) && x.ExpiredTime >= DateTime.Now)
+            .Where(x => SqlFunc.Subqueryable<OrderDelay>().Where(od => od.OrderId == x.Id && od.DelayState == EDelayState.Examining).NotAny())
+            .Where(x => SqlFunc.Subqueryable<OrderDelayAutomatic>().Where(oda => oda.OrderId == x.Id && oda.Status == EOrderDelayAutomaticStatus.Pending && oda.Type == EOrderDelayAutomaticType.Sms).NotAny())
+            .Select(x => new OrderDelayAutomatic
+            {
+                OrderId = x.Id,
+                WorkflowId = x.WorkflowId,
+                Title = x.Title,
+                No = x.No,
+                ExpiredTime = x.ExpiredTime,
+                CenterToOrgTime = x.CenterToOrgTime,
+                AcceptTypeCode = x.AcceptTypeCode,
+                Type = EOrderDelayAutomaticType.Sms
+            })
+            .ToListAsync();
+        if (automaticSMS.Any())
+        {
+            data.AddRange(automaticSMS);
+        }
+        if (data.Any())
+        {
+            await _orderDelayAutomaticRepository.AddRangeAsync(data);
+        }
+    }
+
+    /// <summary>
+    /// 自动延期处理
+    /// </summary>
+    /// <param name="type"></param>
+    /// <returns></returns>
+    public async Task OrderDelayAutomaticHandle(EOrderDelayAutomaticType type)
+    {
         var copy = new List<OrderDelayAutomatic>();
         var copy = new List<OrderDelayAutomatic>();
-		var tasks = await _orderDelayAutomaticRepository.Queryable()
-			.Where(x => x.Status == EOrderDelayAutomaticStatus.Pending && x.Type == type)
-			.ToListAsync();
-		foreach (var task in tasks)
+        var tasks = await _orderDelayAutomaticRepository.Queryable()
+            .Where(x => x.Status == EOrderDelayAutomaticStatus.Pending && x.Type == type)
+            .ToListAsync();
+        foreach (var task in tasks)
         {
         {
             task.Status = EOrderDelayAutomaticStatus.BeingProcessed;
             task.Status = EOrderDelayAutomaticStatus.BeingProcessed;
-            var row =  await _orderDelayAutomaticRepository.Updateable(task).ExecuteCommandWithOptLockAsync();
+            var row = await _orderDelayAutomaticRepository.Updateable(task).ExecuteCommandWithOptLockAsync();
             if (row > 0)
             if (row > 0)
             {
             {
                 copy.Add(task);
                 copy.Add(task);
-			}
-		}
-		if (type == EOrderDelayAutomaticType.Sms)
-		{
-			if (copy.Any())
-			{
-				foreach (var item in copy)
-				{
-					var workflow = await _workflowDomainService.GetWorkflowAsync(item.WorkflowId, withSteps: true);
-					var steps = workflow.Steps.Where(x => x.Status == EWorkflowStepStatus.WaitForAccept || x.Status == EWorkflowStepStatus.WaitForHandle).ToList();
-					if (steps.Any())
-					{
-						foreach (var step in steps)
-						{
-							var setting = step.HandlerOrgId == OrgSeedData.CenterId ? SettingConstants.AutomaticDelayCenterRoles : SettingConstants.AutomaticDelayDepartmentRoles;
-							var roleIds = _systemSettingCacheManager.GetSetting(setting)?.SettingValue;
-							if (step.HandlerOrgId == OrgSeedData.CenterId && string.IsNullOrEmpty(step.RoleId))
-							{
-								roleIds.Add(step.RoleId);
-							}
-							var userList = await _userRepository.Queryable().Where(x => x.OrgId == step.HandlerOrgId && x.Roles.Any(r => roleIds.Contains(r.Name))).ToListAsync();
-							foreach (var user in userList)
-							{
-								if (!string.IsNullOrEmpty(user.PhoneNo))
-								{
-									//发送短信
-									var messageDto = new Share.Dtos.Push.MessageDto
-									{
-										PushBusiness = EPushBusiness.AutomaticDelay,
-										ExternalId = item.Id,
-										OrderId = item.Id,
-										PushPlatform = EPushPlatform.Sms,
-										Remark = item.Title,
-										Name = user.Name,
-										TemplateCode = "1015",
-										Params = new List<string>() { item.No },
-										TelNumber = user.PhoneNo,
-									};
-									await _mediator.Publish(new PushMessageNotify(messageDto));
-								}
-							}
-						}
-					}
-					await _orderDelayAutomaticRepository.Updateable().SetColumns(x=>x.Status == EOrderDelayAutomaticStatus.Processed).Where(x=>x.Id == item.Id).ExecuteCommandAsync();
-				}
-			}
-		}
-		if (type == EOrderDelayAutomaticType.Automatic)
-		{
-			if (copy.Any())
-			{
-				foreach (var item in copy)
-				{
-					var delayAny = await _orderDelayRepository.Queryable().Where(x => x.OrderId == item.OrderId && x.DelayState == EDelayState.Examining).AnyAsync();
-					if (!delayAny)
-					{
-						var delays = await _orderDelayRepository.Queryable().Where(x => x.OrderId == item.OrderId && x.AutomaticDelayNum > 0).ToListAsync();
-						var delay = new OrderDelay();
-						if (delays.Any())
-						{
-							delay = delays.First();
-							var startTime = DateTime.Now;
-							if (item.CenterToOrgTime.HasValue)
-							{
-								startTime = item.CenterToOrgTime.Value;
-							}
-							var beforeDelay = DateTime.Now;
-							if (!_appOptions.Value.IsYiBin)
-							{
-								beforeDelay = item.ExpiredTime.Value;
-							}
-							delay.AfterDelay = (await _expireTime
-								.CalcEndTime(beforeDelay, startTime, delay.DelayUnit, delay.DelayNum, item.AcceptTypeCode))?.EndTime; //todo
-							await _orderDelayRepository.Updateable().SetColumns(x => new OrderDelay() { AutomaticDelayNum = x.AutomaticDelayNum + 1, ApplyDelayTime = DateTime.Now, AfterDelay = delay.AfterDelay })
-								.Where(x => x.Id == delay.Id).ExecuteCommandAsync();
-						}
-						else
-						{
-							delay.OrderId = item.OrderId;
-							delay.EmployeeId = "";
-							delay.EmployeeName = "系统自动延期";
-							delay.ApplyOrgName = OrgSeedData.CenterName;
-							delay.ApplyOrgCode = OrgSeedData.CenterId;
-							delay.DelayApplyType = EDelayApplyType.LocalApply;
-							delay.BeforeDelay = item.ExpiredTime;
-							delay.DelayState = EDelayState.Pass;
-							delay.DelayReason = "系统自动延期";
-							delay.ApplyDelayTime = DateTime.Now;
-							delay.No = item.No;
-							delay.AutomaticDelayNum = 1;
-							delay.DelayNum = 1;
-							delay.DelayUnit = Share.Enums.Settings.ETimeType.WorkDay;
-							delay.IsProDelay = false;
-							delay.CreatorOrgId = OrgSeedData.CenterId;
-							delay.CreatorOrgName = OrgSeedData.CenterName;
-							delay.CreatorName = "系统自动延期";
-							var startTime = DateTime.Now;
-							if (item.CenterToOrgTime.HasValue)
-							{
-								startTime = item.CenterToOrgTime.Value;
-							}
-							if (delay.BeforeDelay != null)
-							{
-								delay.AfterDelay = (await _expireTime
-									.CalcEndTime(delay.BeforeDelay.Value, startTime, delay.DelayUnit, delay.DelayNum, item.AcceptTypeCode))?.EndTime; //todo
-							}
-							await _orderDelayRepository.AddAsync(delay, false);
-						}
-						//处理工单延期
-						await DelayOrderExpiredTimeAsync(item.OrderId, delay.DelayNum, delay.DelayUnit, delay.IsProDelay, default);
-					}
-					await _orderDelayAutomaticRepository.Updateable().SetColumns(x => x.Status == EOrderDelayAutomaticStatus.Processed).Where(x => x.Id == item.Id).ExecuteCommandAsync();
-				}
-			}
-		}
-	}
-
-	/// <summary>
-	/// 批量发送短信
-	/// </summary>
-	/// <param name="dto"></param>
-	/// <param name="cancellationToken"></param>
-	/// <returns></returns>
-	public async Task SendLeaderSMS(PublishLeaderSMSDto dto, CancellationToken cancellationToken)
-	{
-		//发送短信
-		var messageDto = new Share.Dtos.Push.MessageDto
-		{
-			PushBusiness = EPushBusiness.OrderSend,
-			ExternalId = dto.OrderId,
-			OrderId = dto.OrderId,
-			PushPlatform = EPushPlatform.Sms,
-			Remark = string.Empty,
-			Name = dto.Name,
-			TemplateCode = "1014",
-			Params = new(),
-			TelNumber = dto.TelNumber,
-		};
-		await _mediator.Publish(new PushMessageNotify(messageDto), cancellationToken);
-	}
-	#endregion
-	#endregion
+            }
+        }
+        if (type == EOrderDelayAutomaticType.Sms)
+        {
+            if (copy.Any())
+            {
+                foreach (var item in copy)
+                {
+                    var workflow = await _workflowDomainService.GetWorkflowAsync(item.WorkflowId, withSteps: true);
+                    var steps = workflow.Steps.Where(x => x.Status == EWorkflowStepStatus.WaitForAccept || x.Status == EWorkflowStepStatus.WaitForHandle).ToList();
+                    if (steps.Any())
+                    {
+                        foreach (var step in steps)
+                        {
+                            var setting = step.HandlerOrgId == OrgSeedData.CenterId ? SettingConstants.AutomaticDelayCenterRoles : SettingConstants.AutomaticDelayDepartmentRoles;
+                            var roleIds = _systemSettingCacheManager.GetSetting(setting)?.SettingValue;
+                            if (step.HandlerOrgId == OrgSeedData.CenterId && string.IsNullOrEmpty(step.RoleId))
+                            {
+                                roleIds.Add(step.RoleId);
+                            }
+                            var userList = await _userRepository.Queryable().Where(x => x.OrgId == step.HandlerOrgId && x.Roles.Any(r => roleIds.Contains(r.Name))).ToListAsync();
+                            foreach (var user in userList)
+                            {
+                                if (!string.IsNullOrEmpty(user.PhoneNo))
+                                {
+                                    //发送短信
+                                    var messageDto = new Share.Dtos.Push.MessageDto
+                                    {
+                                        PushBusiness = EPushBusiness.AutomaticDelay,
+                                        ExternalId = item.Id,
+                                        OrderId = item.Id,
+                                        PushPlatform = EPushPlatform.Sms,
+                                        Remark = item.Title,
+                                        Name = user.Name,
+                                        TemplateCode = "1015",
+                                        Params = new List<string>() { item.No },
+                                        TelNumber = user.PhoneNo,
+                                    };
+                                    await _mediator.Publish(new PushMessageNotify(messageDto));
+                                }
+                            }
+                        }
+                    }
+                    await _orderDelayAutomaticRepository.Updateable().SetColumns(x => x.Status == EOrderDelayAutomaticStatus.Processed).Where(x => x.Id == item.Id).ExecuteCommandAsync();
+                }
+            }
+        }
+        if (type == EOrderDelayAutomaticType.Automatic)
+        {
+            if (copy.Any())
+            {
+                foreach (var item in copy)
+                {
+                    var delayAny = await _orderDelayRepository.Queryable().Where(x => x.OrderId == item.OrderId && x.DelayState == EDelayState.Examining).AnyAsync();
+                    if (!delayAny)
+                    {
+                        var delays = await _orderDelayRepository.Queryable().Where(x => x.OrderId == item.OrderId && x.AutomaticDelayNum > 0).ToListAsync();
+                        var delay = new OrderDelay();
+                        if (delays.Any())
+                        {
+                            delay = delays.First();
+                            var startTime = DateTime.Now;
+                            if (item.CenterToOrgTime.HasValue)
+                            {
+                                startTime = item.CenterToOrgTime.Value;
+                            }
+                            var beforeDelay = DateTime.Now;
+                            if (!_appOptions.Value.IsYiBin)
+                            {
+                                beforeDelay = item.ExpiredTime.Value;
+                            }
+                            delay.AfterDelay = (await _expireTime
+                                .CalcEndTime(beforeDelay, startTime, delay.DelayUnit, delay.DelayNum, item.AcceptTypeCode))?.EndTime; //todo
+                            await _orderDelayRepository.Updateable().SetColumns(x => new OrderDelay() { AutomaticDelayNum = x.AutomaticDelayNum + 1, ApplyDelayTime = DateTime.Now, AfterDelay = delay.AfterDelay })
+                                .Where(x => x.Id == delay.Id).ExecuteCommandAsync();
+                        }
+                        else
+                        {
+                            delay.OrderId = item.OrderId;
+                            delay.EmployeeId = "";
+                            delay.EmployeeName = "系统自动延期";
+                            delay.ApplyOrgName = OrgSeedData.CenterName;
+                            delay.ApplyOrgCode = OrgSeedData.CenterId;
+                            delay.DelayApplyType = EDelayApplyType.LocalApply;
+                            delay.BeforeDelay = item.ExpiredTime;
+                            delay.DelayState = EDelayState.Pass;
+                            delay.DelayReason = "系统自动延期";
+                            delay.ApplyDelayTime = DateTime.Now;
+                            delay.No = item.No;
+                            delay.AutomaticDelayNum = 1;
+                            delay.DelayNum = 1;
+                            delay.DelayUnit = Share.Enums.Settings.ETimeType.WorkDay;
+                            delay.IsProDelay = false;
+                            delay.CreatorOrgId = OrgSeedData.CenterId;
+                            delay.CreatorOrgName = OrgSeedData.CenterName;
+                            delay.CreatorName = "系统自动延期";
+                            var startTime = DateTime.Now;
+                            if (item.CenterToOrgTime.HasValue)
+                            {
+                                startTime = item.CenterToOrgTime.Value;
+                            }
+                            if (delay.BeforeDelay != null)
+                            {
+                                delay.AfterDelay = (await _expireTime
+                                    .CalcEndTime(delay.BeforeDelay.Value, startTime, delay.DelayUnit, delay.DelayNum, item.AcceptTypeCode))?.EndTime; //todo
+                            }
+                            await _orderDelayRepository.AddAsync(delay, false);
+                        }
+                        //处理工单延期
+                        await DelayOrderExpiredTimeAsync(item.OrderId, delay.DelayNum, delay.DelayUnit, delay.IsProDelay, default);
+                    }
+                    await _orderDelayAutomaticRepository.Updateable().SetColumns(x => x.Status == EOrderDelayAutomaticStatus.Processed).Where(x => x.Id == item.Id).ExecuteCommandAsync();
+                }
+            }
+        }
+    }
+
+    /// <summary>
+    /// 批量发送短信
+    /// </summary>
+    /// <param name="dto"></param>
+    /// <param name="cancellationToken"></param>
+    /// <returns></returns>
+    public async Task SendLeaderSMS(PublishLeaderSMSDto dto, CancellationToken cancellationToken)
+    {
+        //发送短信
+        var messageDto = new Share.Dtos.Push.MessageDto
+        {
+            PushBusiness = EPushBusiness.OrderSend,
+            ExternalId = dto.OrderId,
+            OrderId = dto.OrderId,
+            PushPlatform = EPushPlatform.Sms,
+            Remark = string.Empty,
+            Name = dto.Name,
+            TemplateCode = "1014",
+            Params = new(),
+            TelNumber = dto.TelNumber,
+        };
+        await _mediator.Publish(new PushMessageNotify(messageDto), cancellationToken);
+    }
+    #endregion
+    #endregion
 }
 }

+ 2 - 1
src/Hotline.Application/OrderApp/OrderSecondaryHandlingApplication.cs

@@ -336,7 +336,8 @@ namespace Hotline.Application.OrderApp
                 .WhereIF(!string.IsNullOrEmpty(dto.Keyword), x => x.Order.Title.Contains(dto.Keyword!) || x.Order.No.Contains(dto.Keyword!))
                 .WhereIF(!string.IsNullOrEmpty(dto.Keyword), x => x.Order.Title.Contains(dto.Keyword!) || x.Order.No.Contains(dto.Keyword!))
                 .WhereIF(!string.IsNullOrEmpty(dto.No), x => x.Order.No.Contains(dto.No!))
                 .WhereIF(!string.IsNullOrEmpty(dto.No), x => x.Order.No.Contains(dto.No!))
                 .WhereIF(!string.IsNullOrEmpty(dto.Channel), x => x.Order.SourceChannelCode == dto.Channel)              //来源渠道
                 .WhereIF(!string.IsNullOrEmpty(dto.Channel), x => x.Order.SourceChannelCode == dto.Channel)              //来源渠道
-                .WhereIF(dto.SendBack.HasValue, x => x.SendBackNum == dto.SendBack!)                                     //重提办理
+                .WhereIF(dto.SendBack.HasValue && dto.SendBack == 1, x => x.SendBackNum == 1)                            //重提办理
+                .WhereIF(dto.SendBack.HasValue && dto.SendBack != 1, x => x.SendBackNum == null)                            //重提办理
                 .WhereIF(!string.IsNullOrEmpty(dto.Title), x => x.Order.Title.Contains(dto.Title!))                      //工单编号
                 .WhereIF(!string.IsNullOrEmpty(dto.Title), x => x.Order.Title.Contains(dto.Title!))                      //工单编号
                 .WhereIF(!string.IsNullOrEmpty(dto.ApplyName), x => x.CreatorName.Contains(dto.ApplyName))               //申请人
                 .WhereIF(!string.IsNullOrEmpty(dto.ApplyName), x => x.CreatorName.Contains(dto.ApplyName))               //申请人
                 .WhereIF(!string.IsNullOrEmpty(dto.ApplyOrgName), x => x.ApplyOrgName.Contains(dto.ApplyOrgName))        //申请部门
                 .WhereIF(!string.IsNullOrEmpty(dto.ApplyOrgName), x => x.ApplyOrgName.Contains(dto.ApplyOrgName))        //申请部门

+ 2 - 3
src/Hotline.Application/OrderApp/OrderSendBackAuditApplication.cs

@@ -23,7 +23,6 @@ namespace Hotline.Application.OrderApp
         {
         {
             return _orderSendBackAuditRepository.Queryable()
             return _orderSendBackAuditRepository.Queryable()
                 .Includes(x => x.Order)
                 .Includes(x => x.Order)
-                .Includes(x => x.SendBackData)
                 .WhereIF(!string.IsNullOrEmpty(dto.Keyword),
                 .WhereIF(!string.IsNullOrEmpty(dto.Keyword),
                     x => x.Order.Title.Contains(dto.Keyword!) || x.Order.No.Contains(dto.Keyword!))
                     x => x.Order.Title.Contains(dto.Keyword!) || x.Order.No.Contains(dto.Keyword!))
                 .WhereIF(!string.IsNullOrEmpty(dto.Title), x => x.Order.Title.Contains(dto.Title!))
                 .WhereIF(!string.IsNullOrEmpty(dto.Title), x => x.Order.Title.Contains(dto.Title!))
@@ -40,8 +39,8 @@ namespace Hotline.Application.OrderApp
                 .WhereIF(!string.IsNullOrEmpty(dto.Content), x => x.Order.Content.Contains(dto.Content))                                                //受理内容 
                 .WhereIF(!string.IsNullOrEmpty(dto.Content), x => x.Order.Content.Contains(dto.Content))                                                //受理内容 
                 .WhereIF(!string.IsNullOrEmpty(dto.ApplyName), x => x.CreatorName.Contains(dto.ApplyName))                                              //申请人 
                 .WhereIF(!string.IsNullOrEmpty(dto.ApplyName), x => x.CreatorName.Contains(dto.ApplyName))                                              //申请人 
                 .WhereIF(!string.IsNullOrEmpty(dto.ApplyOrgName), x => x.ApplyOrgName.Contains(dto.ApplyOrgName))                                       //申请部门 
                 .WhereIF(!string.IsNullOrEmpty(dto.ApplyOrgName), x => x.ApplyOrgName.Contains(dto.ApplyOrgName))                                       //申请部门 
-                .WhereIF(!string.IsNullOrEmpty(dto.Opinion), x => x.SendBackData.Opinion.Contains(dto.Opinion))
-                .WhereIF(!string.IsNullOrEmpty(dto.ApplyOrgName), x => x.ApplyOrgName == dto.ApplyOrgName)
+                .WhereIF(!string.IsNullOrEmpty(dto.Opinion), x => SqlFunc.JsonField(x.SendBackData, "Opinion").Contains(dto.Opinion))          //申请理由
+
                 .WhereIF(dto.DataScope is 1, x => x.CreatorId == _sessionContext.RequiredUserId)
                 .WhereIF(dto.DataScope is 1, x => x.CreatorId == _sessionContext.RequiredUserId)
                 .WhereIF(dto.StartTime.HasValue, x => x.CreationTime >= dto.StartTime)
                 .WhereIF(dto.StartTime.HasValue, x => x.CreationTime >= dto.StartTime)
                 .WhereIF(dto.EndTime.HasValue, x => x.CreationTime <= dto.EndTime)
                 .WhereIF(dto.EndTime.HasValue, x => x.CreationTime <= dto.EndTime)

+ 1 - 0
src/Hotline.Share/Dtos/Order/QueryOrderDto.cs

@@ -134,6 +134,7 @@ namespace Hotline.Share.Dtos.Order
         /// 当前办理节点(√)(单选)
         /// 当前办理节点(√)(单选)
         /// </summary>
         /// </summary>
         public string? CurrentStepCode { get; set; }
         public string? CurrentStepCode { get; set; }
+        public string? CurrentStepName { get; set; }
         /// <summary>
         /// <summary>
         /// 办结时间(√)
         /// 办结时间(√)
         /// </summary>
         /// </summary>

+ 1 - 1
src/Hotline.Share/Dtos/Quality/QualityDto.cs

@@ -310,7 +310,7 @@ namespace Hotline.Share.Dtos.Quality
         /// <summary>
         /// <summary>
         /// 质检时间
         /// 质检时间
         /// </summary>
         /// </summary>
-        public DateTime? QualityTimeStart { get; set; }
+        public DateTime? QualityTimeStar { get; set; }
         public DateTime? QualityTimeEnd { get; set; }
         public DateTime? QualityTimeEnd { get; set; }
     }
     }