hasOne(Wechat::class); } public function wrongInfo() { return $this->hasMany(WrongInfoHistories::class); } public function blackList() { return $this->hasMany(Blacklist::class); } public function linkBlackList() { return $this->hasMany(LinkingBlacklist::class); } public function recommendWechat() { return $this->hasONe(Wechat::class, 'openid', 'from_openid'); } public function profileCourtship() { return $this->hasOne(ProfileCourtship::class); } public function sass_profileCourtship() { return $this->hasOne(ProfileCourtship::class)->select('sex','city','province','age','birthday','belief','state','stature','weight','resident_province','resident_city','income','degree','ideal_mate','introduction','interest_hobby','mate_conditon'); } public function profileMarriage() { return $this->hasOne(ProfileMarriage::class); } public function userDetailQrcode() { return $this->hasOne(UserShareQrcode::class, 'user_id', 'id')->where('type', 4); } public function linkings() { return $this->hasMany(Linking::class); } public function bannedHistory() { return $this->hasMany(BannedHistory::class); } public function otherLinkings() { return $this->hasMany(Linking::class, 'user_linking_id'); } public function asset() { return $this->hasOne(Live\Asset::class); } public function rank() { return $this->belongsTo('App\Models\Rank', 'rank_id', 'id'); } public function goodMatch() { return $this->hasOne(GoodMatch::class, 'user_id', 'id'); } public function matchmakerClient() { return $this->hasOne(MatchmakerClient::class, 'client_user_id', 'id'); } public function isAdmin() { return $this->is_admin; } public function profilePhoto() { return $this->hasMany(ProfilePhoto::class); } //被访问 public function userPreviewHistory() { return $this->hasMany(UserPreviewHistory::class, 'user_id'); } public function rankHistories() { return $this->hasMany(RankHistory::class); } public function rankHistoriesV2() { return $this->hasMany(RankHistory::class); } public function homeRecommend() { return $this->hasOne(HomeRecommend::class); } public function userPreview() { return $this->hasMany(UserPreview::class); } public function positionHistory() { return $this->hasMany(PositionHistory::class); } public function referre() { return $this->hasOne(Referre::class); } public function addedBonus() { return $this->hasMany(AddedBonus::class); } public function bonus() { return $this->hasMany(Bonus::class); } public function clientComments() { return $this->hasMany(ClientComment::class)->orderBy('id', 'desc'); } public function clientComment() { return $this->hasMany(ClientComment::class)->orderBy('created_at','desc'); } public function orderRemarks() { return $this->hasMany(OrderRemarks::class); } public function community() { return $this->hasMany(community::class); } public function fromWechat() { return $this->hasOne(Wechat::class, 'openid', 'from_openid'); } public function singleProfile() { return $this->hasOne(SingleProfile::class, 'user_id', 'id'); } public function activityMember() { return $this->hasMany(ActivityMember::class); } public function orders() { return $this->hasMany(Order::class); } public function activityShareHistories() { return $this->hasMany(ActivityShareHistory::class); } //社群搜索记录 public function keywordHistories() { return $this->hasMany(KeywordHistory::class); } //网易云账号 public function IMUser() { return $this->hasOne(WangYiYunUser::class); } public function communityStar(){ return $this->hasOne(CommunityStar::class, 'user_id'); } public function userInfo(){ return $this->hasOne(UserInfo::class,'user_id','id'); } public function interactLive() { return $this->hasOne(InteractLive::class, 'user_id'); } //直播卡 public function interactLiveCards() { return $this->hasMany(InteractLiveCard::class, 'user_id', 'id'); } //福币 public function coin() { return $this->hasOne(Coin::class); } //福币记录 public function coinLogs() { return $this->hasMany(CoinLog::class); } public function interactLiveGiftLogs() { return $this->hasMany(InteractLiveGiftLog::class); } public function moments() { return $this->hasMany(Moment::class); } public function systemBlacklist() { return $this->hasOne(SystemBlacklist::class, 'user_id', 'id'); } // public function comment(){ // return $this->hasMany(ArticleComment::class, 'user_id'); // } public function feedbacker(){ return $this->hasMany(ArticleComment::class, 'feedback_id'); } public function coinWithdrawLogs() { return $this->hasMany(CoinWithdrawLog::class); } public function feedback() { return $this->hasMany(FeedbackHistory::class,'user_id','id')->select('user_id','content'); } public function feedbackv2() { return $this->hasMany(FeedbackHistory::class,'user_id','id')->select('user_id','content'); } public function signLogs() { return $this->hasMany(SignLog::class); } //社群分类 public function groupAdmin(){ return $this->hasMany(CommunityGroupAdmin::class); } public function inviteLogs() { return $this->hasMany(InviteHistory::class, 'invite_user_id', 'id'); } public function flashRoseLogs() { return $this->hasMany(FlashRoseLog::class); } public function flashRose() { return $this->hasOne(FlashRose::class); } public function userRemark() { return $this->hasMany(ActivityUserRemark::class,'user_id'); } public function shareImgLogs() { return $this->hasMany(ShareImgLog::class); } public function viewer() { return $this->hasOne(Viewer::class); } public function areaUser(){ return $this->hasMany(AreaUser::class,'user_id','id'); } //群聊 public function team() { return $this->belongsToMany(Team::class, 'user_team') ->orderBy('user_team.created_at', 'desc') ->withTimestamps() ->withPivot('mute'); } //群主 public function owner() { return $this->hasOne(Team::class, 'owner'); } //网易云信聊天记录 public function msgHistory() { return $this->hasOne(MsgHistory::class, 'owner'); } public function closeProfile(){ return $this->hasOne(CloseProfileHistory::class); } public function operatorUser(){ return $this->hasOne(CloseProfileHistory::class,'operator','id'); } /** * 每日推荐 * @return [type] [description] */ public function recommendUsers() { return $this->hasMany(RecommendUser::class); } public function merchantUser() { return $this->hasOne(MerchantUser::class); } public function crmRole() { return $this->hasOne(CrmRole::class, 'user_id', 'id'); } public function crmAdmin() { return $this->hasOne(CrmRole::class, 'user_id', 'id')->where('type', 'admin'); } public function crmCService() { return $this->hasOne(CrmRole::class, 'user_id', 'id')->where('type', 'c_service'); } public function crmTService() { return $this->hasOne(CrmRole::class, 'user_id', 'id')->where('type', 't_service'); } public function crmUser() { return $this->hasOne(CrmUser::class, 'user_id', 'id'); } public function crmUserLogs() { return $this->hasMany(CrmUserLog::class, 'user_id', 'id'); } //是否好友 public function isFriend($user) { $id = $this->id; $user_id = $user->id; $count = Linking::where(function($sql) use($id, $user_id){ $sql->where(['user_id'=>$user_id, 'user_linking_id'=>$id]); })->orWhere(function($sql) use($id, $user_id){ $sql->where(['user_id'=>$id, 'user_linking_id'=>$user_id]); })->count(); return $count?true:false; } /** * 当前会员等级 * @return [type] [description] */ public function currentRank() { $rank_id = $this->rank_id; $history_rank = $this->rankHistories()->orderBy('rank_id', 'desc')->first(); if ($history_rank && $rank_id != $history_rank->rank_id) { $this->update(['rank_id'=>$history_rank->rank_id]); }elseif (empty($history_rank)) { $this->update(['rank_id'=>0]); } return $history_rank; } public function rankName() { $history = $this->currentRank(); if (empty($history)) { return $rank_name = '普通会员'; } $rank_name = Rank::where('id', $history->rank_id)->value('name'); return $rank_name; } //添加访问记录 public function addUserPreview($user_id) { if ($this->id == $user_id || empty($this->mobile) || empty($this->photo)) { return; } $preview = UserPreview::where(['user_id'=>$user_id, 'preview_user_id'=>$this->id])->first(); if (empty($preview)) { $preview = UserPreview::create(['user_id'=>$user_id, 'preview_user_id'=>$this->id]); } //是否是隐身访问 if ($this->getAttributes()['hidden']) { UserPreviewHistory::create(['user_id'=>$user_id, 'preview_user_id'=>$this->id, 'is_hidden'=>1]); $preview->preview_time = date('Y-m-d H:i:s'); $preview->status = 1; $preview->save(); }else{ UserPreviewHistory::create(['user_id'=>$user_id, 'preview_user_id'=>$this->id, 'is_hidden'=>0]); $is_update = empty($preview->preview_time)?1:0; $preview->preview_time = date('Y-m-d H:i:s'); $preview->status = 0; $preview->save(); $content = '用户【'.$this->nickname.'】最近访问了你'; $this->sendIMAttachMsg($this->id, $user_id, 'preview', $content); if ($is_update) { $user = User::find($user_id); if (empty($user)) return ; $user->updateCacheUser('preview_count'); } } //缓存点击量 $rd_key = (self::RDPREVIEWKEY).$user_id; if (Cache::has($rd_key)) { Cache::increment($rd_key, 1); }else{ $user = User::find($user_id); $user->cachePreview(); } return; } public function sendIMAttachMsg($sender, $receiver, $type, $content) { //发送自定义 $attach = [ 'id'=>1, 'timestamp;'=>time(), 'sender'=>$sender, 'receiver'=>$receiver, 'type'=>$type, 'content'=>$content, 'needBadge'=>true, ]; $im_service = new IMService(env('IM_APP_KEY'), env("IM_APP_SECRET")); $result = $im_service->sendAttachMsg($sender,0,$receiver,json_encode($attach)); return true; } //用户头像 public function userAvatar($user_id=null) { if (!empty($user_id)) { $user = $this->where('id', $user_id)->first(); if(!$user)return ''; }else{ $user = $this; //处理下面is_photo_audited拿不到数据做判断的情况 if (!isset($user->is_photo_audited) || !isset($user->photo) || !isset($user->sex)){ $user = (new $this)->where('id',$this->id ?? 0)->first() ?: $this; } } if ($user->photo) { $avatar = strstr($user->photo,'?x-oss-process=style/scale1')?$user->photo:$user->photo.'?x-oss-process=style/scale1'; } elseif ($user->app_avatar) { $avatar = strstr($user->app_avatar,'?x-oss-process=style/scale1')?$user->app_avatar:$user->app_avatar.'?x-oss-process=style/scale1'; } /*elseif ($user->circle_avatar) { $avatar = $user->circle_avatar; }*/ elseif (empty($user->photo) && empty($user->app_avatar)) { if ($user->sex == 1) { // $avatar = 'http://images.ufutx.com/201811/12/0e8b72aae6fa640d9e73ed312edeebf3.png'; $avatar = "https://image.fulllinkai.com/202203/09/39cb4692a41a0a26efa4832e5e0bed91.png"; }elseif ($user->sex == 2) { // $avatar = 'http://images.ufutx.com/201811/12/dddd79aa2c2fc6a6f35e641f6b8fb8f5.png'; $avatar = "https://image.fulllinkai.com/202203/09/b934cf1de643cc3716390eba2cb31085.png"; }else{ $avatar = 'https://image.fulllinkai.com/202203/09/cc1c73eb1a4941fef25a15cd1ff2f9df.png'; } } //审核中 if ($user->is_photo_audited == 0 && $user->photo){ if ($user->sex == 1) { $avatar = "https://image.fulllinkai.com/202203/09/39cb4692a41a0a26efa4832e5e0bed91.png"; } elseif ($user->sex == 2) { $avatar = "https://image.fulllinkai.com/202203/09/b934cf1de643cc3716390eba2cb31085.png"; } else { $avatar = 'https://image.fulllinkai.com/202203/09/cc1c73eb1a4941fef25a15cd1ff2f9df.png'; } } return $avatar; } // avatar修改器 public function getAvatarAttribute() { return $this->userAvatar(); } public function getphotoAttribute($value) { if ($this->is_photo_audited == -1) { // return 'https://image.fulllinkai.com/202207/04/1fa9a906b956efa26852fb685a845fff.png'; //不通过 根据性别展示默认头像 if ($this->sex == 1) { $value = "https://image.fulllinkai.com/202203/09/39cb4692a41a0a26efa4832e5e0bed91.png"; } elseif ($this->sex == 2) { $value = "https://image.fulllinkai.com/202203/09/b934cf1de643cc3716390eba2cb31085.png"; } else { $value = 'https://image.fulllinkai.com/202203/09/cc1c73eb1a4941fef25a15cd1ff2f9df.png'; } } return $value; } /** * 是否是游客 1:是,0:否 */ public function getIsVisitorAttribute() { return ($this->mobile && $this->photo)?0:1; } /** * 修改介绍人地址 * @return [type] [description] */ public function getAddress() { $location_longitude = $this->location_longitude; $location_latitude = $this->location_latitude; $result = $this->positionGetAddress($location_longitude, $location_latitude); if (empty($result)) { $result = $this->homeLocation(); $this->home_location = $result; }else{ $this->post_location = $result; } if (!empty($result)) { $this->ProfileMarriage()->update($result); } } /** * 坐标转地址 * @return */ public function positionGetAddress($location_longitude, $location_latitude) { //1.经纬度转地址 if (empty($location_longitude) || empty($location_latitude)) { return false; } $localtion = $location_latitude.','.$location_longitude; $url = "https://apis.map.qq.com/ws/geocoder/v1/?location=".$localtion.'&key=P43BZ-QSDCP-BMHDP-V3BTR-3EL45-KOFJL'; $result = json_decode(Http::http($url, [], 'GET'), true); if ($result['status'] == 0) { $address_component = $result['result']['address_component']; if (count($address_component) && isset($address_component['province']) && isset($address_component['city'])) { $result = [ 'province'=>$address_component['province'], 'city'=>$address_component['city'] ]; return $result; } return false; }else{ return false; } return false; } /** * 手机号归属地 * @return [type] [description] */ public function homeLocation($mobile=null) { if (empty($mobile)) { $mobile = $this->mobile; } $host = "http://showphone.market.alicloudapi.com"; $path = "/6-1"; $method = "GET"; $appcode = "ad41385e76184cffab0a5dc7654f8db2"; $headers = array(); array_push($headers, "Authorization:APPCODE " . $appcode); $querys = "num=".$mobile; $bodys = ""; $url = $host . $path . "?" . $querys; $curl = curl_init(); curl_setopt($curl, CURLOPT_CUSTOMREQUEST, $method); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_HTTPHEADER, $headers); curl_setopt($curl, CURLOPT_FAILONERROR, false); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); curl_setopt($curl, CURLOPT_HEADER, false); if (1 == strpos("$".$host, "https://")) { curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false); } $re = json_decode(curl_exec($curl), true); if (isset($re['showapi_res_body'])) { $body = $re['showapi_res_body']; if (isset($body['prov']) && isset($body['city'])) { $result['province'] = $body['prov']; $result['city'] = $body['city']; return $result; }else{ return false; } } return false; } public function getValidFormId() { $seven_day_age = date('Y-m-d H:i:s', strtotime('-7 day')); $form = $this->formIds()->where('status', 0)->where('created_at', '>', $seven_day_age)->orderBy('id', 'asc')->first(); return $form; } /** * 推荐人名称 */ public function FromUsername() { $from_user_id = 0; if ($this->from_openid) { $from_user_id = Wechat::where('openid', $this->from_openid)->value('user_id'); }elseif ($this->from_user_id) { $from_user_id = $this->from_user_id; }elseif ($this->from_official_openid) { $from_user_id = Wechat::where('openid', $this->from_official_openid)->value('user_id'); } $from_user_name = null; //from_user_id = 13003 if ($from_user_id) { $from_user_name = $this->where('id', $from_user_id)->value('name'); } return $from_user_name; } public function FromUsernames() { $from_user_id = $this->from_user_id; $from_user_name = null; // dd(1); if ($from_user_id) { $from_user_name = $this->where('id', $from_user_id)->value('name'); } return $from_user_name; } /** * 是否是自己邀请注册的 * @param [type] $other_user [description] * @return boolean [description] */ public function isInvited($other_user) { $user_id = $this->id; $openid = $this->wechat->openid; $official_openid = $this->wechat->official_openid; if ($user_id == $other_user->id) { return true; } $is_user_id = false; $is_openid = false; $is_official_openid = false; if ($user_id == $other_user->from_user_id) { $is_user_id = true; } if ($openid == $other_user->from_openid && $openid) { $is_openid = true; } if ($official_openid == $other_user->from_official_openid && $official_openid) { $is_official_openid = true; } if ($is_user_id || $is_openid || $is_official_openid) { return true; } return false; } /** * 是否被禁言 */ public function isBanned($type) { if (empty($type)) { return false; } $time = date('Y-m-d H:i:s'); $history = BannedHistory::where('user_id', $this->id)->where('type', $type)->where('end_time', '>=', $time)->first(); return $history; } /** * 单身是否填写七项基本资料 */ public function isCompletedHomeProfile() { if ($this->type == 'single') { $profile = $this->profileCourtship; if ($profile->province && $profile->city && $profile->sex && $profile->state && $profile->belief && $profile->max_age && $profile->min_age && $profile->birthday) { return true; } return false; } } /** * 共同好友列表 */ public function mutualFriends($request, $other_user) { //我的好友id $my_friend_ids = $this->userFriendIds($this); //Ta的好友id $other_user_friend_ids = $this->userFriendIds($other_user); //公共好友id $mutual_friend_ids = array_intersect($my_friend_ids, $other_user_friend_ids); $users = User::whereIn('id', $mutual_friend_ids)->with('profileCourtship', 'profileMarriage'); $keyword = $request->input('keyword'); if ($keyword) { $keyword = trim($keyword); $users = $users->where(function($sql) use($keyword){ $sql->where('name', 'like', '%'.$keyword.'%') ->orWhere('mobile', 'like', '%'.$keyword.'%'); }); } $users = $users->paginate(); foreach ($users as $user) { if ($user->type == 'single') { $user->age = \CommonUtilsService::getAge($user->profileCourtship->birthday); $user->stature = $user->profileCourtship->stature; $user->city = $user->profileCourtship->city; }else{ $user->age = \CommonUtilsService::getAge($user->profileMarriage->birthday); $user->stature = ''; $user->city = $user->profileMarriage->city; } } return $users; } public function userFriendIds($user) { //我的好友id $ids = Linking::where('user_id', $user->id)->pluck('user_linking_id')->toArray(); $other_ids = Linking::where('user_linking_id', $user->id)->pluck('user_id')->toArray(); $my_friend_ids = array_merge($ids, $other_ids); return $my_friend_ids; } public function hasRecommended() { $other_user_ids = RecommendSingleHistory::where('user_id', $this->id)->pluck('other_user_id')->toArray(); return $other_user_ids; } public function recommendSingles() { return $this->hasMany(RecommendSingleHistory::class, 'user_id', 'id'); } public function recommendOtherSingles() { return $this->hasMany(RecommendSingleHistory::class, 'other_user_id', 'id'); } public function recommendLinks() { return $this->hasMany(RecommendLinkingNew::class, 'id_users_left', 'id'); } /** * 是否关注福恋智能公众号 */ public function hasSubscribeOfficial() { try { $is_subscribe = 0; $viewer = null; $app = \WechatService::officialApp('new'); $official_openid = SingleProfile::where('user_id', $this->id)->value('openid'); if (empty($official_openid)) { $viewer = Viewer::where('mobile', $this->mobile)->first(); }else{ $wechat_user = $app->user->get($official_openid); if (array_key_exists('errmsg', $wechat_user)) { $viewer = Viewer::where('mobile', $this->mobile)->first(); }else{ $result = !empty($wechat_user)&&count($wechat_user)&&isset($wechat_user['subscribe']); $is_subscribe = $result?$wechat_user['subscribe']:0; if ($is_subscribe != $this->is_subscribe) { $this->is_subscribe = $is_subscribe; $this->save(); } return $is_subscribe; } } if ($viewer) { $official_openid = $viewer->openid; $wechat_user = $app->user->get($official_openid); if (array_key_exists('errmsg', $wechat_user)) { return $is_subscribe; }else{ $result = !empty($wechat_user)&&count($wechat_user)&&isset($wechat_user['subscribe']); $is_subscribe = $result?$wechat_user['subscribe']:0; } } if ($is_subscribe != $this->is_subscribe) { $this->is_subscribe = $is_subscribe; $this->save(); } // \Log::info('userid:'. $this->id. '-subscribe: '.$is_subscribe); return $is_subscribe; } catch (\Exception $e) { $this->getError($e); return 0; } } public function isSubscribe($openid) { $is_subscribe = 0; $app = \WechatService::officialApp('new'); $wechat_user = $app->user->get($openid); if (array_key_exists('errmsg', $wechat_user)) { throw new \Exception("获取用户微信信息失败"); }else{ $result = !empty($wechat_user)&&count($wechat_user)&&isset($wechat_user['subscribe']); $is_subscribe = $result?$wechat_user['subscribe']:0; } return $is_subscribe?1:0; } static public function hasSubscribeOfficialWithOpenid($official_openid) { $app = \WechatService::officialApp(); $wechat_user = $app->user->get($official_openid); $result = !empty($wechat_user)&&count($wechat_user)&&isset($wechat_user['subscribe']); $is_subscribe = $result?$wechat_user['subscribe']:0; return $is_subscribe; } /** * 是否是临时会员 */ public function isTempMember($user_id=0) { $user_id = $user_id?:$this->id; $member = TempMember::where('user_id', $user_id)->where('status', 0)->first(); return $member?true:false; } /** * 获取临时会员 * @return [type] [description] */ public function getTempRank() { $result = TempMember::where('user_id', $this->id)->first(); if ($result) { return ['code'=>1, 'msg'=>'已领取过']; } TempMember::create([ 'user_id'=>$this->id, 'status'=>0 ]); $this->temp_member = 1; $this->save(); return true; } /** * 是否是超级会员 */ public function isSuperRank($user_id=0) { $now = date('Y-m-d H:i:s'); $user = $user_id?User::find($user_id):$this; $rank = RankHistory::where('rank_id', $user->rank_id)->where('user_id', $user->id)->where('deadline','>', $now)->first(); $temp_rank = $this->isTempMember($user->id); return $rank||$temp_rank?1:0; } /** * 增减分享会员 */ public function addSuperRank($day=0, $month=0, $type=null,$other_type=null) { try { //修改会员等级 if ($this->rank_id != 9) {//超级会员 $this->rank_id = 9; $this->save(); } //增加会员记录 $history = RankHistory::where(['user_id'=>$this->id, 'rank_id'=>9])->orderBy('deadline','desc')->first(); if (empty($history)) { $history = RankHistory::create(['user_id'=>$this->id, 'rank_id'=>9, 'type'=>$type,'other_type'=>$other_type]); } if ($history->deadline) { if ($month) { if ($type) { RankHistory::create([ 'user_id'=>$this->id, 'rank_id'=>9, 'deadline'=> date('Y-m-d H:i:s', strtotime('+'.$month.' month', strtotime($history->deadline))), 'type'=>$type, 'other_type'=>$other_type ]); }else{ $history->deadline = date('Y-m-d H:i:s', strtotime('+'.$month.' month', strtotime($history->deadline))); } } if ($day) { if ($type) { RankHistory::create([ 'user_id'=>$this->id, 'rank_id'=>9, 'deadline'=> date('Y-m-d H:i:s', strtotime('+'.$day.' day', strtotime($history->deadline))), 'type'=>$type, 'other_type'=>$other_type ]); }else{ $history->deadline = date('Y-m-d H:i:s', strtotime('+'.$day.' day', strtotime($history->deadline))); } } }else{ if ($month) { $history->deadline = date('Y-m-d H:i:s', strtotime('+'.$month.' month')); } if ($day) { $history->deadline = date('Y-m-d H:i:s', strtotime('+'.$day.' day')); } $history->type = $type; } $history->save(); $this->updateCacheUser('is_super_rank'); $this->updateCacheUser('rank_deadline'); return true; } catch (\Exception $e) { return false; } } /** * 获取开通分类,会员记录的数量 */ public function getSuperCount($user_id,$type,$other_type = null){ $deadline = date('Y-m-d H:i:s'); $rankHistory = RankHistory::where('deadline','>=',$deadline) ->where('user_id',$user_id) ->where('type',$type); // dump($other_type); if($other_type){ $rankHistory->where('other_type',$other_type); } return $rankHistory->count(); } /** * 是否可以兑换会员 */ public function canGetSuperRank() { if (empty($this->wechat)) { return 0; } $count = InviteHistory::where('invite_openid', $this->wechat->openid)->where('status', 0)->count(); return $count?1:0; } /** * 是否可以领取24小时超级会员 */ public function canGetDailySuperRank() { //判断资料是否完全 $user_service = new UserService(); $result = $user_service->profileIntegrity($this->profileCourtship, $this); if ($result['total_count'] != $result['count']) { return '领取失败,资料未完善'; } //是否领取过 $count = TempMember::where('user_id', $this->id)->count(); if ($count) { return '领取失败,已领取过临时会员'; } //是否头像认证 if ($this->is_photo_audited != 1) { return "领取失败,头像未通过认证"; } //是否真人认证 if ($this->is_real_approved != 1) { return '领取失败,未通过真人认证'; } return false; } /** * 获取直播id * @return [type] [description] */ public function getViewerId() { try { $unionid = $this->wechat?$this->wechat->unionid:null; $mobile = $this->mobile; $viewer_id = Viewer::where('user_id', $this->id)->value('id'); if (empty($viewer_id)) { if (empty($unionid)) { $viewer_id = Viewer::where('mobile', $mobile)->value('id'); }else{ $viewer_id = Viewer::where('unionid', $unionid)->value('id'); if (empty($viewer_id)) { $viewer_id = Viewer::where('mobile', $mobile)->value('id'); } } } return $viewer_id; } catch (\Exception $e) { \Log::error('获取直播用户失败'); return null; } } /** * 用户钱包 */ public function userAsset() { try { $asset = $this->asset; if ($asset) return $asset; $viewer_id = $this->getViewerId(); if (empty($viewer_id)) return null; $asset = Asset::where('viewer_id', $viewer_id)->first(); if (empty($asset)) return null; $asset->user_id = $this->id; $asset->save(); if ($asset->viewer_id) { AssetLog::where('viewer_id', $asset->viewer_id)->whereNull('user_id')->update(['user_id'=>$this->id]); } return $asset; } catch (\Exception $e) { $this->getError($e); return null; } } //访问器 public function getCircleAvatarAttribute($value) { if ($value) { return $value; }elseif ($this->sex == 1) { return 'https://image.fulllinkai.com/202203/09/39cb4692a41a0a26efa4832e5e0bed91.png'; }elseif ($this->sex == 2) { return 'https://image.fulllinkai.com/202203/09/b934cf1de643cc3716390eba2cb31085.png'; }else { return 'https://image.fulllinkai.com/202203/09/cc1c73eb1a4941fef25a15cd1ff2f9df.png'; } } public function getNicknameAttribute($value) { if(!$value){ return ""; }else{ return $value; } } //添加好友权限 public function addFriendPermission() { $start_time = date('Y-m-d'); $end_time = date('Y-m-d H:i:s'); //当天申请加好友次数 $friend_request_count = LinkingRequest::where('user_linking_id', $this->id)->whereBetween('created_at', [$start_time, $end_time])->count(); if ($friend_request_count > 7) { return false; } return true; } public function createIMUser() { $im_service = new IMService(env('IM_APP_KEY'), env('IM_APP_SECRET')); $wyyUser = $this->IMUser; $accid = config('app.env') == 'production'?$this->id:'alpha_'.$this->id; // //创建网易云账号 $result = $im_service->createUserId($accid,$this->nickname,$props='{}',$this->app_avatar); //\Log::info('创建网易云账号'); //\Log::info($result); if ($result['code'] == 200) { $wyyUser = $this->IMUser()->create([ 'accid'=>$accid, 'name'=>$this->nickname, 'photo'=>$this->app_avatar, 'mobile'=>$this->mobile, 'gender'=>$this->sex?:0, 'token'=>$result['info']['token'], ]); }elseif ($result['code'] == 414 && $result['desc'] == 'already register') { if (empty($this->IMUser)) { $result = $im_service->getUinfos([$accid]); if ($result['code'] == 200) { $info = $result['uinfos'][0]; $accid = ''; $name = ''; $gender = ''; if(array_key_exists("accid",$info)){ $accid = $info['accid']; } if(array_key_exists("name",$info)){ $name = $info['name']; } if(array_key_exists("gender",$info)){ $gender = $info['gender']; } $wyyUser = new WangYiYunUser(); $wyyUser->user_id = $accid; $wyyUser->accid = $this->id; $wyyUser->name = $name; $wyyUser->gender = $gender; $wyyUser->save(); } } } return $wyyUser; } /** * 添加网易好友 * @param [type] $user [description] * @param [type] $otherUser [description] */ public function addIMFriend($otherUser, $msg='') { try { $user = $this; if ($user->id == $otherUser->id) { return false; } $im_service = new IMService(env('IM_APP_KEY'), env('IM_APP_SECRET')); $accid = $user->id; $faccid = $otherUser->id; //创建im账号 if (empty($user->IMUser)) { $user->createIMUser(); } if (empty($otherUser->IMUser)) { $otherUser->createIMUser(); } $result = $im_service->addFriend($accid,$faccid,$type='1',$msg); if ($result['code'] != 200) { throw new \Exception("添加网易好友失败".json_encode($result), 1); } return true; } catch (\Exception $e) { $this->getError($e); return false; } } /** * 删除IM好友 * @param [type] $user 被删除的好友信息 * @return [type] [description] */ public function deleteIMFriend($user) { try { $im_service = new IMService(env('IM_APP_KEY'), env('IM_APP_SECRET')); $accid = $this->id; $faccid = $user->id; //创建im账号 if (empty($this->IMUser)) { $this->createIMUser(); } if (empty($user->IMUser)) { $user->createIMUser(); } $result = $im_service->deleteFriend($accid,$faccid); return true; } catch (\Exception $e) { $this->getError($e); return false; } } /** * 是否已经设置密码 * @return boolean [description] */ public function hasPassword() { $password = User::where('id', $this->id)->value("password"); return $password?1:0; } /** * 好友数 * @return [type] [description] */ public function friendCount() { $user_ids = $this->userFriendIds($this); $friend_count = User::whereIn('id', $user_ids) ->where('id', '!=', $this->id); // if ($this->type =='single') { // $friend_count = $friend_count->where('type', 'single'); // }else{ // $friend_count = $friend_count->where('type', '<>', 'single'); // } $friend_count = $friend_count->count(); return $friend_count?:0; } //用户出生日期同步身份证 public function cardBirthdayToProfile($channel='') { //拿到身份证的出生日期 $result = \CommonUtilsService::checkCardBirhday($this->card_num); if ($result['error'] != 2) { return false; } $birthday = $result['tdate']; if ($channel == 'app') { $this->profileCourtship->birthday = $birthday; $this->profileCourtship->save(); }else{ if ($this->type == 'single') { if ($this->profileCourtship) { $this->profileCourtship->birthday = $birthday; $this->profileCourtship->save(); } }else{ if ($this->profileMarriage) { $this->profileMarriage->birthday = $birthday; $this->profileMarriage->save(); } } } return true; } public function isCompletedProfile($type) { try { $result = 1; switch ($type) { case 'app_register_info': $profile_info = self::BASEPROFILEINFO; $user_info = self::BASEUSERINFO; break; case "mp_other_info": $profile_info = self::MPOTHERPROFILEINFO; $user_info = self::MPOTHERUSERINFO; // if (empty($this->profilePhoto()->count())) return 0; break; case 'app_other_info': $profile_info = self::OTHERPROFILEINFO; $user_info = self::OTHERUSERINFO; //是否有生活照 if (empty($this->profilePhoto()->count())) return 0; break; default: # code... break; } foreach ($profile_info as $info) { if (empty($this->profileCourtship->$info)) { $result = 0; break; } } unset($this->profileCourtship); if (empty($result)) return $result; foreach ($user_info as $info) { if (empty($this->$info)) { $result = 0; break; } } return $result; } catch (\Exception $e) { $this->getError($e); return 0; } } /** * 检查创建直播间权限 * 1.红娘 * 2.未创建过直播间 * @return [type] [description] */ public function checkStoreLive() { try { //判断是否是红娘 if (empty($this->live_match_maker)) return false; return true; } catch (\Exception $e) {//报错 $this->getError($e); return false; } } /** * 检查申请相亲权限 * @param integer $live_id [当前直播间] * @param integer $card_live_id [卡限制直播间] * @return [type] [description] */ public function checkInteractApply($live_id, $card_live_id=0) { try { $result = $this->isBanBylives($live_id); if (is_array($result)) return $result; // $result = $this->hasInteractLiveCard($card_live_id); // if (is_array($result)) return $result; return true; } catch (\Exception $e) { $this->getError($e); return false; } } /** * 是否有相亲卡 * @param [type] $card_live_id [description] * @return boolean [description] */ public function hasInteractLiveCard($card_live_id) { $now_time = date('Y-m-d H:i:s'); //是否有直播卡 $card = InteractLiveCard::where('user_id', $this->id)->where(function($sql) use($card_live_id){ $sql->where('live_id', $card_live_id)->orWhere('live_id', 0); })->where(function($sql) use($now_time){ $sql->where('end_time', '<', $now_time)->orWhereNull('end_time'); })->first(); if (empty($card)) return ['code'=>1, 'msg'=>'没有互动直播卡']; return true; } /** * 是否有足够的福币 * @return boolean [description] */ public function hasEnoughCoin($live) { try { $coin_info = $this->coinInfo(); if ($this->sex == 1 && $coin_info->remain_amount < 10 * $live->male_fee) { return ['code'=>1, 'msg'=>'福币金额不足以该直播间连麦,请先充值']; } return true; } catch (\Exception $e) { $this->getError($e); return false; } } /** * 是否被禁止 * @param [type] $live_id [description] * @return boolean [description] */ public function isBanBylives($live_id) { //是否被禁止 $now_time = date('Y-m-d H:i:s'); $log = InteractLiveBanLog::where('user_id', $this->id)->where('live_id', $live_id)->where('start_time', '<', $now_time)->where('end_time', '>', $now_time)->orderBy('end_time', 'desc')->first(); if ($log) return ['code'=>1, 'msg'=>'已被禁止申请该直播间至'.$log->end_time]; return false; } /** * 福币信息 * @return [type] [description] */ public function coinInfo() { try { $coin_info = $this->coin; if (empty($coin_info)) { $coin_info = new Coin; $coin_info->user_id = $this->id; $coin_info->remain_amount = 0; $coin_info->used_amount = 0; $coin_info->amount_from_other = 0; $coin_info->save(); } return $coin_info; } catch (\Exception $e) { $this->getError($e); return false; } } //可提现福币 public function user_coin($user_id) { //获取用户总福币 $total_coin = CoinLog::where('user_id',$user_id) ->where('type','RECSYSTEM') ->where(function ($query){ $query->where('remark', 'like','%邀请好友%') ->orWhere('remark', 'like','%城市群主服务%') ->orWhere('remark', 'like','%奖励%') ->orWhere('remark', 'like','%刘勇芳%') ->orWhere('remark', 'like','%钉钉%'); })->sum('coin'); //已提现 $cash = CoinWithdrawLog::where('user_id',$user_id)->where(function ($query){ $query->where('remark', 'like','%邀请好友%'); })->wherein('status',[0,1])->wherein('is_hooked',[0,1])->sum('value'); //获取活动获得的总福币 $remarkcan_remain_amount = $total_coin - $cash??0; return $remarkcan_remain_amount; } /** * 修改福币信息 * @param [type] $type 类型 * @param [type] $value 金额 * @param [type] $coin_type 福币类型 cash表示可提现,other表示不可提现 * @return [type] [description] */ public function updateCoinInfo($type, $value, $coin_type='cash') { try { $coin_info = $this->coinInfo(); if (empty($coin_info)) throw new \Exception("没有福币信息", 1); $total_coin = $coin_info->remain_amount + $coin_info->amount_from_other; if ($type == 'add') { if ($coin_type == 'cash') { $coin_info->increment('remain_amount', $value); }else{ $coin_info->increment('amount_from_other', $value); } }elseif ($type == 'sub') { if ($total_coin < $value) { throw new \Exception("剩余福币不足", 1); } if ($coin_info->amount_from_other >= $value) { $coin_info->decrement('amount_from_other', $value); }else{ $sub_remain_amount = $value - $coin_info->amount_from_other; $coin_info->decrement('amount_from_other', $coin_info->amount_from_other); $coin_info->decrement('remain_amount', $sub_remain_amount); } $coin_info->increment('used_amount', $value); } return true; } catch (\Exception $e) { $this->getError($e); return false; } } /** * 增加福币记录 * @param [type] $type [description] * @param [type] $type_id [description] * @param [type] $value [description] */ public function addCoinLog($type, $type_id, $value, $remark='') { try { $log = $this->coinLogs()->create([ 'type'=>$type, 'coin'=>$value, 'type_id'=>$type_id, 'is_hooked'=>1, 'remark'=>$remark, ]); return $log; } catch (\Exception $e) { $this->getError($e); return false; } } public function addInteractLiveGift($send_user_id, $gift_id, $num, $total_coin) { $log = $this->interactLiveGiftLogs()->create([ 'send_user_id'=>$send_user_id, 'gift_id'=>$gift_id, 'num'=>$num, 'total_coin'=>$total_coin ]); return $log; } public function dynamic(){ return $this->hasMany(Dynamic::class); } public function dynamics() { $instance = new Dynamic(); $instance->setSuffix($this->id % 10); $foreignKey = $this->getForeignKey(); $localKey = $this->getKeyName(); return new HasMany($instance->newQuery(), $this, $foreignKey, $localKey); } public function activityUser(){ return $this->hasMany(ActivityUser::class); } public function activityFollowUser(){ return $this->hasMany(ActivityUser::class, 'follow_user_id'); } public function article(){ return $this->hasMany(Article::class); } public function role() { return $this->belongsToMany(Rbac\Role::class, 'admin_role_users', 'user_id', 'role_id'); } public function admin() { return $this->hasMany(Admin::class); } public function unlikeMomentLogs() { return $this->hasMany(UnlikeMomentLog::class); } public function commentLive($live) { try { InteractLiveComment::create([ 'user_id'=>$this->id, 'live_id'=>$live->id, 'num'=>$live->num, 'label'=>json_encode(request()->input('label',[]), JSON_UNESCAPED_UNICODE), 'option'=>request()->input('option'), 'content'=>request()->input('content') ]); return true; } catch (\Exception $e) { $this->getError($e); return false; } } public function chatMessageCountWithUser($user_id) { $system_type = ['remind','greet','notice']; $count = ChatMessage::where('user_id', $this->id)->where('other_user_id', $user_id)->wherenotin('system_type',$system_type)->count(); return $count; } public function isIMFriend($user_id) { try { $im_service = new IMService(env('IM_APP_KEY'), env('IM_APP_SECRET')); $arr = $im_service->getFriend($this->id, time(), strtotime(auth()->user()->created_at->toDateTimeString())); $result = 0; if ($arr['code'] == 200) { $friends = $arr['friends']; foreach ($friends as $friend) { if ($friend['faccid'] == $user_id) { $result = 1; break; } } } return $result; } catch (\Exception $e) { $this->getError($e); return false; } } // public function getIsPhotoAuditedAttribute($value) // { // $is_photo_audited = 0; // if (empty($this->photo)) { // $is_photo_audited = -1; // }elseif ($this->photo && empty($value)) { // $is_photo_audited = 0; // }elseif ($this->photo && $value) { // $is_photo_audited = 1; // } // return $is_photo_audited; // } public function getIsEducateApprovedAttribute($value) { $status = $this->approveLog()->where('type', 'educate')->orderBy('updated_at', 'desc')->value('status'); if ($status == 0 && is_numeric($status)) {//审核中 $value = 2; }elseif ($status == 0 && !is_numeric($status)) {//无状态 $value = 3; }elseif ($status == 1) {//通过 $value = 1; }elseif ($status == -1) {//拒绝 $value = 0; } return $value; } public function getIsRealApprovedAttribute($value) { $log = $this->approveLog()->where('type', 'body')->orderBy('updated_at', 'desc')->first(); // $value = 0; if ($log) { $status = $log->status; if (empty($status) && is_numeric($status)) {//0 审核中 $value = $log->ways?2:0; }elseif (empty($status) && !is_numeric($status) && $value== 0) {//未提交审核 $value = 0; }elseif (empty($status) && !is_numeric($status) && $value== 1) {//未提交审核 $value = 0; }elseif ($status == 1 && $value ==1) {//通过 $value = 1; }elseif ($status == -1) {//拒绝 $value = -1; } }else { $value = 0; } return $value; } public function getIsApprovedAttribute($value) { $status = $this->approveLog()->where('type', 'name')->orderBy('updated_at', 'desc')->value('status'); if ($value == 1) {//认证成功 $value = 1; }elseif ($value == 0 && $status == 0 && is_numeric($status)) {//认证中 $value = 2; }elseif ($value == 0 && $status == -1) {//认证失败 $value = -1; }elseif ($value == 0 && !is_numeric($status)) {//未提供认证 $value = 0; } return $value; } public function approveLog() { return $this->hasMany(ApproveHistory::class); } public function bodyApproveLog() { return $this->hasOne(ApproveHistory::class, 'user_id', 'id')->where('type', 'body'); } public function updateApproveInfo($type, $status,$from_m_id=null,$extend=null) { try { $user_service = new UserService(); //创建认证记录 $log = $this->approveLog()->firstOrCreate([ 'type'=>$type, ]); $log->from_user_id = $user_service->getFromParam('from_user_id'); $log->from_platform = $user_service->getFromParam('from_platform'); $log->from_m_id = $from_m_id; $log->status = $status; $log->extend = $extend ? json_encode($extend) : null; $log->save(); //修改认证信息 switch ($type) { case 'name': $this->is_approved = $status; break; case 'body': $this->is_real_approved = $status; $this->card_num = request()->input('card_num'); $this->name = request()->input('name'); //修改生日记录 $this->cardBirthdayToProfile('app'); break; case 'educate': $this->is_educate_approved = $status; break; } $this->save(); return $log; } catch (\Exception $e) { $this->getError($e); return false; } } /** * 升级学历 * @param $extend * @return void */ public function upgradeEducation($extend) { $user_service = new UserService(); //创建认证记录 $log = $this->approveLog()->firstOrCreate([ 'type'=> 'educate', ]); $log->from_user_id = $user_service->getFromParam('from_user_id'); $log->from_platform = $user_service->getFromParam('from_platform'); $log->from_m_id = null; $log->status = 0; $log->extend = $extend ? json_encode($extend) : null; $log->save(); } public function dislikeLogs() { return $this->hasMany(UserDislikeLog::class); } /** * 资料修改记录 * @param [type] $old_data [description] * @param [type] $new_data [description] */ public function addProfileChangeLog($old_data, $new_data) { if (count($old_data)) { ProfileChangeHistory::create([ 'user_id'=>$this->id, 'owner_user_id'=>$this->id, 'new_content'=>json_encode($new_data), 'old_content'=>json_encode($old_data) ]); } } public function userFriendQuestion() { return $this->hasOne(UserFriendQuestion::class); } public function friendQuestions() { return $this->hasOne(FriendQuestion::class); } public function friendQuestion() { try { $userFriendQuestion = $this->userFriendQuestion()->first(); $content = $userFriendQuestion?$userFriendQuestion->question->title:''; return $content; } catch (\Exception $e) { $this->getError($e); return false; } } public function scopePhoto($query) { return $query->whereNotNull('photo')->where('is_photo_audited', '<>', -1); } /** * 获取排序 * @return [type] [description] */ public function giftIcons() { $logs = $this->interactLiveGiftLogs()->groupBy('gift_id')->selectRaw('sum(total_coin) as sum, user_id, gift_id')->orderBy('sum', 'desc')->with('gift')->limit(5)->get(); $icons = []; foreach ($logs as $log) { $icons[] = $log->gift->icon; } return $icons; } public function scopeRecommend($query) { return $query->fullinkUser()->where('type', 'single')->where('is_subscribe', 1)->where('hidden_profile', 'NONE'); } public function scopeSingle($query) { return $query->where('type', 'single')->NotHidden(); } public function scopeApprove($query) { return $query->where('is_approved', 1)->NotHidden(); } public function scopePay($query) { return $query->where(function($sql) { $sql->whereHas('orders', function($query){ $query->where('pay_status', 'PAID')->where('price', '>', 0); }); }); } public function scopeLinkData($query) { return $query->where('link_data', 1); } public function scopeFullinkUser($query) { return $query->whereNotIn('id', self::FULLLINKIDS); } public function isMessenger() { $is_messenger = 0; $viewer_id = $this->getViewerId(); if ($viewer_id) { $viewer = Viewer::with('messenger')->where('id', $viewer_id)->first(); if ($viewer && $viewer->messenger && $viewer->messenger->is_audit) { $is_messenger = 1; } } return $is_messenger; } public function totalCoin() { try { $coin_obj = Coin::where('user_id', $this->id)->first(); if (empty($coin_obj)) return 0; return $coin_obj->remain_amount + $coin_obj->amount_from_other; } catch (\Exception $e) { $this->getError($e); return 0; } } public function scopeNoFiveProfile($query) { return $query->where(function($sql){ $sql->whereNull('nickname') ->orWhereNull('sex') ->orWhere('sex', 0) ->orWhereNull('belief') ->orWhereHas('profileCourtship', function($sql){ $sql->whereNull('birthday') ->orWhereNull('province') ->orWhereNull('city'); }); }); } public function withdrawer() { return $this->hasOne(CoinWithdrawer::class); } public function anchors() { return $this->hasMany(TeamLiveAnchor::class); } public function isAnchor($team_id) { $result = $this->anchors()->where('team_id', $team_id)->exists(); return $result?1:0; } public static function cacheUserKey($user_id) { return self::RDUSERKEY.$user_id; } public function cacheUserProperty($property) { switch ($property) { case 'fans_count': $result = $this->followers()->where('hidden_profile', '<>', 'ALLSEX')->count()?:0; break; case 'follow_count': $result = $this->followings()->where('hidden_profile', '<>', 'ALLSEX')->count()?:0; break; case 'friend_count': $user_id = $this->id; $result = Linking::whereHas('user', function($sql){ })->whereHas('userLink', function($sql){ })->where(function($sql) use($user_id){ $sql->where('user_id',$user_id)->orWhere('user_linking_id', $user_id); })->count(); break; case 'age': $profile = $this->profileCourtship; $result = $profile? \CommonUtilsService::getAge($profile->birthday):0; break; case 'is_super_rank': $result = $this->isSuperRank(); break; case "preview_count": // $result = $this->userPreview()->whereNotNull('preview_time')->whereHas('previewUser',function ($query){ // $query->where('hidden_profile', '<>', 'ALLSEX'); // })->count()?:0; // if ($this->id == 58859) { $result = UserPreviewHistory::whereHas('previewUser', function($sql) { if ($this->type == 'single') { $sql->where('sex', '<>', $this->sex)->where('type', 'single')->where('hidden_profile', '<>', 'ALLSEX'); } })->where('user_id', $this->id)->where('is_hidden', 0)->groupBy('preview_user_id') ->get()->toArray(); $result = count($result)?:0; // } break; case "rank_deadline": $result = RankHistory::where('user_id', $this->id)->whereNotNull('deadline')->orderBy('deadline', 'desc')->value('deadline'); break; default: $result = $this->$property; break; } return $result; } //缓存用户信息 public function cacheUser() { try { $rd_user_key = self::cacheUserKey($this->id); $property_arr = User::RDUSERPROPERTY; if ($this->type == 'single') { $this->profileCourtship; }else{ $this->profileCourtship; $this->profileMarriage; } foreach ($property_arr as $property) { $result = $this->cacheUserProperty($property); $this->$property = $result; } $result = Cache::put($rd_user_key, $this, now()->addMinutes(15)); return $result; } catch (\Exception $e) { $this->getError($e); return false; } } /** * 修改缓存属性 * @return [type] [description] */ public function updateCacheUser($property) { try { $rd_user_key = self::cacheUserKey($this->id); if (Cache::has($rd_user_key)) { $result = $this->cacheUserProperty($property); $rd_user = Cache::get($rd_user_key); $rd_user->$property = $result; $result = Cache::put($rd_user_key, $rd_user, now()->addMinutes(15)); }else{ $result = $this->cacheUser(); } return $result; } catch (\Exception $e) { $this->getError($e); return false; } } public static function cachePreviewKey($user_id) { return self::RDPREVIEWKEY.$user_id; } public static function cachePtKey($user_id) { return self::RDUSERPTKEY.$user_id; } //缓存访问量信息 public function cachePreview() { try { $rd_key = self::cachePreviewKey($this->id); $count = $this->userPreviewHistory()->count()?:0; $result = Cache::put($rd_key, $count, now()->addHours(24)); return $result; } catch (\Exception $e) { $this->getError($e); return false; } } /** * 新增访问量 */ public function addCachePreview() { $rd_key = self::cachePreviewKey($this->id); Cache::increment($rd_key, 1); return Cache::get($rd_key); } /** * 用户点击量 */ public function previewCacheCount() { try { $rd_key = (self::RDPREVIEWKEY).$this->id; if (Cache::has($rd_key)) { $count = Cache::get($rd_key); }else{ $count = $this->userPreviewHistory()->count()?:0; Cache::put($rd_key, $count, now()->addHours(24)); } return $count; } catch (\Exception $e) { $this->getError($e); return 0; } } //好友列表(成为好友顺序排序) public function friends(){ return $this->belongsToMany(User::class, 'linkings', 'user_id', 'user_linking_id') ->orderBy('linkings.created_at', 'desc') ->withPivot('user_id','user_linking_id', 'created_at', 'id'); } public function scopeType($query, $type) { return $query->where('type', $type); } public function scopeNotHidden($query) { return $query->where('hidden_profile', 'NONE'); } //是否付费vip public function cashVip(){ $order = Order::where('user_id',$this->id)->where('pay_status','PAID')->whereIn('type',['rank','single_service'])->first(); return $order ? 1 : 0; } /** * 是否是测试号码 * @return bool */ public function getMobileAttribute($value) { $result = substr($value, 0, 4); return ($result == 'love')?null:$value; } //超级管理员 public function superRole() { $role = $this->role()->where('name', '超级管理员')->first(); return $role; } public function portrait() { return $this->hasOne(Portrait::class, 'user_id', 'id'); } public function completePortrait() { $portrait = $this->portrait; if (empty($portrait)) return false; $array = ['economic_requirement', 'work_requirement', 'body_requirement', 'child_requirement', 'area_requirement','belief_requirement','family_requirement', 'age_requirement', 'interest_label', 'marry_in', 'economic_situation_work', 'economic_situation_job', 'economic_situation_salary', 'economic_situation_house', 'character', 'raw_family', 'family_members', 'state' ]; foreach ($array as $val) { if (empty($portrait->$val)) return false; } return true; } public function earningUser() { return $this->hasOne(EarningUser::class, 'user_id', 'id'); } public function exchangeLogs() { return $this->hasMany(CoinExchange::class); } //被投诉关联 public function complains() { return $this->hasMany(ComplaintHistory::class, 'complaint_id', 'id'); } }