Browse Source

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

xf 6 months ago
parent
commit
184dc0cefc

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

@@ -2818,9 +2818,7 @@ public class OrderController : BaseController
     {
     {
         var hasSetting = Int32.TryParse(
         var hasSetting = Int32.TryParse(
             _systemSettingCacheManager.GetSetting(SettingConstants.FixedQueryCount)?.SettingValue[0], out var queryCount);
             _systemSettingCacheManager.GetSetting(SettingConstants.FixedQueryCount)?.SettingValue[0], out var queryCount);
-        var query = _orderApplication.QueryOrders(dto);
-        var orders = await query.ToFixedListAsync(dto.QueryIndex, hasSetting ? queryCount : null, HttpContext.RequestAborted);
-        return _mapper.Map<IReadOnlyList<OrderDto>>(orders);
+        return await _orderApplication.QueryOrdersAsync(dto,  hasSetting ? queryCount : 50);
     }
     }
 
 
     /// <summary>
     /// <summary>

+ 1 - 0
src/Hotline.Application/Orders/IOrderApplication.cs

@@ -116,6 +116,7 @@ namespace Hotline.Application.Orders
         #region 工单办理
         #region 工单办理
 
 
         ISugarQueryable<Order> QueryOrders(QueryOrderDto dto);
         ISugarQueryable<Order> QueryOrders(QueryOrderDto dto);
+        Task<List<OrderDto>> QueryOrdersAsync(QueryOrderDto dto, int queryCount);
 
 
         /// <summary>
         /// <summary>
         /// 保存工单办理时页面填写的数据
         /// 保存工单办理时页面填写的数据

+ 175 - 142
src/Hotline.Application/Orders/OrderApplication.cs

@@ -83,7 +83,7 @@ public class OrderApplication : IOrderApplication, IScopeDependency
     private readonly IOrderDomainService _orderDomainService;
     private readonly IOrderDomainService _orderDomainService;
     private readonly IWorkflowDomainService _workflowDomainService;
     private readonly IWorkflowDomainService _workflowDomainService;
     private readonly ISessionContext _sessionContext;
     private readonly ISessionContext _sessionContext;
-	private readonly IOrderRepository _orderRepository;
+    private readonly IOrderRepository _orderRepository;
 
 
     //private readonly ITimeLimitDomainService _timeLimitDomainService;
     //private readonly ITimeLimitDomainService _timeLimitDomainService;
     private readonly IMapper _mapper;
     private readonly IMapper _mapper;
@@ -111,7 +111,7 @@ public class OrderApplication : IOrderApplication, IScopeDependency
     private readonly IOrderTerminateRepository _orderTerminateRepository;
     private readonly IOrderTerminateRepository _orderTerminateRepository;
     private readonly IRepository<OrderPublishHistory> _orderPublishHistoryRepository;
     private readonly IRepository<OrderPublishHistory> _orderPublishHistoryRepository;
 
 
-	public OrderApplication(
+    public OrderApplication(
         IOrderDomainService orderDomainService,
         IOrderDomainService orderDomainService,
         IOrderRepository orderRepository,
         IOrderRepository orderRepository,
         IWorkflowDomainService workflowDomainService,
         IWorkflowDomainService workflowDomainService,
@@ -185,7 +185,7 @@ public class OrderApplication : IOrderApplication, IScopeDependency
         _orderTerminateRepository = orderTerminateRepository;
         _orderTerminateRepository = orderTerminateRepository;
         _orderPublishHistoryRepository = orderPublishHistoryRepository;
         _orderPublishHistoryRepository = orderPublishHistoryRepository;
         _sessionContext = sessionContext;
         _sessionContext = sessionContext;
-	}
+    }
 
 
     /// <summary>
     /// <summary>
     /// 更新工单办理期满时间(延期调用,其他不调用)
     /// 更新工单办理期满时间(延期调用,其他不调用)
@@ -961,6 +961,35 @@ public class OrderApplication : IOrderApplication, IScopeDependency
         }
         }
     }
     }
 
 
+    public async Task<List<OrderDto>> QueryOrdersAsync(QueryOrderDto dto, int queryIndex)
+    {
+        var query = QueryOrders(dto);
+        var items = await query.ToFixedListAsync(queryIndex);
+        var dtoItems = new List<OrderDto>();
+        foreach (var item in items)
+        {
+            var orderDto = item.Adapt<OrderDto>();
+            var visitEntity = item.OrderVisits
+                            .OrderByDescending(m => m.CreationTime)
+                            .FirstOrDefault();
+            if (visitEntity != null)
+            {
+                var now = visitEntity?.NowEvaluate;
+                if (now != null) 
+                {
+                    orderDto.OrgEvaluate = now;
+                    orderDto.OrgEvaluateValue = now.Value;
+                }
+                orderDto.SeatEvaluate = visitEntity.OrderVisitDetails.Where(m => m.VisitTarget == EVisitTarget.Seat)
+                    .FirstOrDefault()?.SeatEvaluate;
+            }
+
+            orderDto.OrderVisits = null;
+            dtoItems.Add(orderDto);
+        }
+        return dtoItems;
+    }
+
     public ISugarQueryable<Order> QueryOrders(QueryOrderDto dto)
     public ISugarQueryable<Order> QueryOrders(QueryOrderDto dto)
     {
     {
         var isCenter = _sessionContextProvider.SessionContext.OrgIsCenter;
         var isCenter = _sessionContextProvider.SessionContext.OrgIsCenter;
@@ -978,75 +1007,78 @@ public class OrderApplication : IOrderApplication, IScopeDependency
         }
         }
 
 
         return query
         return query
