FullReduce.php 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. <?php
  2. namespace app\api\model\shop;
  3. use app\common\library\helper;
  4. use app\common\model\shop\FullReduce as FullReduceModel;
  5. /**
  6. * 满减模型
  7. */
  8. class FullReduce extends FullReduceModel
  9. {
  10. /**
  11. * 获取列表记录
  12. */
  13. public static function getReductList($total_price, $total_num)
  14. {
  15. // 获取所有满减活动
  16. $list = (new self)->getAll();
  17. $data = [];
  18. foreach ($list as $reduce) {
  19. // 满额
  20. if ($reduce['full_type'] == 1) {
  21. if ($total_price < $reduce['full_value']) {
  22. continue;
  23. }
  24. } else {
  25. // 满件数
  26. if ($total_num < $reduce['full_value']) {
  27. continue;
  28. }
  29. }
  30. $key = $reduce['fullreduce_id'];
  31. // 计算减的金额
  32. $data[$key] = [
  33. 'fullreduce_id' => $reduce['fullreduce_id'],
  34. 'active_name' => $reduce['active_name'],
  35. ];
  36. // 计算满减金额
  37. if ($reduce['reduce_type'] == 1) {
  38. //满金额
  39. $data[$key]['reduced_price'] = $reduce['reduce_value'];
  40. } else{
  41. // 折扣比例
  42. $discountRatio = helper::bcdiv($reduce['reduce_value'], 100);
  43. $data[$key]['reduced_price'] = max(0.01, helper::bcmul($total_price, $discountRatio));
  44. }
  45. }
  46. if(count($data) == 0){
  47. return false;
  48. }else{
  49. // 根据折扣金额排序并返回第一个
  50. $reduce = array_sort($data, 'reduced_price', true);
  51. $reduce = current($reduce);
  52. return $reduce;
  53. }
  54. }
  55. }