浏览代码

工单甄别待申请

田爽 5 月之前
父节点
当前提交
eaf52738ef

+ 49 - 91
src/Hotline.Api/Controllers/OrderController.cs

@@ -1869,103 +1869,61 @@ public class OrderController : BaseController
             // dto.CreationTimeStart = _timeLimitDomainService.CalcWorkTimeReduce(DateTime.Now, 5);
             dto.CreationTimeStart = await _expireTime.CalcWorkTimeReduce(DateTime.Now, 5);
         }
-
-        var query = _orderVisitedDetailRepository.Queryable(false, true)
-            .Includes(x => x.OrderVisit)
-            .Includes(x => x.OrderVisit, y => y.Order)
-            .Includes(x => x.OrderVisit, y => y.Employee)
-            //.LeftJoin<OrderScreen>((x, s) => x.Id == s.VisitDetailId && s.IsDeleted == false)
-            .Includes(x => x.OrderScreens)
-            .Where(x => x.OrderScreens.Any(s => s.Status == EScreenStatus.SendBack && s.ScreenType == dto.ScreenType && s.SendBackApply == true) ||
-                        x.OrderScreens.Any() == false
-            //|| x.OrderScreens.Any(s => (s.Status != EScreenStatus.SendBack && s.SendBackApply != true)) == false
-            )
-            .WhereIF(dto.ScreenType == EOrderScreenType.Seat, x => x.OrderVisit.Order.IsProvince == false)
-            .WhereIF(dto.ScreenSendBack is 1,
-                x => x.OrderScreens.Any(s => s.Status == EScreenStatus.SendBack && s.ScreenType == dto.ScreenType && s.SendBackApply == true))
-            .WhereIF(dto.ScreenSendBack is 2,
-                x => x.OrderScreens.Any(s => (s.Status != EScreenStatus.SendBack && s.ScreenType == dto.ScreenType && s.SendBackApply != true)) ==
-                     false)
-            .WhereIF(!string.IsNullOrEmpty(dto.No), x => x.OrderVisit.Order!.No!.Contains(dto.No!))
-            .WhereIF(!string.IsNullOrEmpty(dto.Title), x => x.OrderVisit.Order!.Title!.Contains(dto.Title!))
-            .WhereIF(dto.IsProvince.HasValue, x => x.OrderVisit.Order!.IsProvince == dto.IsProvince)
-            .WhereIF(!string.IsNullOrEmpty(dto.AcceptType), x => x.OrderVisit.Order!.AcceptTypeCode! == dto.AcceptType!)
-            .WhereIF(!string.IsNullOrEmpty(dto.HotspotSpliceName),
-                x => x.OrderVisit.Order!.Hotspot.HotSpotFullName!.StartsWith(dto.HotspotSpliceName!))
-            .WhereIF(!string.IsNullOrEmpty(dto.SourceChannel), x => x.OrderVisit.Order!.SourceChannelCode! == dto.SourceChannel!)
-            .WhereIF(!string.IsNullOrEmpty(dto.OrgLevelOneName), x => x.OrderVisit.Order!.OrgLevelOneName!.Contains(dto.OrgLevelOneName!))
-            .WhereIF(!string.IsNullOrEmpty(dto.CurrentHandleOrgName),
-                x => x.OrderVisit.Order!.CurrentHandleOrgName!.Contains(dto.CurrentHandleOrgName!))
-            .WhereIF(!string.IsNullOrEmpty(dto.VisitOrgName), x => x.VisitOrgName!.Contains(dto.VisitOrgName!))
-            .WhereIF(dto.CreationTime.HasValue && dto.EndCreationTime.HasValue,
-                x => x.OrderVisit.Order!.CreationTime >= dto.CreationTime && x.OrderVisit.Order!.CreationTime <= dto.EndCreationTime)
-            .WhereIF(dto.CurrentHandleTime.HasValue && dto.EndCurrentHandleTime.HasValue,
-                x => x.OrderVisit.Order!.CurrentHandleTime >= dto.CurrentHandleTime &&
-                     x.OrderVisit.Order!.ActualHandleTime <= dto.EndCurrentHandleTime)
-            .WhereIF(dto.FiledTime.HasValue && dto.EndFiledTime.HasValue,
-                x => x.OrderVisit.Order!.FiledTime >= dto.FiledTime && x.OrderVisit.Order!.FiledTime <= dto.EndFiledTime)
-            .WhereIF(dto.VisitTime.HasValue && dto.EndVisitTime.HasValue,
-                x => x.OrderVisit.VisitTime >= dto.VisitTime && x.OrderVisit.VisitTime <= dto.EndVisitTime)
-            .WhereIF(dto.IsHomePage.HasValue && dto.IsHomePage == true,
-                x => x.OrderVisit.VisitTime < dto.CreationTimeEnd && x.OrderVisit.VisitTime > dto.CreationTimeStart)
-            //.WhereIF(dto.CounterSignType.HasValue, x => x.OrderVisit.Order!.CounterSignType == dto.CounterSignType)
-            //.WhereIF(!string.IsNullOrEmpty(dto.OrgProcessingResults),
-            //    x => SqlFunc.JsonField(x.OrgProcessingResults, "Key") == dto.OrgProcessingResults)
-            //.WhereIF(!string.IsNullOrEmpty(dto.OrgHandledAttitude),
-            //    x => SqlFunc.JsonListObjectAny(x.OrgHandledAttitude, "Key", dto.OrgHandledAttitude))
-            //.WhereIF(!string.IsNullOrEmpty(dto.OrgNoSatisfiedReason),
-            //    x => SqlFunc.JsonField(x.OrgNoSatisfiedReason, "Key") == dto.OrgNoSatisfiedReason)
-            .Where(x => x.OrderVisit.VisitState == EVisitState.Visited && x.OrderVisit.IsCanHandle);
-        if (_sessionContext.OrgId != null && !_sessionContext.OrgIsCenter)
-        {
-            query.WhereIF(!string.IsNullOrEmpty(dto.Keyword),
-                    x => x.OrderVisit.Order.Title.Contains(dto.Keyword!) ||
-                         x.OrderVisit.Order.No.Contains(dto.Keyword!))
-                .Where(x => x.VisitTarget == EVisitTarget.Org && x.VisitOrgCode == _sessionContext.OrgId && (
-                    SqlFunc.JsonField(x.OrgProcessingResults, "Key") == "1" ||
-                    SqlFunc.JsonField(x.OrgProcessingResults, "Key") == "2" ||
-                    SqlFunc.JsonField(x.OrgHandledAttitude, "Key") == "1" ||
-                    SqlFunc.JsonField(x.OrgHandledAttitude, "Key") == "2"
-                ));
-        }
-        else
-        {
-            query.WhereIF(!string.IsNullOrEmpty(dto.Keyword),
-                    x => x.OrderVisit.Order.Title.Contains(dto.Keyword!) ||
-                         x.OrderVisit.Order.No.Contains(dto.Keyword!))
-                .WhereIF(dto.ScreenType == EOrderScreenType.Org, x => x.VisitTarget == EVisitTarget.Org && (
-                    SqlFunc.JsonField(x.OrgProcessingResults, "Key") == "1" ||
-                    SqlFunc.JsonField(x.OrgProcessingResults, "Key") == "2" ||
-                    SqlFunc.JsonField(x.OrgHandledAttitude, "Key") == "1" ||
-                    SqlFunc.JsonField(x.OrgHandledAttitude, "Key") == "2"
-                ))
-                .WhereIF(dto.ScreenType == EOrderScreenType.Seat,
-                    x => x.VisitTarget == EVisitTarget.Seat &&
-                         (x.SeatEvaluate == ESeatEvaluate.VeryNoSatisfied || x.SeatEvaluate == ESeatEvaluate.NoSatisfied))
-                ;
-        }
-
-        var (total, items) = await query
-            .OrderByIF(dto is { SortRule: 0, SortField: "order.startTime" }, x => x.OrderVisit.Order.StartTime, OrderByType.Asc)
-            .OrderByIF(dto is { SortRule: 1, SortField: "order.startTime" }, x => x.OrderVisit.Order.StartTime, OrderByType.Desc)
-            .OrderByIF(dto is { SortRule: 0, SortField: "order.actualHandleTime" }, x => x.OrderVisit.Order.ActualHandleTime, OrderByType.Asc)
-            .OrderByIF(dto is { SortRule: 1, SortField: "order.actualHandleTime" }, x => x.OrderVisit.Order.ActualHandleTime, OrderByType.Desc)
-            .OrderByIF(dto is { SortRule: 0, SortField: "order.filedTime" }, x => x.OrderVisit.Order.FiledTime, OrderByType.Asc)
-            .OrderByIF(dto is { SortRule: 1, SortField: "order.filedTime" }, x => x.OrderVisit.Order.FiledTime, OrderByType.Desc)
-            .OrderByIF(dto is { SortRule: 0, SortField: "orderVisit.visitTime" }, x => x.OrderVisit.VisitTime, OrderByType.Asc)
-            .OrderByIF(dto is { SortRule: 1, SortField: "orderVisit.visitTime" }, x => x.OrderVisit.VisitTime, OrderByType.Desc)
-            .OrderByIF(dto.SortRule is null, x => x.CreationTime, OrderByType.Desc)
-            .ToPagedListAsync(dto.PageIndex, dto.PageSize, HttpContext.RequestAborted);
+		var (total, items) = await _orderApplication.MayScreenList(dto)
+			.ToPagedListAsync(dto.PageIndex, dto.PageSize, HttpContext.RequestAborted);
         return new PagedDto<OrderVisitDetailDto>(total, _mapper.Map<IReadOnlyList<OrderVisitDetailDto>>(items));
     }
 
