diff --git a/app/common/repositories/user/UserRepository.php b/app/common/repositories/user/UserRepository.php index 49ea65b..150ccfb 100644 --- a/app/common/repositories/user/UserRepository.php +++ b/app/common/repositories/user/UserRepository.php @@ -31,6 +31,7 @@ use think\exception\ValidateException; use think\facade\Cache; use think\facade\Config; use think\facade\Db; +use think\facade\Log; use think\facade\Queue; use think\facade\Route; use think\Model; @@ -901,48 +902,54 @@ class UserRepository extends BaseRepository return $this->topList($key, $page, $limit) + ['position' => $this->userPosition($key, $uid)]; } - /** - * //TODO 绑定上下级关系 - * @param User $user - * @param int $spreadUid - * @throws DbException - * @author xaboy - * @day 2020/6/22 - */ - public function bindSpread(User $user, int $spreadUid) - { - if ($spreadUid && !$user->spread_uid && $user->uid != $spreadUid && ($spread = $this->dao->get($spreadUid)) && $spread->spread_uid != $user->uid && !$spread->cancel_time) { - $config = systemConfig(['extension_limit', 'extension_limit_day', 'integral_user_give']); - event('user.spread.before', compact('user','spreadUid')); - Db::transaction(function () use ($spread, $spreadUid, $user, $config) { - $user->spread_uid = $spreadUid; - $user->spread_time = date('Y-m-d H:i:s'); - if ($config['extension_limit'] && $config['extension_limit_day']) { - $user->spread_limit = date('Y-m-d H:i:s', strtotime('+ ' . $config['extension_limit_day'] . ' day')); - } - $spread->spread_count++; - if ($config['integral_user_give'] > 0 && $user->isNew) { - $integral = (int)$config['integral_user_give']; - $spread->integral += $integral; - app()->make(UserBillRepository::class)->incBill($spreadUid, 'integral', 'spread', [ - 'link_id' => $user->uid, - 'status' => 1, - 'title' => '邀请好友', - 'number' => $integral, - 'mark' => '邀请好友奖励' . $integral . '积分', - 'balance' => $spread->integral - ]); - } - $spread->save(); - $user->save(); - //TODO 推广人月榜 - Cache::zincrby('s_top_' . date('Y-m'), 1, $spreadUid); - //TODO 推广人周榜 - Cache::zincrby('s_top_' . monday(), 1, $spreadUid); - }); - Queue::push(UserBrokerageLevelJob::class, ['uid' => $spreadUid, 'type' => 'spread_user', 'inc' => 1]); - app()->make(UserBrokerageRepository::class)->incMemberValue($user->uid, 'member_share_num', 0); - event('user.spread', compact('user','spreadUid')); + // 绑定上下级关系 + public function bindSpread(User $user, int $spreadUid){ + try{ + // 判断:是否已经存在邀请人 || 本人已经成为某个等级的分销商 + if((int)$user->spread_uid > 0 || (int)$user->brokerage_level > 0) throw new \Exception('不存在邀请人或者本人已经存在分销商等级信息!'); + // 判断:上级是否存在账号信息 + $spread = $this->dao->get($spreadUid); + if(!$spread) throw new \Exception('上级不存在!'); + // 判断:上级所在等级是否存在推广权限 + if((int)$spread->brokerage_level <= 0) throw new \Exception("上级不存在推广权限!"); + // 判断:是否符合绑定条件 符合进入绑定流程 + if ($spreadUid && $user->uid != $spreadUid && $spread && $spread->spread_uid != $user->uid && !$spread->cancel_time) { + $config = systemConfig(['extension_limit', 'extension_limit_day', 'integral_user_give']); + event('user.spread.before', compact('user','spreadUid')); + Db::transaction(function () use ($spread, $spreadUid, $user, $config) { + $user->spread_uid = $spreadUid; + $user->spread_time = date('Y-m-d H:i:s'); + if ($config['extension_limit'] && $config['extension_limit_day']) { + $user->spread_limit = date('Y-m-d H:i:s', strtotime('+ ' . $config['extension_limit_day'] . ' day')); + } + $spread->spread_count++; + if ($config['integral_user_give'] > 0 && $user->isNew) { + $integral = (int)$config['integral_user_give']; + $spread->integral += $integral; + app()->make(UserBillRepository::class)->incBill($spreadUid, 'integral', 'spread', [ + 'link_id' => $user->uid, + 'status' => 1, + 'title' => '邀请好友', + 'number' => $integral, + 'mark' => '邀请好友奖励' . $integral . '积分', + 'balance' => $spread->integral + ]); + } + $spread->save(); + $user->save(); + //TODO 推广人月榜 + Cache::zincrby('s_top_' . date('Y-m'), 1, $spreadUid); + //TODO 推广人周榜 + Cache::zincrby('s_top_' . monday(), 1, $spreadUid); + }); + Queue::push(UserBrokerageLevelJob::class, ['uid' => $spreadUid, 'type' => 'spread_user', 'inc' => 1]); + app()->make(UserBrokerageRepository::class)->incMemberValue($user->uid, 'member_share_num', 0); + event('user.spread', compact('user','spreadUid')); + } + }catch(\Exception $e){ + Log::error('绑定上下级关系 - 错误:' . $e->getMessage()); + + return $e->getMessage(); } } @@ -1151,11 +1158,11 @@ class UserRepository extends BaseRepository { if (!$user->status) throw new ValidateException('账号已被禁用'); // 判断:如果用户未开启推广员 则开启推广员 - if($user->is_promoter != 1){ - $user->is_promoter = 1; - $user->promoter_time = date('Y-m-d H:i:s'); - $user->save(); - } + // if($user->is_promoter != 1){ + // $user->is_promoter = 1; + // $user->promoter_time = date('Y-m-d H:i:s'); + // $user->save(); + // } $user = $user->hidden(['label_id', 'group_id', 'main_uid', 'pwd', 'addres', 'card_id', 'last_time', 'last_ip', 'create_time', 'mark', 'status', 'spread_uid', 'spread_time', 'real_name', 'birthday', 'brokerage_price'])->toArray(); return [ diff --git a/app/controller/api/Auth.php b/app/controller/api/Auth.php index 4d7af3b..c2c6e7b 100644 --- a/app/controller/api/Auth.php +++ b/app/controller/api/Auth.php @@ -376,6 +376,7 @@ class Auth extends BaseController return app('json')->success('修改成功'); } + // 绑定上下级关系 public function spread(UserRepository $userRepository) { $data = $this->request->params([ @@ -385,8 +386,9 @@ class Auth extends BaseController if (isset($data['spread_code']['id']) && ($info = app()->make(RoutineQrcodeRepository::class)->getRoutineQrcodeFindType($data['spread_code']['id']))) { $data['spread_spid'] = $info['third_id']; } - $userRepository->bindSpread($this->request->userInfo(), intval($data['spread_spid'])); - return app('json')->success(); + $res = $userRepository->bindSpread($this->request->userInfo(), intval($data['spread_spid'])); + + return app('json')->success($res); } /**