| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146 |
- <?php
- namespace App\Jobs;
- use App\Constants\ChangeLogConstant;
- use App\Model\UserModel;
- use App\Model\UserRebateLevelModel;
- use App\Model\VipCardModel;
- use App\Model\VipOrderModel;
- use App\Repositories\ConfigRepoistory;
- use App\Repositories\Service\QueueService;
- use App\Repositories\UserRepository;
- use Carbon\Carbon;
- use Hyperf\AsyncQueue\Job;
- use Hyperf\DbConnection\Db as DB;
- class RebateTwoUserJob extends Job
- {
- public function __construct($params)
- {
- // 这里最好是普通数据,不要使用携带 IO 的对象,比如 PDO 对象
- $this->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());
- }
- }
- }
|