xf 1 year ago
parent
commit
b96267490c
1 changed files with 174 additions and 158 deletions
  1. 174 158
      src/Hotline.Api/Controllers/OrderController.cs

+ 174 - 158
src/Hotline.Api/Controllers/OrderController.cs

@@ -97,7 +97,7 @@ public class OrderController : BaseController
     private readonly ITypedCache<EnterpriseVo> _cacheResponse;
     private readonly IRepository<OrderSendBackAudit> _orderSendBackAuditRepository;
 
-	public OrderController(
+    public OrderController(
         IOrderDomainService orderDomainService,
         IOrderRepository orderRepository,
         IWorkflowApplication workflowApplication,
@@ -144,7 +144,7 @@ public class OrderController : BaseController
         ILogger<OrderController> logger,
         ITypedCache<EnterpriseVo> cacheResponse,
         IRepository<OrderSendBackAudit> orderSendBackAuditRepository
-		)
+        )
     {
         _orderDomainService = orderDomainService;
         _orderRepository = orderRepository;
@@ -193,7 +193,7 @@ public class OrderController : BaseController
         _cacheResponse = cacheResponse;
         _orderSendBackAuditRepository = orderSendBackAuditRepository;
 
-	}
+    }
 
     #region 工单发布
 
@@ -732,16 +732,17 @@ public class OrderController : BaseController
                         }, cancellationToken: HttpContext.RequestAborted);
 
                 //推门户
-                await _capPublisher.PublishAsync(Hotline.Share.Mq.EventNames.HotlineOrderVisitedWeb, new PublishVisitAllDto(){ 
-                     Id = visit.Id,
-                     Order = orderDto,
-                     OrderVisitDetails = _mapper.Map<List<VisitDetailDto>>(visit.OrderVisitDetails),
-                     VisitName = _sessionContext.UserName,
-                     VisitTime = visit.VisitTime,
-                     VisitType = visit.VisitType,
-                     VisitState=visit.VisitState,
-                     PublishTime = visit.PublishTime,
-                },cancellationToken:HttpContext.RequestAborted);
+                await _capPublisher.PublishAsync(Hotline.Share.Mq.EventNames.HotlineOrderVisitedWeb, new PublishVisitAllDto()
+                {
+                    Id = visit.Id,
+                    Order = orderDto,
+                    OrderVisitDetails = _mapper.Map<List<VisitDetailDto>>(visit.OrderVisitDetails),
+                    VisitName = _sessionContext.UserName,
+                    VisitTime = visit.VisitTime,
+                    VisitType = visit.VisitType,
+                    VisitState = visit.VisitState,
+                    PublishTime = visit.PublishTime,
+                }, cancellationToken: HttpContext.RequestAborted);
             }
 
             if (first != null)
@@ -1137,7 +1138,7 @@ public class OrderController : BaseController
             if (count >= int.Parse(setting?.SettingValue[0]))
                 throw UserFriendlyException.SameMessage("延期申请已超过系统预定设置,不能申请");
         }
-        
+
         var model = _mapper.Map<OrderDelay>(delaydto);
         model.EmployeeId = _sessionContext.RequiredUserId;
         model.EmployeeName = _sessionContext.UserName;
@@ -1150,7 +1151,7 @@ public class OrderController : BaseController
         if (model.BeforeDelay != null)
         {
             model.AfterDelay = _timeLimitDomainService
-                .CalcEndTime(model.BeforeDelay.Value, delaydto.DelayUnit, delaydto.DelayNum, false,order.AcceptTypeCode)?.EndTime; //todo
+                .CalcEndTime(model.BeforeDelay.Value, delaydto.DelayUnit, delaydto.DelayNum, false, order.AcceptTypeCode)?.EndTime; //todo
         }
 
         model.ApplyDelayTime = DateTime.Now;