-
     /// <summary>
-    /// 工单甄别列表
+    /// 工单甄别待申请列表导出
     /// </summary>
-    /// <param name="dto"></param>
     /// <returns></returns>
-    [HttpGet("screen")]
+    [HttpPost("mayscreen/_export")]
+    public async Task<FileStreamResult> ScreenListExport([FromBody] ExportExcelDto<MayScreenListDto> dto)
+    {
+	    if (_appOptions.Value.IsYiBin) dto.ScreenType = EOrderScreenType.Org;
+
+	    dto.CreationTimeEnd = DateTime.Now;
+	    dto.CreationTimeStart = DateTime.Now;
+	    if (dto.IsHomePage != null && dto.IsHomePage == true)
+	    {
+		    // dto.CreationTimeStart = _timeLimitDomainService.CalcWorkTimeReduce(DateTime.Now, 5);
+		    dto.CreationTimeStart = await _expireTime.CalcWorkTimeReduce(DateTime.Now, 5);
+	    }
+
+		var query = _orderApplication.MayScreenList(dto.QueryDto);
+	    List<OrderVisitDetail> data;
+	    if (dto.IsExportAll)
+	    {
+		    data = await query.ToListAsync(HttpContext.RequestAborted);
+	    }
+	    else
+	    {
+		    var (_, items) = await query.ToPagedListAsync(dto.QueryDto, HttpContext.RequestAborted);
+		    data = items;
+	    }
+
+	    var dataDtos = _mapper.Map<ICollection<OrderVisitDetailDto>>(data);
+
+	    dynamic? dynamicClass = DynamicClassHelper.CreateDynamicClass(dto.ColumnInfos);
+
+	    var dtos = dataDtos
+		    .Select(stu => _mapper.Map(stu, typeof(OrderVisitDetailDto), dynamicClass))
+		    .Cast<object>()
+		    .ToList();
+
+	    var stream = ExcelHelper.CreateStream(dtos);
+
+	    return ExcelStreamResult(stream, "工单甄别待申请列表数据");
+    }
+
+
+	/// <summary>
+	/// 工单甄别列表
+	/// </summary>
+	/// <param name="dto"></param>
+	/// <returns></returns>
+	[HttpGet("screen")]
     public async Task<PagedDto<OrderScreenListDto>> ScreenList([FromQuery] ScreenListDto dto)
     {
         var (total, items) = await _orderApplication.OrderScreenList(dto)

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

@@ -320,7 +320,15 @@ namespace Hotline.Application.Orders
         /// <returns></returns>
         ISugarQueryable<OrderScreen> OrderScreenList(ScreenListDto dto);
 
-        ISugarQueryable<OrderListOutDto> QueryWaitedForSeat(QueryOrderWaitedDto dto);
+        /// <summary>
+        /// 待申请列表
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        ISugarQueryable<OrderVisitDetail> MayScreenList(MayScreenListDto dto);
+
+
+		ISugarQueryable<OrderListOutDto> QueryWaitedForSeat(QueryOrderWaitedDto dto);
 
         /// <summary>
         /// 受理类型前10

+ 87 - 0
src/Hotline.Application/Orders/OrderApplication.cs

@@ -2462,6 +2462,93 @@ public class OrderApplication : IOrderApplication, IScopeDependency
             .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);
     }
