| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- <?php
- namespace common\logic\order\marketing;
- /**
- * Class FullReduceMarketing
- * 满减计算
- * @Author: lun
- * @DateTime: 2021/9/30 0030 14:53
- * @Copyright: copyright (c) 2021 广东七件事集团
- * @package common\logic\order\marketing
- */
- class FullReduceMarketing extends BaseMarketing{
- public function execute($form){}
- /**
- * 满减计算
- * @Author: lun
- * @DateTime: 2021/10/6 0006 10:55
- * @Copyright: copyright (c) 2021 广东七件事集团
- * @param $item
- * @param $form
- * @return mixed
- */
- public static function compute($item, &$form,&$extra = [])
- {
- $full_reduce_money = 0;// 满减金额初始化
- $reduce_money = 0;
- // 遍历商户商品
- foreach($item['goods'] as $goods_id =>$goods){
- // 判断是否开启满额减免 -- 判断是否符合满减条件
- if (isset($form['sku'][$goods['goods_id']]['goods']['extra']['enable_full_reduce']) && $form['sku'][$goods['goods_id']]['goods']['extra']['enable_full_reduce'] == 1 && !empty($form['sku'][$goods['goods_id']]['goods']['extra']['full_reduce_price_limit']) && $goods['goods_price'] >= $form['sku'][$goods['goods_id']]['goods']['extra']['full_reduce_price_limit']){
- $reduce_money = $form['sku'][$goods['goods_id']]['goods']['extra']['full_reduce_money'] ?? 0;// 满减金额
- $full_reduce_money+= $reduce_money;
- }else{ // 当不符合满减条件的时候,这个$reduce_money值就要归零;如果不归零,后面没有满减的商品,都会因此变为满减
- $reduce_money = 0;
- }
- $goods_price = $goods['goods_price'];
- $total_reduce_money = 0;
- foreach($goods['goods_details'] as $k => $goods_detail){
- // 营销赠扣表优惠金额记录
- if ($reduce_money > 0) {
- // 计算实际付款金额金额,满减金额
- $pay_money = $item['goods'][$goods_id]['goods_details'][$k]['marketing']['goods_price'] ?? $goods_detail['goods_price'];
- $temp_reduce_money = bcmul($pay_money/$goods_price,$reduce_money,2);
- if(!isset($goods['goods_details'][$k+1])){
- //最后一个
- $temp_reduce_money = bcsub($reduce_money,$total_reduce_money,2);
- }
- $item['goods'][$goods_id]['goods_details'][$k]['marketing']['pay_money']=bcsub($pay_money, $temp_reduce_money, 2);// order_detail实付金额
- $item['goods'][$goods_id]['goods_details'][$k]['marketing']['full_reduce_money']= $temp_reduce_money;// order_detail实付金额
- // $item['goods'][$goods_id]['goods_details'][$k]['marketing']['pay_money'] = bcsub($pay_money, $reduce_money, 2);// order_detail实付金额
- // $item['goods'][$goods_id]['goods_details'][$k]['marketing']['full_reduce_money'] = $reduce_money;// order_detail满减金额
- $item['goods'][$goods_id]['goods_details'][$k]['goods_price'] -= $temp_reduce_money;// order_detail满减金额
- $total_reduce_money += $temp_reduce_money;
- }
- }
- $item['goods'][$goods_id]['goods_price'] -= $reduce_money;// order_detail满减金额
- }
- // 满减赋值
- if ($full_reduce_money > 0) {
- $prev_full_reduce = $form->marketing['deduct']['full_reduce']['money'] ?? 0;
- $item['mch_order_info']['pay_money'] -= $full_reduce_money;
- $item['mch_order_info']['goods_price'] -= $full_reduce_money;
- $form->marketing['deduct']['full_reduce'] = ['name' => '满减', 'money' => $prev_full_reduce - $full_reduce_money];
- }
- return $item;
- }
- }
|