userCon = $userCon; $this->sms = $sms; $this->momentCon = $momentCon; $this->liveCon = $liveCon; } /** * 地图用户 * @param Request $request [description] * @return [type] [description] */ public function mapUsers(Request $request) { try { $user = auth()->user(); $location_longitude = $request->location_longitude; $location_latitude = $request->location_latitude; //修改经纬度 if($location_longitude && $location_latitude){ $rd_pt_key = User::cachePtKey($user->id); $pt = ['location_longitude'=>$location_longitude, 'location_latitude'=>$location_latitude]; Cache::forever($rd_pt_key, $pt); } $users = User::where('hidden_profile', 'NONE'); //同信仰 if ($user->belief) { $users = $users->where('belief', $user->belief); } //经纬度限制 $southwest = $request->input('southwest'); $northeast = $request->input('northeast'); if ($northeast && $southwest) { $northeast_arr = json_decode($northeast, true); $southwest_arr = json_decode($southwest, true); $users = $users->whereBetween('location_latitude', [$southwest_arr['latitude'], $northeast_arr['latitude']])->whereBetween('location_longitude', [$southwest_arr['longitude'], $northeast_arr['longitude']]); } $users = $users->whereNotNull('location_latitude')->photo()->where('type', 'single')->where('sex', '<>', $user->sex)->whereNotIn('id', User::FULLLINKIDS)->select('id', 'nickname', 'location_longitude', 'location_latitude', 'sex','type', 'photo', 'app_avatar')->orderBy('is_approved', 'desc')->orderBy('rank_id', 'desc')->orderBy('id', 'desc')->limit(50)->get(); foreach ($users as $other_user) { $rd_user_key = User::cacheUserKey($other_user->id); if (Cache::has($rd_user_key)) { $rd_user = Cache::get($rd_user_key); }else{ $other_user->cacheUser(); $rd_user = Cache::get($rd_user_key); } $other_user->location_longitude = ($other_user->location_longitude * 1000000 + 0.009 * 1000000 ) /1000000; $other_user->age = $rd_user->age; //头像 $other_user->photo = $other_user->userAvatar(); //生活照 $other_user->profile_photos = $other_user->profilePhoto()->select('photo')->get()->toArray(); //粉丝数 $other_user->fans_count = $rd_user->fans_count; //点击数 $other_user->preview_count = (int)$other_user->previewCacheCount(); $other_user->is_super_rank = $user->isSuperRank($other_user->id); unset($other_user->wechat, $other_user->profileCourtship); } return $this->success('地图信息获取成功', $users); } catch (\Exception $e) { $this->getError($e); return $this->failure('获取地图信息失败,请稍后再试'); } } //会话信息 public function chatInfo(Request $request) { //消息发送次数 、我的认证状态 、是否已提醒对方认证、对方是否已认证、 $user = auth()->user(); $other_user_id = $request->user_id; $other_user = User::where('id',$other_user_id)->first(); if(!$other_user) return $this->failure('获取好友信息失败,请稍后再试'); ChatMessage::where(["user_id"=>$other_user_id, 'status'=>0, 'other_user_id'=>$user->id])->update(['status'=>1]); $system_type = ['remind','greet','notice']; $chat_num = ChatMessage::where('user_id',$user->id)->where('other_user_id',$other_user_id)->wherenotin('system_type',$system_type)->count(); $my_real_approved = $user->is_real_approved; $other_real_approved = $other_user->is_real_approved; $remind_status = ChatMessage::where('user_id',$user->id)->where('other_user_id',$other_user_id)->where('system_type','remind')->exists(); $data['chat_num'] = $chat_num ; $data['my_real_approved'] = $my_real_approved ; $data['other_real_approved'] = $other_real_approved ; $data['remind_status'] = $remind_status?1:0 ; $data['is_subscribe'] = $user->is_subscribe; return $this->success('ok',$data); } /** * 用户列表筛选条件 * @param Request $request [description] * @return [type] [description] */ public function usersCondition(Request $request) { //地址 $address_arr = Address::where('parentId', 2)->select('name', 'codeId', 'parentId')->orderBy('codeId', 'asc')->get()->toArray(); $item['name'] = '不限'; foreach ($address_arr as &$address) { $son = Address::where('parentId', $address['codeId'])->select('name', 'codeId', 'parentId')->get()->toArray(); // array_unshift($son, $item); $address['son'] = $son; } //性别 $sex_arr = ['不限', '只看男', '只看女']; //年龄 $age_arr = ['不限', '90后', '80后', '70后', '60后']; return $this->success('ok', compact('address_arr', 'sex_arr', 'age_arr')); } public function bigDataLink() { //黑名单列表 $blacklist_user_ids = LinkingBlackList::where('user_id', auth()->id())->pluck('other_user_id')->toArray(); $dislike_user_ids = auth()->user()->dislikeLogs()->where('type', 'user')->pluck('type_id')->toArray(); $unset_user_ids = array_merge($blacklist_user_ids, $dislike_user_ids, User::FULLLINKIDS); $user = auth()->user(); if (request()->page == 1 || empty(request()->page)) { $ids = RecommendLinkingNew::where('id_users_left', $user->id)->whereHas('otherUser', function($sql) use($unset_user_ids){ $sql->where('is_approved',1)->where('hidden_profile', 'NONE')->whereNotIn('id', $unset_user_ids)->photo(); })->where('is_recommend', 1)->limit(100)->orderBy('score', 'desc')->orderBy('id','desc')->pluck('id')->toArray(); shuffle($ids); Redis::set('user_linking_news_'.$user->id, json_encode($ids)); }else { $ids = Redis::get('user_linking_news_'.$user->id); $ids = empty($ids) ? [] : json_decode($ids, true); } $logs = RecommendLinkingNew::with('otherUser:id,nickname,sex,is_approved,is_real_approved,rank_id,photo,belief,industry_sub', 'otherUser.profileCourtship:id,user_id,province,city,stature,interest_hobby,birthday,introduction,degree')->whereIn('id', $ids)->orderBy(\DB::raw('FIND_IN_SET(id, "' . implode(",", $ids) . '"' . ")"))->paginate(10); foreach ($logs as $log) { if($log->otherUser->profileCourtship){ $log->age = CommonUtilsService::getAge($log->otherUser->profileCourtship->birthday); } //是否关注 $log->is_followed = auth()->user()->isFollowing($log->otherUser); //是否是超级会员 $log->isSuperRank = $log->otherUser->isSuperRank(); $log->photo = $log->otherUser->photo.'?x-oss-process=style/scale1'; $user = $log->otherUser->toArray(); foreach ($user as $key => $value) { $log->$key = $user[$key]; } unset($log->otherUser); } if (empty(count($logs))) { return false; } return $logs; } public function isLock() { $result = \DB::select("show OPEN TABLES where In_use > 0;"); $is_locked = 0; if (count($result)) { foreach ($result as $re) { if ($re->Table == 'ufutx_recommend_linking_news') { $is_locked = 1; break; } } } return $is_locked; } /** * 用户列表 * @param Request $request [description] * @return [type] [description] */ public function users(Request $request, $user_id=null) { if ($user_id) { $my_user = User::find($user_id); }else{ $my_user = auth()->user(); } $result = strstr(request()->route()->uri(), 'api/users/v2'); try { $sex = $request->input('sex'); $age = $request->input('age'); switch ($age) { case "60后": $min_age = "1969-12-31"; $max_age = "1960-01-01"; break; case "70后": $min_age = "1979-12-31"; $max_age = "1970-01-01"; break; case "80后": $min_age = "1989-12-31"; $max_age = "1980-01-01"; break; case "90后": $min_age = "1999-12-31"; $max_age = "1990-01-01"; break; default: $min_age = $max_age = $age; } $min_age = CommonUtilsService::getAge($min_age); $max_age = CommonUtilsService::getAge($max_age); $province = $request->input('province'); $city = $request->input('city'); $is_approve = $request->input('is_approve'); $is_rank = $request->input('is_rank',0); $keyword = $request->input('keyword'); $my_user->link_data = 1; if ($my_user->link_data && empty($sex) && empty($min_age) &&empty($is_rank) && empty($max_age) && empty($province) && empty($city) && !is_numeric($is_approve) && empty($keyword) && !$result) { $is_locked = $this->isLock(); if (!$is_locked) { $result = $this->bigDataLink(); if ($result) return $this->success('ok',$result); } } //成员类型 良人 佳偶 介绍人 红娘 $select_sex = $my_user->sex; // dd($select_sex); $sex = $sex?:($select_sex == 1?2:1); // dd($sex); $min_age = $min_age?:'不限'; $max_age = $max_age?:'不限'; // $times = CommonUtilsService::searchAge($age); $province = $province?:'不限'; $city = $city?:'不限'; // $is_rank = $is_rank?:'不限'; $is_approve = $request->input('is_approve'); $users = User::with('profileCourtship')->whereHas('profileCourtship', function($sql) use($province, $city, $min_age, $max_age, $is_approve){ if ($province && $province != '不限') { $sql = $sql->where('province', $province); } if ($city && $city != "不限") { $sql = $sql->where('city', $city); } if ($min_age != '不限' && $max_age != '不限' && $min_age != $max_age) { $min_age = (explode('岁', $min_age))[0]; $max_age = (explode('岁', $max_age))[0]; $max_birthday = date('Y-01-01',strtotime("-$max_age year")); $min_birthday = date('Y-12-32',strtotime("-$min_age year")); $sql = $sql->where('birthday','>=',$max_birthday)->where('birthday','<=',$min_birthday); } if($min_age != '不限' && $max_age != '不限' && $min_age = $max_age){ $min_age = (explode('岁', $min_age))[0]; $min_birthday = date('Y-01-01',strtotime("-$min_age year")); $max_birthday = date('Y-12-31',strtotime("-$min_age year")); $sql = $sql->where('birthday','>=',$min_birthday)->where('birthday','<=',$max_birthday); } if (is_numeric($is_approve)) { $sql = $sql->where('is_approved', $is_approve); } }); if (is_numeric($is_rank) && $is_rank == 1) { //是会员 $users = $users->where('rank_id', '>', 0); } if (is_numeric($is_rank) && $is_rank == 2) { //非会员 $users = $users->where('rank_id',0); } if($sex){ $users = $users->where('sex',$sex); } if($keyword){ $users = $users->where(function($sql) use($keyword){ $sql->where('nickname', 'like', '%'.$keyword.'%') ->orWhere('name', 'like', '%'.$keyword.'%'); }); } if ($keyword && $sex) { $users = $users->where('sex',$sex); $users = $users->where(function($sql) use($keyword){ $sql->where('nickname', 'like', '%'.$keyword.'%') ->orWhere('name', 'like', '%'.$keyword.'%'); }); } // if($sex){ // $users = $users->where('sex',$sex); // }elseif ($keyword && $sex) { // $users = $users->where('sex',$sex); // $users = $users->where(function($sql) use($keyword){ // $sql->where('nickname', 'like', '%'.$keyword.'%') // ->orWhere('name', 'like', '%'.$keyword.'%'); // }); // }elseif($keyword){ // $users = $users->where(function($sql) use($keyword){ // $sql->where('nickname', 'like', '%'.$keyword.'%') // ->orWhere('name', 'like', '%'.$keyword.'%'); // }); // }//else{ //小程序查看22-35的用户 // $users->where('sex',$sex); // $users = $users->whereHas('profileCourtship', function ($query){ // $query->whereBetween('birthday', ['1989-01-01 00:00:00', '1999-01-01 00:00:00']); // }); // } $users = $users->where('can_be_found', 1); //增加黑名单隐藏 $blacklist_user_ids = LinkingBlackList::where('user_id', $my_user->id)->pluck('other_user_id')->toArray(); $dislike_user_ids = $my_user->dislikeLogs()->where('type', 'user')->pluck('type_id')->toArray(); //客服id; $unset_user_ids = array_merge($blacklist_user_ids, $dislike_user_ids, User::FULLLINKIDS); if (empty($sex) && empty($age) && empty($province) && empty($city) && !is_numeric($is_approve) && empty($keyword)) { $user_ids = RecommendUser::where('user_id', $my_user->id)->whereHas('otherUser', function ($sql) use ($my_user) { $sql->where('is_approved', 1)->where('sex', '<>', $my_user->sex)->where('hidden_profile', '<>', 'ALLSEX')->whereNotIn('id', User::FULLLINKIDS)->where('can_be_found', 1); })->limit(7)->orderBy('start_time', 'asc')->pluck('other_user_id')->toArray(); $users = $users->whereNotIn('id', $user_ids); } $users = $users->whereNotIn('id', $unset_user_ids); $users = $users->where('hidden_profile', 'NONE')->orderBy('rank_id', 'desc')->where('type', 'single')->orderBy('is_real_approved', 'desc')->orderBy('is_approved', 'desc')->orderBy('liveness', 'desc')->orderBy('info_complete_score', 'desc')->orderBy('last_visit', 'desc')->paginate(); foreach ($users as $user) { $rd_user_key = User::cacheUserKey($user->id); if (Cache::has($rd_user_key)) { $rd_user = Cache::get($rd_user_key); }else{ $user->cacheUser(); $rd_user = Cache::get($rd_user_key); } if(!empty($rd_user)){ if(!empty($rd_user->age)){ $user->age = $rd_user->age; }else{ $user->age = null; } //是否是超级会员 if(!empty($rd_user->is_super_rank)){ $user->isSuperRank = $rd_user->is_super_rank; }else{ $user->isSuperRank = null; } } $user->profile_courtship = $user->profileCourtship; $user->profile_courtship->interest_label = json_decode($user->profile_courtship->interest_label,true)?:null; $user->profile_courtship->mate_conditon = json_decode($user->profile_courtship->mate_conditon,true)?:null; // dd($user->profile_courtship->mate_conditon); //是否关注 // $user->is_followed = $my_user->isFollowing($user); $user->photo = $user->avatar; unset($user->face_score); } // Cache::put($social_users_key, $users, 1); return $this->success('ok', $users); } catch (\Exception $e) { $this->getError($e); return $this->failure('获取用户列表失败,请稍后再试'); } } public function searchUsers(Request $request, $user_id=null) { if ($user_id) { $my_user = User::find($user_id); }else{ $my_user = auth()->user(); } try { $sex = $request->input('sex'); $min_age = $request->input('min_age'); $max_age = $request->input('max_age'); $province = $request->input('province'); $city = $request->input('city'); $is_approve = $request->input('is_approve'); $is_rank = $request->input('is_rank',0); $keyword = $request->input('keyword'); $my_user->link_data = 1; //成员类型 良人 佳偶 介绍人 红娘 $select_sex = $my_user->sex; // dd($select_sex); // $sex = $sex?:($select_sex == 1?2:1); // dd($sex); $min_age = $min_age?:'不限'; $max_age = $max_age?:'不限'; // $times = CommonUtilsService::searchAge($age); $province = $province?:'不限'; $city = $city?:'不限'; // $is_rank = $is_rank?:'不限'; $is_approve = $request->input('is_approve'); $users = User::with('profileCourtship')->whereHas('profileCourtship', function($sql) use($province, $city, $min_age, $max_age, $is_approve){ if ($province && $province != '不限') { $sql = $sql->where('province', $province); } if ($city && $city != "不限") { $sql = $sql->where('city', $city); } if ($min_age != '不限' && $max_age != '不限' && $min_age != $max_age) { $min_age = (explode('岁', $min_age))[0]; $max_age = (explode('岁', $max_age))[0]; $max_birthday = date('Y-01-01',strtotime("-$max_age year")); $min_birthday = date('Y-12-32',strtotime("-$min_age year")); $sql = $sql->where('birthday','>=',$max_birthday)->where('birthday','<=',$min_birthday); } if($min_age != '不限' && $max_age != '不限' && $min_age == $max_age){ $min_age = (explode('岁', $min_age))[0]; $min_birthday = date('Y-01-01',strtotime("-$min_age year")); $max_birthday = date('Y-12-31',strtotime("-$min_age year")); $sql = $sql->where('birthday','>=',$min_birthday)->where('birthday','<=',$max_birthday); } if (is_numeric($is_approve)) { $sql = $sql->where('is_approved', $is_approve); } }); if (is_numeric($is_rank) && $is_rank == 1) { //是会员 $users = $users->where('rank_id', '>', 0); } if (is_numeric($is_rank) && $is_rank == 2) { //非会员 $users = $users->where('rank_id',0); } if($sex){ $users = $users->where('sex',$sex); } if($keyword){ $users = $users->where(function($sql) use($keyword){ $sql->where('nickname', 'like', '%'.$keyword.'%') ->orWhere('name', 'like', '%'.$keyword.'%'); }); } if ($keyword && $sex) { $users = $users->where('sex',$sex); $users = $users->where(function($sql) use($keyword){ $sql->where('nickname', 'like', '%'.$keyword.'%') ->orWhere('name', 'like', '%'.$keyword.'%'); }); } $users = $users->where('can_be_found', 1); //增加黑名单隐藏 $blacklist_user_ids = LinkingBlackList::where('user_id', $my_user->id)->pluck('other_user_id')->toArray(); $dislike_user_ids = $my_user->dislikeLogs()->where('type', 'user')->pluck('type_id')->toArray(); //客服id; $unset_user_ids = array_merge($blacklist_user_ids, $dislike_user_ids, User::FULLLINKIDS); if (empty($sex) && empty($age) && empty($province) && empty($city) && !is_numeric($is_approve) && empty($keyword)) { $user_ids = RecommendUser::where('user_id', $my_user->id)->whereHas('otherUser', function ($sql) use ($my_user) { $sql->where('is_approved', 1)->where('sex', '<>', $my_user->sex)->where('hidden_profile', '<>', 'ALLSEX')->whereNotIn('id', User::FULLLINKIDS)->where('can_be_found', 1); })->limit(7)->orderBy('start_time', 'asc')->pluck('other_user_id')->toArray(); $users = $users->whereNotIn('id', $user_ids); } $users = $users->whereNotIn('id', $unset_user_ids); $users = $users->where('hidden_profile', 'NONE')->orderBy('rank_id', 'desc')->where('type', 'single')->orderBy('is_real_approved', 'desc')->orderBy('is_approved', 'desc')->orderBy('liveness', 'desc')->orderBy('info_complete_score', 'desc')->orderBy('last_visit', 'desc')->paginate(); foreach ($users as $user) { $rd_user_key = User::cacheUserKey($user->id); if (Cache::has($rd_user_key)) { $rd_user = Cache::get($rd_user_key); }else{ $user->cacheUser(); $rd_user = Cache::get($rd_user_key); } $user->age = $rd_user->age; $user->profile_courtship = $user->profileCourtship; $user->profile_courtship->interest_label = json_decode($user->profile_courtship->interest_label,true)?:null; $user->profile_courtship->mate_conditon = json_decode($user->profile_courtship->mate_conditon,true)?:null; $user->isSuperRank = $rd_user->is_super_rank; $user->photo = $user->avatar; unset($user->face_score); } return $this->success('ok', $users); } catch (\Exception $e) { $this->getError($e); return $this->failure('获取用户列表失败,请稍后再试'); } } /** * 用户列表 * @param Request $request [description] * @return [type] [description] */ public function usersV2(Request $request, $user_id=null) { Log::info("用戶列表V2"); if ($user_id) { $my_user = User::find($user_id); }else{ $my_user = auth()->user(); } $result = strstr(request()->route()->uri(), 'api/users/v2'); // try { $sex = $request->input('sex'); $age = $request->input('age'); $province = $request->input('province'); $city = $request->input('city'); $is_approve = $request->input('is_approve'); $keyword = $request->input('keyword'); $my_user->link_data = 1; if ($my_user->link_data && empty($sex) && empty($age) && empty($province) && empty($city) && !is_numeric($is_approve) && empty($keyword) && !$result) { $is_locked = $this->isLock(); if (!$is_locked) { $result = $this->bigDataLink(); if ($result){ $result = $result->toArray(); if($result['last_page'] > $result['current_page']){ return $this->success('大数据推送',$result); }else{ $users = $this->userCon->usersList($my_user,$sex,$age,$province,$city,$is_approve,$keyword)->toArray(); $users['data'] = array_merge($result['data'],$users['data']); return $this->success('ok.', $users); } } } } $users = $this->userCon->usersList($my_user,$sex,$age,$province,$city,$is_approve,$keyword); return $this->success('ok', $users); // } catch (\Exception $e) { // $this->getError($e); // return $this->failure('获取用户列表失败,请稍后再试'); // } } /** * 推荐首页 * @param Request $request [description] * @param integer $user_id [description] * @return [type] [description] */ public function socialHome(Request $request, $user_id=0) { try { $mine = auth()->user(); if (empty($mine)) { $mine = $this->authCheck(); } if ($mine) {//已登录 //生成推荐id $user_ids = $this->homeUserIds($mine); if (count($user_ids) < 7) { //如果现在时间早于早上十点晚于凌晨 取昨天的时间 if (strtotime(date('Y-m-d')) < time() && time() < strtotime(date('10:00:00'))) { $start_time = date('Y-m-d 10:00:00', strtotime('-1 day'));; $end_time = date('Y-m-d 09:59:59'); }else{ $start_time = date('Y-m-d 10:00:00'); $end_time = date('Y-m-d 09:59:59', strtotime('+1 day')); } $user_ids = RecommendUser::where('user_id', $mine->id)->whereHas('otherUser', function($sql) use($mine){ $sql->where('is_approved',1)->where('sex', '<>', $mine->sex)->where('hidden_profile', '<>', 'ALLSEX')->where('belief', $mine->belief)->whereNotIn('id', User::FULLLINKIDS); })->limit(7)->orderBy('start_time', 'asc')->pluck('other_user_id')->toArray(); RecommendUser::where('user_id', $mine->id)->whereIn('other_user_id', $user_ids)->update(['start_time'=>$start_time, 'end_time'=>$end_time]); } $users = User::whereIn('id', $user_ids)->where('belief', $mine->belief)->where('is_approved',1)->where('sex', '<>', $mine->sex)->whereNotIn('id', User::FULLLINKIDS)->select('id', 'nickname', 'sex', 'photo', 'is_approved', 'industry_sub', 'industry')->get(); }else{//未登录 $sex = $request->input('sex') == 1?2:1; $users = \DB::table('followables')->leftJoin('users', 'users.id', '=', 'followables.followable_id')->where('followables.relation', 'follow')->where('users.sex', $sex)->whereNotNull('users.photo')->where('type', 'single')->whereNotIn('id', User::FULLLINKIDS)->where('hidden_profile', '<>', 'ALLSEX')->select(\DB::raw('count(*) as num'), 'followable_id','id', 'nickname', 'sex', 'photo', 'is_approved', 'industry_sub', 'industry')->orderBy('num', 'desc')->groupBy('followable_id')->limit(7)->get(); } foreach ($users as $field) { $profile = ProfileCourtship::where('user_id', $field->id)->select('user_id', 'sex', 'province','city', 'birthday', 'stature', 'state', 'belief','introduction')->first(); $age = '未知'; if (!empty($profile)) { $age = \CommonUtilsService::getAge($profile->birthday); $profile->age = $age; } $field->profile = $profile; $user = User::find($field->id); $field->isSuperRank = $user->isSuperRank(); //是否已关注 $field->is_followed = $mine->isFollowing($user); } return $this->success('ok', $users); } catch (\Exception $e) { $this->getError($e); return $this->failure('获取信息失败,请稍后再试'); } } public function homeUserIds($user) { //判断当前时间是否需要刷新 $now = date('Y-m-d H:i:s'); $other_user_ids = RecommendUser::whereHas('otherUser', function($sql){ $sql->where('type', 'single')->where('hidden_profile', '<>', 'ALLSEX')->photo(); })->where('user_id', $user->id)->where('start_time', '<=', $now)->where('end_time', '>=', $now)->pluck('other_user_id'); if (count($other_user_ids)) { return $other_user_ids; } $all_other_user_ids = RecommendUser::where('user_id', $user->id)->pluck('other_user_id'); if ($user->type == 'single') { $belief = $user->belief; $sex = $user->sex == 1?2:1; //匹配的年龄 $max_birthday = $user->profileCourtship->max_age; $min_birthday = $user->profileCourtship->min_age; if (empty($max_birthday) || empty($min_birthday)) { $max_birthday = date('Y-m-d', strtotime('-3 year', strtotime($user->ProfileCourtship->birthday))); $min_birthday = date('Y-m-d', strtotime('+3 year', strtotime($user->ProfileCourtship->birthday))); } $other_user_ids = RecommendLinkingNew::whereHas('otherUser', function($sql) use($sex, $belief, $max_birthday, $min_birthday){ $sql = $sql->photo()->where('hidden_profile', '<>', 'ALLSEX')->where('type', 'single')->where('sex', $sex)->where('belief', $belief)->where('is_approved', 1)->where('nickname', 'not like', '%福恋%')->whereHas('profileCourtship', function($sq) use($max_birthday, $min_birthday){ $sq->whereBetween('birthday', [$max_birthday, $min_birthday]); }); })->where('id_users_left', $user->id)->whereNotIn('id_users_right', $all_other_user_ids)->orderBy('id','desc')->limit(7)->pluck('id_users_right')->toArray(); if (!count($other_user_ids)) { $other_user_ids = $this->getAgeNearUserIds($user, 7, $all_other_user_ids); }elseif (count($other_user_ids) > 0 && count($other_user_ids) < 7) { $limit = 7 - count($other_user_ids); $ids = $this->getAgeNearUserIds($user, $limit, $all_other_user_ids); $other_user_ids = array_merge($other_user_ids,$ids); } if (count($other_user_ids) < 7) { return $other_user_ids; } }else{ $belief = $user->belief; $other_user_ids = User::with('profileCourtship')->whereHas('profileCourtship', function($sql) use($belief){ $sql->where('belief', $belief); })->photo()->whereNotIn('id', $all_other_user_ids)->where('hidden_profile', '<>', 'ALLSEX')->where('is_approved', 1)->where('type', 'single')->orderBy('face_score', 'desc')->limit(7)->pluck('id'); } //如果现在时间早于早上十点晚于凌晨 取昨天的时间 if (strtotime(date('Y-m-d')) < time() && time() < strtotime(date('10:00:00'))) { $start_time = date('Y-m-d 10:00:00', strtotime('-1 day'));; $end_time = date('Y-m-d 09:59:59'); }else{ $start_time = date('Y-m-d 10:00:00'); $end_time = date('Y-m-d 09:59:59', strtotime('+1 day')); } //生成推荐ids $arr = []; foreach ($other_user_ids as $other_user_id) { $data['user_id'] = $user->id; $data['other_user_id'] = $other_user_id; $data['start_time'] = $start_time; $data['end_time'] = $end_time; $data['created_at'] = date('Y-m-d H:i:s'); $data['updated_at'] = date('Y-m-d H:i:s'); $arr[] = $data; } RecommendUser::insert($arr); return $other_user_ids; } public function getAgeNearUserIds($user, $limit, $all_other_user_ids) { $max_birthday = $user->profileCourtship->max_age; $min_birthday = $user->profileCourtship->min_age; if (empty($max_birthday) || empty($min_birthday)) { $max_birthday = date('Y-m-d H:i:s', strtotime('- 3 year', strtotime($user->ProfileCourtship->birthday))); $min_birthday = date('Y-m-d H:i:s', strtotime('+ 3 year', strtotime($user->ProfileCourtship->birthday))); } $belief = $user->profileCourtship->belief; $sex = $user->sex == 1?2:1; $other_user_ids = User::with('profileCourtship')->whereHas('profileCourtship', function($sql) use($max_birthday, $min_birthday, $belief){ $sql->whereBetween('birthday', [$max_birthday, $min_birthday])->where('belief', $belief); })->photo()->where('sex', $sex)->where('type', 'single')->where('is_approved', 1)->where('hidden_profile', '<>', 'ALLSEX')->whereNotIn('id', User::FULLLINKIDS)->whereNotIn('id', $all_other_user_ids)->orderBy('is_approved', 'desc')->orderBy('face_score', 'desc')->limit($limit)->pluck('id'); return $other_user_ids->toArray(); } //如果是查看用户详情,普通用户可以每天查看七个 public function checkPreview($user, $count, $other_user) { $other_user_id = $other_user->id; $result = $user->isFriend($other_user); if ($result) return true; $is_super_rank = $user->isSuperRank(); if ($is_super_rank) return true; $start_time = date('Y-m-d'); //普通用户可以查看7个用户 $history_count = UserPreview::where('preview_user_id', $user->id)->where('preview_time', '>', $start_time)->distinct('user_id')->pluck('user_id')->toArray(); $in_preview = in_array($other_user_id, $history_count); if (count($history_count) >= $count && empty($in_preview)) { return ['code'=>1, 'msg'=>'普通用户每天只能查看7个用户']; } return true; } /** * 他人个人信息 * @param Request $request [description] * @param User $user [description] * @return [type] [description] */ public function otherUser(Request $request, $user_id) { try { $rd_user_key = User::cacheUserKey($user_id); if (Cache::has($rd_user_key)) { $user = $rd_user = Cache::get($rd_user_key); }else{ $user = User::find($user_id); if (empty($user)) return $this->fail('真不巧,用户最近关闭了资料~',5); $user->cacheUser(); $rd_user = Cache::get($rd_user_key); } if (empty($user) || $user->hidden_profile == 'ALLSEX') return $this->fail('真不巧,用户最近关闭了资料~',5); //自己信息 $my_user = auth()->user(); if (!empty($user)) { //是否在黑名单 $is_black = LinkingBlacklist::where('user_id', $user_id)->where('other_user_id', $my_user->id)->count(); if ($is_black) return $this->failure('您已被对方拉入黑名单'); } //用户是否被冻结资料 $frozen_state = $this->userCon->getUserFrozenState($user_id); if($frozen_state != 0) return $this->failure('该用户资料异常,请稍后访问'); //Ta是否是超级会员 $user->isSuperRank = $rd_user->is_super_rank; //粉丝 $user->fans_count = $rd_user->fans_count; //点击数 $user->preview_count = (int)$user->previewCacheCount(); //自己是否是超级会员 $user->selfIsSuperRank= $my_user->isSuperRank(); //Ta的其他信息 $profile = $rd_user->profileCourtship; if (!empty($profile)) { $profile->interest_label = json_decode($profile->interest_label, true); //年龄 $profile->age = $rd_user->age; $profile->mate_conditon = json_decode($profile->mate_conditon,true); } $user->profile = $profile; //添加访问记录 $my_user->addUserPreview($user->id); //获取头像 $user->avatar = $user->userAvatar(); //是否是好友 $user->is_friend = $user->isFriend($my_user)?1:0; //是否已关注 $user->is_followed = $my_user->isFollowing($user); //是否是自己 $user->self = $user->id == $my_user->id?1:0; //生活照 $profile_photos = $user->profilePhoto()->limit(9)->orderBy('id', 'desc')->get()->toArray(); $user->profile_photos = $profile_photos; $user->self_is_approved = $my_user->is_approved; $result = UserService::isCompleteProfileV4($my_user, 'app'); $user->self_info_level = 0; if ($result) { $user->self_info_level = $result['level']; } //自己是否隐身 $user->self_hidden = $my_user->hidden; //小程序路径 $user->mini_program_path = 'pages/home/information?id='.$user->id; $user->official_path = env('APP_URL')."/h5/#/appUserDetails/".$user->id."?user_details_id=".$user->id."&from_user_id=".$my_user->id."&app_url=others_info"; //礼物榜 $user->gift_icons = $user->giftIcons(); //动态 $user->moment_count = $user->moments()->where('is_audited', 1)->where('is_show', 1)->count(); $moments = Moment::where(function($query){ $query->where('photos', '!=', '[]')->orWhereNotNull('aliyun_video_id'); })->where('user_id', $user->id)->orderBy('id', 'desc')->limit(6)->get(); $new_photos = []; // return $this->success('ok', $moments); foreach ($moments as $moment){ if(!empty($moment->photos)){ $moment_photo = json_decode($moment->photos); if(!empty($moment_photo)){ foreach ($moment_photo as $value){ array_push($new_photos, $value); } } } if(!empty($moment->aliyun_video_id)){ $rd_moment_key = Moment::cacheMoemntKey($moment->id); if (Cache::has($rd_moment_key)) { $rd_moment = Cache::get($rd_moment_key); if(!empty($rd_moment->cover_url)){ $new_photos[] = $rd_moment->cover_url; } }else{ $result = \AliyunService::getPlayInfo($moment->aliyun_video_id); if(!empty($result['VideoBase']['CoverURL'])){ $new_photos[] = $result['VideoBase']['CoverURL']; } } } } $user->service_man = UserInfo::where('user_id',$user_id)->where('is_service_client',1)->exists()?1:0; $user->moment = array_slice($new_photos, 0, 4); $type = 'remind_profile_photo'; $count = Notice::where('user_id', $user_id)->where('send_user_id', auth()->id())->where('type', $type)->count(); $user->is_remind = $count ? 1 : 0; unset($user->profileCourtship, $user->face_score,$user->mobile); return $this->success('ok', $user); } catch (\Exception $e) { $this->getError($e); return $this->failure('信息获取失败,请稍后再试'); } } /** * 用户礼物榜单 * @return [type] [description] */ public function userGiftList(Request $request, $user_id) { try { $list = $this->userCon->userGiftList($user_id); if (empty($list)) throw new \Exception("获取榜单失败", 1); return $this->success('ok', $list); } catch (\Exception $e) { $this->getError($e); return $this->failure('获取榜单失败,请稍后再试'); } } /** * 取消好友 * @param Request $request [description] * @param User $user [description] * @return [type] [description] */ public function deleteFriend(Request $request, User $user) { try { \DB::beginTransaction(); $user_id = $user->id; $mine = auth()->user(); $mine_user_id = $mine->id; $link = Linking::where(function($sql) use($user_id, $mine_user_id){ $sql->where('user_id', $user_id)->where('user_linking_id', $mine_user_id); })->orWhere(function($sql) use($user_id, $mine_user_id){ $sql->where('user_id', $mine_user_id)->where('user_linking_id', $user_id); })->first(); if ($link) {//是否有该好友 //删除好友 $link->delete(); //更新好友数 $user->decrement('friend_count',1); $mine->decrement('friend_count',1); //删除网易好友 $mine->deleteIMFriend($user); //清空好友请求 LinkingRequest::where('user_id', $mine->id)->where('user_linking_id', $user->id)->delete(); //清空消息 Notice::where('user_id', $mine->id)->where('send_user_id', $user_id)->where('type', 'friend')->delete(); //聊天记录标记 ChatMessage::where('other_user_id', $mine->id)->where('user_id', $user_id)->update(['status'=>1]); ChatMessage::where('other_user_id', $user_id)->where('user_id', $mine->id)->update(['status'=>1]); //修改缓存 $user->updateCacheUser('friend_count'); $mine->updateCacheUser('friend_count'); }else{ return $this->failure('你们还不是好友'); } \DB::commit(); return $this->success('删除好友成功'); } catch (\Exception $e) { \DB::rollback(); $this->getError($e); return $this->failure('删除好友失败,请稍后再试'); } } /** * 拉入黑名单 * @param Request $request [description] * @param [type] $id [description] * @return [type] [description] */ public function blacklistFriend(Request $request, User $user) { try { //判断是否是好友 // if ($user->isFriend(auth()->user())) { $this->userCon->blacklistFriend(auth()->id(), $user->id); return $this->success('拉黑好友成功'); // }else{ // return $this->failure('还不是好友'); // } } catch (\Exception $e) { $this->getError($e); return $this->failure("拉黑好友失败,请稍有再试"); } } /** * 举报用户 * @param Request $request [description] * @param User $user [description] * @return [type] [description] */ public function complaintUser(Request $request, User $user) { try { $content = $request->input('content'); $label = $request->input('label'); $photos = $request->input('photos', []); if(!$label){ return $this->failure('请选择举报类型'); }else if($photos == [] || empty($photos)){ return $this->failure('请提供举报截图'); } $this->userCon->complaint($request, auth()->id(), $user->id); //短信通知 $mobiles = Redis::smembers('repot_notice_mobile'); $param['message'] = '用户【'.auth()->user()->nickname.'】举报用户【'.$user->nickname.'】'; foreach ($mobiles as $mobile){ $param['mobile'] = $mobile; SendEasySms::dispatch($param)->onQueue('love'); } return $this->success('举报用户成功'); } catch (\Exception $e) { $this->getError($e); return $this->failure('举报用户失败,请稍后再试'); } } /** * 好友申请 * @param Request $request [description] * @param User $user [description] */ public function addFriend(Request $request, User $user) { try { $mine = auth()->user(); // //是否禁言 // $banned = $user->isBanned('friend'); // if ($banned) { // return $this->failure('您已被禁止申请好友,至'.$banned->end_time); // } //查看是否被禁言 $date = date('Y-m-d H:i:s'); $history = BannedHistory::where('user_id',$mine->id)->where('type','friend')->first(); if (!empty($history)) { if($history->end_time >= $date && $history->start_time <= $date) return $this->failure('你被禁止添加好友至'.$history->end_time); } if ($user->hidden_profile == 'ALLSEX') { return $this->success('ok'); } //是否是拉黑好友 $result = $this->userCon->isBlacklist($mine->id, $user->id); if ($result === 1) { return $this->failure('对方设置了好友权限 暂不能加为好友'); }elseif ($result === 2) { return $this->failure('对方已被您列入黑名单,请先移出黑名单'); } $linking_id = LinkingRequest::where(['user_id'=>$user->id, 'user_linking_id'=>$mine->id])->where('status', 0)->value('id'); if(!$linking_id){ $linking_request = new LinkingRequest; $linking_request->user_id = $user->id; $linking_request->user_linking_id = $mine->id; $linking_request->status = 0; $linking_request->message = $request->message?:'申请加入你的福恋好友'; $linking_request->save(); //添加系统消息 $content = $user->nickname.'您好,'.$mine->nickname.'申请加您为好友!'; $message = $request->message?:$content; $notice = $this->userCon->sendNotice($user->id, $mine->id, 'friend', $content, $message); //todo 推送消息 $result = $this->momentCon->sendAttachMsg($notice->id, 'friend', $content, $mine->id, $user->id, $mine->app_avatar); //订阅消息通知 SendSubTemplateMsg::dispatch($type = 'friend_request', $mine, $user)->onQueue('template_message'); }else{ $notice = Notice::where('user_id', $user->id)->where('send_user_id', $mine->id)->where('type', 'friend')->update(['created_at'=>date('Y-m-d H:i:s')]); } return $this->success('申请好友请求成功'); } catch (\Exception $e) { $this->getError($e); return $this->failure('申请好友请求失败,请稍后再试'); } } public function addFriendByLove($request, $user, $other_user_id) { $send_user = User::find($other_user_id); //添加好友 $linking = $this->userCon->setLinking($other_user_id, $user->id); //添加网易好友 $result = $user->addIMFriend($send_user); if ($result) { $linking->is_im = 1; $linking->save(); } //发送IM消息 if (config('app.env') == 'production') { $im_service = new IMService(env('IM_APP_KEY'), env('IM_APP_SECRET')); $name = $send_user->is_real_approved?$send_user->name:$send_user->nickname; $content = $name."你好,我是福恋脱单小助手小恋, 陪伴你一起找对象,有什么情感困惑可以随时找我!"; $body = ['msg'=>$content]; $result = $im_service->sendMsg($user->id, 0,$other_user_id,$type=0,$body); } } /** * 好友申请 * @param Request $request [description] * @param User $user [description] */ public function addFriendv2(Request $request, User $user) { try { $mine = auth()->user(); // //是否禁言 // $banned = $user->isBanned('friend'); // if ($banned) { // return $this->failure('您已被禁止申请好友,至'.$banned->end_time); // } if ($mine->id == User::LOVEID) { //小恋添加好友 $this->addFriendByLove($request, $mine, $user->id); return $this->success("发送成功"); } //查看是否被禁言 $date = date('Y-m-d H:i:s'); $history = BannedHistory::where('user_id',$mine->id)->where('type','friend')->first(); if (!empty($history)) { if($history->end_time >= $date && $history->start_time <= $date) return $this->failure('你被禁止添加好友至'.$history->end_time); } //今日打招呼次数 $time = date('Y-m-d 00:00:00'); $num = LinkingRequest::where('user_linking_id',$mine->id)->whereBetween('created_at', [$time,now()])->count(); //查看会员身份 $isSuperRank = $mine->isSuperRank(); //查看今日购买次数 $pay_num = CoinLog::where('user_id',$mine->id)->where('type','friend_request')->where('type_id',0)->whereBetween('created_at', [$time,now()])->count(); $num = $pay_num + 3 -$num; if($num<=0&&$isSuperRank==0) return $this->failure('今日打招呼次数达到上限'); //是否是拉黑好友 $result = $this->userCon->isBlacklist($mine->id, $user->id); if ($result === 1) { return $this->failure('对方设置了好友权限 暂不能加为好友'); }elseif ($result === 2) { return $this->failure('对方已被您列入黑名单,请先移出黑名单'); } if ($user->hidden_profile == 'ALLSEX') { return $this->success('ok'); } $linking_id = LinkingRequest::where(['user_id'=>$user->id, 'user_linking_id'=>$mine->id])->where('status', 0)->value('id'); if(!$linking_id){ $linking_request = new LinkingRequest; $linking_request->user_id = $user->id; $linking_request->user_linking_id = $mine->id; $linking_request->status = 0; $linking_request->message = $request->message?:'申请加入你的福恋好友'; $linking_request->save(); //添加系统消息 $content = $mine->nickname.'想认识你,向你打了一个招呼。'; $message = $request->message?:$content; $notice = $this->userCon->sendNotice($user->id, $mine->id, 'friend', $content, $message); //todo 推送消息 $result = $this->momentCon->sendAttachMsg($notice->id, 'friend', $content, $mine->id, $user->id, $mine->app_avatar); //订阅消息通知 SendSubTemplateMsg::dispatch($type = 'friend_request', $mine, $user)->onQueue('template_message'); }else{ return $this->failure('对方已收到打招呼消息,正在处理好友请求~'); } return $this->success('发送成功,等待对方处理好友请求'); } catch (\Exception $e) { $this->getError($e); return $this->failure('申请好友请求失败,请稍后再试'); } } /** * 处理好友请求 * @param Request $request [description] * @param Notice $notice [description] * @return [type] [description] */ public function dealFriendRequest(Request $request, Notice $notice) { try { $send_user = $notice->otherUser; $result = $this->getFriendRequest($request, $send_user, $notice); return $this->success('ok',$result); } catch (\Exception $e) { $this->getError($e); return $this->failure('处理好友请求失败,请稍后再试'); } } public function getFriendRequest($request, $user, $notice=null) { try { $mine = auth()->user(); $link_request = LinkingRequest::where('user_id', $mine->id)->where('user_linking_id', $user->id)->where('status', 0)->first(); if (empty($link_request)) { // throw new \Exception("好友请求记录不存在", 1); return false; } $status = $request->input('status'); if (empty($status)) { throw new \Exception("没有处理状态", 1); } $result = true; \DB::beginTransaction(); if ($status == 1) { $content = $user->nickname.'您好,'.$mine->nickname.'同意了你的好友申请!'; //添加好友 $linking = $this->userCon->setLinking($user->id, $mine->id); //添加网易好友 $result = $mine->addIMFriend($user); if ($result) { $linking->is_im = 1; $linking->save(); } if ($notice) { $result = $this->sendGreetMessage($notice, $user); } }elseif ($status == -1) { $content = $user->nickname.'您好,'.$mine->nickname.'拒绝了你的好友申请!'; } $link_request->status = $status; $link_request->save(); \DB::commit(); return $result; } catch (\Exception $e) { \DB::rollback(); $this->getError($e); return false; } } public function sendGreetMessage($notice, $user) { try { $body = ['msg'=>$notice->message]; //发送IM消息 $im_service = new IMService(env('IM_APP_KEY'), env('IM_APP_SECRET')); $result = $im_service->sendMsg($user->id, 0,auth()->id(),$type=0,$body,$option=array("push"=>false,"roam"=>true,"history"=>true,"sendersync"=>true, "route"=>false)); //创建打招呼记录 $message = ChatMessage::create([ 'user_id'=>$user->id, 'other_user_id'=>auth()->id(), 'content'=>$notice->message, 'content_type'=>'text', 'system_type'=>'greet' ]); return $result; } catch (\Exception $e) { $this->getError($e); return false; } } public function responseFriendRequest(Request $request, User $user) { try { $result = $this->getFriendRequest($request, $user); if (empty($result)) { \DB::rollback(); return $this->failure('处理好友请求失败,请稍后再试'); } return $this->success('ok',$result); } catch (\Exception $e) { $this->getError($e); return $this->failure('处理好友请求失败,请稍后再试'); } } /** * 关注用户 * @param Request $request [description] * @param User $user [description] * @return [type] [description] */ public function followUser(Request $request, $user) { try { $user = User::find($user); if(empty($user)) return $this->failure('用户不存在'); $mine = auth()->user(); if($user->id == $mine->id) return $this->failure('不能关注自己!'); $is_followed = $mine->isFollowing($user); if ($is_followed) { $mine->unfollow($user); }else{ $mine->toggleFollow($user); $notice = Notice::where('user_id', $user->id)->where('send_user_id', $mine->id)->where('type', 'follow')->first(); if ($notice) { $content = '用户'.$mine->nickname.'关注了你喔!'; $data = [ 'content'=>$content, 'updated_at'=>date('Y-m-d H:i:s'), ]; $this->userCon->updateNotice($notice, $data); }else{ $content = '用户'.$mine->nickname.'关注了你喔!'; $this->sendNotice($user->id, $mine->id, 'follow', $content); } //计算年龄差 $mine_age = 0; if($mine->type == 'single' && !empty($mine->profileCourtship)){ $mine_birthday = $mine->profileCourtship->birthday; } if($mine->type == 'marriage' && !empty($mine->profileMarriage)){ $mine_birthday = $mine->profileMarriage->birthday; } if(!empty($mine_birthday)){ $mine_age = CommonUtilsService::getAge($mine_birthday); } $user_age = 0; if($user->type == 'single' && !empty($user->profileCourtship)){ $user_birthday = $user->profileCourtship->birthday; } if($user->type == 'marriage' && !empty($user->profileMarriage)){ $user_birthday = $user->profileMarriage->birthday; } if(!empty($user_birthday)){ $user_age = CommonUtilsService::getAge($user_birthday); } $age_diff = abs($user_age - $mine_age); if($mine->sex != $user->sex && $age_diff > 10){ }else { //todo 推送消息 $result = $this->momentCon->sendAttachMsg($user->id, 'follow', $content, $mine->id, $user->id, $mine->app_avatar); } } $user->updateCacheUser('fans_count'); $mine->updateCacheUser('follow_count'); $is_followed = $mine->isFollowing($user); return $this->success('follow_status', compact('is_followed')); } catch (\Exception $e) { $this->getError($e); return $this->failure('关注失败,请稍后再试'); } } /** * 聊天记录 * @param Request $request [description] * @param User $user [description] * @return [type] [description] */ public function chatMessages(Request $request, User $user) { try { $mine = auth()->user(); $begintime = $request->input('start_time', time() - 24 * 36600); $endtime = $request->input('start_time', time()); $limit = 100; $im_service = new IMService(env('IM_APP_KEY'), env('IM_APP_SECRET')); //注册网易id $user->createIMUser(); $mine->createIMUser(); $mine_messages = $im_service->querySessionMsg($mine->id,$user->id,$begintime,$endtime,$reverse='1'); $user_messages = $im_service->querySessionMsg($user->id,$mine->id,$begintime,$endtime,$reverse='1'); if ($mine_messages['code'] != 200 || $user_messages['code'] != 200) { throw new \Exception("获取网易聊天记录失败", 1); } return $this->success('ok', compact('mine_messages', 'user_messages')); } catch (\Exception $e) { $this->getError($e); return $this->failure('获取聊天记录失败,请稍后再试'); } } public function chatMessagesV2(Request $request, User $user) { try { $mine = auth()->user(); $begintime = $request->input('start_time', time() - 24 * 36600); $endtime = $request->input('start_time', time()); $limit = 100; $im_service = new IMService(env('IM_APP_KEY'), env('IM_APP_SECRET')); //注册网易id $user->createIMUser(); $mine->createIMUser(); $mine_messages = $im_service->querySessionMsg($mine->id,$user->id,$begintime,$endtime,$reverse='1'); $user_messages = $im_service->querySessionMsg($user->id,$mine->id,$begintime,$endtime,$reverse='1'); dd($mine_messages); if ($mine_messages['code'] != 200 || $user_messages['code'] != 200) { throw new \Exception("获取网易聊天记录失败", 1); } return $this->success('ok', compact('mine_messages', 'user_messages')); } catch (\Exception $e) { $this->getError($e); return $this->failure('获取聊天记录失败,请稍后再试'); } } /** * 发送单聊类容 * @param Request $request [description] * @param User $user [description] * @return [type] [description] */ public function sendChatMessageToUserv2(Request $request, $other_user_id) { Log::info('sendChatMessageToUserv2'); try { $user = $request->other_user; \DB::beginTransaction(); $mine = auth()->user(); $date = date('Y-m-d H:i:s'); $history = BannedHistory::where('user_id',$mine->id)->where('type','chat')->first(); if (!empty($history)) { if($history->end_time >= $date && $history->start_time <= $date) return $this->failure('你被禁止聊天至'.$history->end_time); } //双方是否建立联系 $system_type = ['remind','greet','notice']; $my_num = ChatMessage::where('user_id',$mine->id)->where('other_user_id',$user->id)->wherenotin('system_type',$system_type)->count(); $other_num = ChatMessage::where('user_id',$user->id)->where('other_user_id',$mine->id)->wherenotin('system_type',$system_type)->count(); $content = $request->input('content', ''); //我的聯係人 $my_linkman = MessageLinkman::where('user_id', $mine->id)->where('other_user_id', $user->id)->first(); $other_linkman = MessageLinkman::where('user_id', $user->id)->where('other_user_id', $mine->id)->first(); if (empty($other_linkman)) { $other_linkman = MessageLinkman::create([ 'user_id'=>$user->id, 'other_user_id'=>$mine->id, ]); }else{ $other_linkman->updated_at = date('Y-m-d H:i:s'); $other_linkman->save(); } if (empty($my_linkman)) { $my_linkman = MessageLinkman::create([ 'user_id'=>$mine->id, 'other_user_id'=>$user->id, ]); }else{ $my_linkman->updated_at = date('Y-m-d H:i:s'); $my_linkman->save(); } //发送破冰问题 $data = [ 'mine'=>auth()->user(), 'user'=>$user, ]; \App\Jobs\SendFriendQuestion::dispatch($data)->onQueue('love'); \DB::commit(); //如果双方已经通信.第三次 if($my_num<=1&&$other_num>=1){ //发送端已认证,接受端未认证 if($mine->is_real_approved==1&&$user->is_real_approved!=1){ $day = date('d'); $key = 'u'.$mine->id.'f'.$user->id.'chat'.$day; $result = Cache::add($key, true, 60*24); if($result)//是否提示过 return $this->success('消息发送成功',['status'=>1]); return $this->success('消息发送成功',['status'=>0]); } return $this->success('消息发送成功',['status'=>0]); }elseif ($my_num>=2) { //如果发送方未认证 if($mine->is_real_approved!=1){ //如果在审核中 if($mine->is_real_approved==2) return $this->success('消息发送成功',['status'=>3]); return $this->success('消息发送成功',['status'=>2]); } //如果已邀请对方认证 $remind = ChatMessage::where('user_id',$mine->id)->where('other_user_id',$user->id)->where('system_type','remind')->exists(); if($remind&&$user->is_real_approved!=1) return $this->success('消息发送成功',['status'=>5]); //如果接受方未认证 if($user->is_real_approved!=1) return $this->success('消息发送成功',['status'=>4]); return $this->success('消息发送成功',['status'=>0]); //如果双方已经通信.第一次 }else{ return $this->success('消息发送成功',['status'=>0]); } } catch (\Exception $e) { \DB::rollback(); $this->getError($e); return $this->failure('发送聊天信息失败,请稍后再试'); } } /** * 发送单聊类容 * @param Request $request [description] * @param User $user [description] * @return [type] [description] */ public function sendChatMessageToUser(Request $request, User $user) { Log::info('sendChatMessageToUser'); try { \DB::beginTransaction(); $mine = auth()->user(); $date = date('Y-m-d H:i:s'); $history = BannedHistory::where('user_id',$mine->id)->where('type','chat')->first(); if (!empty($history)) { if($history->end_time >= $date && $history->start_time <= $date) return $this->failure('你被禁止聊天至'.$history->end_time); } $content = $request->input('content', ''); //我的聯係人 $my_linkman = MessageLinkman::where('user_id', $mine->id)->where('other_user_id', $user->id)->first(); $other_linkman = MessageLinkman::where('user_id', $user->id)->where('other_user_id', $mine->id)->first(); if (empty($other_linkman)) { $other_linkman = MessageLinkman::create([ 'user_id'=>$user->id, 'other_user_id'=>$mine->id, ]); }else{ $other_linkman->updated_at = date('Y-m-d H:i:s'); $other_linkman->save(); } if (empty($my_linkman)) { $my_linkman = MessageLinkman::create([ 'user_id'=>$mine->id, 'other_user_id'=>$user->id, ]); }else{ $my_linkman->updated_at = date('Y-m-d H:i:s'); $my_linkman->save(); } $content_type = $request->input('content_type', 'TEXT'); //创建聊天记录 $message = ChatMessage::create([ 'user_id'=>$mine->id, 'other_user_id'=>$user->id, 'content'=>$content, 'content_type'=>$content_type, ]); //发送破冰问题 $data = [ 'mine'=>auth()->user(), 'user'=>$user, ]; \App\Jobs\SendFriendQuestion::dispatch($data)->onQueue('love'); \DB::commit(); return $this->success('消息发送成功'); } catch (\Exception $e) { \DB::rollback(); $this->getError($e); return $this->failure('发送聊天信息失败,请稍后再试'); } } //提醒好友认证 public function remindFriend(Request $request) { $mine = auth()->user(); $other_user_id = $request->user_id; $user = User::where('id',$other_user_id)->first(); if(!$user)return $this->failure('好友信息获取失败~'); try { //网易聊天消息发送 $im_service = new IMService(env('IM_APP_KEY'), env('IM_APP_SECRET')); $content = '你还没有真人认证,赶快一键认证来与我畅聊吧~'; $body = ['msg'=>$content]; $ext = ['type'=>'remind']; //friend_question破冰问题,is_used 自己是否设置破冰问题 $result = $im_service->sendMsg($mine->id,$ope=0,$user->id,$type=0,$body,$option=array("push"=>false,"roam"=>true,"history"=>true,"sendersync"=>true, "route"=>false),$pushcontent='',$ext,1004); if ($result['code'] != 200) { throw new \Exception("网易发送提醒信息失败-".$result['desc'], 1); } //创建聊天记录 ChatMessage::create([ 'user_id'=>$mine->id, 'other_user_id'=>$user->id, 'type'=>'CHAT', 'content'=>$content, 'status'=>1, 'system_type'=>'remind', ]); //添加系统消息 $content = $mine->nickname.'对你很感兴趣,提醒你真人认证与Ta继续畅聊,点击真人认证》》'; $message = $request->message?:$content; // $notice = $this->userCon->sendNotice($user->id, $mine->id, 'friend', $content, $message); //todo 推送消息 // $this->momentCon->sendAttachMsg($notice->id, 'friend', $content, $mine->id, $user->id, $mine->app_avatar); return $this->success('ok'); } catch (\Exception $e) { //throw $th; return $this->failure('提醒失败,请稍后再试~'); } } public function greetLog(Request $request) { $logs = \DB::table('greet_logs')->get()->toArray(); $count = count($logs); if (empty($count)) return $this->success('ok'); $index = random_int(0, $count-1); return $this->success('ok',$logs[$index]); } /** * 提现对方上传生活照 * @param Request $request [description] * @param [type] $user_id [description] * @return [type] [description] */ public function remindProfilePhoto(Request $request, $user_id) { try { $content = '【'.auth()->user()->nickname.'】对你的资料非常感兴趣,希望你能完善交友卡片'; $type = 'remind_profile_photo'; $count = Notice::where('user_id', $user_id)->where('send_user_id', auth()->id())->where('type', $type)->count(); if ($count) return $this->failure('已提醒对方'); //生成提醒记录 $notice = $this->userCon->sendNotice($user_id, auth()->id(), $type, $content,$content); //发送提醒推送消息 $result = $this->momentCon->sendAttachMsg($notice->id, $type, $content, auth()->id(), $user_id, auth()->user()->app_avatar); return $this->success('ok'); } catch (\Exception $e) { $this->getError($e); return $this->failure('提醒失败,请稍后再试'); } } /** * 不喜欢用户 * @param Request $request [description] * @param [type] $user_id [description] * @return [type] [description] */ public function dislikeUser(Request $request, $user_id) { try { $log = auth()->user()->dislikeLogs()->firstOrCreate(['type_id'=>$user_id, 'type'=>'user']); return $this->success('ok', $log); } catch (\Exception $e) { $this->getError($e); return $this->failure('操作失败,请稍后再试'); } } /** * 赠送礼物给用户 * @param Request $request [description] * @param [type] $user_id [description] * @param [type] $gift_id [description] * @return [type] [description] */ public function sendUserGift(Request $request, $user_id, $gift_id) { try { $user = User::find($user_id); $gift = InteractLiveGift::find($gift_id); $result = $this->liveCon->sendLiveGift($user_id, $gift_id, 'user'); if (empty($result)) throw new \Exception("赠送礼物失败", 1); if (is_array($result) && $result['code']) return $this->failure($result['msg']); $content = auth()->user()->nickname."赠送了「".$gift->name."」给你"; //发送系统通知 $this->userCon->sendNotice($user_id, auth()->id(), 'gift', $content, $content, $gift_id); //发送推送消息和短信消息 $result = $this->momentCon->sendAttachMsg(auth()->id(), 'gift', $content, auth()->id(), $user_id, auth()->user()->avatar); //短信 $this->sendGiftSms($user, $gift); return $this->success('ok'); } catch (\Exception $e) { $this->getError($e); return $this->failure('赠送礼物失败,请稍后再试'); } } public function sendGiftSms($user,$gift) { try { $data = [ 'name'=> $user->nickname, 'other_name'=> auth()->user()->nickname, 'gift'=>$gift->name, 'user_id'=>auth()->id(), ]; $m = Message::create([ 'phone' => $user->mobile, 'message' => '', 'confirmed' => 1, 'code' => '活动', 'ip' => request() ? request()->ip() : '127.0.0.1', ]); $message_url = \CommonUtilsService::clickUrl(env('APP_URL')."/h5/#/appUserDetails/".$data['user_id'],$m->id); $result = \CommonUtilsService::shortUrl($message_url); $short_url = $result['code'] == 0?$result['url']:$url; $message = "Hi-".$data['name']."!".$data['other_name']."给你送了一个「".$data['gift']."」,可点击".$short_url." 查看Ta的信息"; $m->message = $message; Messenger::sendSMS($user->mobile, $message); $m->message = $message; $m->save(); return true; } catch (\Exception $e) { $this->getError($e); return false; } } /** 记录用户列表浏览 */ public function usersBrowse(Request $request) { try { $result = $this->userCon->usersBrowse(); if (empty($result)) throw new \Exception("记录用户浏览失败"); } catch (\Exception $e) { $this->getError($e); } return $this->success('ok'); } }