最新服务器上的版本,以后用这个
zhangmeng
2023-04-19 e3f5aa12f58d986098a9de0f5cb38060e403036d
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
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
<?php
 
namespace app\models;
 
use Yii;
use yii\db\Exception;
 
/**
 * This is the model class for table "{{%coupon}}".
 *
 * @property int $id
 * @property int $mall_id
 * @property string $name 优惠券名称
 * @property int $type 优惠券类型:1=折扣,2=满减
 * @property string $discount 折扣率
 * @property string $discount_limit 优惠上限
 * @property int $pic_url 未用
 * @property string $desc 未用
 * @property string $min_price 最低消费金额
 * @property string $sub_price 优惠金额
 * @property int $total_count 发放总数量
 * @property int $can_receive_count 可领取数量
 * @property int $sort 排序按升序排列
 * @property int $expire_type 到期类型:1=领取后N天过期,2=指定有效期
 * @property int $expire_day 有效天数,expire_type=1时
 * @property string $begin_time 有效期开始时间
 * @property string $end_time 有效期结束时间
 * @property int $appoint_type 类型
 * @property string $rule 使用说明
 * @property int $is_member 是否指定会员等级购买
 * @property int $is_delete 删除
 * @property string $deleted_at
 * @property string $created_at
 * @property string $updated_at
 * @property string $app_share_title
 * @property string $app_share_pic
 * @property GoodsCats[] $cat
 * @property GoodsWarehouse[] $goods
 * @property GoodsWarehouse[] $goodsWarehouse
 * @property $couponCat
 * @property $couponGoods
 * @property string $appointTypeText
 * @property int $use_obtain
 */
class Coupon extends ModelActiveRecord
{
    /**
     * {@inheritdoc}
     */
    public static function tableName()
    {
        return '{{%coupon}}';
    }
 
    /**
     * {@inheritdoc}
     */
    public function rules()
    {
        return [
            [['mall_id', 'name', 'type', 'min_price', 'sub_price', 'expire_type', 'appoint_type', 'deleted_at', 'created_at', 'updated_at'], 'required'],
            [['mall_id', 'type', 'pic_url', 'total_count', 'sort', 'expire_type', 'expire_day', 'appoint_type',
                'is_member', 'is_delete', 'can_receive_count', 'use_obtain'], 'integer'],
            [['discount', 'discount_limit', 'min_price', 'sub_price'], 'number'],
            [['begin_time', 'end_time', 'deleted_at', 'created_at', 'updated_at'], 'safe'],
            [['name', 'app_share_title', 'app_share_pic'], 'string', 'max' => 255],
            [['desc', 'rule'], 'string', 'max' => 2000],
        ];
    }
 
    /**
     * {@inheritdoc}
     */
    public function attributeLabels()
    {
        return [
            'id' => 'ID',
            'mall_id' => 'mall ID',
            'name' => '优惠券名称',
            'type' => '优惠券类型:1=折扣,2=满减',
            'discount' => '折扣率',
            'discount_limit' => '优惠上限',
            'pic_url' => '未用',
            'desc' => '未用',
            'min_price' => '最低消费金额',
            'sub_price' => '优惠金额',
            'total_count' => '发放总数量',
            'can_receive_count' => '可领取数量',
            'sort' => '排序按升序排列',
            'expire_type' => '到期类型',
            'expire_day' => '有效天数',
            'appoint_type' => '指定方式',
            'begin_time' => '有效期开始时间',
            'end_time' => '有效期结束时间',
            'rule' => '使用说明',
            'is_member' => '是否指定会员等级领取',
            'is_delete' => '删除',
            'deleted_at' => 'Deleted At',
            'created_at' => 'Created At',
            'updated_at' => 'Updated At',
            'app_share_title' => 'App Share Title',
            'app_share_pic' => 'App Share Pic',
            'use_obtain' =>  '领取后赠送',
        ];
    }
 
    public function getCat()
    {
        return $this->hasMany(GoodsCats::className(), ['id' => 'cat_id'])->where(['is_delete' => 0])
            ->via('couponCat');
    }
 
    public function getGoodsWarehouse()
    {
        return $this->hasMany(GoodsWarehouse::className(), ['id' => 'goods_warehouse_id'])
            ->via('couponGoods');
    }
 
    public function getGoods()
    {
        return $this->hasMany(GoodsWarehouse::className(), ['id' => 'goods_warehouse_id'])
            ->via('couponGoods');
    }
 
    public function getCouponCat()
    {
        return $this->hasMany(CouponCatRelation::className(), ['coupon_id' => 'id'])->where(['is_delete' => 0]);
    }
 
    public function getCouponGoods()
    {
        return $this->hasMany(CouponGoodsRelation::className(), ['coupon_id' => 'id'])->where(['is_delete' => 0]);
    }
 
    public function getCouponMember()
    {
        return $this->hasMany(CouponMemberRelation::className(), ['coupon_id' => 'id']);
    }
 
    public function getCouponCenter()
    {
        return $this->hasOne(CouponCenter::className(), ['coupon_id' => 'id']);
    }
 
    public function getBeginTime()
    {
        return date('Y-m-d', strtotime($this->begin_time));
    }
 
    public function getEndTime()
    {
        return date('Y-m-d', strtotime($this->end_time));
    }
 
    /**
     * @param $num integer 修改的数量
     * @param $type string 增加add|减少sub
     * @param null|integer $id 优惠券ID
     * @return Coupon|null
     * @throws Exception
     */
    public function updateCount($num, $type, $id = null)
    {
        if ($id) {
            $coupon = self::findOne(['id' => $id, 'is_delete' => 0]);
        } else {
            $coupon = $this;
        }
        if (!$coupon || !$coupon->id) {
            throw new Exception('错误的优惠券信息');
        }
        if ($coupon->total_count == -1) {
            return $coupon;
        }
        if ($type === 'add') {
            $coupon->total_count += $num;
        } elseif ($type === 'sub') {
            if ($coupon->total_count < $num) {
                throw new Exception('优惠券库存不足');
            }
            $coupon->total_count -= $num;
        } else {
            throw new Exception('错误的$type');
        }
        if ($coupon->save()) {
            return $coupon;
        } else {
            throw new Exception($coupon->errors[0]);
        }
    }
 
    public function getAppointTypeText()
    {
        switch ($this->appoint_type) {
            case 1:
                $text = '指定商品';
                break;
            case 2:
                $text = '指定商品类别';
                break;
            case 3:
                $text = '全场通用';
                break;
            case 4:
                $text = '仅限当面付';
                break;
            default:
                $text = '';
        }
        return $text;
    }
}