浏览代码

添加“高级筛选”

libin 1 周之前
父节点
当前提交
9fc3e4e206

+ 169 - 56
src/Hotline.Api/Controllers/OrderController.cs

@@ -9,7 +9,7 @@ using Hotline.Application.Quality;
 using Hotline.Application.Snapshot.Contracts;
 using Hotline.Application.Systems;
 using Hotline.Article;
-using Hotline.Authentications; 
+using Hotline.Authentications;
 using Hotline.Caching.Interfaces;
 using Hotline.CallCenter.Calls;
 using Hotline.Configurations;
@@ -3507,11 +3507,34 @@ public class OrderController : BaseController
     {
         var (total, items) = await _orderSuperviseRepository.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.SuperviseState > -1, x => x.State == dto.SuperviseState)
-            .WhereIF(dto.CreationTimeStart.HasValue, d => d.CreationTime >= dto.CreationTimeStart)
-            .WhereIF(dto.CreationTimeEnd.HasValue, d => d.CreationTime <= dto.CreationTimeEnd)
+            .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(dto.IsProvinceOrder.HasValue && dto.IsProvinceOrder == true, x => x.Order.IsProvince == true)   //是否省工单
+            .WhereIF(dto.IsProvinceOrder.HasValue && dto.IsProvinceOrder == false, x => x.Order.IsProvince == false)
+            .WhereIF(!string.IsNullOrEmpty(dto.Title), x => x.Order.Title.Contains(dto.Title))                       //工单标题
+            .WhereIF(!string.IsNullOrEmpty(dto.Channel), x => x.Order.SourceChannelCode == dto.Channel)              //来源渠道
+            .WhereIF(dto.Status.HasValue, x => x.Order.Status == dto.Status)                                         //工单状态
+            .WhereIF(!string.IsNullOrEmpty(dto.AcceptTypeCode), x => x.Order.AcceptTypeCode == dto.AcceptTypeCode)   //受理类型
+            .WhereIF(!string.IsNullOrEmpty(dto.Hotspot), x => x.Order.HotspotSpliceName != null && x.Order.HotspotSpliceName.Contains(dto.Hotspot)) //热点
+            .WhereIF(!string.IsNullOrEmpty(dto.AcceptorName), x => x.Order.AcceptorName == dto.AcceptorName!)        //受理人
+            .WhereIF(!string.IsNullOrEmpty(dto.CurrentHandleOrgName), x => x.Order.CurrentHandleOrgName.Contains(dto.CurrentHandleOrgName)) //接办部门
+            .WhereIF(dto.ExpiredTimeStart.HasValue, x => x.Order.ExpiredTime >= dto.ExpiredTimeStart)                //期满时间Start
+            .WhereIF(dto.ExpiredTimeEnd.HasValue, x => x.Order.ExpiredTime <= dto.ExpiredTimeEnd)                    //期满时间End
+            .WhereIF(dto.SuperviseTimeStart.HasValue, x => x.CreationTime >= dto.SuperviseTimeStart)                 //督办时间Start
+            .WhereIF(dto.SuperviseTimeEnd.HasValue, x => x.CreationTime <= dto.SuperviseTimeEnd)                     //督办时间End
+            .WhereIF(dto.ReplyLimitTimeStart.HasValue, x => x.ReplyLimitTime >= dto.ReplyLimitTimeStart)             //督办回复时限Start
+            .WhereIF(dto.ReplyLimitTimeEnd.HasValue, x => x.ReplyLimitTime <= dto.ReplyLimitTimeEnd)                 //督办回复时限End
+            .WhereIF(!string.IsNullOrEmpty(dto.CrUser), x => x.CrUser.Contains(dto.CrUser))                          //督办人
+            .WhereIF(!string.IsNullOrEmpty(dto.LaunchOrgName), x => x.LaunchOrgName.Contains(dto.LaunchOrgName))     //督办部门
+            .WhereIF(!string.IsNullOrEmpty(dto.ApplyContent), x => x.ApplyContent.Contains(dto.ApplyContent))        //督办意见
+            .WhereIF(dto.SuperviseState > -1, x => x.State == dto.SuperviseState)                                    //督办状态
+            .WhereIF(dto.CreationTimeStart.HasValue, x => x.Order.CreationTime >= dto.CreationTimeStart)             //受理时间Start
+            .WhereIF(dto.CreationTimeEnd.HasValue, x => x.Order.CreationTime <= dto.CreationTimeEnd)                 //受理时间End
+            .WhereIF(dto.ReplyTimeStart.HasValue, x => x.ReplyTime >= dto.ReplyTimeStart)                            //督办回复时间Start
+            .WhereIF(dto.ReplyTimeEnd.HasValue, x => x.ReplyTime <= dto.ReplyTimeEnd)                                //督办回复时间End
+            .WhereIF(!string.IsNullOrEmpty(dto.ReplyContent), x => x.ReplyContent.Contains(dto.ReplyContent))        //督办回复内容
+            .WhereIF(dto.SignTimeStart.HasValue, x => x.SignTime >= dto.SignTimeStart)                               //督办签收时间Start
+            .WhereIF(dto.SignTimeEnd.HasValue, x => x.SignTime <= dto.SignTimeEnd)                                   //督办签收时间End
             .Where(x => x.OrgId == _sessionContext.OrgId)
             .OrderByDescending(x => x.CreationTime)
             .ToPagedListAsync(dto.PageIndex, dto.PageSize, HttpContext.RequestAborted);
@@ -3879,22 +3902,38 @@ public class OrderController : BaseController
         //如果角色不为空,则说明催办的是角色,则根据部门和角色一起查
         var (total, items) = await _orderUrgeRepository.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.UrgeState > -1, d => d.State == dto.UrgeState)
-            .WhereIF(dto.CreationTimeStart.HasValue, d => d.CreationTime >= dto.CreationTimeStart)
-            .WhereIF(dto.CreationTimeEnd.HasValue, d => d.CreationTime <= dto.CreationTimeEnd)
-            .WhereIF(!string.IsNullOrEmpty(dto.OrgLevelOneName), d => d.Order.OrgLevelOneName.Contains(dto.OrgLevelOneName)) //一级部门
-            .WhereIF(!string.IsNullOrEmpty(dto.ActualHandleOrgName),
-                d => d.Order.ActualHandleOrgName.Contains(dto.ActualHandleOrgName)) //接办部门(综合查询模糊)
-            .WhereIF(!string.IsNullOrEmpty(dto.CurrentStepCode), d => d.Order.CurrentStepCode == dto.CurrentStepCode) //当前办理节点
+            .WhereIF(!string.IsNullOrEmpty(dto.Keyword), x => x.Order.Title.Contains(dto.Keyword!) || x.Order.No.Contains(dto.Keyword!))
+            .WhereIF(dto.UrgeState > -1, x => x.State == dto.UrgeState)
             .WhereIF(_sessionContext.OrgIsCenter == false, d =>
                 (SqlFunc.IsNullOrEmpty(d.RoleId) == true && d.OrgId.StartsWith(_sessionContext.RequiredOrgId)) ||
                 (SqlFunc.IsNullOrEmpty(d.RoleId) == false && d.OrgId.StartsWith(_sessionContext.RequiredOrgId) &&
                  _sessionContext.Roles.Contains(d.RoleId))
             )
+            .WhereIF(!string.IsNullOrEmpty(dto.ActualHandleOrgName), x => x.Order.ActualHandleOrgName.Contains(dto.ActualHandleOrgName)) //接办部门(综合查询模糊)
+            .WhereIF(!string.IsNullOrEmpty(dto.OrgLevelOneName), x => x.Order.OrgLevelOneName.Contains(dto.OrgLevelOneName)) //一级部门
+            .WhereIF(!string.IsNullOrEmpty(dto.CurrentStepCode), x => x.Order.CurrentStepCode == dto.CurrentStepCode) //当前办理节点
+            .WhereIF(!string.IsNullOrEmpty(dto.No), x => x.Order.No.Contains(dto.No))                                //工单编号
+            .WhereIF(dto.IsProvinceOrder.HasValue && dto.IsProvinceOrder == true, x => x.Order.IsProvince == true)   //是否省工单
+            .WhereIF(dto.IsProvinceOrder.HasValue && dto.IsProvinceOrder == false, x => x.Order.IsProvince == false)
+            .WhereIF(!string.IsNullOrEmpty(dto.Channel), x => x.Order.SourceChannelCode == dto.Channel)              //来源渠道
+            .WhereIF(dto.ExpiredTimeStart.HasValue, x => x.Order.ExpiredTime >= dto.ExpiredTimeStart)                //期满时间Start
+            .WhereIF(dto.ExpiredTimeEnd.HasValue, x => x.Order.ExpiredTime <= dto.ExpiredTimeEnd)                    //期满时间End
+            .WhereIF(dto.CreationTimeStart.HasValue, x => x.Order.CreationTime >= dto.CreationTimeStart)             //受理时间Start
+            .WhereIF(dto.CreationTimeEnd.HasValue, x => x.Order.CreationTime <= dto.CreationTimeEnd)                 //受理时间End
+            .WhereIF(dto.Status.HasValue, x => x.Order.Status == dto.Status)                                         //工单状态
+            .WhereIF(!string.IsNullOrEmpty(dto.Title), x => x.Order.Title.Contains(dto.Title))                       //工单标题
+            .WhereIF(!string.IsNullOrEmpty(dto.CurrentHandleOrgName), x => x.Order.CurrentHandleOrgName.Contains(dto.CurrentHandleOrgName)) //接办部门
+            .WhereIF(dto.CurrentHandleTimeStart.HasValue, x => x.Order.CurrentHandleTime >= dto.CurrentHandleTimeStart)//接办时间Start
+            .WhereIF(dto.CurrentHandleTimeEnd.HasValue, x => x.Order.CurrentHandleTime <= dto.CurrentHandleTimeEnd)    //接办时间End
+            .WhereIF(!string.IsNullOrEmpty(dto.Hotspot), x => x.Order.HotspotSpliceName != null && x.Order.HotspotSpliceName.Contains(dto.Hotspot)) //热点
+            .WhereIF(!string.IsNullOrEmpty(dto.AcceptTypeCode), x => x.Order.AcceptTypeCode == dto.AcceptTypeCode)   //受理类型
+            .WhereIF(!string.IsNullOrEmpty(dto.CrUser), x => x.CrUser.Contains(dto.CrUser))                          //催办人
+            .WhereIF(!string.IsNullOrEmpty(dto.CreatorOrgName), x => x.CreatorOrgName.Contains(dto.CreatorOrgName))  //催办部门
+            .WhereIF(dto.CrTimeStart.HasValue, x => x.CreationTime >= dto.CrTimeStart)                               //催办时间Start
+            .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.ApplyContent), x => x.ApplyContent.Contains(dto.ApplyContent))        //催办内容
 
-            //   .WhereIF(_sessionContext.RequiredOrgId!="001", x => x.OrgId == _sessionContext.OrgId)
             .OrderByDescending(x => x.CreationTime)
             .ToPagedListAsync(dto.PageIndex, dto.PageSize, HttpContext.RequestAborted);
 
