xf 10 kuukautta sitten
vanhempi
commit
c2105fa787
1 muutettua tiedostoa jossa 148 lisäystä ja 121 poistoa
  1. 148 121
      src/Hotline.Api/Controllers/OrderController.cs

+ 148 - 121
src/Hotline.Api/Controllers/OrderController.cs

@@ -2943,7 +2943,58 @@ public class OrderController : BaseController
         if (dto.EndTime.HasValue)
             dto.EndTime = dto.EndTime.Value.AddDays(1).AddSeconds(-1);
 
-        //var (total, items) = await _orderRepository.Queryable(canView: false)
+        var (total, items) = await _orderRepository.Queryable(canView: false)
+            .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.No.Contains(dto.Keyword!) || d.Title.Contains(dto.Keyword!))
+            .WhereIF(dto.IsCounterSign.HasValue && dto.IsCounterSign == true, d => d.CounterSignType.HasValue)
+            .WhereIF(dto.IsCounterSign.HasValue && dto.IsCounterSign == false, d => !d.CounterSignType.HasValue)
+            .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)//即将超期 未办
+            .WhereIF(dto.StartTime.HasValue, d => d.CreationTime >= dto.StartTime)
+            .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(x => x.Source < ESource.MLSQ || x.Source > ESource.WZSC)
+            .Where(x => x.Status != EOrderStatus.BackToProvince && x.Status < EOrderStatus.Filed)
+            .OrderBy(d => d.Status)
+            .OrderByIF(dto.IsHandled == true, d => d.StartTime, OrderByType.Desc)
+            .OrderByIF(dto.IsHandled == false, d => d.CreationTime, OrderByType.Desc)
+            .ToPagedListAsync(dto, HttpContext.RequestAborted);
+
+        //var a = _orderRepository.Queryable(hasHandled: dto.IsHandled);
+        //var b = _orderRepository.Queryable()
+        //    .Where(d => (string.IsNullOrEmpty(d.WorkflowId) &&
+        //                 (string.IsNullOrEmpty(d.SignerId) || d.SignerId == _sessionContext.RequiredUserId)));
+        //var (total, items) = await _orderRepository.UnionAll(a, b)
+        //.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.No.Contains(dto.Keyword!) || d.Title.Contains(dto.Keyword!))
+        //.WhereIF(dto.IsCounterSign.HasValue && dto.IsCounterSign == true, d => d.CounterSignType.HasValue)
+        //.WhereIF(dto.IsCounterSign.HasValue && dto.IsCounterSign == false, d => !d.CounterSignType.HasValue)
+        //.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)//即将超期 未办
+        //.WhereIF(dto.StartTime.HasValue, d => d.CreationTime >= dto.StartTime)
+        //.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(x => x.Source < ESource.MLSQ || x.Source > ESource.WZSC)
+        //.Where(x => x.Status != EOrderStatus.BackToProvince && x.Status < EOrderStatus.Filed)
+        //.OrderBy(d => d.Status)
+        //.OrderByIF(dto.IsHandled == true, d => d.StartTime, OrderByType.Desc)
+        //.OrderByIF(dto.IsHandled == false, d => d.CreationTime, OrderByType.Desc)
+        //.ToPagedListAsync(dto, HttpContext.RequestAborted);
+
+        //var (total, items) = await _orderRepository.Queryable()
+        //    .LeftJoin<WorkflowStep>((d, step) => d.Id == step.ExternalId)
+        //    .Where((d, step) =>
+        //        ((string.IsNullOrEmpty(d.WorkflowId) && (string.IsNullOrEmpty(d.SignerId) || d.SignerId == _sessionContext.RequiredUserId)) ||
+        //        (!string.IsNullOrEmpty(d.WorkflowId) &&
+        //        ((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))))))
+        //            .WhereIF(dto.IsHandled.HasValue && !dto.IsHandled.Value, (d, step) => step.Status != EWorkflowStepStatus.Handled)
+        //            .WhereIF(dto.IsHandled.HasValue && dto.IsHandled.Value, (d, step) => step.Status == EWorkflowStepStatus.Handled)
         //    .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.No.Contains(dto.Keyword!) || d.Title.Contains(dto.Keyword!))
