xf 5 月之前
父节点
当前提交
9067c48847

+ 60 - 37
src/Hotline.Api/Controllers/OrderController.cs

@@ -4257,50 +4257,73 @@ public class OrderController : BaseController
         if (hasHandled)
             dto.QueryType = null;
 
-        var expStepFilter = Expressionable.Create<WorkflowStep>()
-            .And(step =>
-                    ((step.FlowAssignType == EFlowAssignType.User && !string.IsNullOrEmpty(step.HandlerId) && step.HandlerId == _sessionContext.RequiredUserId) ||
-                     (step.FlowAssignType == EFlowAssignType.Org && !string.IsNullOrEmpty(step.HandlerOrgId) && step.HandlerOrgId == _sessionContext.RequiredOrgId) ||
-                     (step.FlowAssignType == EFlowAssignType.Role && !string.IsNullOrEmpty(step.RoleId) && _sessionContext.Roles.Contains(step.RoleId)) ||
-                     (step.FlowAssignType == EFlowAssignType.OrgAndRole && !string.IsNullOrEmpty(step.RoleId)
-                                                                        && _sessionContext.Roles.Contains(step.RoleId)
-                                                                        && !string.IsNullOrEmpty(step.HandlerOrgId)
-                                                                        && step.HandlerOrgId == _sessionContext.RequiredOrgId)
-                    )
-                )
-            .ToExpression();
-
-        /*
-         *step =>
-           ((step.FlowAssignType == EFlowAssignType.User && !string.IsNullOrEmpty(step.HandlerId) && step.HandlerId == _sessionContext.RequiredUserId) ||
-            (step.FlowAssignType == EFlowAssignType.Org && !string.IsNullOrEmpty(step.HandlerOrgId) && step.HandlerOrgId == _sessionContext.RequiredOrgId) ||
-            (step.FlowAssignType == EFlowAssignType.Role && !string.IsNullOrEmpty(step.RoleId) && _sessionContext.Roles.Contains(step.RoleId)) ||
-            (step.FlowAssignType == EFlowAssignType.OrgAndRole && !string.IsNullOrEmpty(step.RoleId) 
-                                                               && _sessionContext.Roles.Contains(step.RoleId) 
-                                                               && !string.IsNullOrEmpty(step.HandlerOrgId) 
-                                                               && step.HandlerOrgId == _sessionContext.RequiredOrgId)
-           )
-         */
+        var expStepFilter = new Func<WorkflowStep, bool>(step =>
+            ((step.FlowAssignType == EFlowAssignType.User && !string.IsNullOrEmpty(step.HandlerId) && step.HandlerId == _sessionContext.RequiredUserId) ||
+             (step.FlowAssignType == EFlowAssignType.Org && !string.IsNullOrEmpty(step.HandlerOrgId) && step.HandlerOrgId == _sessionContext.RequiredOrgId) ||
+             (step.FlowAssignType == EFlowAssignType.Role && !string.IsNullOrEmpty(step.RoleId) && _sessionContext.Roles.Contains(step.RoleId)) ||
+             (step.FlowAssignType == EFlowAssignType.OrgAndRole && !string.IsNullOrEmpty(step.RoleId) && _sessionContext.Roles.Contains(step.RoleId)
+                                                                && !string.IsNullOrEmpty(step.HandlerOrgId) && step.HandlerOrgId == _sessionContext.RequiredOrgId))
+        && (!hasHandled || step.Status == EWorkflowStepStatus.Handled)
+        && (hasHandled || step.Status < EWorkflowStepStatus.Handled)
+            );
+
         var isAdmin = _orderDomainService.IsCheckAdmin();
         if (!isAdmin)
         {
-            query.Where(d=>d.WorkflowSteps.Where(step =>
-                ((step.FlowAssignType == EFlowAssignType.User && !string.IsNullOrEmpty(step.HandlerId) && step.HandlerId == _sessionContext.RequiredUserId) ||
-                 (step.FlowAssignType == EFlowAssignType.Org && !string.IsNullOrEmpty(step.HandlerOrgId) && step.HandlerOrgId == _sessionContext.RequiredOrgId) ||
-                 (step.FlowAssignType == EFlowAssignType.Role && !string.IsNullOrEmpty(step.RoleId) && _sessionContext.Roles.Contains(step.RoleId)) ||
-                 (step.FlowAssignType == EFlowAssignType.OrgAndRole && !string.IsNullOrEmpty(step.RoleId)
-                                                                    && _sessionContext.Roles.Contains(step.RoleId)
-                                                                    && !string.IsNullOrEmpty(step.HandlerOrgId)
-                                                                    && step.HandlerOrgId == _sessionContext.RequiredOrgId)
-                ))
+            query
+                .Includes(d=>d.WorkflowSteps.Where(expStepFilter)
+                    .OrderByDescending(step => step.CreationTime)
+                    .Take(1)
+                    .ToList()
+                )
+                .Where(d=>d.WorkflowSteps.Any(expStepFilter)
             );
-
         }
 
-        //query.WhereIF(hasHandled, d => d.Status == EWorkflowStepStatus.Handled)
-        //    .WhereIF(!hasHandled, step => step.Status != EWorkflowStepStatus.Handled)
+        var (total, items) = await query
+            .Where(d => d.Status != EOrderStatus.WaitForAccept &&
+                        d.Status != EOrderStatus.BackToUnAccept &&
+                        d.Status != EOrderStatus.SpecialToUnAccept &&
+                        d.Status != EOrderStatus.HandOverToUnAccept)
+            .WhereIF(dto.QueryType is 3,
+                d => SqlFunc.Subqueryable<OrderSpecial>().Where(os => os.OrderId == d.Id && os.IsDeleted == false && os.SpecialType == ESpecialType.ReTransact).Any())
+            .Where(d => SqlFunc.Subqueryable<OrderDelay>().Where(od => od.OrderId == d.Id && od.IsDeleted == false && od.DelayState == EDelayState.Examining).NotAny())
+            .Where(d => SqlFunc.Subqueryable<OrderSendBackAudit>().Where(osba => osba.OrderId == d.Id && osba.IsDeleted == false && osba.State == ESendBackAuditState.Apply)
+                .NotAny())
+            .Where(d => SqlFunc.Subqueryable<OrderSpecial>().Where(s => s.OrderId == d.Id && s.State == 0 && s.IsDeleted == false)
+                .WhereIF(dto.QueryType != null && (dto.QueryType == 1 || dto.QueryType == 2), s => s.SpecialType == ESpecialType.ReTransact)
+                //.WhereIF(dto.QueryType != null && dto.QueryType == 3, s =>  s.SpecialType != ESpecialType.ReTransact)
+                .NotAny())
+            .WhereIF(dto.IsProvince.HasValue, d => d.IsProvince == dto.IsProvince)
+            .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,
+                d => (d.ExpiredTime < DateTime.Now && d.Status < EOrderStatus.Filed) ||
+                     (d.ExpiredTime < d.ActualHandleTime && d.Status >= EOrderStatus.Filed)) //超期 未办
+            .WhereIF(dto.ExpiredOrAlmostOverdue.HasValue && dto.ExpiredOrAlmostOverdue == false,
+                d => d.NearlyExpiredTime < DateTime.Now && d.ExpiredTime > DateTime.Now) //即将超期 未办
+            .Where(d => d.Source < ESource.MLSQ || d.Source > ESource.WZSC)
+            .Where(d => d.Status != EOrderStatus.BackToProvince && d.Status < EOrderStatus.Filed)
+            //.Where(d => SqlFunc.Subqueryable<OrderSpecial>().Where(os => os.OrderId == d.Id).NotAny())
+            //.Where(d => d.OrderSpecials.Any() == false || d.OrderSpecials.Any(s => s.State > 0))
+            .WhereIF(dto.StartTime.HasValue, d => d.StartTime >= dto.StartTime)
+            .WhereIF(dto.EndTime.HasValue, d => d.StartTime <= dto.EndTime)
+            .WhereIF(dto.IsUrgent.HasValue, d => d.IsUrgent == dto.IsUrgent!.Value)
+            .WhereIF(dto.Status.HasValue, d => d.Status == dto.Status)
+            //.OrderByDescending(d => d.IsUrgent)
+            .OrderByIF(string.IsNullOrEmpty(dto.SortField), d => d.StartTime, OrderByType.Desc)
+            .OrderByIF(dto is { SortField: "creationTime", SortRule: 0 }, d => d.CreationTime, OrderByType.Asc) //创建时间升序
+            .OrderByIF(dto is { SortField: "creationTime", SortRule: 1 }, d => d.CreationTime, OrderByType.Desc) //创建时间降序
+            .OrderByIF(dto is { SortField: "startTime", SortRule: 0 }, d => d.StartTime, OrderByType.Asc) //受理时间升序
+            .OrderByIF(dto is { SortField: "startTime", SortRule: 1 }, d => d.StartTime, OrderByType.Desc) //受理时间降序
+            .OrderByIF(dto is { SortField: "expiredTime", SortRule: 0 }, d => d.ExpiredTime, OrderByType.Asc) //期满时间升序
+            .OrderByIF(dto is { SortField: "expiredTime", SortRule: 1 }, d => d.ExpiredTime, OrderByType.Desc) //期满时间降序
+            .ToPagedListAsync(dto, HttpContext.RequestAborted);
 
-        throw new NotImplementedException();
+        return new PagedDto<OrderDto>(total, _mapper.Map<IReadOnlyList<OrderDto>>(items));
     }
 
     /// <summary>

+ 12 - 0
src/Hotline.Share/Dtos/Order/WaitQuery/QueryOrderWaitedFixedDto.cs

@@ -9,6 +9,18 @@ namespace Hotline.Share.Dtos.Order.WaitQuery
 {
     public class QueryOrderWaitedFixedDto : QueryFixedDto
     {
+        /// <summary>
+        /// 开始时间
+        /// </summary>
+        public DateTime? StartTime { get; set; }
+
+        /// <summary>
+        /// 结束时间
+        /// </summary>
+        public DateTime? EndTime { get; set; }
+
+        public string? Keyword { get; set; }
+
         public bool? IsProvince { get; set; }
 
         /// <summary>