fix 订餐返回当前信息,增加数量入参和响应

This commit is contained in:
2024-03-21 10:35:24 +08:00
parent 0e1f6cb4a0
commit 367ede2eeb
8 changed files with 113 additions and 42 deletions

View File

@@ -60,7 +60,10 @@ public class DishesMenusController : ControllerBase
/// <param name="categoryCodes"></param> /// <param name="categoryCodes"></param>
/// <returns></returns> /// <returns></returns>
[HttpGet("dishes-selections")] [HttpGet("dishes-selections")]
public async Task<List<DishesDetailResponse>> GetDishesUnderCurrentMenuAsync(Guid businessPlaceCode, DateTime date, ShiftEnumType? shiftType, [FromQuery] List<Guid> categoryCodes) public async Task<List<DishesDetailResponse>> GetDishesUnderCurrentMenuAsync(Guid businessPlaceCode,
DateTime date,
ShiftEnumType? shiftType,
[FromQuery] List<Guid> categoryCodes)
{ {
return await _dishesMenuService.GetDishesUnderCurrentMenuAsync(businessPlaceCode, date, shiftType, categoryCodes); return await _dishesMenuService.GetDishesUnderCurrentMenuAsync(businessPlaceCode, date, shiftType, categoryCodes);
} }

View File

@@ -34,6 +34,11 @@ public class DishesDetailResponse
/// </summary> /// </summary>
public decimal Price { get; set; } public decimal Price { get; set; }
/// <summary>
/// 剩余数量
/// </summary>
public int Number { get; set; }
/// <summary> /// <summary>
/// 单位 /// 单位
/// </summary> /// </summary>

View File

@@ -83,10 +83,20 @@ public class DishesMenuService : IDishesMenuService
.Where((x, dishes) => dishes.Enable) .Where((x, dishes) => dishes.Enable)
.WhereIF(shiftType.HasValue, x => x.ShiftType == shiftType) .WhereIF(shiftType.HasValue, x => x.ShiftType == shiftType)
.WhereIF(categoryCodes.IsPresent(), (x, dishes) => categoryCodes.Contains(dishes.CategoryCode)) .WhereIF(categoryCodes.IsPresent(), (x, dishes) => categoryCodes.Contains(dishes.CategoryCode))
.Select((x, dishes) => dishes) .Select((x, dishes) => new DishesDetailResponse
{
BusinessPlaceCode = x.BusinessPlaceCode,
CategoryCode = dishes.CategoryCode,
CustomCode = x.CustomCode,
Description = dishes.Description,
ImageUrl = dishes.ImageUrl,
Price = dishes.Price,
Name = dishes.Name,
Number = x.Number,
})
.ToListAsync(); .ToListAsync();
return data.Adapt<List<DishesDetailResponse>>(); return data;
} }
public async Task SaveDishesMenuAsync(DishesMenuSaveRequest request) public async Task SaveDishesMenuAsync(DishesMenuSaveRequest request)

View File

@@ -68,9 +68,9 @@ public class OrdersController : ControllerBase
/// <returns></returns> /// <returns></returns>
[HttpPost("booking")] [HttpPost("booking")]
[Transactional] [Transactional]
public async Task Booking(BookingMealRequest request) public async Task<BookingResponse> Booking(BookingMealRequest request)
{ {
await _bookingOrderService.BookingAsync(request); return await _bookingOrderService.BookingAsync(request);
} }
/// <summary> /// <summary>

View File

@@ -30,6 +30,12 @@ public class BookingMealRequest : IValidatableObject
[Required(ErrorMessage = "选菜不能为空")] [Required(ErrorMessage = "选菜不能为空")]
public string DishesCode { get; set; } public string DishesCode { get; set; }
/// <summary>
/// 购买数量
/// </summary>
[Range(0, 100)]
public int Number { get; set; }
/// <summary> /// <summary>
/// 消费来源 /// 消费来源
/// </summary> /// </summary>

View File

@@ -0,0 +1,32 @@
using Dlhis.Entity.Canteen.Enums;
using Kurisu.AspNetCore.Utils.Extensions;
namespace Dlhis.Canteen.Order.Response;
public class BookingResponse
{
/// <summary>
/// 订单号
/// </summary>
public string No { get; set; }
/// <summary>
/// 订单时间
/// </summary>
public DateTime CreateTime { get; set; }
/// <summary>
/// 消费金额
/// </summary>
public decimal Amount { get; set; }
/// <summary>
/// 支付方式
/// </summary>
public BalanceRecordSourceEnumType Source { get; set; }
/// <summary>
/// 支付方式
/// </summary>
public string SourceDesc => Source.GetDescription();
}

View File

@@ -12,7 +12,7 @@ public interface IBookingOrderService
/// </summary> /// </summary>
/// <param name="request"></param> /// <param name="request"></param>
/// <returns></returns> /// <returns></returns>
Task BookingAsync(BookingMealRequest request); Task<BookingResponse> BookingAsync(BookingMealRequest request);
Task<Pagination<OrderBookingResponse>> GetBookingPageAsync(OrderBookingPageRequest request); Task<Pagination<OrderBookingResponse>> GetBookingPageAsync(OrderBookingPageRequest request);

View File

