Files
rent/订单费用计算逻辑说明.md
T
2026-05-19 16:23:01 +08:00

3.2 KiB
Raw Blame History

订单费用计算逻辑说明

问题诊断

如果商家端订单详情显示不正确,可能是以下原因:

1. 旧订单数据问题

在修复逻辑之前创建的订单,其 serviceFeemerchantIncome 字段可能是按照旧逻辑计算的,或者为默认值0。

解决方案:

  • 需要对现有订单数据进行修复
  • 或者在前端显示时进行兼容处理

2. 字段映射问题

检查前端是否正确读取了后端返回的字段名。

正确的费用计算逻辑

后端计算(order.service.ts

// 1. 计算房费
roomAmount = 每日房价总和 × 房间数

// 2. 处理优惠券
couponDiscount = 根据优惠券规则计算(基于房费)

// 3. 计算订单总额
totalAmount = roomAmount

// 4. 计算用户实付
payAmount = roomAmount - couponDiscount

// 5. 计算平台服务费(基于用户实付金额)
serviceFee = payAmount × 5%

// 6. 计算商家收入
merchantIncome = payAmount - serviceFee

费用示例

假设:

  • 房费:1000元
  • 优惠券:100元
  • 服务费率:5%

计算结果:

  • roomAmount = 1000元
  • couponDiscount = 100元
  • totalAmount = 1000元
  • payAmount = 1000 - 100 = 900元
  • serviceFee = 900 × 5% = 45元(基于实付金额)
  • merchantIncome = 900 - 45 = 855元

验证公式

用户实付 = 平台收入 + 商家收入
900 = 45 + 855 ✓

前端显示

小程序用户端

  • 房费:¥1000
  • 优惠券:-¥100
  • 实付金额:¥900
  • 不显示服务费

商家端

  • 房费:¥1000
  • 优惠券折扣:-¥100
  • 用户实付:¥900
  • 平台服务费:¥45(实付金额的5%
  • 商家收入:¥855(实付金额 - 服务费)

平台端

  • 显示完整的费用明细,包括所有字段

数据修复脚本

如果需要修复旧订单数据,可以执行以下SQL:

-- 修复订单的服务费和商家收入(基于用户实付金额计算)
UPDATE orders 
SET 
  service_fee = ROUND(pay_amount * 0.05, 2),
  merchant_income = ROUND(pay_amount - ROUND(pay_amount * 0.05, 2), 2)
WHERE 
  service_fee = 0 
  OR merchant_income = 0
  OR service_fee != ROUND(pay_amount * 0.05, 2);

前端兼容处理

如果不想修复旧数据,可以在前端进行兼容处理:

商家端 OrderDetail.tsx

// 计算服务费(如果后端没有返回或为0,基于实付金额计算)
const serviceFee = order.serviceFee || (Number(order.payAmount) * 0.05).toFixed(2);

// 计算商家收入(如果后端没有返回或为0)
const merchantIncome = order.merchantIncome || 
  (Number(order.payAmount) - Number(serviceFee)).toFixed(2);

测试验证

创建新订单后,检查以下内容:

  1. 数据库检查
SELECT 
  id,
  order_no,
  room_amount,
  service_fee,
  coupon_discount,
  total_amount,
  pay_amount,
  merchant_income
FROM orders 
WHERE id = 订单ID;
  1. 验证计算
  • service_fee = pay_amount × 0.05
  • pay_amount = room_amount - coupon_discount
  • merchant_income = pay_amount - service_fee
  • pay_amount = service_fee + merchant_income
  1. 前端显示
  • 小程序:只显示房费、优惠券、实付金额
  • 商家端:显示完整费用明细
  • 所有金额显示正确,无NaN或undefined