@@ -2953,38 +3004,14 @@ public class OrderController : BaseController
         //    .WhereIF(dto.ExpiredOrAlmostOverdue.HasValue && dto.ExpiredOrAlmostOverdue == false, d => d.NearlyExpiredTime < DateTime.Now && d.ExpiredTime > DateTime.Now)//即将超期 未办
         //    .WhereIF(dto.StartTime.HasValue, d => d.CreationTime >= dto.StartTime)
         //    .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(x => x.Source < ESource.MLSQ || x.Source > ESource.WZSC)
-        //    .Where(x => x.Status != EOrderStatus.BackToProvince && x.Status < EOrderStatus.Filed)
+        //    .Where(d => d.Source < ESource.MLSQ || d.Source > ESource.WZSC)
+        //    .Where(d => d.Status != EOrderStatus.BackToProvince && d.Status < EOrderStatus.Filed)
         //    .OrderBy(d => d.Status)
         //    .OrderByIF(dto.IsHandled == true, d => d.StartTime, OrderByType.Desc)
         //    .OrderByIF(dto.IsHandled == false, d => d.CreationTime, OrderByType.Desc)
+        //    .Select((d, step) => d)
         //    .ToPagedListAsync(dto, HttpContext.RequestAborted);
 
-        var a = _orderRepository.Queryable(hasHandled: dto.IsHandled);
-        var b = _orderRepository.Queryable()
-            .Where(d => (string.IsNullOrEmpty(d.WorkflowId) &&
-                         (string.IsNullOrEmpty(d.SignerId) || d.SignerId == _sessionContext.RequiredUserId)));
-        var (total, items) = await _orderRepository.UnionAll(a, b)
-        .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.No.Contains(dto.Keyword!) || d.Title.Contains(dto.Keyword!))
-        .WhereIF(dto.IsCounterSign.HasValue && dto.IsCounterSign == true, d => d.CounterSignType.HasValue)
-        .WhereIF(dto.IsCounterSign.HasValue && dto.IsCounterSign == false, d => !d.CounterSignType.HasValue)
-        .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)//即将超期 未办
-        .WhereIF(dto.StartTime.HasValue, d => d.CreationTime >= dto.StartTime)
-        .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(x => x.Source < ESource.MLSQ || x.Source > ESource.WZSC)
-        .Where(x => x.Status != EOrderStatus.BackToProvince && x.Status < EOrderStatus.Filed)
-        .OrderBy(d => d.Status)
-        .OrderByIF(dto.IsHandled == true, d => d.StartTime, OrderByType.Desc)
-        .OrderByIF(dto.IsHandled == false, d => d.CreationTime, OrderByType.Desc)
-        .ToPagedListAsync(dto, HttpContext.RequestAborted);
-
         return new PagedDto<OrderDto>(total, _mapper.Map<IReadOnlyList<OrderDto>>(items));
     }
 
@@ -4674,106 +4701,106 @@ public class OrderController : BaseController
     {
         var (total, items) = await _orderApplication.GetAboutToExpireAsync(dto).ToPagedListAsync(dto, HttpContext.RequestAborted);
         return new PagedDto<OrderDto>(total, _mapper.Map<IReadOnlyList<OrderDto>>(items));
-	}
+    }
 