@@ -1184,7 +1185,7 @@ public class OrderController : BaseController
     [HttpGet("delay")]
     public async Task<PagedDto<OrderDelayDto>> DelayList([FromQuery] DelayListDto dto)
     {
-        var (total, items) = await _orderDelayRepository.Queryable(workflowFilter:false)
+        var (total, items) = await _orderDelayRepository.Queryable(workflowFilter: false)
             .Includes(x => x.Order)
             .Includes(x => x.Workflow)
             .WhereIF(!string.IsNullOrEmpty(dto.Keyword),
@@ -1206,30 +1207,30 @@ public class OrderController : BaseController
     [HttpGet("wait_delay")]
     public async Task<PagedDto<OrderDelayDto>> WaitDelayList([FromQuery] DelayListDto dto)
     {
-	    var (total, items) = await _orderDelayRepository.Queryable()
-		    .Includes(x => x.Order)
-		    .Includes(x => x.Workflow)
-		    .WhereIF(!string.IsNullOrEmpty(dto.Keyword),
-			    d => d.Order.Title.Contains(dto.Keyword!) || d.Order.No.Contains(dto.Keyword!))
-		    .WhereIF(dto.IsApply == true, x => x.DelayState != EDelayState.Examining)
-		    .WhereIF(dto.IsApply == false, x => x.DelayState == EDelayState.Examining)
-		    .WhereIF(dto.DelayState != null, x => x.DelayState == dto.DelayState)
-		    .OrderByDescending(x => x.ApplyDelayTime)
-		    .ToPagedListAsync(dto.PageIndex, dto.PageSize, HttpContext.RequestAborted);
-
-	    return new PagedDto<OrderDelayDto>(total, _mapper.Map<IReadOnlyList<OrderDelayDto>>(items));
-    }
-
-	/// <summary>
-	/// 延期详情
-	/// </summary>
-	/// <param name="id"></param>
-	/// <returns></returns>
-	//[Permission(EPermission.DelayEntity)]
-	[HttpGet("delay/{id}")]
+        var (total, items) = await _orderDelayRepository.Queryable()
+            .Includes(x => x.Order)
+            .Includes(x => x.Workflow)
+            .WhereIF(!string.IsNullOrEmpty(dto.Keyword),
+                d => d.Order.Title.Contains(dto.Keyword!) || d.Order.No.Contains(dto.Keyword!))
+            .WhereIF(dto.IsApply == true, x => x.DelayState != EDelayState.Examining)
+            .WhereIF(dto.IsApply == false, x => x.DelayState == EDelayState.Examining)
+            .WhereIF(dto.DelayState != null, x => x.DelayState == dto.DelayState)
+            .OrderByDescending(x => x.ApplyDelayTime)
+            .ToPagedListAsync(dto.PageIndex, dto.PageSize, HttpContext.RequestAborted);
+
+        return new PagedDto<OrderDelayDto>(total, _mapper.Map<IReadOnlyList<OrderDelayDto>>(items));
+    }
+
+    /// <summary>
+    /// 延期详情
+    /// </summary>
+    /// <param name="id"></param>
+    /// <returns></returns>
+    //[Permission(EPermission.DelayEntity)]
+    [HttpGet("delay/{id}")]
     public async Task<OrderDelayDto> DelayEntity(string id)
     {
-        var model = await _orderDelayRepository.Queryable(workflowFilter:false)
+        var model = await _orderDelayRepository.Queryable(workflowFilter: false)
             .Includes(x => x.Order)
             .Includes(x => x.Workflow)
             .FirstAsync(x => x.Id == id);
@@ -1251,7 +1252,7 @@ public class OrderController : BaseController
     [HttpPost("delay/calc-endtime")]
     public async Task<TimeResult?> DelayCalcEndTime([FromBody] DelayCalcEndTimeDto dto)
     {
-        return _timeLimitDomainService.CalcEndTime(dto.BeginTime, dto.DelayUnit, dto.DelayNum, false,0);
+        return _timeLimitDomainService.CalcEndTime(dto.BeginTime, dto.DelayUnit, dto.DelayNum, false, 0);
     }
 
     /// <summary>
@@ -1340,7 +1341,7 @@ public class OrderController : BaseController
     [HttpGet("screen")]
     public async Task<PagedDto<OrderScreenListDto>> ScreenList([FromQuery] ScreenListDto dto)
     {
-        var query = _orderScreenRepository.Queryable(workflowFilter:false)
+        var query = _orderScreenRepository.Queryable(workflowFilter: false)
             .Includes(x => x.Order)
             .Includes(x => x.VisitDetail)
             .Includes(x => x.Visit, d => d.Order)
@@ -1350,20 +1351,20 @@ public class OrderController : BaseController
         if (dto.Status is EScreenStatus.Apply)
         {
             query.Where(x => (x.Status == EScreenStatus.Apply || x.Status == EScreenStatus.Approval)
-                            && ((SqlFunc.JsonArrayLength(x.Workflow.HandlerUsers) > 0 
-                            &&  SqlFunc.JsonListObjectAny(x.Workflow.HandlerUsers, "Key",_sessionContext.RequiredUserId)) 
-                            ||(SqlFunc.JsonArrayLength(x.Workflow.HandlerUsers)  == 0
-	                        && SqlFunc.JsonListObjectAny(x.Workflow.HandlerOrgs, "Key",
-		                        _sessionContext.RequiredOrgId))));
+                            && ((SqlFunc.JsonArrayLength(x.Workflow.HandlerUsers) > 0
+                            && SqlFunc.JsonListObjectAny(x.Workflow.HandlerUsers, "Key", _sessionContext.RequiredUserId))
+                            || (SqlFunc.JsonArrayLength(x.Workflow.HandlerUsers) == 0
+                            && SqlFunc.JsonListObjectAny(x.Workflow.HandlerOrgs, "Key",
+                                _sessionContext.RequiredOrgId))));
         }
         if (dto.Status.HasValue && dto.Status == EScreenStatus.MyHandle)
         {
             query.Where(x => (x.Status != EScreenStatus.Apply)
-							  && ((SqlFunc.JsonArrayLength(x.Workflow.HandlerUsers) > 0
-							       && SqlFunc.JsonListObjectAny(x.Workflow.HandlerUsers, "Key", _sessionContext.RequiredUserId))
-							      || (SqlFunc.JsonArrayLength(x.Workflow.HandlerUsers) == 0
-							          && SqlFunc.JsonListObjectAny(x.Workflow.HandlerOrgs, "Key",
-								          _sessionContext.RequiredOrgId))));
+                              && ((SqlFunc.JsonArrayLength(x.Workflow.HandlerUsers) > 0
+                                   && SqlFunc.JsonListObjectAny(x.Workflow.HandlerUsers, "Key", _sessionContext.RequiredUserId))
+                                  || (SqlFunc.JsonArrayLength(x.Workflow.HandlerUsers) == 0
+                                      && SqlFunc.JsonListObjectAny(x.Workflow.HandlerOrgs, "Key",
+                                          _sessionContext.RequiredOrgId))));
         }
         var (total, items) = await query
             //.WhereIF(dto.Status.HasValue && dto.Status == EScreenStatus.MyHandle,
@@ -1400,7 +1401,7 @@ public class OrderController : BaseController
         var visit = await _orderVisitRepository.GetAsync(dto.Data.VisitId, HttpContext.RequestAborted);
         setting = _systemSettingCacheManager.GetSetting(SettingConstants.ScreenApplyEndTime);
         var endTime = _timeLimitDomainService
-            .CalcEndTime(visit.VisitTime.Value, ETimeType.WorkDay, int.Parse(setting?.SettingValue[0]), false,0).EndTime;
+            .CalcEndTime(visit.VisitTime.Value, ETimeType.WorkDay, int.Parse(setting?.SettingValue[0]), false, 0).EndTime;
         if (DateTime.Now > endTime)
             throw UserFriendlyException.SameMessage("甄别申请时限已超过系统预定设置,不能申请");
 
@@ -1438,35 +1439,35 @@ public class OrderController : BaseController
     }
 
 
