系统单预订trip_price数组动态求和及总价计算方案实现
问题背景
之前我在处理预订系统的总价计算时踩了个坑:一开始直接从post meta里取静态总价:
$booking_total = $post_metas['fcb_booking_total'][0];
但这种方式有个致命问题——当用户修改预订内容后,这个静态总价不会自动同步更新,导致邮件确认等场景展示的价格和实际订单完全不符。
我的核心需求是:
- 计算单个订单下所有
trip_price的实时总和 - 结合以下业务规则算出最终总价:
- 加收5%的附加费
- 支持用户选择全额支付或50%预付
- 允许管理员设置折扣金额
解决方案步骤
1. 动态拉取并累加所有trip_price
首先从数据库中获取当前订单对应的所有trip_price记录:
$get_price = $wpdb->get_results("select trip_price from fcb_booking where order_id = " . $order_id . " order by start_date_time asc");
执行后返回的是包含stdClass对象的数组,示例结果如下:
Array ( [0] => stdClass Object ( [trip_price] => 0 ) [1] => stdClass Object ( [trip_price] => 5000 ) )
接下来遍历数组,把所有trip_price累加得到动态总价,这样不管预订怎么修改,每次都会拉取最新的价格数据:
$get_price = $wpdb->get_results("select trip_price from fcb_booking where order_id = " . $order_id . " order by start_date_time asc"); $booking_total = 0; foreach($get_price as $key => $value) { $booking_total += $value->trip_price; };
2. 结合业务规则计算最终总价
在动态求和的基础上,加入附加费、支付选项和折扣的逻辑:
// 先叠加额外固定费用(如服务费等) $total = $booking_total + $extra_total; // 加收5%的附加费 $total = $total * 1.05; // 如果开启预付且选择50%支付,总价减半 if($need_to_pay){ if($amounttopay == 50){ $total = $total / 2; } } // 减去管理员设置的折扣金额(折扣为正数时生效) if($admin_discount>0){ $total = $total - $admin_discount; } return $total;
内容的提问来源于stack exchange,提问作者hputtick
相关产品推荐
相关产品推荐

