params = $params; } public function handle() { $userInfo = UserModel::query()->where('code', $this->params['user_id'])->first(['parent_uid', 'created_at', 'code']); if (empty($userInfo->parent_uid) || $userInfo->created_at < '2022-04-28 00:00:00') { logger('RebateTwoUserJob:用户没有上级,或者注册时间在活动开始之前', [$this->params['user_id']]); return ''; } // 查看是否是一次充值 $orderCount = VipOrderModel::query()->where(['user_code' => $userInfo->code, 'status' => 1])->count(); $isOne = false; if ($orderCount == 1) { // 是否是第一次 $isOne = true; } $this->rebateAmountLevel($userInfo->parent_uid, $this->params['amount'], $isOne); } public function rebateAmountLevel($parentUid, $amount, $isOne) { try { // 日赚万元规则 $userAgentRule = make(ConfigRepoistory::class)->get('user_agent_rebate_rule', 'rule'); $userAgentRule = json_decode($userAgentRule, true); $UserRebateInfo = UserRebateLevelModel::query()->where('uid', $parentUid)->first(); $isUp = false; DB::beginTransaction(); //事物开启 if (empty($UserRebateInfo)) { //第一次生成一条数据 $rebateAmount = round($amount * ($userAgentRule[1]['ratio'] / 100), 2); $insertdata = [ 'uid' => $parentUid, 'amount' => $rebateAmount, 'week_amount' => $rebateAmount, 'moon_amount' => $rebateAmount, 'agent_level' => 1, 'invite_number' => 1, ]; $res = UserRebateLevelModel::query()->create($insertdata); if (!$res) { logger('RebateTwoUserJob->初始规则数据插入失败', $insertdata); DB::rollBack(); return ''; } } else { $agentLevel = $UserRebateInfo->agent_level; if ($isOne == true) { $UserRebateInfo->invite_number += 1; // 计算这个用户是否要升级 if ($userAgentRule[$agentLevel + 1]['mandate'] == $UserRebateInfo->invite_number) { //达到标准生一级 $UserRebateInfo->agent_level += 1; $isUp = true; } } $rebateAmount = round($amount * ($userAgentRule[$agentLevel]['ratio']) / 100, 2); $UserRebateInfo->amount += $rebateAmount; $UserRebateInfo->week_amount += $rebateAmount; $UserRebateInfo->moon_amount += $rebateAmount; if (!$UserRebateInfo->save()) { logger('RebateTwoUserJob->保存反佣数据失败', $UserRebateInfo->toArray()); DB::rollBack(); return ''; } } // 反佣 $res1 = UserModel::query()->where('code', $parentUid)->increment('balance', $rebateAmount); if (!$res1) { logger('RebateTwoUserJob->用户反佣失败', [$parentUid, $amount]); DB::rollBack(); return ''; } // 帐变记录 $changeData = [ 'user_uid' => $parentUid, 'currency_type' => ChangeLogConstant::CHANGE_AMOUNT, 'amount' => $rebateAmount, 'way' => ChangeLogConstant::WAY_1, 'type' => ChangeLogConstant::TYPE_3, ]; $res2 = make(QueueService::class)->saveChangeLogJob($changeData); if (!$res2) { logger('RebateTwoUserJob->帐变记录失败', $changeData); DB::rollBack(); return ''; } DB::commit(); // 升级给会员 if ($isUp == true) { $vipCardData = VipCardModel::query()->where('id', $UserRebateInfo->agent_level)->first(['day', 'id']); if (empty($vipCardData)) { return ''; } //加会员天数 $userInfo = make(UserRepository::class)->getUserInfoFromCache($parentUid); if ($userInfo['is_vip'] == 'y') { $vipTime = Carbon::parse($userInfo['vip_expired']) ->addDays($vipCardData['day']) ->toDateTimeString(); } else { $vipTime = Carbon::now()->addDays($vipCardData['day'])->toDateTimeString(); } UserModel::query()->where('code', $parentUid)->update(['vip_expired' => $vipTime, 'vip_level' => $vipCardData['id']]); } //清除用户信息redis缓存 make(UserRepository::class)->delUserCache($parentUid); return true; } catch (\Exception $exception) { Db::rollBack(); return logger('RebateTwoUserJob' . $exception->getMessage() . $exception->getLine()); } } }