current_total_price 全链路(超详细版)

1. 业务定义(一句话)

⚡⚡⚡ current_total_price 是中间展示口径,等于商品小计加运费(current_subtotal_price + current_shipping_price),仅用于购物车/结账页展示,不参与订单应付金额计算。

2. 与 total_price 的本质区别

对比维度current_total_pricetotal_price
计算公式subtotal + shippingsubtotal + shipping + tax + coupon + promotion + tip + payment + insurance + offer
参与字段数2项9项
参与 total_price 汇总❌ 否,仅展示✅ 是,最终应付金额
用途购物车/结账页实时预览支付、对账、退款口径
含税❌ 否✅ 含税
含优惠❌ 否✅ 含优惠扣减

⚡⚡⚡ 两者不是层层递进关系,current_total_price 是「商品+运费」的粗略预览,total_price 是含全部费用的最终应付额。

3. 核心入口

// OrderService.php:renew 中
$current_total_price = $current_subtotal_price + $current_shipping_price;

renew 方法中计算后写入 o_order.current_total_price,但不参与 total_price 的汇总

4. 字段输出结构

字段类型含义示例
o_order.current_total_pricefloat中间展示总价265.00
o_order.current_subtotal_pricefloat商品小计250.00
o_order.current_shipping_pricefloat运费15.00

5. 边界场景说明

5.1 运费为 0

current_total_price == current_subtotal_price(与 subtotal 完全相同)。

5.2 自提/无需配送

current_shipping_price = 0current_total_price 纯商品额。

5.3 切换地址导致运费变化

renew 重算后 current_shipping_price 变化,current_total_price 同步更新,展示给买家。

5.4 优惠券不影响 current_total_price

优惠券(coupon)和活动(promotion)在 current_total_price 公式中没有位置,只出现在 total_price 中。

6. 关键代码索引

逻辑文件:行号
current_total_price 计算与写回OrderService.php:renew
参与字段 subtotalOrderService.php:2271
参与字段 shippingOrderService.php:2272

7. 设计矛盾记录(2026-06-16)

7.1 矛盾现象

current_total_price 与同系列 current_* 字段口径不一致

字段是否为用户货币值是否参与 total_price 汇总
current_subtotal_price✅ 已通过 currencyExchange 转用户货币
current_shipping_price✅ 已通过 currencyExchange 转用户货币
current_tax_price✅ 用户货币
current_promotion_price✅ 用户货币
current_coupon_price✅ 用户货币
current_total_price❌ 只等于 subtotal + shipping❌ 仅展示,不参与汇总

同系列字段全部是用户货币值且参与 total_price 汇总,唯独 current_total_price 是例外。

7.2 代码证据

CartService.php:742–751 — cart 层 total_price_currency 是完整的 9 项之和:

$return['total_price_currency'] = 0;
$return['total_price_currency'] += $return['subtotal_price_currency'];
$return['total_price_currency'] += $return['shipping_price_currency'] ?? 0;
$return['total_price_currency'] += $return['payment_price_currency'] ?? 0;
$return['total_price_currency'] += $return['tip_price_currency'] ?? 0;
$return['total_price_currency'] += $return['tax_price_currency'] ?? 0;
$return['total_price_currency'] += $return['coupon_price_currency'] ?? 0;
$return['total_price_currency'] += $return['insurance_price_currency'] ?? 0;
$return['total_price_currency'] += $return['promotion_price_currency'] ?? 0;
$return['total_price_currency'] += $return['diy_offer_price_currency'] ?? 0;

OrderService.php:2077, 2276 — order 层 current_total_price 只是两数之和:

$current_total_price = $current_subtotal_price + $order['current_shipping_price'];

7.3 结论

current_total_price 更像是历史遗留的简化预览字段(只表达商品+运费),没有随业务扩展(tax/coupon/promotion/offer 等字段陆续加入)而同步演进。

Cart 层已有正确的 total_price_currency = 9项之和;Order 层的 current_total_pricetotal_price 是两套独立口径,不存在包含关系。

建议后续审视该字段是否仍有保留必要,或改为与 total_price 口径一致。