-            .Includes(x => x.OrderScreens)
-            .WhereIF(!string.IsNullOrEmpty(dto.Keyword), d => d.Title.Contains(dto.Keyword!)) //标题
-            .WhereIF(!string.IsNullOrEmpty(dto.ProvinceNo), d => d.ProvinceNo == dto.ProvinceNo) //省本地编号
-            .WhereIF(!string.IsNullOrEmpty(dto.ReceiveProvinceNo), d => d.ReceiveProvinceNo == dto.ReceiveProvinceNo) //省编号
-            .WhereIF(!string.IsNullOrEmpty(dto.No), d => d.No == dto.No) //工单编码
-            .WhereIF(!string.IsNullOrEmpty(dto.AcceptType), d => d.AcceptTypeCode == dto.AcceptType) //受理类型
-                                                                                                     //.WhereIF(dto.AcceptTypes.Any(), d => dto.AcceptTypes.Contains(d.AcceptTypeCode)) //受理类型
-            .WhereIF(!string.IsNullOrEmpty(dto.Channel), d => d.SourceChannelCode == dto.Channel)
-            //.WhereIF(dto.Channels.Any(), d => dto.Channels.Contains(d.SourceChannelCode)) //来源渠道
-            //.WhereIF(dto.HotspotIds.Any(), d => dto.HotspotIds.Contains(d.HotspotId)) //热点类型
-            .WhereIF(!string.IsNullOrEmpty(dto.Hotspot), d => d.HotspotSpliceName != null && d.HotspotSpliceName.Contains(dto.Hotspot))
-            .WhereIF(!string.IsNullOrEmpty(dto.TransferPhone), d => d.TransferPhone == dto.TransferPhone!) //转接号码
-                                                                                                           //.WhereIF(dto.OrgCodes.Any(), d => d.Workflow.Assigns.Any(s => dto.OrgCodes.Contains(s.OrgCode)))
-                                                                                                           //.WhereIF(dto.OrgCodes.Any(), d => dto.OrgCodes.Contains(d.ActualHandleOrgCode)) //接办部门
-                                                                                                           //.WhereIF(!string.IsNullOrEmpty(dto.OrgId), d => d.CurrentHandleOrgId == dto.OrgId)//接办部门
-            .WhereIF(!string.IsNullOrEmpty(dto.OrgLevelOneName), d => d.OrgLevelOneName.Contains(dto.OrgLevelOneName)) //一级部门
-            .WhereIF(!string.IsNullOrEmpty(dto.ActualHandleOrgName), d => d.ActualHandleOrgName.Contains(dto.ActualHandleOrgName)) //接办部门(综合查询模糊)
-            .WhereIF(!string.IsNullOrEmpty(dto.NameOrNo), d => d.AcceptorName == dto.NameOrNo! || d.AcceptorStaffNo == dto.NameOrNo!) //受理人/坐席
-            .WhereIF(dto.CreationTimeStart.HasValue, d => d.CreationTime >= dto.CreationTimeStart) //受理时间开始
-            .WhereIF(dto.CreationTimeEnd.HasValue, d => d.CreationTime <= dto.CreationTimeEnd) //受理时间结束
-                                                                                               //.WhereIF(dto.EmergencyLevels.Any(), d => dto.EmergencyLevels.Contains(d.EmergencyLevel))  //紧急程度
-            .WhereIF(!string.IsNullOrEmpty(dto.FromPhone), d => d.FromPhone == dto.FromPhone) //来电号码
-            .WhereIF(!string.IsNullOrEmpty(dto.PhoneNo), d => d.Contact == dto.PhoneNo!) //联系电话
-                                                                                         //.WhereIF(!string.IsNullOrEmpty(dto.PushTypeCode), d => d.PushTypeCode == dto.PushTypeCode) //推送分类
-            .WhereIF(!string.IsNullOrEmpty(dto.PushTypeCode), x => x.OrderPushTypes.Any(opt => opt.PushTypeCode == dto.PushTypeCode)) //推送分类
-            .WhereIF(dto.ExpiredTimeStart.HasValue, d => d.ExpiredTime >= dto.ExpiredTimeStart) //超期时间开始
-            .WhereIF(dto.ExpiredTimeEnd.HasValue, d => d.ExpiredTime <= dto.ExpiredTimeEnd) //超期时间结束
-                                                                                            //.WhereIF(dto.Statuses.Any(), d => dto.Statuses.Contains(d.Status))  //工单状态
-            .WhereIF(dto.Status.HasValue, d => d.Status == dto.Status) //工单状态
-                                                                       //.WhereIF(dto.Statuses.Any(d => d == EOrderStatus.SpecialToUnAccept), d => d.Status <= EOrderStatus.SpecialToUnAccept)
-            .WhereIF(!string.IsNullOrEmpty(dto.ActualHandlerName), d => d.ActualHandlerName == dto.ActualHandlerName) //接办人
-            .WhereIF(dto.IsScreen == true, d => d.OrderScreens.Any(x => x.Status != EScreenStatus.Refuse)) //有甄别
-            .WhereIF(dto.IsScreen == false, d => !d.OrderScreens.Any(x => x.Status != EScreenStatus.Refuse)) //无甄别
-            .WhereIF(!string.IsNullOrEmpty(dto.CurrentStepCode), d => d.CurrentStepCode == dto.CurrentStepCode) //当前办理节点
-            .WhereIF(dto.ActualHandleTimeStart.HasValue, d => d.ActualHandleTime >= dto.ActualHandleTimeStart) //办结时间开始
-            .WhereIF(dto.ActualHandleTimeEnd.HasValue, d => d.ActualHandleTime <= dto.ActualHandleTimeEnd) //办结时间结束
-            .WhereIF(dto.IsOverTime == true,
-                d => (d.ExpiredTime < DateTime.Now && d.Status < EOrderStatus.Filed) ||
-                     (d.ExpiredTime < d.ActualHandleTime && d.Status >= EOrderStatus.Filed)) //是 超期
-            .WhereIF(dto.IsOverTime == false,
-                d => (d.ExpiredTime > DateTime.Now && d.Status < EOrderStatus.Filed) ||
-                     (d.ExpiredTime > d.ActualHandleTime && d.Status >= EOrderStatus.Filed)) //否 超期
-            .WhereIF(dto.IdentityType != null, d => d.IdentityType == dto.IdentityType) //来电主体
-            .WhereIF(!string.IsNullOrEmpty(dto.FromName), d => d.FromName == dto.FromName) //来电人姓名
-                                                                                           //.WhereIF(dto.AreaCodes.Any(), d => dto.AreaCodes.Contains(d.AreaCode)) //区域
-                                                                                           //.WhereIF(!string.IsNullOrEmpty(dto.AreaCode), d => d.AreaCode == dto.AreaCode)//区域
-            .WhereIF(!string.IsNullOrEmpty(dto.AreaCode) && dto.AreaCode.LastIndexOf("00") > 0,
-                d => d.AreaCode.StartsWith(SqlFunc.Substring(dto.AreaCode, 0, 4)))
-            .WhereIF(!string.IsNullOrEmpty(dto.AreaCode) && dto.AreaCode.LastIndexOf("00") <= 0, d => d.AreaCode.StartsWith(dto.AreaCode))
-            .WhereIF(dto.IsProvinceOrder.HasValue && dto.IsProvinceOrder == true, d => d.Source == ESource.ProvinceStraight)
-            .WhereIF(dto.IsProvinceOrder.HasValue && dto.IsProvinceOrder == false, d => d.Source != ESource.ProvinceStraight)
-            .WhereIF(!string.IsNullOrEmpty(dto.SensitiveWord), d => SqlFunc.JsonArrayAny(d.Sensitive, dto.SensitiveWord))
-            .WhereIF(dto.IsSensitiveWord.HasValue && dto.IsSensitiveWord == true,
-                d => d.Sensitive != null && SqlFunc.JsonArrayLength(d.Sensitive) > 0)
-            .WhereIF(dto.IsUrgent.HasValue, d => d.IsUrgent == dto.IsUrgent.Value)
-            .WhereIF(!string.IsNullOrEmpty(dto.ProvinceChannel) && dto.ProvinceChannel == "1", d => d.Source == ESource.ProvinceStraight &&
-                d.SourceChannelCode == "SZMHD" && d.IsProvince == false) //政民互动直派
-            .WhereIF(!string.IsNullOrEmpty(dto.ProvinceChannel) && dto.ProvinceChannel == "2", d => d.Source == ESource.ProvinceStraight &&
-                d.SourceChannelCode == "SZMHD" && d.IsProvince == true) //政民互动
-            .WhereIF(!string.IsNullOrEmpty(dto.ProvinceChannel) && dto.ProvinceChannel == "3", d => d.Source == ESource.ProvinceStraight &&
-                d.SourceChannelCode == "S12345" && d.IsProvince == true) //省12345
-            .WhereIF(!string.IsNullOrEmpty(dto.ContentRetrieval),
-                d => d.Title.Contains(dto.ContentRetrieval) || d.Content.Contains(dto.ContentRetrieval) || d.FileOpinion.Contains(dto.ContentRetrieval) || d.ActualOpinion.Contains(dto.ContentRetrieval))
-            .WhereIF(dto.IsSgin.HasValue && dto.IsSgin == true, d => d.CurrentStepAcceptTime!=null)
-            .WhereIF(dto.IsSgin.HasValue && dto.IsSgin == false, d => d.CurrentStepAcceptTime == null)
-            .WhereIF(dto.FiledType is FiledType.CenterFiled, d => d.ProcessType == EProcessType.Zhiban)
-            .WhereIF(dto.FiledType is FiledType.OrgFiled, d => d.ProcessType == EProcessType.Jiaoban)
-            .WhereIF(!string.IsNullOrEmpty(dto.OrderTagCode),d=>d.OrderTagCode == dto.OrderTagCode)
-            .OrderByDescending(d => d.CreationTime);
+             .Includes(x => x.OrderScreens)
+             .Includes(x => x.OrderVisits.Where(m => m.VisitState == EVisitState.Visited).ToList())
+             .Includes(x => x.OrderVisits.Where(m => m.VisitState == EVisitState.Visited).ToList(), ovd => ovd.OrderVisitDetails)
+             .WhereIF(!string.IsNullOrEmpty(dto.Keyword), d => d.Title.Contains(dto.Keyword!)) //标题
+             .WhereIF(!string.IsNullOrEmpty(dto.ProvinceNo), d => d.ProvinceNo == dto.ProvinceNo) //省本地编号
+             .WhereIF(!string.IsNullOrEmpty(dto.ReceiveProvinceNo), d => d.ReceiveProvinceNo == dto.ReceiveProvinceNo) //省编号
+             .WhereIF(!string.IsNullOrEmpty(dto.No), d => d.No == dto.No) //工单编码
+             .WhereIF(!string.IsNullOrEmpty(dto.AcceptType), d => d.AcceptTypeCode == dto.AcceptType) //受理类型
+                                                                                                      //.WhereIF(dto.AcceptTypes.Any(), d => dto.AcceptTypes.Contains(d.AcceptTypeCode)) //受理类型
+             .WhereIF(!string.IsNullOrEmpty(dto.Channel), d => d.SourceChannelCode == dto.Channel)
+             //.WhereIF(dto.Channels.Any(), d => dto.Channels.Contains(d.SourceChannelCode)) //来源渠道
+             //.WhereIF(dto.HotspotIds.Any(), d => dto.HotspotIds.Contains(d.HotspotId)) //热点类型
+             .WhereIF(!string.IsNullOrEmpty(dto.Hotspot), d => d.HotspotSpliceName != null && d.HotspotSpliceName.Contains(dto.Hotspot))
+             .WhereIF(!string.IsNullOrEmpty(dto.TransferPhone), d => d.TransferPhone == dto.TransferPhone!) //转接号码
+                                                                                                            //.WhereIF(dto.OrgCodes.Any(), d => d.Workflow.Assigns.Any(s => dto.OrgCodes.Contains(s.OrgCode)))
+                                                                                                            //.WhereIF(dto.OrgCodes.Any(), d => dto.OrgCodes.Contains(d.ActualHandleOrgCode)) //接办部门
+                                                                                                            //.WhereIF(!string.IsNullOrEmpty(dto.OrgId), d => d.CurrentHandleOrgId == dto.OrgId)//接办部门
+             .WhereIF(!string.IsNullOrEmpty(dto.OrgLevelOneName), d => d.OrgLevelOneName.Contains(dto.OrgLevelOneName)) //一级部门
+             .WhereIF(!string.IsNullOrEmpty(dto.ActualHandleOrgName), d => d.ActualHandleOrgName.Contains(dto.ActualHandleOrgName)) //接办部门(综合查询模糊)
+             .WhereIF(!string.IsNullOrEmpty(dto.NameOrNo), d => d.AcceptorName == dto.NameOrNo! || d.AcceptorStaffNo == dto.NameOrNo!) //受理人/坐席
+             .WhereIF(dto.CreationTimeStart.HasValue, d => d.CreationTime >= dto.CreationTimeStart) //受理时间开始
+             .WhereIF(dto.CreationTimeEnd.HasValue, d => d.CreationTime <= dto.CreationTimeEnd) //受理时间结束
+                                                                                                //.WhereIF(dto.EmergencyLevels.Any(), d => dto.EmergencyLevels.Contains(d.EmergencyLevel))  //紧急程度
+             .WhereIF(!string.IsNullOrEmpty(dto.FromPhone), d => d.FromPhone == dto.FromPhone) //来电号码
+             .WhereIF(!string.IsNullOrEmpty(dto.PhoneNo), d => d.Contact == dto.PhoneNo!) //联系电话
+                                                                                          //.WhereIF(!string.IsNullOrEmpty(dto.PushTypeCode), d => d.PushTypeCode == dto.PushTypeCode) //推送分类
+             .WhereIF(!string.IsNullOrEmpty(dto.PushTypeCode), x => x.OrderPushTypes.Any(opt => opt.PushTypeCode == dto.PushTypeCode)) //推送分类
+             .WhereIF(dto.ExpiredTimeStart.HasValue, d => d.ExpiredTime >= dto.ExpiredTimeStart) //超期时间开始
+             .WhereIF(dto.ExpiredTimeEnd.HasValue, d => d.ExpiredTime <= dto.ExpiredTimeEnd) //超期时间结束
+                                                                                             //.WhereIF(dto.Statuses.Any(), d => dto.Statuses.Contains(d.Status))  //工单状态
+             .WhereIF(dto.Status.HasValue, d => d.Status == dto.Status) //工单状态
+                                                                        //.WhereIF(dto.Statuses.Any(d => d == EOrderStatus.SpecialToUnAccept), d => d.Status <= EOrderStatus.SpecialToUnAccept)
+             .WhereIF(!string.IsNullOrEmpty(dto.ActualHandlerName), d => d.ActualHandlerName == dto.ActualHandlerName) //接办人
+             .WhereIF(dto.IsScreen == true, d => d.OrderScreens.Any(x => x.Status != EScreenStatus.Refuse)) //有甄别
+             .WhereIF(dto.IsScreen == false, d => !d.OrderScreens.Any(x => x.Status != EScreenStatus.Refuse)) //无甄别
+             .WhereIF(!string.IsNullOrEmpty(dto.CurrentStepCode), d => d.CurrentStepCode == dto.CurrentStepCode) //当前办理节点
+             .WhereIF(dto.ActualHandleTimeStart.HasValue, d => d.ActualHandleTime >= dto.ActualHandleTimeStart) //办结时间开始
+             .WhereIF(dto.ActualHandleTimeEnd.HasValue, d => d.ActualHandleTime <= dto.ActualHandleTimeEnd) //办结时间结束
+             .WhereIF(dto.IsOverTime == true,
+                 d => (d.ExpiredTime < DateTime.Now && d.Status < EOrderStatus.Filed) ||
+                      (d.ExpiredTime < d.ActualHandleTime && d.Status >= EOrderStatus.Filed)) //是 超期
+             .WhereIF(dto.IsOverTime == false,
+                 d => (d.ExpiredTime > DateTime.Now && d.Status < EOrderStatus.Filed) ||
+                      (d.ExpiredTime > d.ActualHandleTime && d.Status >= EOrderStatus.Filed)) //否 超期
+             .WhereIF(dto.IdentityType != null, d => d.IdentityType == dto.IdentityType) //来电主体
+             .WhereIF(!string.IsNullOrEmpty(dto.FromName), d => d.FromName == dto.FromName) //来电人姓名
+                                                                                            //.WhereIF(dto.AreaCodes.Any(), d => dto.AreaCodes.Contains(d.AreaCode)) //区域
+                                                                                            //.WhereIF(!string.IsNullOrEmpty(dto.AreaCode), d => d.AreaCode == dto.AreaCode)//区域
+             .WhereIF(!string.IsNullOrEmpty(dto.AreaCode) && dto.AreaCode.LastIndexOf("00") > 0,
+                 d => d.AreaCode.StartsWith(SqlFunc.Substring(dto.AreaCode, 0, 4)))
+             .WhereIF(!string.IsNullOrEmpty(dto.AreaCode) && dto.AreaCode.LastIndexOf("00") <= 0, d => d.AreaCode.StartsWith(dto.AreaCode))
+             .WhereIF(dto.IsProvinceOrder.HasValue && dto.IsProvinceOrder == true, d => d.Source == ESource.ProvinceStraight)
+             .WhereIF(dto.IsProvinceOrder.HasValue && dto.IsProvinceOrder == false, d => d.Source != ESource.ProvinceStraight)
+             .WhereIF(!string.IsNullOrEmpty(dto.SensitiveWord), d => SqlFunc.JsonArrayAny(d.Sensitive, dto.SensitiveWord))
+             .WhereIF(dto.IsSensitiveWord.HasValue && dto.IsSensitiveWord == true,
+                 d => d.Sensitive != null && SqlFunc.JsonArrayLength(d.Sensitive) > 0)
+             .WhereIF(dto.IsUrgent.HasValue, d => d.IsUrgent == dto.IsUrgent.Value)
+             .WhereIF(!string.IsNullOrEmpty(dto.ProvinceChannel) && dto.ProvinceChannel == "1", d => d.Source == ESource.ProvinceStraight &&
+                 d.SourceChannelCode == "SZMHD" && d.IsProvince == false) //政民互动直派
+             .WhereIF(!string.IsNullOrEmpty(dto.ProvinceChannel) && dto.ProvinceChannel == "2", d => d.Source == ESource.ProvinceStraight &&
+                 d.SourceChannelCode == "SZMHD" && d.IsProvince == true) //政民互动
+             .WhereIF(!string.IsNullOrEmpty(dto.ProvinceChannel) && dto.ProvinceChannel == "3", d => d.Source == ESource.ProvinceStraight &&
+                 d.SourceChannelCode == "S12345" && d.IsProvince == true) //省12345
+             .WhereIF(!string.IsNullOrEmpty(dto.ContentRetrieval),
+                 d => d.Title.Contains(dto.ContentRetrieval) || d.Content.Contains(dto.ContentRetrieval) || d.FileOpinion.Contains(dto.ContentRetrieval) || d.ActualOpinion.Contains(dto.ContentRetrieval))
+             .WhereIF(dto.IsSgin.HasValue && dto.IsSgin == true, d => d.CurrentStepAcceptTime != null)
+             .WhereIF(dto.IsSgin.HasValue && dto.IsSgin == false, d => d.CurrentStepAcceptTime == null)
+             .WhereIF(dto.FiledType is FiledType.CenterFiled, d => d.ProcessType == EProcessType.Zhiban)
+             .WhereIF(dto.FiledType is FiledType.OrgFiled, d => d.ProcessType == EProcessType.Jiaoban)
+             .WhereIF(!string.IsNullOrEmpty(dto.OrderTagCode), d => d.OrderTagCode == dto.OrderTagCode)
+             .OrderByDescending(d => d.CreationTime);
+
     }
     }
 
 
     /// <summary>
     /// <summary>
