love_php/app/Http/Controllers/App/UserController.php
2026-04-02 09:20:51 +08:00

2956 lines
129 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
namespace App\Http\Controllers\App;
use App\Models\AreaUser;
use App\Models\CommunityActivity;
use App\Models\Rbac\RoleUser;
use App\Models\AppLog;
use App\Models\Server\MerchantUser;
use App\Models\Server\TouristOrder;
use App\Models\UserHiddenHistory;
use App\Models\UserMessageSetting;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\Http\Response\ResponseJson;
use Illuminate\Support\Facades\Cache;
use Carbon\Carbon;
use App\Contracts\UserContract;
use App\Contracts\OrderContract;
use App\Contracts\SmsContract;
use App\Contracts\MomentContract;
use App\Services\UserService;
use App\Models\ProfileChangeHistory;
use App\Jobs\AdBackActivation;
use App\Jobs\AdQuickBackActivation;
use App\Jobs\FaceMatchJob;
use App\Jobs\SendIMPushMsg;
use App\Models\LabelHistory;
use App\Models\SystemBlacklist;
use App\Models\User;
use App\Models\Linking;
use App\Models\ProfileCourtship;
use App\Models\UserPreview;
use App\Models\Activity;
use App\Models\Order;
use App\Utils\Messenger;
use App\Models\CommunityMoment;
use App\Models\ApproveHistory;
use App\Models\FeedbackHistory;
use App\Models\Rank;
use App\Models\SubRank;
use App\Models\SingleService;
use App\Models\InterestLabel;
use App\Models\LinkingRequest;
use App\Models\TempMember;
use App\Models\Address;
use App\Models\ActivityClass;
use App\Models\Admin;
use App\Models\AdminLog;
use App\Models\App\Team;
use App\Models\App\UserTeam;
use App\Models\ArticleHistory;
use App\Models\Live\Asset;
use App\Models\Live\AssetLog;
use App\Models\RankHistory;
use App\Models\Live\Viewer;
use App\Models\ProfilePhoto;
use App\Services\IMService;
use App\Models\DeviceInfo;
use App\Models\BackActivation;
use App\Models\ChatMessage;
use App\Models\QuickBackActivation;
use App\Models\CoinWithdrawLog;
use App\Models\ShareTrace;
use App\Models\FriendQuestion;
use App\Models\Wechat;
use App\Models\Message;
use App\Models\ErrorPhoto;
use App\Models\LinkingBlacklist;
use App\Models\CoinLog;
use App\Models\Notice;
use App\Models\CloseProfileHistory;
use App\Models\CommunityStar;
use App\Models\ComplaintHistory;
use App\Models\Dynamic;
use App\Models\Followable;
use App\Models\FormId;
use App\Models\FriendQuestionAnswer;
use App\Models\GoodMatch;
use App\Models\MatchingRate;
use App\Models\Matchmaker;
use App\Models\MatchmakerClient;
use App\Models\MessageLinkman;
use App\Models\Moment;
use App\Models\ProfileMarriage;
use App\Models\UserGroup;
use App\Models\UserInfo;
use App\Models\UserPreviewHistory;
use App\Models\WrongInfoHistories;
use Illuminate\Support\Facades\DB;
class UserController extends Controller
{
use ResponseJson;
protected $userCon;
protected $orderCon;
public function __construct(UserContract $userCon, OrderContract $orderCon, MomentContract $momentService)
{
$this->userCon = $userCon;
$this->orderCon = $orderCon;
$this->momentService = $momentService;
}
/**
* app版本
* @param Request $request [description]
* @return [type] [description]
*/
public function appVersion(Request $request)
{
$ios_log = AppLog::where('type', 0)->orderBy('id', 'desc')->first();
$and_log = AppLog::where('type', 1)->orderBy('id', 'desc')->first();
//是否强制更新
$forced_updating = 0;
if(!empty($ios_log)){
if($ios_log->is_forced && $ios_log->start_time < date('Y-m-d H:i:s')){
$forced_updating = 1;
}
}
$and_forced_updating = 0;
if(!empty($and_log)){
if ($and_log->is_forced && $and_log->start_time < date('Y-m-d H:i:s')) {
$and_forced_updating = 1;
}
}
//是否检查更新
$check_updating = 0;
if(!empty($ios_log)){
if($ios_log->is_check_forced && $ios_log->start_time < date('Y-m-d H:i:s')){
$check_updating = 1;
}
}
$and_check_updating = 0;
if(!empty($and_log)){
if ($and_log->is_check_forced && $and_log->start_time < date('Y-m-d H:i:s')) {
$and_check_updating = 1;
}
}
$data = [
'api_version'=>'1.0.0',//api接口版本
'app_version' => !empty($ios_log->next_version) ? $ios_log->next_version :'1.3.0',//iosapp版本
'and_app_version' => !empty($and_log->next_version) ? $and_log->next_version :'1.3.0',//安卓app版本
'and_app_code'=>!empty($and_log->and_app_code) ? $and_log->and_app_code :15, //安卓
'forced_updating'=>$forced_updating, //ios是否强制更新
'and_forced_updating'=>$and_forced_updating,//安卓是否强制更新
'check_updating'=>$check_updating, //ios是否检查更新
'and_check_updating'=>$and_check_updating,//安卓是否检查更新
'content'=> !empty($ios_log->point) ? $ios_log->point : "更新内容\n1.优化动态\n2.优化登录",//ios更新内容
'and_content'=> !empty($and_log->point) ? $and_log->point : "更新内容\n1.优化动态\n2.优化资料编辑",//安卓更新内容
'and_download_url' => !empty($and_log->apk) ? $and_log->apk : 'https://image.ufutx.com/apk/FullLink.apk',
];
return $this->success('ok', $data);
}
public function servicerIds(Request $request)
{
$servicer_ids = UserInfo::where('is_service_client', 1)->pluck('user_id')->toArray();
return $this->success('ok', compact('servicer_ids'));
}
public function getPhoto(Request $request)
{
if(!$request->has('user_id'))
return $this->failure('请求参数缺失。');
$user_id = $request->user_id;
$user = new User();
$photo = $user->userAvatar($user_id);
return $this->success('ok', compact('photo'));
}
public function androidDownloadUrl(Request $request)
{
$download_url = 'https://image.ufutx.com/apk/FullLink.apk';
return $this->success('ok', compact('download_url'));
}
/**P
* 个人中心
* @param Request $request [description]
* @return [type] [description]
*/
public function personalCenter(Request $request)
{
try {
$user_id = auth()->id();
$user = User::where('id', $user_id)->select('id','name', 'nickname', 'photo', 'app_avatar','industry','industry_sub', 'type', 'is_approved','is_real_approved', 'is_educate_approved','approve_time', 'hidden', 'sex', 'belief', 'is_photo_audited', 'live_match_maker','rank_id', 'hidden')->first();
$user->is_approved = $user->is_approved == 0?((ApproveHistory::where('user_id', $user_id)->where('type', 'name')->where('status', 0)->exists())?2:0):1;
$deadline = RankHistory::where('user_id', $user_id)->where('rank_id', $user->rank_id)->orderBy('deadline', 'desc')->value('deadline');
//会员到期时间
$user->deadline = $deadline;
//是否是超级会员
$user->isSuperRank = $user->isSuperRank();
//好友数
$user->friendCount = $user->friendCount();
//粉丝数
$user->fans_count = $user->followers()->count()?:0;
//关注数
$user->follow_count = $user->followings()->count()?:0;
//访客数
// $user->preview_count = $user->userPreview()->whereNotNull('preview_time')->whereHas('previewUser', function($sql){
// })->count()?:0;
$result = UserPreviewHistory::whereHas('previewUser', function($sql) use($user){
if ($user->type == 'single') {
$sql->where('sex', '<>', $user->sex)->where('type', 'single')->where('hidden_profile', '<>', 'ALLSEX');
}
})->where('user_id', $user->id)->where('is_hidden', 0)->groupBy('preview_user_id')
->get()->toArray();
$user->preview_count = count($result)?:0;
//是否完善资料
$profile_data = User::APPCOMPLETEINFO;
$result = $this->userCon->profileIntegrity($user->profileCourtship,$user,explode(',', $profile_data));
$bili = $result['count'] / $result['total_count'];
$user->isCompleteInfo = number_format($bili,2) == 1?1:0;
//是否绑定微信
$user->bind_wechat = $user->wechat?($user->wechat->app_openid?1:0):0;
//头像
$user->photo = $user->userAvatar();
$introductionVerifyResultCode__key = $this->userCon->KYE_IVRC . $user->id;
$ideal_mateVerifyResultCode_key = $this->userCon->KYE_IMVRC . $user->id;
$interest_hobbyVerifyResultCode_key = $this->userCon->KYE_IMPHO . $user->id;
//个人介绍
$user->introduction_verifyResultCode = $this->userCon->geTextVerifyCode($introductionVerifyResultCode__key,$user->profileCourtship->introduction);
//择偶标准
$user->ideal_mate_verifyResultCode = $this->userCon->geTextVerifyCode($ideal_mateVerifyResultCode_key,$user->profileCourtship->ideal_mate);
//兴趣爱好
$user->interest_hobby_verifyResultCode = $this->userCon->geTextVerifyCode($interest_hobbyVerifyResultCode_key,$user->profileCourtship->interest_hobby);
//是否被标记
$user->tag_status = WrongInfoHistories::where('user_id',$user->id)->where('type','tag')->where('status',1)->count();
unset($user->wechat, $user->profileCourtship);
return $this->success('ok', $user);
} catch (\Exception $e) {
$this->getError($e);
return $this->failure('获取个人中心信息失败,请稍后再试');
}
}
/**
* 关注列表
* @param Request $request [description]
* @return [type] [description]
*/
public function followings(Request $request)
{
try {
$user = auth()->user();
$followings = $user->followings()->orderBy('followables.created_at', 'desc')->paginate();
foreach ($followings as $following) {
// dd($following);
$rd_user_key = User::cacheUserKey($following->id);
if (Cache::has($rd_user_key)) {
$rd_user = Cache::get($rd_user_key);
}else{
$following->cacheUser();
$rd_user = Cache::get($rd_user_key);
}
$birthday = $rd_user->profileCourtship?$rd_user->profileCourtship->birthday:null;
$following->age = \CommonUtilsService::getAge($birthday);
$following->isSuperRank = $rd_user->is_super_rank;
$following->photo = $rd_user->userAvatar();
unset($following->uid, $following->is_new, $following->name, $following->face_score, $following->card_num, $following->circle_avatar, $following->mobile, $following->email, $following->location_longitude, $following->location_latitude, $following->temp_member, $following->industry, $following->industry_sub,$following->from_user_id,$following->from_openid,$following->from_official_openid, $following->from_platform,$following->friend_count,$following->my_qrcode,$following->my_qrcode_rect,$following->my_share_rect,$following->my_share,$following->home_share,$following->is_admin,$following->approve_time,$following->is_real_approved,$following->approve_date,$following->hidden,$following->is_audited,$following->is_photo_audited,$following->system_info,$following->identification_photos,$following->scene,$following->last_visit,$following->tag_num,$following->negative_score,$following->info_complete_score,$following->is_update_score,$following->is_subscribe,$following->mark,$following->created_at,$following->updated_at,$following->deleted_at);
$following->created_at = $following->pivot->created_at;
unset($following->pivot);
}
return $this->success('ok', $followings);
} catch (\Exception $e) {
$this->getError($e);
return $this->failure('获取关注列表失败,请稍后再试');
}
}
/**
* 好友列表
* @param Request $request [description]
* @return [type] [description]
*/
public function friends(Request $request)
{
try {
$user = auth()->user();
$linkings = Linking::with('user:id,nickname,photo,app_avatar,rank_id,is_approved,sex', 'userLink:id,nickname,photo,app_avatar,rank_id,is_approved,sex')->where(function($sql){
$sql->where('user_id', auth()->id())->orWhere('user_linking_id', auth()->id());
})->whereHas('user', function($sql){
// $sql->where('hidden_profile', 'NONE')/*->where('type', 'single')*/;
})->whereHas('userLink', function($sql){
// $sql->where('hidden_profile', 'NONE')/*->where('type', 'single')*/;
});
$keyword = $request->keyword;
if($keyword || ($keyword == 0 && $keyword != null) ){
$linkings = $linkings->whereHas('user', function($query) use ($keyword,$user) {
$query->where('nickname', 'like', '%'.$keyword.'%');
$query->orWhere('id',$user->id);
});
$linkings = $linkings->whereHas('userLink', function($query) use ($keyword,$user) {
$query->where('nickname', 'like', '%'.$keyword.'%');
$query->orWhere('id',$user->id);
});
}
$linkings = $linkings->orderBy('created_at', 'desc')->paginate();
foreach ($linkings as $linking) {
if ($linking->user_id != auth()->id()) {
$linking->nickname = $linking->user->nickname;
$linking->id = $linking->user->id;
$linking->is_approved = $linking->user->is_approved;
$linking->isSuperRank = $linking->user->isSuperRank()?1:0;
$linking->sex = $linking->user->sex;
$linking->photo = $linking->user->userAvatar();
}else{
$linking->nickname = $linking->userLink->nickname;
$linking->id = $linking->userLink->id;
$linking->is_approved = $linking->userLink->is_approved;
$linking->isSuperRank = $linking->userLink->isSuperRank()?1:0;
$linking->sex = $linking->userLink->sex;
$linking->photo = $linking->userLink->userAvatar();
}
$profile_courtship = ProfileCourtship::where('user_id', $linking->id)->select('user_id', 'birthday', 'city', 'stature')->first();
if ($profile_courtship) {
$linking->age = \CommonUtilsService::getAge($profile_courtship->birthday);
}
$linking->profile_courtship = $profile_courtship;
unset($linking->user, $linking->userLink, $linking->user_linking_id,$linking->user_id);
}
return $this->success('ok', $linkings);
} catch (\Exception $e) {
$this->getError($e);
return $this->failure('获取好友列表信息失败,请稍后再试');
}
}
/**获取群聊和好友的列表 */
public function myGroupFriendsChat(Request $request){
$userinfo = $this->getMyUserinfo();
if(!$userinfo){
return $this->fail('请登录后访问',2);
}
$keyword = $request->keyword;
$type = $request->input('type');
$groupChatList = $this->userCon->getMyGroupChat($userinfo,$keyword,15);
$friendChatList = $this->userCon->getMyFriends($userinfo,$keyword,$type,15);
return $this->success('ok', ['groupChatList'=>$groupChatList,'friendChatList'=>$friendChatList]);
}
/**
* 粉丝列表
* @param Request $request [description]
* @return [type] [description]
*/
public function fans(Request $request)
{
try {
$user = auth()->user();
$followings = $user->followers()->orderBY('followables.created_at', 'desc')->paginate();
foreach ($followings as $following) {
$rd_user_key = User::cacheUserKey($following->id);
if (Cache::has($rd_user_key)) {
$rd_user = Cache::get($rd_user_key);
}else{
$following->cacheUser();
$rd_user = Cache::get($rd_user_key);
}
$birthday = $rd_user->profileCourtship?$rd_user->profileCourtship->birthday:null;
$following->city = $rd_user->profileCourtship?$rd_user->profileCourtship->city:null;
$following->age = \CommonUtilsService::getAge($birthday);
$following->birthday = $birthday;
$following->isSuperRank = $rd_user->is_super_rank;
$following->photo = $rd_user->userAvatar();
Notice::where('type','follow')->where('user_id',$user->id)->where('status',0)->update(['status'=>1]);
unset($following->uid, $following->is_new, $following->name, $following->face_score, $following->card_num, $following->circle_avatar, $following->mobile, $following->email, $following->location_longitude, $following->location_latitude, $following->temp_member, $following->industry, $following->industry_sub,$following->from_user_id,$following->from_openid,$following->from_official_openid, $following->from_platform,$following->friend_count,$following->my_qrcode,$following->my_qrcode_rect,$following->my_share_rect,$following->my_share,$following->home_share,$following->is_admin,$following->approve_time,$following->is_real_approved,$following->approve_date,$following->hidden,$following->is_audited,$following->is_photo_audited,$following->system_info,$following->identification_photos,$following->scene,$following->last_visit,$following->tag_num,$following->negative_score,$following->info_complete_score,$following->is_update_score,$following->is_subscribe,$following->mark,$following->created_at,$following->updated_at,$following->deleted_at);
$following->created_at = $following->pivot->created_at;
unset($following->pivot);
}
notice::where('user_id',$user->id)->where('type','follow')->update(['status'=>1]);
return $this->success('ok', $followings);
} catch (\Exception $e) {
$this->getError($e);
return $this->failure('获取关注列表失败,请稍后再试');
}
}
/**
* 访客记录
* @param Request $request [description]
* @return [type] [description]
*/
public function previews(Request $request)
{
$user = auth()->user();
$linkings = UserPreviewHistory::with('previewUser:id,nickname,name,photo,circle_avatar,app_avatar,sex,type,hidden_profile')
->with('profileCourtship:province,city,birthday,user_id,stature')
->with('profileMarriage:province,city,birthday,user_id')
->whereHas('previewUser', function($sql) use($user){
if ($user->type == 'single') {
$sql->where('sex', '<>', $user->sex)->where('type', 'single');
}
})->where('user_id', $user->id)->where('is_hidden', 0)
->select(DB::raw('max(id) as some_id, id, user_id, preview_user_id,is_hidden, max(created_at) as created_at'))
->orderBY('some_id', 'desc')
->groupBy('preview_user_id');
$linkings = $linkings->whereHas('previewUser', function ($sql) {
$sql->where('hidden_profile', '!=','ALLSEX');
});
$keyword = $request->input('keyword');
if ($keyword) {
$keyword = trim($keyword);
$linkings = $linkings->whereHas('user', function ($sql) use ($keyword) {
$sql->where('name', 'like', '%' . $keyword . '%');
});
}
$linkings = $linkings->paginate();
foreach ($linkings as $linking) {
$linking->nickname = $linking->previewUser->nickname;
$linking->id = $linking->previewUser->id;
$linking->is_approved = $linking->previewUser->is_approved;
$linking->isSuperRank = $linking->previewUser->isSuperRank()?1:0;
$linking->sex = $linking->previewUser->sex;
$profile_courtship = $linking->previewUser->profileCourtship;
$linking->age = \CommonUtilsService::getAge($profile_courtship?$profile_courtship->birthday:null);
$linking->profile_courtship = $profile_courtship;
$linking->photo = $linking->previewUser->userAvatar();
unset($linking->previewUser,$linking->user_id,$linking->previewe_user_id,$linking->status);
}
UserPreview::where('user_id', $user->id)->where('status', 0)->update(['status' => 1]);
return $this->success('ok', $linkings);
}
//刪除访客记录
public function deletePreviewHistory(Request $request){
try {
$mine = auth()->user();
$user_id = $request->user_id;
UserPreview::where('preview_user_id',$user_id)->where('user_id',$mine->id)->delete();
return $this->success('ok');
} catch (\Exception $e) {
$this->getError($e);
return $this->failure('操作失败,请稍后再试');
}
}
/**
* 搜索相关用户 好友、关注、粉丝、访客
* @param Request $request [description]
* @return [type] [description]
*/
public function searchFriends(Request $request)
{
$user = auth()->user();
$keyword = $request->input('keyword');
//好友搜索
list($friends, $friend_count) = $this->getSearchFriends($user, $keyword, 10);
//关注
list($followings, $following_count) = $this->getSearchFollowings($user, $keyword, 10);
//粉丝
list($followers, $follower_count) = $this->getSearchFollowers($user, $keyword, 10);
//访客
list($previews, $preview_count) = $this->getSearchPreviews($user, $keyword, 10);
$num_arr = [
'friend_count'=>$friend_count,
'following_count' => $following_count,
'follower_count' => $follower_count,
'preview_count' => $preview_count,
];
return $this->success('ok', compact('friends', 'followings', 'followers', 'previews', 'num_arr'));
}
public function getSearchFriends($user, $keyword, $limit=0)
{
$ids = Linking::where('user_id', $user->id)->pluck('user_linking_id');
$other_ids = Linking::where('user_linking_id', $user->id)->pluck('user_id');
$friends_query = User::where(function($sql) use($ids, $other_ids){
$sql->whereIn('id', $ids)->orWhereIn('id', $other_ids);
})/*->where('type', 'single')*/->where('hidden_profile', 'NONE');
if($keyword || ($keyword == 0 && $keyword != null) ){
$friends_query = $friends_query->where('nickname', 'like', '%'.$keyword.'%');
}
$friends = $friends_query->select('id', 'photo', 'app_avatar', 'nickname')->limit(3)->get();
foreach ($friends as $friend) {
$friend->photo = $friend->userAvatar();
}
$friend_count = $friends_query->count()?:0;
return [$friends, $friend_count];
}
public function getSearchFollowings($user, $keyword, $limit=0)
{
$followings_query = $user->followings()/*->where('type', 'single')*/->where('hidden_profile', 'NONE');
if($keyword){
$followings_query = $followings_query->where('nickname', 'like', '%'.$keyword.'%');;
}
if ($limit) {
$followings = $followings_query->limit($limit)->get();
$following_count = $followings_query->count()?:0;
}else{
$followings = $followings_query->paginate();
$following_count = 0;
}
foreach ($followings as $following) {
unset($following->uid, $following->is_new, $following->name, $following->face_score, $following->card_num, $following->circle_avatar, $following->mobile, $following->email, $following->location_longitude, $following->location_latitude, $following->temp_member, $following->industry, $following->industry_sub,$following->from_user_id,$following->from_openid,$following->from_official_openid, $following->from_platform,$following->friend_count,$following->my_qrcode,$following->my_qrcode_rect,$following->my_share_rect,$following->my_share,$following->home_share,$following->is_admin,$following->approve_time,$following->is_real_approved,$following->approve_date,$following->hidden,$following->is_audited,$following->is_photo_audited,$following->system_info,$following->identification_photos,$following->scene,$following->last_visit,$following->tag_num,$following->negative_score,$following->info_complete_score,$following->is_update_score,$following->is_subscribe,$following->mark,$following->created_at,$following->updated_at,$following->deleted_at,$following->sex,$following->age,$following->rank_id,$following->type,$following->is_approved,$following->hidden_profile,$following->belief);
unset($following->pivot);
}
return [$followings, $following_count];
}
public function getSearchFollowers($user, $keyword, $limit=0)
{
$followers_query = $user->followers()/*->where('type', 'single')*/->where('hidden_profile', 'NONE');
if($keyword){
$followers_query = $followers_query->where('nickname', 'like', '%'.$keyword.'%');
}
if ($limit) {
$followings = $followers_query->limit($limit)->get();
$follower_count = $followers_query->count()?:0;
}else{
$followings = $followers_query->paginate();
$follower_count = 0;
}
foreach ($followings as $following) {
unset($following->uid, $following->is_new, $following->name, $following->face_score, $following->card_num, $following->circle_avatar, $following->mobile, $following->email, $following->location_longitude, $following->location_latitude, $following->temp_member, $following->industry, $following->industry_sub,$following->from_user_id,$following->from_openid,$following->from_official_openid, $following->from_platform,$following->friend_count,$following->my_qrcode,$following->my_qrcode_rect,$following->my_share_rect,$following->my_share,$following->home_share,$following->is_admin,$following->approve_time,$following->is_real_approved,$following->approve_date,$following->hidden,$following->is_audited,$following->is_photo_audited,$following->system_info,$following->identification_photos,$following->scene,$following->last_visit,$following->tag_num,$following->negative_score,$following->info_complete_score,$following->is_update_score,$following->is_subscribe,$following->mark,$following->created_at,$following->updated_at,$following->deleted_at,$following->sex,$following->age,$following->rank_id,$following->type,$following->is_approved,$following->hidden_profile,$following->belief);
unset($following->pivot);
}
return [$followings, $follower_count];
}
public function getSearchPreviews($user, $keyword, $limit=0)
{
$previews_query = $user->userPreview()->with('previewUser:id,nickname,photo,app_avatar')->whereHas('previewUser', function($sql) use($keyword) {
$sql = $sql->where('hidden_profile', 'NONE')/*->where('type', 'single')*/->where('nickname', 'like', '%'.$keyword.'%');
if($keyword){
$sql = $sql->where('nickname', 'like', '%'.$keyword.'%');
}
});
if ($limit) {
//访客记录
$previews = $previews_query->select('id', 'user_id', 'preview_user_id')->limit($limit)->get();
$preview_count = $previews_query->count()?:0;
}else{
$previews = $previews_query->select('id', 'user_id', 'preview_user_id')->paginate();
$preview_count = 0;
}
foreach ($previews as $preview) {
$preview->id = $preview->preview_user_id;
$preview->nickname = $preview->previewUser->nickname;
$preview->photo = $preview->previewUser->userAvatar();
unset($preview->previewUser, $preview->user_id, $preview->preview_user_id);
}
return [$previews, $preview_count];
}
/**
* 认证
* @param Request $request [description]
* @return [type] [description]
*/
public function approve(Request $request)
{
\DB::beginTransaction();
try {
$user = auth()->user();
$blacklist = [42805, 42802, 42801];
if (in_array($user->id, $blacklist)) {
return $this->failure('请进入人工认证,上传手持身份证照!');
}
$name = $request->input('name');
if (empty($name)) {
return $this->failure('请输入真实姓名');
}
$card_num = $request->input('card_num');
if (empty($card_num)) {
return $this->failure('请输入身份证号');
}
if (empty($user->approve_time)) {
return $this->failure('无自动认证资格,请通过人工认证');
}
//是否身份已经验证过
$history = User::where('id', '<>', $user->id)->where('card_num', $card_num)->exists();
if ($history) {
return $this->failure('此身份证已经实名验证过,请使用真实信息!');
}
if ($user->name != $name) {
$user->name = $name;
}
if ($user->card_num != $card_num) {
$user->card_num = $card_num;
}
$user->save();
$result = \AliyunService::aliCheckInfoV2($user->id, $name, $card_num);
$result = json_decode($result);
if (empty($result)) {
return $this->failure('服务错误,请重试');
}
$user->decrement('approve_time', 1);
if ($result->code == 200) {
$bizCode = $result->value->bizCode;
if ($bizCode == 0) {
//添加身份证号
if ($user->card_num && $user->is_approved == 1) {
return $this->failure('已认证');
}
//认证状态
$user->is_approved = 1;
//认证时间
$user->approve_date = date('Y-m-d H:i:s');
$user->save();
//增加认证记录
$history = ApproveHistory::where('user_id', $user->id)->first();
if (empty($history)) {
ApproveHistory::create([
'user_id'=>$user->id,
'type'=>'name',
'status'=>1,
'ways' => 1,
'from_platform'=>$request->from_platform,
]);
}else{
$history->status = 1;
$history->save();
}
//更新出生年月日
$user->cardBirthdayToProfile('app');
\DB::commit();
return $this->success('ok');
}else{
\DB::rollback();
return $this->failure($result->message);
}
}else {
\DB::commit();
$message = explode(':', $result->message);
if (is_array($message) && count($message)) {
if ($message[1] == '参数非法') {
$error = '信息不匹配';
return $this->failure($error);
}elseif ($message[1] != '参数非法') {
return $this->failure($message[1]);
}
}
return $this->failure($result->message);
}
} catch (\Exception $e) {
\DB::rollback();
$this->getError($e);
return $this->failure('认证失败,请稍后再试');
}
}
/**
* 活体检测
* @param Request $request [description]
* @return [type] [description]
*/
public function realApprove(Request $request)
{
try {
//检测参数
$result = $this->checkRealApproveParam();
if (empty($result)) throw new \Exception("参数错误", 1);
if (is_array($result) && $result['code']) return $this->failure($result['msg'], ['error_type'=>$result['error_type']]);
//活体检测
$im_service = new IMService();
$result = $im_service->checkBioassay($request->card_num, $request->name, $request->token);
if (empty($result)) throw new \Exception("活体检测失败", 1);
if ($result->code != 200) throw new \Exception($result->msg, $result->code);
//记录认证信息
if ($result->result) {
$this->userCon->addLiveperson($result->result);
}
if ($result->result && $result->result->reasonType != 1) return $this->failure($this->getBioassay($result), ['error_type'=>1]);
\DB::beginTransaction();
//更新实人认证信息
$body_log = auth()->user()->updateApproveInfo('body', 1);
//更新实名认证信息
$name_log = auth()->user()->updateApproveInfo('name', 1);
//同步生日
auth()->user()->cardBirthdayToProfile('app');
//是否已赠送
$log = auth()->user()->coinLogs()->where(['type'=>'RECSYSTEM', 'remark'=>'真人认证'])->first();
if (empty($log)) {
//赠送福币 +10 不可提现
auth()->user()->updateCoinInfo('add', 10, 'other');
auth()->user()->addCoinLog("RECSYSTEM", 0, 10, '真人认证');
$message = "您的真人认证已通过后台审核系统赠送您10个福币作为奖励请注意查收";
$body = ['msg'=>$message];
$im_service = new IMService(env('IM_APP_KEY'), env('IM_APP_SECRET'));
$result = $im_service->sendMsg(1, 0,auth()->id(),$type=0,$body);
if (empty($result)) throw new \Exception("修改认证信息失败", 1);
}
//分享人福币赠送
if ($body_log->from_user_id) {
$share_user = User::find($body_log->from_user_id);
if ($share_user) {
$log = $share_user->coinLogs()->where(['type'=>'RECSYSTEM', 'type_id'=>$body_log->user_id, 'remark'=>'邀请好友认证'])->first();
if (empty($log)) {
$share_user->addCoinLog("RECSYSTEM", $body_log->user_id, 50, '邀请好友认证');
}
}
}
\DB::commit();
auth()->user()->updateCacheUser('is_approved');
auth()->user()->updateCacheUser('is_real_approved');
return $this->success('ok');
} catch (\Exception $e) {
\DB::rollback();
$this->getError($e);
return $this->failure('真人认证失败,请稍后再试', ['error_type'=>1]);
}
}
/**
* 活体检测
* @param Request $request [description]
* @return [type] [description]
*/
public function realApproveV2(Request $request)
{
try {
//检测参数
$result = $this->checkRealApproveParamV2();
if (empty($result)) throw new \Exception("参数错误", 1);
if(is_array($result)){
return $this->success('认证失败', $result);
}
if (is_array($result) && $result['code']) return $this->failure($result['msg'], ['error_type'=>$result['error_type']]);
//活体检测
$im_service = new IMService();
$result = $im_service->checkBioassay($request->card_num, $request->name, $request->token);
if (empty($result)) throw new \Exception("活体检测失败", 1);
if ($result->code != 200){
$data = [
'type' => 1,
'message' => $result->msg
];
return $this->success('认证失败', $data);
}
// throw new \Exception($result->msg, $result->code);
//记录认证信息
if ($result->result) {
$this->userCon->addLiveperson($result->result);
}
if ($result->result && $result->result->reasonType != 1){
$data = UserService::getData($result->result->reasonType);
return $this->success('认证失败', $data);
}
\DB::beginTransaction();
//更新实人认证信息
$body_log = auth()->user()->updateApproveInfo('body', 1);
//更新实名认证信息
$name_log = auth()->user()->updateApproveInfo('name', 1);
//同步生日
auth()->user()->cardBirthdayToProfile('app');
//是否已赠送
$log = auth()->user()->coinLogs()->where(['type'=>'RECSYSTEM', 'remark'=>'真人认证'])->first();
if (empty($log)) {
//赠送福币 +10 不可提现
auth()->user()->updateCoinInfo('add', 10, 'other');
auth()->user()->addCoinLog("RECSYSTEM", 0, 10, '真人认证');
$message = "您的真人认证已通过后台审核系统赠送您10个福币作为奖励请注意查收";
$body = ['msg'=>$message];
$im_service = new IMService(env('IM_APP_KEY'), env('IM_APP_SECRET'));
$result = $im_service->sendMsg(1, 0,auth()->id(),$type=0,$body);
if (empty($result)) throw new \Exception("修改认证信息失败", 1);
}
//分享人福币赠送
if ($body_log->from_user_id) {
$share_user = User::find($body_log->from_user_id);
if ($share_user) {
$log = $share_user->coinLogs()->where(['type'=>'RECSYSTEM', 'type_id'=>$body_log->user_id, 'remark'=>'邀请好友认证'])->first();
if (empty($log)) {
$share_user->addCoinLog("RECSYSTEM", $body_log->user_id, 50, '邀请好友认证');
}
}
}
\DB::commit();
auth()->user()->updateCacheUser('is_approved');
auth()->user()->updateCacheUser('is_real_approved');
$data = [
'type' => 0,
'message' => '认证检测通过'
];
return $this->success('ok', $data);
} catch (\Exception $e) {
\DB::rollback();
$this->getError($e);
$data = [
'type' => 1,
'message' => '认证失败,系统繁忙,稍后重试'
];
return $this->success('认证失败', $data);
}
}
public function getBioassay($result)
{
try {
$msg = '';
switch ($result->result->reasonType) {
case 2:
$msg = '姓名身份证号一致,人脸比对非同一人';
break;
case 3:
$msg = '姓名身份证号不一致';
break;
case 4:
$msg = '活体不通过';
break;
case 5:
$msg = '活体检测超时或出现异常';
break;
case 6:
$msg = '查无此身份证';
break;
case 7:
$msg = '库中无此身份证照片';
break;
case 8:
$msg = '人像照过大';
break;
case 9:
$msg = '公安接口超时或出现异常';
break;
}
return $msg;
} catch (\Exception $e) {
$this->getError($e);
return false;
}
}
public function checkRealApproveParam()
{
try {
$name = request()->input('name');
$card_num = request()->input('card_num');
$token = request()->input('token');
if (empty($name) || empty($card_num) || empty($token)) throw new \Exception("缺少参数", 1);
//判断用户信息已经被其他账号认证
$user = User::where('card_num', $card_num)->where('is_real_approved', 1)->where('id', '<>', auth()->id())->first();
if ($user) {
$mobile = substr_replace($user->mobile, '****', 3,4);
return ['code'=>1, 'msg'=>"认证失败,身份信息已在其他账号".PHP_EOL.$mobile."认证", 'error_type'=>0];
}
//是否满十八岁
$result = \CommonUtilsService::checkCardBirhday($card_num);
if ($result['error'] != 2) return ['code'=>1, 'msg'=>'认证失败,身份证号码格式错误', 'error_type'=>1];
$age = \CommonUtilsService::getAge($result['tdate']);
if ($age < 18) return ['code'=>1, 'msg'=>'认证失败身份信息小于18岁', 'error_type'=>1];
return true;
} catch (\Exception $e) {
$this->getError($e);
return false;
}
}
public function checkRealApproveParamV2()
{
try {
$name = request()->input('name');
$card_num = request()->input('card_num');
$token = request()->input('token');
if (empty($name) || empty($card_num) || empty($token)) throw new \Exception("缺少参数", 1);
//判断用户信息已经被其他账号认证
$user = User::where('card_num', (string)$card_num)->where('is_real_approved', 1)->where('id', '<>', auth()->id())->first();
if (!empty($user)) {
$mobile = substr_replace($user->mobile, '****', 3,4);
$data = [
'type' => 1,
'message' => "认证失败,身份信息已在其他账号".PHP_EOL.$mobile."认证"
];
return $data;
}
//是否满十八岁
$result = \CommonUtilsService::checkCardBirhday($card_num);
if ($result['error'] != 2){
$data = [
'type' => 1,
'message' => "认证失败,身份证号码格式错误"
];
return $data;
}
$age = \CommonUtilsService::getAge($result['tdate']);
if ($age < 18){
$data = [
'type' => 1,
'message' => "认证失败身份信息小于18岁"
];
return $data;
}
return true;
} catch (\Exception $e) {
$this->getError($e);
return false;
}
}
/**
* 人工认证
*/
public function manualApprove(Request $request)
{
try {
$user = auth()->user();
if ($user->is_real_approved == 1) return $this->failure("已通过真人认证");
$photos = $request->input('photos', []);
if (empty(count($photos)) && is_array($photos)) {
return $this->failure('请上传手持身份证照!');
}
$user->identification_photos = json_encode($photos);
$user->save();
//创建审核记录
// $h = ApproveHistory::where('user_id', $user->id)->where('type', 'name')->where('status', 0)->first();
// if ($h && $user->identification_photos) {
// return $this->failure('认证信息正在审核中,请等待后台人员审核');
// }
ApproveHistory::updateOrCreate(['user_id' => $user->id,'type'=>'body'],['status' => 0,'ways' => 1,'from_user_id'=>$request->from_user_id,]);
ApproveHistory::updateOrCreate(['user_id' => $user->id,'type'=>'name'],['status' => 0,'ways' => 1,'from_user_id'=>$request->from_user_id,]);
return $this->success('ok');
} catch (\Exception $e) {
$this->getError($e);
return $this->failure('人工认证申请失败,请稍后再试');
}
}
/**
* 认证信息
* @param Request $request [description]
* @return [type] [description]
*/
public function approveInfo(Request $request)
{
try {
$user_id = auth()->id();
$user = User::where('id', $user_id)->select('id', 'name', 'card_num', 'is_approved', 'is_real_approved', 'approve_time','is_educate_approved', 'identification_photos')->first();
if ($user->card_num && mb_strlen($user->card_num)) {
$user->card_num = substr_replace($user->card_num, '********',-8,8);
}else{
$user->card_num = '********';
}
$user->card = $user->card_num;
if ($user->name && mb_strlen($user->name)) {
$str = mb_substr($user->name, 1 );
$re = '';
for ($i=0; $i <mb_strlen($str) ; $i++) {
$re.="*";
}
$user->name = str_replace($str, $re, $user->name);
}
//理由
$user->reason = '';
$result = ApproveHistory::where('user_id', $user_id)->where('type', 'body')->where('ways', 1)->where('status',-1)->first();
if($result)
$user->reason = '失败原因:'.$result->reason;
$user->approve_date = null;
//客服电话
$user->service_mobile = '18922809346';
//身份证照片
if(!empty($user->identification_photos)){
$user->identification_photos = json_decode($user->identification_photos);
}
return $this->success('ok', $user);
} catch (\Exception $e) {
$this->getError($e);
return $this->failure('获取认证信息失败,请稍后再试');
}
}
/**
* 我的活动
* @param Request $request [description]
* @return [type] [description]
*/
public function userActivities(Request $request)
{
try {
$user_id = auth()->id();
$activities = DB::table('activities as a')
->rightJoin('activity_members as m', 'a.id', '=','m.activity_id')
->where('m.user_id', $user_id)
->select('a.id as id','theme', 'poster', 'city', 'address','dist', 'start_time', 'end_time', 'class_id', 'fee','user_id', 'm.created_at',DB::raw("'fulllin_activity' as activity_type"),'is_online');
$merchant_user = MerchantUser::where('user_id',$user_id)->first();
if(!$merchant_user) {
$activities = $activities->orderBy('created_at','desc')->paginate();
} else {
$type_ids = DB::table('tourist_orders')
->join('community_activities','tourist_orders.type_id','community_activities.id')
->where('community_activities.class','one')->whereIn('channel',[1,2])
->where('tourist_orders.type','community')->where('account_id',$merchant_user->id)->whereIn('pay_status',[1,4])
->pluck('tourist_orders.type_id');
//,'tourist_orders.type','type_id',DB::raw("'business_order' as order_type"),'tourist_orders.price','tourist_orders.pay_type','pay_status','trade_no','desc as goods','tourist_orders.created_at'
$community_activities = DB::table('community_activities')->whereIn('id',$type_ids)
->select('id','title as theme',"pic as poster", "address as city",'address',
DB::raw("'' as dist"),'start_time','end_time', DB::raw("'0' as class_id"), DB::raw("'price' as fee"),'anchor_id as user_id','created_at',DB::raw("'business_activity' as activity_type"),'location as is_online');
$query = $activities->union($community_activities);
$sql = $query->toSql();
$activities = DB::table(DB::raw("($sql) as a"))->mergeBindings($query)
->orderBy('created_at','desc')->paginate();
}
foreach ($activities as $activity) {
$activity->class_name = ActivityClass::where('id', $activity->class_id)->value('title');
if($activity->activity_type == 'business_activity' && $activity->is_online == 0) {
$activity->city = '线上活动';
}
}
return $this->success('ok', $activities);
} catch (\Exception $e) {
$this->getError($e);
return $this->failure('获取我的活动列表失败,请稍后再试');
}
}
/**
* 我的订单列表
* @param Request $request [description]
* @return [type] [description]
*/
public function userOrders(Request $request)
{
try {
$user_id = auth()->id();
$type = $request->input('type', 'rank');
$orders = Order::where('user_id', $user_id)->where('pay_status', 'PAID');
if ($type === 'rank') {
$orders = $orders->whereIn('type', ['rank', 'single_service']);
$orders = $orders->select('id', 'goods', 'price', 'created_at', 'type','trade_no')->orderBy('id', 'desc')->paginate();
}elseif ($type === 'activity') {
$merchant_user = MerchantUser::where('user_id',$user_id)->first();
if(!$merchant_user) {
$orders = DB::table('orders')->where('user_id', $user_id)->where('type', 'activity')->where('pay_status', 'PAID')
->select('id','type','type_id',DB::raw("'fulllin_order' as order_type"),'price','pay_type','pay_status','trade_no','goods','created_at')
->orderBy('created_at','desc')->paginate();
} else {
$business_order = DB::table('tourist_orders')
->join('community_activities','tourist_orders.type_id','community_activities.id')
->where('community_activities.class','one')->whereIn('tourist_orders.channel',[1,2])
->where('tourist_orders.type','community')->where('account_id',$merchant_user->id)->whereIn('pay_status',[1,4])
->select('tourist_orders.id','tourist_orders.type','type_id',DB::raw("'business_order' as order_type"),'tourist_orders.price','tourist_orders.pay_type','pay_status','trade_no','desc as goods','tourist_orders.created_at');
$order = DB::table('orders')->where('user_id', $user_id)->where('type', 'activity')->where('pay_status', 'PAID')
->select('id','type','type_id',DB::raw("'fulllin_order' as order_type"),'price','pay_type','pay_status','trade_no','goods','created_at');
$query = $business_order->union($order);
$sql = $query->toSql();
$orders = DB::table(DB::raw("($sql) as a"))->mergeBindings($query)
->orderBy('created_at','desc')->paginate();
}
//$orders = $orders->where('type', 'activity');
}
return $this->success('ok', $orders);
} catch (\Exception $e) {
$this->getError($e);
return $this->failure('服务器休息中,请稍后再试');
}
}
/**
* 订单详情
* @param Request $request [description]
* @param Order $order [description]
* @return [type] [description]
*/
public function userOrder(Request $request, $order_id)
{
try {
$order = Order::where('id', $order_id)->where('user_id', auth()->id())->select('id', 'goods', 'price', 'type', 'pay_status', 'pay_type', 'created_at', 'trade_no')->first();
if (empty($order)) {
$merchant_user = MerchantUser::where('user_id',auth()->id())->first();
$order = TouristOrder::where('id', $order_id)->where('account_id',$merchant_user->id)->first();
if(empty($order)) throw new \Exception("订单不存在", 1);
$show_pay_type = '免费';
if($order['pay_type'] == 'wechat'){
$show_pay_type = '微信支付';
}else if($order['pay_type'] == 'alipay'){
$show_pay_type = '支付宝支付';
}else if($order['pay_type'] == 'ios'){
$show_pay_type = 'IOS支付';
}else if($order['pay_type'] == 'h5'){
$show_pay_type = 'H5支付';
}
$order['pay_type'] = $show_pay_type;
$activity = CommunityActivity::find($order->type_id);
$order['type'] = $activity->class == 'one' ? '活动订单':'社群订单';//$this->orderCon->orderTypeCodeSwitchChinese($order['type']);
if($order->type=='course')
$order->goods = $order->course->title??$order->goods;
$order->used_coin = 0 ;
//花费福币50个,抵扣金额5.00元
if($order->remark){
$start = strpos($order->remark,'币')/3+1;
$end = strpos($order->remark,'个')-8;
$len = $end- $start;
if($start&&$end&&$len){
$order->used_coin = intval(mb_substr($order->remark, $start,$len,'utf-8'));
}
}
return $this->success('ok', $order);
}
//是否使用福气
$order->use_score = $order->pay_order?($order->pay_order->score?'使用':'未使用'):'未使用';
//会员类型
switch ($order->type) {
case 'rank':
$order->type = '会员开通';
break;
case 'single_service':
$order->type = '会员套餐';
break;
case 'activity':
$order->type = '活动报名';
break;
case 'course':
$order->type = '购买课程';
break;
default:
$order->type = '其他';
break;
}
//支付类型
switch ($order->pay_type) {
case 'alipay':
$order->pay_type = '支付宝支付';
break;
case 'wechat':
$order->pay_type = '微信支付';
break;
case 'free':
$order->pay_type = '免费';
break;
default:
$order->pay_type = '其他';
break;
}
//支付状态
switch ($order->pay_status) {
case 'UNPAID':
$order->pay_status = '未支付';
break;
case 'PAID':
$order->pay_status = '支付成功';
break;
case 'CANCLE':
$order->pay_status = '已取消';
break;
default:
$order->pay_status = '其他';
break;
}
return $this->success('ok', $order);
} catch (\Exception $e) {
$this->getError($e);
return $this->failure('获取订单详情失败,请稍后再试');
}
}
/**
* 我的社群动态
* @param Request $request [description]
* @return [type] [description]
*/
public function userCommunityMoment(Request $request)
{
try {
$user = auth()->user();
$moments = \DB::table('community_moments as m')->leftJoin('users as u', 'm.user_id', '=', 'u.id')->where('m.user_id',auth()->id())->whereNull('m.deleted_at')->leftJoin('community_topics as t', 't.id', '=', 'm.topic_id')->leftJoin('communities as c', 'c.id', '=', 'm.community_id')->select('m.id as id', 'nickname', 'photo', 'app_avatar', 'm.user_id as user_id', 't.name as topic_name', 'm.content as content', 'photos', 'c.title as community_title', 'm.created_at as created_at')->paginate();
foreach ($moments as $moment) {
$moment->photos = json_decode($moment->photos);
$community_moment = CommunityMoment::find($moment->id);
$moment->photo = $moment->app_avatar?:$moment->photo;
//是否点赞
$moment->is_llker = $community_moment->isLikedBy($user)?1:0;;
//是否收藏
$moment->is_favorite = $user->hasFavorited($community_moment)?1:0;
//点赞数
$moment->momentLikerCount = $community_moment->likers()->get()->count()?:0;
//收藏数
$moment->favoriteCount = $community_moment->favoriters()->get()->count()?:0;
//评论数
$moment->momentCommentCount = $community_moment->totalCommentsCount();
}
return $this->success('ok', $moments);
} catch (\Exception $e) {
$this->getError($e);
return $this->failure('获取我发布的动态列表失败,请稍后再试');
}
}
/**
* 我的分享
* @param Request $request [description]
* @return [type] [description]
*/
public function userInvites(Request $request)
{
$user = auth()->user();
$user_id = $user->id;
$openid = $user->wechat?$user->wechat->openid:null;
$users = User::where(function($sql) use($user_id, $openid){
$sql = $sql->where('from_user_id', $user_id);
if ($openid) {
$sql->orWhere('from_openid', $openid);
}
})/*->where('type', 'single')*/->where('hidden_profile', 'NONE');
$keyword = $request->input('keyword');
if ($keyword) {
$users = $users->where('nickname', 'like', '%'.$keyword.'%');
}
$users = $users->select('id', 'nickname', 'photo', 'app_avatar', 'sex', 'created_at')->paginate();
foreach ($users as $user) {
$user->age = \CommonUtilsService::getAge($user->profileCourtship?$user->profileCourtship->birthday:null);
unset($user->profileCourtship);
$user->isSuperRank = $user->isSuperRank();
$user->photo = $user->userAvatar();
}
return $this->success('ok', $users);
}
/**
* 隐身
* @param Request $request [description]
* @return [type] [description]
*/
public function hidden(Request $request)
{
try {
$user = auth()->user();
$is_super_rank = $user->isSuperRank($user->id);
if(!$is_super_rank){
return $this->failure('非会员不能设置隐身');
}
if ($user->hidden) {
$user->hidden = 0;
}else {
$user->hidden = 1;
}
$hidden = $user->hidden;
$user->save();
return $this->success('ok', compact('hidden'));
} catch (\Exception $e) {
$this->getError($e);
return $this->failure('隐身设置失败,请稍后再试');
}
}
/**
* 关闭资料
* @param Request $request [description]
* @return [type] [description]
*/
public function hiddenProfile(Request $request)
{
try {
$user = auth()->user();
if ($user->hidden_profile == 'NONE') {
$user->hidden_profile = 'ALLSEX';
// 增加备注记录
CloseProfileHistory::updateOrCreate(['user_id'=>$user->id],['operator'=>0,'reason'=>$request->input('content')]);
$type = 'ALLSEX';
$else_type = 'NONE';
}elseif ($user->hidden_profile == 'ALLSEX') {
$user->hidden_profile = 'NONE';
$type = 'NONE';
$else_type = 'ALLSEX';
}
$user->save();
AreaUser::where('user_id', $user->id)->delete();
//增加修改记录
$old_data['hidden_profile'] = $else_type;
$new_data['hidden_profile'] = $type;
ProfileChangeHistory::create([
'user_id'=>$user->id,
'owner_user_id'=>$user->id,
'new_content'=>json_encode($new_data),
'old_content'=>json_encode($old_data)
]);
return $this->success('ok');
} catch (\Exception $e) {
$this->getError($e);
return $this->failure('关闭资料失败,请稍候再试');
}
}
public function hiddenProfileOptions(Request $request)
{
$options = [
['key'=>'key1', 'value'=>'已经在福恋找到伴侣了'],
['key'=>'key2', 'value'=>'通过其他方式找到伴侣了'],
['key'=>'key3', 'value'=>'被婚托,酒托骚扰'],
['key'=>'key4', 'value'=>'人少,看来看去就那么几个'],
['key'=>'key5', 'value'=>'想要找的意中人太少'],
['key'=>'key6', 'value'=>'其他原因'],
];
return $this->success('ok', compact('options'));
}
/**
* 黑名单列表
* @param Request $request [description]
* @return [type] [description]
*/
public function blacklist(Request $request)
{
try {
$user = auth()->user();
$keyword = $request->input('keyword');
$list = $user->linkBlackList()->with('otherUser:id,nickname,photo,app_avatar,sex,is_approved');
if ($keyword) {
$list = $list->whereHas('otherUser', function($sql) use($keyword){
$sql->where('nickname', 'like', '%'.$keyword.'%');
});
}
$list = $list->paginate();
foreach ($list as $li) {
if (empty($li->otherUser)) continue;
$li->nickname = $li->otherUser->nickname;
$li->photo = $li->otherUser->photo;
$li->id = $li->otherUser->id;
$li->is_approved = $li->otherUser->is_approved;
$li->isSuperRank = $li->otherUser->isSuperRank()?1:0;
$li->sex = $li->otherUser->sex;
$profile_courtship = ProfileCourtship::where('user_id', $li->other_user_id)->select('user_id', 'birthday', 'city', 'stature')->first();
if ($profile_courtship) {
$li->age = \CommonUtilsService::getAge($profile_courtship->birthday);
}else{
$li->age = 0;
}
$li->profile_courtship = $profile_courtship;
$li->photo = $li->otherUser->userAvatar();
unset($li->otherUser, $li->user_id, $li->other_user_id, $li->updated_at, $li->deleted_at);
}
return $this->success('ok', $list);
} catch (\Exception $e) {
$this->getError($e);
return $this->failure('获取黑名单信息失败,请稍后再试');
}
}
/**
* 删除黑名单
* @param Request $request [description]
* @param [type] $id [description]
* @return [type] [description]
*/
public function deleteBlackList(Request $request, $id)
{
try {
LinkingBlacklist::where('user_id', auth()->id())->where('other_user_id', $id)->delete();
return $this->success('ok');
} catch (\Exception $e) {
$this->getError($e);
return $this->failure('删除黑名单失败,请稍后再试');
}
}
/**
* 我的收藏
* @param Request $request [description]
* @return [type] [description]
*/
public function favorites(Request $request)
{
try {
$user = auth()->user();
$type = $request->input('type', 'activity');
if ($type == 'activity') {
$favorites = $user->favorites(Activity::class)->where('is_hidden', 0)->paginate();
foreach ($favorites as $favorite) {
$favorite->class_name = $favorite->class?$favorite->class->title:null;
unset($favorite->pivot, $favorite->host, $favorite->detail, $favorite->detail_path, $favorite->detail_pic, $favorite->content, $favorite->is_top, $favorite->show_member_num,$favorite->province, $favorite->address, $favorite->qrcode, $favorite->vote_qrcode, $favorite->sign_in_qrcode,$favorite->location_latitude, $favorite->location_longitude, $favorite->is_deadline, $favorite->is_cancel, $favorite->click_num, $favorite->is_hidden, $favorite->created_at, $favorite->deleted_at, $favorite->updated_at, $favorite->class_id, $favorite->class);
}
}elseif ($type == 'community_moment') {
$favorites = $user->favorites(CommunityMoment::class)->where('is_show', 1)->paginate();
foreach ($favorites as $favorite) {
$favorite->user_id = $user->id;
$favorite->nickname = $user->nickname;
$favorite->photo = $user->app_avatar?:$user->photo;
$favorite->photos = json_decode($favorite->photos);
$favorite->topic_name = $favorite->topic()->value("name");
$favorite->community_title = $favorite->community()->value('title');
//是否点赞
$favorite->is_llker = $favorite->isLikedBy($user)?1:0;
//是否收藏
$favorite->is_favorite = $user->hasFavorited($favorite)?1:0;
//点赞数
$favorite->momentLikerCount = $favorite->likers()->get()->count()?:0;
//收藏数
$favorite->favoriteCount = $favorite->favoriters()->get()->count()?:0;
//评论数
$favorite->momentCommentCount = $favorite->totalCommentsCount();
unset($favorite->pivot, $favorite->community_id, $favorite->is_show, $favorite->created_at, $favorite->deleted_at, $favorite->updated_at, $favorite->topic_id);
}
}
return $this->success('ok', $favorites);
} catch (\Exception $e) {
$this->getError($e);
return $this->failure('获取收藏列表失败,请稍后再试');
}
}
/**
* 会员列表
* @param Request $request [description]
* @return [type] [description]
*/
public function ranks(Request $request)
{
try {
$rank = Rank::with(['subRanks' => function($sql){
if (auth()->user()->mobile != '15872844805'){
$sql->where('is_show_app', 1);
}
}])->where('name', '超级会员')->select('id','name', 'explain', 'app_feature')->first();
if (!empty($rank)) {
$rank->explain = json_decode($rank->explain);
$rank->feature = json_decode($rank->app_feature);
foreach ($rank->subRanks as $subRank) {
if (request()->header('client-os') == "IOS") {
$subRank->discount_price = $subRank->ios_price;
$subRank->pic = $subRank->ios_pic;
}
}
$rank->carousel_feature = [
'https://images.ufutx.com/202012/03/877232dcc84c1ddda634dc04ec2339f0.png',
'https://images.ufutx.com/202012/03/e23467fd983a0c4d547fdfcc586602d6.png',
'https://images.ufutx.com/202012/03/da26cb16c92a1f9daefaa5d591914ae2.png',
'https://images.ufutx.com/202012/03/46913f2ffd527ff5bdf7f03c89b8e5e3.png',
'https://images.ufutx.com/202012/03/b3ab31f133268f34e721fe1d3d414b90.png',
'https://images.ufutx.com/202012/03/b1b3c5be08182155260d21d01ec2d94d.png'
];
unset($rank->app_feature);
}
$user = auth()->user();
$dateline = RankHistory::where('user_id', $user->id)->where('rank_id', $user->rank_id)->orderBy('id', 'desc')->value('deadline');
return $this->success('ok', compact('dateline', 'rank'));
} catch (\Exception $e) {
$this->getError($e);
return $this->failure('获取超级会员信息失败,请稍后再试');
}
}
/**
* 会员套餐
* @param Request $request [description]
* @return [type] [description]
*/
public function singleServices(Request $request)
{
try {
$user = auth()->user();
$dateline = RankHistory::where('user_id', $user->id)->where('rank_id', $user->rank_id)->orderBy('id', 'desc')->value('deadline');
$services = SingleService::with('rank:id,feature')->where('is_show_app',1)->orderBy('price', 'asc')->select('id', 'title', 'price', 'discount_price', 'pic','rank_id', 'discount_desc', 'feature','discount_desc_type')->get();
foreach ($services as $service) {
if ($service->discount_desc_type == 'json') {
$service->feature = json_decode($service->feature);
$service->discount_desc = json_decode($service->discount_desc);
unset($service->rank);
}else{
$service->feature = json_decode($service->feature);
$service->discount_desc = explode('****',$service->discount_desc);
// $service->discount_desc = json_decode($service->discount_desc);
unset($service->rank);
}
}
return $this->success('ok', compact('dateline', 'services'));
} catch (\Exception $e) {
$this->getError($e);
return $this->failure('获取会员套餐信息失败,请稍后再试');
}
}
/**
* [buyRank description]
* @param Request $request [description]
* @return [type] [description]
*/
public function buyRank(Request $request)
{
\DB::beginTransaction();
try {
$user = auth()->user();
//购买的会员等级
$sub_rank_id = $request->input('sub_rank_id');
if ($sub_rank_id < 10) {
return $this->failure('支付失败,请稍后再试');
}
$sub_rank = SubRank::find($sub_rank_id);
if (empty($sub_rank)) {
return $this->failure('没有该会员');
}
if ($sub_rank->ios_price <= 1 && $user->mobile != '15872844805'){
return $this->failure('测试会员暂不支持购买');
}
$use_score = $request->input('use_score', 0);
if ($use_score) return $this->failure('暂支持使用福气支付');
$rank = Rank::find($sub_rank->rank_id);
$goods = '购买'.$sub_rank->month.'个月'.$rank->name.'VIP';
$os = $request->header('client-os');
if ($os == 'IOS') {
$price = $sub_rank->ios_price;
}else{
$price = $sub_rank->discount_price;
}
$order_pay = $this->orderCon->makeAppOrder($request, $price, 'rank', $sub_rank_id, $goods, $linkmen=[], $detail='购买会员');
if (empty($order_pay)) {
throw new \Exception("订单生成失败", 1);
}
\DB::commit();
return $this->success('ok', $order_pay);
} catch (\Exception $e) {
\DB::rollBack();
$this->getError($e);
return $this->failure('支付失败,请稍后再试');
}
}
/**
* 购买会员套餐
* @param Request $request [description]
* @return [type] [description]
*/
public function buySingleService(Request $request, SingleService $single_service)
{
\DB::beginTransaction();
try {
$user = auth()->user();
$goods = $single_service->title;
$order_pay = $this->orderCon->makeAppOrder($request, $single_service->discount_price, 'single_service', $single_service->id, $goods, $linkmen=[], $detail='购买会员套餐');
if (empty($order_pay)) {
throw new \Exception("订单生成失败", 1);
}
\DB::commit();
//购买成功 发送短信通知
// $m = Message::create([
// 'phone' => $user->mobile,
// 'message' => '',
// 'confirmed' => 1,
// 'code' => '购买服务套餐',
// 'ip' => request() ? request()->ip() : '127.0.0.1',
// ]);
// $message = '您已成功购买【'.$single_service->title.'】服务套餐福恋工作人员将尽快联系您为您服务请耐心等待。如有问题请联系18922809346';
// $m->message = $message;
// $m->save();
// Messenger::sendSMS($user->mobile, $message);
return $this->success('ok', $order_pay);
} catch (\Exception $e) {
\DB::rollBack();
$this->getError($e);
return $this->failure('支付失败,请稍后再试');
}
}
/**
* 签到提醒
*/
public function sign_notice(Request $request)
{
$user = auth()->user();
$UserInfo = UserInfo::where('user_id',$user->id)->first();
if($UserInfo){
$UserInfo->sign_notice = $UserInfo->sign_notice?0:1;
}else{
$UserInfo = new userInfo;
$UserInfo->user_id = $user->id;
$UserInfo->sign_notice = 1;
}
$UserInfo->save();
return $this->success('ok',$UserInfo);
}
/**
* 问题反馈
* @param Request $request [description]
* @return [type] [description]
*/
public function feedback(Request $request)
{
try {
$this->userCon->feedback($request, auth()->id());
return $this->success('ok');
} catch (\Exception $e) {
$this->getError($e);
return $this->failure('问题反馈失败,请稍后再试');
}
}
/**
* 用户信息
* @param Request $request [description]
* @return [type] [description]
*/
public function userInfo(Request $request, $user_id=0)
{
try {
$login_user = null;
if ($user_id == 0){
$login_user = $this->getMyUserinfo();
if(!$login_user){
return $this->fail('请登录后访问',2);
}
$user_id = $login_user->id;
}
//是否在黑名单
$is_black = LinkingBlacklist::where('user_id', $user_id)->where('other_user_id', $login_user->id)->count();
if($is_black) return $this->failure('您已被对方拉入黑名单');
$profile_data = User::APPCOMPLETEINFO;
$user = User::where('id', $user_id)->select('id','name', 'nickname', 'photo', 'app_avatar','industry','industry_sub', 'type', 'is_approved','hidden_profile','is_real_approved', 'is_educate_approved','approve_time', 'hidden', 'sex', 'belief', 'is_photo_audited','rank_id','mobile')->first();
// $user->is_approved = $user->is_approved == 0?((ApproveHistory::where('user_id', $user_id)->where('type', 'name')->where('status', 0)->exists())?2:0):1;
$user->photo = $user->userAvatar();
$profile = $user->profileCourtship()->select('user_id', 'birthday','state','province','city','resident_province','resident_city','stature','weight','degree','graduate_school','educate_photo','introduction','ideal_mate','interest_label','income','wechat_id', 'belief','edc_type','chsi_code', 'sex','mate_conditon')->first();
if (!empty($profile)) {
$profile->interest_label = json_decode($profile->interest_label)?:[];
$user->age = \CommonUtilsService::getAge($profile->birthday);
$profile->mate_conditon = json_decode($profile->mate_conditon,true);
//不正常身高年龄
if($profile->stature < 100 && $profile->stature){
$profile->stature = $user->sex == 1 ? 170 : 160;
}
if($profile->weight < 30 && $profile->weight){
$profile->weight = $user->sex == 1 ? 170 : 160;
}
}
$user->profile_photo = $user->profilePhoto()->select('id','photo')->limit(9)->orderBy('id', 'desc')->get();
$user->profile = $profile;
//今日打招呼次数
$time = date('Y-m-d 00:00:00');
$user->request_num = LinkingRequest::where('user_linking_id',$user->id)->whereBetween('created_at', [$time,now()])->count();
//今日购买打招呼次数
$user->pay_num = CoinLog::where('user_id',$user->id)->where('type','friend_request')->where('type_id',0)->whereBetween('created_at', [$time,now()])->count();
//剩余次数
$user->surplus_num = 3+$user->pay_num-$user->request_num;
if($user->surplus_num<0)$user->surplus_num=0;
$result = $this->userCon->profileIntegrity($user->profileCourtship,$user,explode(',', $profile_data));
$bili = $result['count'] / $result['total_count'];
$user->info_pro = number_format($bili,2);
//临时会员
$user->temp_status = $this->userTempStatus($user, $bili);
//超级会员
$user->isSuperRank = $user->isSuperRank();
$user->is_hidden = $user->hidden;
$user->fans_count = $user->followers()->count()?:0;
//访客数
$user->preview_count = $user->userPreview()->whereNotNull('preview_time')->whereHas('previewUser', function($sql){
})->count()?:0;
//动态
$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->moment = array_slice($new_photos, 0, 4);
//礼物榜
$user->gift_icons = $user->giftIcons();
//是否完善
$result = UserService::isCompleteProfileV4($user, 'app');
$user->self_info_level = 0;
if ($result) {
$user->self_info_level = $result['level'];
}
//注册基本资料
$user->complete_base_info = $user->isCompletedProfile("app_register_info");
//其他基本资料
$user->complete_other_info = $user->isCompletedProfile('app_other_info');
//头像是否审核
$user->is_photo_audited;
//学历是否认证
$user->is_educate_approved;
//是否设置破冰问题
$user->has_friend_question = $user->userFriendQuestion?1:0;
$user->friend_question = ($user->has_friend_question)?$user->friendQuestion():'';
//是否动态管理员
$user->is_moment_admin = RoleUser::where('role_id', 21)->where('user_id', $user->id)->count() ? 1 : 0;
unset($user->profileCourtship, $user->userFriendQuestion);
//分享链接
$user->share_url = config('app.url').'/h5/#/downloadApp?from_user_id='.$user->id.'&app_url=user_info';
//是否申请过专区推荐
$is_audited = AreaUser::where('user_id', $user->id)->where('area_id', 1)->orderBy('id', 'desc')->value('is_audited');
$user->has_apply_area = $is_audited === null ? 2: $is_audited;
$banned_state = 0;
$blacklist = SystemBlacklist::where('user_id', $user->id)->first();
if ($blacklist) {
$date = date('Y-m-d H:i:s');
if($blacklist->end_time >= $date && $blacklist->start_time <= $date){
$banned_state = 1;
}
}
//是否是客服
$user->service_man = UserInfo::where('user_id',$user_id)->where('is_service_client',1)->exists()?1:0;
$user->banned_state = $banned_state;
$user->frozen_state = $this->userCon->getUserFrozenState($user->id);
$user->profile->belief = $profile->belief ? : $user->belief;
return $this->success('ok', $user);
} catch (\Exception $e) {
$this->getError($e);
return $this->failure('用户信息获取失败,请稍后再试');
}
}
//解冻用户
public function unfrozenUsers(Request $request,$user_id){
try {
$info = WrongInfoHistories::where('user_id',$user_id)->where('type','frozen')->first();
$user = User::find($user_id);
$user->can_be_found = 1;
$info->delete();
$user->save();
return $this->success('ok');
} catch (\Exception $e) {
$this->getError($e);
return $this->failure('解锁失败,请稍后再试');
}
}
//增加认证
public function addApprove(Request $request)
{
$mobile = $request->mobile;
$reason = $request->reason??'人工认证';
$type = $request->type; //is_real_approved,is_approved
if($type=='is_real_approved'){
$Approve = 'body';
}elseif($type=='is_approved'){
$Approve = 'name';
}
$user_id = User::where('mobile', $mobile)->value('id');
User::where('id', $user_id)->update([$type=>1]);
ApproveHistory::where('type',$Approve)->updateOrCreate(['user_id'=>$user_id],[
'type'=>$Approve,
'ways'=>1,
'status'=>1,
'reason'=>$reason,
]);
return $this->success('ok');
}
/**
* 基本资料
* @param Request $request [description]
* @return [type] [description]
*/
public function baseUserInfo(Request $request)
{
try {
$user = auth()->user();
if (empty($profile)) {
$this->userCon->updateAppProfile($request, $user);
}
//是否完善
$result = UserService::isCompleteProfileV4($user, 'app');
$self_info_level = 0;
if ($result) {
$self_info_level = $result['level'];
}
$profile = $user->profileCourtship ? $user->profileCourtship : $user->profileMarriage;
//今日打招呼次数
$time = date('Y-m-d 00:00:00');
// $request_num = LinkingRequest::where('user_id',$user->id)->whereBetween('created_at', [$time,now()])->count();
$user_info = [
'app_avatar' => $user->app_avatar,
'nickname' => $user->nickname,
'sex'=> $user->sex,
'type'=>$user->type,
'birthday'=>$profile->birthday,
'stature'=>$profile->stature,
'province' => $profile->province,
'city' => $profile->city,
'belief' => $profile->belief,
// 'request_num'=>$request_num,
'introduction'=> $profile->introduction,
'self_info_level'=>$self_info_level
];
return $this->success('ok', $user_info);
} catch (\Exception $e) {
$this->getError($e);
return $this->failure('获取基本信息失败,请稍后再试');
}
}
public function userTempStatus($user, $bili)
{
//未完善资料
if ($bili < 1) {
$status = 0;
}else{
//判断是否领取临时会员
$result = TempMember::where('user_id', $user->id)->first();
if (empty($result)) {
$status = 0;
}elseif ($result->status == 0) {
$status = 1;
}elseif ($result->status) {
$status = 2;
}
}
return $status;
}
/**
* 修改资料
* @param Request $request [description]
* @return [type] [description]
*/
public function updateUserInfo(Request $request)
{
try {
$user = auth()->user();
$result = $this->userCon->updateAppProfile($request, $user);
$introductionVerifyResultCode__key = $this->userCon->KYE_IVRC . $user->id;
$ideal_mateVerifyResultCode_key = $this->userCon->KYE_IMVRC . $user->id;
$interest_hobbyVerifyResultCode_key = $this->userCon->KYE_IMPHO . $user->id;
Cache::forget($introductionVerifyResultCode__key);
Cache::forget($ideal_mateVerifyResultCode_key);
Cache::forget($interest_hobbyVerifyResultCode_key);
if (is_array($result) && $result['code']) return $this->failure($result['msg']);
return $this->success('ok');
} catch (\Exception $e) {
\DB::rollBack();
$this->getError($e);
return $this->failure('修改资料失败,请重试');
}
}
/**
* 兴趣爱好标签
* @param Request $request [description]
* @return [type] [description]
*/
public function interestLabels(Request $request)
{
//系统
$system_labels = InterestLabel::whereNull('user_id')->select('name')->get();
//自定义
$custom_labels = InterestLabel::where('user_id', auth()->id())->select('id','name')->orderBy('id', 'desc')->get();
//选中得
$select_labels = json_decode(auth()->user()->profileCourtship->interest_label);
$select_labels = $select_labels ?$select_labels:array();
return $this->success('ok', compact('system_labels', 'custom_labels','select_labels'));
}
/**
* 创建标签
* @param Request $request [description]
* @return [type] [description]
*/
public function storeInterestLabel(Request $request)
{
try {
$name = $request->input('name');
if (empty($name) || mb_strlen($name) > 8) {
return $this->failure('请按照规则创建标签');
}
$result = InterestLabel::where(function($sql){
$sql->where('user_id',auth()->id())->orWhereNull('user_id');
})->where('name', $name)->exists();
if ($result) {
return $this->failure('标签已经存在');
}
$label = InterestLabel::firstOrCreate([
'user_id'=>auth()->id(),
'name'=>$name
]);
return $this->success('ok', $label);
} catch (\Exception $e) {
$this->getError($e);
return $this->failure('创建标签失败,请稍后再试');
}
}
/**
* 删除标签
* @param Request $request [description]
* @param InterestLabel $interest_label [description]
* @return [type] [description]
*/
public function deleteInterestLabel(Request $request, InterestLabel $interest_label)
{
try {
if ($interest_label->user_id != auth()->id()) {
throw new \Exception("请选择自己自定义标签", 1);
}
$interest_label->delete();
return $this->success('ok');
} catch (\Exception $e) {
$this->getError($e);
return $this->failure('删除标签失败,请稍后再试');
}
}
/**
* 修改用户兴趣爱好
* @param Request $request [description]
* @return [type] [description]
*/
public function updateUserInterestLabel(Request $request)
{
try {
\DB::beginTransaction();
$user_id = auth()->id();
$labels = $request->input('labels', []);
sort($labels);
if (empty(count($labels))) {
return $this->failure('请选择标签');
}
$old_data = ProfileCourtship::where('user_id', $user_id)->value('interest_label');
$profile = ProfileCourtship::where('user_id', auth()->id())->first();
if (json_encode($labels) != $profile->interest_label) {
$profile->interest_label = json_encode($labels);
$profile->save();
}
//修改完善分数
$user = auth()->user();
$result = $this->userCon->profileIntegrity($profile, $user, explode(',', User::APPCOMPLETEINFO));
$user->info_complete_score = $result['count'];
$user->save();
//更新缓存
$user->cacheUser();
//获取临时会员
$bili = $user->type == 'sinlge'?$result['count'] / $result['total_count']:0;
// if ($bili == 1) {
// $user->getTempRank();
// }
$new_data = ProfileCourtship::where('user_id', $user_id)->value('interest_label');
ProfileChangeHistory::create([
'user_id'=>auth()->id(),
'owner_user_id'=>$user_id,
'new_content'=>json_encode(['interest_label' => json_decode($new_data)]),
'old_content'=>json_encode(['interest_label' => json_decode($old_data)])
]);
\DB::commit();
return $this->success('ok');
} catch (\Exception $e) {
\DB::rollback();
$this->getError($e);
return $this->failure('更新用户兴趣爱好失败,请稍后再试');
}
}
/**
* 获取临时会员
* @return [type] [description]
*/
public function getTempRank()
{
$result = auth()->user()->getTempRank();
if (is_array($result) && $result['code']) return $this->failure($result['msg']);
return $this->success('ok');
}
public function userInfoOptions(Request $request)
{
//年龄
$sex_arr = [
['key'=>'男','value'=>1],
['key'=>'女','value'=>2]
];
//身高
$stature_arr = [];
for ($i=139; $i < 202; $i++) {
if ($i === 139) {
$key = $i.'cm以下';
$arr = ['key'=> $key, 'value'=>$i];
$stature_arr[] = $arr;
continue;
}elseif ($i === 201) {
$key = $i.'cm以上';
$arr = ['key'=> $key, 'value'=>$i];
$stature_arr[] = $arr;
continue;
}
$arr =['key'=> $i.'cm', 'value'=>$i];
$stature_arr[] = $arr;
}
$weight_arr = [];
for ($i=39; $i < 132; $i++) {
if ($i === 39) {
$key = $i.'kg以下';
$arr = ['key'=> $key, 'value'=>$i];
$weight_arr[] = $arr;
continue;
}elseif ($i === 131) {
$key = $i.'kg以上';
$arr = ['key'=> $key, 'value'=>$i];
$weight_arr[] = $arr;
continue;
}
$arr =['key'=> $i.'kg', 'value'=>$i];
$weight_arr[] = $arr;
}
$address_arr = Address::where('name', '<>', '不限')->orderBy('codeId', 'asc')->select('codeId', 'name', 'parentId')->get()->toArray();
$address_arr = $this->addressSort($address_arr);
$state_arr = ['从未结婚','离异','丧偶', '已婚'];
$degree_arr = ['小学','初中', '高中','中专','大专','本科','硕士','博士','其他'];
$income_arr = ['5~10w', '10~15w', '15~20w', '15~30w', '30~50w', '50~100w', '100~500w', '500w以上'];
$belief_arr = ['基督教','佛教', '伊斯兰教','其他'];
//行业
list($__sort, $__detail) = $this->industryJsonData();
$industry_arr =[];
foreach($__sort as $key => $item){
$industry_arr[] =[
'title' => $item,
'items' => $__detail[$key]
];
}
//单身状态
$type_arr = [
['key'=>'single', 'value'=>'目前单身'],
['key'=>'marriage', 'value'=>'已有对象']
];
return $this->success('ok', compact('sex_arr', 'stature_arr', 'weight_arr','address_arr', 'state_arr', 'degree_arr', 'income_arr', 'belief_arr', 'industry_arr', 'type_arr'));
}
/**
* 修改头像
* @param Request $request [description]
* @return [type] [description]
*/
public function updateUserPhoto(Request $request)
{
try {
$user = auth()->user();
$photo = $request->input('photo');
if (empty($photo)) {
return $this->failure('请上传头像');
}
//内容安全-图片
$result = \CommonUtilsService::imageContentCecurity([$photo]);
if ($result && $result['result']) {
return $this->failure('图片'.$result['result'].',请换一张照片');
}
//人脸识别
$result = $this->userCon->faceDelectBaiDu($photo);
$res = $this->userCon->checkPhotoResult($result);
if (empty($res)) throw new \Exception("图片分析失败", 1);
if (is_array($res) && $res['code']) {
//增加错误头像记录
ErrorPhoto::firstOrCreate(['user_id'=>$user->id, 'photo'=>$photo, 'error_msg'=>$res['msg']]);
if ($res['msg'] == "pic not has face") return $this->failure('图片上传失败,可能未获取到人脸,请换一张照片');
if ($res['msg'] == "image download fail") return $this->failure('图片解析失败,请重新上传');
return $this->failure($res['msg']);
}
if ($request->input('photo') && $request->photo != $user->photo) {
// $face_list = $result->result->face_list;
$user->photo = $request->photo;
// $user->face_score = $face_list[0]->beauty;
$user->circle_avatar = null;
$user->my_share = null;
$user->home_share = null;
$user->is_audited = 0;
$user->is_photo_audited = 0;
// $user->is_photo_audited = 1;
$user->app_avatar = $request->photo;
$user->save();
// //创建百度图片信息
// $this->userCon->addImageInfo($user, $user->photo, $face_list[0]);
// $user->updateCacheUser('photo');
// $user->updateCacheUser('app_avatar');
// //对比照片相似度
// FaceMatchJob::dispatch($user->id)->onQueue('love');
// //同步IM头像
// $birthday = $user->profileCourtship?$user->profileCourtship->birthday:null;
// $im_service = new IMService(env('IM_APP_KEY'), env('IM_APP_SECRET'));
// $result = $im_service->updateUinfo($user->id,$user->nickname, $user->app_avatar,$sign='',$user->email,$birthday,$user->mobile,$user->sex);
}
return $this->success('OK', $result);
} catch (\Exception $e) {
$this->getError($e);
return $this->failure('头像上传失败,请稍后再试');
}
}
/**
* 上传生活照
* @param Request $request [description]
* @return [type] [description]
*/
public function uploadProfilePhoto(Request $request)
{
$user_id = auth()->id();
$photos = $request->input('photos', []);
$result = \CommonUtilsService::imageContentCecurity($photos);
if ($result && isset($result['result']) && $result['result']) {
return $this->failure('图片'.$result['result'].',请换一张照片');
}
$data = [];
$old_data['profile_photos'] = ProfilePhoto::where('user_id', $user_id)->pluck('photo');
if (count($photos)) {
foreach ($photos as $photo) {
if (empty($photo)) {
continue;
}
$photo_obj = new ProfilePhoto();
$photo_obj->photo = $photo;
$photo_obj->user_id = auth()->id();
$photo_obj->dateline = date('Y-m-d');
$photo_obj->save();
$data[] = $photo_obj;
}
}
$new_data['profile_photos'] = ProfilePhoto::where('user_id', $user_id)->pluck('photo');
ProfileChangeHistory::create([
'user_id'=>auth()->id(),
'owner_user_id'=>$user_id,
'new_content'=>json_encode($new_data),
'old_content'=>json_encode($old_data)
]);
return $this->success('ok', $data);
}
public function deleteProfilePhoto(Request $request, $profile_photo)
{
$result = ProfilePhoto::where('id', $profile_photo)->delete();
return $this->success('ok');
}
public function getUserAsset($user)
{
$asset = $user->userAsset();
if (empty($asset)) {
$asset = $user->asset()->create([
'viewer_id'=>0,
'cash'=>0,
'share_cash'=>0,
'blocked_cash'=>0,
]);
}
return $asset;
}
/**
* 钱包
* @param Request $request [description]
* @return [type] [description]
*/
public function userAsset(Request $request)
{
try {
$user = auth()->user();
$asset = $this->getUserAsset($user);
$asset->sum_cash = bcadd($asset->cash, $asset->share_cash, 2);
$asset->total_cash = $asset->sum_cash * 100;
//是否绑定微信
$asset->bind_wechat = $user->wechat?($user->wechat->app_openid?1:0):0;
//轮播
$logs = AssetLog::where('type', 3)->with('user:id,nickname,photo', 'viewer:id,nickname,avatar')->select('id', 'viewer_id', 'user_id', 'num', 'type', 'is_hooked','created_at')->orderBy('id', 'desc')->limit(5)->get();
foreach ($logs as $log) {
if (empty($log->user)) {
$viewer = $log->viewer;
$nickname = $viewer?$viewer->nickname:null;
$photo = $viewer?$viewer->avatar:null;
}else{
$nickname = $log->user->nickname;
$photo = $log->user->photo;
}
$log->nickname = $nickname;
$log->photo = $photo;
unset($log->user, $log->viewer);
}
return $this->success('ok', compact('asset', 'logs'));
} catch (\Exception $e) {
$this->getError($e);
return $this->failure('获取钱包信息失败,请稍后再试');
}
}
public function userCoin(Request $request)
{
try {
$user = auth()->user();
$coin = $user->coinInfo();
// if ($coin->is_safe != 1) {
// $text = '近期,我公司发现部分用户利用平台系统漏洞,通过注册虚假用户获取平台发放的新用户注册奖励,以谋取不当利益,严重违反相关法律规定。针对此种行为,我公司已经向有权机关进行报案,并积极配合有权机关打击此类违法行为。特此声明!';
// return $this->fail($text,9);
// }
//获取用户总福币
$total_coin = CoinLog::where('user_id',$user->id)
->where('type','RECSYSTEM')
->where(function ($query){
$query/*->where('remark', 'like','%邀请好友%')*/
->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');
//获取活动获得的总福币
$coin->can_remain_amount = $total_coin - $cash??0;
$coin->remain_amount = $coin->remain_amount+$coin->amount_from_other;
//福币转换费率
$coin->rate = 0;
//福币和人民币比例
$coin->rmb_rate = 10;
//最低额度
$coin->minimum_amout=100;
$coin->is_real_approved=$user->is_real_approved;
//提现记录
$logs = CoinWithdrawLog::with('user:id,nickname,app_avatar,photo')->where('status',1)->where('is_hooked',1)->limit(5)->orderBy('id', 'desc')->get();
return $this->success('ok', compact('coin', 'logs'));
} catch (\Exception $e) {
$this->getError($e);
return $this->failure('获取钱包信息失败,请稍后再试');
}
}
/**
* 福币绑定支付宝账号
* @param Request $request [description]
* @return [type] [description]
*/
public function coinBindAlipayAccount(Request $request)
{
try {
$alipay_account = $request->input('alipay_account');
$alipay_real_name = $request->input('alipay_real_name');
if (empty($alipay_account) || empty($alipay_real_name)) return $this->failure('绑定账号失败');
$user = auth()->user();
$coin = $user->coinInfo();
$coin->alipay_account = $alipay_account;
$coin->alipay_real_name = $alipay_real_name;
$coin->save();
return $this->success('ok');
} catch (\Exception $e) {
$this->getError($e);
return $this->failure('绑定账号失败,请稍后再试');
}
}
/**
* 收益记录
* @param Request $request [description]
* @return [type] [description]
*/
public function assetIncomeLogs(Request $request)
{
try {
$user = auth()->user();
$asset = $user->userAsset();
$logs = AssetLog::where('user_id',$asset->user_id)->whereIn('type', [1,2,4,5])->where('is_hooked',1)->select('id', 'user_id', 'num', 'type', 'is_hooked', 'created_at')->orderBy('id', 'desc')->paginate();
foreach ($logs as $log) {
switch ($log->type) {
case 1:
$log->type_name = '收益-打赏';
break;
case 2:
$log->type_name = '收益-分享新用户';
break;
case 4:
$log->type_name = '收益-分享用户消费';
case 5:
$log->type_name = '收益-后台赠送';
break;
default:
$log->type_name = '收益';
break;
}
$log->num = $log->num * 100;
}
return $this->success('ok', $logs);
} catch (\Exception $e) {
$this->getError($e);
return $this->failure('获取收益记录失败,请稍后再试');
}
}
/**
* 提现记录
*/
public function assetWithdrawLogs(Request $request)
{
try {
$user = auth()->user();
$asset = $user->userAsset();
$logs = AssetLog::where('user_id',$asset->user_id)->where('type', 3)->select('id', 'user_id', 'num', 'type', 'is_hooked','created_at')->orderBy('id', 'desc')->paginate();
foreach ($logs as $log) {
$log->type_name = $log->is_hooked?'微信-提现成功':'微信-提现审核中';
$log->num = $log->num * 100;
}
return $this->success('ok', $logs);
} catch (\Exception $e) {
$this->getError($e);
return $this->failure('获取收益提现失败,请稍后再试');
}
}
/**
* 消费记录
*/
public function assetConsumeLogs(Request $request)
{
try {
$user = auth()->user();
$asset = $user->userAsset();
$logs = AssetLog::where('user_id',$asset->user_id)->where('type', 6)->select('id', 'user_id', 'num', 'type', 'is_hooked', 'created_at')->orderBy('id', 'desc')->paginate();
foreach ($logs as $log) {
$log->type_name = '消费';
$log->num = $log->num * 100;
}
return $this->success('ok', $logs);
} catch (\Exception $e) {
$this->getError($e);
return $this->failure('获取收益提现失败,请稍后再试');
}
}
/**
* 提现
* @param Request $request [description]
* @return [type] [description]
*/
public function assetWithdraw(Request $request)
{
try {
$score = $request->input('score');
if (empty($score)) {
return $this->failure('提现失败,没有金额');
}
//钱包
$user = auth()->user();
$asset = $this->getUserAsset($user);
//剩余金额
$remain_cash = bcadd($asset->cash, $asset->share_cash, 2);
//判断金额是否足够
if ($remain_cash < $score) {
return $this->failure('提现失败,余额不足');
}
\DB::beginTransaction();
//修改余额
if ($asset->share_cash >= $score) {
$asset->decrement('share_cash', $score);
}else{
$cash = bcsub($score, $asset->share_cash);
$asset->decrement('share_cash', $asset->share_cash);
$asset->decrement('cash', $cash);
}
//创建提现记录
$log = new AssetLog;
$log->user_id = $user->id;
$log->num = $score;
$log->real_num = $score;
$log->type = 3;
$log->is_hooked = 0;
$log->account = 1;
$log->score = bcadd($asset->cash, $asset->share_cash, 2);
$log->save();
\DB::commit();
return $this->success('ok');
} catch (\Exception $e) {
\DB::rollback();
$this->getError($e);
return $this->failure('提现失败,请稍后再试');
}
}
/**
* 给用户写上标签
*/
public function post_user_label(Request $request)
{
$user = auth()->user();
$other_user_id = $request->other_user_id;
$labels = $request['labels'];
$labels = json_encode($labels);
$start = Carbon::today();
$end = Carbon::tomorrow();
//当前用户是否打开夸夸我功能
$info = UserInfo::where('user_id',$request->user_id)->first();
if($info && $info->label_notice == 0) return $this->failure('对方已关闭夸夸功能');
$exist = LabelHistory::where('user_id',$user->id)->where('labeled_user_id',$other_user_id)->wherebetween('created_at',[$start,$end])->count();
if($exist) return $this->failure('今天你已经夸过Ta了明天再夸吧~');
if($labels){
$LabelHistory = new LabelHistory;
$LabelHistory->user_id = $user->id;
$LabelHistory->labeled_user_id = $other_user_id;
$LabelHistory->content = $labels;
$LabelHistory->save();
}
$url = $this->getMiniUrl($request->other_user_id);
$url = \CommonUtilsService::shortUrl($url);
$message = '刚刚有人夸夸了你,点击链接(' . $url['url'] . ')快来看看吧';
$send_user = User::where('id', $other_user_id)->first();
//关闭资料 介绍人不发
if($send_user->hidden_profile != 'ALLSEX' || $send_user->type != 'single'){
//是否系统设置不通知
$log = UserMessageSetting::where(['user_id'=>$send_user->id, 'type'=>'label'])->first();
if (empty($log)) $this->sentMessage($send_user->mobile,$message);
}
$key = 'get_user_label_app'.$other_user_id;
cache::forget($key);
$LabelHistory->content = implode(' ',$request['labels']);
$LabelHistory->avatar = $LabelHistory->user->avatar;
unset($LabelHistory->user);
return $this->success('评价成功~',$LabelHistory);
}
// 获取用户标签
public function get_user_label(Request $request)
{
$key = 'get_user_label_app'.$request->user_id;
//当前用户是否打开夸夸我功能
$info = UserInfo::where('user_id',$request->user_id)->first();
if($info && $info->label_notice == 0) return $this->success('ok',[]);
$result = cache::remember($key,5,function () use($request){
$user_id = $request->user_id;
$result = LabelHistory::select('user_id','labeled_user_id','content')->where('labeled_user_id', $user_id)->orderBy('id','desc')->get();
foreach ($result as $key => $value) {
$value->avatar = $value->user->avatar??null;
$content = json_decode($value->content,true);
$value->content = implode(' ',$content);
unset($value->user);
}
return $result;
});
return $this->success('ok',$result);
}
// 获取小程序地址
public function getMiniUrl($id)
{
$app = \WechatService::app()->access_token;
$token = $app->getToken(true);
$data = [];
$data['jump_wxa']['path'] = '/pages/home/information';
$data['jump_wxa']['query'] = 'id=' . $id;
$data = json_encode($data);
$wechaturl = 'https://api.weixin.qq.com/wxa/generatescheme?access_token=' . $token['access_token'];
$curl = curl_init();
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($curl, CURLOPT_URL, $wechaturl);
// 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("$" . $wechaturl, "https://")) {
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
}
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
$result = curl_exec($curl);
$result = json_decode($result, true);
$jump_url = $result['openlink'];
$path = env('APP_URL').'/h5/#/jump_url?url='.$jump_url;
return $path;
}
/**
* 记录手机信息
* @return [type] [description]
*/
public function storeDeviceInfo(Request $request)
{
try {
$device_idfa = $request->header('device-idfa');
$client_os = $request->header('client-os');
$device_imei = $request->header('device-imei');
$device_model = $request->header("device-model");
if (empty($device_idfa) && empty($client_os) && empty($device_imei) && empty($device_model)) return $this->failure('参数错误');
$back_log = null;
$quick_back_log = null;
if ($client_os == 'IOS') {
$info = DeviceInfo::where(['device_idfa'=> $device_idfa])->first();
//查询积分墙
$back_log = BackActivation::where('idfa', $device_idfa)->first();
$imeiMD5 = null;
}else{
$info = DeviceInfo::where(['device_imei'=> $device_imei])->first();
//查询快手
$imeiMD5 = md5($device_imei);
$quick_back_log = QuickBackActivation::where('imei', $imeiMD5)->first();
}
if (empty($info)) {
//生成记录
$info = new DeviceInfo;
$info->device_idfa = $device_idfa;
$info->client_os = $client_os;
$info->device_imei = $device_imei;
$info->device_model = $device_model;
$info->imei_md5 = $imeiMD5;
$info->save();
AdBackActivation::dispatch($back_log)->onQueue('love');
$arr = [
'event_type'=>1,
'quick_back_log'=>$quick_back_log,
];
AdQuickBackActivation::dispatch($arr)->onQueue('love');
}
return $this->success('ok', $info);
} catch (\Exception $e) {
$this->getError($e);
return $this->failure('存储手机信息失败');
}
}
public function userMoments(Request $request)
{
try {
$result = $this->momentService->userMoments(auth()->id());
if (empty($result)) throw new \Exception("用户动态列表失败", 1);
return $this->success('ok', $result);
} catch (\Exception $e) {
$this->getError($e);
return $this->failure('获取用户动态列表失败,请稍后再试');
}
}
/**
* 提现福币
* @param Request $request [description]
* @return [type] [description]
*/
public function userWithdrawCoin(Request $request)
{
try {
//检查
return $this->failure('提现福币失败,请稍后再试');
$result = $this->userCon->checkWithdrawCoin();
if (empty($result)) throw new \Exception("检查提现失败", 1);
if (is_array($result) && $result['code']) return $this->failure($result['msg']);
//生成提现记录,等待后台审核
$result = $this->userCon->withdrawCoin();
if (empty($result)) throw new \Exception("提现失败", 1);
return $this->success('ok', '提现申请成功');
} catch (\Exception $e) {
$this->getError($e);
return $this->failure('提现福币失败,请稍后再试');
}
}
/**
* 福币提现记录
* @param Request $request [description]
* @return [type] [description]
*/
public function userWithdrawCoinLogs(Request $request)
{
try {
$user = auth()->user();
$logs = $user->coinWithdrawLogs()->orderBy('id', 'desc')->paginate();
return $this->success('ok', $logs);
} catch (\Exception $e) {
$this->getError($e);
return $this->failure('获取福币提现记录失败,请稍后再试');
}
}
public function userAlipayBindInfo(Request $request)
{
$result = \AlipayService::infoStr();
return $this->success('ok', $result);
}
//双通道分享记录
public function shareTrace(Request $request)
{
$data['resume_page'] = $request->input('resume_page');
$data['params_data'] = $request->input('params_data');
$data['channel'] = $request->input('channel');
$data['device_model'] = $request->header('device-model');
$data['device_idfa'] = $request->header('device-idfa');
$data['device_imei'] = $request->header('unique-device');
$client = $request->header('client-os');
if ($data['params_data']) {
if ($client == "IOS") {
$trace = ShareTrace::where('device_idfa', $data['device_idfa'])->first();
}else{
$trace = ShareTrace::where('device_imei', $data['device_imei'])->first();
}
if ($trace) {
$trace->update($data);
}else{
ShareTrace::create($data);
}
}
return $this->success('ok');
}
/**
* 设置破冰问题
* @param Request $request [description]
*/
public function setFriendQuestion(Request $request)
{
try {
$user = auth()->user();
if (empty($request->input('question_id')) && empty($request->input('content'))) return $this->failure('请选择破冰内容');
if (empty($request->input('question_id')) && $request->input('content')) {
//检测问题合规
$result = \CommonUtilsService::textContentCecurity([$request->input('content')]);
if ($result && $result['result']) {
return $this->failure('您填写的内容【'.$result['context']."】:".$result['result'].",请重新输入");
}
//创建问题
$question = $user->friendQuestions()->firstOrCreate([
'title'=>$request->input('content'),
]);
$request->question_id = $question->id;
}
//查看破冰问题
$user_question = $user->userFriendQuestion;
//设置破冰问题
if (empty($user_question)) {
$user_question = $user->userFriendQuestion()->create([
'friend_question_id'=>$request->question_id,
]);
}else{
$user->userFriendQuestion()->update([
'friend_question_id'=>$request->question_id,
]);
$user_question->friend_question_id = (int)$request->question_id;
}
return $this->success('ok', $user_question);
} catch (\Exception $e) {
$this->getError($e);
return $this->failure('设置破冰问题失败,请稍后再试');
}
}
/**
* 破冰问题列表(随机三个)
* @param Request $request [description]
* @return [type] [description]
*/
public function friendQuestions(Request $request)
{
try {
$ids = FriendQuestion::where(function($sql){
$sql->whereNull('user_id')->orWhere('user_id', auth()->id());
})->pluck('id')->toArray();
$result = array_rand($ids,3);
$sub_ids = [];
foreach ($result as $re) {
$sub_ids[] = $ids[$re];
}
$questions = FriendQuestion::whereIn('id', $sub_ids)->orderBy('id', 'desc')->get();
return $this->success('ok', $questions);
} catch (\Exception $e) {
$this->getError($e);
return $this->failure('获取破冰问题失败,请稍后再试');
}
}
/**
* 增加打招呼次数
*/
public function sayHello(Request $request)
{
$user = auth()->user();
try {
$result = $user->updateCoinInfo('sub', 10);
if (empty($result))
return $this->failure('修改福币信息失败~');
CoinLog::create([
'user_id' => $user->id,
'type' => 'friend_request',
'type_id' => 0,
'coin' => 10,
'remark' => '购买打招呼次数',
'is_hooked' => 1
]);
\DB::commit();
return $this->success('购买成功');
} catch (\Exception $e) {
\DB::rollback();
$this->getError($e);
return $this->failure('购买失败。');
}
}
/**
* 绑定微信
* @param Request $request [description]
* @return [type] [description]
*/
public function bindWechat(Request $request)
{
try {
//传入微信信息
$openid = $request->input('openid');
if (empty($openid)) throw new \Exception('绑定微信失败,缺少微信信息', 1);
//判断该微信号是否已绑定其他账号
$log = Wechat::where('app_openid', $openid)->where('user_id', '<>', auth()->id())->first();
if ($log) return $this->failure('绑定失败,该微信号已经绑定其他福恋账号');
$unionid = $request->input('unionid');
//获取wechat信息
$wechat = auth()->user()->wechat;
if (empty($wechat)) {
$wechat = auth()->user()->wechat()->create([
'app_openid'=>$openid,
'unionid'=>request()->input('unionid'),
'avatar'=>$request->input('headimgurl'),
'nickname'=>$request->input('nickname'),
'country'=>$request->input('country'),
'province'=>$request->input('province'),
'city'=>$request->input('city'),
'gender'=>$request->input('sex'),
]);
}else{
$wechat->app_openid = $openid;
$wechat->unionid = $wechat->unionid?:$unionid;
$wechat->save();
}
return $this->success('ok');
} catch (\Exception $e) {
$this->getError($e);
return $this->failure('绑定微信失败,请稍后再试');
}
}
/**
* 网易用户信息
* @return [type] [description]
*/
public function wyUserInfo(Request $request)
{
$accids = $request->accids;
$im = new IMService();
$result = $im->getUinfos($accids);
return $this->success($result);
}
//分区用户
public function areaUser(Request $request){
$area_id = $request->input('area_id', 1);
$area_users = AreaUser::with(['user:id,circle_avatar,photo,app_avatar,nickname,name,sex', 'user.profileCourtship'])->whereHas('user', function ($query){
$query->where('type', 'single')->where('hidden_profile', 'NONE');
})->where('area_id', $area_id)->where('is_audited', 1)->where('is_show', 1)->orderBy('sort', 'asc')->orderBy('id','desc');
$area_users = $area_users->paginate(16);
foreach ($area_users as $area_user){
$area_user->user->birthday = '';
if($area_user->user->profileCourtship){
$area_user->user->birthday = $area_user->user->profileCourtship->birthday;
$area_user->user->age = !empty($area_user->user->profileCourtship->birthday) ? \CommonUtilsService::getAge($area_user->user->profileCourtship->birthday) : 0;
$area_user->user->city = !empty($area_user->user->profileCourtship->city) ? $area_user->user->profileCourtship->city: '';
}
unset($area_user->user->profileCourtship);
}
return $this->success('ok', $area_users);
}
//处理群主无法加好友问题
public function group(Request $request)
{
//获取所有群的群主
$ids = Team::pluck('owner','id');
$num = 0;
foreach ($ids as $key => $value) {
UserTeam::where('user_id',$value)->where('team_id',$key)->update(['type'=>1]);
$num++;
}
return '已经更新了'.$num.'个群组';
}
/** 我的访问 */
public function myPreviewHistroies(Request $request){
$user = auth()->user();
$user_id = $user->id;
$linkings = UserPreview::
with('otherpreviewUser:id,nickname,photo,app_avatar,age,is_approved,sex,rank_id',
'otherpreviewUser.profileCourtship:user_id,birthday,city,stature')
->whereHas('otherpreviewUser', function($sql) {
$sql->where('hidden_profile', 'NONE');/*->where('type', 'single')*/;
})->whereNotNull('preview_time')
->where('preview_user_id', $user_id)
->orderBY('preview_time', 'desc')
->paginate();
foreach ($linkings as $linking) {
$linking->nickname = $linking->otherpreviewUser->nickname;
$linking->id = $linking->otherpreviewUser->id;
$linking->is_approved = $linking->otherpreviewUser->is_approved;
$linking->isSuperRank = $linking->otherpreviewUser->isSuperRank()?1:0;
$linking->sex = $linking->otherpreviewUser->sex;
$profile_courtship = $linking->otherpreviewUser->profileCourtship;
$linking->age = \CommonUtilsService::getAge($profile_courtship?$profile_courtship->birthday:null);
$linking->profile_courtship = $profile_courtship;
$linking->photo = $linking->otherpreviewUser->userAvatar();
unset($linking->otherpreviewUser,$linking->user_id,$linking->previewe_user_id,$linking->status);
}
UserPreview::whereHas('user', function($sql){
$sql->where('hidden_profile', '<>', 'ALLSEX');
})->where('user_id', $user->id)->where('preview_user_id', '<>',$user->id)->where('status', 0)->update(['status'=>1]);
return $this->success('ok', $linkings);
}
//用户注销账号
public function closeAccount(Request $request){
$user_id = auth()->user()->id;
//账号
try {
$user = auth()->user();
$user->hidden_profile = 'ALLSEX';
$user->save();
// UserHiddenHistory::where('user_id', $user->id)->firstOrCreate(['user_id'])
return $this->success('ok');
DB::beginTransaction();
ApproveHistory::where('user_id',$user_id)->delete();
User::where('id', $user_id)->update([
'name'=>null,
'nickname'=>null,
'age'=>0,
'card_num'=>null,
'app_avatar'=>null,
'circle_avatar'=>null,
'is_approved'=>0,
'is_real_approved'=>0,
'is_educate_approved'=>0,
'industry'=>null,
'industry_sub'=>null,
'deleted_at'=>date('Y-m-d H:i:s')
]);
//微信信息
Wechat::where('user_id', $user_id)->delete();
ProfileCourtship::where('user_id', $user_id)->delete();
ProfileMarriage::where('user_id', $user_id)->delete();
//群组
UserGroup::where('user_id', $user_id)->delete();
//提示
Notice::where('user_id', $user_id)->orWhere('send_user_id', $user_id)->delete();
//联系人
MessageLinkman::where('user_id', $user_id)->orWhere('other_user_id', $user_id)->delete();
//聊天记录
ChatMessage::where('user_id', $user_id)->orWhere('other_user_id', $user_id)->delete();
//匹配
MatchingRate::where('user_id', $user_id)->orWhere('other_user_id', $user_id)->delete();
//加好友请求
LinkingRequest::where('user_id', $user_id)->orWhere('user_linking_id', $user_id)->delete();
//访问记录
UserPreviewHistory::where('user_id', $user_id)->orWhere('user_id', $user_id)->forceDelete();
//h5用户
Viewer::where('user_id', $user_id)->update(['user_id'=>0,'mobile'=>'']);
$linkings = Linking::where('user_id', $user_id)->orWhere('user_linking_id', $user_id)->get();
foreach ($linkings as $linking) {
if ($linking->user_id != $user_id) {
User::where('id', $linking->user_id)->decrement('friend_count', 1);
}else{
User::where('id', $linking->user_linking_id)->decrement('friend_count', 1);
}
}
//好友
Linking::where('user_id', $user_id)->orWhere('user_linking_id', $user_id)->delete();
ProfilePhoto::where('user_id',$user_id)->delete();
//加好友问题回答
FriendQuestionAnswer::where('user_id' ,$user_id)->delete();
//微信通知id
FormId::where('user_id', $user_id)->delete();
//关注
Followable::where('user_id', $user_id)->orWhere('Followable_id', $user_id)->delete();
//操作记录
Dynamic::where('user_id', $user_id)->delete();
//举报记录
ComplaintHistory::where('user_id', $user_id)->orWhere('complaint_id', $user_id)->delete();
//文章记录
ArticleHistory::where('user_id', $user_id)->delete();
//红娘
Matchmaker::where('user_id', $user_id)->delete();
//盟爱
GoodMatch::where('user_id', $user_id)->delete();
//客戶
MatchmakerClient::where('client_user_id', $user_id)->delete();
//浏览记录
UserPreview::where('user_id', $user_id)->delete();
//征婚推荐
CommunityStar::where('user_id', $user_id)->delete();
//增加操作记录
AdminLog::create([
'path'=> $request->path(),
'method'=>$request->method(),
'user_id'=>$user_id,
'param'=>json_encode(['用户注销账号']),
'model'=>null,
'model_id'=>0,
]);
DB::commit();
return $this->success('delete ok');
} catch (\Exception $e) {
DB::rollBack();
$this->getError($e);
return $this->failure('服务器休息,请稍后再试');
}
}
}