@@ -3911,12 +3950,31 @@ public class OrderController : BaseController
     {
         var (total, items) = await _orderUrgeRepository.Queryable()
             .Includes(x => x.Order)
-            .WhereIF(!string.IsNullOrEmpty(dto.Keyword),
-                d => d.Order.Title.Contains(dto.Keyword!) || d.Order.No.Contains(dto.Keyword!))
+            .WhereIF(!string.IsNullOrEmpty(dto.Keyword), x => x.Order.Title.Contains(dto.Keyword!) || x.Order.No.Contains(dto.Keyword!))
             .WhereIF(dto.UrgeState > -1, x => x.State == dto.UrgeState)
-            .WhereIF(dto.CreationTimeStart.HasValue, d => d.CreationTime >= dto.CreationTimeStart)
-            .WhereIF(dto.CreationTimeEnd.HasValue, d => d.CreationTime <= dto.CreationTimeEnd)
             .WhereIF(_sessionContext.OrgIsCenter == false, x => x.OrgId.StartsWith(_sessionContext.OrgId))
+            .WhereIF(!string.IsNullOrEmpty(dto.No), x => x.Order.No.Contains(dto.No))                                //工单编号
+            .WhereIF(dto.IsProvinceOrder.HasValue && dto.IsProvinceOrder == true, x => x.Order.IsProvince == true)   //是否省工单
+            .WhereIF(dto.IsProvinceOrder.HasValue && dto.IsProvinceOrder == false, x => x.Order.IsProvince == false)
+            .WhereIF(!string.IsNullOrEmpty(dto.Channel), x => x.Order.SourceChannelCode == dto.Channel)              //来源渠道
+            .WhereIF(dto.ExpiredTimeStart.HasValue, x => x.Order.ExpiredTime >= dto.ExpiredTimeStart)                //期满时间Start
+            .WhereIF(dto.ExpiredTimeEnd.HasValue, x => x.Order.ExpiredTime <= dto.ExpiredTimeEnd)                    //期满时间End
+            .WhereIF(dto.CreationTimeStart.HasValue, x => x.Order.CreationTime >= dto.CreationTimeStart)             //受理时间Start
+            .WhereIF(dto.CreationTimeEnd.HasValue, x => x.Order.CreationTime <= dto.CreationTimeEnd)                 //受理时间End
+            .WhereIF(dto.Status.HasValue, x => x.Order.Status == dto.Status)                                         //工单状态
+            .WhereIF(!string.IsNullOrEmpty(dto.Title), x => x.Order.Title.Contains(dto.Title))                       //工单标题
+            .WhereIF(!string.IsNullOrEmpty(dto.CurrentHandleOrgName), x => x.Order.CurrentHandleOrgName.Contains(dto.CurrentHandleOrgName)) //接办部门
+            .WhereIF(dto.CurrentHandleTimeStart.HasValue, x => x.Order.CurrentHandleTime >= dto.CurrentHandleTimeStart)//接办时间Start
+            .WhereIF(dto.CurrentHandleTimeEnd.HasValue, x => x.Order.CurrentHandleTime <= dto.CurrentHandleTimeEnd)    //接办时间End
+            .WhereIF(!string.IsNullOrEmpty(dto.Hotspot), x => x.Order.HotspotSpliceName != null && x.Order.HotspotSpliceName.Contains(dto.Hotspot)) //热点
+            .WhereIF(!string.IsNullOrEmpty(dto.AcceptTypeCode), x => x.Order.AcceptTypeCode == dto.AcceptTypeCode)   //受理类型
+            .WhereIF(!string.IsNullOrEmpty(dto.CrUser), x => x.CrUser.Contains(dto.CrUser))                          //催办人
+            .WhereIF(!string.IsNullOrEmpty(dto.CreatorOrgName), x => x.CreatorOrgName.Contains(dto.CreatorOrgName))  //催办部门
+            .WhereIF(dto.CrTimeStart.HasValue, x => x.CreationTime >= dto.CrTimeStart)                               //催办时间Start
+            .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.CurrentStepCode), x => x.Order.CurrentStepCode == dto.CurrentStepCode) //当前办理节点
+            .WhereIF(dto.CrState.HasValue, x => x.State == dto.CrState)
             .OrderByDescending(x => x.CreationTime)
             .ToPagedListAsync(dto.PageIndex, dto.PageSize, HttpContext.RequestAborted);
 
@@ -4249,6 +4307,44 @@ public class OrderController : BaseController
         return orderUrgeDto;
     }
 
+    /// <summary>
+    /// 列表页面基础数据
+    /// </summary>
+    /// <returns></returns>
+    [HttpGet("basedata")]
+    public async Task<object> BaseDataRange()
+    {
+        // 催办查询 催办状态
+        List<Kv> kvCrState = new()
+        {
+            new Kv { Key = "0", Value = "待办未读" },
+            new Kv { Key = "1", Value = "已回复" },
+            new Kv { Key = "3", Value = "签收已读" }
+        };
+
+        //延期申请单位
+        List<Kv> ETimeType = new()
+        {
+            new Kv { Key = "1", Value = "小时" },
+            new Kv { Key = "2", Value = "工作日" },
+            new Kv { Key = "3", Value = "自然日" }
+        };
+
+        var wfModule = await _workflowApplication.GetWorkflowModuleAsync(WorkflowModuleConsts.OrderHandle, HttpContext.RequestAborted);
+        var definition = wfModule.Definition;
+        var rsp = new
+        {
+            ChannelOptions = _sysDicDataCacheManager.GetSysDicDataCache(TimeLimitBaseDataConsts.SourceChannel),
+            AcceptTypeOptions = _sysDicDataCacheManager.GetSysDicDataCache(SysDicTypeConsts.AcceptType),
+            OrderStatusOptions = EnumExts.GetDescriptions<EOrderStatus>(),
+            CurrentStepOptions = definition?.Steps.Select(x => new Kv(x.Code, x.Name)),
+            CrState = kvCrState,
+            DelayUnitOptions = ETimeType
+        };
+        return rsp;
+    }
+
+
     #endregion
 
     #region 工单办理
@@ -5620,9 +5716,9 @@ public class OrderController : BaseController
                         var prevSendOrder = sendOrderTrace is not null;
                         if (_appOptions.Value.IsZiGong && prevSendOrder)
                         {
-							prevSendOrder = await _orderDomainService.SchedulingAtWork(sendOrderTrace.HandlerId);
-						}
-						if (prevSendOrder)
+                            prevSendOrder = await _orderDomainService.SchedulingAtWork(sendOrderTrace.HandlerId);
+                        }
+                        if (prevSendOrder)
                         {
                             //todo
                             nextDto.NextHandlers = new List<StepAssignInfo>
@@ -6120,22 +6216,22 @@ public class OrderController : BaseController
     }
 
 
-	/// <summary>
-	/// 提前触发平均派单 
-	/// </summary>
-	/// <returns></returns>
-	[HttpPost("advanced_trigger_average_order")]
-	[AllowAnonymous]
-	public async Task AdvancedTriggerAverageOrder()
-	{
-		await _orderDomainService.AdvancedTriggerAverageOrder(HttpContext.RequestAborted);
-	}
+    /// <summary>
+    /// 提前触发平均派单 
+    /// </summary>
+    /// <returns></returns>
+    [HttpPost("advanced_trigger_average_order")]
+    [AllowAnonymous]
+    public async Task AdvancedTriggerAverageOrder()
+    {
+        await _orderDomainService.AdvancedTriggerAverageOrder(HttpContext.RequestAborted);
+    }
 
