|
|
@@ -46,6 +46,21 @@ public class DiningServiceImpl implements DiningService {
|
|
|
private final shop.alien.dining.service.OrderLockService orderLockService;
|
|
|
|
|
|
@Override
|
|
|
+ public TableDiningStatusVO getTableDiningStatus(Integer tableId) {
|
|
|
+ if (tableId == null) {
|
|
|
+ return new TableDiningStatusVO(null, false, null);
|
|
|
+ }
|
|
|
+ StoreTable table = storeTableMapper.selectById(tableId);
|
|
|
+ if (table == null) {
|
|
|
+ return new TableDiningStatusVO(tableId, false, null);
|
|
|
+ }
|
|
|
+ boolean inDining = Integer.valueOf(1).equals(table.getStatus())
|
|
|
+ && table.getDinerCount() != null && table.getDinerCount() > 0;
|
|
|
+ Integer dinerCount = inDining ? table.getDinerCount() : null;
|
|
|
+ return new TableDiningStatusVO(tableId, inDining, dinerCount);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
public DiningPageInfoVO getDiningPageInfo(Integer tableId, Integer dinerCount) {
|
|
|
log.info("获取点餐页面信息, tableId={}, dinerCount={}", tableId, dinerCount);
|
|
|
StoreTable table = storeTableMapper.selectById(tableId);
|
|
|
@@ -58,6 +73,23 @@ public class DiningServiceImpl implements DiningService {
|
|
|
throw new RuntimeException("门店不存在");
|
|
|
}
|
|
|
|
|
|
+ // 第一个用户:传入用餐人数时,将餐桌置为就餐中并保存就餐人数
|
|
|
+ if (dinerCount != null && dinerCount > 0) {
|
|
|
+ table.setStatus(1); // 就餐中
|
|
|
+ table.setDinerCount(dinerCount);
|
|
|
+ storeTableMapper.updateById(table);
|
|
|
+ log.info("首客选桌并填写用餐人数, tableId={}, dinerCount={}, 餐桌状态已置为就餐中", tableId, dinerCount);
|
|
|
+ } else {
|
|
|
+ // 第二个及后续用户:若餐桌已就餐中且表内已有就餐人数,直接使用
|
|
|
+ if (Integer.valueOf(1).equals(table.getStatus()) && table.getDinerCount() != null && table.getDinerCount() > 0) {
|
|
|
+ dinerCount = table.getDinerCount();
|
|
|
+ log.info("餐桌已就餐中,使用已保存的就餐人数, tableId={}, dinerCount={}", tableId, dinerCount);
|
|
|
+ } else {
|
|
|
+ // 餐桌空闲且未传就餐人数时要求必填
|
|
|
+ throw new RuntimeException("请选择用餐人数");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
DiningPageInfoVO vo = new DiningPageInfoVO();
|
|
|
vo.setStoreName(storeInfo.getStoreName());
|
|
|
vo.setTableNumber(table.getTableNumber());
|
|
|
@@ -291,8 +323,10 @@ public class DiningServiceImpl implements DiningService {
|
|
|
public OrderConfirmVO getOrderConfirmInfo(Integer tableId, Integer dinerCount, Integer userId) {
|
|
|
log.info("获取订单确认页面信息, tableId={}, dinerCount={}, userId={}", tableId, dinerCount, userId);
|
|
|
|
|
|
- // 获取点餐页面信息
|
|
|
+ // 获取点餐页面信息(就餐中且未传人数时,内部会使用桌台已保存的就餐人数)
|
|
|
DiningPageInfoVO pageInfo = getDiningPageInfo(tableId, dinerCount);
|
|
|
+ int effectiveDinerCount = pageInfo.getDinerCount() != null && pageInfo.getDinerCount() > 0
|
|
|
+ ? pageInfo.getDinerCount() : (dinerCount != null ? dinerCount : 0);
|
|
|
|
|
|
// 获取购物车
|
|
|
CartDTO cart = cartService.getCart(tableId);
|
|
|
@@ -304,7 +338,7 @@ public class DiningServiceImpl implements DiningService {
|
|
|
OrderConfirmVO vo = new OrderConfirmVO();
|
|
|
vo.setStoreName(pageInfo.getStoreName());
|
|
|
vo.setTableNumber(pageInfo.getTableNumber());
|
|
|
- vo.setDinerCount(dinerCount);
|
|
|
+ vo.setDinerCount(pageInfo.getDinerCount() != null ? pageInfo.getDinerCount() : dinerCount);
|
|
|
// 联系电话和备注由前端传入,这里不设置默认值
|
|
|
vo.setItems(cart.getItems());
|
|
|
vo.setTotalAmount(cart.getTotalAmount());
|
|
|
@@ -314,8 +348,8 @@ public class DiningServiceImpl implements DiningService {
|
|
|
// 计算餐具费(默认1元/人)
|
|
|
BigDecimal tablewareUnitPrice = new BigDecimal("1.00");
|
|
|
BigDecimal tablewareFee = BigDecimal.ZERO;
|
|
|
- if (dinerCount != null && dinerCount > 0) {
|
|
|
- tablewareFee = tablewareUnitPrice.multiply(BigDecimal.valueOf(dinerCount));
|
|
|
+ if (effectiveDinerCount > 0) {
|
|
|
+ tablewareFee = tablewareUnitPrice.multiply(BigDecimal.valueOf(effectiveDinerCount));
|
|
|
}
|
|
|
vo.setTablewareFee(tablewareFee);
|
|
|
vo.setTablewareUnitPrice(tablewareUnitPrice);
|