-	/// <summary>
-	/// 工单即将超期列表导出
-	/// </summary>
-	/// <returns></returns>
-	[HttpPost("order/about_expire/_export")]
+    /// <summary>
+    /// 工单即将超期列表导出
+    /// </summary>
+    /// <returns></returns>
+    [HttpPost("order/about_expire/_export")]
     public async Task<FileStreamResult> AboutListExport([FromBody] ExportExcelDto<AboutToExpireListDto> dto)
     {
-	    var query = _orderApplication.GetAboutToExpireAsync(dto.QueryDto);
-	    List<Hotline.Orders.Order> orders;
-	    if (dto.IsExportAll)
-	    {
-		    orders = await query.ToListAsync(HttpContext.RequestAborted);
-	    }
-	    else
-	    {
-		    var (_, items) = await query.ToPagedListAsync(dto.QueryDto, HttpContext.RequestAborted);
-		    orders = items;
-	    }
-	    var ordersDtos = _mapper.Map<ICollection<OrderDto>>(orders);
-	    dynamic? dynamicClass = DynamicClassHelper.CreateDynamicClass(dto.ColumnInfos);
-	    var dtos = ordersDtos
-		    .Select(stu => _mapper.Map(stu, typeof(OrderDto), dynamicClass))
-		    .Cast<object>()
-		    .ToList();
-	    var stream = ExcelHelper.CreateStream(dtos);
-	    return ExcelStreamResult(stream, "工单即将超期列表数据");
-    }
-
-	///// <summary>
-	///// 工单即将超期节点列表
-	///// </summary>
-	///// <param name="dto"></param>
-	///// <returns></returns>
-	//[HttpGet("order/about_expire_node/list")]
-	//public async Task<PagedDto<WorkflowOrderDto>> AboutNodeList([FromQuery] AboutToExpireListDto dto)
-	//{
-	//    return await _orderApplication.GetAboutToExpireNodeAsync(dto, HttpContext.RequestAborted);
-	//}
-
-	/// <summary>
-	/// 工单超期列表
-	/// </summary>
-	/// <param name="dto"></param>
-	/// <returns></returns>
-	[HttpGet("order/expire/list")]
+        var query = _orderApplication.GetAboutToExpireAsync(dto.QueryDto);
+        List<Hotline.Orders.Order> orders;
+        if (dto.IsExportAll)
+        {
+            orders = await query.ToListAsync(HttpContext.RequestAborted);
+        }
+        else
+        {
+            var (_, items) = await query.ToPagedListAsync(dto.QueryDto, HttpContext.RequestAborted);
+            orders = items;
+        }
+        var ordersDtos = _mapper.Map<ICollection<OrderDto>>(orders);
+        dynamic? dynamicClass = DynamicClassHelper.CreateDynamicClass(dto.ColumnInfos);
+        var dtos = ordersDtos
+            .Select(stu => _mapper.Map(stu, typeof(OrderDto), dynamicClass))
+            .Cast<object>()
+            .ToList();
+        var stream = ExcelHelper.CreateStream(dtos);
+        return ExcelStreamResult(stream, "工单即将超期列表数据");
+    }
+
+    ///// <summary>
+    ///// 工单即将超期节点列表
+    ///// </summary>
+    ///// <param name="dto"></param>
+    ///// <returns></returns>
+    //[HttpGet("order/about_expire_node/list")]
+    //public async Task<PagedDto<WorkflowOrderDto>> AboutNodeList([FromQuery] AboutToExpireListDto dto)
+    //{
+    //    return await _orderApplication.GetAboutToExpireNodeAsync(dto, HttpContext.RequestAborted);
+    //}
+
+    /// <summary>
+    /// 工单超期列表
+    /// </summary>
+    /// <param name="dto"></param>
+    /// <returns></returns>
+    [HttpGet("order/expire/list")]
     public async Task<PagedDto<OrderDto>> ExpireList([FromQuery] AboutToExpireListDto dto)
     {
         var (total, items) = await _orderApplication.GetToExpireAsync(dto).ToPagedListAsync(dto, HttpContext.RequestAborted);
         return new PagedDto<OrderDto>(total, _mapper.Map<IReadOnlyList<OrderDto>>(items));
-	}
-
-	/// <summary>
-	/// 工单超期列表导出
-	/// </summary>
-	/// <returns></returns>
-	[HttpPost("order/expire/_export")]
-	public async Task<FileStreamResult> ExpireListExport([FromBody] ExportExcelDto<AboutToExpireListDto> dto)
-	{
-		var query = _orderApplication.GetToExpireAsync(dto.QueryDto);
-		List<Hotline.Orders.Order> orders;
-		if (dto.IsExportAll)
-		{
-			orders = await query.ToListAsync(HttpContext.RequestAborted);
-		}
-		else
-		{
-			var (_, items) = await query.ToPagedListAsync(dto.QueryDto, HttpContext.RequestAborted);
-			orders = items;
-		}
-		var ordersDtos = _mapper.Map<ICollection<OrderDto>>(orders);
-		dynamic? dynamicClass = DynamicClassHelper.CreateDynamicClass(dto.ColumnInfos);
-		var dtos = ordersDtos
-			.Select(stu => _mapper.Map(stu, typeof(OrderDto), dynamicClass))
-			.Cast<object>()
-			.ToList();
-		var stream = ExcelHelper.CreateStream(dtos);
-		return ExcelStreamResult(stream, "工单超期列表数据");
-	}
-
-	///// <summary>
-	///// 工单超期节点列表
-	///// </summary>
-	///// <param name="dto"></param>
-	///// <returns></returns>
-	//[HttpGet("order/expire_node/list")]
-	//public async Task<PagedDto<WorkflowOrderDto>> NodeList([FromQuery] AboutToExpireListDto dto)
-	//{
-	//    return await _orderApplication.GetToExpireNodeAsync(dto, HttpContext.RequestAborted);
-	//}
-
-	#endregion
-
-	#region 工单签收
-
-	/// <summary>
-	/// 工单签收
-	/// </summary>
-	[HttpPost("sign/{orderId}")]
+    }
+
+    /// <summary>
+    /// 工单超期列表导出
+    /// </summary>
+    /// <returns></returns>
+    [HttpPost("order/expire/_export")]
+    public async Task<FileStreamResult> ExpireListExport([FromBody] ExportExcelDto<AboutToExpireListDto> dto)
+    {
+        var query = _orderApplication.GetToExpireAsync(dto.QueryDto);
+        List<Hotline.Orders.Order> orders;
+        if (dto.IsExportAll)
+        {
+            orders = await query.ToListAsync(HttpContext.RequestAborted);
+        }
+        else
+        {
+            var (_, items) = await query.ToPagedListAsync(dto.QueryDto, HttpContext.RequestAborted);
+            orders = items;
+        }
+        var ordersDtos = _mapper.Map<ICollection<OrderDto>>(orders);
+        dynamic? dynamicClass = DynamicClassHelper.CreateDynamicClass(dto.ColumnInfos);
+        var dtos = ordersDtos
+            .Select(stu => _mapper.Map(stu, typeof(OrderDto), dynamicClass))
+            .Cast<object>()
+            .ToList();
+        var stream = ExcelHelper.CreateStream(dtos);
+        return ExcelStreamResult(stream, "工单超期列表数据");
+    }
+
+    ///// <summary>
+    ///// 工单超期节点列表
+    ///// </summary>
+    ///// <param name="dto"></param>
+    ///// <returns></returns>
+    //[HttpGet("order/expire_node/list")]
+    //public async Task<PagedDto<WorkflowOrderDto>> NodeList([FromQuery] AboutToExpireListDto dto)
+    //{
+    //    return await _orderApplication.GetToExpireNodeAsync(dto, HttpContext.RequestAborted);
+    //}
+
+    #endregion
+
+    #region 工单签收
+
+    /// <summary>
+    /// 工单签收
+    /// </summary>
+    [HttpPost("sign/{orderId}")]
     [LogFilter("工单签收")]
     public async Task Sign(string orderId)
     {