'ID', 'mall_id' => '商城id', 'title' => '活动名称', 'start_at' => '开始时间,单位:秒', 'end_at' => '结束时间,单位:秒', 'initiate_type' => '发起人权限类型[0:全部;1:新会员;2:等级会员]', 'initiate_level' => '等级会员json串[initiate_type=2时使用]', 'consume_type' => '参与人权限类型[0:全部;1:新会员;2:等级会员]', 'consume_level' => '等级会员json串[consume_type=2时使用]', 'item_id' => '活动商品id', 'item_info' => '活动商品详情', 'reward_type' => '奖励类型[1:奖励条件;2:阶梯奖励]', 'reward_info' => '奖励具体信息', 'is_repeat' => '阶梯奖励是否重复奖励[0=否,1=是]', 'status' => '状态[-1:删除;0:禁用;1启用]', 'created_at' => '创建时间', 'updated_at' => '更新时间', 'join_type' => '参与类型', 'is_grant' => '优惠/抵扣不发奖开关:1开启 0关闭', 'is_reward_after_n' => '是否开启第N人后开始才可以获得奖励 0否 1是', 'reward_threshold' => '具体配置的第N人之后', 'is_freeze_first_reward' => '冻结第一项奖励,', 'freeze_first_reward_type' => '冻结第一项奖励比例 0全部冻结 1按设置百分比冻结,', 'freeze_first_reward_percentage' => '冻结第一项奖励百分比,', ]; } /** * 关联统计表 * @Author: lun * @DateTime: 2022/1/18 0018 15:17 * @Copyright: copyright (c) 2021 广东七件事集团 * @return \yii\db\ActiveQuery */ public function getStatistics() { return $this->hasOne(RebateStatistics::class, ['r_id' => 'id'])->where(['status' => 1]); } /** * 关联商品信息 * @Author: lun * @DateTime: 2022/1/18 0018 16:56 * @Copyright: copyright (c) 2021 广东七件事集团 * @return \yii\db\ActiveQuery */ public function getGoods() { return $this->hasOne(Goods::class, ['id' => 'item_id']); } /** * goods表字段过滤 * @param $item * @return array */ public static function filterGoods($goods_id) { if (!$goods_id) { return []; } $goods = Goods::findOne(['id' =>$goods_id]); if (!$goods) { return []; } return [ 'id' => $goods->id, 'name' => $goods->name, 'cover_pic' => $goods->coverPic, 'price' => $goods->price, ]; } /** * 保存数据 * @Author: lun * @DateTime: 2022/1/15 0015 9:26 * @Copyright: copyright (c) 2021 广东七件事集团 * @param $mall_id * @param array $params * @return Rebate|bool */ public static function setData($mall_id, array $params){ try{ if(!empty($params['id'])){ $model = self::findOne(['and',['id' => $params['id'],'mall_id' => $mall_id],['<>','status', -1]]); if(empty($model)) throw new \Exception('活动不存在或已删除'); }else{ $model = new self(); $model->loadDefaultValues(); $model->mall_id = $mall_id; } if (!empty($params['is_reward_after_n'])) { if (empty($params['reward_threshold']) || !is_numeric($params['reward_threshold'])) { throw new \RuntimeException('请设置第N人后开始才可以获得奖励'); } if (!in_array($params['reward_threshold'], array_column($params['reward_info'], 'num'))) { throw new \RuntimeException('第N人后开始才可以获得奖励设置错误'); } } else { $params['is_reward_after_n'] = 0; $params['reward_threshold'] = 0; } // 将内容转为json字符串 !empty($params['initiate_level']) && $params['initiate_level'] = Json::encode($params['initiate_level']); !empty($params['consume_level']) && $params['consume_level'] = Json::encode($params['consume_level']); !empty($params['item_info']) && $params['item_info'] = Json::encode($params['item_info']); !empty($params['reward_info']) && $params['reward_info'] = Json::encode($params['reward_info']); if(!$model->load($params,'') || !$model->save()) throw new Exception($model->getErrorMessage()); return $model; }catch(\Exception $e){ self::setStaticError($e->getMessage()); return false; } } /** * 根据商品id获取活动内容 * @Author: lun * @DateTime: 2022/1/15 0015 9:26 * @Copyright: copyright (c) 2021 广东七件事集团 * @param $mall_id * @param $goods_id * @return array|bool|\yii\db\ActiveRecord */ public static function getRebateByGoodsId($mall_id, $goods_id) { $select = "id,title,initiate_type,initiate_level,start_at,end_at,consume_type,consume_level,reward_type,reward_info,is_repeat"; $data = self::find()->select($select)->where(['mall_id' => $mall_id, 'item_id' => $goods_id, 'status' => StatusEnum::ENABLED])->asArray()->one(); if(empty($data)) return false; // 判断活动是否过期 $time = time(); if($data['start_at'] > $time || $time > $data['end_at']) return false; return $data; } /** * 根据商品id获取活动内容 * @Author: lun * @DateTime: 2022/1/15 0015 9:26 * @Copyright: copyright (c) 2021 广东七件事集团 * @param $mall_id * @param $goods_id * @return array|bool|\yii\db\ActiveRecord */ public static function getRebateAllGoodsId($mall_id) { // 判断活动是否过期 $time = time(); $select = "id,title,item_id,initiate_type,initiate_level,start_at,end_at,consume_type,consume_level,reward_type," . "reward_info,is_repeat,join_type,is_grant,repeat_setting,agent_limit_num,is_reward_after_n,reward_threshold," . "is_freeze_first_reward,item_type, freeze_first_reward_type, freeze_first_reward_percentage"; $data = self::find()->select($select) ->where(['mall_id' => $mall_id, 'status' => StatusEnum::ENABLED]) ->andWhere(["<", "start_at", $time]) ->andWhere([">", "end_at", $time]) ->asArray()->all(); foreach($data as &$item) { if($item['item_type'] == 1) { // 分类ID查询对应商品 $item['goods'] = GoodsCateRelate::find()->where(['cate_id' => $item['item_id']]) ->select("id,cate_id,goods_id") ->with(['goods' => function($query){ $query->select("id,goods_name,price,cover_pic"); }]) ->asArray() ->all(); } } // 初始化结果数组 $result = []; // 遍历原始数据数组 foreach ($data as $originalItem) { if ($originalItem['item_type'] == 1) { //商品分类的重新组装数据 foreach ($originalItem['goods'] as $good) { if (!empty($good['goods'])) { $newItem = array_diff_key($originalItem, array_flip(['goods'])); $newItem['item_id'] = $good['goods_id']; $result[] = $newItem; } } } else { //商品ID的直接返回 $result[] = $originalItem; } } return $result; } /** * 判断该商品是否已参与其他活动 * @Author: lun * @DateTime: 2022/1/15 0015 9:24 * @Copyright: copyright (c) 2021 广东七件事集团 * @param $mall_id * @param $goods_id * @param int $r_id * @return bool */ public static function checkGoods($mall_id, $goods_id, $r_id = 0) { $checkGoods = self::find()->select("id")->where(['mall_id' => $mall_id, 'item_id' => $goods_id, 'status' => StatusEnum::ENABLED])->asArray()->one(); if ($checkGoods) { if(empty($r_id) || (!empty($r_id) && $checkGoods['id'] != $r_id)) { return false; } } return true; } /** * 判断用户是否支付过 * @Author: lun * @DateTime: 2022/1/15 0015 9:24 * @Copyright: copyright (c) 2021 广东七件事集团 * @param $user_id * @return mixed */ public static function checkUserHasOrder($mall_id, $user_id) { // $num = UserStatisticsTotal::find()->select("pay_num")->where(['mall_id' => $mall_id, 'user_id' => $user_id, 'status' => StatusEnum::ENABLED])->asArray()->scalar(); $num = Order::find()->select("id")->where(['mall_id' => $mall_id, 'user_id' => $user_id, 'pay_status' => StatusEnum::ENABLED,'status' => StatusEnum::ENABLED])->asArray()->count(); if (empty($num)) return false; return $num; } /** * 判断用户等级是否符合条件 * @Author: lun * @DateTime: 2022/1/6 0006 17:54 * @Copyright: copyright (c) 2021 广东七件事集团 * @param $user_id * @param $level_arr * @return bool */ public static function checkUserLevel($user_id, $level_arr) { $level = User::find()->select("level")->where(['id' => $user_id, 'status' => StatusEnum::ENABLED])->asArray()->scalar(); if(in_array($level, Json::decode($level_arr, true))) return true; return false; } public static function checkNewRegisterUser($mall_id, $user_id) { $res = User::find()->where([ 'mall_id'=>$mall_id, 'id'=>$user_id, 'status'=>StatusEnum::ENABLED ])->andWhere(['>=','created_at',time()-7*24*3600])->one(); if (empty($res)) return false; return true; } public static function checkRebateUserLevel($user_id, $level_arr) { $level = RebateUser::find()->select("level")->where(['user_id' => $user_id, 'status' => StatusEnum::ENABLED])->asArray()->scalar(); if(in_array($level, Json::decode($level_arr, true))) return true; return false; } }