@@ -28,7 +28,7 @@ public class BookingOrderService : BaseOrderService, IBookingOrderService
_disheMenuApi = disheMenuApi; _disheMenuApi = disheMenuApi;
} }
public async Task BookingAsync(BookingMealRequest request) public async Task<BookingResponse> BookingAsync(BookingMealRequest request)
{ {
var gainfo = await CheckExistsMyBookingsAsync(request.BookingDate, request.ShiftType); var gainfo = await CheckExistsMyBookingsAsync(request.BookingDate, request.ShiftType);
@@ -56,7 +56,7 @@ public class BookingOrderService : BaseOrderService, IBookingOrderService
Source = request.Source, Source = request.Source,
UserNo = gainfo.No, UserNo = gainfo.No,
UserCode = gainfo.Code, UserCode = gainfo.Code,
Amount = -Math.Abs(menuDetail.Price), Amount = -Math.Abs(menuDetail.Price * request.Number),
BusinessPlaceCode = request.BusinessPlaceCode, BusinessPlaceCode = request.BusinessPlaceCode,
BusinessShiftCode = null, BusinessShiftCode = null,
ShiftType = request.ShiftType, ShiftType = request.ShiftType,
@@ -88,50 +88,56 @@ public class BookingOrderService : BaseOrderService, IBookingOrderService
await _disheMenuApi.GetBookingDishesDetailAsync(request.BookingDate, request.BusinessPlaceCode, (int)request.ShiftType, request.DishesCode); await _disheMenuApi.GetBookingDishesDetailAsync(request.BookingDate, request.BusinessPlaceCode, (int)request.ShiftType, request.DishesCode);
var menuDetail = menuDetailResult.Data; var menuDetail = menuDetailResult.Data;
menuDetail.ThrowIfNull("预定失败,菜品已经下架"); menuDetail.ThrowIfNull("预定失败,菜品已经下架");
menuDetail.Number -= 1; menuDetail.Number -= request.Number;
(menuDetail.Number < 0).ThrowIfTrue($"{menuDetail.DishesName}已售罄"); (menuDetail.Number < 0).ThrowIfTrue($"{menuDetail.DishesName}已售罄");
var mealInfo = await _dbContext.Queryable<GainfoMealEntity>().Where(x => x.UserNo == order.UserNo).FirstAsync(); //餐补
if (mealInfo == null) if (request.Source == BalanceRecordSourceEnumType.LocalTenantSubsidies)
{ {
await _dbContext.InsertAsync(new GainfoMealEntity
var mealInfo = await _dbContext.Queryable<GainfoMealEntity>().Where(x => x.UserNo == order.UserNo).FirstAsync();
if (mealInfo == null)
{ {
Balance = 0, await _dbContext.InsertAsync(new GainfoMealEntity
BalanceOfRecharge = 0, {
BalanceOfSubsidies = 0, Balance = 0,
UserCode = gainfo.Code, BalanceOfRecharge = 0,
UserNo = gainfo.No, BalanceOfSubsidies = 0,
Version = 0, UserCode = gainfo.Code,
}); UserNo = gainfo.No,
Version = 0,
});
(mealInfo == null).ThrowIfTrue("余额不足,无法消费"); (mealInfo == null).ThrowIfTrue("余额不足,无法消费");
}
//金额+-
mealInfo.Balance += order.Amount;
(mealInfo.Balance < 0).ThrowIfTrue("余额不足,无法消费");
var effectMeal = await _dbContext.Updateable<GainfoMealEntity>()
.SetColumns(x => x.Balance == mealInfo.Balance)
.SetColumns(x => x.Version == x.Version + 1)
.Where(x => x.UserNo == order.UserNo && x.Version == mealInfo.Version)//必须与查询时的version一致
.ExecuteCommandAsync();
if (effectMeal <= 0) throw new VersionExceptions("更新版本冲突");
} }
//金额+-
mealInfo.Balance += order.Amount;
(mealInfo.Balance < 0).ThrowIfTrue("余额不足,无法消费");
var effect = await _dbContext.Updateable<GainfoMealEntity>()
.SetColumns(x => x.Balance == mealInfo.Balance)
.SetColumns(x => x.Version == x.Version + 1)
.Where(x => x.UserNo == order.UserNo && x.Version == mealInfo.Version)//必须与查询时的version一致
.ExecuteCommandAsync();
if (effect <= 0) throw new VersionExceptions("更新版本冲突"); var effectMenu = await _dbContext.Updateable<DishesMenuEntity>()
.SetColumns(x => x.Number == menuDetail.Number)
.SetColumns(x => x.Version == x.Version + 1)
.SetColumns(x => x.ModifiedTime == now)
.Where(x => x.Date == menuDetail.Date
&& x.ShiftType == request.ShiftType
&& x.BusinessPlaceCode == request.BusinessPlaceCode
&& x.DishesCode == request.DishesCode
&& x.Version == menuDetail.Version
)
.ExecuteCommandAsync();
effect = await _dbContext.Updateable<DishesMenuEntity>() if (effectMenu <= 0) throw new VersionExceptions("更新版本冲突");
.SetColumns(x => x.Number == menuDetail.Number)
.SetColumns(x => x.Version == x.Version + 1)
.SetColumns(x => x.ModifiedTime == now)
.Where(x => x.Date == menuDetail.Date
&& x.ShiftType == request.ShiftType
&& x.BusinessPlaceCode == request.BusinessPlaceCode
&& x.DishesCode == request.DishesCode
&& x.Version == menuDetail.Version
)
.ExecuteCommandAsync();
if (effect <= 0) throw new VersionExceptions("更新版本冲突");
//写入记录 //写入记录
var balanceRecord = order.Adapt<BalanceRecordEntity>(); var balanceRecord = order.Adapt<BalanceRecordEntity>();
@@ -147,6 +153,15 @@ public class BookingOrderService : BaseOrderService, IBookingOrderService
}); });
}, 10); }, 10);
return new BookingResponse
{
No = order.No,
CreateTime = order.CreateTime,
Source = order.Source,
Amount = Math.Abs(order.Amount)
};
} }