PHP根据优惠规则计算订单、商品实际金额

一、需求

  • 提交一个订单,里面有多个商品,根据订单的总额,计算订单优惠后的价格,计算订单商品优惠后的价格

二、规则

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>';
    }
}

/**
 * 处理订单数据
 * @param $orderInfo
 */
public function handleOrderInfo(&$orderInfo){
   
    $totalPrice = $orderInfo['price'];

    # 获取优惠后的金额
    $couponPrice = self::getPriceByRule($totalPrice);

    # 把优惠后的金额按比例平分到每个商品中 pay_price
    foreach ($orderInfo['goods_list'] as &$value){
   
        $goodsPrice = $value['total_price'];
        $value['pay_price'] = sprintf('%.2f', $goodsPrice * ( $couponPrice / $totalPrice ));
    }

    # 追加orderInfo的实付金额字段 pay_price
    $orderInfo['pay_price'] = $couponPrice;
}

/**
 * 根据优惠规则返回优惠后的价格
 * @param $price
 * @return float|int
 */
public function getPriceByRule($price){
   
    if ($price >= 500){
   
        $price *= (8 / 10);
    }else if ($price >= 400){
   
        $price *= (9 / 10);
    }else if ($p
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值