'ID', 'mall_id' => '商城ID', 'user_id' => '用户ID', 'level' => '拼团等级', 'attend_times' => '参团次数', 'has_attend_times' => '已参团次数', 'invited_num' => '邀请用户数', 'win_num' => '中奖次数', 'balance' => '余额', 'score' => '积分', 'commission' => '佣金', 'frozen_commission' => '冻结佣金', 'clear_attend_times_at' => '清零参与次数时间', 'give_attend_times_at' => '最后赠送次数时间', 'status' => '状态[-1:删除;0:禁用;1启用]', 'upgrade_status' => '升级方式,1条件升级 2 购买指定商品升级 3手动升级', 'created_at' => '创建时间', 'updated_at' => '更新时间', 'upgrade_level_at' => '最后升级时间', ]; } public function getUser() { return $this->hasOne(User::class, ['id' => 'user_id'])->select('id,nickname,avatar_url,created_at'); } public static function setData(int $mall_id, array $data) { $is_new_record = false; if (!empty($data['id'])) { $model = self::findOne(['mall_id' => $mall_id, 'status' => [StatusEnum::ENABLED], 'id' => $data['id']]); if (empty($model)) { self::$static_error = '拼团会员数据异常'; return false; } } elseif (!empty($data['user_id'])) { $model = self::findOne(['mall_id' => $mall_id, 'status' => [StatusEnum::ENABLED], 'user_id' => $data['user_id']]); if (empty($model)) { $is_new_record = true; $model = new self(); $model->loadDefaultValues(); $model->status = StatusEnum::ENABLED; $model->mall_id = $mall_id; unset($data['id']); } } else { $is_new_record = true; $model = new self(); $model->loadDefaultValues(); $model->status = StatusEnum::ENABLED; $model->mall_id = $mall_id; unset($data['id']); } foreach ($data as $key => $val) { $model->$key = $val; } if ($is_new_record) { // 默认参团次数 /* 默认参团次数从基础配置里面拿 $level_info = LuckyGroupLevel::find() ->where(['mall_id' => $mall_id, 'status' => StatusEnum::ENABLED, 'level' => $model->level]) ->one(); if (empty($level_info)) { $attend_times = 0; } else { $attend_times = $level_info->init_attend_times; } */ $attend_times = \Yii::$app->services->setting->addons->get($mall_id, LuckyGroupEnum::ADDONS_NAME, 'basic.default_level_attend_times'); if (empty($attend_times)) { $attend_times = 0; } $model->attend_times = $attend_times; } if (!$model->save()) { self::$static_error = '保存数据失败:' . $model->getErrorMessage(); return false; } return $model; } /** * 获取拼团 * @Author bing * @DateTime 2021-04-24 17:07:10 * @param [type] $mall_id * @param [type] $user_id * @return LuckyGroupUser|boolean * @copyright: Copyright (c) 2020 广东七件事集团 */ public static function getGroupUser($mall_id, $user_id) { try { $default_level_attend_times = Yii::$app->services->setting->addons->get($mall_id, LuckyGroupEnum::ADDONS_NAME, 'basic.default_level_attend_times'); $group_user = self::getOne([['mall_id' => $mall_id, 'user_id' => $user_id]]); $user = User::getOne([['mall_id' => $mall_id, 'id' => $user_id]]); if (empty($user)) { self::$static_error = '未找到该用户'; return false; } $lock_key = RedisKeyEnum::suffix(RedisKeyEnum::LOCK_LUCKY_GROUP_USER, $user_id); $identification = uniqid(); if (!LockHelper::lock($lock_key, $identification, 100, 100)) { Yii::error(__CLASS__ . ' batchHandle error : 抢不到锁,user_id:' . $user_id); } if (empty($group_user)) { $group_user = new self(); $group_user->loadDefaultValues(true); $group_user->user_id = $user_id; $group_user->mall_id = $mall_id; $group_user->clear_attend_times_at = time(); //查询用户是否满足升级条件,然后给等级TODO... $res = $group_user->save(); if ($res === false) throw new \Exception('初始化拼团用户失败,错误信息:' . $group_user->getErrorMessage()); //初始化拼团次数 $attend_num = $default_level_attend_times ? $default_level_attend_times : 0; $res = LuckyGroupUser::saveAttendTimes($group_user->mall_id, $group_user->user_id, $attend_num, LuckyGroupEnum::SYSTEM_GRANT); $group_user->attend_times = $attend_num + 0; if ($res === false) Yii::error('初始化拼团次数失败,错误信息:' . LuckyGroupUser::getStaticError()); } LockHelper::uLock($lock_key, $identification); return $group_user; } catch (\Exception $e) { self::$static_error = $e->getMessage(); return false; } } /** * 增加/减少拼团次数 * @Author pin * @DateTime 2021-04-13 14:43:43 * @param [type] $params * @return void * @copyright: Copyright (c) 2020 广东七件事集团 */ public static function saveAttendTimes($mall_id, $user_id, $attend_times, $type = LuckyGroupEnum::SYSTEM_GRANT) { // $lucky_group_customize_text_configs = (new \app\plugins\lucky_group\forms\LuckyGroupConfigForm())->textCustomizeSetting($mall_id); $lucky_group_customize_text = '描述' ?? '拼团'; try { $trans = Yii::$app->db->beginTransaction(); //事务开始 $model = self::getOne([['mall_id' => $mall_id, 'user_id' => $user_id, 'status' => StatusEnum::ENABLED]]); if (!$model) throw new \Exception('用户不存在'); $before_num = $model->attend_times; $model->attend_times += $attend_times; if (!$model->save()) throw new \Exception($model->getErrorMessage()); $operator_type = $attend_times >= 0 ? '增加' : '减少'; $desc = $operator_type . ($lucky_group_customize_text) . '数量:' . $attend_times; switch ($type) { case LuckyGroupEnum::ADMIN_GRANT: $desc .= '[后台操作]'; break; case LuckyGroupEnum::SYSTEM_GRANT: $desc .= '[系统每日赠送]'; break; case LuckyGroupEnum::SYSTEM_CLEAR: $desc .= '[系统每日清零]'; break; } //新增变更记录 $log_params['mall_id'] = $mall_id; $log_params['user_id'] = $user_id; $log_params['num'] = $attend_times; $log_params['before_num'] = $before_num; $log_params['desc'] = $desc; $log_params['type'] = $type; $logModel = new LuckyGroupAttendTimesLog(); if (!$logModel->saveLog($log_params)) throw new \Exception($logModel->getErrorMessage()); $trans->commit(); //事务提交 return true; } catch (\Exception $e) { $trans->rollBack(); //事务回滚 self::$static_error = $e->getMessage(); return false; } } }