一、需求
- 提交一个订单,里面有多个商品,根据订单的总额,计算订单的
优惠后的价格
,计算订单商品的优惠后的价格
二、规则
1、说明
该规则并非实际项目中的规则,仅用来代码测试,给各位提供个思路
2、明细
- 1、[100, 200) 优惠10元
- 2、[200, 300) 优惠20元
- 3、[300, 400) 优惠30元
- 4、[400, 500) 打9折
- 5、[500, +∞) 打8折
规则仅享用1条,不能累加:比如您的总额为234元,那么您仅享受第2条规则,而不是同时享受第1条和第2条
三、相关字段
- 订单的数据大概为订单ID(id),订单价格(price),订单号(order_sn),购买人(buyer),手机号(phone),收货地址(address)…
- 订单的商品数据 goods_list 字段大致如下:商品ID(id),商品标题(title),商品单价(price),商品数量(number),商品总价(total_price)
四、思路
- createOrderInfo():模拟生成满足这5条规则的订单数据
- handleOrderInfo():处理每一个订单数据
- getPriceByRule():根据订单的原价获取订单的实际价(原价 - 优惠价)
五、代码实现
public function test(){
echo '<pre>';
for($i = 1; $i <= 5; $i++){
$orderInfo = $this->createOrderInfo($i);
self::handleOrderInfo($orderInfo);
echo " - - - - 规则 [{
$i}] - - - -<br/>";
print_r($orderInfo);
echo '<br>';
}
}
public function handleOrderInfo(&$orderInfo){
$totalPrice = $orderInfo['price'];
$couponPrice = self::getPriceByRule($totalPrice);
foreach ($orderInfo['goods_list'] as &$value){
$goodsPrice = $value['total_price'];
$value['pay_price'] = sprintf('%.2f', $goodsPrice * ( $couponPrice / $totalPrice ));
}
$orderInfo['pay_price'] = $couponPrice;
}
public function getPriceByRule($price){
if ($price >= 500){
$price *= (8 / 10);
}else if ($price >= 400){
$price *= (9 / 10);
}else if ($p