quanwei
2 days ago 04102f7237efefa744090ed7c25f7b5d0807b679
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
<?php
 
namespace app\api\model\shop;
 
use app\common\library\helper;
use app\common\model\shop\FullReduce as FullReduceModel;
 
/**
 * 满减模型
 */
class FullReduce extends FullReduceModel
{
    /**
     * 获取列表记录
     */
    public static function getReductList($total_price, $total_num, $shop_supplier_id)
    {
        // 获取所有满减活动
        $list = (new self)->getAll($shop_supplier_id);
        $data = [];
        foreach ($list as $reduce) {
            // 满额
            if ($reduce['full_type'] == 1) {
                if ($total_price < $reduce['full_value']) {
                    continue;
                }
            } else {
                // 满件数
                if ($total_num < $reduce['full_value']) {
                    continue;
                }
            }
            $key = $reduce['fullreduce_id'];
            // 计算减的金额
            $data[$key] = [
                'fullreduce_id' => $reduce['fullreduce_id'],
                'active_name' => $reduce['active_name'],
            ];
            // 计算满减金额
            if ($reduce['reduce_type'] == 1) {
                //满金额
                $data[$key]['reduced_price'] = $reduce['reduce_value'];
            } else{
                // 折扣比例
                $discountRatio = helper::bcdiv($reduce['reduce_value'], 100);
                $data[$key]['reduced_price'] = helper::bcmul($total_price, $discountRatio);
            }
        }
        if(count($data) == 0){
            return false;
        }else{
            // 根据折扣金额排序并返回第一个
            $reduce = array_sort($data, 'reduced_price', true);
            $reduce = current($reduce);
            return $reduce;
        }
    }
 
    /**
     * 获取列表记录
     */
    public static function getProductReductList($product_id, $total_price, $total_num)
    {
        // 获取所有满减活动
        $list = (new self)->getProductAll($product_id);
        $data = [];
        foreach ($list as $reduce) {
            // 满额
            if ($reduce['full_type'] == 1) {
                if ($total_price < $reduce['full_value']) {
                    continue;
                }
            } else {
                // 满件数
                if ($total_num < $reduce['full_value']) {
                    continue;
                }
            }
            $key = $reduce['fullreduce_id'];
            // 计算减的金额
            $data[$key] = [
                'fullreduce_id' => $reduce['fullreduce_id'],
                'active_name' => $reduce['active_name'],
            ];
            // 计算满减金额
            if ($reduce['reduce_type'] == 1) {
                //满金额
                $data[$key]['reduced_price'] = $reduce['reduce_value'];
            } else{
                // 折扣比例
                $discountRatio = helper::bcdiv($reduce['reduce_value'], 100);
                $data[$key]['reduced_price'] = helper::bcmul($total_price, $discountRatio);
            }
        }
        if(count($data) == 0){
            return false;
        }else{
            // 根据折扣金额排序并返回第一个
            $reduce = array_sort($data, 'reduced_price', true);
            $reduce = current($reduce);
            return $reduce;
        }
    }
 
    public static function getListByProduct($product_id){
        return (new self())->where('product_id', '=', $product_id)
            ->order(['fullreduce_id' => 'asc'])
            ->select();
    }
}