Parcourir la source

下单时计算餐具费用

lutong il y a 2 mois
Parent
commit
03e9c02347

+ 0 - 1
alien-dining/src/main/java/shop/alien/dining/service/DiningUserService.java

@@ -19,7 +19,6 @@ public interface DiningUserService {
      *
      * @param code      微信登录凭证(通过 wx.login() 获取,必填)
      * @param phoneCode 手机号凭证(通过 wx.getPhoneNumber() 获取,可选)
-     * @param storeId   店铺ID(可选)
      * @param macIp     客户端IP地址
      * @return 用户信息(包含 token)
      */

+ 45 - 12
alien-dining/src/main/java/shop/alien/dining/service/impl/StoreOrderServiceImpl.java

@@ -74,6 +74,12 @@ public class StoreOrderServiceImpl extends ServiceImpl<StoreOrderMapper, StoreOr
             throw new RuntimeException("桌号不存在");
         }
 
+        // 查询门店信息(用于获取餐具费)
+        StoreInfo storeInfo = storeInfoMapper.selectById(table.getStoreId());
+        if (storeInfo == null) {
+            throw new RuntimeException("门店不存在");
+        }
+
         // 获取购物车
         CartDTO cart = cartService.getCart(dto.getTableId());
         if (cart.getItems() == null || cart.getItems().isEmpty()) {
@@ -124,12 +130,8 @@ public class StoreOrderServiceImpl extends ServiceImpl<StoreOrderMapper, StoreOr
                 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);
@@ -148,12 +150,8 @@ public class StoreOrderServiceImpl extends ServiceImpl<StoreOrderMapper, StoreOr
             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);
@@ -1387,6 +1385,41 @@ public class StoreOrderServiceImpl extends ServiceImpl<StoreOrderMapper, StoreOr
         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
     public void migrateTableData(Integer fromTableId, Integer toTableId, Integer userId) {
         log.info("换桌迁移数据, fromTableId={}, toTableId={}, userId={}", fromTableId, toTableId, userId);