-	/// <summary>
-	/// 工单甄别修改后下一步流程
-	/// </summary>
-	[HttpPost("screen/initial_nextFlow")]
-	[LogFilter("开始工单甄别流程")]
-	public async Task InitialNextFlow([FromBody] ScreenNextFlowDto dto)
-	{
+    /// <summary>
+    /// 工单甄别修改后下一步流程
+    /// </summary>
+    [HttpPost("screen/initial_nextFlow")]
+    [LogFilter("开始工单甄别流程")]
+    public async Task InitialNextFlow([FromBody] ScreenNextFlowDto dto)
+    {
         var screen = await _orderScreenRepository.GetAsync(dto.Data.Id);
         _mapper.Map(dto.Data, screen);
-		if (dto.Data.Files.Any())
-			screen.FileJson = await _fileRepository.AddFileAsync(dto.Data.Files, screen.Id, "", HttpContext.RequestAborted);
-		await _orderScreenRepository.UpdateAsync(screen, HttpContext.RequestAborted);
-		try
-		{
+        if (dto.Data.Files.Any())
+            screen.FileJson = await _fileRepository.AddFileAsync(dto.Data.Files, screen.Id, "", HttpContext.RequestAborted);
+        await _orderScreenRepository.UpdateAsync(screen, HttpContext.RequestAborted);
+        try
+        {
             dto.NextWorkflow.WorkflowId = screen.WorkflowId;
-			await _workflowApplication.NextAsync(dto.NextWorkflow,
-					cancellationToken: HttpContext.RequestAborted);
-		}
-		catch (Exception e)
-		{
-			throw new UserFriendlyException($"工单甄别下一步流程失败!, {e.Message}", "工单甄别下一步流程失败");
-		}
-	}
-
-	/// <summary>
-	/// 查询工单甄别流程开启参数
-	/// </summary>
-	/// <returns></returns>
-	[HttpGet("screen/startflow")]
+            await _workflowApplication.NextAsync(dto.NextWorkflow,
+                    cancellationToken: HttpContext.RequestAborted);
+        }
+        catch (Exception e)
+        {
+            throw new UserFriendlyException($"工单甄别下一步流程失败!, {e.Message}", "工单甄别下一步流程失败");
+        }
+    }
+
+    /// <summary>
+    /// 查询工单甄别流程开启参数
+    /// </summary>
+    /// <returns></returns>
+    [HttpGet("screen/startflow")]
     public async Task<NextStepsDto> GetScreenFlowStartOptionsAsync()
     {
         //return await _workflowApplication.GetStartOptionsAsync(WorkflowModuleConsts.OrderScreen,
@@ -1510,15 +1511,15 @@ public class OrderController : BaseController
     [HttpGet("screen/{id}")]
     public async Task<OrderScreenListDto> ScreenEntity(string id)
     {
-        var model = await _orderScreenRepository.Queryable(workflowFilter:false)
-            .Includes(x=> x.Order)
+        var model = await _orderScreenRepository.Queryable(workflowFilter: false)
+            .Includes(x => x.Order)
             .Includes(x => x.Workflow)
             .Includes(x => x.Visit, d => d.Order)
             .FirstAsync(x => x.Id == id);
         var rspModel = _mapper.Map<OrderScreenListDto>(model);
         rspModel.IsCanHandle = model.Workflow.CanHandle(_sessionContext.RequiredUserId, _sessionContext.RequiredOrgId);
         rspModel.Handle = await _workflowDomainService.CheckCurrentIsStartStepAsync(rspModel.WorkflowId, _sessionContext.RequiredUserId, _sessionContext.RequiredOrgId, HttpContext.RequestAborted);
-		if (rspModel.FileJson != null && rspModel.FileJson.Any())
+        if (rspModel.FileJson != null && rspModel.FileJson.Any())
         {
             var ids = rspModel.FileJson.Select(x => x.Id).ToList();
             rspModel.Files = await _fileRepository.GetFilesAsync(ids, HttpContext.RequestAborted);
@@ -2343,27 +2344,41 @@ public class OrderController : BaseController
         var setting = _systemSettingCacheManager.GetSetting(SettingConstants.RepeatableEventNum);
         return count >= int.Parse(setting?.SettingValue[0] ?? "0");
     }
-	#endregion
+    #endregion
 
-	#region 工单待办
+    #region 工单待办
 
-	/// <summary>
-	/// 查询待办工单
-	/// </summary>
-	[HttpGet("waited")]
+    /// <summary>
+    /// 查询待办工单
+    /// </summary>
+    [HttpGet("waited")]
     public async Task<PagedDto<OrderDto>> QueryWaited([FromQuery] QueryOrderWaitedDto dto)
     {
-       var (total, items) = await _orderRepository.Queryable()
-            .Includes(d => d.Workflow, x => x.Steps)
+        var query = dto.IsHandled.HasValue && !dto.IsHandled.Value
+            ? _orderRepository.Queryable()
+            : _orderRepository.Queryable().Where(d =>
+                SqlFunc.JsonListObjectAny(d.Workflow.HandlerUsers, "Key", _sessionContext.RequiredUserId) ||
+                SqlFunc.JsonListObjectAny(d.Workflow.HandlerOrgs, "Key", _sessionContext.RequiredOrgId));
+
+        var (total, items) = await query
             .WhereIF(dto.IsProvince.HasValue, d => d.IsProvince == dto.IsProvince)
-            .WhereIF(dto.IsHandled.HasValue && dto.IsHandled.Value, d => d.Workflow.Steps.Any(x => x.Status == EWorkflowStepStatus.Handled))
-            .WhereIF(dto.IsHandled.HasValue && !dto.IsHandled.Value, d => d.Workflow.Steps.Any(x => x.Status != EWorkflowStepStatus.Handled))
             .WhereIF(!string.IsNullOrEmpty(dto.Keyword),
                 d => d.No.Contains(dto.Keyword) || d.Title.Contains(dto.Keyword))
             .OrderByDescending(d => d.StartTime)
             .ToPagedListAsync(dto, HttpContext.RequestAborted);
 
 
+        //var (total, items) = await _orderRepository.Queryable()
+        //     .Includes(d => d.Workflow, x => x.Steps)
+        //     .WhereIF(dto.IsProvince.HasValue, d => d.IsProvince == dto.IsProvince)
+        //     .WhereIF(dto.IsHandled.HasValue && dto.IsHandled.Value, d => d.Workflow.Steps.Any(x => x.Status == EWorkflowStepStatus.Handled))
+        //     .WhereIF(dto.IsHandled.HasValue && !dto.IsHandled.Value, d => d.Workflow.Steps.Any(x => x.Status != EWorkflowStepStatus.Handled))
+        //     .WhereIF(!string.IsNullOrEmpty(dto.Keyword),
+        //         d => d.No.Contains(dto.Keyword) || d.Title.Contains(dto.Keyword))
+        //     .OrderByDescending(d => d.StartTime)
+        //     .ToPagedListAsync(dto, HttpContext.RequestAborted);
+
+
         return new PagedDto<OrderDto>(total, _mapper.Map<IReadOnlyList<OrderDto>>(items));
     }
 
@@ -2394,18 +2409,18 @@ public class OrderController : BaseController
         return new PagedDto<OrderDto>(total, _mapper.Map<IReadOnlyList<OrderDto>>(items));
     }
 
-	#endregion
+    #endregion
 
-	#region 业务工单退回
+    #region 业务工单退回
 
-	/// <summary>
-	/// 工单退回退回(返回前一节点)
-	/// </summary>
-	[HttpPost("order_previous")]
-	public async Task Previous([FromBody] PreviousWorkflowDto dto)
-	{
-		var oneSendBack = bool.Parse(_systemSettingCacheManager.GetSetting(SettingConstants.OneOrgSendBack)?.SettingValue[0]);
-		var twoSendBack = bool.Parse(_systemSettingCacheManager.GetSetting(SettingConstants.TwoOrgSendBack)?.SettingValue[0]);
+    /// <summary>
+    /// 工单退回退回(返回前一节点)
+    /// </summary>
+    [HttpPost("order_previous")]
+    public async Task Previous([FromBody] PreviousWorkflowDto dto)
+    {
+        var oneSendBack = bool.Parse(_systemSettingCacheManager.GetSetting(SettingConstants.OneOrgSendBack)?.SettingValue[0]);
+        var twoSendBack = bool.Parse(_systemSettingCacheManager.GetSetting(SettingConstants.TwoOrgSendBack)?.SettingValue[0]);
         if (oneSendBack || twoSendBack)
         {
             var workflow =
@@ -2440,15 +2455,16 @@ public class OrderController : BaseController
                 await _orderSendBackAuditRepository.AddAsync(audit, HttpContext.RequestAborted);
             }
             //中心内部流转  不走审批流程
-            if (sendBackOrg.IsCenter &&  applyOrg.IsCenter)
+            if (sendBackOrg.IsCenter && applyOrg.IsCenter)
             {
-				await _workflowApplication.PreviousAsync(dto, HttpContext.RequestAborted);
-			}
+                await _workflowApplication.PreviousAsync(dto, HttpContext.RequestAborted);
+            }
         }
-        else {
-			await _workflowApplication.PreviousAsync(dto, HttpContext.RequestAborted);
-		}
-	}
+        else
+        {
+            await _workflowApplication.PreviousAsync(dto, HttpContext.RequestAborted);
+        }
+    }
 
     /// <summary>
     /// 工单业务退回审批
