| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186 |
- <?php
- namespace addons\CloudStock\common\models;
- use addons\Coupon\common\enums\AddonsCouponEnum;
- use addons\Coupon\common\models\AddonsCoupon;
- use common\enums\StatusEnum;
- use common\models\base\BaseActiveRecord;
- use Yii;
- /**
- * This is the model class for table "qimall_addons_cloud_stock_give_coupon_setting".
- *
- * @property int $id
- * @property int $mall_id 商城ID
- * @property int|null $goods_id 设置id
- * @property int|null $level 等级权重
- * @property string|null $coupon_setting 赠送规则
- * @property int|null $num 满*赠送
- * @property int|null $status 状态[-1:删除;0:禁用;1启用]
- * @property int $created_at
- * @property int $updated_at
- */
- class CouponSetting extends BaseActiveRecord
- {
- /**
- * {@inheritdoc}
- */
- public static function tableName()
- {
- return 'qimall_addons_cloud_stock_give_coupon_setting';
- }
- /**
- * {@inheritdoc}
- */
- public function rules()
- {
- return [
- [['mall_id'], 'required'],
- [['mall_id', 'goods_id', 'level', 'num', 'status', 'created_at', 'updated_at'], 'integer'],
- [['coupon_setting'], 'string'],
- ];
- }
- /**
- * {@inheritdoc}
- */
- public function attributeLabels()
- {
- return [
- 'id' => 'ID',
- 'mall_id' => 'Mall ID',
- 'goods_id' => 'Goods ID',
- 'level' => 'Level',
- 'coupon_setting' => 'Coupon Setting',
- 'num' => 'Num',
- 'status' => 'Status',
- 'created_at' => 'Created At',
- 'updated_at' => 'Updated At',
- ];
- }
- public static function setData($params, $data)
- {
- try{
- $level_arr = array_column($data,'level');
- self::updateAll(['status'=>StatusEnum::DELETE],[
- 'and',
- ['goods_id'=>$params['goods_id']],
- ['mall_id'=>$params['mall_id']],
- ['not in','level',$level_arr],
- ]);
- foreach ($data as $item) {
- if(empty($item['multiple_selection']) == false){
- foreach ($item['multiple_selection'] as $key=>$select){
- $item['multiple_selection'][$key] = [
- 'coupon_id'=>$select['relevant_id'],
- 'num'=>$select['num'],
- ];
- }
- }else{
- $item['coupon_setting'] = '';
- }
- $item['coupon_setting'] = empty($item['multiple_selection'])?'':json_encode($item['multiple_selection']);
- unset($item['multiple_selection']);
- $model = self::findOne([
- 'mall_id' => $params['mall_id'],
- 'level' => $item['level'],
- 'goods_id' => $params['goods_id'],
- 'status' => [StatusEnum::ENABLED]
- ]);
- if (empty($model)) {
- $model = new self();
- $model->mall_id = $params['mall_id'];
- $model->goods_id = $params['goods_id'];
- $model->loadDefaultValues();
- }
- if(!$model->load($item,'') || !$model->save()){
- throw new \Exception($model->getErrorMessage());
- }
- }
- return true;
- }catch(\Exception $e){
- self::$static_error = $e->getMessage();
- return false;
- }
- }
- /**
- * 获取能赠送的优惠券
- * @param $mall_id
- * @param array $goods_arr [['goods_id'=>1,'num'=>2],['goods_id'=>2,'num'=>5]]
- * @param $level
- * @return array
- */
- public static function getGiveCoupon($mall_id,$goods_arr = [],$level){
- if(empty($goods_arr)) return [];
- $return = [];
- $setting_data = self::getSettingData($mall_id,array_column($goods_arr,'goods_id'),$level);
- foreach ($goods_arr as $item){
- $setting = $setting_data[$item['goods_id']];
- $coupon_arr = [];
- if(empty($setting['rule']) == false){
- foreach ($setting['rule'] as $rule){
- $coupon_arr[] = [
- 'name'=>$rule['name'],
- 'coupon_id'=>$rule['coupon_id'],
- 'num'=>$rule['num'],
- ];
- }
- $return[$item['goods_id']]['coupon_arr'] = $coupon_arr;
- $return[$item['goods_id']]['rule_num'] = $setting['num'];
- $return[$item['goods_id']]['give_num'] = floor($item['num']/$setting['num']);
- $return[$item['goods_id']]['bug_num'] = $item['num'];
- }
- }
- return $return;
- }
- /**
- * 获取能赠送的优惠券
- * @param $mall_id
- * @param array $goods_id_arr
- * @param $level
- * @return array
- */
- public static function getSettingData($mall_id,$goods_id_arr = [],$level){
- // 获取配置
- $result = self::find()->where([ 'mall_id' => $mall_id,'goods_id' => $goods_id_arr,'level' => $level,'status' => StatusEnum::ENABLED])->asArray()->all();
- $return = [];
- if(empty($result) == false){
- foreach ($result as $item) {
- $return[$item['goods_id']]['num'] = $item['num'];
- $item['coupon_setting'] = $item['coupon_setting']?json_decode($item['coupon_setting'],true):[];
- if(empty($item['coupon_setting']) == false){
- $coupon_list = array_column($item['coupon_setting'],null,'coupon_id');
- $params = [];
- $params['where'][] = ['mall_id' => $mall_id];
- $params['where'][] = ['status' => [StatusEnum::ENABLED]];
- $params['where'][] = ['coupon_status' => [AddonsCouponEnum::STATUS_RECEIVING]];
- $params['where'][] = ['in','id',array_keys($coupon_list)];
- $params['where'][] = ['or',
- ['=', 'total_count', -1],
- ['>', 'total_count', 'receive'],
- ];
- $params['order'] = 'sort asc,id desc';
- $params['select'] = 'id,name,type,discount,min_price,sub_price,expire_type,expire_day,begin_at,end_at,status,total_count';
- $list = AddonsCoupon::lists($params);
- if(empty($list) == false){
- foreach ($list as $coupon){
- $return[$item['goods_id']]['rule'][] = [
- 'discount_method' => $coupon['type'] == 1 ? $coupon['discount'] . '折' : $coupon['sub_price'] . '元',
- 'name' => $coupon['name'],
- 'num' => $coupon_list[$coupon['id']]['num'],
- 'coupon_id' => $coupon['id'],
- ];
- }
- }
- }
- }
- }
- return $return;
- }
- }
|