-	/// <summary>
-	/// 批量归档(暂时只支持派单组节点操作)
-	/// </summary>
-	/// <returns>成功总量</returns>
-	[HttpPost("batch-file")]
+    /// <summary>
+    /// 批量归档(暂时只支持派单组节点操作)
+    /// </summary>
+    /// <returns>成功总量</returns>
+    [HttpPost("batch-file")]
     public async Task<string> BatchFile([FromBody] OrderBatchFileDto dto)
     {
         var orders = await _orderRepository.Queryable()
@@ -6793,20 +6889,20 @@ public class OrderController : BaseController
             var order = await _orderRepository.Queryable().Includes(d => d.Workflow).FirstAsync(d => d.Id == sendBack.OrderId);
             //if (_appOptions.Value.IsZiGong)
             //{
-                //var (currentStep, prevStep, steps, isOrgToCenter, isSecondToFirstOrgLevel) = await _workflowApplication.GetPreviousInformationAsync(
-                //    order.WorkflowId, sendBack.WorkflowUserId, sendBack.WorkflowOrgId, sendBack.WorkflowRoleIds.ToArray(), sendBack.AssignStepId,
-                //    HttpContext.RequestAborted);
+            //var (currentStep, prevStep, steps, isOrgToCenter, isSecondToFirstOrgLevel) = await _workflowApplication.GetPreviousInformationAsync(
+            //    order.WorkflowId, sendBack.WorkflowUserId, sendBack.WorkflowOrgId, sendBack.WorkflowRoleIds.ToArray(), sendBack.AssignStepId,
+            //    HttpContext.RequestAborted);
 
-                //if (prevStep.BusinessType == EBusinessType.Send)
-                //{
-                //    // 平均派单
-                //    var averageSendOrder = bool.Parse(_systemSettingCacheManager.GetSetting(SettingConstants.AverageSendOrder).SettingValue[0]);
-                //    if (averageSendOrder)
-                //    {
-                //        var handler = await _orderDomainService.AverageOrder(HttpContext.RequestAborted);
-                //        sendBack.SendBackData.Handler = handler;
-                //    }
-                //}
+            //if (prevStep.BusinessType == EBusinessType.Send)
+            //{
+            //    // 平均派单
+            //    var averageSendOrder = bool.Parse(_systemSettingCacheManager.GetSetting(SettingConstants.AverageSendOrder).SettingValue[0]);
+            //    if (averageSendOrder)
+            //    {
+            //        var handler = await _orderDomainService.AverageOrder(HttpContext.RequestAborted);
+            //        sendBack.SendBackData.Handler = handler;
+            //    }
+            //}
             //}
 
             sendBack.SendBackData.ExpiredTime = order.ExpiredTime;
@@ -8985,11 +9081,28 @@ public class OrderController : BaseController
     {
         var (total, items) = await _orderFinalityRepository.Queryable()
             .Includes(x => x.Order)
-            .WhereIF(dto.IsProvince.HasValue, x => x.Order.IsProvince == dto.IsProvince)
-            .WhereIF(!string.IsNullOrEmpty(dto.Keyword),
-                x => x.Order.No.Contains(dto.Keyword!) || x.Order.Title.Contains(dto.Keyword!))
-            //.WhereIF(!string.IsNullOrEmpty(dto.Title), x => x.Order.Title.Contains(dto.Title!))
-            //.WhereIF(!string.IsNullOrEmpty(dto.No), x => x.Order.No.Contains(dto.No!))
+            .WhereIF(!string.IsNullOrEmpty(dto.Keyword), x => x.Order.No.Contains(dto.Keyword!) || x.Order.Title.Contains(dto.Keyword!))
+            .WhereIF(dto.IsProvinceOrder.HasValue && dto.IsProvinceOrder == true, x => x.Order.IsProvince == true)   //是否省工单
+            .WhereIF(dto.IsProvinceOrder.HasValue && dto.IsProvinceOrder == false, x => x.Order.IsProvince == false)
+            .WhereIF(!string.IsNullOrEmpty(dto.No), x => x.Order.No.Contains(dto.No))                                //工单编号
+            .WhereIF(dto.Status.HasValue, x => x.Order.Status == dto.Status)                                         //工单状态
+            .WhereIF(!string.IsNullOrEmpty(dto.Channel), x => x.Order.SourceChannelCode == dto.Channel)              //来源渠道
+            .WhereIF(!string.IsNullOrEmpty(dto.CurrentStepCode), x => x.Order.CurrentStepCode.Contains(dto.CurrentStepCode)) //当前节点
+            .WhereIF(!string.IsNullOrEmpty(dto.Title), x => x.Order.Title.Contains(dto.Title))                       //工单标题
+            .WhereIF(dto.CreationTimeStart.HasValue, x => x.Order.CreationTime >= dto.CreationTimeStart)             //受理时间Start
+            .WhereIF(dto.CreationTimeEnd.HasValue, x => x.Order.CreationTime <= dto.CreationTimeEnd)                 //受理时间End
+            .WhereIF(!string.IsNullOrEmpty(dto.CreatorName), x => x.CreatorName.Contains(dto.CreatorName))           //设置人
+            .WhereIF(dto.SetCreationTimeStart.HasValue, x => x.CreationTime >= dto.SetCreationTimeStart)             //设置时间Start
+            .WhereIF(dto.SetCreationTimeEnd.HasValue, x => x.CreationTime <= dto.SetCreationTimeEnd)                 //设置时间End
+            .WhereIF(dto.ExpiredTimeStart.HasValue, x => x.Order.ExpiredTime >= dto.ExpiredTimeStart)                //期满时间Start
+            .WhereIF(dto.ExpiredTimeEnd.HasValue, x => x.Order.ExpiredTime <= dto.ExpiredTimeEnd)                    //期满时间End
+            .WhereIF(!string.IsNullOrEmpty(dto.AcceptTypeCode), x => x.Order.AcceptTypeCode == dto.AcceptTypeCode)   //受理类型
+            .WhereIF(!string.IsNullOrEmpty(dto.Hotspot), x => x.Order.HotspotSpliceName != null && x.Order.HotspotSpliceName.Contains(dto.Hotspot)) //热点
+            .WhereIF(!string.IsNullOrEmpty(dto.CurrentHandleOrgName), x => x.Order.CurrentHandleOrgName.Contains(dto.CurrentHandleOrgName)) //接办部门
+            .WhereIF(dto.CurrentHandleTimeStart.HasValue, x => x.Order.CurrentHandleTime >= dto.CurrentHandleTimeStart)//接办时间Start
+            .WhereIF(dto.CurrentHandleTimeEnd.HasValue, x => x.Order.CurrentHandleTime <= dto.CurrentHandleTimeEnd)    //接办时间End
+            .WhereIF(dto.FiledTimeStart.HasValue, x => x.Order.FiledTime >= dto.FiledTimeStart)                        //办结时间Start
+            .WhereIF(dto.FiledTimeEnd.HasValue, x => x.Order.FiledTime <= dto.FiledTimeEnd)                            //办结时间End
             .OrderByDescending(x => x.CreationTime)
             .ToPagedListAsync(dto.PageIndex, dto.PageSize, HttpContext.RequestAborted);
         return new PagedDto<OrderFinalityDto>(total, _mapper.Map<IReadOnlyList<OrderFinalityDto>>(items));

+ 78 - 41
src/Hotline.Api/Controllers/QualityController.cs

@@ -24,6 +24,10 @@ using Hotline.Configurations;
 using Hotline.CallCenter.Calls;
 using System.Linq;
 using Hotline.Repository.SqlSugar.Quality;
+using Hotline.Caching.Services;
+using Hotline.FlowEngine.WorkflowModules;
+using Hotline.Settings.TimeLimits;
+using Hotline.Share.Enums.Order;
 
 namespace Hotline.Api.Controllers
 {
@@ -51,6 +55,7 @@ namespace Hotline.Api.Controllers
         private readonly IOptionsSnapshot<AppConfiguration> _appOptions;
         private readonly IRepository<SystemLog> _logRepository;
         private readonly IRepository<QualityTransferRecords> _qualityTransferRecordsRepository;
+        private readonly ISystemDicDataCacheManager _sysDicDataCacheManager;
 
         public QualityController(
             ISessionContext sessionContext,
@@ -72,7 +77,8 @@ namespace Hotline.Api.Controllers
             ICallApplication callApplication,
             IOptionsSnapshot<AppConfiguration> appOptions,
             IRepository<SystemLog> logRepository,
-            IRepository<QualityTransferRecords> qualityTransferRecordsRepository)
+            IRepository<QualityTransferRecords> qualityTransferRecordsRepository,
+            ISystemDicDataCacheManager sysDicDataCacheManager)
         {
             _sessionContext = sessionContext;
             _mapper = mapper;
@@ -94,6 +100,7 @@ namespace Hotline.Api.Controllers
             _appOptions = appOptions;
             _logRepository = logRepository;
             _qualityTransferRecordsRepository = qualityTransferRecordsRepository;
+            _sysDicDataCacheManager = sysDicDataCacheManager;
         }
         #region 质检管理
         /// <summary>
@@ -123,25 +130,25 @@ namespace Hotline.Api.Controllers
             await _qualityApplication.UpdateQualityAsync(dto, HttpContext.RequestAborted);
         }
 
-		/// <summary>
-		/// 更新质检
-		/// </summary>
-		/// <param name="dto"></param>
-		/// <returns></returns>
-		[HttpPut("transfer")]
-		public async Task TransferUpdate([FromBody] TransferUpdate dto)
-		{
-			await _qualitey.Updateable().SetColumns(x=> new Hotline.Quality.Quality { Transfer  = dto.Transfer }).Where(x=>x.Id == dto.Id).ExecuteCommandAsync(HttpContext.RequestAborted);
-		}
+        /// <summary>
+        /// 更新质检
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        [HttpPut("transfer")]
+        public async Task TransferUpdate([FromBody] TransferUpdate dto)
+        {
+            await _qualitey.Updateable().SetColumns(x => new Hotline.Quality.Quality { Transfer = dto.Transfer }).Where(x => x.Id == dto.Id).ExecuteCommandAsync(HttpContext.RequestAborted);
+        }
 
 
 
-		/// <summary>
-		/// 获取质检列表
-		/// </summary>
-		/// <param name="dto"></param>
-		/// <returns></returns>
-		[HttpGet("list")]
+        /// <summary>
+        /// 获取质检列表
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        [HttpGet("list")]
         public async Task<PagedDto<QualityDto>> List([FromQuery] QualityListDto dto)
         {
             var (total, items) = await _qualitey.Queryable()
@@ -159,6 +166,18 @@ namespace Hotline.Api.Controllers
                 .WhereIF(dto.CreationTimeEnd.HasValue, x => x.CreationTime <= dto.CreationTimeEnd)
                 .WhereIF(dto.MaxGrade.HasValue, x => x.Grade <= dto.MaxGrade)
                 .WhereIF(dto.MinGrade.HasValue, x => x.Grade >= dto.MinGrade)
+                .WhereIF(!string.IsNullOrEmpty(dto.Mode), x => x.Mode.Contains(dto.Mode))                      //质检方式
+                .WhereIF(!string.IsNullOrEmpty(dto.Channel), x => x.Order.SourceChannelCode == dto.Channel)    //来源渠道
+                .WhereIF(dto.AcceptanceTimeStart.HasValue, x => x.Order.CreationTime >= dto.AcceptanceTimeStart) //受理时间Star
+                .WhereIF(dto.AcceptanceTimeEnd.HasValue, x => x.Order.CreationTime <= dto.AcceptanceTimeEnd)   //受理时间End
+                .WhereIF(dto.Status.HasValue, x => x.Order.Status == dto.Status)                               //工单状态
+                .WhereIF(!string.IsNullOrEmpty(dto.AcceptTypeCode), x => x.Order.AcceptTypeCode == dto.AcceptTypeCode) //受理类型
+                .WhereIF(!string.IsNullOrEmpty(dto.Hotspot), x => x.Order.HotspotSpliceName != null && x.Order.HotspotSpliceName.Contains(dto.Hotspot)) //热点
+                .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.UserName), x => x.UserName.Contains(dto.UserName))          //质检人
+                .WhereIF(dto.QualityTimeStart.HasValue, x => x.QualityTime >= dto.QualityTimeStart)              //质检时间Star
+                .WhereIF(dto.QualityTimeEnd.HasValue, x => x.QualityTime <= dto.QualityTimeEnd)                //质检时间End
                 .OrderByDescending(x => x.CreationTime)
                 .ToPagedListAsync(dto.PageIndex, dto.PageSize, HttpContext.RequestAborted);
             return new PagedDto<QualityDto>(total, _mapper.Map<IReadOnlyList<QualityDto>>(items));
@@ -333,7 +352,17 @@ namespace Hotline.Api.Controllers
                 .WhereIF(!string.IsNullOrEmpty(dto.Name), d => d.Name.Contains(dto.Name!))
                 .WhereIF(!string.IsNullOrEmpty(dto.GroupingName), d => d.GroupingName.Contains(dto.GroupingName!))
                 .WhereIF(dto.IsEnable.HasValue, d => d.IsEnable == dto.IsEnable)
-                .OrderByDescending(x => x.CreationTime)
+
+                .WhereIF(!string.IsNullOrEmpty(dto.Describe), d => d.Describe.Contains(dto.Describe!))
+                .WhereIF(dto.MaxGrade.HasValue, d => d.Grade <= dto.MaxGrade)
+                .WhereIF(dto.MinGrade.HasValue, d => d.Grade >= dto.MinGrade)
+                .WhereIF(!string.IsNullOrEmpty(dto.CreatorName), d => d.CreatorName.Contains(dto.CreatorName!))
+                .WhereIF(dto.CreationTimeStart.HasValue, d => d.CreationTime >= dto.CreationTimeStart)
+                .WhereIF(dto.CreationTimeEnd.HasValue, d => d.CreationTime <= dto.CreationTimeEnd)
+                .WhereIF(!string.IsNullOrEmpty(dto.LastModificationName), d => d.LastModificationName.Contains(dto.LastModificationName!))
+                .WhereIF(dto.LastModificationTimeStart.HasValue, d => d.LastModificationTime >= dto.LastModificationTimeStart)
+                .WhereIF(dto.LastModificationTimeEnd.HasValue, d => d.LastModificationTime <= dto.LastModificationTimeEnd)
+                .OrderByDescending(d => d.CreationTime)
                 .ToPagedListAsync(dto.PageIndex, dto.PageSize, HttpContext.RequestAborted);
             return new PagedDto<QualityItemDto>(total, _mapper.Map<IReadOnlyList<QualityItemDto>>(items));
         }
@@ -449,9 +478,15 @@ namespace Hotline.Api.Controllers
             var (total, items) = await _qualityTemplate.Queryable()
                 .Includes(x => x.templateDetails)
                 .Includes(x => x.templateDetails, y => y.QualityItem)
-                .WhereIF(!string.IsNullOrEmpty(dto.Name), d => d.Name.Contains(dto.Name!))
-                .WhereIF(dto.Grouping.HasValue, d => d.Grouping == dto.Grouping)
-                .WhereIF(dto.IsEnable.HasValue, d => d.IsEnable == dto.IsEnable)
+                .WhereIF(!string.IsNullOrEmpty(dto.Name), x => x.Name.Contains(dto.Name!))
+                .WhereIF(dto.Grouping.HasValue, x => x.Grouping == dto.Grouping)
+                .WhereIF(dto.IsEnable.HasValue, x => x.IsEnable == dto.IsEnable)
+                .WhereIF(!string.IsNullOrEmpty(dto.CreatorName), x => x.CreatorName.Contains(dto.CreatorName!))
+                .WhereIF(dto.CreationTimeStart.HasValue, x => x.CreationTime >= dto.CreationTimeStart)
+                .WhereIF(dto.CreationTimeEnd.HasValue, x => x.CreationTime <= dto.CreationTimeEnd)
+                .WhereIF(!string.IsNullOrEmpty(dto.LastModificationName), x => x.LastModificationName.Contains(dto.LastModificationName!))
+                .WhereIF(dto.LastModificationTimeStart.HasValue, x => x.LastModificationTime >= dto.LastModificationTimeStart)
+                .WhereIF(dto.LastModificationTimeEnd.HasValue, x => x.LastModificationTime <= dto.LastModificationTimeEnd)
                 .OrderByDescending(x => x.CreationTime)
                 .ToPagedListAsync(dto.PageIndex, dto.PageSize, HttpContext.RequestAborted);
             return new PagedDto<QualityTemplateDto>(total, _mapper.Map<IReadOnlyList<QualityTemplateDto>>(items));