@@ -2456,52 +2472,52 @@ public class OrderController : BaseController
     /// <param name="dto"></param>
     /// <returns></returns>
 	[Permission(EPermission.OrderPreviousAudit)]
-	[HttpPost("order_previous_audit")]
-	public async Task Audit([FromBody] AuditSendBackDto dto)
-	{
-		if (dto.State == ESendBackAuditState.Refuse && string.IsNullOrEmpty(dto.AuditContent))
-			throw UserFriendlyException.SameMessage("退回拒绝,请填写审批拒绝原因");
-		//验证是否存在退回
-		var sendBack = await _orderSendBackAuditRepository.GetAsync(dto.Id, HttpContext.RequestAborted);
-		if (sendBack is null)
-			throw UserFriendlyException.SameMessage("无效退回");
-		if (sendBack.State != ESendBackAuditState.Apply)
-			throw UserFriendlyException.SameMessage("退回已审批,请勿重复审批");
-
-		_mapper.Map(dto, sendBack);
-		sendBack.AuditId = _sessionContext.UserId;
-		sendBack.AuditUser = _sessionContext.UserName;
-		sendBack.AuditTime = DateTime.Now;
-
-		//执行退回
-		if (sendBack.State ==  ESendBackAuditState.End)
-		{
-			await _workflowApplication.OrderPreviousAsync(sendBack.SendBackData,sendBack.WorkflowUserId, HttpContext.RequestAborted);
-		}
-		await _orderSendBackAuditRepository.UpdateAsync(sendBack, HttpContext.RequestAborted);
-	}
-    
+    [HttpPost("order_previous_audit")]
+    public async Task Audit([FromBody] AuditSendBackDto dto)
+    {
+        if (dto.State == ESendBackAuditState.Refuse && string.IsNullOrEmpty(dto.AuditContent))
+            throw UserFriendlyException.SameMessage("退回拒绝,请填写审批拒绝原因");
+        //验证是否存在退回
+        var sendBack = await _orderSendBackAuditRepository.GetAsync(dto.Id, HttpContext.RequestAborted);
+        if (sendBack is null)
+            throw UserFriendlyException.SameMessage("无效退回");
+        if (sendBack.State != ESendBackAuditState.Apply)
+            throw UserFriendlyException.SameMessage("退回已审批,请勿重复审批");
+
+        _mapper.Map(dto, sendBack);
+        sendBack.AuditId = _sessionContext.UserId;
+        sendBack.AuditUser = _sessionContext.UserName;
+        sendBack.AuditTime = DateTime.Now;
+
+        //执行退回
+        if (sendBack.State == ESendBackAuditState.End)
+        {
+            await _workflowApplication.OrderPreviousAsync(sendBack.SendBackData, sendBack.WorkflowUserId, HttpContext.RequestAborted);
+        }
+        await _orderSendBackAuditRepository.UpdateAsync(sendBack, HttpContext.RequestAborted);
+    }
+
     /// <summary>
     /// 工单业务退回审批列表
     /// </summary>
     /// <param name="dto"></param>
     /// <returns></returns>
