|
@@ -74,6 +74,12 @@ public class StoreOrderServiceImpl extends ServiceImpl<StoreOrderMapper, StoreOr
|
|
|
throw new RuntimeException("桌号不存在");
|
|
throw new RuntimeException("桌号不存在");
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ // 查询门店信息(用于获取餐具费)
|
|
|
|
|
+ StoreInfo storeInfo = storeInfoMapper.selectById(table.getStoreId());
|
|
|
|
|
+ if (storeInfo == null) {
|
|
|
|
|
+ throw new RuntimeException("门店不存在");
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
// 获取购物车
|
|
// 获取购物车
|
|
|
CartDTO cart = cartService.getCart(dto.getTableId());
|
|
CartDTO cart = cartService.getCart(dto.getTableId());
|
|
|
if (cart.getItems() == null || cart.getItems().isEmpty()) {
|
|
if (cart.getItems() == null || cart.getItems().isEmpty()) {
|
|
@@ -124,12 +130,8 @@ public class StoreOrderServiceImpl extends ServiceImpl<StoreOrderMapper, StoreOr
|
|
|
throw new RuntimeException("优惠券不属于该门店");
|
|
throw new RuntimeException("优惠券不属于该门店");
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- // 计算餐具费(用于验证最低消费)
|
|
|
|
|
- BigDecimal tablewareUnitPrice = new BigDecimal("1.00");
|
|
|
|
|
- BigDecimal tablewareFee = BigDecimal.ZERO;
|
|
|
|
|
- if (dto.getDinerCount() != null && dto.getDinerCount() > 0) {
|
|
|
|
|
- tablewareFee = tablewareUnitPrice.multiply(BigDecimal.valueOf(dto.getDinerCount()));
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ // 计算餐具费(从门店信息获取)
|
|
|
|
|
+ BigDecimal tablewareFee = calculateTablewareFee(storeInfo, dto.getDinerCount());
|
|
|
|
|
|
|
|
// 验证最低消费(菜品总价 + 餐具费)
|
|
// 验证最低消费(菜品总价 + 餐具费)
|
|
|
BigDecimal totalWithTableware = cart.getTotalAmount().add(tablewareFee);
|
|
BigDecimal totalWithTableware = cart.getTotalAmount().add(tablewareFee);
|
|
@@ -148,12 +150,8 @@ public class StoreOrderServiceImpl extends ServiceImpl<StoreOrderMapper, StoreOr
|
|
|
cartService.markCouponUsed(dto.getTableId(), dto.getCouponId());
|
|
cartService.markCouponUsed(dto.getTableId(), dto.getCouponId());
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- // 计算餐具费(默认1元/人,可从配置读取)
|
|
|
|
|
- BigDecimal tablewareUnitPrice = new BigDecimal("1.00");
|
|
|
|
|
- BigDecimal tablewareFee = BigDecimal.ZERO;
|
|
|
|
|
- if (dto.getDinerCount() != null && dto.getDinerCount() > 0) {
|
|
|
|
|
- tablewareFee = tablewareUnitPrice.multiply(BigDecimal.valueOf(dto.getDinerCount()));
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ // 计算餐具费(从门店信息获取)
|
|
|
|
|
+ BigDecimal tablewareFee = calculateTablewareFee(storeInfo, dto.getDinerCount());
|
|
|
|
|
|
|
|
// 计算实付金额(菜品总价 + 餐具费 - 优惠金额)
|
|
// 计算实付金额(菜品总价 + 餐具费 - 优惠金额)
|
|
|
BigDecimal payAmount = cart.getTotalAmount().add(tablewareFee).subtract(discountAmount);
|
|
BigDecimal payAmount = cart.getTotalAmount().add(tablewareFee).subtract(discountAmount);
|
|
@@ -1387,6 +1385,41 @@ public class StoreOrderServiceImpl extends ServiceImpl<StoreOrderMapper, StoreOr
|
|
|
return "ORD" + timestamp + String.format("%04d", Integer.parseInt(random));
|
|
return "ORD" + timestamp + String.format("%04d", Integer.parseInt(random));
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 计算餐具费(从门店信息获取)
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param storeInfo 门店信息
|
|
|
|
|
+ * @param dinerCount 就餐人数
|
|
|
|
|
+ * @return 餐具费总额
|
|
|
|
|
+ */
|
|
|
|
|
+ private BigDecimal calculateTablewareFee(StoreInfo storeInfo, Integer dinerCount) {
|
|
|
|
|
+ if (storeInfo == null) {
|
|
|
|
|
+ log.warn("门店信息为空,返回默认餐具费 0.00");
|
|
|
|
|
+ return BigDecimal.ZERO;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ Integer tablewareFee = storeInfo.getTablewareFee();
|
|
|
|
|
+ if (tablewareFee == null || tablewareFee < 0) {
|
|
|
|
|
+ log.warn("门店餐具费未设置或无效, storeId={}, tablewareFee={},返回默认餐具费 0.00",
|
|
|
|
|
+ storeInfo.getId(), tablewareFee);
|
|
|
|
|
+ return BigDecimal.ZERO;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ if (dinerCount == null || dinerCount <= 0) {
|
|
|
|
|
+ log.warn("就餐人数无效, dinerCount={},返回默认餐具费 0.00", dinerCount);
|
|
|
|
|
+ return BigDecimal.ZERO;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // tablewareFee 是单价(元),乘以就餐人数得到总费用
|
|
|
|
|
+ BigDecimal unitPrice = BigDecimal.valueOf(tablewareFee);
|
|
|
|
|
+ BigDecimal totalFee = unitPrice.multiply(BigDecimal.valueOf(dinerCount));
|
|
|
|
|
+
|
|
|
|
|
+ log.info("计算餐具费, storeId={}, unitPrice={}, dinerCount={}, totalFee={}",
|
|
|
|
|
+ storeInfo.getId(), unitPrice, dinerCount, totalFee);
|
|
|
|
|
+
|
|
|
|
|
+ return totalFee;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
@Override
|
|
@Override
|
|
|
public void migrateTableData(Integer fromTableId, Integer toTableId, Integer userId) {
|
|
public void migrateTableData(Integer fromTableId, Integer toTableId, Integer userId) {
|
|
|
log.info("换桌迁移数据, fromTableId={}, toTableId={}, userId={}", fromTableId, toTableId, userId);
|
|
log.info("换桌迁移数据, fromTableId={}, toTableId={}, userId={}", fromTableId, toTableId, userId);
|