@@ -2267,41 +2299,42 @@ public class OrderApplication : IOrderApplication, IScopeDependency
     }
     }
 
 
     #region 甄别
     #region 甄别
-    public ISugarQueryable<OrderScreen> OrderScreenList(ScreenListDto dto) {
-	    var handler = dto.TabStatus is EScreenStatus.Apply;
-	    var isAdmin = _orderDomainService.IsCheckAdmin();
-		ISugarQueryable<OrderScreen> query;
-
-		if (dto.source == 1)
-		{
-			query = _orderScreenRepository.Queryable(hasHandled: !handler, isAdmin: isAdmin);
-		}
-		else
-		{
-			query = _orderScreenRepository.Queryable(isAdmin: isAdmin)
-				.WhereIF(!isAdmin, x => x.CreatorOrgId.StartsWith(_sessionContext.RequiredOrgId));
-		}
-
-		query = query
-			.Includes(d => d.Order)
-			.Includes(d => d.VisitDetail)
-			.Includes(d => d.Visit, v => v.Order)
-			.Includes(d => d.Workflow)
-			.Includes(d => d.ScreenDetails.Where(sd => sd.AuditUserId == _sessionContext.UserId).OrderByDescending(sd => sd.AuditTime).Take(1)
-				.ToList())
-			.WhereIF(!string.IsNullOrEmpty(dto.Title), d => d.Visit.Order.Title.Contains(dto.Title!))
-			.WhereIF(!string.IsNullOrEmpty(dto.No), d => d.Visit.Order.No.Contains(dto.No!));
-		if (dto.TabStatus is EScreenStatus.Apply)
-		{
-			query.Where(d =>
-				(d.Status == EScreenStatus.Apply || d.Status == EScreenStatus.Approval ||
-				 (d.Status == EScreenStatus.SendBack && d.SendBackApply == false)));
-		}
-
-		if (dto.TabStatus.HasValue && dto.Status == EScreenStatus.MyHandle)
-		{
-			query.Where(d => (d.Status != EScreenStatus.Apply));
-		}
+    public ISugarQueryable<OrderScreen> OrderScreenList(ScreenListDto dto)
+    {
+        var handler = dto.TabStatus is EScreenStatus.Apply;
+        var isAdmin = _orderDomainService.IsCheckAdmin();
+        ISugarQueryable<OrderScreen> query;
+
+        if (dto.source == 1)
+        {
+            query = _orderScreenRepository.Queryable(hasHandled: !handler, isAdmin: isAdmin);
+        }
+        else
+        {
+            query = _orderScreenRepository.Queryable(isAdmin: isAdmin)
+                .WhereIF(!isAdmin, x => x.CreatorOrgId.StartsWith(_sessionContext.RequiredOrgId));
+        }
+
+        query = query
+            .Includes(d => d.Order)
+            .Includes(d => d.VisitDetail)
+            .Includes(d => d.Visit, v => v.Order)
+            .Includes(d => d.Workflow)
+            .Includes(d => d.ScreenDetails.Where(sd => sd.AuditUserId == _sessionContext.UserId).OrderByDescending(sd => sd.AuditTime).Take(1)
+                .ToList())
+            .WhereIF(!string.IsNullOrEmpty(dto.Title), d => d.Visit.Order.Title.Contains(dto.Title!))
+            .WhereIF(!string.IsNullOrEmpty(dto.No), d => d.Visit.Order.No.Contains(dto.No!));
+        if (dto.TabStatus is EScreenStatus.Apply)
+        {
+            query.Where(d =>
+                (d.Status == EScreenStatus.Apply || d.Status == EScreenStatus.Approval ||
+                 (d.Status == EScreenStatus.SendBack && d.SendBackApply == false)));
+        }
+
+        if (dto.TabStatus.HasValue && dto.Status == EScreenStatus.MyHandle)
+        {
+            query.Where(d => (d.Status != EScreenStatus.Apply));
+        }
         return query
         return query
             .WhereIF(dto.DataScope is 1, x => x.CreatorId == _sessionContext.RequiredUserId)
             .WhereIF(dto.DataScope is 1, x => x.CreatorId == _sessionContext.RequiredUserId)
             .WhereIF(dto.Status.HasValue, x => x.Status == dto.Status)
             .WhereIF(dto.Status.HasValue, x => x.Status == dto.Status)
@@ -2332,17 +2365,17 @@ public class OrderApplication : IOrderApplication, IScopeDependency
             .WhereIF(!string.IsNullOrEmpty(dto.FromPhone), x => x.Order!.FromPhone! == dto.FromPhone!)
             .WhereIF(!string.IsNullOrEmpty(dto.FromPhone), x => x.Order!.FromPhone! == dto.FromPhone!)
             .OrderByIF(dto is { SortRule: 0, SortField: "creationTime" }, x => x.CreationTime, OrderByType.Asc)
             .OrderByIF(dto is { SortRule: 0, SortField: "creationTime" }, x => x.CreationTime, OrderByType.Asc)
             .OrderByIF(dto is { SortRule: 1, SortField: "creationTime" } || dto.SortRule is null, x => x.CreationTime, OrderByType.Desc);
             .OrderByIF(dto is { SortRule: 1, SortField: "creationTime" } || dto.SortRule is null, x => x.CreationTime, OrderByType.Desc);
-	}
-	#endregion
-
-	#region private
-	/// <summary>
-	/// 接受外部工单(除省平台)
-	/// </summary>
-	/// <param name="dto"></param>
-	/// <param name="cancellationToken"></param>
-	/// <returns></returns>
-	private async Task<AddOrderResponse> ReceiveOrderFromOtherPlatformAsync(AddOrderDto dto, List<FileDto> files, CancellationToken cancellationToken)
+    }
+    #endregion
+
+    #region private
+    /// <summary>
+    /// 接受外部工单(除省平台)
+    /// </summary>
+    /// <param name="dto"></param>
+    /// <param name="cancellationToken"></param>
+    /// <returns></returns>
+    private async Task<AddOrderResponse> ReceiveOrderFromOtherPlatformAsync(AddOrderDto dto, List<FileDto> files, CancellationToken cancellationToken)
     {
     {
         if (string.IsNullOrEmpty(dto.ExternalId))
         if (string.IsNullOrEmpty(dto.ExternalId))
             throw new UserFriendlyException("工单外部编号不能为空");
             throw new UserFriendlyException("工单外部编号不能为空");
@@ -2448,7 +2481,7 @@ public class OrderApplication : IOrderApplication, IScopeDependency
                 }
                 }
                 await _orderRepository.UpdateAsync(order, cancellationToken);
                 await _orderRepository.UpdateAsync(order, cancellationToken);
                 //处理回访和发布信息
                 //处理回访和发布信息