@@ -657,16 +692,16 @@ namespace Hotline.Api.Controllers
             await _qualityTransferRecordsRepository.AddRangeAsync(transfers);
         }
 
-		/// <summary>
-		/// 智能质检转写_兴唐_定时调用
-		/// </summary>
-		/// <param name="dto"></param>
-		/// <returns></returns>
-		[AllowAnonymous]
-		[HttpPost("transfer")]
-		[LogFilter("智能质检转写_兴唐_定时调用")]
-		public async Task AiTransfer_XT()
-		{
+        /// <summary>
+        /// 智能质检转写_兴唐_定时调用
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        [AllowAnonymous]
+        [HttpPost("transfer")]
+        [LogFilter("智能质检转写_兴唐_定时调用")]
+        public async Task AiTransfer_XT()
+        {
             var translatings = await _qualityTransferRecordsRepository.Queryable().Where(x => x.IsFinished == false && x.TransferState == EQualityTransferState.Translating).OrderBy(x => x.TransferTime).ToListAsync();
             if (translatings.Any())
             {
@@ -674,19 +709,21 @@ namespace Hotline.Api.Controllers
                 if ((DateTime.Now - transfer.TransferTime.Value).TotalMinutes >= 30)
                 {
                     await _qualityTransferRecordsRepository.Updateable().SetColumns(x => new QualityTransferRecords { TransferState = EQualityTransferState.Lose }).Where(x => x.Id == transfer.Id).ExecuteCommandAsync();
-					await _qualitey.Updateable().SetColumns(x => new Hotline.Quality.Quality { TransferState = EQualityTransferState.Lose }).Where(x => x.Id == transfer.QualityId).ExecuteCommandAsync();
-				}
+                    await _qualitey.Updateable().SetColumns(x => new Hotline.Quality.Quality { TransferState = EQualityTransferState.Lose }).Where(x => x.Id == transfer.QualityId).ExecuteCommandAsync();
+                }
                 return;
             }
-            else {
+            else
+            {
                 var trany = await _qualityTransferRecordsRepository.Queryable().Where(x => x.IsFinished == false && x.TransferState == EQualityTransferState.NotStarted).AnyAsync();
-                if (trany) {
-					var notStarted = await _qualityTransferRecordsRepository.Queryable().Where(x => x.IsFinished == false && x.TransferState == EQualityTransferState.NotStarted).OrderBy(x => x.TransferTime).FirstAsync();
-					await _qualityTransferRecordsRepository.Updateable().SetColumns(x => new QualityTransferRecords { TransferState = EQualityTransferState.Translating, TransferTime = DateTime.Now }).Where(x => x.Id == notStarted.Id).ExecuteCommandAsync();
-					Task.Run(async () => await _qualityApplication.Transfer_XT(notStarted.QualityId, HttpContext.RequestAborted));
-				}
-			}
-		}
+                if (trany)
+                {
+                    var notStarted = await _qualityTransferRecordsRepository.Queryable().Where(x => x.IsFinished == false && x.TransferState == EQualityTransferState.NotStarted).OrderBy(x => x.TransferTime).FirstAsync();
+                    await _qualityTransferRecordsRepository.Updateable().SetColumns(x => new QualityTransferRecords { TransferState = EQualityTransferState.Translating, TransferTime = DateTime.Now }).Where(x => x.Id == notStarted.Id).ExecuteCommandAsync();
+                    Task.Run(async () => await _qualityApplication.Transfer_XT(notStarted.QualityId, HttpContext.RequestAborted));
+                }
+            }
+        }
 
 
         /// <summary>

+ 25 - 5
src/Hotline.Application/OrderApp/OrderApplication.cs

@@ -42,6 +42,7 @@ using Hotline.Share.Enums.Quality;
 using Hotline.Share.Enums.Settings;
 using Hotline.Share.Mq;
 using Hotline.Share.Requests;
+using Hotline.Share.Tools;
 using Hotline.Statistics;
 using Hotline.Tools;
 using Hotline.Users;
@@ -6281,12 +6282,31 @@ public class OrderApplication : IOrderApplication, IScopeDependency
                 .Queryable(hasHandled: isHandled, isAdmin: isAdmin)
                 .Includes(d => d.Order)
                 .Includes(d => d.Workflow)
-                .WhereIF(!string.IsNullOrEmpty(dto.Keyword),
-                    d => d.Order.Title.Contains(dto.Keyword!) || d.No.Contains(dto.Keyword!))
-                //.WhereIF(dto.IsApply == true, d => d.DelayState != EDelayState.Examining)
+                .WhereIF(!string.IsNullOrEmpty(dto.Keyword), d => d.Order.Title.Contains(dto.Keyword!) || d.No.Contains(dto.Keyword!))
                 .WhereIF(dto.IsApply == false, d => d.DelayState == EDelayState.Examining)
-                //.WhereIF(dto.DelayState != null, x => x.DelayState == dto.DelayState)
-                //.Where(x=>x.DelayState == EDelayState.Examining)
+                .WhereIF(!string.IsNullOrEmpty(dto.No), d => d.Order.No.Contains(dto.No))                                   //工单编号
+                .WhereIF(dto.IsProvinceOrder.HasValue && dto.IsProvinceOrder == true, d => d.Order.IsProvince == true)      //是否省工单
+                .WhereIF(dto.IsProvinceOrder.HasValue && dto.IsProvinceOrder == false, d => d.Order.IsProvince == false)
+                .WhereIF(!string.IsNullOrEmpty(dto.Title), d => d.Order.Title.Contains(dto.Title))                          //工单标题
+                .WhereIF(!string.IsNullOrEmpty(dto.Channel), d => d.Order.SourceChannelCode == dto.Channel)                 //来源渠道
+                .WhereIF(dto.CreationTimeStart.HasValue, d => d.Order.CreationTime >= dto.CreationTimeStart)                //受理时间Start
+                .WhereIF(dto.CreationTimeEnd.HasValue, d => d.Order.CreationTime <= dto.CreationTimeEnd)                    //受理时间End
+                .WhereIF(!string.IsNullOrEmpty(dto.AcceptorName), d => d.Order.AcceptorName == dto.AcceptorName!)           //受理人
+                .WhereIF(!string.IsNullOrEmpty(dto.Hotspot), d => d.Order.HotspotSpliceName != null && d.Order.HotspotSpliceName.Contains(dto.Hotspot)) //热点
+                .WhereIF(!string.IsNullOrEmpty(dto.AcceptTypeCode), d => d.Order.AcceptTypeCode == dto.AcceptTypeCode)      //受理类型
+                .WhereIF(!string.IsNullOrEmpty(dto.OrgLevelOneName), d => d.Order.OrgLevelOneName.Contains(dto.OrgLevelOneName)) //一级部门
+                .WhereIF(!string.IsNullOrEmpty(dto.CurrentHandleOrgName), d => d.Order.CurrentHandleOrgName.Contains(dto.CurrentHandleOrgName)) //接办部门
+                .WhereIF(dto.CurrentHandleTimeStart.HasValue, d => d.Order.CurrentHandleTime >= dto.CurrentHandleTimeStart) //接办时间Start
+                .WhereIF(dto.CurrentHandleTimeEnd.HasValue, d => d.Order.CurrentHandleTime <= dto.CurrentHandleTimeEnd)     //接办时间End
+                .WhereIF(dto.ApplyTimeStart.HasValue, d => d.CreationTime >= dto.ApplyTimeStart)                            //延期申请时间Start
+                .WhereIF(dto.ApplyTimeEnd.HasValue, d => d.CreationTime <= dto.ApplyTimeEnd)                                //延期申请时间End
+                .WhereIF(!string.IsNullOrEmpty(dto.ApplyName), d => d.CreatorName.Contains(dto.ApplyName))                  //延期申请人
+                .WhereIF(!string.IsNullOrEmpty(dto.ApplyOrgName), d => d.CreatorOrgName.Contains(dto.ApplyOrgName))         //延期申请部门
+                .WhereIF(dto.DelayNum.HasValue, d => d.DelayNum == dto.DelayNum)                                            //延期申请时限
+                .WhereIF(dto.DelayUnit.HasValue, d => d.DelayUnit == dto.DelayUnit)                                         //延期申请单位
+                .WhereIF(!string.IsNullOrEmpty(dto.DelayReason), d => d.DelayReason.Contains(dto.DelayReason))              //申请理由
+                .WhereIF(dto.BeforeDelayStart.HasValue, d => d.BeforeDelay >= dto.BeforeDelayStart)                         //申请前期满时间Start
+                .WhereIF(dto.BeforeDelayEnd.HasValue, d => d.BeforeDelay <= dto.BeforeDelayEnd)                             //申请前期满时间End
                 .OrderByDescending(d => d.ApplyDelayTime)
             ;
 

+ 14 - 6
src/Hotline.Application/OrderApp/OrderSecondaryHandlingApplication.cs

@@ -242,13 +242,13 @@ namespace Hotline.Application.OrderApp
                 await _orderRepository.UpdateAsync(order, false, cancellationToken);
 
                 visit.VisitState = EVisitState.None;
-			}
+            }
             else
             {
                 visit.IsCanHandle = true;
             }
-			await _orderVisitRepository.UpdateAsync(visit, cancellationToken);
-			await _orderSecondaryHandlingRepository.UpdateAsync(model, cancellationToken);
+            await _orderVisitRepository.UpdateAsync(visit, cancellationToken);
+            await _orderSecondaryHandlingRepository.UpdateAsync(model, cancellationToken);
         }
 
 
@@ -333,9 +333,17 @@ namespace Hotline.Application.OrderApp
                 .Includes(x => x.VisitDetail)
                 .Includes(x => x.Visit, d => d.Order)
                 .Where(x => x.State > ESecondaryHandlingState.NotApply)
-                .WhereIF(!string.IsNullOrEmpty(dto.Keyword), x => x.Visit.Order.Title.Contains(dto.Keyword!) || x.Visit.Order.No.Contains(dto.Keyword!))
-                .WhereIF(!string.IsNullOrEmpty(dto.Title), x => x.Visit.Order.Title.Contains(dto.Title!))
-                .WhereIF(!string.IsNullOrEmpty(dto.No), x => x.Visit.Order.No.Contains(dto.No!))
+                .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.Channel), x => x.Order.SourceChannelCode == dto.Channel)              //来源渠道
+                .WhereIF(dto.SendBack.HasValue, x => x.SendBackNum == dto.SendBack!)                                     //重提办理
+                .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.ApplyOrgName), x => x.ApplyOrgName.Contains(dto.ApplyOrgName))        //申请部门
+                .WhereIF(dto.ApplyTimeStart.HasValue, x => x.CreationTime >= dto.ApplyTimeStart)                         //申请时间Start
+                .WhereIF(dto.ApplyTimeEnd.HasValue, x => x.CreationTime <= dto.ApplyTimeEnd)                             //申请时间End
+                .WhereIF(!string.IsNullOrEmpty(dto.AcceptTypeCode), x => x.Order.AcceptTypeCode == dto.AcceptTypeCode)   //受理类型
+                .WhereIF(!string.IsNullOrEmpty(dto.Hotspot), x => x.Order.HotspotSpliceName != null && x.Order.HotspotSpliceName.Contains(dto.Hotspot)) //热点
                 .WhereIF(dto.Status is ESecondaryHandlingState.Apply, x => x.State == ESecondaryHandlingState.Apply)
                 .WhereIF(dto.Status is ESecondaryHandlingState.Handled, x => x.State != ESecondaryHandlingState.Apply)
                 .WhereIF(dto.Status is ESecondaryHandlingState.End || dto.Status is ESecondaryHandlingState.Refuse || dto.Status is ESecondaryHandlingState.NotApply, x => x.State == dto.Status)

