fix 订餐返回当前信息,增加数量入参和响应
This commit is contained in:
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
32
Src/Dlhis.Canteen/Order/Response/BookingResponse.cs
Normal file
32
Src/Dlhis.Canteen/Order/Response/BookingResponse.cs
Normal 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();
|
||||||
|
}
|
||||||
@@ -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);
|
||||||
|
|||||||
@@ -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)
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user