diff --git a/Src/Dlhis.Basic/Dishes/Controller/DishesMenusController.cs b/Src/Dlhis.Basic/Dishes/Controller/DishesMenusController.cs
index 2ebeea48..b7f768ff 100644
--- a/Src/Dlhis.Basic/Dishes/Controller/DishesMenusController.cs
+++ b/Src/Dlhis.Basic/Dishes/Controller/DishesMenusController.cs
@@ -60,7 +60,10 @@ public class DishesMenusController : ControllerBase
///
///
[HttpGet("dishes-selections")]
- public async Task> GetDishesUnderCurrentMenuAsync(Guid businessPlaceCode, DateTime date, ShiftEnumType? shiftType, [FromQuery] List categoryCodes)
+ public async Task> GetDishesUnderCurrentMenuAsync(Guid businessPlaceCode,
+ DateTime date,
+ ShiftEnumType? shiftType,
+ [FromQuery] List categoryCodes)
{
return await _dishesMenuService.GetDishesUnderCurrentMenuAsync(businessPlaceCode, date, shiftType, categoryCodes);
}
diff --git a/Src/Dlhis.Basic/Dishes/Response/DishesDetailResponse.cs b/Src/Dlhis.Basic/Dishes/Response/DishesDetailResponse.cs
index ce412352..4d97b8d2 100644
--- a/Src/Dlhis.Basic/Dishes/Response/DishesDetailResponse.cs
+++ b/Src/Dlhis.Basic/Dishes/Response/DishesDetailResponse.cs
@@ -34,6 +34,11 @@ public class DishesDetailResponse
///
public decimal Price { get; set; }
+ ///
+ /// 剩余数量
+ ///
+ public int Number { get; set; }
+
///
/// 单位
///
diff --git a/Src/Dlhis.Basic/Dishes/Services/Implements/DishesMenuService.cs b/Src/Dlhis.Basic/Dishes/Services/Implements/DishesMenuService.cs
index 1ab10afd..4625543a 100644
--- a/Src/Dlhis.Basic/Dishes/Services/Implements/DishesMenuService.cs
+++ b/Src/Dlhis.Basic/Dishes/Services/Implements/DishesMenuService.cs
@@ -83,10 +83,20 @@ public class DishesMenuService : IDishesMenuService
.Where((x, dishes) => dishes.Enable)
.WhereIF(shiftType.HasValue, x => x.ShiftType == shiftType)
.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();
- return data.Adapt>();
+ return data;
}
public async Task SaveDishesMenuAsync(DishesMenuSaveRequest request)
diff --git a/Src/Dlhis.Canteen/Order/Controllers/OrdersController.cs b/Src/Dlhis.Canteen/Order/Controllers/OrdersController.cs
index 67e49e62..dafd75ae 100644
--- a/Src/Dlhis.Canteen/Order/Controllers/OrdersController.cs
+++ b/Src/Dlhis.Canteen/Order/Controllers/OrdersController.cs
@@ -68,9 +68,9 @@ public class OrdersController : ControllerBase
///
[HttpPost("booking")]
[Transactional]
- public async Task Booking(BookingMealRequest request)
+ public async Task Booking(BookingMealRequest request)
{
- await _bookingOrderService.BookingAsync(request);
+ return await _bookingOrderService.BookingAsync(request);
}
///
diff --git a/Src/Dlhis.Canteen/Order/Request/BookingMealRequest.cs b/Src/Dlhis.Canteen/Order/Request/BookingMealRequest.cs
index 525e27d2..e9f434e2 100644
--- a/Src/Dlhis.Canteen/Order/Request/BookingMealRequest.cs
+++ b/Src/Dlhis.Canteen/Order/Request/BookingMealRequest.cs
@@ -30,6 +30,12 @@ public class BookingMealRequest : IValidatableObject
[Required(ErrorMessage = "选菜不能为空")]
public string DishesCode { get; set; }
+ ///
+ /// 购买数量
+ ///
+ [Range(0, 100)]
+ public int Number { get; set; }
+
///
/// 消费来源
///
diff --git a/Src/Dlhis.Canteen/Order/Response/BookingResponse.cs b/Src/Dlhis.Canteen/Order/Response/BookingResponse.cs
new file mode 100644
index 00000000..beb1dfd5
--- /dev/null
+++ b/Src/Dlhis.Canteen/Order/Response/BookingResponse.cs
@@ -0,0 +1,32 @@
+using Dlhis.Entity.Canteen.Enums;
+using Kurisu.AspNetCore.Utils.Extensions;
+
+namespace Dlhis.Canteen.Order.Response;
+
+public class BookingResponse
+{
+ ///
+ /// 订单号
+ ///
+ public string No { get; set; }
+
+ ///
+ /// 订单时间
+ ///
+ public DateTime CreateTime { get; set; }
+
+ ///
+ /// 消费金额
+ ///
+ public decimal Amount { get; set; }
+
+ ///
+ /// 支付方式
+ ///
+ public BalanceRecordSourceEnumType Source { get; set; }
+
+ ///
+ /// 支付方式
+ ///
+ public string SourceDesc => Source.GetDescription();
+}
diff --git a/Src/Dlhis.Canteen/Order/Services/IBookingOrderService.cs b/Src/Dlhis.Canteen/Order/Services/IBookingOrderService.cs
index bbe5116c..efca34b5 100644
--- a/Src/Dlhis.Canteen/Order/Services/IBookingOrderService.cs
+++ b/Src/Dlhis.Canteen/Order/Services/IBookingOrderService.cs
@@ -12,7 +12,7 @@ public interface IBookingOrderService
///
///
///
- Task BookingAsync(BookingMealRequest request);
+ Task BookingAsync(BookingMealRequest request);
Task> GetBookingPageAsync(OrderBookingPageRequest request);
diff --git a/Src/Dlhis.Canteen/Order/Services/Implements/BookingOrderService.cs b/Src/Dlhis.Canteen/Order/Services/Implements/BookingOrderService.cs
index 1561ecf0..2c346e53 100644
--- a/Src/Dlhis.Canteen/Order/Services/Implements/BookingOrderService.cs
+++ b/Src/Dlhis.Canteen/Order/Services/Implements/BookingOrderService.cs
@@ -28,7 +28,7 @@ public class BookingOrderService : BaseOrderService, IBookingOrderService
_disheMenuApi = disheMenuApi;
}
- public async Task BookingAsync(BookingMealRequest request)
+ public async Task BookingAsync(BookingMealRequest request)
{
var gainfo = await CheckExistsMyBookingsAsync(request.BookingDate, request.ShiftType);
@@ -56,7 +56,7 @@ public class BookingOrderService : BaseOrderService, IBookingOrderService
Source = request.Source,
UserNo = gainfo.No,
UserCode = gainfo.Code,
- Amount = -Math.Abs(menuDetail.Price),
+ Amount = -Math.Abs(menuDetail.Price * request.Number),
BusinessPlaceCode = request.BusinessPlaceCode,
BusinessShiftCode = null,
ShiftType = request.ShiftType,
@@ -88,50 +88,56 @@ public class BookingOrderService : BaseOrderService, IBookingOrderService
await _disheMenuApi.GetBookingDishesDetailAsync(request.BookingDate, request.BusinessPlaceCode, (int)request.ShiftType, request.DishesCode);
var menuDetail = menuDetailResult.Data;
menuDetail.ThrowIfNull("预定失败,菜品已经下架");
- menuDetail.Number -= 1;
+ menuDetail.Number -= request.Number;
(menuDetail.Number < 0).ThrowIfTrue($"{menuDetail.DishesName}已售罄");
- var mealInfo = await _dbContext.Queryable().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().Where(x => x.UserNo == order.UserNo).FirstAsync();
+ if (mealInfo == null)
{
- Balance = 0,
- BalanceOfRecharge = 0,
- BalanceOfSubsidies = 0,
- UserCode = gainfo.Code,
- UserNo = gainfo.No,
- Version = 0,
- });
+ await _dbContext.InsertAsync(new GainfoMealEntity
+ {
+ Balance = 0,
+ BalanceOfRecharge = 0,
+ BalanceOfSubsidies = 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()
+ .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()
- .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()
+ .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()
- .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("更新版本冲突");
+ if (effectMenu <= 0) throw new VersionExceptions("更新版本冲突");
//写入记录
var balanceRecord = order.Adapt();
@@ -147,6 +153,15 @@ public class BookingOrderService : BaseOrderService, IBookingOrderService
});
}, 10);
+
+
+ return new BookingResponse
+ {
+ No = order.No,
+ CreateTime = order.CreateTime,
+ Source = order.Source,
+ Amount = Math.Abs(order.Amount)
+ };
}