+ 23 - 12
src/Hotline.Application/OrderApp/OrderSendBackAuditApplication.cs

@@ -24,22 +24,33 @@ namespace Hotline.Application.OrderApp
             return _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(!string.IsNullOrEmpty(dto.Title), d => d.Order.Title.Contains(dto.Title!))
-                .WhereIF(!string.IsNullOrEmpty(dto.No), d => d.Order.No.Contains(dto.No!))
-                .WhereIF(!string.IsNullOrEmpty(dto.AcceptTypeCode), d => d.Order.AcceptTypeCode == dto.AcceptTypeCode)
-                .WhereIF(!string.IsNullOrEmpty(dto.OrgName), d => d.ApplyOrgName == dto.OrgName)
-                .WhereIF(dto.DataScope is 1, d => d.CreatorId == _sessionContext.RequiredUserId)
-                .WhereIF(dto.StartTime.HasValue, d => d.CreationTime >= dto.StartTime)
-                .WhereIF(dto.EndTime.HasValue, d => d.CreationTime <= dto.EndTime)
-                .WhereIF(dto.AuditState == 1, d => d.State == ESendBackAuditState.Apply)
-                .WhereIF(dto is { AuditState: 2, State: null }, d => d.State > ESendBackAuditState.Apply)
-                .WhereIF(dto.AuditState is 2 or 3 && dto.State.HasValue && dto.State != ESendBackAuditState.All, d => d.State == dto.State)
+                    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.No), x => x.Order.No.Contains(dto.No!))
+                .WhereIF(dto.IsProvinceOrder.HasValue && dto.IsProvinceOrder == true, x => x.Order.IsProvince == true)
+                .WhereIF(dto.IsProvinceOrder.HasValue && dto.IsProvinceOrder == false, x => x.Order.IsProvince == false)
+                .WhereIF(!string.IsNullOrEmpty(dto.Channel), x => x.Order.SourceChannelCode == dto.Channel)    //来源渠道
+                .WhereIF(!string.IsNullOrEmpty(dto.AcceptTypeCode), x => x.Order.AcceptTypeCode == dto.AcceptTypeCode)
+                .WhereIF(!string.IsNullOrEmpty(dto.Hotspot), x => x.Order.HotspotSpliceName != null && x.Order.HotspotSpliceName.Contains(dto.Hotspot)) //热点
+                .WhereIF(!string.IsNullOrEmpty(dto.CenterToOrgHandlerName), x => x.Order.CenterToOrgHandlerName.Contains(dto.CenterToOrgHandlerName))   //最近派单员              
+                .WhereIF(!string.IsNullOrEmpty(dto.SendBackStepName), x => x.SendBackStepName.Contains(dto.SendBackStepName))                           //退回节点                   
+                .WhereIF(!string.IsNullOrEmpty(dto.NameOrNo), x => x.Order.AcceptorName == dto.NameOrNo! || x.Order.AcceptorStaffNo == dto.NameOrNo!)   //受理人/坐席
+                .WhereIF(!string.IsNullOrEmpty(dto.OrgLevelOneName), x => x.Order.OrgLevelOneName.Contains(dto.OrgLevelOneName))                        //一级部门 
+                .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.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(dto.DataScope is 1, x => x.CreatorId == _sessionContext.RequiredUserId)
+                .WhereIF(dto.StartTime.HasValue, x => x.CreationTime >= dto.StartTime)
+                .WhereIF(dto.EndTime.HasValue, x => x.CreationTime <= dto.EndTime)
+                .WhereIF(dto.AuditState == 1, x => x.State == ESendBackAuditState.Apply)
+                .WhereIF(dto is { AuditState: 2, State: null }, x => x.State > ESendBackAuditState.Apply)
+                .WhereIF(dto.AuditState is 2 or 3 && dto.State.HasValue && dto.State != ESendBackAuditState.All, x => x.State == dto.State)
                 .WhereIF(dto.AuditState == 3 && _sessionContext.RequiredOrgId != OrgSeedData.CenterId, x => x.ApplyOrgId.StartsWith(_sessionContext.OrgId))
                 .WhereIF(_sessionContext.Roles.Contains("role_sysadmin") == false && dto.AuditState != 3, x => x.SendBackOrgId == _sessionContext.OrgId) // 123 系统管理员;
                 .WhereIF(dto.ExpiredTimeStart.HasValue, x => x.Order.ExpiredTime >= dto.ExpiredTimeStart)
                 .WhereIF(dto.ExpiredTimeEnd.HasValue, x => x.Order.ExpiredTime <= dto.ExpiredTimeEnd)
-
             .OrderByDescending(x => x.CreationTime);
         }
     }

+ 155 - 90
src/Hotline.Share/Dtos/Order/OrderFinalityDto.cs

@@ -1,4 +1,5 @@
-using Hotline.Share.Requests;
+using Hotline.Share.Enums.Order;
+using Hotline.Share.Requests;
 using System;
 using System.Collections.Generic;
 using System.Linq;
@@ -7,93 +8,157 @@ using System.Threading.Tasks;
 
 namespace Hotline.Share.Dtos.Order
 {
-	public class OrderFinalityDto : OrderFinalityBaseDto
-	{
-		/// <summary>
-		/// 工单ID
-		/// </summary>
-		public string OrderId { get; set; }
-
-		/// <summary>
-		/// 
-		/// </summary>
-		public OrderDto Order { get; set; }
-	}
-
-	public class OrderFinalityAddDto
-	{
-
-		/// <summary>
-		/// 工单ID
-		/// </summary>
-		public List<OrdersFinalityAddDto> OrderIds { get; set; }
-	}
-	public class OrdersFinalityAddDto
-	{
-
-		public string OrderId { get; set; }
-	}
-
-	public class OrderFinalityDeleteDto
-	{
-		public List<string> Ids { get; set; }
-	}
-
-	public class OrderFinalityUpdateDto : OrderFinalityAddDto
-	{
-		public string Id { get; set; }
-	}
-
-	public record OrderFinalityListDto : PagedKeywordRequest
-	{
-		/// <summary>
-		/// 标题
-		/// </summary>
-		public string? Title { get; set; }
-
-		/// <summary>
-		/// 编号
-		/// </summary>
-		public string? No { get; set; }
-
-		/// <summary>
-		/// 是否为省工单
-		/// </summary>
-		public bool? IsProvince { get; set; }
-
-	}
-	public class OrderFinalityBaseDto
-	{
-		public DateTime? LastModificationTime { get; set; }
-
-		public bool IsDeleted { get; set; }
-
-		/// <summary>
-		/// 删除时间
-		/// </summary>
-		public DateTime? DeletionTime { get; set; }
-
-
-		/// <summary>
-		/// 创建时间
-		/// </summary>
-		public DateTime CreationTime { get; set; }
-
-		public string Id { get; set; }
-
-		/// <summary>
-		/// 组织Id
-		/// </summary>
-		public string? CreatorOrgId { get; set; }
-
-
-		public string? CreatorOrgName { get; set; }
-
-		/// <summary>
-		/// 创建人
-		/// </summary>
-		public string? CreatorId { get; set; }
-
-		public string? CreatorName { get; set; }
-	}
+    public class OrderFinalityDto : OrderFinalityBaseDto
+    {
+        /// <summary>
+        /// 工单ID
+        /// </summary>
+        public string OrderId { get; set; }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        public OrderDto Order { get; set; }
+    }
+
+    public class OrderFinalityAddDto
+    {
+
+        /// <summary>
+        /// 工单ID
+        /// </summary>
+        public List<OrdersFinalityAddDto> OrderIds { get; set; }
+    }
+    public class OrdersFinalityAddDto
+    {
+
+        public string OrderId { get; set; }
+    }
+
+    public class OrderFinalityDeleteDto
+    {
+        public List<string> Ids { get; set; }
+    }
+
+    public class OrderFinalityUpdateDto : OrderFinalityAddDto
+    {
+        public string Id { get; set; }
+    }
+
+    public record OrderFinalityListDto : PagedKeywordRequest
+    {
+        /// <summary>
+        /// 编号
+        /// </summary>
+        public string? No { get; set; }
+
+        /// <summary>
+        /// 工单状态
+        /// </summary>
+        public EOrderStatus? Status { get; set; }
+
+        /// <summary>
+        /// 来源渠道
+        /// </summary>
+        public string? Channel { get; set; }
+
+        /// <summary>
+        /// 当前节点
+        /// </summary>
+        public string? CurrentStepCode { get; set; }
+
+        /// <summary>
+        /// 标题
+        /// </summary>
+        public string? Title { get; set; }
+
+        /// <summary>
+        /// 受理时间(工单创建时间)
+        /// </summary>
+        public DateTime? CreationTimeStart { get; set; }
+        public DateTime? CreationTimeEnd { get; set; }
+
+        /// <summary>
+        /// 设置人
+        /// </summary>
+        public string? CreatorName { get; set; }
+
+        /// <summary>
+        /// 设置时间
+        /// </summary>
+        public DateTime? SetCreationTimeStart { get; set; }
+        public DateTime? SetCreationTimeEnd { get; set; }
+
+        /// <summary>
+        /// 期满时间
+        /// </summary>
+        public DateTime? ExpiredTimeStart { get; set; }
+        public DateTime? ExpiredTimeEnd { get; set; }
+
+        /// <summary>
+        /// 受理类型
+        /// </summary>
+        public string? AcceptTypeCode { get; set; }
+
+        /// <summary>
+        /// 热点分类关键词
+        /// </summary>
+        public string? Hotspot { get; set; }
+
+        /// <summary>
+        /// 接办部门
+        /// </summary>
+        public string? CurrentHandleOrgName { get; set; }
+
+        /// <summary>
+        /// 接办时间
+        /// </summary>
+        public DateTime? CurrentHandleTimeStart { get; set; }
+        public DateTime? CurrentHandleTimeEnd { get; set; }
+
+        /// <summary>
+        /// 办结时间
+        /// </summary>
+        public DateTime? FiledTimeStart { get; set; }
+        public DateTime? FiledTimeEnd { get; set; }
+
+        /// <summary>
+        /// 省工单
+        /// </summary>
+        public bool? IsProvinceOrder { get; set; }
+    }
+    public class OrderFinalityBaseDto
+    {
+        public DateTime? LastModificationTime { get; set; }
+
+        public bool IsDeleted { get; set; }
+
+        /// <summary>
+        /// 删除时间
+        /// </summary>
+        public DateTime? DeletionTime { get; set; }
+
+
+        /// <summary>
+        /// 创建时间
+        /// </summary>
+        public DateTime CreationTime { get; set; }
+
+        public string Id { get; set; }
+
+        /// <summary>
+        /// 组织Id
+        /// </summary>
+        public string? CreatorOrgId { get; set; }
+
+
+        public string? CreatorOrgName { get; set; }
+
+        /// <summary>
+        /// 创建人
+        /// </summary>
+        public string? CreatorId { get; set; }
+
+        public string? CreatorName { get; set; }
+    }
 }

+ 36 - 1
src/Hotline.Share/Dtos/Order/OrderSecondaryHandlingDto.cs

@@ -207,5 +207,40 @@ namespace Hotline.Share.Dtos.Order
 		/// </summary>
 		public string? Title { get; set;}
 
