2, 2=>9, 3=>3, 4=>3]; //包含自己 const LevelAll = [1=>3, 2=>10, 3=>3, 4=>3]; //直推人数 const LevelOne = 1; //青铜 const LevelTwo = 2; //白银 const LevelThre = 3; //黄金 const LevelFour = 4; //翡翠 const LevelFive = 5; //彩带 //超级福利标识 const Hidden = 0; const NewPeo = 1; const Super = 2; protected $name = 'user'; public function getById($userID) { return $this->where('id', $userID)->find(); } public function getByPhone(string $phone) { return $this->where("phone", $phone)->find(); } public static function getByUserCount(array $where) { return self::where($where)->count(); } public function getByUid($nickname){ return self::where('nickname', $nickname)->find(); } public function getByAddress($address) { return $this->where("address", $address)->find(); } public static function getByParentId(int $uid): int { return self::where('id', $uid)->value("parent_id"); } //根据用户昵称获取用户ID: 0 地址 1 昵称 public static function getUserByUid(string $nickname, int $type = 0){ $map = $type == 1 ? ['nickname' => $nickname] : ['address' => $nickname]; return self::where($map)->value('id'); } public function getAllAddress() { $all_list = $this->field('id,address')->select(); $arr = []; foreach ($all_list as $item){ $arr[$item['address']] = $item['id']; } return $arr; } //获取用户RWA public static function getUserRwaNum(int $uid): int { return self::where('id', $uid)->value("rwa_num"); } //获取用户团队等级 public static function getTeamLevelId(int $uid): int { return self::where('id', $uid)->value("team_level_id"); } /** * RWA更新数据 * @param int $uid * @param string $power * @return void */ public static function updateForRwaNum(int $uid, int $pid, string $score, string $action) { if($action == '+'){ //更新自己Rwa self::where('id', $uid)->setInc('rwa_num', $score); //更新直推Rwa return self::where('id', $pid)->setInc('direct_rwa', $score); }else{ //更新自己Rwa self::where('id', $uid)->setDec('rwa_num', $score); //更新直推Rwa return self::where('id', $pid)->setDec('direct_rwa', $score); } } /** * 添加用户上级标识 * 领取超级福利后就会变成青铜地址 * 直推3个领取了超级福利的变成白银地址 * 直推10个领取了超级福利的变成黄金地址 * 有3个是黄金地址的 就变成翡翠地址 * @param int $uid * @param int $parentId 上级 * @param int $addressLevel 等级 * @return void */ public static function updateUserLevel(int $uid, int $parentId, $addressLevel) { try { if (!empty($parentId)) { $model = new ProductOrder(); $paths = UserPathModel::where('user_id', $uid)->order('distance', 'asc')->column('parent_id'); foreach ($paths as $item) { $parent = self::where('id', $item)->find(); //更新等级 if ($parent->address_level < self::LevelFive) { //升级条件 $level = ($parentId == $item)? self::LevelConta: self::LevelAll; //升级 if($parent->address_level < self::LevelThre){ $parentCount = self::where('parent_id', $item)->where('address_level', '>=', self::LevelOne)->count(); if($parentCount >= $level[1]) $parent->address_level = self::LevelTwo; if($parentCount >= $level[2]) $parent->address_level = self::LevelThre; }elseif($parent->address_level == self::LevelThre){ $parentCount = self::where('parent_id', $item)->where('address_level', '>=', self::LevelThre)->count(); if($parentCount >= $level[3]) { $parent->address_level = self::LevelFour; //空投 $welfare = config('super_welfare')[self::LevelFour]; $model::setPopularNoAreaOrder($welfare['num'], 0, 0, $welfare['product_id'], $item, $model::Airdrop); } }elseif($parent->address_level == self::LevelFour){ $parentCounts = self::where('parent_id', $item)->where('address_level', '>=', self::LevelFour)->count(); if($parentCounts >= $level[4]) { $parent->address_level = self::LevelFive; //空投 $welfare = config('super_welfare')[self::LevelFive]; $model::setPopularNoAreaOrder($welfare['num'], 0, 0, $welfare['product_id'], $item, $model::Airdrop); } } } //更新直推领取人数 if($parentId == $item) $parent->direct_super += self::Normal; $parent->save(); } } // return self::where('id', $uid)->update(['address_level'=> $addressLevel+1, 'is_super'=>self::Super]); } catch (\Exception $e) { Log::error($e->getMessage(),'updateUserLevel'); } } /** * 添加用户上级标识 * 领取超级福利后就会变成青铜地址 * 直推3个领取了超级福利的变成白银地址 * 直推10个领取了超级福利的变成黄金地址 * 有3个是黄金地址的 就变成翡翠地址 * */ public static function updateUserAddresLevel(int $uid, int $parentId) { $addressLevel = 0; if (!empty($parentId)) { $paths = UserPathModel::where('user_id', $uid)->order('distance', 'asc')->column('parent_id'); array_unshift($paths, $uid); foreach ($paths as $item) { //更新等级 $level = self::LevelAll; $parentCount = self::where('parent_id', $item)->where('address_level', '>=', self::LevelOne)->count(); if($parentCount >= $level[1]) $addressLevel = self::LevelTwo; if($parentCount >= $level[2]) $addressLevel = self::LevelThre; //是否升级翡翠 if($addressLevel == self::LevelThre) { $parentCounts = self::where('parent_id', $item)->where('address_level', '>=', self::LevelThre)->count(); if($parentCounts >= $level[3]) $addressLevel = self::LevelFour; } //彩宝 if($addressLevel == self::LevelFour) { $parentCounts = self::where('parent_id', $item)->where('address_level', '>=', self::LevelFour)->count(); if($parentCounts >= $level[4]) $addressLevel = self::LevelFive; } if($addressLevel > 0) self::where('id', $item)->setField('address_level', $addressLevel); } } return $addressLevel; } //社区向上发放奖励津贴 public static function setCommunityRewards($uid, $pv, $token) { $paths = UserPathModel::where('user_id', $uid)->where('distance', '<', 11)->order('distance', 'asc')->column('distance,parent_id'); if (!empty($paths)) { $model = new LedgerWalletModel(); foreach ($paths as $kk=>$item) { if($kk== 1){ $model->changeWalletAccount($item, $token, $pv, ledgerTokenChangeModel::Community, $uid); }else{ //间接推荐有效会员大于层级 if(self::where('parent_id', $item)->where('rwa_num','>', 0)->count() >= $kk){ $model->changeWalletAccount($item, $token, $pv, ledgerTokenChangeModel::Community, $uid); } } } } } }