+
+    public ISugarQueryable<OrderVisitDetail> MayScreenList(MayScreenListDto dto) {
+        var query = _orderVisitedDetailRepository.Queryable(false, true)
+            .Includes(x => x.OrderVisit)
+            .Includes(x => x.OrderVisit, y => y.Order)
+            .Includes(x => x.OrderVisit, y => y.Employee)
+            //.LeftJoin<OrderScreen>((x, s) => x.Id == s.VisitDetailId && s.IsDeleted == false)
+            .Includes(x => x.OrderScreens)
+            .Where(x => x.OrderScreens.Any(s => s.Status == EScreenStatus.SendBack && s.ScreenType == dto.ScreenType && s.SendBackApply == true) ||
+                        x.OrderScreens.Any() == false
+            //|| x.OrderScreens.Any(s => (s.Status != EScreenStatus.SendBack && s.SendBackApply != true)) == false
+            )
+            .WhereIF(dto.ScreenType == EOrderScreenType.Seat, x => x.OrderVisit.Order.IsProvince == false)
+            .WhereIF(dto.ScreenSendBack is 1,
+                x => x.OrderScreens.Any(s => s.Status == EScreenStatus.SendBack && s.ScreenType == dto.ScreenType && s.SendBackApply == true))
+            .WhereIF(dto.ScreenSendBack is 2,
+                x => x.OrderScreens.Any(s => (s.Status != EScreenStatus.SendBack && s.ScreenType == dto.ScreenType && s.SendBackApply != true)) ==
+                     false)
+            .WhereIF(!string.IsNullOrEmpty(dto.No), x => x.OrderVisit.Order!.No!.Contains(dto.No!))
+            .WhereIF(!string.IsNullOrEmpty(dto.Title), x => x.OrderVisit.Order!.Title!.Contains(dto.Title!))
+            .WhereIF(dto.IsProvince.HasValue, x => x.OrderVisit.Order!.IsProvince == dto.IsProvince)
+            .WhereIF(!string.IsNullOrEmpty(dto.AcceptType), x => x.OrderVisit.Order!.AcceptTypeCode! == dto.AcceptType!)
+            .WhereIF(!string.IsNullOrEmpty(dto.HotspotSpliceName),
+                x => x.OrderVisit.Order!.Hotspot.HotSpotFullName!.StartsWith(dto.HotspotSpliceName!))
+            .WhereIF(!string.IsNullOrEmpty(dto.SourceChannel), x => x.OrderVisit.Order!.SourceChannelCode! == dto.SourceChannel!)
+            .WhereIF(!string.IsNullOrEmpty(dto.OrgLevelOneName), x => x.OrderVisit.Order!.OrgLevelOneName!.Contains(dto.OrgLevelOneName!))
+            .WhereIF(!string.IsNullOrEmpty(dto.CurrentHandleOrgName),
+                x => x.OrderVisit.Order!.CurrentHandleOrgName!.Contains(dto.CurrentHandleOrgName!))
+            .WhereIF(!string.IsNullOrEmpty(dto.VisitOrgName), x => x.VisitOrgName!.Contains(dto.VisitOrgName!))
+            .WhereIF(dto.CreationTime.HasValue && dto.EndCreationTime.HasValue,
+                x => x.OrderVisit.Order!.CreationTime >= dto.CreationTime && x.OrderVisit.Order!.CreationTime <= dto.EndCreationTime)
+            .WhereIF(dto.CurrentHandleTime.HasValue && dto.EndCurrentHandleTime.HasValue,
+                x => x.OrderVisit.Order!.CurrentHandleTime >= dto.CurrentHandleTime &&
+                     x.OrderVisit.Order!.ActualHandleTime <= dto.EndCurrentHandleTime)
+            .WhereIF(dto.FiledTime.HasValue && dto.EndFiledTime.HasValue,
+                x => x.OrderVisit.Order!.FiledTime >= dto.FiledTime && x.OrderVisit.Order!.FiledTime <= dto.EndFiledTime)
+            .WhereIF(dto.VisitTime.HasValue && dto.EndVisitTime.HasValue,
+                x => x.OrderVisit.VisitTime >= dto.VisitTime && x.OrderVisit.VisitTime <= dto.EndVisitTime)
+            .WhereIF(dto.IsHomePage.HasValue && dto.IsHomePage == true,
+                x => x.OrderVisit.VisitTime < dto.CreationTimeEnd && x.OrderVisit.VisitTime > dto.CreationTimeStart)
+            //.WhereIF(dto.CounterSignType.HasValue, x => x.OrderVisit.Order!.CounterSignType == dto.CounterSignType)
+            //.WhereIF(!string.IsNullOrEmpty(dto.OrgProcessingResults),
+            //    x => SqlFunc.JsonField(x.OrgProcessingResults, "Key") == dto.OrgProcessingResults)
+            //.WhereIF(!string.IsNullOrEmpty(dto.OrgHandledAttitude),
+            //    x => SqlFunc.JsonListObjectAny(x.OrgHandledAttitude, "Key", dto.OrgHandledAttitude))
+            //.WhereIF(!string.IsNullOrEmpty(dto.OrgNoSatisfiedReason),
+            //    x => SqlFunc.JsonField(x.OrgNoSatisfiedReason, "Key") == dto.OrgNoSatisfiedReason)
+            .Where(x => x.OrderVisit.VisitState == EVisitState.Visited && x.OrderVisit.IsCanHandle);
+		if (_sessionContext.OrgId != null && !_sessionContext.OrgIsCenter)
+		{
+			query.WhereIF(!string.IsNullOrEmpty(dto.Keyword),
+					x => x.OrderVisit.Order.Title.Contains(dto.Keyword!) ||
+						 x.OrderVisit.Order.No.Contains(dto.Keyword!))
+				.Where(x => x.VisitTarget == EVisitTarget.Org && x.VisitOrgCode == _sessionContext.OrgId && (
+					SqlFunc.JsonField(x.OrgProcessingResults, "Key") == "1" ||
+					SqlFunc.JsonField(x.OrgProcessingResults, "Key") == "2" ||
+					SqlFunc.JsonField(x.OrgHandledAttitude, "Key") == "1" ||
+					SqlFunc.JsonField(x.OrgHandledAttitude, "Key") == "2"
+				));
+		}
+		else
+		{
+			query.WhereIF(!string.IsNullOrEmpty(dto.Keyword),
+					x => x.OrderVisit.Order.Title.Contains(dto.Keyword!) ||
+						 x.OrderVisit.Order.No.Contains(dto.Keyword!))
+				.WhereIF(dto.ScreenType == EOrderScreenType.Org, x => x.VisitTarget == EVisitTarget.Org && (
+					SqlFunc.JsonField(x.OrgProcessingResults, "Key") == "1" ||
+					SqlFunc.JsonField(x.OrgProcessingResults, "Key") == "2" ||
+					SqlFunc.JsonField(x.OrgHandledAttitude, "Key") == "1" ||
+					SqlFunc.JsonField(x.OrgHandledAttitude, "Key") == "2"
+				))
+				.WhereIF(dto.ScreenType == EOrderScreenType.Seat,
+					x => x.VisitTarget == EVisitTarget.Seat &&
+						 (x.SeatEvaluate == ESeatEvaluate.VeryNoSatisfied || x.SeatEvaluate == ESeatEvaluate.NoSatisfied))
+				;
+		}
+
+		 return query.OrderByIF(dto is { SortRule: 0, SortField: "order.startTime" }, x => x.OrderVisit.Order.StartTime, OrderByType.Asc)
+			.OrderByIF(dto is { SortRule: 1, SortField: "order.startTime" }, x => x.OrderVisit.Order.StartTime, OrderByType.Desc)
+			.OrderByIF(dto is { SortRule: 0, SortField: "order.actualHandleTime" }, x => x.OrderVisit.Order.ActualHandleTime, OrderByType.Asc)
+			.OrderByIF(dto is { SortRule: 1, SortField: "order.actualHandleTime" }, x => x.OrderVisit.Order.ActualHandleTime, OrderByType.Desc)
+			.OrderByIF(dto is { SortRule: 0, SortField: "order.filedTime" }, x => x.OrderVisit.Order.FiledTime, OrderByType.Asc)
+			.OrderByIF(dto is { SortRule: 1, SortField: "order.filedTime" }, x => x.OrderVisit.Order.FiledTime, OrderByType.Desc)
+			.OrderByIF(dto is { SortRule: 0, SortField: "orderVisit.visitTime" }, x => x.OrderVisit.VisitTime, OrderByType.Asc)
+			.OrderByIF(dto is { SortRule: 1, SortField: "orderVisit.visitTime" }, x => x.OrderVisit.VisitTime, OrderByType.Desc)
+			.OrderByIF(dto.SortRule is null, x => x.CreationTime, OrderByType.Desc);
+	}
     #endregion
 
     #region private