-	}
+        /// <summary>
+        /// 来源渠道
+        /// </summary>
+        public string? Channel { get; set; }
+
+        /// <summary>
+        /// 重提办理
+        /// </summary>
+        public int? SendBack { get; set; }
+
+        /// <summary>
+        /// 受理类型
+        /// </summary>
+        public string? AcceptTypeCode { get; set; }
+
+        /// <summary>
+        /// 热点分类关键词
+        /// </summary>
+        public string? Hotspot { get; set; }
+
+        /// <summary>
+        /// 申请人
+        /// </summary>
+        public string? ApplyName { get; set; }
+
+        /// <summary>
+        /// 申请部门
+        /// </summary>
+        public string? ApplyOrgName { get; set; }
+
+        /// <summary>
+        /// 申请时间
+        /// </summary>
+        public DateTime? ApplyTimeStart { get; set; }
+        public DateTime? ApplyTimeEnd { get; set; }
+    }
 }

+ 305 - 25
src/Hotline.Share/Dtos/Order/QueryOrderDto.cs

@@ -570,8 +570,6 @@ namespace Hotline.Share.Dtos.Order
         /// </summary>
         public bool? IsApply { get; set; }
 
-        public EDelayState? DelayState { get; set; }
-
         /// <summary>
         /// 延期状态快捷查询
         /// </summary>
@@ -593,11 +591,6 @@ namespace Hotline.Share.Dtos.Order
         /// </summary>
         public string? ActualHandlerName { get; set; }
 
-        /// <summary>
-        /// 一级部门
-        /// </summary>
-		public string? OrgLevelOneName { get; set; }
-
         /// <summary>
         /// 延期申请时间
         /// </summary>
@@ -609,14 +602,54 @@ namespace Hotline.Share.Dtos.Order
         public DateTime? EndCreationTime { get; set; }
 
         /// <summary>
-        /// 受理类型
+        /// 期满时间
         /// </summary>
-        public string? AcceptType { get; set; }
+        public DateTime? ExpiredTimeStart { get; set; }
+        public DateTime? ExpiredTimeEnd { get; set; }
 
         /// <summary>
-        /// 热点分类关键词
+        /// 延期申请人
         /// </summary>
-        public string? Hotspot { get; set; }
+        public string? DelayApplyName { get; set; }
+
+        /// <summary>
+        /// 延期申请部门
+        /// </summary>
+        public string? DelayApplyOrgName { get; set; }
+
+        /// <summary>
+        /// 是否自动延期
+        /// </summary>
+        public bool? IsAutomaticDelay { get; set; }
+
+
+
+
+
+        /// <summary>
+        /// 工单编码
+        /// </summary>
+        public string? No { get; set; }
+
+        /// <summary>
+        /// 省工单
+        /// </summary>
+        public bool? IsProvinceOrder { get; set; }
+
+        /// <summary>
+        /// 工单标题
+        /// </summary>
+        public string? Title { get; set; }
+
+        /// <summary>
+        /// 延期审批状态
+        /// </summary>
+        public EDelayState? DelayState { get; set; }
+
+        /// <summary>
+        /// 来源渠道
+        /// </summary>
+        public string? Channel { get; set; }
 
         /// <summary>
         /// 受理时间(工单创建时间)
@@ -625,30 +658,84 @@ namespace Hotline.Share.Dtos.Order
         public DateTime? CreationTimeEnd { get; set; }
 
         /// <summary>
-        /// 期满时间
+        /// 受理人
         /// </summary>
-        public DateTime? ExpiredTimeStart { get; set; }
-        public DateTime? ExpiredTimeEnd { get; set; }
+        public string? AcceptorName { get; set; }
 
         /// <summary>
-        /// 来源渠道
+        /// 热点分类关键词
         /// </summary>
-        public string? Channel { get; set; }
+        public string? Hotspot { get; set; }
+
+
+        /// <summary>
+        /// 受理类型
+        /// </summary>
+        public string? AcceptType { get; set; }
+
+        /// <summary>
+        /// 受理类型
+        /// </summary>
+        public string? AcceptTypeCode { get; set; }
+
+        /// <summary>
+        /// 一级部门
+        /// </summary>
+        public string? OrgLevelOneName { get; set; }
+
+        /// <summary>
+        /// 接办部门
+        /// </summary>
+        public string? CurrentHandleOrgName { get; set; }
+
+        /// <summary>
+        /// 接办时间
+        /// </summary>
+        public DateTime? CurrentHandleTimeStart { get; set; }
+        public DateTime? CurrentHandleTimeEnd { get; set; }
+
+        /// <summary>
+        /// 延期申请时间
+        /// </summary>
+        public DateTime? ApplyTimeStart { get; set; }
+        public DateTime? ApplyTimeEnd { get; set; }
 
         /// <summary>
         /// 延期申请人
         /// </summary>
-        public string? DelayApplyName { get; set; }
+        public string? ApplyName { get; set; }
 
         /// <summary>
         /// 延期申请部门
         /// </summary>
-        public string? DelayApplyOrgName { get; set; }
+        public string? ApplyOrgName { get; set; }
 
         /// <summary>
-        /// 是否自动延期
+        /// 延期申请时限
         /// </summary>
-        public bool? IsAutomaticDelay { get; set; }
+        public int? DelayNum { get; set; }
+
+        /// <summary>
+        /// 延期申请单位
+        /// </summary>
+        public ETimeType? DelayUnit { get; set; }
+
+        /// <summary>
+        /// 工单状态
+        /// </summary>
+        public EOrderStatus? Status { get; set; }
+
+        /// <summary>
+        /// 申请理由
+        /// </summary>
+        public string? DelayReason { get; set; }
+
+        /// <summary>
+        /// 申请前期满时间
+        /// </summary>
+        public DateTime? BeforeDelayStart { get; set; }
+        public DateTime? BeforeDelayEnd { get; set; }
+
     }
 
     public record ApplySuperviseDto
@@ -663,8 +750,111 @@ namespace Hotline.Share.Dtos.Order
         /// </summary>
         public int? SuperviseState { get; set; }
 
+
+        /// <summary>
+        /// 工单编码
+        /// </summary>
+        public string? No { get; set; }
+
+        /// <summary>
+        /// 省工单
+        /// </summary>
+        public bool? IsProvinceOrder { get; set; }
+
+        /// <summary>
+        /// 工单标题
+        /// </summary>
+        public string? Title { get; set; }
+
+        /// <summary>
+        /// 来源渠道
+        /// </summary>
+        public string? Channel { get; set; }
+
+        /// <summary>
+        /// 工单状态
+        /// </summary>
+        public EOrderStatus? Status { get; set; }
+
+        /// <summary>
+        /// 受理类型
+        /// </summary>
+        public string? AcceptTypeCode { get; set; }
+
+        /// <summary>
+        /// 热点分类关键词
+        /// </summary>
+        public string? Hotspot { get; set; }
+
+        /// <summary>
+        /// 受理人
+        /// </summary>
+        public string? AcceptorName { get; set; }
+
+        /// <summary>
+        /// 接办部门
+        /// </summary>
+        public string? CurrentHandleOrgName { get; set; }
+
+        /// <summary>
+        /// 受理时间(工单创建时间)
+        /// </summary>
         public DateTime? CreationTimeStart { get; set; }
         public DateTime? CreationTimeEnd { get; set; }
+
+        /// <summary>
+        /// 期满时间
+        /// </summary>
+        public DateTime? ExpiredTimeStart { get; set; }
+        public DateTime? ExpiredTimeEnd { get; set; }
+
+        /// <summary>
+        /// 督办时间
+        /// </summary>
+        public DateTime? SuperviseTimeStart { get; set; }
+        public DateTime? SuperviseTimeEnd { get; set; }
+
+        /// <summary>
+        /// 督办回复时限
+        /// </summary>
+        public DateTime? ReplyLimitTimeStart { get; set; }
+        public DateTime? ReplyLimitTimeEnd { get; set; }
+
+        /// <summary>
+        /// 督办回复时间
+        /// </summary>
+        public DateTime? ReplyTimeStart { get; set; }
+        public DateTime? ReplyTimeEnd { get; set; }
+
+        /// <summary>
+        /// 督办回复内容
+        /// </summary>
+        public string? ReplyContent { get; set; }
+
+        /// <summary>
+        /// 督办人
+        /// </summary>
+        public string? CrUser { get; set; }
+
+        /// <summary>
+        /// 督办部门
+        /// </summary>
+        public string? LaunchOrgName { get; set; }
+
+        /// <summary>
+        /// 被督办部门
+        /// </summary>
+        public string? OrgName { get; set; }
+
+        /// <summary>
+        /// 督办意见
+        /// </summary>
+        public string? ApplyContent { get; set; }
+
+        /// 督办签收时间
+        /// </summary>
+        public DateTime? SignTimeStart { get; set; }
+        public DateTime? SignTimeEnd { get; set; }
     }
 
     public record ScreenListDto : PagedKeywordRequest
@@ -973,6 +1163,10 @@ namespace Hotline.Share.Dtos.Order
         /// 回复状态
         /// </summary>
         public int? UrgeState { get; set; }
+
+        /// <summary>
+        /// 受理时间(工单创建时间)
+        /// </summary>
         public DateTime? CreationTimeStart { get; set; }
         public DateTime? CreationTimeEnd { get; set; }
 
@@ -990,6 +1184,91 @@ namespace Hotline.Share.Dtos.Order
         /// 当前办理节点
         /// </summary>
         public string? CurrentStepCode { get; set; }
+
+
+        /// <summary>
+        /// 工单编码
+        /// </summary>
+        public string? No { get; set; }
+
+        /// <summary>
+        /// 省工单
+        /// </summary>
+        public bool? IsProvinceOrder { get; set; }
+
+        /// <summary>
+        /// 来源渠道
+        /// </summary>
+        public string? Channel { get; set; }
+
+        /// <summary>
+        /// 期满时间
+        /// </summary>
+        public DateTime? ExpiredTimeStart { get; set; }
+        public DateTime? ExpiredTimeEnd { get; set; }
+
+        /// <summary>
+        /// 工单状态
+        /// </summary>
+        public EOrderStatus? Status { get; set; }
+
+        /// <summary>
+        /// 工单标题
+        /// </summary>
+        public string? Title { get; set; }
+
+        /// <summary>
+        /// 接办部门
+        /// </summary>
+        public string? CurrentHandleOrgName { get; set; }
+
+        /// <summary>
+        /// 接办时间
+        /// </summary>
+        public DateTime? CurrentHandleTimeStart { get; set; }
+        public DateTime? CurrentHandleTimeEnd { get; set; }
+
+        /// <summary>
+        /// 热点分类关键词
+        /// </summary>
+        public string? Hotspot { get; set; }
+
+        /// <summary>
+        /// 受理类型
+        /// </summary>
+        public string? AcceptTypeCode { get; set; }
+
+        /// <summary>
+        /// 催办人
+        /// </summary>
+        public string? CrUser { get; set; }
+
+        /// <summary>
+        /// 催办部门
+        /// </summary>
+        public string? CreatorOrgName { get; set; }
+
+        /// <summary>
+        /// 催办时间
+        /// </summary>
+        public DateTime? CrTimeStart { get; set; }
+        public DateTime? CrTimeEnd { get; set; }
+
+        /// <summary>
+        /// 被催办部门
+        /// </summary>
+        public string? OrgName { get; set; }
+
+        /// <summary>
+        /// 催办内容
+        /// </summary>
+        public string? ApplyContent { get; set; }
+
+        /// <summary>
+        /// 催办状态
+        /// </summary>
+        public int? CrState { get; set; }
+
     }
 
     public class QueryRepeatableEventDto
@@ -1066,15 +1345,16 @@ namespace Hotline.Share.Dtos.Order
     }
 
 
