FullReduceMarketing.php 3.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. <?php
  2. namespace common\logic\order\marketing;
  3. /**
  4. * Class FullReduceMarketing
  5. * 满减计算
  6. * @Author: lun
  7. * @DateTime: 2021/9/30 0030 14:53
  8. * @Copyright: copyright (c) 2021 广东七件事集团
  9. * @package common\logic\order\marketing
  10. */
  11. class FullReduceMarketing extends BaseMarketing{
  12. public function execute($form){}
  13. /**
  14. * 满减计算
  15. * @Author: lun
  16. * @DateTime: 2021/10/6 0006 10:55
  17. * @Copyright: copyright (c) 2021 广东七件事集团
  18. * @param $item
  19. * @param $form
  20. * @return mixed
  21. */
  22. public static function compute($item, &$form,&$extra = [])
  23. {
  24. $full_reduce_money = 0;// 满减金额初始化
  25. $reduce_money = 0;
  26. // 遍历商户商品
  27. foreach($item['goods'] as $goods_id =>$goods){
  28. // 判断是否开启满额减免 -- 判断是否符合满减条件
  29. 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']){
  30. $reduce_money = $form['sku'][$goods['goods_id']]['goods']['extra']['full_reduce_money'] ?? 0;// 满减金额
  31. $full_reduce_money+= $reduce_money;
  32. }else{ // 当不符合满减条件的时候,这个$reduce_money值就要归零;如果不归零,后面没有满减的商品,都会因此变为满减
  33. $reduce_money = 0;
  34. }
  35. $goods_price = $goods['goods_price'];
  36. $total_reduce_money = 0;
  37. foreach($goods['goods_details'] as $k => $goods_detail){
  38. // 营销赠扣表优惠金额记录
  39. if ($reduce_money > 0) {
  40. // 计算实际付款金额金额,满减金额
  41. $pay_money = $item['goods'][$goods_id]['goods_details'][$k]['marketing']['goods_price'] ?? $goods_detail['goods_price'];
  42. $temp_reduce_money = bcmul($pay_money/$goods_price,$reduce_money,2);
  43. if(!isset($goods['goods_details'][$k+1])){
  44. //最后一个
  45. $temp_reduce_money = bcsub($reduce_money,$total_reduce_money,2);
  46. }
  47. $item['goods'][$goods_id]['goods_details'][$k]['marketing']['pay_money']=bcsub($pay_money, $temp_reduce_money, 2);// order_detail实付金额
  48. $item['goods'][$goods_id]['goods_details'][$k]['marketing']['full_reduce_money']= $temp_reduce_money;// order_detail实付金额
  49. // $item['goods'][$goods_id]['goods_details'][$k]['marketing']['pay_money'] = bcsub($pay_money, $reduce_money, 2);// order_detail实付金额
  50. // $item['goods'][$goods_id]['goods_details'][$k]['marketing']['full_reduce_money'] = $reduce_money;// order_detail满减金额
  51. $item['goods'][$goods_id]['goods_details'][$k]['goods_price'] -= $temp_reduce_money;// order_detail满减金额
  52. $total_reduce_money += $temp_reduce_money;
  53. }
  54. }
  55. $item['goods'][$goods_id]['goods_price'] -= $reduce_money;// order_detail满减金额
  56. }
  57. // 满减赋值
  58. if ($full_reduce_money > 0) {
  59. $prev_full_reduce = $form->marketing['deduct']['full_reduce']['money'] ?? 0;
  60. $item['mch_order_info']['pay_money'] -= $full_reduce_money;
  61. $item['mch_order_info']['goods_price'] -= $full_reduce_money;
  62. $form->marketing['deduct']['full_reduce'] = ['name' => '满减', 'money' => $prev_full_reduce - $full_reduce_money];
  63. }
  64. return $item;
  65. }
  66. }