-              
+
                 var publish = await _orderPublishRepository.GetAsync(x => x.OrderId == order.Id);
                 var publish = await _orderPublishRepository.GetAsync(x => x.OrderId == order.Id);
                 if (publish != null)
                 if (publish != null)
                 {
                 {
@@ -2464,11 +2497,11 @@ public class OrderApplication : IOrderApplication, IScopeDependency
                     await _orderPublishRepository.RemoveAsync(publish, false, cancellationToken);
                     await _orderPublishRepository.RemoveAsync(publish, false, cancellationToken);
                 }
                 }
 
 
-                var visit = await _orderVisitRepository.GetAsync(x => x.OrderId == order.Id&& x.VisitState != EVisitState.None);
+                var visit = await _orderVisitRepository.GetAsync(x => x.OrderId == order.Id && x.VisitState != EVisitState.None);
                 if (visit != null)
                 if (visit != null)
                 {
                 {
                     visit.VisitState = EVisitState.None;
                     visit.VisitState = EVisitState.None;
-                    await _orderVisitRepository.UpdateAsync(visit,cancellationToken);
+                    await _orderVisitRepository.UpdateAsync(visit, cancellationToken);
                 }
                 }
 
 
             }
             }
@@ -2673,18 +2706,18 @@ public class OrderApplication : IOrderApplication, IScopeDependency
         if (dto.IsHandled.HasValue)
         if (dto.IsHandled.HasValue)
         {
         {
             var hasHandled = dto.IsHandled.Value;
             var hasHandled = dto.IsHandled.Value;
-            query = query.Where(d => SqlFunc.Subqueryable<WorkflowTrace>() 
-            .Where(step => step.ExternalId == d.Id && 
-                (hasHandled || step.Status != EWorkflowStepStatus.Handled) && 
-                (!hasHandled || step.Status == EWorkflowStepStatus.Handled && 
-                step.TraceState != EWorkflowTraceState.StepRemoveByPrevious) && 
-                ((step.FlowAssignType == EFlowAssignType.User && !string.IsNullOrEmpty(step.HandlerId) && 
-                step.HandlerId == _sessionContextProvider.SessionContext.RequiredUserId) || 
-                (step.FlowAssignType == EFlowAssignType.Org && !string.IsNullOrEmpty(step.HandlerOrgId) && 
-                step.HandlerOrgId == _sessionContextProvider.SessionContext.RequiredOrgId) || 
+            query = query.Where(d => SqlFunc.Subqueryable<WorkflowTrace>()
+            .Where(step => step.ExternalId == d.Id &&
+                (hasHandled || step.Status != EWorkflowStepStatus.Handled) &&
+                (!hasHandled || step.Status == EWorkflowStepStatus.Handled &&
+                step.TraceState != EWorkflowTraceState.StepRemoveByPrevious) &&
+                ((step.FlowAssignType == EFlowAssignType.User && !string.IsNullOrEmpty(step.HandlerId) &&
+                step.HandlerId == _sessionContextProvider.SessionContext.RequiredUserId) ||
+                (step.FlowAssignType == EFlowAssignType.Org && !string.IsNullOrEmpty(step.HandlerOrgId) &&
+                step.HandlerOrgId == _sessionContextProvider.SessionContext.RequiredOrgId) ||
                 (step.FlowAssignType == EFlowAssignType.Role && !string.IsNullOrEmpty(step.RoleId) &&
                 (step.FlowAssignType == EFlowAssignType.Role && !string.IsNullOrEmpty(step.RoleId) &&
-                _sessionContextProvider.SessionContext.Roles.Contains(step.RoleId)))).Any() || 
-                (string.IsNullOrEmpty(d.WorkflowId) && 
+                _sessionContextProvider.SessionContext.Roles.Contains(step.RoleId)))).Any() ||
+                (string.IsNullOrEmpty(d.WorkflowId) &&
                 (string.IsNullOrEmpty(d.SignerId) || d.SignerId == _sessionContextProvider.SessionContext.RequiredUserId))
                 (string.IsNullOrEmpty(d.SignerId) || d.SignerId == _sessionContextProvider.SessionContext.RequiredUserId))
             );
             );
         }
         }