-    public record SeatSendBackStatisticsDetail : PagedKeywordRequest {
+    public record SeatSendBackStatisticsDetail : PagedKeywordRequest
+    {
 
 
         public string UserId { get; set; }
-		public string StatisticsType { get; set; }
+        public string StatisticsType { get; set; }
 
-		public string? No { get; set; }
+        public string? No { get; set; }
 
-		public string? Title { get; set; }
+        public string? Title { get; set; }
 
 
         /// <summary>
@@ -1096,7 +1376,7 @@ namespace Hotline.Share.Dtos.Order
     }
 
 
-	public enum EPublicState
+    public enum EPublicState
     {
         /// <summary>
         /// 全部

+ 261 - 200
src/Hotline.Share/Dtos/Order/SendBackDto.cs

@@ -12,207 +12,268 @@ using XF.Utility.EnumExtensions;
 
 namespace Hotline.Share.Dtos.Order
 {
-	public class AuditSendBackDto
-	{
-		public string Id { get; set; }
-
-		/// <summary>
-		///  审核结果
-		/// </summary>
-		public ESendBackAuditState State { get; set; }
-
-		/// <summary>
-		/// 审核意见
-		/// </summary>
-		public string? AuditContent { get; set; }
-
-
-			/// <summary>
-		/// 是否允许再次退回
-		/// </summary>
-		public bool? IsReturnAgain { get; set; }
-
-	}
-
-	public class BatchAuditSendBackDto : AuditSendBackDto {
-		public List<string> Ids { get; set; }
-	}
-	public class SendBackDto : SendBackBaseDto
-	{
-		/// <summary>
-		/// 工单ID
-		/// </summary>
-		public string OrderId { get; set; }
-
-
-		/// <summary>
-		/// 退回原因
-		/// </summary>
-		public string? Content { get; set; }
-
-		/// <summary>
-		/// 审批意见
-		/// </summary>
-		public string? AuditContent { get; set; }
-
-		/// <summary>
-		/// 工单
-		/// </summary>
-		public OrderDto Order { get; set; }
-
-		/// <summary>
-		/// 退回数据
-		/// </summary>
-		public PreviousWorkflowDto SendBackData { get; set; }
-
-		/// <summary>
-		/// 审批人ID
-		/// </summary>
-		public string? AuditId { get; set; }
-
-		public string? AuditUser { get; set; }
-
-
-		/// <summary>
-		/// 审批时间
-		/// </summary>
-		public DateTime? AuditTime { get; set; }
-
-		/// <summary>
-		/// 申请部门ID
-		/// </summary>
-		public string ApplyOrgId { get; set; }
-
-		/// <summary>
-		/// 申请部门名称
-		/// </summary>
-		public string ApplyOrgName { get; set; }
-
-		/// <summary>
-		/// 退回部门ID
-		/// </summary>
-		public string SendBackOrgId { get; set; }
-
-		/// <summary>
-		/// 退回部门名称
-		/// </summary>
-		public string SendBackOrgName { get; set; }
-
-		/// <summary>
-		///  审核结果  0  待审核  1 审核通过  2 审核不通过
-		/// </summary>
-		public ESendBackAuditState State { get; set; }
-
-		public string StateText => State.GetDescription();
-		/// <summary>
-		/// 退回节点名称
-		/// </summary>
-		public string? SendBackStepName { get; set; }
-
-		/// <summary>
-		/// 退回节点创建时间
-		/// </summary>
-		public DateTime? WorkflowStepSendBackCrTime { get; set; }
-
-		/// <summary>
-		///  退回时差
-		/// </summary>
-		public double SendBackTimeDifference => GetSendBackTimeDifference();
-
-		public double GetSendBackTimeDifference() {
-			if (WorkflowStepSendBackCrTime.HasValue)
-			{
-				TimeSpan? timeDifference = CreationTime - WorkflowStepSendBackCrTime;
-				return Math.Round(timeDifference.Value.TotalMinutes / 60, 1);
-			}
-			return 0;
-		}
-
-		public bool IsReturnAgainShow => ApplyOrgId != "001" && SendBackOrgId == "001";
-		/// <summary>
-		/// 附件列表
-		/// </summary>
-		public List<FileDto> Files { get; set; } = new();
-	}
-	public class SendBackBaseDto
-	{
-		public DateTime? LastModificationTime { get; set; }
-
-		public bool IsDeleted { get; set; }
-
-		/// <summary>
-		/// 删除时间
-		/// </summary>
-		public DateTime? DeletionTime { get; set; }
-
-
-		/// <summary>
-		/// 创建时间
-		/// </summary>
-		public DateTime CreationTime { get; set; }
-
-		public string Id { get; set; }
-
-		/// <summary>
-		/// 组织Id
-		/// </summary>
-		public string? CreatorOrgId { get; set; }
-
-
-		public string? CreatorOrgName { get; set; }
-
-		/// <summary>
-		/// 创建人
-		/// </summary>
-		public string? CreatorId { get; set; }
-
-		public string? CreatorName { get; set; }
-	}
-	public record SendBackListDto : PagedKeywordRequest
-	{
-		/// <summary>
-		/// </summary>
-		public ESendBackAuditState? State { get; set; }
-
-		/// <summary>
-		/// 1 待办  2 已办 3全部
-		/// </summary>
-		public int AuditState { get; set; }
-
-		/// <summary>
-		/// 0 全部  1 我的
-		/// </summary>
-		public int? DataScope { get; set; }
-
-		/// <summary>
-		/// 工单标题
-		/// </summary>
-		public string Title { get; set; }
-
-		/// <summary>
-		/// 工单编号
-		/// </summary>
-		public string No { get; set; }
-
-		/// <summary>
-		/// 受理类型
-		/// </summary>
-		public string? AcceptTypeCode { get; set; }
-
-		/// <summary>
-		/// 申请部门
-		/// </summary>
-		public string? OrgName { get; set; }
-
-		/// <summary>
-		/// 期满时间开始
-		/// </summary>
-		public DateTime? ExpiredTimeStart { get; set; }
-
-		/// <summary>
-		/// 期满时间结束
-		/// </summary>
+    public class AuditSendBackDto
+    {
+        public string Id { get; set; }
+
+        /// <summary>
+        ///  审核结果
+        /// </summary>
+        public ESendBackAuditState State { get; set; }
+
+        /// <summary>
+        /// 审核意见
+        /// </summary>
+        public string? AuditContent { get; set; }
+
+
+        /// <summary>
+        /// 是否允许再次退回
+        /// </summary>
+        public bool? IsReturnAgain { get; set; }
+
+    }
+
+    public class BatchAuditSendBackDto : AuditSendBackDto
+    {
+        public List<string> Ids { get; set; }
+    }
+    public class SendBackDto : SendBackBaseDto
+    {
+        /// <summary>
+        /// 工单ID
+        /// </summary>
+        public string OrderId { get; set; }
+
+
+        /// <summary>
+        /// 退回原因
+        /// </summary>
+        public string? Content { get; set; }
+
+        /// <summary>
+        /// 审批意见
+        /// </summary>
+        public string? AuditContent { get; set; }
+
+        /// <summary>
+        /// 工单
+        /// </summary>
+        public OrderDto Order { get; set; }
+
+        /// <summary>
+        /// 退回数据
+        /// </summary>
+        public PreviousWorkflowDto SendBackData { get; set; }
+
+        /// <summary>
+        /// 审批人ID
+        /// </summary>
+        public string? AuditId { get; set; }
+
+        public string? AuditUser { get; set; }
+
+
+        /// <summary>
+        /// 审批时间
+        /// </summary>
+        public DateTime? AuditTime { get; set; }
+
+        /// <summary>
+        /// 申请部门ID
+        /// </summary>
+        public string ApplyOrgId { get; set; }
+
+        /// <summary>
+        /// 申请部门名称
+        /// </summary>
+        public string ApplyOrgName { get; set; }
+
+        /// <summary>
+        /// 退回部门ID
+        /// </summary>
+        public string SendBackOrgId { get; set; }
+
+        /// <summary>
+        /// 退回部门名称
+        /// </summary>
+        public string SendBackOrgName { get; set; }
+
+        /// <summary>
+        ///  审核结果  0  待审核  1 审核通过  2 审核不通过
+        /// </summary>
+        public ESendBackAuditState State { get; set; }
+
+        public string StateText => State.GetDescription();
+        /// <summary>
+        /// 退回节点名称
+        /// </summary>
+        public string? SendBackStepName { get; set; }
+
+        /// <summary>
+        /// 退回节点创建时间
+        /// </summary>
+        public DateTime? WorkflowStepSendBackCrTime { get; set; }
+
+        /// <summary>
+        ///  退回时差
+        /// </summary>
+        public double SendBackTimeDifference => GetSendBackTimeDifference();
+
+        public double GetSendBackTimeDifference()
+        {
+            if (WorkflowStepSendBackCrTime.HasValue)
+            {
+                TimeSpan? timeDifference = CreationTime - WorkflowStepSendBackCrTime;
+                return Math.Round(timeDifference.Value.TotalMinutes / 60, 1);
+            }
+            return 0;
+        }
+
+        public bool IsReturnAgainShow => ApplyOrgId != "001" && SendBackOrgId == "001";
+        /// <summary>
+        /// 附件列表
+        /// </summary>
+        public List<FileDto> Files { get; set; } = new();
+    }
+    public class SendBackBaseDto
+    {
+        public DateTime? LastModificationTime { get; set; }
+
+        public bool IsDeleted { get; set; }
+
+        /// <summary>
+        /// 删除时间
+        /// </summary>
+        public DateTime? DeletionTime { get; set; }
+
+
+        /// <summary>
+        /// 创建时间
+        /// </summary>
+        public DateTime CreationTime { get; set; }
+
+        public string Id { get; set; }
+
+        /// <summary>
+        /// 组织Id
+        /// </summary>
+        public string? CreatorOrgId { get; set; }
+
+
+        public string? CreatorOrgName { get; set; }
+
+        /// <summary>
+        /// 创建人
+        /// </summary>
+        public string? CreatorId { get; set; }
+
+        public string? CreatorName { get; set; }
+    }
+    public record SendBackListDto : PagedKeywordRequest
+    {
+        /// <summary>
+        /// </summary>
+        public ESendBackAuditState? State { get; set; }
+
+        /// <summary>
+        /// 1 待办  2 已办 3全部
+        /// </summary>
+        public int AuditState { get; set; }
+
+        /// <summary>
+        /// 0 全部  1 我的
+        /// </summary>
+        public int? DataScope { get; set; }
+
+        /// <summary>
+        /// 工单标题
+        /// </summary>
+        public string Title { get; set; }
+
+        /// <summary>
+        /// 工单编号
+        /// </summary>
+        public string No { get; set; }
+
+        /// <summary>
+        /// 受理类型
+        /// </summary>
+        public string? AcceptTypeCode { get; set; }
+
+        /// <summary>
+        /// 申请部门
+        /// </summary>
+        public string? ApplyOrgName { get; set; }
+
+        /// <summary>
+        /// 期满时间开始
+        /// </summary>
+        public DateTime? ExpiredTimeStart { get; set; }
+
+        /// <summary>
+        /// 期满时间结束
+        /// </summary>
         public DateTime? ExpiredTimeEnd { get; set; }
 
+        /// <summary>
+        /// 是否省工单
+        /// </summary>
+        public bool? IsProvinceOrder { get; set; }
+
+        /// <summary>
+        /// 来源渠道
+        /// </summary>
+        public string? Channel { get; set; }
+
+        /// <summary>
+        /// 受理类型
+        /// </summary>
+        public string? AcceptType { get; set; }
+
+        /// <summary>
+        /// 热点分类关键词
+        /// </summary>
+        public string? Hotspot { get; set; }
+
+        /// <summary>
+        /// 最近派单员
+        /// </summary>
+        public string? CenterToOrgHandlerName { get; set; }
+
+        /// <summary>
+        /// 退回节点
+        /// </summary>
+        public string? SendBackStepName { get; set; }
+
+        /// <summary>
+        /// 退回时差
+        /// </summary>
+        public int? SendBackTimeDifference { get; set; }
+
+        /// <summary>
+        /// 受理人
+        /// </summary>
+        public string? NameOrNo { get; set; }
+
+        /// <summary>
+        /// 一级部门
+        /// </summary>
+        public string? OrgLevelOneName { get; set; }
+
+        /// <summary>
+        /// 受理内容
+        /// </summary>
+        public string? Content { get; set; }
+
+        /// <summary>
+        /// 申请人
+        /// </summary>
+        public string? ApplyName { get; set; }
+
+        /// <summary>
+        /// 申请理由
+        /// </summary>
+        public string? Opinion { get; set; }
     }
 }

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

@@ -1,5 +1,6 @@
 
 using Hotline.Share.Dtos.Order;
+using Hotline.Share.Enums.Order;
 using Hotline.Share.Enums.Quality;
 using Hotline.Share.Requests;
 using XF.Utility.EnumExtensions;
@@ -239,7 +240,7 @@ namespace Hotline.Share.Dtos.Quality
         public EQualityState? State { get; set; }
 
         /// <summary>
-        /// 质检状态
+        /// 质检来源
         /// </summary>
         public EQualitySource? Source { get; set; }
         public DateTime? CreationTimeStart { get; set; }
@@ -259,6 +260,58 @@ namespace Hotline.Share.Dtos.Quality
         /// 工单编码
         /// </summary>
         public string? No { get; set; }
+
+        /// <summary>
+        /// 质检方式
+        /// </summary>
+        public string? Mode { get; set; }
+
+        /// <summary>
+        /// 来源渠道
+        /// </summary>
+        public string? Channel { get; set; }
+
+        /// <summary>
+        /// 受理时间(工单创建时间)
+        /// </summary>
+        public DateTime? AcceptanceTimeStart { get; set; }
+        public DateTime? AcceptanceTimeEnd { get; set; }
+
+        /// <summary>
+        /// 工单状态
+        /// </summary>
+        public EOrderStatus? Status { get; set; }
+
+        /// <summary>
+        /// 受理类型
+        /// </summary>
+        public string? AcceptTypeCode { get; set; }
+
+        /// <summary>
+        /// 热点分类关键词
+        /// </summary>
+        public string? Hotspot { get; set; }
+
+        /// <summary>
+        /// 受理坐席名字或工号
+        /// </summary>
+        public string? NameOrNo { get; set; }
+
+        /// <summary>
+        /// 来电号码
+        /// </summary>
+        public string? FromPhone { get; set; }
+
+        /// <summary>
+        /// 质检人
+        /// </summary>
+        public string? UserName { get; set; }
+
+        /// <summary>
+        /// 质检时间
+        /// </summary>
+        public DateTime? QualityTimeStart { get; set; }
+        public DateTime? QualityTimeEnd { get; set; }
     }
 
     public class AiQualityXTDto

+ 167 - 134
src/Hotline.Share/Dtos/Quality/QualityItemDto.cs

@@ -9,138 +9,171 @@ using XF.Utility.EnumExtensions;
 
 namespace Hotline.Share.Dtos.Quality
 {
-	public class QualityItemAddDto
-	{
-		/// <summary>
-		/// 质检项目名称
-		/// </summary>
-		public string Name { get; set; }
-
-		/// <summary>
-		/// 质检项目描述
-		/// </summary>
-		public string? Describe { get; set; }
-
-		/// <summary>
-		/// 质检项目分组名称
-		/// </summary>
-		public string GroupingName { get; set; }
-
-		/// <summary>
-		/// 是否智能质检项目
-		/// </summary>
-		public int IsIntelligent { get; set; }
-
-		/// <summary>
-		/// 分值
-		/// </summary>
-		public int Grade { get; set; }
-
-		/// <summary>
-		/// 启禁用
-		/// </summary>
-		public int IsEnable { get; set; }
-	}
-	public class QualityItemDeleteDto
-	{
-		public string Id { get; set; }
-	}
-	public class QualityItemBatchDeleteDto
-	{
-		public List<string> Ids { get; set; }
-	}
-	public class QualityItemUpdateDto : QualityItemAddDto
-	{
-		public string Id { get; set; }
-	}
-	public record QualityItemListDto : PagedKeywordRequest
-	{
-		/// <summary>
-		/// 质检项目名称
-		/// </summary>
-		public string? Name { get; set; }
-
-		/// <summary>
-		/// 质检项目分组名称
-		/// </summary>
-		public string? GroupingName { get; set; }
-
-		/// <summary>
-		/// 启禁用
-		/// </summary>
-		public int? IsEnable { get; set; }
-	}
-	public class QualityItemBaseDto
-	{
-		public DateTime? LastModificationTime { get; set; }
-
-		public bool IsDeleted { get; set; }
-
-		/// <summary>
-		/// 删除时间
-		/// </summary>
-		public DateTime? DeletionTime { get; set; }
-
-
-		/// <summary>
-		/// 创建时间
-		/// </summary>
-		public DateTime CreationTime { get; set; }
-
-		public string Id { get; set; }
-
-		/// <summary>
-		/// 组织Id
-		/// </summary>
-		public string? CreatorOrgId { get; set; }
-
-
-		public string? CreatorOrgName { get; set; }
-
-		/// <summary>
-		/// 创建人
-		/// </summary>
-		public string? CreatorId { get; set; }
-
-		public string? CreatorName { get; set; }
-	}
-
-	public class QualityItemDto : QualityItemBaseDto
-	{
-		/// <summary>
-		/// 质检项目名称
-		/// </summary>
-		public string Name { get; set; }
-
-		/// <summary>
-		/// 质检项目描述
-		/// </summary>
-		public string? Describe { get; set; }
-
-		/// <summary>
-		/// 质检项目分组名称
-		/// </summary>
-		public string GroupingName { get; set; }
-
-		/// <summary>
-		/// 是否智能质检项目
-		/// </summary>
-		public int IsIntelligent { get; set; }
-
-		/// <summary>
-		/// 分值
-		/// </summary>
-		public int Grade { get; set; }
-
-		/// <summary>
-		/// 启禁用
-		/// </summary>
-		public int IsEnable { get; set; }
-
-		/// <summary>
-		/// 最近更新人
-		/// </summary>
-		public string? LastModificationName { get; set; }
-
-	}
+    public class QualityItemAddDto
+    {
+        /// <summary>
+        /// 质检项目名称
+        /// </summary>
+        public string Name { get; set; }
+
+        /// <summary>
+        /// 质检项目描述
+        /// </summary>
+        public string? Describe { get; set; }
+
+        /// <summary>
+        /// 质检项目分组名称
+        /// </summary>
+        public string GroupingName { get; set; }
+
+        /// <summary>
+        /// 是否智能质检项目
+        /// </summary>
+        public int IsIntelligent { get; set; }
+
+        /// <summary>
+        /// 分值
+        /// </summary>
+        public int Grade { get; set; }
+
+        /// <summary>
+        /// 启禁用
+        /// </summary>
+        public int IsEnable { get; set; }
+    }
+    public class QualityItemDeleteDto
+    {
+        public string Id { get; set; }
+    }
+    public class QualityItemBatchDeleteDto
+    {
+        public List<string> Ids { get; set; }
+    }
+    public class QualityItemUpdateDto : QualityItemAddDto
+    {
+        public string Id { get; set; }
+    }
+    public record QualityItemListDto : PagedKeywordRequest
+    {
+        /// <summary>
+        /// 质检项目名称
+        /// </summary>
+        public string? Name { get; set; }
+
+        /// <summary>
+        /// 质检项目分组名称
+        /// </summary>
+        public string? GroupingName { get; set; }
+
+        /// <summary>
+        /// 启禁用
+        /// </summary>
+        public int? IsEnable { get; set; }
+
+        /// <summary>
+        /// 质检项目描述
+        /// </summary>
+        public string? Describe { get; set; }
+
+        /// <summary>
+        /// 分值
+        /// </summary>
+        public int? MaxGrade { get; set; }
+        public int? MinGrade { get; set; }
+
+        /// <summary>
+        /// 创建人
+        /// </summary>
+        public string? CreatorName { get; set; }
+
+        /// <summary>
+        /// 创建时间
+        /// </summary>
+        public DateTime? CreationTimeStart { get; set; }
+        public DateTime? CreationTimeEnd { get; set; }
+
+        /// <summary>
+        /// 更新人
+        /// </summary>
+        public string? LastModificationName { get; set; }
+
+        /// <summary>
+        /// 更新时间
+        /// </summary>
+        public DateTime? LastModificationTimeStart { get; set; }
+        public DateTime? LastModificationTimeEnd { get; set; }
+    }
+    public class QualityItemBaseDto
+    {
+        public DateTime? LastModificationTime { get; set; }
+
+        public bool IsDeleted { get; set; }
+
+        /// <summary>
+        /// 删除时间
+        /// </summary>
+        public DateTime? DeletionTime { get; set; }
+
+
+        /// <summary>
+        /// 创建时间
+        /// </summary>
+        public DateTime CreationTime { get; set; }
+
+        public string Id { get; set; }
+
+        /// <summary>
+        /// 组织Id
+        /// </summary>
+        public string? CreatorOrgId { get; set; }
+
+
+        public string? CreatorOrgName { get; set; }
+
+        /// <summary>
+        /// 创建人
+        /// </summary>
+        public string? CreatorId { get; set; }
+
+        public string? CreatorName { get; set; }
+    }
+
+    public class QualityItemDto : QualityItemBaseDto
+    {
+        /// <summary>
+        /// 质检项目名称
+        /// </summary>
+        public string Name { get; set; }
+
+        /// <summary>
+        /// 质检项目描述
+        /// </summary>
+        public string? Describe { get; set; }
+
+        /// <summary>
+        /// 质检项目分组名称
+        /// </summary>
+        public string GroupingName { get; set; }
+
+        /// <summary>
+        /// 是否智能质检项目
+        /// </summary>
+        public int IsIntelligent { get; set; }
+
+        /// <summary>
+        /// 分值
+        /// </summary>
+        public int Grade { get; set; }
+
+        /// <summary>
+        /// 启禁用
+        /// </summary>
+        public int IsEnable { get; set; }
+
+        /// <summary>
+        /// 最近更新人
+        /// </summary>
+        public string? LastModificationName { get; set; }
+
+    }
 }

+ 23 - 1
src/Hotline.Share/Dtos/Quality/QualityTemplateDto.cs

@@ -62,7 +62,29 @@ namespace Hotline.Share.Dtos.Quality
 		/// 启禁用
 		/// </summary>
 		public int? IsEnable { get; set; }
-	}
+
+        /// <summary>
+        /// 创建人
+        /// </summary>
+        public string? CreatorName { get; set; }
+
+        /// <summary>
+        /// 创建时间
+        /// </summary>
+        public DateTime? CreationTimeStart { get; set; }
+        public DateTime? CreationTimeEnd { get; set; }
+
+        /// <summary>
+        /// 更新人
+        /// </summary>
+        public string? LastModificationName { get; set; }
+
+        /// <summary>
+        /// 更新时间
+        /// </summary>
+        public DateTime? LastModificationTimeStart { get; set; }
+        public DateTime? LastModificationTimeEnd { get; set; }
+    }
 	public class TemplateBaseDto
 	{
 		public DateTime? LastModificationTime { get; set; }