fix 订餐分页查询优化

This commit is contained in:
2024-03-24 19:50:39 +08:00
parent 7fafb8844c
commit cfb0f263ae
3 changed files with 51 additions and 2 deletions

View File

@@ -1,5 +1,6 @@
using System.ComponentModel.DataAnnotations;
using Dlhis.Entity.Canteen.Enums;
using Kurisu.Core.CustomClass;
using Kurisu.Core.DataAccess.Dto;
namespace Dlhis.Canteen.Order.Request;
@@ -11,4 +12,21 @@ public class OrderBookingPageRequest : PageDto
/// </summary>
[EnumDataType(typeof(CanteenOrderStatusEnumType))]
public CanteenOrderStatusEnumType? OrderStatus { get; set; }
/// <summary>
/// 支付方式
/// </summary>
[EnumDataType(typeof(CanteenBusinessPlaceSourceEnumType))]
public CanteenBusinessPlaceSourceEnumType? Source { get; set; }
/// <summary>
/// 订餐日期区间
/// </summary>
public DateTimePeriod BookingPeriod { get; set; }
/// <summary>
/// 餐次
/// </summary>
[EnumDataType(typeof(ShiftEnumType))]
public ShiftEnumType? ShiftTpe { get; set; }
}

View File

@@ -47,7 +47,7 @@ public class OrderBookingResponse
/// <summary>
/// 订单时间
/// 下单时间
/// </summary>
public DateTime CreateTime { get; set; }
@@ -55,4 +55,15 @@ public class OrderBookingResponse
public CanteenOrderStatusEnumType Status { get; set; }
public string StatusDesc => Status.GetDescription();
/// <summary>
/// 订餐日期
/// </summary>
public DateTime BookingDate { get; set; }
/// <summary>
/// 支付方式
/// </summary>
public BalanceRecordSourceEnumType Source { get; set; }
public string SourceDesc => Source.GetDescription();
}

View File

@@ -179,6 +179,14 @@ public class BookingOrderService : BaseOrderService, IBookingOrderService
.Where(x => myCodes.Contains(x.BusinessPlaceCode))
.WhereIF(request.OrderStatus.HasValue, x => x.OrderStatus == request.OrderStatus)
.WhereIF(request.Search.IsPresent(), (x, ga) => x.UserCode == request.Search || ga.Name.Contains(request.Search))
.WhereIF(request.BookingPeriod?.Start.HasValue == true && request.BookingPeriod?.End.HasValue == true, x =>
SqlFunc.Subqueryable<CanteenOrderDetailEntity>()
.Where(p => p.OrderNo == x.No)
.Where(p => p.BookingDate >= request.BookingPeriod.Start)
.Where(p => p.BookingDate <= request.BookingPeriod.End)
.Any()
)
.WhereIF(request.ShiftTpe.HasValue, x => x.ShiftType == request.ShiftTpe)
.Select((x, ga) => new OrderBookingResponse
{
No = x.No,
@@ -189,10 +197,22 @@ public class BookingOrderService : BaseOrderService, IBookingOrderService
ShiftType = x.ShiftType,
Status = x.OrderStatus,
UserCode = x.UserCode,
UserName = ga.Name
UserName = ga.Name,
Source = x.Source,
})
.ToPageListAsync(request);
var nos = page.Data.Select(x => x.No).ToList();
var details = await DbContext.Queryable<CanteenOrderDetailEntity>()
.Where(x => nos.Contains(x.OrderNo))
.Select(x => new { x.OrderNo, x.BookingDate }).
ToListAsync();
page.Data.ForEach(x =>
{
x.BookingDate = details.FirstOrDefault(item => item.OrderNo == x.No).BookingDate;
});
return page;
}