@@ -2693,14 +2726,14 @@ public class OrderApplication : IOrderApplication, IScopeDependency
             // 交办件:已派单其他节点的工单,该选项卡下工单若办结就不显示
             // 交办件:已派单其他节点的工单,该选项卡下工单若办结就不显示
             .WhereIF(dto.TypeCode.HasValue == true && dto.TypeCode == 1, d => d.ProcessType == EProcessType.Jiaoban && d.Status < EOrderStatus.Filed)
             .WhereIF(dto.TypeCode.HasValue == true && dto.TypeCode == 1, d => d.ProcessType == EProcessType.Jiaoban && d.Status < EOrderStatus.Filed)
             // 办结件:当前登录坐席作为最初受理人已办结的工单
             // 办结件:当前登录坐席作为最初受理人已办结的工单
-            .WhereIF(dto.TypeCode.HasValue == true && dto.TypeCode == 2, d=> d.Status >= EOrderStatus.Filed && d.AcceptorId == _sessionContextProvider.SessionContext.RequiredUserId)
-            .WhereIF(dto.IsProvince.HasValue, d => d.IsProvince == dto.IsProvince) 
-            .WhereIF(dto.IsHandled.HasValue, d => handleStatuses.Contains(d.Status)) 
-            .WhereIF(!string.IsNullOrEmpty(dto.Keyword), d => d.Title.StartsWith(dto.Keyword!)) 
-            .WhereIF(!string.IsNullOrEmpty(dto.No), d => d.No == dto.No) 
-            .WhereIF(!string.IsNullOrEmpty(dto.AreaCode), d => d.AreaCode == dto.AreaCode) 
-            .WhereIF(dto.IsCounterSign.HasValue && dto.IsCounterSign == true, d => d.CounterSignType.HasValue) 
-            .WhereIF(dto.IsCounterSign.HasValue && dto.IsCounterSign == false, d => d.CounterSignType == null) 
+            .WhereIF(dto.TypeCode.HasValue == true && dto.TypeCode == 2, d => d.Status >= EOrderStatus.Filed && d.AcceptorId == _sessionContextProvider.SessionContext.RequiredUserId)
+            .WhereIF(dto.IsProvince.HasValue, d => d.IsProvince == dto.IsProvince)
+            .WhereIF(dto.IsHandled.HasValue, d => handleStatuses.Contains(d.Status))
+            .WhereIF(!string.IsNullOrEmpty(dto.Keyword), d => d.Title.StartsWith(dto.Keyword!))
+            .WhereIF(!string.IsNullOrEmpty(dto.No), d => d.No == dto.No)
+            .WhereIF(!string.IsNullOrEmpty(dto.AreaCode), d => d.AreaCode == dto.AreaCode)
+            .WhereIF(dto.IsCounterSign.HasValue && dto.IsCounterSign == true, d => d.CounterSignType.HasValue)
+            .WhereIF(dto.IsCounterSign.HasValue && dto.IsCounterSign == false, d => d.CounterSignType == null)
             .WhereIF(dto.ExpiredOrAlmostOverdue.HasValue && dto.ExpiredOrAlmostOverdue == true,
             .WhereIF(dto.ExpiredOrAlmostOverdue.HasValue && dto.ExpiredOrAlmostOverdue == true,
                d => (d.ExpiredTime < DateTime.Now && d.Status < EOrderStatus.Filed) ||
                d => (d.ExpiredTime < DateTime.Now && d.Status < EOrderStatus.Filed) ||
                     (d.ExpiredTime < d.ActualHandleTime && d.Status >= EOrderStatus.Filed)) //超期 未办
                     (d.ExpiredTime < d.ActualHandleTime && d.Status >= EOrderStatus.Filed)) //超期 未办