-	[Permission(EPermission.OrderPreviousList)]
-	[HttpGet("order_previous_list")]
-	public async Task<PagedDto<SendBackDto>> AuditList([FromQuery] SendBackListDto dto)
-	{
-		var (total, items) = await _orderSendBackAuditRepository.Queryable()
-			.Includes(x => x.Order)
-			.WhereIF(!string.IsNullOrEmpty(dto.Keyword),
-				d => d.Order.Title.Contains(dto.Keyword!) || d.Order.No.Contains(dto.Keyword!))
-			.WhereIF(dto.CreationTimeStart.HasValue, d => d.CreationTime >= dto.CreationTimeStart)
-			.WhereIF(dto.CreationTimeEnd.HasValue, d => d.CreationTime <= dto.CreationTimeEnd)
-			.WhereIF(dto.State.HasValue, d => d.State == dto.State)
-			.OrderByDescending(x => x.CreationTime)
-			.ToPagedListAsync(dto.PageIndex, dto.PageSize, HttpContext.RequestAborted);
+    [Permission(EPermission.OrderPreviousList)]
+    [HttpGet("order_previous_list")]
+    public async Task<PagedDto<SendBackDto>> AuditList([FromQuery] SendBackListDto dto)
+    {
+        var (total, items) = await _orderSendBackAuditRepository.Queryable()
+            .Includes(x => x.Order)
+            .WhereIF(!string.IsNullOrEmpty(dto.Keyword),
+                d => d.Order.Title.Contains(dto.Keyword!) || d.Order.No.Contains(dto.Keyword!))
+            .WhereIF(dto.CreationTimeStart.HasValue, d => d.CreationTime >= dto.CreationTimeStart)
+            .WhereIF(dto.CreationTimeEnd.HasValue, d => d.CreationTime <= dto.CreationTimeEnd)
+            .WhereIF(dto.State.HasValue, d => d.State == dto.State)
+            .OrderByDescending(x => x.CreationTime)
+            .ToPagedListAsync(dto.PageIndex, dto.PageSize, HttpContext.RequestAborted);
 
-		return new PagedDto<SendBackDto>(total, _mapper.Map<IReadOnlyList<SendBackDto>>(items));
-	}
+        return new PagedDto<SendBackDto>(total, _mapper.Map<IReadOnlyList<SendBackDto>>(items));
+    }
 
     /// <summary>
     /// 退回详情
@@ -2511,21 +2527,21 @@ public class OrderController : BaseController
     [HttpGet("order_previous/{id}")]
     public async Task<OrderSendBackAudit> OrderSendBackEntity(string id)
     {
-	    return await _orderSendBackAuditRepository.Queryable()
-		    .Includes(x => x.Order)
-		    .FirstAsync(x => x.Id == id);
+        return await _orderSendBackAuditRepository.Queryable()
+            .Includes(x => x.Order)
+            .FirstAsync(x => x.Id == id);
     }
 
-	#endregion
+    #endregion
 
-	#region 省工单退回
+    #region 省工单退回
 
-	/// <summary>
-	/// 工单退回列表
-	/// </summary>
-	/// <param name="dto"></param>
-	/// <returns></returns>
-	[Permission(EPermission.SendBackOrderList)]
+    /// <summary>
+    /// 工单退回列表
+    /// </summary>
+    /// <param name="dto"></param>
+    /// <returns></returns>
+    [Permission(EPermission.SendBackOrderList)]
     [HttpGet("send_back")]
     public async Task<PagedDto<OrderSendBackDto>> UrgeList([FromQuery] OrderSendBackListDto dto)
     {