@@ -2708,8 +2741,8 @@ public class OrderApplication : IOrderApplication, IScopeDependency
                d => d.NearlyExpiredTime < DateTime.Now && d.ExpiredTime > DateTime.Now) //即将超期 未办
                d => d.NearlyExpiredTime < DateTime.Now && d.ExpiredTime > DateTime.Now) //即将超期 未办
             .WhereIF(dto.StartTime.HasValue, d => d.CreationTime >= dto.StartTime)
             .WhereIF(dto.StartTime.HasValue, d => d.CreationTime >= dto.StartTime)
             .WhereIF(dto.EndTime.HasValue, d => d.CreationTime <= dto.EndTime)
             .WhereIF(dto.EndTime.HasValue, d => d.CreationTime <= dto.EndTime)
-           //.Where(d => (string.IsNullOrEmpty(d.WorkflowId) && (string.IsNullOrEmpty(d.SignerId) || d.SignerId == _sessionContext.RequiredUserId)))
-           //.Where(d => string.IsNullOrEmpty(d.SignerId) || d.SignerId == _sessionContext.RequiredUserId)
+            //.Where(d => (string.IsNullOrEmpty(d.WorkflowId) && (string.IsNullOrEmpty(d.SignerId) || d.SignerId == _sessionContext.RequiredUserId)))
+            //.Where(d => string.IsNullOrEmpty(d.SignerId) || d.SignerId == _sessionContext.RequiredUserId)
             .WhereIF(dto.IsUrgent.HasValue, d => d.IsUrgent == dto.IsUrgent.Value)
             .WhereIF(dto.IsUrgent.HasValue, d => d.IsUrgent == dto.IsUrgent.Value)
             .Where(x => x.Source < ESource.MLSQ || x.Source > ESource.WZSC)
             .Where(x => x.Source < ESource.MLSQ || x.Source > ESource.WZSC)
             .Where(x => x.Status != EOrderStatus.BackToProvince)
             .Where(x => x.Status != EOrderStatus.BackToProvince)

+ 20 - 1
src/Hotline.Share/Dtos/Order/OrderDto.cs

@@ -775,7 +775,26 @@ namespace Hotline.Share.Dtos.Order
         /// </summary>
         /// </summary>
         public string? OrderTerminateStatus { get; set; }
         public string? OrderTerminateStatus { get; set; }
 
 
-	}
+        #region 回访信息
+
+        /// <summary>
+        /// 部门满意度
+        /// </summary>
+        public Kv? OrgEvaluate { get; set; }
+
+        /// <summary>
+        /// 部门满意度
+        /// </summary>
+        public string? OrgEvaluateValue { get; set; }
+
+        /// <summary>
+        /// 坐席满意度
+        /// </summary>
+        public ESeatEvaluate? SeatEvaluate { get; set; }
+
+        public string? SeatEvaluateTxt => SeatEvaluate?.GetDescription();
+        #endregion
+    }
 
 
     public class UpdateOrderDto : AddOrderDto
     public class UpdateOrderDto : AddOrderDto
     {
     {