sms = $sms; $this->userCon = $userCon; } public function users(Request $request) { $user_id = auth()->id(); //是否是推广团队 // $is_promote = RoleUser::where('user_id', $user_id)->where('role_id', 6)->count(); // $platfroms = Platform::where('paas_id', 33)->pluck('app_id')->toArray(); $users = User::with('wechat', 'systemBlacklist:user_id,reason,photos', 'profileCourtship', 'profileMarriage', 'clientComments', 'userInfo')->withCount('profilePhoto'); $type = $request->input('type', ''); //单身、介绍人 if ($type && $type != 'all') { if ($type == 'marriage') { $users = $users->where('type', '<>', 'single'); } else { $users = $users->where('type', $type); } } // if($is_promote){ // $users = $users->whereIn('from_platform', $platfroms); // } //搜索 $keyword = $request->input('keyword', ''); if ($keyword) { $keyword = trim($keyword); $users = $users->where(function ($sql) use ($keyword) { $sql->where('name', 'like', '%' . $keyword . '%') ->orWhere('id', $keyword) ->orWhere('mobile', 'like', '%' . $keyword . '%') ->orWhere('nickname', 'like', '%' . $keyword . '%'); }); // $users = $users->when($keyword, function ($query) use ($keyword) { // $query->where(DB::raw('concat(name,id,mobile,nickname)'), 'like', "%{$keyword}%"); // }); } $is_account_wall = $request->is_account_wall ?? 3; //已标记用户上墙用户 $has_wall_ids = UserInfo::where('is_account_wall', '<>', 0)->pluck('user_id')->toArray(); if ($is_account_wall && $is_account_wall != 3) { $users = $users->whereHas('userInfo', function ($sql) use ($is_account_wall) { $sql->where('is_account_wall', $is_account_wall); }); } if ($is_account_wall == 0) { $users = $users->whereNotIn('id', $has_wall_ids); } //恋爱中 ? 已婚 ? $emotional_state = $request->emotional_state; if ($emotional_state) { $users = $users->whereHas('userInfo', function ($sql) use ($emotional_state) { $sql->where('emotional_state', $emotional_state); }); } //性别 $sex = $request->input('sex', 0); if (is_numeric($sex) && $sex) { $users = $users->where('sex', $sex); } if (is_numeric($request->live_match_maker)) { $users = $users->where('live_match_maker', $request->live_match_maker); if (is_numeric($request->have_given)) { $maker_id = MakerScoreLog::where('have_given', $request->have_given)->pluck('user_id')->toArray(); $users = $users->whereIn('id', $maker_id); } } //是否关注公众号 $is_subscribe = $request->is_subscribe; if ($is_subscribe == '已关注') { $users = $users->where('is_subscribe', 1); } if ($is_subscribe == '未关注') { $users = $users->where('is_subscribe', 0); } //是否关闭资料 $is_closed = $request->is_closed; if ($is_closed == '没关资料') { $users = $users->where('hidden_profile', '<>', 'ALLSEX'); } if ($is_closed == '关闭资料') { $users = $users->where('hidden_profile', 'ALLSEX'); } //是否完善基础资料 $base_info = $request->base_info; if ($base_info == '未完善推荐资料') { $users = $users->whereHas('profileCourtship', function ($sql) { $sql->where(function ($query) { $query->orWhereNull('birthday')->orWhereNull('city')->orWhereNull('belief')->orWhereNull('sex'); }); }); } //收入筛选 $income = $request->income; if ($income) { $users = $users->whereHas('profileCourtship', function ($sql) use ($income) { $sql->where('income', $income); }); } if ($base_info == '完善推荐资料') { $users = $users->whereHas('profileCourtship', function ($sql) { $sql->where(function ($query) { $query->whereNotNull('birthday')->whereNotNull('city')->whereNotNull('belief')->whereNotNull('sex'); }); }); } //实名认证 $is_approved = $request->is_approved; if (is_numeric($is_approved)) { $users = $users->where('is_approved', $is_approved); } $is_tag = $request->is_tag; if (is_numeric($is_tag) && $is_tag == 1) {//被标记 $wrong_ids = WrongInfoHistories::where('type', 'tag')->pluck('user_id')->toArray();//被标记用户id $users = $users->whereIn('id', $wrong_ids); } if (is_numeric($is_tag) && $is_tag == 2) {//未被标记 $wrong_ids = WrongInfoHistories::where('type', 'tag')->pluck('user_id')->toArray();//被标记用户id $users = $users->whereNotIn('id', $wrong_ids); } //学历认证 if ($request->is_educate_approved == 1) { //通过学历认证 $users = $users->where('is_educate_approved', 1);//1通过 2审核 3.未认证 0 拒绝 } if ($request->is_educate_approved == 3) { //未通过学历认证 $users = $users->whereIn('is_educate_approved', [0, 2, 3]); } //生活照数量 if ($request->input('min_num') || $request->input('max_num')) { $min_num = $request->input('min_num') ? $request->input('min_num') : 0; $max_num = $request->input('max_num') ? $request->input('max_num') : 9; $user_ids = ProfilePhoto::selectRaw('count(id) as photo_count,user_id')->groupBy('user_id')->having('photo_count', '>=', $min_num)->having('photo_count', '<=', $max_num)->pluck('user_id'); $users = $users->whereIn('id', $user_ids); } //自我介绍字数 if ($request->input('min_word') || $request->input('max_word')) { $min_word = $request->input('min_word') ? $request->input('min_word') : 0; $max_word = $request->input('max_word') ? $request->input('max_word') : 999; $user_ids = ProfileCourtship::selectRaw('char_length(introduction) as words,user_id')->groupBy('user_id')->having('words', '>=', $min_word)->having('words', '<=', $max_word)->pluck('user_id'); $users = $users->whereIn('id', $user_ids); } //择偶选择字数 if ($request->input('min_love') || $request->input('max_love')) { $min_love = $request->input('min_love') ? $request->input('min_love') : 0; $max_love = $request->input('max_love') ? $request->input('max_love') : 999; $user_ids = ProfileCourtship::selectRaw('char_length(ideal_mate) as words,user_id')->groupBy('user_id')->having('words', '>=', $min_love)->having('words', '<=', $max_love)->pluck('user_id'); $users = $users->whereIn('id', $user_ids); } //颜值筛选 if ($request->input('min_face_score') || $request->input('max_face_score')) { $min_face_score = $request->input('min_face_score') ? $request->input('min_face_score') : 0; $max_face_score = $request->input('max_face_score') ? $request->input('max_face_score') : 100; $users = $users->whereBetween('face_score', [$min_face_score, $max_face_score])->orderBy('face_score', 'desc'); } $is_real_approved = $request->is_real_approved; if (is_numeric($is_real_approved)) { $real_approve_users = ApproveHistory::where('status', 1)->where('type', 'body'); if (is_numeric($request->approve_from_id)) { $real_approve_users = $real_approve_users->where('from_user_id', $request->approve_from_id); } if ($request->approve_from_platform) { $real_approve_users = $real_approve_users->where('from_platform', $request->approve_from_platform); } $real_approve_users = $real_approve_users->pluck('user_id')->toArray(); $users = $users->where('is_real_approved', $is_real_approved); if ($is_real_approved == 1 && ($request->approve_from_id || $request->approve_from_platform)) { $users = $users->whereIn('id', $real_approve_users); $orderby = implode(',', $real_approve_users); if (!empty($orderby)) { $users = $users->orderByRaw(DB::raw("FIELD(id, $orderby) desc")); } } } //头像认证 if (is_numeric($request->is_photo_audited)) { $users = $users->where('is_photo_audited', $request->is_photo_audited); } //时间 $start_time = $request->input('start_time'); $end_time = $request->input('end_time'); if ($start_time && $end_time) { $users = $users->whereBetween('created_at', [$start_time, $end_time]); } // $admin_type = $request->session()->get('admin_type'); // if ($admin_type == 'paas_admin') { // $paas_obj = $request->session()->get('paas_obj'); // $paas_user_ids = $this->userCon->paasUserIds($paas_obj->name); // $users = $users->whereIn("id", $paas_user_ids); // } //是否是会员 $is_vip = $request->input('is_vip'); if (is_numeric($is_vip) && $is_vip) { $users = $users->where('rank_id', '>', 0); } //是否付费vip $cash_vip = $request->input('cash_vip'); if (is_numeric($cash_vip) && $cash_vip) { $cash_vip_user_ids = Order::whereIn('type', ['rank', 'single_service'])->where('pay_status', 'PAID')->pluck('user_id')->toArray(); if ($cash_vip == 1) { $users = $users->whereIn('id', $cash_vip_user_ids); } else { //当前是vip但没付费 $users = $users->where('rank_id', '>', 0)->whereNotIn('id', $cash_vip_user_ids); } } if ($request->input('small_age') || $request->input('max_age')) { $small_age = $request->input('small_age', 0); $max_age = $request->input('max_age', 100); $small_time = date('Y-00-00 00:00:00', strtotime("-$small_age year")); $max_time = date('Y-00-00 00:00:00', strtotime("-$max_age year")); $users = $users->whereHas('profileCourtship', function ($sql) use ($max_time, $small_time) { $sql->whereBetween('birthday', [$max_time, $small_time]); }); } if ($request->input('start_birth') || $request->input('end_birth')) { $start_birth = $request->input('start_birth'); $end_birth = $request->input('end_birth'); $users = $users->whereHas('profileCourtship', function ($sql) use ($start_birth, $end_birth) { $sql->whereBetWeen('birthday', [$start_birth, $end_birth]); }); } if ($request->has('have_remark') && is_numeric($request->have_remark)) { if ($request->have_remark == 0) { $users = $users->where('tag_num', 0); } else { $users = $users->where('tag_num', '!=', 0); } } if ($request->input('small_height') || $request->input('max_height')) { //身高 $small_height = $request->input('small_height', 0); $max_height = $request->input('max_height', 250); $users = $users->whereHas('profileCourtship', function ($sql) use ($small_height, $max_height) { $sql->whereBetween('stature', [$small_height, $max_height]); }); } if ($request->has('city') && $request->city) { $city = $request->city; $users = $users->whereHas('profileCourtship', function ($query) use ($city) { $query->where('city', 'like', '%' . $city . '%'); }); } if ($request->has('province') && $request->province && !$request->city) { $province = $request->province; $users = $users->whereHas('profileCourtship', function ($query) use ($province) { $query->where('province', 'like', '%' . $province . '%'); }); } if ($request->has('resident_city') && $request->resident_city) { $resident_city = $request->resident_city; $users = $users->whereHas('profileCourtship', function ($query) use ($resident_city) { $query->where('resident_city', 'like', '%' . $resident_city . '%'); }); } if ($request->has('resident_province') && $request->resident_province) { $resident_province = $request->resident_province; $users = $users->whereHas('profileCourtship', function ($query) use ($resident_province) { $query->where('resident_province', 'like', '%' . $resident_province . '%'); }); } if ($request->user_type == 'official') { $official_user_ids = Db::table('user_register_channels')->where('channel', '=', 'official')->pluck('user_id')->toArray(); $users = $users->whereIn('id', $official_user_ids); } if ($request->user_type == 'mini_program') { $mini_program_user_ids = Db::table('user_register_channels')->where('channel', '=', 'mini_program')->pluck('user_id')->toArray(); $users = $users->whereIn('id', $mini_program_user_ids); } if ($request->user_type == 'app') { $app_user_ids = Db::table('user_register_channels')->whereNotIn('channel', ['mini_program', 'official'])->pluck('user_id')->toArray(); $users = $users->whereIn('id', $app_user_ids); } if ($request->min_degree || $request->max_degree) { if ($request->min_degree > $request->max_degree) return $this->failure('学历筛选区间有误'); $degrees = $this->degreeSortV2($request->min_degree, $request->max_degree); $users->whereHas('profileCourtship', function ($query) use ($degrees) { $query = $query->whereIn('degree', $degrees); if (in_array('未认证', $degrees)) { $query = $query->orWhereNull('degree'); } }); // $users = $users->whereIn('id',$degree_user_ids); } //单身状态 if ($request->state && $request->state != 'all') { $state = $request->state; $users = $users->whereHas('profileCourtship', function ($query) use ($state) { $query->where('state', $state); }); } //搜索备注 if ($request->client_comment) { $comment_user_ids = ClientComment::where('comment', 'like', '%' . $request->client_comment . '%')->pluck('user_id')->toArray(); $users = $users->whereIn('id', $comment_user_ids); } if ($request->is_black) { $black_user_id = SystemBlacklist::pluck('user_id')->toArray(); $users = $users->with('blackList')->WhereIn('id', $black_user_id); } if ($request->belief && $request->belief != 'all') { $users = $users->where('belief', $request->belief); } if ($request->orderby) { switch ($request->orderby) { case 'last_visit': $users = $users->orderBy('last_visit', 'desc'); break; case 'bind_mobile': $bind_mobile_user_ids = UserInfo::whereNotNull('bind_mobile_at')->orderBy('bind_mobile_at', 'asc')->pluck('user_id')->toArray(); // $users = $users->whereIn('id',$bind_mobile_user_ids); $bind_mobile_user_ids = implode(',', $bind_mobile_user_ids); $users = $users->orderByRaw(DB::raw("FIELD(id, $bind_mobile_user_ids) desc")); break; } } if ($request->start_last_visit && $request->end_last_visit) { $users = $users->whereBetween('last_visit', [$request->start_last_visit, $request->end_last_visit]); } $last_id = User::whereNotNull('mobile')->orderBy('id', 'desc')->limit('76')->pluck('id')->sort()->first(); if (count($request->all()) == 1) {//不带搜索条件 只有page参数 $users = $users->whereNotNull('mobile')->where('id', '>', $last_id); } //CRM是否被领取 $is_crm = $request->input('is_crm'); if (is_numeric($is_crm)) { if ($is_crm) { $users = $users->whereHas('crmUserLogs', function($sql) { $sql->where('status', 1); }); }else { $users = $users->whereDoesntHave('crmUserLogs', function($sql) { $sql->where('status', 1); }); } } //行业 $industry = $request->input('industry'); if ($industry) { $users = $users->where('industry', $industry); } //职位 $industry_sub = $request->input('industry_sub'); if ($industry_sub && $industry != '其他行业') { $users = $users->where('industry_sub', $industry_sub); } //期望结婚 $marry_by_time = $request->input('marry_by_time'); if ($marry_by_time) { $users = $users->whereHas('profileCourtship', function ($query) use ($marry_by_time) { $query->where('marry_by_time', $marry_by_time); }); } $users = $users->select('id', 'nickname', 'name', 'sex', 'app_avatar', 'photo', 'circle_avatar', 'is_approved', 'is_real_approved', 'rank_id', 'type', 'is_photo_audited', 'is_educate_approved', 'created_at', 'location_latitude', 'location_longitude', 'from_openid', 'live_match_maker', 'become_maker_at', 'belief', 'tag_num', 'last_visit', 'approve_date', 'face_score', 'from_user_id', 'regist_channel', 'mobile', 'industry', 'industry_sub', 'hidden_profile') ->orderBy('id', 'desc')->paginate(); $is_account_wall = 0; foreach ($users as $user) { $user->has_mobile = $user->mobile === NULL ? 0 : 1; $regist_channel = DB::table('user_register_channels')->where('user_id', $user->id)->value('channel'); if (!empty($regist_channel)) $user->regist_channel = $regist_channel; $is_account_wall = $user->userInfo ? $user->userInfo->is_account_wall : 0; $user->is_account_wall = $is_account_wall; $cash_vip = Order::where('user_id', $user->id)->where('type', 'rank')->where('pay_status', 'PAID')->first(); $user->cash_vip = !empty($cash_vip) ? 1 : 0; // if ($user->type == 'single') { // $profile = $user->profileCourtship; // }else{ // $profile = $user->profileMarriage; // } $profile = $user->profileCourtship ?: $user->profileMarriage; if ($profile) { $user->province = $profile->province; $user->city = $profile->city; $user->stature = $profile->stature; $user->degree = $profile->degree; $user->state = $profile->state; $user->resident_province = $profile->resident_province; $user->resident_city = $profile->resident_city; $user->income = $profile->income; $user->birthday = $profile->birthday; $user->age = \CommonUtilsService::getAge($profile->birthday); } $bind_mobile_at = $user->userInfo ? $user->userInfo->bind_mobile_at : null; if (!$bind_mobile_at && $user->mobile) $bind_mobile_at = $user->created_at->toDateTimeString(); $user->bind_mobile_at = $bind_mobile_at; $wechat = $user->wechat; $user->avatar = $user->userAvatar(); $user->rank = $this->memberType($user->rank_id, $user->temp_member); $result = $this->userCon->hideMobile($request, $user->id); $user->mobile = $result ? '******' : $user->mobile; if (Cache::has(User::RDLASTTIMEKEY . $user->id)) { $user->last_visit = Cache::get(User::RDLASTTIMEKEY . $user->id); } elseif (empty($user->last_visit)) { $user->last_visit = $user->created_at->toDateTimeString(); } // 是否备注过 $user->have_comment = !empty($user->tag_num) ? $user->clientComments : "未备注"; if (is_numeric($request->approve_from_id)) { $user->real_approved_at = ApproveHistory::where('type', 'body')->where('status', 1)->where('user_id', $user->id)->value('updated_at'); } unset($user->clientComments); unset($user->profileCourtship); unset($user->profileMarriage); unset($user->wechat); //统计app直播红娘 if (is_numeric($request->live_match_maker)) { $all_hours = InteractLiveLog::selectRaw('sum(round((UNIX_TIMESTAMP(end_time)-UNIX_TIMESTAMP(created_at))/3600, 2)) AS hours')->where('mk_user_id', $user->id)->whereNotNull('end_time')->value('hours'); $user->all_hours = $all_hours ?: 0.00; } // if($is_promote){ // $user->mobile = substr_replace($user->mobile,'****',3,4); // } //封号图片 if ($user->systemBlacklist) { $user->systemBlacklist->photos = json_decode($user->systemBlacklist->photos, true); } //真人认证时间 if ($user->bodyApproveLog) { $user->approve_date = $user->bodyApproveLog->updated_at->toDateTimeString(); } $user->mobile = '';//隐藏客户手机号 unset($user->bodyApproveLog); //用户是否是商家用户(saas交友管理) $m_user_id = $this->matchMerchantUser($user->id); $m_ids = IdentityAuthorization::where('m_user_id', $m_user_id)->pluck('m_id')->toArray(); $user->from_saas = 0; if ($m_ids && $user->hidden_profile == 'ALLSEX') $user->from_saas = 1; } return $this->success('ok', $users); } //真人认证列表 public function approveList(Request $request) { $histories = ApproveHistory::with('user:id,nickname,name,sex,age,mobile,photo,app_avatar,circle_avatar,belief,rank_id,type,is_photo_audited', 'user.profileCourtship:user_id,province,birthday,city', 'fromUser:nickname,id,photo,app_avatar')->where('type', 'body')->where('status', 1)->whereHas('user'); //搜索 $keyword = $request->input('keyword', ''); if ($keyword) { $keyword = trim($keyword); $histories = $histories->whereHas('user', function ($sql) use ($keyword) { $sql->where('id', $keyword) ->orwhere('name', 'like', '%' . $keyword . '%') ->orWhere('nickname', 'like', '%' . $keyword . '%') ->orWhere('mobile', 'like', '%' . $keyword . '%'); }); } $histories = $histories->orderBy('created_at', 'desc')->paginate(); foreach ($histories as $history) { if ($history->user && $history->user->profileCourtship) { $history->user->age = \CommonUtilsService::getAge($history->user->profileCourtship->birthday); $history->user->mobile = ''; // $history->user->avatar = $history->user->userAvatar(); } } return $this->success('ok', $histories); } /** * 新版用户列表 * */ // public function usersV2(Request $request) // { // $users = User::with('wechat'); // //单身&介绍人 // $type = $request->input('type'); // if ($type == 'single') { // $users = $users->where('type', 'single'); // $users = $this->getScreenPlatformUsers($request, $users); // }else{ // $users = $users->where('type', '<>', 'single'); // $users = $this->getScreenPlatformUsers($request, $users, 'marriage'); // } // $users = $users->orderBy('id', 'desc')->paginate(); // foreach ($users as $user) { // $this->getuserInfo($request, $user); // } // return $this->success('users', $users); // } public function getuserInfo($request, $user) { //头像 $wechat = $user->wechat; if (empty($wechat)) { if ($user->sex == 1) { $avatar = 'http://images.ufutx.com/201811/12/0e8b72aae6fa640d9e73ed312edeebf3.png'; } else { $avatar = 'http://images.ufutx.com/201811/12/dddd79aa2c2fc6a6f35e641f6b8fb8f5.png'; } } else { $avatar = $wechat->avatar2 ? $wechat->avatar2 : $wechat->avatar; } $user->avatar = $avatar; //邀请人数 $invite_count = 0; if ($wechat && $wechat->openid) { $invite_count = $this->userCon->inviteUsersCount($wechat, $user); } $user->invite_count = $invite_count ? $invite_count : 0; //会员 $user->rank = $this->memberType($user->rank_id, $user->temp_member); //佳偶认证 if (empty($user->goodMatch)) { $user->is_good_match = 1; } else { $user->is_good_match = 0; } //地址 $province = ''; $city = ''; if ($user->type == 'single' && $user->profileCourtship) { $province = $user->profileCourtship->province; $city = $user->profileCourtship->city; } $user->province = $province; $user->city = $city; //推荐人 if ($user->fromWechat && $user->fromWechat->user) { $user->from_name = $user->fromWechat->user->name; } elseif ($user->fromWechat) { $user->from_name = $user->fromWechat->nickname; } else { $user->from_name = ''; } //隐藏手机号 $result = $this->userCon->hideMobile($request, $user->id); $user->mobile = $result ? '******' : $user->mobile; $user->last_visit = $user->last_visit ?: '未记录'; //是否完成资料 $is_completed = $this->userCon->isCompleteProfileV3($user); $user->is_completed = $is_completed; //手机归属地 // $user->home_location = $user->homeLocation($user->mobile); // //最近所在位置 // $user->post_location = $user->positionGetAddress($user->location_longitude, $user->location_latitude); // 是否备注过 $user->have_comment = $user->tag_num ? "已备注" : "未备注"; unset($user->clientComments); return $user; } /** * 筛选平台用户 */ public function getScreenPlatformUsers($request, $users, $type = 'single') { //身高 $min_stature = $request->input("min_stature"); $max_stature = $request->input('max_stature'); //年龄 $min_age = $request->input('min_age'); $max_age = $request->input('max_age'); //性别 $sex = $request->input('sex'); //关键字 $keyword = $request->input('keyword'); //平台 $form = $request->input('form'); //是否认证 $is_approved = $request->input('is_approved'); $has_is_approved = $request->has('is_approved'); if ($type == 'single') { $users = $users->with('profileCourtship')->whereHas('profileCourtship', function ($sql) use ( $min_stature, $max_stature, $min_age, $max_age ) { if ($min_stature && $max_stature) { $sql = $sql->whereBetween('stature', [$min_stature, $max_stature]); } if ($min_age && $max_age) { //年龄转换成日期 $min_age = \CommonUtilsService::ageToDate($min_age); $max_age = \CommonUtilsService::ageToDate($max_age); $sql = $sql->whereBetween('birthday', [$max_age, $min_age]); } }); } if ($sex) { $users = $users->where('sex', $sex); } if ($keyword) { $users = $users->where(function ($sql) use ($keyword) { $sql->where('name', 'like', '%' . $keyword . '%') ->orWhere('id', 'like', '%' . $keyword . '%') ->orWhere('mobile', 'like', '%' . $keyword . '%'); }); } if ($has_is_approved) { $users = $users->where('is_approved', $is_approved); } if ($form == 'AG') { $users = $users->where('from_platform', 'community_ag'); } elseif ($form == 'PLATFORM') { $users = $users->where('from_platform', '<>', 'community_ag'); } return $users; } /** * 用户详情 * @param Request $request 参数 * @param integer $id 用户id * @return obj 用户详情 */ public function user(Request $request, $user_id) { //用户主账号信息 $user = User::with('areaUser', 'areaUser.classArea', 'bannedHistory', 'systemBlacklist', 'wrongInfo', 'clientComments:user_id,pics,comment,created_at,type,maker_user_id')->where('id', $user_id)->first(); if (empty($user)) return $this->failure('用户不存在'); //管理员账号id $admin_user_id = auth()->id(); $sex = 0; // if ($user->type == 'single') { $profile = ProfileCourtship::firstOrCreate(['user_id' => $user->id]); if ($profile) { $photos = json_decode($profile->photos, true) ? json_decode($profile->photos, true) : []; $graduate_photos = json_decode($profile->graduate_photos, true) ? json_decode($profile->graduate_photos, true) : []; $identification_photos = json_decode($profile->identification_photos, true) ? json_decode($profile->identification_photos, true) : []; $other_photos = json_decode($profile->other_photos, true) ? json_decode($profile->other_photos, true) : []; $wechat_qrcode = json_decode($profile->wechat_qrcode, true) ? json_decode($profile->wechat_qrcode, true) : []; $profile->interest_label = json_decode($profile->interest_label); $profile->photos = $photos; $profile->graduate_photos = $graduate_photos; $profile->identification_photos = $identification_photos; $profile->other_photos = $other_photos; $profile->wechat_qrcode = $wechat_qrcode; $sex = $profile->sex; $salary = Salary::where('id', $profile->salary_id)->value('text'); $profile->salary = $salary; $mate_conditon = json_decode($profile->mate_conditon, true); //过滤location unset($mate_conditon['location']); $profile->mate_conditon = $mate_conditon; } // } else { // $profile = ProfileMarriage::firstOrCreate(['user_id' => $user->id]); // if ($profile) { // $sex = $profile->sex; // } // } $user->profile = $profile; if ($user->clientComments) { foreach ($user->clientComments as $key => $value) { if ($value->pics == '[]' || !empty($value->pics)) { $value->comment_type = 'write'; } else { $value->comment_type = 'auto'; } } } $wechat = Wechat::where('user_id', $user_id)->select('user_id', 'avatar', 'gender', 'avatar2')->first(); $avatar = ''; if (!empty($wechat)) { $avatar = $wechat->avatar2 ?: $wechat->avatar; } $user->avatar = $user->userAvatar(); if (empty($sex) && $wechat) { $sex = $wechat->gender; } $user->sex = $user->sex ?: $sex; //福分 $flink_score = $this->getAccountScore($user->id); $user->flink_score = $flink_score; //测试结果 // $result = $this->testResult($user_id); // $love_languages = $result['love_languages']; // $love_characters = $result['love_characters']; // $character = $result['character']; // $user->love_languages = $love_languages; // $user->love_characters = $love_characters; // $user->character = $character; //用户等级 $rank_name = Rank::where('id', $user->rank_id)->value('name'); $user->rank_name = $rank_name; //会员期限 $rank_history = RankHistory::where('user_id', $user_id)->where('rank_id', $user->rank_id)->whereNotNull('deadline')->orderBy('deadline', 'desc')->first(); if (empty($rank_history)) { $deadline = ''; } else { $deadline = $rank_history->deadline; } $from_user_name = null; if (!empty($user->from_user_id)) { $from_user_name = User::where('id', $user->from_user_id)->value('nickname'); if (empty($from_user_name)) { $from_user_name = User::where('id', $user->from_user_id)->value('name'); } } elseif (!empty($user->from_openid)) { $from_user = User::whereHas("wechat", function ($sql) use ($user) { $sql->where('openid', $user->from_openid); })->first(); $from_user_name = $from_user ? $from_user->nickname : ''; $user->from_user_id = $from_user ? $from_user->id : ''; } $user->from_user_name = $from_user_name; $user->deadline = $deadline; if (!empty($user->from_user_id)) { $photo = User::where('id', $user->from_user_id)->value('photo'); $user->from_user_photo = $photo ?? User::DefaultAvatar; } else { $user->from_user_photo = User::DefaultAvatar; } //我的类型 $admin_type = $request->session()->get('admin_type'); if ($admin_type == 'admin' || $admin_type == 'paas_admin') { $user_is_admin = 1; } else { $user_is_admin = 0; } $admin = Admin::where('user_id', $user_id)->first(); if (empty($admin)) { $user->is_admin = 0; } else { $user->is_admin = 1; } $user->user_is_admin = $user_is_admin; //分配的红娘 // $maker_user_id = MatchmakerClient::where('client_user_id', $user_id)->value('user_id'); // $maker_name = ''; // if ($maker_user_id) { // $maker_name = User::where('id', $maker_user_id)->value('name'); // } // $user->maker_name = $maker_name; //生活照 $lifePhotos = $this->userCon->lifePhotos($user_id); $user->lifePhotos = $lifePhotos->count() ? $lifePhotos : []; //openid $user->openid = Wechat::where('user_id', $user->id)->value('openid'); //隐藏手机号 if ($request->input('show_mobile') != 1) { $result = $this->userCon->hideMobile($request, $user_id); $user->mobile = $result ? '******' : $user->mobile; } //是否完成资料 $is_completed = $this->userCon->isCompleteProfile($user->id); $user->is_completed = $is_completed; //手机归属地 $user->home_location = $user->homeLocation(); //是否付费vip // return $this->success('ok',$user->cashVip()); $user->cash_vip = $user->cashVip() ? 1 : 0; //最近所在位置 $user->post_location = $user->positionGetAddress($user->location_longitude, $user->location_latitude); $user->identification_photos = !empty($user->identification_photos) ? array_values(json_decode($user->identification_photos)) : []; //推荐平台 $paas_id = Platform::where('app_id', $user->from_platform)->value('paas_id'); if ($paas_id) { $from_paas = Paas::where('id', $paas_id)->value('name'); } else { $from_paas = ''; } $user->from_paas = $from_paas; $user->industry_arr = [$user->industry, $user->industry_sub]; // if($is_promote){ // $user->mobile = substr_replace($user->mobile,'****',3,4); // } $card_num = $user->card_num; if ($admin_user_id != 616) { if (!empty($card_num)) { $card_num = substr_replace($card_num, '********', 0, 12); } } $user->new_card_num = $card_num; //最近访问 $user->last_visit = Cache::get(User::RDLASTTIMEKEY . $user->id) ?: $user->last_visit; $user->regist_channel = DB::table('user_register_channels')->where('user_id', $user_id)->value('channel'); $user->has_mobile = $user->mobile === NULL ? 0 : 1; //加字段 判断用户权限是否被禁用 $user->ban_moment = 0; //发动态 $user->ban_moment_date = ''; $user->ban_friend = 0; //加好友 $user->ban_friend_date = ''; $user->ban_chat = 0; //聊天 $user->ban_chat_date = ''; $user->ban_user = 0; //系统黑名单 $user->ban_user_date = ''; $user->ban_live = 0; //直播间聊天 $user->ban_live_date = ''; $date = date('Y-m-d H:i:s'); if (!empty($user->bannedHistory)) { foreach ($user->bannedHistory as $history) { if ($history->type == 'moment' && $history->start_time <= $date && $history->end_time >= $date) { $user->ban_moment = 1; $user->ban_moment_date = $history->end_time; } if ($history->type == 'chat' && $history->start_time <= $date && $history->end_time >= $date) { $user->ban_chat = 1; $user->ban_chat_date = $history->end_time; } if ($history->type == 'friend' && $history->start_time <= $date && $history->end_time >= $date) { $user->ban_friend = 1; $user->ban_friend_date = $history->end_time; } } } //是否禁止直播间聊天 if ($user->viewer && $user->viewer->free_time >= $date) { $user->ban_live = 1; //直播间聊天 $user->ban_live_date = $user->viewer->free_time; } //是否被封账号 if (!empty($user->systemBlacklist) && $user->systemBlacklist->start_time <= $date && $user->systemBlacklist->end_time >= $date) { $user->ban_user = 1; $user->ban_user_date = $user->systemBlacklist->end_time; } if ($request->input('show_mobile') !=1) { $user->mobile = ''; } $user->is_account_wall = $user->userInfo ? $user->userInfo->is_account_wall : 0; $user->is_closed = 0; unset($user->userInfo); $qrcode_user = DB::table('user_share_qrcode')->where('user_id', $user_id)->where('type', 4)->first();//判断是否有新的分享 if (empty($qrcode_user)) { //没有的话 后台生成 $qrcode_path = QrcodeRectService::getViewerMiniQrcode($user_id); // dd($qrcode_path); $param = ['page' => 'pages/home/information?id=' . $user_id, 'from_user_id' => $user->id]; $param = json_encode($param); $data = [ 'user_id' => $user_id, 'qrcode_path' => $qrcode_path, 'type' => 4, 'param' => $param, 'created_at' => date('Y-m-d H:i:s'), 'updated_at' => date('Y-m-d H:i:s'), ]; //$user->my_qrcode = $qrcode_path; $user->user_detail_qrcode = $qrcode_path; DB::table('user_share_qrcode')->insert($data); } else { //$user->my_qrcode = $qrcode_user->qrcode_path; $user->user_detail_qrcode = $qrcode_user->qrcode_path; } $user->emotional_state = $user->userInfo ? $user->userInfo->emotional_state : 'unknow'; $user->profile->age = $user->profile ? \CommonUtilsService::getAge($user->profile->birthday) : '未填写'; //关闭资料提示 $close_log = CloseProfileHistory::where('user_id', $user_id)->orderBy('id', 'desc')->first(); $user->hidden_operator = $close_log ? $close_log->operator : 0; $m_user_id = $this->matchMerchantUser($user_id); $m_ids = IdentityAuthorization::where('m_user_id', $m_user_id)->pluck('m_id')->toArray(); $merchant_name = Anchor::whereIn('m_id', $m_ids)->pluck('name')->toArray(); $user->merchant_name = $merchant_name; $user->from_merchant_name = Anchor::where('m_id',$user->from_merchant_id)->value('name'); $user->label = UserLabelRecode::where('user_label_recodes.user_type', User::class)->where('user_label_recodes.user_id', $user_id) ->join('user_labels', function ($join) use ($request) { $join->on('user_label_recodes.label_id', '=', 'user_labels.id'); }, null, null, 'left') ->select('user_labels.*') ->get(); //crm领取信息 $crm_user = CrmUser::where("user_id", $user->id)->first(); if (empty($crm_user)) { $user->crm_msg = ''; }elseif ($crm_user->step == 'default' && $crm_user->status == 0) { $user->crm_msg = ''; }else { $crm_log = CrmUserLog::where('user_id', $user->id)->where(function($sql) { $sql->where('status', 1); })->orderBy('id', "asc")->first(); // if (empty($crm_log)) { // $crm_log = CrmUserLog::where('user_id', $user->id)->where(function($sql) { // $sql->whereNotNull('tagged_at'); // })->orderBy('id', "asc")->first(); // } if (empty($crm_log)) { $user->crm_msg = ''; }else { $crm_owner_name = User::where("id", $crm_log->role_user_id)->value('nickname'); $user->crm_msg = '已被【'.$crm_owner_name.'】领取'; } } return $this->success('ok', $user); } //冻结用户 public function frozenUser(Request $request, $user_id) { try { DB::beginTransaction(); $user = User::find($user_id); if (empty($user)) return $this->failure('该用户不存在'); $info = WrongInfoHistories::where('user_id', $user_id)->where('type', 'frozen')->first(); $remark = $request->input('remark'); if ($info) return $this->failure('该用户已被冻结! 请勿重复操作'); WrongInfoHistories::create([ 'user_id' => $user_id, 'type' => 'frozen', 'remark' => $remark ? $remark : '冻结用户账号', 'operator' => auth()->id(), ]); $user->can_be_found = 0; $user->save(); // $m = Message::create([ // 'phone' => $user->mobile, // 'message' => '', // 'confirmed' => 1, // 'code' => '冻结用户', // 'ip' => request() ? request()->ip() : '127.0.0.1', // ]); // $wecharLink = \CommonUtilsService::getWecharLink('/pages/tabBar/welcome'); // $url = \CommonUtilsService::createShortUrlv2(env('APP_URL').'/h5/#/jump_url?url='.$wecharLink,$m->id); // $message = '系统发现您的登录状态异常,为保障您的资料安全,请在三天内点击链接<'.$url.'>重新激活您的资料'; // $m->message = $message; // $m->save(); //发送短信通知 // Messenger::sendSMS($user->mobile, $message); DB::commit(); return $this->success('ok'); } catch (\Exception $e) { $this->getError($e); DB::rollBack(); return $this->failure('操作失败 请稍后再试'); } } //解冻用户 public function unfrozenUser(Request $request, $user_id) { try { $user = User::find($user_id); if (empty($user)) return $this->failure('该用户不存在'); $info = WrongInfoHistories::where('user_id', $user->id)->where('type', 'frozen')->first(); if (empty($info)) return $this->failure('该用户未被冻结'); $info->delete(); $user->can_be_found = 1; $user->save(); return $this->success('ok'); } catch (\Exception $e) { $this->getError($e); return $this->failure('操作失败 请稍后再试'); } } //置顶用户列表 public function topUserList(Request $request) { try { $area_id = $request->area_id; $is_audited = $request->is_audited; $belief = $request->belief; $areausers = AreaUser::with('user')->whereHas('user')->where('area_id', $area_id)->where('is_audited', $is_audited)->orderBy('id', 'desc')->orderBy('updated_at', 'desc'); if ($belief == '主内') { $areausers = $areausers->whereHas('user', function ($query) use ($belief) { $query->where('belief', '基督教'); }); } if ($belief == '主外') { $areausers = $areausers->whereHas('user', function ($query) use ($belief) { $query->where('belief', '<>', '基督教'); }); } $keyword = $request->input('keyword', ''); if ($keyword) { $keyword = trim($keyword); $areausers = $areausers->whereHas('user', function ($sql) use ($keyword) { $sql->where('name', 'like', '%' . $keyword . '%') ->orWhere('id', 'like', '%' . $keyword . '%') ->orWhere('nickname', 'like', '%' . $keyword . '%') ->orWhere('mobile', 'like', '%' . $keyword . '%'); }); } $areausers = $areausers->paginate(); foreach ($areausers as $key => $value) { $value->user->mobile = ''; } return $this->success('ok', $areausers); } catch (\Exception $e) { $this->getError($e); return $this->success('获取置顶列表失败'); } } //审核置顶用户 public function auditedTopUser(Request $request, $id) { try { $client = auth()->user(); $area_user = AreaUser::find($id); if (empty($area_user)) return $this->failure('用户不处于审核状态'); $is_audited = $request->is_audited; $user = User::find($area_user->user_id); if (empty($user)) return $this->failure('该用户已注销'); if ($is_audited == -1) { $reason = $request->input('reason'); if (empty($reason)) return $this->failure('请输入失败原因'); $area_user->is_audited = $is_audited; $area_user->reason = $reason; $area_user->save(); $message = '您的推荐审核结果,' . $area_user->reason; $body = ['msg' => $message]; $im_service = new IMService(env('IM_APP_KEY'), env('IM_APP_SECRET')); $im_service->sendMsg(1, 0, $area_user->user_id, $type = 0, $body); //系统消息 $this->userCon->sendNotice($area_user->user_id, 1, 'system', $message); return $this->success('ok', $area_user); } $area_user->is_audited = $is_audited; //审核通过增加备注 ClientComment::create([ 'user_id' => $id, 'maker_user_id' => $client->id, 'type' => 'topUser', 'comment' => '客服【' . $client->nickname . '】,置顶了用户【' . $user->nickname . '】', ]); $area_user->save(); return $this->success('ok', $area_user); } catch (\Exception $e) { $this->getError($e); return $this->failure('审核失败,请联系开发人员'); } } //标记用户情感状态 public function userEmotionalState(Request $request, $user_id) { $admin = auth()->user(); $user = User::find($user_id); if (!$user) return $this->failure('标记的用户不存在'); $emotional_state = $request->emotional_state ?? 'loving'; $text = ''; if ($emotional_state == 'unknow') $text = '取消用户的情感状态'; if ($emotional_state == 'loving') $text = '进入恋爱中'; if ($emotional_state == 'marriagement') $text = '领取了结婚证'; if ($emotional_state == 'announcing') $text = '已上喜报'; try { DB::beginTransaction(); UserInfo::updateOrCreate(['user_id' => $user_id], ['emotional_state' => $emotional_state]); //增加客服备注 ClientComment::create([ 'user_id' => $user_id, 'maker_user_id' => auth()->id(), 'type' => 'active', 'comment' => $emotional_state == 'unknow' ? '客服【' . $admin->nickname . '】取消了用户【' . $user->nickname . '】的情感状态' : '客服【' . $admin->nickname . '】设置了用户【' . $user->nickname . '】的喜报【' . $text . '】', ]); //从单身 => 非单身,需要将用户的资料关闭 // if($emotional_state != 'unknow'){ // User::where('id',$user_id)->update(['hidden_profile'=>'ALLSEX']); // } // else{ // User::where('id',$user_id)->update(['hidden_profile'=>'NONE']); // } DB::commit(); // $key = User::cachePreviewKey($user_id); // Redis::del($key); return $this->success('ok'); } catch (\Exception $e) { DB::rollBack(); $this->getError($e); return $this->failure('标记失败,联系开发人员'); } } //增加分区 public function addArea(Request $request) { try { $title = $request->input('title'); if (empty($title)) { return $this->failure('请填写分区标题'); } $pic = $request->pic; if (empty($pic)) { return $this->failure('请上传分区图片'); } $is_show = $request->input('is_show', 0); $sort = $request->input('sort', 0); //添加记录 $class_area = ClassArea::create([ 'title' => $title, 'is_show' => $is_show, 'pic' => $pic, 'sort' => $sort ]); return $this->success('ok', $class_area); } catch (\Exception $e) { $this->getError($e); return $this->failure('增加分区失败'); } } //删除分区 public function delArea(Request $request, $id) { try { ClassArea::where('id', $id)->delete(); return $this->success('ok'); } catch (\Exception $e) { $this->getError($e); return $this->failure('删除失败'); } } //修改分区 public function updateArea(Request $request, $id) { try { $class_area = ClassArea::find($id); $title = $request->input('title'); $is_show = $request->input('is_show', 0); $pic = $request->input('pic'); $sort = $request->sort; if ($sort > 100 || $sort < 0) { return $this->failure('请输入0到100之间整数'); } if (!empty($title) && $class_area->title != $title) { $class_area->title = $title; } if ($is_show != '' && is_numeric($is_show) && $class_area->is_show != $is_show) { $class_area->is_show = $is_show; } if (!empty($pic) && $class_area->pic != $pic) { $class_area->pic = $pic; } if (is_numeric($sort) && $class_area->sort != $sort) { $class_area->sort = $sort; } $class_area->save(); return $this->success('ok', $class_area); } catch (\Exception $e) { $this->getError($e); return $this->failure('修改分区失败'); } } //分区列表 public function classAreas(Request $request) { try { $class_areas = ClassArea::withCount('areaUser')->with('areaUser')->where('id', '<>', 1)->orderBy('is_show', 'desc')->orderBy('sort', 'asc')->orderBy('id', 'desc'); $keyword = $request->input('keyword', ''); if ($keyword) { $keyword = trim($keyword); $class_areas = $class_areas->where(function ($sql) use ($keyword) { $sql->where('title', 'like', '%' . $keyword . '%'); }); } $nopage = $request->nopage ?? 1; if ($nopage == 1) { $class_areas = $class_areas->paginate(); foreach ($class_areas as $class_area) { $belief_count = 0; //主内人数 $not_belief_count = 0;//非主内人数 if (!empty($class_area->areaUser)) { $user_ids = []; foreach ($class_area->areaUser as $result) { $user_ids [] = $result['user_id']; } $belief_count = User::whereIn('id', $user_ids)->where('belief', '基督教')->count(); $not_belief_count = User::whereIn('id', $user_ids)->where('belief', '<>', '基督教')->count(); } $class_area->belief_count = $belief_count; $class_area->not_belief_count = $not_belief_count; unset($class_area->areaUser); } } else { $class_areas = $class_areas->get(); } return $this->success('ok', $class_areas); } catch (\Exception $e) { $this->getError($e); return $this->failure('分区列表获取失败'); } } //分区用户 public function areaUsers(Request $request, $area_id) { try { $is_audited = $request->is_audited ? $request->is_audited : 0; $is_apply = $request->is_apply ? $request->is_apply : 0; $belief = $request->belief; if ($is_apply == 0) { $area_users = AreaUser::with('user', 'classArea:id,title', 'user.profileCourtship:user_id,degree,birthday')->whereHas('user')->where('area_id', $area_id)->where('is_audited', $is_audited); } if ($is_apply == 1) { $area_users = AreaUser::with('user', 'classArea:id,title', 'user.profileCourtship:user_id,degree,birthday')->whereHas('user')->where('area_id', $area_id)->where('is_audited', $is_audited)->where('is_apply', 1); } if ($belief == '主内') { $area_users = $area_users->whereHas('user', function ($query) { $query->where('belief', '基督教'); }); } if ($belief == '主外') { $area_users = $area_users->whereHas('user', function ($query) { $query->where('belief', '<>', '基督教'); }); } $keyword = $request->input('keyword', ''); if ($keyword) { $keyword = trim($keyword); $area_users = $area_users->whereHas('user', function ($sql) use ($keyword) { $sql->where('name', 'like', '%' . $keyword . '%') ->orWhere('id', 'like', '%' . $keyword . '%') ->orWhere('nickname', 'like', '%' . $keyword . '%') ->orWhere('mobile', 'like', '%' . $keyword . '%'); }); } $area_users = $area_users->orderBy('sort', 'desc')->orderBy('created_at', 'desc')->paginate(); return $this->success('ok', $area_users); } catch (\Exception $e) { $this->getError($e); return $this->failure('获取分区用户失败'); } } //添加分区用户 public function addAreaUser(Request $request) { try { $close_ids = User::where('hidden_profile', 'ALLSEX')->pluck('id')->toArray();//关闭资料id $user_ids = $request->user_id; //选择id $user_ids = array_diff($user_ids, $close_ids); // $intersect_ids = array_intersect($close_ids,$user_ids); // if (!empty($intersect_ids)) { // $user = User::whereIn('id',$intersect_ids)->first(); // return $this->failure('用户'.$user->nickname.'已关闭资料,请重新选择'); // } $area_ids = $request->area_id; if (empty($user_ids)) return $this->failure('请选择用户'); if (empty($area_ids)) return $this->failure('请选择添加的分区'); $area_users = AreaUser::whereIn('area_id', $area_ids)->whereIn('user_id', $user_ids)->get(); foreach ($area_users as $area_user) { $area_user->is_audited = 1; $area_user->updated_at = date('Y-m-d H:i:s');//分区用户排序用 $area_user->save(); } $arr = []; foreach ($area_ids as $area_id) { $area_user_ids = AreaUser::where('area_id', $area_id)->whereIn('user_id', $user_ids)->pluck('user_id')->toArray(); if ($area_user_ids) { $user_ids = array_diff($user_ids, array_unique($area_user_ids)); } foreach ($user_ids as $user_id) { $sub_arr = [ 'is_show' => 1, 'is_audited' => 1, 'is_apply' => 0, 'user_id' => $user_id, 'area_id' => $area_id, 'created_at' => date('Y-m-d H:i:s'), 'updated_at' => date('Y-m-d H:i:s') ]; $arr[] = $sub_arr; } } AreaUser::insert($arr); return $this->success('ok'); } catch (\Exception $e) { $this->getError($e); return $this->failure('添加用户失败'); } } //用户详情添加分区 public function addUserDatailArea(Request $request, $user_id) { try { $close_ids = User::where('hidden_profile', 'ALLSEX')->pluck('id')->toArray();//关闭资料id if (in_array($user_id, $close_ids)) return $this->failure('该用户已关闭资料'); $client = auth()->user();//客服账号 $user = User::find($user_id); $area_ids = $request->area_id; $sort = $request->input('sort', 0); AreaUser::where('user_id', $user_id)->delete(); $arr = []; $comment_arr = []; if (!empty($area_ids)) { foreach ($area_ids as $area_id) { $title = ClassArea::where('id', $area_id)->value('title'); $sub_arr = [ 'is_show' => 1, 'is_audited' => 1, 'user_id' => $user_id, 'area_id' => $area_id, 'sort' => $sort, 'is_apply' => 0, 'created_at' => date('Y-m-d H:i:s'), 'updated_at' => date('Y-m-d H:i:s') ]; $sub_comment_arr = [ 'user_id' => $user_id, 'maker_user_id' => $client->id, 'type' => 'area', 'comment' => '客服.【' . $client->nickname . '】,将用户【' . $user->nickname . '】调入分区【' . $title . '】', 'created_at' => date('Y-m-d H:i:s'), 'updated_at' => date('Y-m-d H:i:s') ]; $arr[] = $sub_arr; $comment_arr[] = $sub_comment_arr; } AreaUser::insert($arr); ClientComment::insert($comment_arr); } return $this->success('ok'); } catch (\Exception $e) { $this->getError($e); return $this->failure('添加失败'); } } //删除分区用户 public function delAreaUser(Request $request, $area_id) { try { $user_id = $request->user_id; if (empty($user_id)) return $this->failure('选择要删除的用户'); $area_user = AreaUser::where('area_id', $area_id)->where('user_id', $user_id)->first(); if (empty($area_user)) { return $this->success('该用户不在此分区'); } $area_user->delete(); return $this->success('ok'); } catch (\Exception $e) { $this->getError($e); return $this->failure('删除失败'); } } //批量删除分区用户 public function delAreaUsers(Request $request, $area_id) { try { $user_ids = $request->user_id; if (empty($user_ids)) return $this->failure('请选择用户'); AreaUser::where('area_id', $area_id)->whereIn('user_id', $user_ids)->delete(); return $this->success('ok'); } catch (\Exception $e) { $this->getError($e); return $this->failure('删除失败'); } } //修改分区用户状态 public function updateUser(Request $request, $user_id, $area_id) { try { $area_user = AreaUser::where('user_id', $user_id)->where('area_id', $area_id)->first(); $is_show = $request->is_show; if ($is_show == '') return $this->failure('请选择是否展示用户'); $area_user->is_show = $is_show; $area_user->save(); return $this->success('ok', $area_user); } catch (\Exception $e) { $this->getError($e); return $this->failure('修改失败'); } } /** * 用户修改 * @param Request $request [description] * @param [type] $user_id [description] * @return [type] [description] */ public function userUpdate(Request $request, $user_id) { try { $old_data = []; $new_data = []; $user = User::find($user_id); $wechat = Wechat::where('user_id', $user_id)->first(); if ($request->input('name') && $request->name != $user->name) { $old_data['name'] = $user->name; $new_data['name'] = $request->name; $user->name = $request->name; } if (isset($request->nickname) && $request->nickname != $user->nickname) { $old_data['nickname'] = $user->nickname; $new_data['nickname'] = $request->nickname; $user->nickname = $request->nickname; } //头像 if ($request->input('photo') && $request->photo != $user->photo) { $old_data['photo'] = $user->photo; $new_data['photo'] = $request->photo; $user->photo = $request->photo; $user->app_avatar = $request->photo; // $user->circle_avatar = null; if (!empty($wechat)) { $wechat->avatar2 = $request->photo; $wechat->save(); } $user->is_photo_audited = 1; } if ($request->input('mobile') && $request->mobile != $user->mobile) { // if (!preg_match("/^((\(\d{2,3}\))|(\d{3}\-))?1(3|5|8|9)\d{9}$/", $request->mobile)) { // return $this->failure('请输入正确的手机号码'); // } if (!Str::isMobile($request->mobile)) return $this->failure('请输入正确的手机号码'); $old_data['mobile'] = $user->mobile; $new_data['mobile'] = $request->mobile; $user->mobile = $request->mobile; } if ($request->from_user_id && $request->from_user_id != $user->from_user_id) { $user->from_user_id = $request->from_user_id; $from_openid = Wechat::where("user_id",$request->from_user_id)->value('openid'); $user->from_openid = $from_openid; } if ($request->input('face_score') && $request->face_score != $user->face_score) { $user->face_score = $request->face_score; } if ($request->input('type') && $request->type != $user->type) { $old_data['type'] = $user->type; $new_data['type'] = $request->type; $marry = ProfileMarriage::firstOrCreate(['user_id' => $user_id]); $court = ProfileCourtship::firstOrCreate(['user_id' => $user_id]); if ($request->type == 'single') { //介绍人改成单身 把profileMarriage表中的数据 加到 profileCourtship $court->belief = $marry->belief; $court->sex = $marry->sex; $court->company = $marry->company; $court->birthday = $marry->birthday; $court->city = $marry->city; $court->province = $marry->province; $court->location_offset_status = $marry->location_offset_status; $court->state = $marry->state; $court->degree = $marry->degree; $court->wechat_id = $marry->wechat_id; $court->wechat_qrcode = $marry->wechat_qrcode; $court->wechat_id = $marry->wechat_id; $court->save(); //关闭脱单记录 LoveLink::where('user_id', $user_id)->delete(); } else {//单身改成其他(介绍人 恋爱中) 把profileCourtship 表中的数据加到 把profileMarriage表中的数据 $marry->belief = $court->belief; $marry->sex = $court->sex; $marry->company = $court->company; $marry->birthday = $court->birthday; $marry->city = $court->city; $marry->province = $court->province; $marry->location_offset_status = $court->location_offset_status; $marry->state = $court->state; $marry->degree = $court->degree; $marry->wechat_id = $court->wechat_id; $marry->wechat_qrcode = $court->wechat_qrcode; $marry->wechat_id = $court->wechat_id; $marry->save(); } $key = User::cachePreviewKey($user_id); Redis::del($key); $user->type = $request->type; } if ($user->type == 'single') { // $profile = ProfileCourtship::where('user_id', $user_id)->first(); $profile = ProfileCourtship::firstOrCreate(['user_id' => $user_id]); if ($request->input('state') && $request->state != $profile->state) { $old_data['state'] = $profile->state; $new_data['state'] = $profile->state; $profile->state = $request->state; } if ($request->input('stature') && $request->stature != $profile->stature) { $old_data['stature'] = $profile->stature; $new_data['stature'] = $request->stature; $profile->stature = $request->stature; } if ($request->input('weight') && $request->weight != $profile->weight) { $old_data['weight'] = $profile->weight; $new_data['weight'] = $request->weight; $profile->weight = $request->weight; } if ($request->input('province') && $request->province != $profile->province) { $old_data['province'] = $profile->province; $new_data['province'] = $request->province; $profile->province = $request->province; } if ($request->input('city') && $request->city != $profile->city) { $old_data['city'] = $profile->city; $new_data['city'] = $request->city; $profile->city = $request->city; } if ($request->input('dist') && $request->dist != $profile->dist) { $profile->dist = $request->dist; } if ($request->input('country') && $request->country != $profile->country) { $old_data['country'] = $profile->country; $new_data['country'] = $request->country; $profile->country = $request->country; } if ($request->input('resident_type') && $request->resident_type != $profile->resident_type) { $old_data['resident_type'] = $profile->resident_type; $new_data['resident_type'] = $request->resident_type; $profile->resident_type = $request->resident_type; } if ($request->input('resident_province') && $request->resident_province != $profile->resident_province) { $old_data['resident_province'] = $profile->resident_province; $new_data['resident_province'] = $request->resident_province; $profile->resident_province = $request->resident_province; } if ($request->input('resident_city') && $request->resident_city != $profile->resident_city) { $old_data['resident_city'] = $profile->resident_city; $new_data['resident_city'] = $request->resident_city; $profile->resident_city = $request->resident_city; } if ($request->input('resident_dist') && $request->resident_dist != $profile->resident_dist) { $profile->resident_dist = $request->resident_dist; } if ($request->input('degree') && $request->degree != $profile->degree) { $old_data['degree'] = $profile->degree; $new_data['degree'] = $request->degree; $profile->degree = $request->degree; } if ($request->input('graduate_school') && $request->graduate_school != $profile->graduate_school) { $old_data['graduate_school'] = $profile->graduate_school; $new_data['graduate_school'] = $request->graduate_school; $profile->graduate_school = $request->graduate_school; } if ($request->input('work_sort') && $request->work_sort != $profile->work_sort) { $old_data['work_sort'] = $profile->work_sort; $new_data['work_sort'] = $request->work_sort; $profile->work_sort = $request->work_sort; } if ($request->input('ideal_mate') && $request->ideal_mate != $profile->ideal_mate) { $profile->ideal_mate = $request->ideal_mate; } if ($request->input('introduction') && $request->introduction != $profile->introduction) { $profile->introduction = $request->introduction; } if ($request->input('interest_hobby') && $request->interest_hobby != $profile->interest_hobby) { $profile->interest_hobby = $request->interest_hobby; } //薪资 if ($request->input('salary_id') && $request->salary_id != $profile->salary_id) { $profile->salary_id = $request->salary_id; } //购车 if ($request->input('h_car') && $request->h_car != $profile->h_car) { $profile->h_car = $request->h_car; } //购房 if ($request->input('h_housing') && $request->h_housing != $profile->h_housing) { $profile->h_housing = $request->h_housing; } //身份证 if ($request->has('identification_photos') && json_encode($request->identification_photos) != $profile->identification_photos) { $profile->identification_photos = json_encode($request->identification_photos); } if ($request->has('educate_photo') && $request->educate_photo != $profile->educate_photo) { $profile->educate_photo = $request->educate_photo; $user->is_educate_approved = 1; ApproveHistory::updateOrCreate(['user_id' => $user->id, 'type' => 'educate'], ['status' => 1, 'ways' => 1]); } //毕业证 if ($request->input('graduate_photos') && json_encode($request->graduate_photos) != $profile->graduate_photos) { $profile->graduate_photos = json_encode($request->graduate_photos); } //其他证件 if ($request->input('other_photos') && json_encode($request->other_photos) != $profile->other_photos) { $profile->other_photos = json_encode($request->other_photos); } //二维码 if ($request->input('wechat_qrcode') && json_encode($request->wechat_qrcode) != $profile->wechat_qrcode) { $profile->wechat_qrcode = json_encode($request->wechat_qrcode); } //期望多久结婚 if ($request->input('marry_by_time') && $request->marry_by_time != $profile->marry_by_time) { $old_data['marry_by_time'] = $profile->marry_by_time; $new_data['marry_by_time'] = $request->marry_by_time; $profile->marry_by_time = $request->marry_by_time; } } else { $profile = ProfileMarriage::firstOrCreate(['user_id' => $user_id]); if ($request->input('slogan') && $request->slogan != $profile->slogan) { $profile->slogan = $request->slogan; } } if ($request->input('belief') && $request->belief != $profile->belief) { $old_data['belief'] = $profile->belief; $new_data['belief'] = $request->belief; $profile->belief = $request->belief; } if ($request->input('birthday') && $request->birthday != $profile->birthday) { $old_data['birthday'] = $profile->birthday; $new_data['birthday'] = $request->birthday; $profile->birthday = $request->birthday; } if ($request->input('company') && $request->company != $profile->company) { $old_data['company'] = $profile->company; $new_data['company'] = $request->company; $profile->company = $request->company; } if ($request->input('sex') && $request->sex != $user->sex) { $old_data['sex'] = $user->sex; $new_data['sex'] = $request->sex; $user->sex = $request->sex; $profile->sex = $request->sex; } if ($request->input('industry_arr') && is_array($request->industry_arr) && count($request->industry_arr) == 2) { $industry_arr = $request->industry_arr; if ($user->industry != $industry_arr[0]) { $old_data['industry'] = $user->industry; $new_data['industry'] = $industry_arr[0]; $user->industry = $industry_arr[0]; } if ($user->industry_sub != $industry_arr[1]) { $old_data['industry_sub'] = $user->industry_sub; $new_data['industry_sub'] = $industry_arr[1]; $user->industry_sub = $industry_arr[1]; } } if ($request->input('card_num') && $request->card_num != $user->card_num) { $old_data['card_num'] = $user->card_num; $new_data['card_num'] = $request->card_num; $user->card_num = $request->card_num; } //負面分數 if (is_numeric($request->input('negative_score')) && $request->negative_score != $user->negative_score) { $new_data['negative_score'] = $request->negative_score; $old_data['negative_score'] = $user->negative_score; $user->negative_score = $request->negative_score; } if ($request->has('can_be_found') && is_numeric($request->can_be_found)) { $user->can_be_found = $request->can_be_found; } if ($request->has('hidden_profile') && $request->hidden_profile) { if ($request->hidden_profile == 'ALLSEX' && $user->hidden_profile != "ALLSEX") { if (empty($request->reason)) return $this->failure('输入关闭原因'); CloseProfileHistory::updateOrCreate(['user_id' => $user_id], ['operator' => auth()->id(), 'reason' => $request->reason, 'status' => 1]); $new_data['hidden_profile'] = $request->hidden_profile; $old_data['hidden_profile'] = $user->hidden_profile; } $user->hidden_profile = $request->hidden_profile; if ($request->hidden_profile == 'NONE') { CloseProfileHistory::where('user_id', $user_id)->delete(); $new_data['hidden_profile'] = $request->hidden_profile; $old_data['hidden_profile'] = $user->hidden_profile; } } if ($request->has('lifePhotos')) { //生活照 if ($request->input('lifePhotos') && count($request->lifePhotos)) { ProfilePhoto::where('user_id', $user_id)->delete(); // ProfilePhoto::create($request->lifePhotos); foreach ($request->lifePhotos as $lifePhoto) { $profile_photo = new ProfilePhoto(); $profile_photo->user_id = $user_id; $profile_photo->photo = $lifePhoto; $profile_photo->dateline = date('Y-m-d'); $profile_photo->save(); } } else { ProfilePhoto::where('user_id', $user_id)->delete(); } } if (is_numeric($request->live_match_maker) && $request->live_match_maker != $user->live_match_maker) { switch ($request->live_match_maker) { case 1: $user->live_match_maker = $request->live_match_maker; $user->become_maker_at = date('Y-m-d H:i:s'); break; case 0: $user->live_match_maker = $request->live_match_maker; $user->become_maker_at = ''; break; default: break; } } $user->save(); $profile->save(); if (count($old_data)) { ProfileChangeHistory::create([ 'user_id' => auth()->id(), 'owner_user_id' => $user->id, 'new_content' => json_encode($new_data), 'old_content' => json_encode($old_data) ]); } $res = null; //头像 if ($request->input('photo')) { //同步IM头像 $birthday = $user->profileCourtship ? $user->profileCourtship->birthday : null; $im_service = new IMService(env('IM_APP_KEY'), env('IM_APP_SECRET')); $res = $im_service->updateUinfo($user->id, $user->nickname, $request->input('photo'), $sign = '', $user->email, $birthday, $user->mobile, $user->sex); } return $this->success('ok', $user); }catch (\Exception $e){ return $this->failure($e->getMessage()); } } public function profileChangeHistories(Request $request, $user_id) { $keyword = $request->keyword; $histories = ProfileChangeHistory::where('owner_user_id', $user_id)->with('user'); if ($keyword) { $histories = $histories->whereHas('user', function ($sql) use ($keyword) { $sql->where('nickname', 'like', "%$keyword%"); }); } $histories = $histories->orderBy('id', 'desc')->paginate(); foreach ($histories as $history) { $history->new_content = json_decode($history->new_content, true); $history->old_content = json_decode($history->old_content, true); } return $this->success('ok', $histories); } /** * 测试结果 * @param integer $user_id 用户id * @return array 测试结果 */ public function testResult($user_id) { $city_answer_result = VipAnswerResult::where('user_id', $user_id)->where('type', '市级VIP')->orderBy('id', 'desc')->first(); $province_answer_result = VipAnswerResult::where('user_id', $user_id)->where('type', '省级VIP')->orderBy('id', 'desc')->first(); $country_answer_result = VipAnswerResult::where('user_id', $user_id)->where('type', '全国VIP')->orderBy('id', 'desc')->first(); $city_test_arr = []; if ($city_answer_result) { $city_test_arr = json_decode($city_answer_result->result, true); } $love_languages = $this->character($city_test_arr, '市级VIP'); $province_test_arr = []; if ($province_answer_result) { $province_test_arr = json_decode($province_answer_result->result, true); } $love_characters = $this->character($province_test_arr, '省级VIP'); $country_test = ''; if ($country_answer_result) { $country_test_arr = json_decode($country_answer_result->result, true); $country_test = $this->countryVipResult($country_test_arr); } $character = Character::where('sub_type', $country_test)->first(); if ($character) { $character->profession = json_decode($character->profession, true); } $result['love_languages'] = $love_languages; $result['love_characters'] = $love_characters; $result['character'] = $character; return $result; } /** * 省市测试 * @param arr $test_arr * @param string $type 测试类型 * @return obj 测试结果 */ public function character($test_arr, $type) { if ($type == '市级VIP') { $loves = LoveLanguage::select('id', 'type', 'title', 'content')->get(); foreach ($loves as $love) { $love->num = 0; foreach ($test_arr as $test) { if ($test['key'] == $love->type) { $love->num = $test['value']; } } } } elseif ($type == '省级VIP') { $loves = LoveCharacter::select('type', 'title', 'content', 'character')->get(); foreach ($loves as $love) { $love->num = 0; foreach ($test_arr as $test) { if ($test['key'] == $love->type) { $love->num = $test['value']; } } } } return $loves; } /** * 全国测试 * @param arr $country_test_arr 测试结果 * @return string 测试分析类型 */ public function countryVipResult($country_test_arr) { $result = ''; if (!isset($country_test_arr['I'])) { $country_test_arr['I'] = 0; } if (!isset($country_test_arr['E'])) { $country_test_arr['E'] = 0; } if (!isset($country_test_arr['S'])) { $country_test_arr['S'] = 0; } if (!isset($country_test_arr['N'])) { $country_test_arr['N'] = 0; } if (!isset($country_test_arr['T'])) { $country_test_arr['T'] = 0; } if (!isset($country_test_arr['F'])) { $country_test_arr['F'] = 0; } if (!isset($country_test_arr['P'])) { $country_test_arr['P'] = 0; } if (!isset($country_test_arr['J'])) { $country_test_arr['J'] = 0; } if ($country_test_arr['P'] > $country_test_arr['J']) { $result = 'P' . $result; } else { $result = 'J' . $result; } if ($country_test_arr['T'] > $country_test_arr['F']) { $result = 'T' . $result; } else { $result = 'F' . $result; } if ($country_test_arr['S'] > $country_test_arr['N']) { $result = 'S' . $result; } else { $result = 'N' . $result; } if ($country_test_arr['I'] > $country_test_arr['E']) { $result = 'I' . $result; } else { $result = 'E' . $result; } return $result . '型'; } /** * 用户积分记录 * @param Request $request 参数 * @param integer $user_id 用户id * @return obj 用户积分列表 */ public function userScoreHistories(Request $request, $user_id) { $score_histories = ScoreHistory::where('user_id', $user_id)->orderBy('id', 'desc')->paginate(); return $this->success('ok', $score_histories); } /** * 用户订单列表 * @param Request $request 参数 * @param integer $user_id 用户id * @return obj 用户订单列表 */ public function userOrders(Request $request, $user_id) { $orders = Order::where('user_id', $user_id)->select('id', 'user_id', 'type', 'goods', 'price', 'created_at', 'pay_status')->paginate(); $user = User::where('id', $user_id)->first(); if (empty($user)) { return $this->failure('用户不存在'); } foreach ($orders as $order) { $order->user_name = $user->name; // $wechat = Wechat::where('user_id', $user_id)->select('user_id', 'avatar', 'avatar2')->first(); if (!empty($user->photo)) { $order->avatar = $user->photo; } else { $order->avatar = !empty($user->circle_avatar) ? $user->circle_avatar : $user->app_avatar; } } return $this->success('ok', $orders); } /** * 用户礼物历史列表 * @param Request $request 参数 * @param integer $user_id 用户id * @return obj 用户礼物历史列表 */ public function userGiftHistories(Request $request, $user_id) { $gift_histories = GiftHistory::where('user_id', $user_id)->where('status', 1)->paginate(); foreach ($gift_histories as $gift_history) { if ($gift_history->type == 'GIVEN') { $other_user_name = User::where('id', $gift_history->other_user_id)->value('name'); $gift_history->other_user_name = $other_user_name; $gift_name = Gift::where('id', $gift_history->gift_id)->value('name'); $gift_history->gift_name = $gift_name; $other_user_wechat = Wechat::where('user_id', $gift_history->other_user_id)->select('avatar', 'avatar2')->first(); $gift_history->other_user_avatar = $other_user_wechat->avatar2 ? $other_user_wechat->avatar2 : $other_user_wechat->avatar; $user_name = User::where('id', $gift_history->user_id)->value('name'); $gift_history->user_name = $user_name; $user_wechat = Wechat::where('user_id', $gift_history->user_id)->select('avatar', 'avatar2')->first(); $gift_history->user_avatar = $user_wechat->avatar2 ? $user_wechat->avatar2 : $user_wechat->avatar; } else { $user_name = User::where('id', $gift_history->other_user_id)->value('name'); $gift_history->user_name = $user_name; $gift_name = Gift::where('id', $gift_history->gift_id)->value('name'); $gift_history->gift_name = $gift_name; $user_wechat = Wechat::where('user_id', $gift_history->other_user_id)->select('avatar', 'avatar2')->first(); $gift_history->user_avatar = $user_wechat->avatar2 ? $user_wechat->avatar2 : $user_wechat->avatar; $other_user_name = User::where('id', $gift_history->user_id)->value('name'); $gift_history->other_user_name = $other_user_name; $other_user_wechat = Wechat::where('user_id', $gift_history->user_id)->select('avatar', 'avatar2')->first(); $gift_history->other_user_avatar = $other_user_wechat->avatar2 ? $other_user_wechat->avatar2 : $other_user_wechat->avatar; } } return $this->success('ok', $gift_histories); } /** * 投诉列表 * @param Request $request 参数complaintdAuthor * @return obj 投诉列表 */ public function complaintHistories(Request $request) { $status = $request->input('status', 0); if ($status != 3) {//0未标记 1//已标记 $histories = ComplaintHistory::with('user', 'otherUser', 'operatorUser')->whereHas('user')->whereHas('otherUser')->where('status', $status)->where('type', '<>', 'bless')->orderBy('id', 'desc'); } else { $histories = ComplaintHistory::with('user', 'otherUser', 'operatorUser')->whereHas('user')->whereHas('otherUser')->where('type', '<>', 'bless')->orderBy('id', 'desc'); } $keyword = $request->input('keyword', ''); if ($keyword) { $keyword = trim($keyword); $histories = $histories->whereHas('user', function ($sql) use ($keyword) { $sql->where('nickname', 'like', '%' . $keyword . '%')->orWhere('id', $keyword)->orWhere('mobile', '%' . $keyword . '%'); })->orWhereHas('otherUser', function ($sq) use ($keyword) { $sq->where('nickname', 'like', '%' . $keyword . '%')->orWhere('id', $keyword)->orWhere('mobile', '%' . $keyword . '%'); }); } $admin_type = $request->session()->get('admin_type'); if ($admin_type == 'paas_admin') { $paas_obj = $request->session()->get('paas_obj'); $paas_user_ids = $this->userCon->paasUserIds($paas_obj->name, 'MAIN'); $histories = $histories->whereIn('user_id', $paas_user_ids); } if ($request->type) { $histories = $histories->where('type', $request->type); } else { $histories = $histories->where('type', '!=', 'moment'); } $histories = $histories->paginate(); //user_avatar 投诉人头像 complaint_avatar 被投诉人头像 foreach ($histories as $history) { $user = $history->user; $user_name = $user ? $user->nickname : ''; $complaint_user = $history->otherUser; $complaint_name = $complaint_user ? $complaint_user->nickname : ''; $user_avatar = $user ? $user->avatar : ''; $complaint_avatar = $complaint_user ? $complaint_user->avatar : ''; $history->user_name = $user_name; $history->complaint_name = $complaint_name; $history->user_avatar = $user_avatar; $history->complaint_avatar = $complaint_avatar; $history->photos = json_decode($history->photos, true); $history->operator_id = null; $history->operator_name = null; if (!empty($history->operatorUser)) { $history->operator_id = $history->operatorUser->id; $history->operator_name = $history->operatorUser->nickname; } unset($history->operatorUser); $history->user->mobile = '';//隐藏手机号 $history->otherUser->mobile = ''; if ($history->remark_type == 2) { $history->remark = json_decode($history->remark, true); } if ($request->type == 'moment') { $moment = Moment::with('user')->where('id', $history->complaint_id)->first(); if (!empty($moment)) { $moment->photos = json_decode($moment->photos); } if (!empty($moment->aliyun_video_id)) { $result = $this->getVodInfo($moment->aliyun_video_id); $moment->play_url = $result['Mezzanine']['FileURL']; } $history->moment = $moment; } } return $this->success('ok', $histories); } public function changeComplaintStatus(Request $request, $complaint_id) { $is_set = ComplaintHistory::where('id', $complaint_id)->count(); if (empty($is_set)) { return $this->failure('数据不存在'); } $this->userCon->changeComplaintStatusV3($request, $complaint_id); return $this->success('ok'); } /** * 删除用户: * @param Request $request [description] * @param int $user_id 用户ID * @return [type] [description] */ public function deleteUser(Request $request, $user_id) { $my_user = auth()->user(); $my_user_id = $my_user->id; if ($my_user_id != auth()->id() && $my_user->is_admin != 1) { return $this->failure('暂无权限'); } //账号 User::where('id', $user_id)->delete(); //微信信息 Wechat::where('user_id', $user_id)->delete(); ProfileCourtship::where('user_id', $user_id)->delete(); ProfileMarriage::where('user_id', $user_id)->delete(); //vip测试 // VipAnswerResult::where('user_id', $user_id)->delete(); // VipQuestionAnswer::where('user_id', $user_id)->delete(); //群组 UserGroup::where('user_id', $user_id)->delete(); //礼物 // UserGift::where('user_id', $user_id)->delete(); //礼物记录 // GiftHistory::where('user_id', $user_id)->orWhere('other_user_id', $user_id)->delete(); //积分记录 // ScoreHistory::where('user_id', $user_id)->delete(); //积分 // Score::where('user_id', $user_id)->delete(); //等级记录 // RankHistory::where('user_id', $user_id)->delete(); //介绍人信息 // ProfileMarriage::where('user_id', $user_id)->delete(); //单身信息 // ProfileCourtship::where('user_id', $user_id)->delete(); //位置记录 // PositionHistory::where('user_id', $user_id)->delete(); //支付订单 // PayOrder::where('user_id', $user_id)->delete(); //订单 // Order::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(); //加好友问题回答 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(); return $this->success('delete ok'); } /** * 恢复用户 * 传入手机号 */ public function restoreUser(Request $request) { try { $mobile = $request->input('mobile'); if (empty($mobile)) return $this->failure("请输入需要恢复的手机号"); $user = User::where('mobile', $mobile)->withTrashed()->first(); if (empty($user)) return $this->failure("该用户已被彻底删除"); $user_id = $user->id; $user->restore(); //微信信息 Wechat::where('user_id', $user_id)->restore(); ProfileCourtship::where('user_id', $user_id)->restore(); ProfileMarriage::where('user_id', $user_id)->restore(); //群组 UserGroup::where('user_id', $user_id)->restore(); Notice::where('user_id', $user_id)->orWhere('send_user_id', $user_id)->restore(); //联系人 MessageLinkman::where('user_id', $user_id)->orWhere('other_user_id', $user_id)->restore(); //聊天记录 ChatMessage::where('user_id', $user_id)->orWhere('other_user_id', $user_id)->restore(); //加好友请求 LinkingRequest::where('user_id', $user_id)->orWhere('user_linking_id', $user_id)->restore(); //访问记录 UserPreviewHistory::where('user_id', $user_id)->orWhere('user_id', $user_id)->restore(); //好友 Linking::where('user_id', $user_id)->orWhere('user_linking_id', $user_id)->restore(); //加好友问题回答 FriendQuestionAnswer::where('user_id', $user_id)->restore(); //微信通知id FormId::where('user_id', $user_id)->restore(); //操作记录 Dynamic::where('user_id', $user_id)->restore(); //举报记录 ComplaintHistory::where('user_id', $user_id)->orWhere('complaint_id', $user_id)->restore(); //文章记录 ArticleHistory::where('user_id', $user_id)->restore(); //红娘 Matchmaker::where('user_id', $user_id)->restore(); //盟爱 GoodMatch::where('user_id', $user_id)->restore(); //客戶 MatchmakerClient::where('client_user_id', $user_id)->restore(); //浏览记录 UserPreview::where('user_id', $user_id)->restore(); //h5用户 Viewer::where('user_id', $user_id)->update(['user_id' => 0, 'mobile' => '']); } catch (\Exception $e) { $this->getError($e); } return $this->success('ok'); } /** * 删除用户-彻底删除 * @param Request $request [description] * @param int $user_id 用户ID * @return [type] [description] */ public function deleteUserForver(Request $request, $user_id) { $my_user = auth()->user(); $my_user_id = $my_user->id; if ($my_user_id != auth()->id() && $my_user->is_admin != 1) { return $this->failure('暂无权限'); } //微信信息 Wechat::where('user_id', $user_id)->forceDelete(); ProfileCourtship::where('user_id', $user_id)->forceDelete(); ProfileMarriage::where('user_id', $user_id)->forceDelete(); //vip测试 // VipAnswerResult::where('user_id', $user_id)->delete(); // VipQuestionAnswer::where('user_id', $user_id)->delete(); //群组 UserGroup::where('user_id', $user_id)->delete(); //礼物 // UserGift::where('user_id', $user_id)->delete(); //礼物记录 // GiftHistory::where('user_id', $user_id)->orWhere('other_user_id', $user_id)->delete(); //积分记录 // ScoreHistory::where('user_id', $user_id)->delete(); //积分 // Score::where('user_id', $user_id)->delete(); //等级记录 // RankHistory::where('user_id', $user_id)->delete(); //介绍人信息 // ProfileMarriage::where('user_id', $user_id)->delete(); //单身信息 // ProfileCourtship::where('user_id', $user_id)->delete(); //位置记录 // PositionHistory::where('user_id', $user_id)->delete(); //支付订单 // PayOrder::where('user_id', $user_id)->delete(); //订单 // Order::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(); $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(); //加好友问题回答 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(); //h5用户 Viewer::where('user_id', $user_id)->delete(); $mobile = User::where('id', $user_id)->value('mobile'); //h5用户 Viewer::where('mobile', $mobile)->delete(); //账号 User::where('id', $user_id)->forceDelete(); return $this->success('delete ok'); } //我的黑名单 public function userBlacklist(Request $request, $user_id) { $keyword = $request->keyword; $blacklist = LinkingBlacklist::with('otherUser')->whereHas('otherUser')->where('user_id', $user_id)->orderBy('created_at', 'desc'); if ($keyword) { $keyword = trim($keyword); $blacklist = $blacklist->whereHas('otherUser', function ($sql) use ($keyword) { $sql->where('id', $keyword)->orWhere('nickname', 'like', '%' . $keyword . '%')->orWhere('mobile', 'like', '%' . $keyword . '%'); }); } $blacklist = $blacklist->paginate(); foreach ($blacklist as $item){ $item->profile = ProfileCourtship::where('user_id',$item->other_user_id)->select('state','birthday','province','city')->first(); } return $this->success('ok', $blacklist); } //我的关注列表 public function myFollowUser(Request $request, $user_id) { $keyword = $request->keyword; $followers = Followable::with('user:id,nickname,mobile,circle_avatar,app_avatar,sex,hidden_profile,last_visit')->where('user_id', $user_id)->whereHas('user')->orderBy('created_at', 'desc')->where('followable_type', 'App\Models\User')->where('relation', 'follow')->distinct('followable_id')->select('user_id', 'followable_id', 'created_at'); if ($keyword) { $keyword = trim($keyword); $followers = $followers->whereHas('user', function ($sql) use ($keyword) { $sql->where('id', $keyword)->orWhere('nickname', 'like', '%' . $keyword . '%')->orWhere('mobile', 'like', '%' . $keyword . '%'); }); } $followers = $followers->paginate(); foreach ($followers as $item){ $item->profile = ProfileCourtship::where('user_id',$item->followable_id)->select('birthday','state','city','province')->first(); } return $this->success('ok', $followers); } //我的粉丝 public function myFansList(Request $request, $user_id) { try { $user = User::find($user_id); $followings = $user->followers()->where('hidden_profile', '<>', 'ALLSEX')/*->where('type', 'single')*/ ->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->province = $rd_user->profileCourtship ? $rd_user->profileCourtship->province : null; $following->state = $rd_user->profileCourtship ? $rd_user->profileCourtship->state : 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(); unset($following->uid, $following->is_new, $following->name, $following->face_score, $following->card_num, $following->circle_avatar, $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->system_info, $following->identification_photos, $following->scene, $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] * @param int $user_id 用户id * @return [type] [description] */ public function scoreRecharge(Request $request, $user_id) { $scoreObj = Score::where('user_id', $user_id)->first(); if (empty($scoreObj)) { $scoreObj = Score::create([ 'user_id' => $user_id, ]); } $score = $request->input('score', 0); if (empty($score)) { return $this->failure('请输入福分数'); } $scoreObj->remain_amount = $scoreObj->remain_amount + $score; $scoreObj->save(); ScoreHistory::create([ 'user_id' => $user_id, 'type' => 'gained', 'amount' => $score, 'value' => $scoreObj->remain_amount, 'message' => '后台充值' ]); $array['message'] = '后台充值'; $array['user_id'] = $user_id; $array['type'] = 'gained'; $array['score'] = $score; $array['other_user_id'] = 0; SyncScore::dispatch($array)->onQueue('love'); return $this->success('ok', $scoreObj); } /** * 后台充值列表 */ public function scoreRecharges(Request $request) { $url = config('app.account_url') . '/api/user/recharge/histories'; $data = [ 'keyword' => $request->input('keyword'), 'page' => $request->input('page') ]; try { $score_histories = json_decode(Http::http($url, $data, 'GET')); } catch (Exception $e) { $message = $e->getMessage(); Messenger::sendSMS('15872844805', $message); } return $this->success('ok', $score_histories); } //开放权限,根据用户手机号来获得用户推荐列表 public function mobileMatchingRate(Request $request, $mobile) { $user = User::where('mobile', $mobile)->first(); if (empty($user)) { return $this->success('ok', []); } // if ($user->type != 'single') { // return $this->failure('只允许单身匹配!'); // } $count = Matching::where('user_id', $user->id)->count(); $type = $request->input('type', 'auto'); if ($type == 'auto') { $rates = $this->baseMatchingRate($user->id, $request); } else { $rates = $this->baseMatchings($request, $user); } return $this->success('ok', compact('user', 'rates')); } /** * 设置用户的匹配用户 */ public function setUserMatching(Request $request, User $user) { $rate_mobiles = $request->input('rate_mobiles', []); if (!count($rate_mobiles)) { return $this->failure('请输入手机号'); } $matchings = Matching::whereIn('mobile', $rate_mobiles)->where('user_id', $user->id)->get()->toArray(); foreach ($matchings as $matching) { return $this->failure('手机号' . $matching['mobile'] . '已存在'); } $date = date('Y-m-d H:i:s'); $matching_arr = []; foreach ($rate_mobiles as $rate_mobile) { $arr = []; $arr['user_id'] = $user->id; $arr['mobile'] = trim($rate_mobile); $arr['created_at'] = $date; $arr['updated_at'] = $date; $matching_arr[] = $arr; } Matching::insert($matching_arr); return $this->success('ok'); } /** * 删除匹配 */ public function deleteUserMatching(Request $request, User $user) { Matching::where('user_id', $user->id)->delete(); return $this->success('ok'); } /** * 删除单个匹配 */ public function deleteMatching(Request $request, Matching $matching) { $matching->delete(); return $this->success('ok'); } public function baseMatchings($request, $user) { $sex = $user->sex; $keyword = $request->input('keyword'); $rates = Matching::with('matchingOtherUser.profileCourtship')->whereHas('matchingOtherUser', function ($sql) use ($keyword, $sex) { $sql = $sql->where('id', '>', 0)->where('hidden_profile', '<>', 'ALLSEX')->where('type', 'single')->where('sex', '<>', $sex)->where('sex', '<>', 0); if ($keyword) { $keyword = trim($keyword); $sql = $sql->where('name', 'like', '%' . $keyword . '%'); } }); $rates = $rates->where('user_id', $user->id)->paginate(); foreach ($rates as $rate) { $rate_user = $rate->matchingOtherUser; $profile = $rate->matchingOtherUser->profileCourtship; $rate_user->introduction = $profile->introduction; $rate_user->city = $profile->city; $rate_user->province = $profile->province; $rate_user->age = $this->getAge($profile->birthday); $rate_user->photo = $rate_user->wechat ? $rate_user->wechat->avatar2 : $rate_user->photo; $rate->rate_user = $rate_user; } return $rates; } public function userMatchings(Request $request, User $user) { $rates = $this->baseMatchings($request, $user); return $this->success('ok', compact('user', 'rates')); } //后台推荐共用数据 public function baseMatchingRate($user_id, $request) { $keyword = $request->input('keyword'); $user = User::where('id', $user_id)->select('id', 'type')->first(); $rates = MatchingRate::whereHas('matchingOtherUser', function ($sql) use ($user_id, $user, $keyword) { $sql = $sql->whereNotNull('photo')->where('hidden_profile', '<>', 'ALLSEX')->where('type', 'single'); if ($keyword) { $keyword = trim($keyword); $sql = $sql->where('name', 'like', '%' . $keyword . '%'); } }); $rates = $rates->where('user_id', $user_id)->where('age', 3)->where('weight', '>', 0) ->orderBy('age', 'desc')->orderBy('weight', 'desc')->orderBy('id', 'desc')->paginate(); foreach ($rates as $rate) { $rate_user = User::where('id', $rate->other_user_id)->select('id', 'name', 'photo', 'location_latitude', 'location_longitude', 'type', 'circle_avatar')->first(); if ($rate_user->type == 'single') { $profile = ProfileCourtship::where('user_id', $rate_user->id)->first(); if (empty($profile->sex)) { $profile->sex = 0; } $rate_user->sex = $profile->sex ? $profile->sex : 0; $rate_user->introduction = $profile->introduction; $rate_user->city = $profile->city; $rate_user->province = $profile->province; $rate_user->age = $this->getAge($profile->birthday); $rate_user->photo = $rate_user->wechat ? $rate_user->wechat->avatar2 : $rate_user->photo; $rate->rate_user = $rate_user; } } return $rates; } //后台用户推荐列表 public function matchingRate(Request $request, $user_id) { $rates = $this->baseMatchingRate($user_id, $request); return $this->success('ok', $rates); } /** * 人工实名认证 * @param [type] $user_id [description] * @return [type] [description] * return $user->makeVisible('card_num')->toArray(); */ public function userApproved(Request $request, $user_id) { try { $type = $request->input('type', 1); if ($type == 1) {//通过 $user = User::findOrFail($user_id); if (empty($request->input('name'))) { return $this->failure('请输入姓名'); } if (empty($request->input('card_num'))) { return $this->failure('请输入身份证号'); } $history = User::where('id', '<>', $user_id)->where('card_num', $request->card_num)->first(); if ($history) { return $this->failure('此身份证已被 ' . $history->name . ' 实名验证过!'); } // $js_result = \AliyunService::aliCheckInfoV2($user_id, $request->name, $request->card_num); // $result = json_decode($js_result); // if (empty($result)) { // throw new \Exception("aliCheckInfoV2 错误 $js_result"); // } // if ($result->code == 200) { // $bizCode = $result->value->bizCode; // if ($bizCode == 0) { //添加身份证号 if ($user->card_num && $user->is_real_approved == 1) { return $this->failure('已认证'); } if ($request->name != $user->name) { $user->name = $request->name; } if ($request->card_num != $user->card_num) { $user->card_num = $request->card_num; } //标记邀请 $openid = Wechat::where('user_id', $user->user_id)->value('openid'); InviteHistory::where('openid', $openid)->update(['is_approved' => 1]); $user->is_approved = 1; $user->is_real_approved = 1; $user->approve_date = date('Y-m-d H:i:s'); DB::beginTransaction(); $user->save(); $platform_id = ApproveHistory::where('user_id', $user_id)->where('type', 'name')->where('status', 0)->value('from_platform'); ApproveHistory::where('user_id', $user_id)->whereIn('type', ['name', 'body'])->where('status', 0)->update(['status' => 1, 'reason' => '', 'ways' => 1]); // if ($user->type === 'single') { //单身赠送一个月市级会员 // $this->addUserRank($user->id, 1, 1); //提醒用户 // $message = '尊敬的用户:'.$user->name.',您已经通过了福恋小程序的实名认证,并且赠送您一个月的市级会员,请进入福恋小程序查看会员状态与认证状态!'; // }elseif ($user->type === 'marriage') { $message = '尊敬的用户:' . $user->name . ',您已经通过了福恋小程序的实名认证,请进入福恋小程序查看认证状态!'; // } $this->sms->sentMessage($user->mobile, $message); //更新出生日期 $this->cardBirthdayToProfile($user); $user->updateCacheUser('is_real_approved'); //通过渠道认证 $platform_id = Platform::where('app_id', $platform_id)->value('id'); if (!empty($platform_id)) { PlatformBehavior::create([ 'user_id' => $user_id, 'platform_id' => $platform_id, 'model' => 'APPROVE', ]); } // } else { // return $this->failure($result->message); // } // } else { // $message = explode(':', $result->message); // // dd($message); // if (is_array($message) && count($message)) { // if ($message[1] == '参数非法') { // $error = '信息不匹配'; // // DB::rollback(); // return $this->failure($error); // // } elseif ($message[1] != '参数非法') { // DB::rollback(); // return $this->failure($message[1]); // } // } // DB::rollback(); // return $this->failure($result->message); // } } elseif ($type == -1) { User::where('id', $user_id)->update(['is_approved' => 0, 'is_real_approved' => 0, 'card_num' => '']); $content = $request->input('content'); if (empty($content)) { DB::rollback(); return $this->failure('输入拒绝理由'); } ApproveHistory::where('user_id', $user_id)->whereIn('type', ['name', 'body'])->whereIn('status', [0, 1])->update([ 'status' => -1, 'reason' => $content, 'ways' => 1 ]); $this->userCon->sendAssistantMessage(compact('user_id'), $content); } $from_user_id = ApproveHistory::where('user_id', $user_id)->where('type', 'name')->value('from_user_id'); $from_user = User::find($from_user_id); if ($from_user) $from_user->addCoinLog('RECSYSTEM', $user_id, 50, '邀请好友认证'); DB::commit(); return $this->success('ok'); } catch (\Exception $e) { DB::rollback(); throw new \Exception($e->getMessage()); // return $this->failure('认证失败,请稍后再试'); } } public function cardBirthdayToProfile($user) { //拿到身份证的出生日期 $result = \CommonUtilsService::checkCardBirhday($user->card_num); if ($result['error'] != 2) { return; } $birthday = $result['tdate']; if ($user->type == 'single') { $user->profileCourtship->birthday = $birthday; $user->profileCourtship->save(); } else { $profile = $user->profileMarriage; if (empty($profile)) { $profile = new ProfileMarriage; $profile->sex = $user->sex; $profile->belief = $user->belief; $profile->user_id = $user->id; } $profile->birthday = $birthday; $profile->save(); } return; } public function userApprovedV2(Request $request, $user_id) { $user = User::find($user_id); $user->is_approved = $user->is_approved ? 0 : 1; $user->save(); if ($user->is_approved) { ApproveHistory::updateOrCreate(['user_id' => $user_id, 'type' => 'name'], ['status' => 1, 'ways' => 1]); } else { ApproveHistory::where(['user_id' => $user_id, 'type' => 'name'])->delete(); } $is_approved = $user->is_approved; return $this->success('ok', compact('is_approved')); } //增加真人认证 public function realApproved(Request $request, $user_id) { $user = User::find($user_id); if (empty($user)) return $this->failure('用户不存在'); $name = $request->name; if (empty($name)) return $this->failure('请输入该用户的真实姓名'); $card_num = $request->card_num; if (empty($card_num)) return $this->failure('请输入该用户的身份证号码'); $is_set = User::where('id', '<>', $user_id)->where('card_num', $card_num)->first(); if ($is_set) return $this->failure('该号码已被' . $is_set->name . '认证过'); $identification_photos = $request->identification_photos; ApproveHistory::updateOrCreate(['user_id' => $user_id, 'type' => 'body'], ['status' => 1, 'ways' => 1]); $user->card_num = $card_num; $user->identification_photos = json_encode($identification_photos); $user->is_real_approved = 1; $user->name = $name; $is_real_approved = $user->is_real_approved; $user->save(); return $this->success('ok', compact('is_real_approved')); } //取消真人认证 public function cancelRealApproved(Request $request, $user_id) { $user = User::find($user_id); if (empty($user)) return $this->failure('用户不存在'); ApproveHistory::where('type', 'body')->where('user_id', $user_id)->delete(); // $user->card_num = null; // $user->identification_photos = null; $user->is_real_approved = 0; $is_real_approved = $user->is_real_approved; $user->save(); return $this->success('ok', compact('is_real_approved')); } // 取消学历认证 public function cancleEducateApproced(Request $request, $user_id) { $user = User::find($user_id); if (empty($user)) return $this->failure('用户不存在'); $profile = ProfileCourtship::where('user_id', $user_id)->first(); ApproveHistory::where('type', 'educate')->where('user_id', $user_id)->delete(); $user->is_educate_approved = 3;//0 拒绝 1通过 2审核 3未认证 $profile->save(); $user->save(); return $this->success('ok', $user->is_educate_approved); } //增加学历认证 public function educateApproced(Request $request, $user_id) { try { $user = User::find($user_id); if (empty($user)) return $this->failure('用户不存在'); DB::beginTransaction(); $profile = ProfileCourtship::firstOrCreate(['user_id' => $user->id]); if ($request->graduate_school) $profile->graduate_school = $request->graduate_school; if ($request->chsi_code) $profile->chsi_code = $request->chsi_code; if ($request->degree) $profile->degree = $request->degree; if ($request->educate_photo) $profile->educate_photo = $request->educate_photo; ApproveHistory::updateOrCreate(['user_id' => $user_id, 'type' => 'educate'], ['status' => 1, 'ways' => 1, 'reason' => '']); $user->is_educate_approved = 1;//0 拒绝 1通过 2审核 3未认证 $user->save(); $profile->save(); DB::commit(); return $this->success('ok', $user->is_educate_approved); } catch (\Exception $e) { DB::rollBack(); $this->getError($e); return $this->failure('认证失败,联系开发人员'); } } //增加 取消 头像认证 public function photoAudited(Request $request, $user_id) { try { $user = User::findOrFail($user_id); $is_photo_audited = $request->is_photo_audited ?? 1; $photo = $request->input('photo'); DB::beginTransaction(); if ($is_photo_audited == 1) { //内容安全-图片 $result = \CommonUtilsService::imageContentCecurity([$photo]); // $res = $this->userCon->checkPhotoResult($result); // if (empty($res)) throw new \Exception("图片分析失败", 1); // if ($result && isset($result['result']) && $result['result']) { // return $this->failure('图片' . $result['result'] . ',请换一张照片'); // } // 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']); // } // $face_list = $result->result->face_list; if ($request->photo) { $user->photo = $request->photo; $user->app_avatar = $request->photo; $user->wechat->avatar2 = $request->photo; } $user->circle_avatar = null; $user->my_share = null; $user->home_share = null; $user->is_audited = 0; $user->is_photo_audited = 1; // $user->face_score = $face_list[0]->beauty; $user->save(); $user->wechat->save(); $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); } elseif ($is_photo_audited == 2) {//给默认头像 if ($user->photo) { $photo = $user->photo; } elseif ($user->app_avatar) { $photo = $user->app_avatar; } elseif ($user->circle_avatar) { $photo = $user->circle_avatar; } else { $photo = User::DefaultAvatar; } ErrorPhoto::firstOrCreate(['user_id' => $user_id, 'photo' => $photo, 'error_msg' => '保留用户旧头像']); $user->is_photo_audited = -1; $user->circle_avatar = null; $user->face_score = 0; if ($user->sex == 1) { $user->photo = 'https://image.fulllinkai.com/202203/09/39cb4692a41a0a26efa4832e5e0bed91.png'; $user->app_avatar = 'https://image.fulllinkai.com/202203/09/39cb4692a41a0a26efa4832e5e0bed91.png'; } elseif ($user->sex == 2) { $user->photo = 'https://image.fulllinkai.com/202203/22/28bcaafeb28c375e3cd6ecf7530eee50.png'; $user->app_avatar = 'https://image.fulllinkai.com/202203/22/28bcaafeb28c375e3cd6ecf7530eee50.png'; } else { $user->photo = User::DefaultAvatar; $user->app_avatar = User::DefaultAvatar; } // $user->updateCacheUser('photo'); // $user->updateCacheUser('app_avatar'); //负面分 + 5 $user->increment('negative_score', 5); 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); $user->save(); } else { $user->is_photo_audited = -1; $user->save(); } DB::commit(); return $this->success('ok'); } catch (\Exception $e) { DB::rollBack(); $this->getError($e); return $this->failure('操作失败,联系开发人员'); } } /** * 人工认证 * @param Request $request [description] * @return [type] [description] */ public function approveUsers(Request $request) { // where('type','body')->distinct('user_id')->where('status',0)->whereNotNull('identification_photos'); $user_ids = ApproveHistory::where('type', 'body')->where('ways',1)->distinct('user_id')->orderBy('created_at', 'desc'); $is_approved = $request->input('is_approved', 0); if ($request->has('is_approved') && is_numeric($is_approved)) { $user_ids = $user_ids->where('status', $is_approved); } $user_ids = $user_ids->pluck('user_id'); $arr = $user_ids->toArray(); $str = implode(',', $arr); $users = User::with('approveLog')->whereIn('id', $user_ids)->orderByRaw(DB::raw('FIELD(id,' . $str . ') asc'))->whereNotNull('identification_photos'); // $users = User::with('approveLog')->whereIn('id', $user_ids)->whereNotNull('identification_photos'); $keyword = $request->input('keyword'); if ($keyword) { $keyword = trim($keyword); $users = $users->where(function ($sql) use ($keyword) { $sql->where('name', 'like', '%' . $keyword . '%') ->orWhere('id', 'like', '%' . $keyword . '%') ->orWhere('mobile', 'like', '%' . $keyword . '%'); }); } $users = $users->paginate(); foreach ($users as $user) { if (is_array(json_decode($user->identification_photos))) { $user->identification_photos = array_values(json_decode($user->identification_photos, true)); $user->avatar = $user->userAvatar($user->id); $user->makeVisible('card_num')->toArray(); } $user->mobile = ''; } return $this->success('ok', $users); } /** * 学历认证列表 * @param Request $request [description] * @return [type] [description] */ public function approveEducateLogs(Request $request) { $logs = ApproveHistory::with('user.profileCourtship:id,user_id,chsi_code,educate_photo,degree,graduate_school', 'user:id,nickname,app_avatar,sex,name,photo,circle_avatar')->whereHas('user')->where('type', 'educate')->orderBy('updated_at', 'desc'); $keyword = $request->input('keyword'); if (trim($keyword)) { $logs->whereHas('user', function ($sql) use ($keyword) { $sql->where('nickname', 'like', '%' . $keyword . '%') ->orWhere('name', 'like', '%' . $keyword . '%') ->orWhere('mobile', 'like', '%' . $keyword . '%'); }); } $status = $request->input('status'); if (is_numeric($status)) { $logs = $logs->where('status', $status); } $logs = $logs->paginate(); foreach ($logs as $log) { $log->user->avatar = $log->user->userAvatar(); $log->user->app_avatar = $log->user->avatar; $log->extend = json_decode($log->extend); } return $this->success('ok', $logs); } public function auditEducateLogs(Request $request, $log_id) { try { \DB::beginTransaction(); $log = ApproveHistory::find($log_id); $status = $request->input('status'); if ($status == 1) {//同意 // if(!$request->chsi_code) return $this->failure('学信网证书编号必填'); $user = $log->user; $is_educate_approved = Db::table('users')->where('id',$log->user_id)->value('is_educate_approved'); // return $this->success('ok',$is_educate_approved); if($is_educate_approved == 1) { //升级学历 $profile = profileCourtship::where('user_id', $user->id)->first(); if ($request->graduate_school && $request->degree) { $extend = json_decode($log->extend,true); $educate_photo = $extend['educate_photo'] ?? ''; $profile->educate_photo = $educate_photo ?: $profile->educate_photo; $profile->graduate_school = $request->graduate_school; $profile->degree = $request->degree; $profile->chsi_code = $request->chsi_code; $profile->save(); } $message = '您的学历升级认证已通过后台审核!'; }else{ //修改认证信息 $user->is_educate_approved = $status; $user->save(); $profile = profileCourtship::where('user_id', $user->id)->first(); if ($request->graduate_school && $request->degree) { $profile->graduate_school = $request->graduate_school; $profile->degree = $request->degree; $profile->chsi_code = $request->chsi_code; $profile->save(); } $log->reason = null; //赠送福币 //是否已赠送 $remark = '学历认证'; $coin = 10; $coin_log = $user->coinLogs()->where(['type' => 'RECSYSTEM', 'remark' => $remark])->first(); if (empty($coin_log)) { //赠送福币 +10 $user->updateCoinInfo('add', $coin, 'other'); $user->addCoinLog("RECSYSTEM", 0, $coin, $remark); } $message = '您的学历认证已通过后台审核,系统赠送您' . $coin . '个福币作为奖励,请注意查收!'; } } elseif ($status == -1) { $reason = $request->input('reason'); if (empty($reason)) return $this->failure('请输入拒绝理由'); $log->reason = $reason; $message = '您的学历认证未通过后台审核,理由:' . $reason . ',请您核实信息后重新提交审核!'; } //修改记录信息 $log->status = $status; $log->save(); \DB::commit(); //发送IM消息 $body = ['msg' => $message]; $im_service = new IMService(env('IM_APP_KEY'), env('IM_APP_SECRET')); $im_service->sendMsg(1, 0, $log->user_id, $type = 0, $body); //发送系统消息 $user_service = new UserService(); $user_service->sendNotice($log->user_id, 1, 'system', $message); return $this->success('ok'); } catch (\Exception $e) { \DB::rollback(); $this->getError($e); return $this->failure('审核失败,请联系开发人员'); } } /** * 反馈列表 * @param Request $request [description] * @return [type] [description] */ public function feedbacks(Request $request) { $feedbacks = $this->userCon->feedbacksV2($request); return $this->success('ok', $feedbacks); } /** * 导出反馈列表 */ public function feedbacksExcel(Request $request) { $status = $request->has('status') ? $request->status : 0; $keyword = $request->has('keyword') ? $request->keyword : ''; $take = $request->has('take') ? $request->take : 15; $skip = ($request->page - 1) * $take; return \Excel::download(new FeedbackExport($status, $keyword, $take, $skip), '反馈列表第' . $request->page . '页.xlsx'); } /** * 修改反馈状态 */ public function changeFeedbackStatus(Request $request, $feedback_id) { $this->userCon->changeFeedbackStatusV3($request, $feedback_id); return $this->success('ok'); } /** * 导出推荐人推荐数据(Excel) * @param Request $request [description] * @param [type] $user_id [description] * @return [type] [description] */ public function exportReferreInviteUsers(Request $request, $user_id = null) { $name = '所有人'; if ($user_id) { $name = User::where('id', $user_id)->value('name'); } return \Excel::download(new ReferrerInviteUsersExport($user_id), $name . 'invite_users.xlsx'); } /** * 审核用户 (头像和资料) * @param Request $request [description] * @param [type] $user_id [description] * @return [type] [description] */ public function auditUser(Request $request, $user_id) { $user = User::findOrFail($user_id); if ($user->is_audited) { $user->is_audited = 0; } else { $is_completed = $this->userCon->isCompleteProfile($user_id); if (empty($is_completed)) { return $this->failure('审核失败,资料不完善'); } if (empty($user->is_photo_audited)) { return $this->failure('请先审核头像'); } $user->is_audited = 1; } $user->save(); return $this->success("ok"); } /** * 用户邀请注册用户列表 * @param [type] $user_id [description] * @return [type] [description] */ public function inviteUsers(Request $request, $user_id) { $users = $this->userCon->inviteUsers($user_id); return $this->success('ok', $users); } /** * 管理员列表 * @param Request $request [description] * @return [type] [description] */ public function admins(Request $request) { $admins = $this->userCon->admins($request); return $this->success('ok', $admins); } /** * 添加管理员 * @param Request $request [description] * @return [type] [description] */ public function createAdmin(Request $request) { $user_id = $request->input('user_id'); if (empty($user_id)) { return $this->failure('请选择用户'); } $type = $request->input("type"); if (empty($type)) { return $this->failure('请选择类型'); } // $roles = $request->add_roles; // if(empty($roles) || !is_array($roles)){ // return $this->failure('请选择角色'); // } // $permissions = $request->add_permissions; // if(empty($permissions) || !is_array($permissions)){ // return $this->failure('请选择权限'); // } $admin = $this->userCon->createAdmin($request); if ($admin) { return $this->success('ok', $admin); } else { return $this->failure('创建失败'); } } /** * 修改管理员 * @param [type] $request [description] * @param [type] $admin_id [description] * @return [type] [description] */ public function updateAdmin(Request $request, $admin_id) { $admin = $this->userCon->updateAdmin($request, $admin_id); return $this->success('ok', $admin); } /** * 删除管理员 * @param [type] $admin_id [description] * @return [type] [description] */ public function deleteAdmin($admin_id) { $result = $this->userCon->deleteAdmin($admin_id); if ($result) { return $this->success('ok'); } else { return $this->failure('删除失败'); } } /** * 用户Vip列表 * @param User $user [description] * @return [type] [description] */ public function userRankHistories(Request $request, User $user) { $temp_rank = $request->temp_rank; $temp_member = null; if ($temp_rank) { $temp_member = TempMember::where('user_id', $user->id)->get(); return $this->success('ok', $temp_member); } $is_deadline = $request->is_deadline; if ($is_deadline == 1) { $histories = $user->rankHistories()->with('rank')->get(); } else { $histories = $user->rankHistoriesV2()->with('rank')->onlyTrashed()->get();//过期会员 } if (!empty($histories)) { foreach ($histories as $history) { $history->fetch_type = $history->type; switch ($history->type) { case 'RECSYSTEM': $history->fetch_type = '系统赠送'; break; case 'birthday_give': $history->fetch_type = '生日赠送'; break; case 'buy': $history->fetch_type = '购买会员'; break; case 'mini_service': $history->fetch_type = '购买单身服务'; break; case 'mini_rank': $history->fetch_type = '购买普通会员'; break; case 'card': $history->fetch_type = '购买团契卡'; break; case 'sign_year': $history->fetch_type = '签到赠送'; break; case 'RANK': $history->fetch_type = '购买会员'; break; case '520_topic_give': $history->fetch_type = '参与520活动获得'; break; case 'topic_activities': $history->fetch_type = '参与话题活动获得'; break; case 'support_henan': $history->fetch_type = '福恋声援河南赠送'; break; default: // code... break; } } } return $this->success('ok', compact('user', 'histories')); } public function userRankHistory(RankHistory $history) { $rank = $history->rank; $history->rank = $rank; return $this->success('ok', $history); } /** * 修改用户Vip * @param Request $request [description] * @param RankHistory $history [description] * @return [type] [description] */ public function updateUserRankHistory(Request $request, RankHistory $history) { $rank_id = $request->input('rank_id'); $data['rank_id'] = $rank_id; if (empty($rank_id)) { return $this->failure('请选择会员类型'); } $exists = $history->where('user_id', $history->user_id)->where('rank_id', $rank_id)->where('id', '<>', $history->id)->exists(); if ($exists) { return $this->failure('用户已存在改类型会员'); } $deadline = $request->input('deadline'); $data['deadline'] = $deadline; if (empty($deadline)) { return $this->failure('请选择会员时间'); } $history->update($data); return $this->success('ok'); } /** * 增加用户Vip * @param Request $request [description] * @param User $user [description] */ public function addUserRankHistory(Request $request, User $user) { $rank_id = $request->input('rank_id'); if (empty($rank_id)) { return $this->failure('请选择会员类型'); } // $exists = $user->rankHistories()->where('rank_id', $rank_id)->exists(); // if ($exists) { // return $this->failure('用户已存在类型会员,请直接修改'); // } $deadline = $request->input('deadline'); if (empty($deadline)) { return $this->failure('请选择会员时间'); } if (empty($user)) { return $this->failure('用户不存在'); } //添加记录 $user->rankHistories()->create([ 'rank_id' => $rank_id, 'deadline' => $deadline, 'type' => 'RECSYSTEM', 'remark' => $request->remark, ]); if ($user->rank_id != 9) { $user->rank_id = 9; $user->save(); } //如果当前会员低于创建会员,修改会员等级 // if ($user->rank_id < $rank_id) { // $result = $user->update(['rank_id'=>$rank_id]); // } // $user->currentRank(); //修改缓存 $user->updateCacheUser('is_super_rank'); $user->updateCacheUser('rank_deadline'); return $this->success('ok'); } /** * 删除用户vip * @param Request $request [description] * @param RankHistory $history [description] * @return [type] [description] */ public function destroyUserRankHistory(Request $request, RankHistory $history) { $history->delete(); $history->user->currentRank(); return $this->success('ok'); } /** * 助手消息列表 * @param Request $request [description] * @return [type] [description] */ public function assistantMessages(Request $request) { try { $message_type = $request->message_type ? $request->message_type : 'chat_message'; $messages = AssistantMessage::with('operator')->whereNotNull('user_ids') ->where('user_ids', '<>', '')->where('message_type', $message_type) ->orderBy('id', 'desc')->paginate(); foreach ($messages as $message) { $message->nicknames = json_decode($message->nicknames); } return $this->success('ok', $messages); } catch (\Exception $e) { $this->getError($e); return $this->failure('获取列表失败,请稍后再试'); } } /** * 助手消息列表 * @param Request $request [description] * @return [type] [description] */ public function noticeMessagesList(Request $request) { try { $message_type = $request->message_type; $messages = NoticeMessage::with('operator')->whereNotNull('user_ids') ->where('user_ids', '<>', '') ->when($message_type, function ($query) use ($message_type) { $query->where('message_type', $message_type); }); if ($request->status != -1) { $messages = $messages->where('status', $request->status); } $messages = $messages->orderBy('id', 'desc')->paginate(); foreach ($messages as $message) { $message->nicknames = json_decode($message->nicknames); } return $this->success('ok', $messages); } catch (\Exception $e) { $this->getError($e); return $this->failure('获取列表失败,请稍后再试'); } } /** * 助手消息详情 * @param Request $request [description] * @param AssistantMessage $message [description] * @return [type] [description] */ public function assistantMessage(Request $request, AssistantMessage $message) { try { //消息对象 $user_ids = $message->user_ids; $users = null; if ($message->type == 'PART') { $users = User::whereIn('id', $user_ids)->select('id', 'name', 'nickname', 'mobile', 'type', 'photo', 'app_avatar', 'circle_avatar')->paginate(); } $message->users = $users; return $this->success('ok', $message); } catch (\Exception $e) { $this->getError($e); return $this->failure('获取详情失败,请稍后再试'); } } /** * 助手消息详情 * @param Request $request [description] * @param AssistantMessage $message [description] * @return [type] [description] */ public function noticeMessage(Request $request, NoticeMessage $message) { try { //消息对象 $user_ids = $message->user_ids; $users = null; $notice = Notice::with('receiveUser:id,name,nickname,mobile,type,photo,app_avatar,circle_avatar')->where('notice_message_id', $message->id); if ($message->type == 'PART') { $notice = $notice->whereIn('user_id', $user_ids); } $notice = $notice->select('id', 'user_id', 'receive_status') ->paginate(); $message->users = $notice; return $this->success('ok', $message); } catch (\Exception $e) { $this->getError($e); return $this->failure('获取详情失败,请稍后再试'); } } /** * 发送助手消息 * @param Request $request [description] * @return [type] [description] */ public function sendAssistantMessage(Request $request, AssistantMessage $assistantMessage) { try { //检查参数 $content = $request->input('content'); if (empty($content)) { return $this->failure('请输入内容'); } //类型 ALL所有, 单身, 介绍人, 男, 女, 会员, 非会员 $type = $request->input('type', 'PART'); $user_type = $request->input("user_type"); $user_sex = $request->input('user_sex'); $user_rank = $request->input("user_rank"); $is_approved = $request->input('is_approved'); $user_ids = $request->input('user_ids', []); $city = $request->input('city'); $province = $request->input('province'); if (empty($user_type) && empty($user_sex) && empty($user_rank) && empty($is_approved) && empty($user_ids) && empty($type)) { return $this->failure('请选择用户'); } if ($type == 'ALL') { $app_user_ids = Db::table('user_register_channels')->whereNotIn('channel', ['mini_program', 'official'])->pluck('user_id')->toArray(); $users = User::select('id', 'nickname', 'mobile')->whereIn('id',$app_user_ids)->get(); } else { if(empty($user_ids)){ $where = [] ; if (!empty($user_type) && $user_type != 'ALL') { $where[] = ['type','=',$user_type]; } if (!empty($user_sex) && $user_sex != 'ALL') { $where[] = ['sex','=',$user_sex]; }else{ $where[] = ['sex','>',0]; } if ($user_rank) { $where[] = ['rank_id', '>', 0]; } else { $where[] = ['rank_id', '=', 0]; } if ($is_approved) { $where[] = ['is_approved', '=', 1]; } $users = User::where($where)->select('id', 'nickname', 'mobile')->get(); if (!empty($province)) { $single_user_ids = ProfileCourtship::where('province', $province)->pluck('user_id')->toArray(); $marriage_user_ids = ProfileMarriage::where('province', $province)->pluck('user_id')->toArray(); $user_ids = array_merge($single_user_ids, $marriage_user_ids); $user_ids = array_unique($user_ids); $users = User::whereIn('id', $user_ids)->select('id', 'nickname', 'mobile')->get(); } if (!empty($city)) { $single_user_ids = ProfileCourtship::where('city', $city)->pluck('user_id')->toArray(); $marriage_user_ids = ProfileMarriage::where('city', $city)->pluck('user_id')->toArray(); $user_ids = array_merge($single_user_ids, $marriage_user_ids); $user_ids = array_unique($user_ids); $users = User::whereIn('id', $user_ids)->select('id', 'nickname', 'mobile')->get(); } }else{ $users = User::whereIn('id', $user_ids)->select('id', 'nickname', 'mobile')->get(); } } $user_ids = []; $mobile = []; $nicknames = []; foreach ($users as $user){ $user_ids[] = $user->id; $mobile[] = $user->mobile; $nicknames[] = $user->nickname; } // $data = [ // 'mobile' => $mobile, // 'message' => $content // ]; // 创建助手消息 $assistantMessage->create([ 'content' => $content, 'user_ids' => json_encode(array_slice($user_ids, 0, 50)), 'nicknames' => json_encode(array_slice($nicknames, 0, 50), JSON_UNESCAPED_UNICODE), 'message_type' => 'chat_message', 'operator' => auth()->id(), ]); $this->userCon->sendAssistantMessage($user_ids, $content); // SendSpreaderNote::dispatch($data)->onQueue('love'); //返回 return $this->success('ok'); }catch (\Exception $e){ $this->getError($e); return $this->failure($e->getMessage()); } } /** * 群发通知消息 * @param Request $request [description] * @return [type] [description] */ public function sendNoticeMessage(Request $request) { //检查参数 $param['content'] = $request->input('content'); if (empty($param['content'])) return $this->failure('请输入内容'); $param['pic'] = $request->input('pic'); $param['type'] = $request->input('type', 'PART'); $param['user_type'] = $request->input("user_type"); $param['user_sex'] = $request->input('user_sex'); $param['user_rank'] = $request->input("user_rank"); $param['is_approved'] = $request->input('is_approved'); $param['user_ids'] = $request->input('user_ids', []); if (empty($param['user_type']) && empty($param['user_sex'] ) && empty($param['user_rank']) && empty($param['is_approved']) && empty($param['user_ids']) && empty($param['type'])) { return $this->failure('请选择用户'); } $param['message_type'] = $request->input('message_type'); $param['city'] = $request->input('city'); $param['province'] = $request->input('province'); $param['timing'] = $request->input('timing'); SendNoticeMessage::dispatch($param)->onQueue('send_notice'); //返回 return $this->success('ok'); } //填充nickname public function addName(Request $request) { try { $messages = AssistantMessage::orderBy('id', 'desc')->where('user_ids', '<>', '')->whereNotNull('user_ids')->whereNull('nicknames')->get(); foreach ($messages as $message) { if (!empty($message->user_ids)) { $user_ids = $message->user_ids; $nicknames = User::whereIn('id', $user_ids)->pluck('nickname')->toArray(); $message->nicknames = json_encode($nicknames, JSON_UNESCAPED_UNICODE); $message->save(); } } return $this->success('ok'); } catch (\Exception $e) { $this->getError($e); return $this->failure('填充失败'); } } //群发短信 public function sendBathchSms(Request $request, AssistantMessage $assistantMessage) { //检查参数 $content = $request->input('content'); if (empty($content)) { return $this->failure('请输入内容'); } //类型 ALL所有, 单身, 介绍人, 男, 女, 会员, 非会员 $type = $request->input('type', 'PART'); $user_type = $request->input("user_type"); $user_sex = $request->input('user_sex'); $user_rank = $request->input("user_rank"); $is_approved = $request->input('is_approved'); $user_ids = $request->input('user_ids', []); $province = $request->input('province'); $city = $request->input('city'); $nicknames = []; if (empty($user_type) && empty($user_sex) && empty($user_rank) && empty($is_approved) && empty($user_ids) && empty($type)) { return $this->failure('请选择用户'); } if ($type == 'ALL') { $users = User::where('hidden_profile', '<>', 'ALLSEX')->select('id', 'nickname')->get(); $user_ids = []; foreach ($users as $user) { $user_ids[] = $user->id; $nicknames[] = $user->nickname; } // dd($nicknames); if (!empty($province)) { $single_user_ids = ProfileCourtship::where('province', $province)->pluck('user_id')->toArray(); $marriage_user_ids = ProfileMarriage::where('province', $province)->pluck('user_id')->toArray(); $user_ids = array_merge($single_user_ids, $marriage_user_ids); $user_ids = array_unique($user_ids); } if (!empty($city)) { $single_user_ids = ProfileCourtship::where('city', $city)->pluck('user_id')->toArray(); $marriage_user_ids = ProfileMarriage::where('city', $city)->pluck('user_id')->toArray(); $user_ids = array_merge($single_user_ids, $marriage_user_ids); $user_ids = array_unique($user_ids); } } else { if (empty($user_ids)) { $user_ids = User::where('hidden_profile', '<>', 'ALLSEX')->where('sex', '>', 0); if (!empty($user_type) && $user_type != 'ALL') { $user_ids = $user_ids->where('type', $user_type); } if (!empty($user_sex) && $user_sex != 'ALL') { $user_ids = $user_ids->where('sex', $user_sex); } if ($user_rank) { switch ($user_rank) { case 1: $user_ids = $user_ids->where('rank_id', '>', 0); break; default: $user_ids = $user_ids->where('rank_id', 0); break; } } if ($is_approved) { $user_ids = $user_ids->where('is_approved', 1); } $user_ids = $user_ids->pluck('id')->toArray(); if (!empty($province)) { $single_user_ids = ProfileCourtship::where('province', $province)->pluck('user_id')->toArray(); $marriage_user_ids = ProfileMarriage::where('province', $province)->pluck('user_id')->toArray(); $user_ids = array_merge($single_user_ids, $marriage_user_ids); $user_ids = array_unique($user_ids); } if (!empty($city)) { $single_user_ids = ProfileCourtship::where('city', $city)->pluck('user_id')->toArray(); $marriage_user_ids = ProfileMarriage::where('city', $city)->pluck('user_id')->toArray(); $user_ids = array_merge($single_user_ids, $marriage_user_ids); $user_ids = array_unique($user_ids); } foreach ($user_ids as &$item) { $item = (string)$item; } } } $mobile = User::whereIn('id', $user_ids)->pluck('mobile')->toArray(); $nicknames = User::whereIn('id', $user_ids)->pluck('nickname')->toArray(); $array = [ 'mobile' => $mobile, 'message' => $content ]; // 创建助手消息 $assistantMessage->create([ 'content' => $content, 'user_ids' => json_encode(array_slice($user_ids, 0, 50)), 'nicknames' => json_encode($nicknames, JSON_UNESCAPED_UNICODE), 'message_type' => 'sms_message', 'operator' => auth()->id(), ]); SendSmsBatch::dispatch($array)->onQueue('love'); return $this->success('ok'); } //预审核短信内容是否过审 public function auditedSmsContent(Request $request, AssistantMessage $assistantMessage) { try { $content = $request->input('content'); if (empty($content)) { return $this->failure('请输入内容'); } $mobile = $request->input('mobile', 18171893605); $user_ids = User::where('mobile', $mobile)->pluck('id')->toArray(); $nicknames = User::where('mobile', $mobile)->pluck('nickname')->toArray(); // 创建助手消息 $assistantMessage->create([ 'content' => $content, 'user_ids' => json_encode(array_slice($user_ids, 0, 50)), 'nicknames' => json_encode($nicknames, JSON_UNESCAPED_UNICODE), 'message_type' => 'sms_message', 'operator' => auth()->id(), ]); $status = Messenger::sendSMS($mobile, $content); return $this->success('ok', $status); } catch (\Exception $e) { $this->getError($e); return $this->failure('发送失败'); } } /** * 审核头像 * @param Request $request [description] * @param User $user [description] * @return [type] [description] */ public function auditUserPhoto(Request $request, User $user) { try { \DB::beginTransaction(); $userIds = explode(',', $request->userids); $users = User::whereIn('id', $userIds)->get(); $is_photo_audited = $request->input('is_photo_audited'); $audit_data = [];//写入到审核记录 $date_time = date('Y-m-d H:i:s'); foreach ($users as $user) { $user_id = $user->id; $photo = DB::table('users')->where('id',$user_id)->value('photo'); if ($is_photo_audited == 1) { foreach ($users as $item) { if (empty($item->photo)) { \DB::commit(); return $this->failure($item->name . '没有头像'); } } $user->update(['is_photo_audited' => 1]); $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, $user->profileCourtship->birthday, $user->mobile, $user->sex); } elseif ($is_photo_audited == -1) { $user->update(['is_photo_audited' => -1]); $content = '您的头像未通过审核,理由:' . ($request->input('reason') ?: '头像不符合规则'); // $this->userCon->sendAssistantMessage($user_id, $content); $this->userCon->sendNotice($user_id, 1, 'system', $content, $content, 0, "/pages/users/unmarriV2", 1); if ($user->wechat && $user->wechat->official_openid) { $param["touser"] = $user->wechat->official_openid; $param['template_id'] = "L1USyvfRgGza8Aa0GDIKkhq5FC3l6_QdHKTpRK46zB4"; $param['url'] = env('APP_URL').'/h5'; $param['miniprogram'] = [ 'appid'=>config('wechat.mini_program.app_id'), 'pagepath'=>'/pages/news/systemNews', ]; $param['data'] = [ "const6" => '头像审核', 'time5'=> date("Y年m月d日 H:i") ]; SendTemplateMsg::dispatch($param)->onQueue('template_message'); } } $audit_data[] = [ 'user_id' => $user_id, 'type' => Audit::TYPE_USER_AVATAR, 'check_data' => json_encode(['avatar' => $photo], JSON_UNESCAPED_UNICODE), 'status' => $is_photo_audited, 'operator_id' => auth()->id(), 'created_at' => $date_time, 'updated_at' => $date_time ]; } Audit::insert($audit_data); \DB::commit(); return $this->success('ok'); } catch (\Exception $e) { \DB::rollback(); return $this->failure('审核头像失败,请稍后再试'); } } /** * 头像列表 * 是否审核 */ public function usersPhoto(Request $request) { $users = User::orderBy('updated_at', 'desc'); $is_photo_audited = $request->input('is_photo_audited', 0);//默认戴审核 if ($is_photo_audited == 1) {//审核通过 $users = $users->where('is_photo_audited', 1); } elseif ($is_photo_audited == -1) {//审核拒绝 $users = $users->where('is_photo_audited', -1); } elseif ($is_photo_audited == 0) { $users = $users->whereNotNull('photo')->where('is_photo_audited', 0); } $keyword = $request->input('keyword'); if ($keyword) { $keyword = trim($keyword); $users = $users->where(function ($sql) use ($keyword) { $sql->where('name', 'like', '%' . $keyword . '%') ->orWhere('id', 'like', '%' . $keyword . '%') ->orWhere('mobile', 'like', '%' . $keyword . '%'); }); } $users = $users->paginate(); foreach ($users as $key => $user) { $user->mobile = ''; } return $this->success('ok', $users); } public function usersPhotoV2(Request $request) { try { $is_photo_audited = $request->input('is_photo_audited',0); $keyword = $request->input('keyword'); //待审核 if($is_photo_audited == 0){ $users = User::orderBy('updated_at', 'desc')->whereNotNull('photo')->where('is_photo_audited', 0); if ($keyword) { $keyword = trim($keyword); $users = $users->where(function ($sql) use ($keyword) { $sql->where('name', 'like', '%' . $keyword . '%') ->orWhere('id', 'like', '%' . $keyword . '%') ->orWhere('mobile', 'like', '%' . $keyword . '%'); }); } $users = $users->paginate(); foreach ($users as $key => $user) { $user->mobile = ''; } return $this->success('ok', $users); } // $user_ids = User::query()->where('is_photo_audited', $is_photo_audited)->pluck('id'); $audits = Audit::query()->with('user') ->whereHas('user', function ($query) use ($keyword) { if ($keyword) { $query->where(DB::raw('concat(name,id,mobile,nickname)'), 'like', "%{$keyword}%"); } }) ->where('type', Audit::TYPE_USER_AVATAR) ->where('status', $is_photo_audited) // ->whereIn('user_id', $user_ids) ->orderByDesc('id') ->paginate(); $format_data = []; foreach ($audits as $item){ $check_data = $item->check_data; $p = [ 'id' => $item->user_id, 'sex' => $item->user->sex, 'belief' => $item->user->belief, 'type' => $item->user->type, 'photo' => $check_data['avatar'] ?? '' ]; $format_data[] = $p; } $audits = $audits->toArray(); $audits['data'] = $format_data; return $this->success('ok', $audits); } catch (\Exception $e) { return $this->failure($e->getMessage()); } } /** * 分享额外奖励 * @param Request $request [description] * @return [type] [description] */ public function userAddedBonuses(Request $request, User $user) { //这周一 $this_monday = strtotime('-1 monday', time()); //上周一 $last_monday = $this_monday - 7 * 24 * 3600; $start_time = date('Y-m-d', $last_monday); $end_time = date('Y-m-d', $this_monday); //上周奖励 $bonus = $user->bonus()->where('start_time', $start_time)->where('end_time', $end_time)->first(); if (empty($bonus)) { //上周邀请 $bonuses = $user->addedBonus()->where('created_at', '>', $start_time)->where('created_at', '<', $end_time)->get(); $first_week_count = $bonuses->where('amount', 7)->count(); $other_week_count = $bonuses->where('amount', 0)->count(); //人数 $bonus_count = $bonuses->count(); $award = 0; if ($bonus_count >= 30 && $bonus_count < 100) { //多少个是第一周的 $award = $first_week_count * 7 + $other_week_count * 5; } elseif ($bonus_count >= 100 && $bonus_count < 200) { $award = $bonus_count * 7; } elseif ($bonus_count >= 200) { $award = $bonus_count * 10; } elseif ($first_week_count) { $award = $first_week_count * 7; } //创建奖励 $bonus = Bonus::create([ 'user_id' => $user->id, 'start_time' => $start_time, 'end_time' => $end_time, 'first_week_count' => $first_week_count, 'other_week_count' => $other_week_count, 'award' => $award ]); } $status = $request->input('status', 0); $bonuses = Bonus::with('user')->where('user_id', $user->id); if ($status) { $bonuses = $bonuses->where('status', '<>', 0); } else { $bonuses = $bonuses->where('status', 0); } $bonuses = $bonuses->paginate(); return $this->success('ok', $bonuses); } public function addedBonuses(Request $request, Bonus $bonus, AddedBonus $addedBonus) { try { //这周一 $this_monday = strtotime('-1 monday', time()); //上周一 $last_monday = $this_monday - 7 * 24 * 3600; $start_time = date('Y-m-d', $last_monday); $end_time = date('Y-m-d', $this_monday); $user_ids = $addedBonus->where('created_at', '>', $start_time)->where('created_at', '<', $end_time)->distinct('user_id')->pluck('user_id'); $data = []; foreach ($user_ids as $user_id) { $bonus_obj = $bonus->where('user_id', $user_id)->first(); if (empty($bonus_obj)) { //上周邀请 $bonuses = $addedBonus->where('user_id', $user_id)->where('created_at', '>', $start_time)->where('created_at', '<', $end_time)->get(); $first_week_count = $bonuses->where('amount', 7)->count(); $other_week_count = $bonuses->where('amount', 0)->count(); //人数 $bonus_count = $bonuses->count(); $award = 0; if ($bonus_count >= 30 && $bonus_count < 100) { //多少个是第一周的 $award = $first_week_count * 7 + $other_week_count * 5; } elseif ($bonus_count >= 100 && $bonus_count < 200) { $award = $bonus_count * 7; } elseif ($bonus_count >= 200) { $award = $bonus_count * 10; } elseif ($first_week_count) { $award = $first_week_count * 7; } $new_data = []; $new_data['user_id'] = $user_id; $new_data['first_week_count'] = $first_week_count; $new_data['other_week_count'] = $other_week_count; $new_data['bonus_count'] = $bonus_count; $new_data['award'] = $award; $new_data['start_time'] = $start_time; $new_data['end_time'] = $end_time; $new_data['created_at'] = date('Y-m-d H:i:s'); $new_data['updated_at'] = date('Y-m-d H:i:s'); $data[] = $new_data; } continue; } if (count($data)) { $bonus->insert($data); } $status = $request->input('status', 0); if ($status) { $bonuses = $bonus->where('status', '<>', 0); } else { $bonuses = $bonus->where('status', 0); } $bonuses = $bonuses->with('user')->where('created_at', '>', $start_time)->where('created_at', '<', $end_time)->orderBy('id', 'desc')->paginate(); return $this->success('ok', $bonuses); } catch (\Exception $e) { $this->getError($e); return $this->failure('获取信息失败,请稍后再试'); } } /** * 处理额外奖励 * @param Request $request [description] * @return [type] [description] */ public function dealAddedBonus(Request $request, Bonus $bonus) { //这周一 $this_monday = strtotime('-1 monday', time()); //上周一 $last_monday = $this_monday - 7 * 24 * 3600; $start_time = date('Y-m-d', $last_monday); $end_time = date('Y-m-d', $this_monday); $status = $request->input('status'); if ($status == 1) {//同意 $bonus->status = 1; $bonus->save(); $order = TransferOrder::where('user_id', $bonus->user_id)->where('type', 'bonus')->where('created_at', '>', $end_time)->first(); if (empty($order)) { // //打款 $order = TransferOrder::create([ 'user_id' => $bonus->user_id, 'type' => 'bonus', 'trade_no' => $this->getTradeNo(), 'amount' => $bonus->award, 'is_hooked' => 0, ]); $openid = $bonus->wechat->openid; $total = $bonus->award * 100; $desc = '邀请注册用户额外奖励'; $result = \WechatService::userTransfer($order->trade_no, $openid, $total, $desc); } } elseif ($status == -1) {//拒绝 $bonus->status = -1; $bonus->save(); $content = $request->input('content'); $this->userCon->sendAssistantMessage([$bonus->user_id], $content); } return $this->success('ok'); } public function userFriends(Request $request, User $user) { // $id = $user->id; // $ids = Linking::where('user_id', $id)->pluck('user_linking_id'); // $other_ids = Linking::where('user_linking_id', $id)->pluck('user_id'); // $users = User::where(function ($sql) use ($ids, $other_ids) { // $sql->whereIn('id', $ids)->orWhereIn('id', $other_ids); // }); // $keyword = $request->input('keyword'); // if ($keyword) { // $keyword = trim($keyword); // $users = $users->where(function ($sql) use ($keyword) { // $sql->where('name', 'like', '%' . $keyword . '%') // ->orWhere('mobile', 'like', '%' . $keyword . '%'); // }); // } // $users = $users->orderBy('id', 'desc')->paginate(); $id = $user->id; $linings = DB::table('linkings')->where(function($sql) use($user){ $sql->where('user_id', $user->id)->orWhere('user_linking_id',$user->id); })->whereNull('deleted_at')->selectRaw('id as l_id, created_at as l_created_at, if (user_id = '.$user->id.', user_linking_id, user_id) as link_user_id'); $users = DB::table('users')->joinSub($linings, 'ufutx_linkings', function ($join) { $join->on('users.id', '=', 'linkings.link_user_id'); }); $keyword = $request->input('keyword'); if ($keyword) { $keyword = trim($keyword); $users = $users->where(function ($sql) use ($keyword) { $sql->where('name', 'like', '%' . $keyword . '%') ->orWhere('mobile', 'like', '%' . $keyword . '%'); }); } $users = $users->orderBy('linkings.l_id', 'desc')->paginate(); foreach ($users as $following) { $wechat = Wechat::where('user_id', $following->id)->first(); if (!empty($wechat)) { $wechat->avatar = $wechat->avatar2; } $following->wechat = $wechat; $sex = null; $age = 0; $stature = null; $province = null; if ($following->type == 'single') { $court = ProfileCourtship::where('user_id', $following->id)->first(); if (!empty($court)) { $sex = $court->sex; if ($court->birthday) { $age = $this->getAge($court->birthday); } $stature = $court->stature; $province = $court->province; } } else { $court = ProfileMarriage::where('user_id', $following->id)->first(); if (!empty($court)) { $sex = $court->sex; if ($court->birthday) { $age = $this->getAge($court->birthday); } $stature = $court->stature; $province = $court->province; } } $following->sex = $sex; $following->age = $age; $following->stature = $stature; $following->province = $province; $following->become_friend_at = $following->l_created_at; $following->city = $court->city??null; $following->birthday = $court->birthday??null; $following->state = $court->state??null; } return $this->success('ok', $users); } /** * 禁言 */ public function bannedUser(Request $request, $user_id, BannedHistory $history) { $type = $request->input('type'); if (empty($type)) { return $this->failure('请选择禁止选项'); } $start_time = $request->input('start_time'); if (empty($start_time)) { return $this->failure('请选择禁止开始时间'); } $end_time = $request->input('end_time'); if (empty($end_time)) { return $this->failure('请选择禁止结束时间'); } $content = $request->input('content'); $pics = $request->input('pics', []); $history_obj = $history->updateOrCreate(['user_id'=>$user_id,'type'=>$type],['admin_user_id'=>auth()->id(),'start_time'=>$start_time,'end_time'=>$end_time,'pics'=>json_encode($pics),'content'=>$content]); $operate = ''; switch ($type) { case "moment": $operate = "禁止发动态"; break; case "friend": $operate = "禁止加好友"; break; case "chat": $operate = "禁止聊天"; break; } if ($operate) { ClientComment::create([ 'user_id'=> $user_id, 'maker_user_id'=>auth()->id(), 'comment'=>'被管理员【'.auth()->user()->nickname.'】'.$operate.'至'.$end_time.', 理由:'.$request->input('content'), ]); } return $this->success('ok', $history_obj); } /** * 禁言列表 */ public function userBannedHistories(Request $request, User $user, BannedHistory $history) { $histories = $history->with('user')->where('user_id', $user->id)->orderBy('id', 'desc')->paginate(); return $this->success('ok', $histories); } /** * 删除禁言 */ public function deleteBannedHistory(Request $request, $user_id) { $type = $request->type; BannedHistory::where('user_id',$user_id)->where('type',$type)->delete(); $operate = ''; switch ($type) { case "moment": $operate = "解除禁止发动态"; break; case "friend": $operate = "解除禁止加好友"; break; case "chat": $operate = "解除禁止聊天"; break; } if ($operate) { ClientComment::create([ 'user_id'=> $user_id, 'maker_user_id'=>auth()->id(), 'comment'=>'被管理员【'.auth()->user()->nickname.'】'.$operate, ]); } return $this->success('ok'); } /** * 标记用户 */ public function tagUser(Request $request, User $user) { $user->increment('negative_score', 2); $user->increment('tag_num', 1); return $this->success('ok', $user); } /** * 标记用户 用户资料不真实 或者留了联系方式 */ public function tagUserV2(Request $request, $user_id) { $user = User::find($user_id); if (empty($user)) return $this->failure('标记用户不存在'); $remark = $request->remark; if (empty($remark)) return $this->failure('请输入标记原因'); $histories = new WrongInfoHistories(); $histories->user_id = $user_id; $histories->type = 'tag'; $histories->remark = $remark; $histories->status = 1; $histories->operator = auth()->id(); $user->increment('negative_score', 100); $histories->save(); return $this->success('ok', $user); } //取消标记 public function cancelTagUserV2(Request $request,$user_id){ $user = User::find($user_id); if (empty($user)) return $this->failure('取消标记用户不存在'); $history = WrongInfoHistories::where('user_id',$user_id)->where('type','tag')->first(); if (empty($history)) return $this->failure('该用户未被标记'); $history->delete(); $user->decrement('negative_score', 100); return $this->success('ok',$user); } //敏感词过滤 //增加敏感词 public function addBadword(Request $request){ $word = new BadWord(); $content = $request->input('content'); if (empty($content)) return $this->failure('请输入敏感词'); $bad_word_type_id = $request->bad_word_type_id; if (empty($bad_word_type_id)) return $this->failure('请选择敏感词类型'); $word->content = $content; $word->bad_word_type_id = $bad_word_type_id; $word->operator = auth()->id(); $word->save(); return $this->success('ok',$word); } //修改敏感词 public function updateBadword(Request $request,$id){ $word = BadWord::find($id); if (empty($word)) return $this->failure('敏感词不存在'); if (empty($request->input('content'))) return $this->failure('请输入敏感词'); $bad_word_type_id = $request->input('bad_word_type_id',0); if ($bad_word_type_id < 1) return $this->failure('请选择敏感词类型'); if ($request->input('content') && $request->input('content') != $word->content) { $word->content = $request->input('content'); } if ($bad_word_type_id && $bad_word_type_id != $word->bad_word_type_id) { $word->bad_word_type_id = $bad_word_type_id; } $word->operator = auth()->id(); $word->save(); return $this->success('ok',$word); } //删除敏感词 public function deleteWord(Request $request ,$id){ BadWord::where('id',$id)->delete(); return $this->success('ok'); } //敏感词列表 public function wordList(Request $request){ $keyword = $request->keyword; $words = BadWord::with('user:id,nickname,app_avatar,circle_avatar') ->with('BadWordType:id,name,created_at') ->whereHas('user')->orderBy('id','desc'); if ($keyword) { $keyword = trim($keyword); $words = $words->where('content','like','%'.$keyword.'%'); } $words = $words->paginate(); return $this->success('ok',$words); } //文本校验是否包含敏感词 public function verifyTextBadWord(Request $request){ $text = $request->text; $type = $request->type ? $request->type : 1; $ail_verify_state = $request->ail_verify_state ? $request->ail_verify_state : 0; $result = \CommonUtilsService::verifyText($text,$type); if($result['code']<>1){ return $this->success('ok',$result); } if($ail_verify_state){ $result = \CommonUtilsService::textContentCecurity($text); if ($result && $result['result']) { return $this->success('',array('context'=>$result['context'],'type'=>$result['result'],'code'=>4002)); } } return $this->success('ok'); } /** * 取消标记 */ public function cancelTagUser(Request $request, User $user) { $user->tag_num = 0; $user->save(); return $this->success('ok', $user); } public function cityAddresses(Request $request) { $province_ids = Address::where('parentId', 2)->pluck('codeId')->toArray(); $city_arr = Address::whereIn('parentId', $province_ids); $keyword = $request->input('keyword'); if ($keyword) { $keyword = trim($keyword); $city_arr = $city_arr->where('name', 'like', '%'.$keyword.'%'); } $city_arr = $city_arr->paginate(); return $this->success('ok', $city_arr); } /** * 用户当前图片信息 */ public function userImageInfo(Request $request, User $user, ImageInfo $image_info) { $info = $image_info->where('user_id', $user->id)->where('url', $user->photo)->first(); return $this->success('ok', $info); } public function serviceClients(Request $request, ServiceClient $service_client) { $user = auth()->user(); $clients = $service_client->with('client'); $keyword = $request->input('keyword'); if ($keyword) { $keyword = trim($keyword); $clients = $clients->whereHas('client', function($sql) use($keyword){ $sql->where('name', 'like', '%'.$keyword.'%'); }); } $clients = $clients->where('user_id', $user->id)->orderBy('id', 'desc')->paginate(); return $this->success('ok', $clients); } public function deleteServiceClient(Request $request, ServiceClient $service_client) { $service_client->delete(); return $this->success('ok'); } public function usersToServiceClients(Request $request, ServiceClient $service_client) { $mine = auth()->user(); $user_ids = $request->input('user_ids', []); if (count($user_ids) == 0) { return $this->failure('请选择用户'); } $client = $service_client->whereIn('client_user_id', $user_ids)->first(); if ($client) { return $this->failure('用户id['. $client->client_user_id.']已有客服跟进'); } $data_arr = []; foreach ($user_ids as $user_id) { $data['user_id'] = $mine->id; $data['client_user_id'] = $user_id; $data['created_at'] = date('Y-m-d H:i:s'); $data['updated_at'] = date("Y-m-d H:i:s"); $data_arr[] = $data; } // 服务跟进后也标记为已处理 以后再改 User::whereIn('id', $user_ids)->increment('tag_num'); $service_client->insert($data_arr); return $this->success('ok'); } #导入金数据 public function importGOldDataExcel(Request $request) { ini_set('memory_limit','256M'); $file = $request->file('uploadFile'); if (empty($file)) { return $this->failure('请上传文件'); } // if (empty($path)) { // return $this->failure('没有文件路径'); // } $result = \Excel::import(new SingleProfilesImport, $file); return $this->success('ok'); } /** * 筛选平台用户 */ public function getScreenAGUsers($request, $users) { //身高 $min_stature = $request->input("min_stature"); $max_stature = $request->input('max_stature'); //年龄 $min_age = $request->input('min_age'); $max_age = $request->input('max_age'); //性别 $sex = $request->input('sex'); //关键字 $keyword = $request->input('keyword'); //平台 $form = $request->input('form'); //是否认证 $is_approved = $request->input('is_approved'); $has_is_approved = $request->has('is_approved'); if ($min_stature && $max_stature) { $users = $users->whereBetween('stature', [$min_stature, $max_stature]); } if ($min_age && $max_age) { //年龄转换成日期 $min_age = \CommonUtilsService::ageToDate($min_age); $max_age = \CommonUtilsService::ageToDate($max_age); $users = $users->whereBetween('birthday', [$max_age, $min_age]); } $users = $users->whereHas('user', function($sql) use($keyword, $sex, $has_is_approved, $is_approved, $form){ if ($keyword) { $sql->where('name', 'like', '%'.$keyword.'%') ->orWhere('id', 'like', '%'.$keyword.'%') ->orWhere('mobile', 'like', '%'.$keyword.'%'); } if ($sex) { $sql = $sql->where('sex', $sex); } if ($has_is_approved) { $sql = $sql->where('is_approved', $is_approved); } if ($form == 'AG') { $sql = $sql->where('from_platform', 'AG'); }elseif ($form == 'PLATFORM') { $sql = $sql->where('from_platform', '<>', 'AG'); } }); return $users; } //金数据信息列表 public function singleProfiles(Request $request) { $profiles = $this->getSingleProfiles($request); #今天导入的数据条数 $start_time = date('Y-m-d 00:00:00'); $end_time = date('Y-m-d 00:00:00', strtotime('+1 day')); $count = SingleProfile::where('created_at', '>=', $start_time)->where('created_at', '<', $end_time)->where('is_import', 0)->count(); return $this->success('ok', compact('profiles', 'count')); } /** * 获取单身列表信息 */ public function getSingleProfiles($request, $user_ids=[]) { $profiles = ProfileCourtship::with(['user.wechat', 'singleProfile'])->withCount('matchSingle')->whereNotNull('sex')->whereHas('user', function($sql){ $sql->where('type', 'single'); }); if (count($user_ids)) { $profiles = $profiles->whereIn('user_id', $user_ids); } $profiles = $this->getScreenAGUsers($request, $profiles); // $keyword = $request->input('keyword'); // if ($keyword) { // $keyword = trim($keyword); // $profiles = $profiles->whereHas('user', function($sql) use($keyword){ // $sql->where('name', 'like', '%'.$keyword.'%') // ->orWhere('mobile', 'like', '%'.$keyword.'%'); // }); // } $active_user_ids = Order::where('type', 'meet')->whereIn('type_id', [1,2])->where('pay_status', 'PAID')->distinct('user_id')->pluck('user_id')->toArray(); $passive_user_ids = Order::where('type', 'meet')->whereIn('type_id', [3,4])->where('pay_status', 'PAID')->distinct('user_id')->pluck('user_id')->toArray(); $activity_user_ids = Order::where(function($sql){ $sql->where('type', 'activity')->where('type_id', 138); })->orWhere(function($sql){ $sql->where('type', 'single_service')->where('type_id', 1); })->orWhere(function($sql){ $sql->where('type', 'rank')->where('type_id', 9); })->distinct('user_id')->pluck('user_id')->toArray(); $profiles = $profiles->orderBy('id', 'desc')->paginate(); foreach ($profiles as $profile) { $service_name = ''; $profile->name = $profile->user->name; $profile->mobile = $profile->user->mobile; $profile->sex = $profile->user->sex == 1? '男':'女'; $profile->age = $this->getAge($profile->birthday); $profile->address = $profile->province.' '.$profile->city; $profile->resident_address = $profile->resident_province.' '.$profile->resident_city; //已购约见服务 if (in_array($profile->user_id, $active_user_ids)) { $service_name = $service_name.' 约见服务'; } //已购牵线服务 if (in_array($profile->user_id, $passive_user_ids)) { $service_name = $service_name.' 牵线服务'; } //黄金会员+1毛体检服务 if (in_array($profile->user_id, $activity_user_ids)) { $service_name = $service_name.' 体检服务'; } $profile->service_name = $service_name; $profile->user->photo = $profile->user->circle_avatar?:$profile->avatar; //已发模板推荐的人数 $recommend_notice_num = RecommendSingleHistory::where('user_id', $profile->user_id)->where('match_id', 0)->count(); $profile->recommend_notice_num = $recommend_notice_num; // 是否关注公众号 $profile->is_subscribe = $profile->user->is_subscribe; } return $profiles; } /** * 金数据单身信息 */ public function goldSingleProfiles(Request $request, SingleProfile $single_profile) { // $user_ids = SingleProfile::pluck('user_id')->toArray(); // $profiles = $this->getSingleProfiles($request, $user_ids); // $keyword = $request->input('keyword'); $profiles = SingleProfile::with(['user', 'profileCourtship'])->withCount('matchSingle')->whereNotNull('user_id')->whereHas('user', function($sql){ $sql->whereNotNull('id'); }); $profiles = $this->getScreenAGUsers($request, $profiles); // if ($keyword) { // $profiles = $profiles->where(function($sql)use($keyword){ // $sql->whereHas('user', function($sq)use($keyword){ // $sq->where('name', 'like', '%'.$keyword.'%') // ->where('mobile', 'like', '%'.$keyword.'%'); // })->orWhere(function($sq) use($keyword){ // $sq->where('name', 'like', '%'.$keyword.'%') // ->orWhere('mobile', 'like', '%'.$keyword.'%'); // }); // }); // } $profiles = $profiles->orderBy('created_at', 'desc')->paginate(); $active_user_ids = Order::where('type', 'meet')->whereIn('type_id', [1,2])->where('pay_status', 'PAID')->distinct('user_id')->pluck('user_id')->toArray(); $passive_user_ids = Order::where('type', 'meet')->whereIn('type_id', [3,4])->where('pay_status', 'PAID')->distinct('user_id')->pluck('user_id')->toArray(); $activity_user_ids = Order::where(function($sql){ $sql->where('type', 'activity')->where('type_id', 138); })->orWhere(function($sql){ $sql->where('type', 'single_service')->where('type_id', 1); })->orWhere(function($sql){ $sql->where('type', 'rank')->where('type_id', 9); })->distinct('user_id')->pluck('user_id')->toArray(); foreach ($profiles as $profile) { $service_name = ''; if ($profile->user) { //名字 if ($profile->user->name != $profile->name) { $profile->name = $profile->name.'('.$profile->user->name.')'; } } //年龄 $profile->age = $profile->age?$profile->age:$this->getAge($profile->birthday); if (empty($profile->user)) { continue; } $profile->mobile = $profile->user->mobile; $profile->sex = $profile->user->sex == 1? '男':'女'; $profile->address = $profile->province.' '.$profile->city; $profile->resident_address = $profile->resident_province.' '.$profile->resident_city; //已购约见服务 if (in_array($profile->user_id, $active_user_ids)) { $service_name = $service_name.' 约见服务'; } //已购牵线服务 if (in_array($profile->user_id, $passive_user_ids)) { $service_name = $service_name.' 牵线服务'; } //黄金会员+1毛体检服务 if (in_array($profile->user_id, $activity_user_ids)) { $service_name = $service_name.' 体检服务'; } $profile->service_name = $service_name; if (empty($profile->profileCourtship)) { continue; } $profile->id = $profile->profileCourtship->id; $profile->user->photo = $profile->user->circle_avatar?:$profile->avatar; //已发模板推荐的人数 $recommend_notice_num = RecommendSingleHistory::where('user_id', $profile->user_id)->where('match_id', 0)->count(); $profile->recommend_notice_num = $recommend_notice_num; //是否关注公众号 $profile->is_subscribe = $profile->user->is_subscribe; } #今天导入的数据条数 $start_time = date('Y-m-d 00:00:00'); $end_time = date('Y-m-d 00:00:00', strtotime('+1 day')); $count = SingleProfile::where('created_at', '>=', $start_time)->where('created_at', '<', $end_time)->where('is_import', 0)->count(); return $this->success('ok', compact('profiles', 'count')); } /** * 其他金数据列表 */ public function otherGoldSingleProfiles(Request $request, $id) { $profile = ProfileCourtship::with('user')->where('id',$id)->first(); $profile->age = $this->getAge($profile->birthday); $user_ids = SingleProfile::pluck('user_id')->toArray(); $profiles = $this->getOtherSingleProfiles($request, $profile, $user_ids); $gold_profile = SingleProfile::where('user_id', $profile->user_id)->first(); if ($gold_profile) { $gold_profile->lover_max_birthday = $this->getAge($gold_profile->lover_max_birthday); $gold_profile->lover_min_birthday = $this->getAge($gold_profile->lover_min_birthday); $gold_profile->age = $this->getAge($gold_profile->birthday); } return $this->success('ok', compact('profiles', 'profile', 'gold_profile')); } /** * 獲取其他单身列表信息 */ public function getOtherSingleProfiles($request, $profile, $user_ids=[]) { $profiles = ProfileCourtship::where('sex', '<>', $profile->sex)->where('sex', '<>','0')->whereNotNull('sex')->whereHas('user', function($sql) use($profile){ $sql->where('type', 'single')->where('sex', '<>', $profile->sex)->where('sex', '<>','0')->where('hidden_profile', 'NONE'); }); $keyword = $request->input('keyword'); if ($keyword) { $profiles = $profiles->whereHas('user', function($sql) use($keyword){ $sql->where('mobile', 'like', '%'.$keyword.'%') ->orWhere('name', 'like', '%'.$keyword.'%'); }); } //是否是金数据 if (count($user_ids)) { $profiles = $profiles->whereIn('user_id', $user_ids); } //年龄 if ($profile->sex == 1) { $min_age = (int)$profile->age - 5; $max_age = (int)$profile->age + 3; }else{ $min_age = (int)$profile->age - 3; $max_age = (int)$profile->age + 5; } $max_age = $request->input('max_age', $max_age); $min_age = $request->input('min_age', $min_age); $profiles = $profiles->where('age','>=', (int)$min_age)->where('age', '<=', (int)$max_age); //工作地 $province = $request->input('province'); $city = $request->input('city'); if ($province && $city) { $profiles = $profiles->where('province', $province); if ($city != '不限') { $profiles = $profiles->where('city', $city); } } //成长地 $resident_province = $request->input('resident_province'); $resident_city = $request->input('resident_city'); if ($resident_province && $resident_city) { $profiles = $profiles->where('resident_province', $resident_province); if ($resident_city != '不限') { $profiles = $profiles->where('resident_city', $resident_city); } } //信仰 $belief = $request->input('belief'); if ($belief) { if ($belief != '其他') { $profiles = $profiles->where('belief', $belief); }else{ $profiles = $profiles->where(function($sql) use($belief){ $sql->where('belief', $belief) ->orWhereNull('belief'); }); } } //婚姻状态 $state = $request->input('state'); if ($state) { if ($state == '未婚') { $profiles = $profiles->where(function($sql){ $sql->where('state', '未婚')->orWhere('state', '从未结婚'); }); }else{ $profiles = $profiles->where('state', $state); } } //是否有小孩 $has_child = $request->input('has_child'); if ($has_child) { if ($has_child == '有') { $profiles = $profiles->whereHas('singleProfile', function($sql) use($has_child){ $sql->where('has_child', $has_child); }); }else{ $profiles = $profiles->whereHas('singleProfile', function($sql) use($has_child){ $sql->where('has_child', $has_child)->orWhereNull('has_child'); }); } } //身高 $min_stature = $request->input('min_stature'); $max_stature = $request->input('max_stature'); if ($min_stature && $max_stature) { $profiles = $profiles->where('stature', '>=', $min_stature)->where('stature', '<=', $max_stature); } //学历 $degree = $request->input('degree'); if ($degree) { $profiles = $profiles->where('degree', $degree); } //是否含金数据 $is_gold = $request->input('is_gold'); if ($is_gold) { $user_ids = SingleProfile::pluck('user_id')->toArray(); $profiles = $profiles->whereIn('user_id', $user_ids); } //是否认证 $is_approved = $request->input('is_approved'); if ($is_approved == '是') { $profiles = $profiles->whereHas('user', function($sql){ $sql->where('is_approved', 1); }); }elseif ($is_approved == '否') { $profiles = $profiles->whereHas('user', function($sql){ $sql->where('is_approved', 0); }); } //已匹配过的 $other_user_ids = MatchingSingleHistory::where('user_id', $profile->user_id)->pluck('other_user_id')->toArray(); if (count($other_user_ids)) { $profiles = $profiles->whereNotIn('user_id', $other_user_ids); } $profiles = $profiles->paginate(); foreach ($profiles as $pro) { $pro->name = $pro->user->name; $pro->mobile = $pro->user->mobile; $pro->sex = $pro->user->sex == 1? '男':'女'; $pro->age = $this->getAge($pro->birthday); $pro->address = $pro->province.' '.$pro->city; $pro->resident_address = $pro->resident_province.' '.$pro->resident_city; //是否是金数据 $is_gold = SingleProfile::where('user_id',$pro->user_id)->first(); $is_gold = $is_gold?1:0; $pro->is_gold = $is_gold; } return $profiles; } //筛选金数据信息 public function otherSingleProfile(Request $request, $id) { $profile = ProfileCourtship::with('user')->where('id',$id)->first(); dd($profile); $profile->age = $this->getAge($profile->birthday); $profiles = $this->getOtherSingleProfiles($request, $profile); $gold_profile = SingleProfile::where('user_id', $profile->user_id)->first(); if ($gold_profile) { $gold_profile->lover_max_birthday = $this->getAge($gold_profile->lover_max_birthday); $gold_profile->lover_min_birthday = $this->getAge($gold_profile->lover_min_birthday); $gold_profile->age = $this->getAge($gold_profile->birthday); } return $this->success('ok', compact('profiles', 'profile', 'gold_profile')); } /** * 人工匹配 */ public function matchSingleProfile(Request $request, $id) { $profile = ProfileCourtship::findOrFail($id); $user_ids = $request->input('user_ids', []); if (!is_array($user_ids) || !count($user_ids)) { return $this->failure('请选择匹配对象'); } $matching_profile_arr = []; foreach ($user_ids as $user_id) { $result = MatchingSingleHistory::where('user_id', $profile->user_id)->where('other_user_id', $user_id)->first(); if ($result) { continue; } $arr = []; $arr['user_id'] = $profile->user_id; $arr['other_user_id'] = $user_id; $arr['created_at'] = date('Y-m-d H:i:s'); $arr['updated_at'] = date('Y-m-d H:i:s'); $matching_profile_arr[] = $arr; } MatchingSingleHistory::insert($matching_profile_arr); return $this->success('ok'); } /** * 匹配后的数据 */ public function matchingSingleProfiles(Request $request, $id) { $profile = ProfileCourtship::findOrFail($id); $other_profiles = MatchingSingleHistory::where('user_id', $profile->user_id)->with('other_single_profile'); $keyword = $request->input('keyword'); if ($keyword) { $other_profiles = $other_profiles->whereHas('otherUser', function($sql) use($keyword){ $sql->where('mobile', 'like', '%'.$keyword.'%') ->orWhere('name', 'like', '%'.$keyword.'%'); }); } $other_profiles = $other_profiles->orderBy('id', 'desc')->paginate(); //已经发送过推荐模板 $other_user_ids = RecommendSingleHistory::where('user_id', $profile->user_id)->pluck('other_user_id')->toArray(); foreach ($other_profiles as $profile) { $profile = $profile->other_single_profile; $profile->name = $profile->user->name; $profile->mobile = $profile->user->mobile; $profile->sex = $profile->user->sex == 1? '男':'女'; $profile->age = $profile->age?$profile->age:$this->getAge($profile->birthday); $profile->address = $profile->province.' '.$profile->city; $profile->resident_address = $profile->resident_province.' '.$profile->resident_city; //是否已经发送推荐模板消息1:已推荐。0:未推荐 $profile->is_notice = in_array($profile->user_id, $other_user_ids)?1:0; } return $this->success('ok', compact('profile','other_profiles')); } public function deleteMatchingProfile(Request $request, $id) { $history = MatchingSingleHistory::findOrFail($id); $history->delete(); return $this->success('ok'); } /** * 对接金数据 */ public function storeGoldData(Request $request) { // $result = $request->all(); $data = []; $gold_data = $request->input('entry'); if ($gold_data) { $data['name'] = $gold_data['field_2']; $extend = $gold_data['x_field_1']; $from_user_id = null; if ($extend) { $extend_arr = explode('_', $extend); $from_user_id = is_numeric($extend_arr[0])?$extend_arr[0]:null; } $data['from_user_id'] = $from_user_id; $data['sex'] = $gold_data['field_3']; $data['mobile'] = $gold_data['field_4']; if (empty($data['mobile'])) { return; } #是否是内地号码 if (strlen($data['mobile']) == 14 && strstr($data['mobile'], '+86')) { $data['mobile'] = substr($data['mobile'], 3); } $data['birthday'] = $gold_data['field_7'].'-01-01'; $lover_birthday = $gold_data['field_48']; if($lover_birthday){ $data['lover_min_birthday'] = $lover_birthday[0]['dimensions']['最小年份'].'-01-01'; $data['lover_max_birthday'] = $lover_birthday[0]['dimensions']['最大年份'].'-01-01'; } $data['stature'] = $gold_data['field_9']; $data['lover_stature'] = $gold_data['field_49'][0]['dimensions']['最低身高'].'-'.$gold_data['field_49'][0]['dimensions']['最高身高']; $data['state'] = $gold_data['field_12']; $data['lover_state'] = json_encode($gold_data['field_13'], JSON_UNESCAPED_UNICODE); $data['has_child'] = $gold_data['field_59']; $data['lover_has_child'] = $gold_data['field_63']; $address_arr = $gold_data['field_14']; $data['resident_province'] = $address_arr['province']; $data['resident_city'] = $address_arr['city']; $data['resident_dist'] = $address_arr['district']; $data['resident_address'] = $data['resident_province'].' '.$data['resident_city'].' '.$data['resident_dist']; $address_arr = $gold_data['field_51']; $data['province'] = $address_arr['province']; $data['city'] = $address_arr['city']; $data['dist'] = $address_arr['district']; $data['address'] = $data['province'].' '.$data['city'].' '.$data['dist']; $address_arr = $gold_data['field_15']; $data['marriage_province'] = $address_arr['province']; $data['marriage_city'] = $address_arr['city']; $data['marriage_dist'] = $address_arr['district']; $data['marriage_place'] = $data['marriage_province'].' '.$data['marriage_city'].' '.$data['marriage_dist']; $data['character'] = $gold_data['field_17']; $data['lover_character'] = $gold_data['field_18']; $data['is_initiative'] = $gold_data['field_20'];//遇见有好感的对象您会主动吗? $data['pay_type'] = $gold_data['field_21']; $data['single_reason'] = $gold_data['field_60']; $data['post'] = $gold_data['field_23']; $data['post_out'] = $gold_data['field_24'];//出差 $data['lover_post_out'] = $gold_data['field_25'];//配偶出差 $data['lover_condition'] = $gold_data['field_26'];//配偶综合条件 $data['degree'] = $gold_data['field_28']; $data['lover_degree'] = $gold_data['field_29']; $data['join_activity'] = implode(' ', $gold_data['field_64']);//平时参加什么活动 $data['study_love'] = $gold_data['field_61'];//您觉得谈恋爱需要学习吗 $data['income'] = $gold_data['field_32'];//您的经济收入是? $data['lover_income'] = $gold_data['field_33'];//您希望配偶的经济收入是? $data['without_income'] = $gold_data['field_34'];//对方除了经济收入以外,其他方面都很理想,您会考虑对方吗? $data['belief'] = $gold_data['field_36']; $data['lover_standrad'] = implode(' ', $gold_data['field_50']) ;//进入婚姻您会考虑哪些因素 $data['hold_wedding'] = $gold_data['field_46'];//您结婚一定要办婚礼的吗? $data['live_idea'] = $gold_data['field_38'];//您对未婚同居的看法? $data['premarital_counseling'] = $gold_data['field_39'];//您觉得婚前辅导重要吗? $data['wechat_nickname'] = $gold_data['x_field_weixin_nickname']; $data['wechat_sex'] = $gold_data['x_field_weixin_gender']; $data['wechat_country'] = $gold_data['x_field_weixin_country']; $data['wechat_address'] = implode(' ', $gold_data['x_field_weixin_province_city']) ; $data['openid'] = $gold_data['x_field_weixin_openid']; $data['avatar'] = $gold_data['x_field_weixin_headimgurl']; $data['submitter'] = $gold_data['creator_name']; $submit_time = $gold_data['created_at']; $d = new DateTime($submit_time); $data['submit_time'] = $d->format('Y-m-d H:i:s'); $update_time = $gold_data['updated_at']; $d = new DateTime($update_time); $data['update_time'] = $d->format('Y-m-d H:i:s'); $data['devices'] = $gold_data['info_platform']; $data['os'] = $gold_data['info_os']; $data['browser'] = $gold_data['info_browser']; $data['ip'] = $gold_data['info_remote_ip']; $data['created_at'] = date('Y-m-d H:i:s'); $data['updated_at'] = date('Y-m-d H:i:s'); $profile = SingleProfile::where('mobile', $data['mobile'])->first(); if ($profile) { $profile->update($data); if ($profile->user_id) { $c = ProfileCourtship::where('user_id', $profile->user_id)->first(); if ($c) { $profile_data['belief'] = $data['belief']; $profile_data['sex'] = $data['sex'] == '男'?1:2; $profile_data['province'] = $data['province']; $profile_data['city'] = $data['city']; $profile_data['dist'] = $data['dist']; $profile_data['resident_province'] = $data['resident_province']; $profile_data['resident_city'] = $data['resident_city']; $profile_data['resident_dist'] = $data['resident_dist']; $profile_data['birthday'] = $data['birthday']; $profile_data['stature'] = $data['stature']; $profile_data['state'] = $data['state']; $profile_data['degree'] = $data['degree']; $profile_data['post'] = $data['post']; $c->update($profile_data); } $user = User::find($profile->user_id); if ($user) { $user_data['belief'] = $data['belief']; $user_data['sex'] = $data['sex'] == '男'?1:2; $user->update($user_data); $wechat = Wechat::where('user_id', $user->id)->first(); if ($wechat && empty($wechat->official_openid)) { $wechat->official_openid = $data['openid']; $wechat->save(); } } } }else{ SingleProfile::insert($data); } return; } } /** * 手动发送推荐模板 * user 接受推荐用户 * other_user 被推荐用户 */ public function sendReommendNotice(Request $request, User $other_user, User $user) { $param['user_id'] = $other_user->id; $param['user_name'] = $other_user->name; $param['openid'] = Viewer::where('mobile', $user->mobile)->value('openid'); $param['recive_user_id'] = $user->id; if (empty($param['openid'])) { $param['openid'] = SingleProfile::where('user_id', $user->id)->value('openid'); if (empty($param['openid'])) { return $this->failure('推送失败,该用户无法接收公众号模板消息'); } $result = $user->hasSubscribeOfficial(); if (empty($result)) { return $this->failure('推送失败,未关注小助手公众号'); } } //发送模板消息 SendAGRecommend::dispatch($param)->onQueue('love'); //记录推荐 $history = RecommendSingleHistory::firstOrCreate(['user_id'=>$user->id, 'other_user_id'=>$other_user->id]); $history->match_id = 0; $history->save(); return $this->success('ok'); } /** * 已經推送过列表 */ public function recommendSingleHistories(Request $request, User $user, RecommendSingleHistory $recommend_single_history) { $histories = $recommend_single_history->with('other_user.profileCourtship')->where('match_id', 0)->where('user_id', $user->id)->orderBy('updated_at', 'desc')->paginate(); foreach ($histories as $history) { $history->age = $this->getAge($history->other_user->profileCourtship->birthday); } return $this->success('ok', $histories); } //红娘直播数据统计 public function matchMakerData(Request $request, $match_maker_id){ $all_hours = InteractLiveLog::selectRaw('sum(round((UNIX_TIMESTAMP(end_time)-UNIX_TIMESTAMP(created_at))/3600, 2)) AS hours')->where('mk_user_id', $match_maker_id)->whereNotNull('end_time')->value('hours'); $single_hours = InteractLiveLog::selectRaw('sum(round((UNIX_TIMESTAMP(end_time)-UNIX_TIMESTAMP(start_time))/3600, 2)) AS hours')->where('mk_user_id', $match_maker_id)->whereNotNull('start_time')->whereNotNull('end_time') ->where(function ($query){ $query->where(function ($query){ $query->whereNotNull('male_user_id')->WhereNull('female_user_id'); }) ->orWhere(function ($query){ $query->whereNull('male_user_id')->WhereNotNull('female_user_id'); }); })->value('hours'); $double_hours = InteractLiveLog::selectRaw('sum(round((UNIX_TIMESTAMP(end_time)-UNIX_TIMESTAMP(start_time))/3600, 2)) AS hours')->where('mk_user_id', $match_maker_id)->whereNotNull('start_time')->whereNotNull('end_time')->whereNoTNull('male_user_id')->WhereNotNull('female_user_id')->value('hours'); $nobody_hours = bcsub(bcsub($all_hours, $single_hours, 2), $double_hours, 2); $single_hours = $single_hours ?: 0.00; $double_hours = $double_hours ?: 0.00; $nobody_hours = $nobody_hours ?: 0.00; $user = User::find($match_maker_id); return $this->success('ok', compact('single_hours', 'double_hours', 'all_hours', 'nobody_hours', 'user')); } //红娘每日记录 public function makerDailyLog(Request $request, $match_maker_id){ $log = MakerScoreLog::where('user_id', $match_maker_id); if(is_numeric($request->have_given)){ $log = $log->where('have_given', $request->have_given); } $log = $log->orderBy('have_given', 'asc')->orderBy('end_time', 'desc')->paginate(); return $this->success('ok', $log); } //红娘奖励结算 public function giveScoreToMaker(Request $request){ if (auth()->id() != 6125) return $this->failure('暂无权限操作'); if(!$request->has('log_id') || !$request->log_id){ return $this->failure('请选择结算日期'); } $log = MakerScoreLog::find($request->log_id); $log->have_given = 1; $log->score = round($request->score); $log->remark = $request->remark; $log->save(); //增加福币 if($request->score){ $this->addCoin($log->user_id, round($request->score)); } return $this->success('ok'); } public function addCoin($user_id, $score){ $coin = Coin::where('user_id', $user_id)->first(); if(!empty($coin)){ $coin->increment('remain_amount', $score); }else{ $coin = New Coin(); $coin->user_id = $user_id; $coin->remain_amount = $score; $coin->save(); } $log = New CoinLog(); $log->user_id = $user_id; $log->coin = $score; $log->is_hooked = 1; $log->type_id = 0; $log->type = 'RECSYSTEM'; $log->save(); return true; } public function addCoinAdmin(Request $request, $user_id){ $is_set = User::where('id', $user_id)->count(); if(empty($is_set)){ return $this->failure('用户不存在'); } $admin_id = auth()->id(); $coin = Coin::where('user_id', $user_id)->first(); if(!empty($coin)){ $coin->increment('remain_amount', $request->score); }else{ $coin = New Coin(); $coin->user_id = $user_id; $coin->remain_amount = $request->score; $coin->save(); } $log = New CoinLog(); $log->user_id = $user_id; $log->coin = $request->score; $log->is_hooked = 1; $log->type_id = $admin_id; $log->type = 'RECSYSTEM'; $log->remark = '后台充值'.$request->remark; $log->save(); return $this->success('ok'); } //后台福币充值记录 public function coinLog(Request $request){ $background = $request->background; $logs = CoinLog::with('user', 'user.coin')->whereHas('user'); if ($background) { $logs = $logs->where('remark','like','%后台充值%'); } if($request->keyword){ $keyword = $request->keyword; $logs = $logs->whereHas('user', function($query) use($keyword){ $query->where('mobile', 'like', '%'.$keyword.'%')->orWhere('nickname', 'like', '%'.$keyword.'%'); }); } $logs = $logs->orderBy('id', 'desc')->paginate(); foreach ($logs as $log){ if(!empty($log->type_id)){ $log->admin = User::find($log->type_id); } } return $this->success('ok', $logs); } public function coinAccounts(Request $request) { $coins = DB::table('coins as c')->rightJoin('users as u', 'u.id','=', 'c.user_id'); $keyword = $request->input('keyword'); if ($keyword) { $coins = $coins->where(function($sql) use($keyword) { $sql->where('u.name', 'like', '%'.$keyword.'%') ->orWhere('u.mobile', 'like', '%'.$keyword.'%') ->orWhere('u.nickname', 'like', '%'.$keyword.'%'); }); } $coins = $coins->selectRaw('ufutx_c.*, (ufutx_c.remain_amount + ufutx_c.amount_from_other) as total_remain_amount, ufutx_u.nickname, ufutx_u.photo ')->orderBy('total_remain_amount', 'desc')->paginate(); return $this->success('ok', $coins); } public function personCoinLog(Request $request, $user_id){ $logs = CoinLog::with('user','user.coin')->where('user_id',$user_id)->orderBy('created_at','desc')->paginate(); $total_coin = CoinLog::where('user_id',$user_id) ->where('type','RECSYSTEM') ->where(function ($query){ $query->where('remark', 'like','%邀请好友%') ->orWhere('remark', 'like','%城市群主服务%') ->orWhere('remark', 'like','%奖励%') ->orWhere('remark', 'like','%刘勇芳%') ->orWhere('remark', 'like','%钉钉%'); })->sum('coin'); $cash = CoinWithdrawLog::where('user_id',$user_id)->where(function ($query){ $query->where('remark', 'like','%邀请好友%'); })->whereIn('status',[0,1])->wherein('is_hooked',[0,1])->sum('value'); //可提现福币 $can_remain_amount = $total_coin - $cash; if (!empty($logs)) { foreach ($logs as $log) { $log->user->coin->can_remain_amount = $can_remain_amount; $log->user->coin->cash = $cash; } } return $this->success('ok',$logs); } public function test(Request $request){ $user_id = $request->user_id; try { \DB::beginTransaction(); $scores = Score::where('remain_amount', '!=', 0); if($user_id){ $scores = $scores->whereIn('user_id', $user_id); } $scores = $scores->get(); $coin_log_arr = []; $score_log_arr = []; $coin_insert_arr = []; foreach ($scores as $score){ $score_ids[] = $score->id; $coin_arr = [ 'user_id' => $score->user_id, 'type' => 'RECSYSTEM', 'type_id' => 0, 'coin' => bcmul($score->remain_amount, 10, 2), 'is_hooked' => 1, 'created_at' => date('Y-m-d H:i:s'), 'updated_at' => date('Y-m-d H:i:s'), ]; $coin_log_arr[] = $coin_arr; $score_arr = [ 'user_id' => $score->user_id, 'type' => 'uesd', 'amount' => $score->remain_amount, 'value' => 0.00, 'message' => '福分转化成福币,清零', 'created_at' => date('Y-m-d H:i:s'), 'updated_at' => date('Y-m-d H:i:s'), ]; $score_log_arr[] = $score_arr; $has_coin = Coin::where('user_id', $score->user_id)->first(); if(!empty($has_coin)){ $has_coin->remain_amount = bcadd($has_coin->remain_amount, bcmul($score->remain_amount, 10, 2), 2); $has_coin->save(); }else{ $coin_new_arr = [ 'user_id' => $score->user_id, 'remain_amount' => bcmul($score->remain_amount, 10, 2), 'created_at' => date('Y-m-d H:i:s'), 'updated_at' => date('Y-m-d H:i:s'), ]; $coin_insert_arr[] = $coin_new_arr; } } Score::whereIn('id', $score_ids)->update(['remain_amount'=>0]); if(!empty($coin_log_arr)){ CoinLog::insert($coin_log_arr); } if(!empty($score_log_arr)){ ScoreHistory::insert($score_log_arr); } if(!empty($coin_insert_arr)){ Coin::insert($coin_insert_arr); } \DB::commit(); return $this->success('ok'); } catch (\Exception $e) { \Log::info('福分转福币失败'.$e->getMessage()); \DB::rollBack(); $this->getError($e); return $this->failure('转化失败'); } } // 商家生成月报告通知 public function testGenerateMonthAnalyse(Request $request) { try { $standardTime = $request->start_month; $monthStart = $standardTime.' 00:00:00'; //$monthStart = date("Y-m-1 00:00:00"); $lastMonthStart = date('Y-m-1 00:00:00', strtotime("-1 month", strtotime($standardTime))); $lastMonthEnd = date('Y-m-d H:i:s', strtotime("-1 sec", strtotime($monthStart))); $mch_ids = MerchantAccount::pluck('id'); $title = date('Y年m月',strtotime($lastMonthStart)).'数据报告'; $arr = []; foreach ($mch_ids as $value) { $visit_count = AccessRecord::where('account_id',$value)->where('updated_at','>=',$lastMonthStart)->where('updated_at','<=',$lastMonthEnd)->count(); $add_count = AccessRecord::where('account_id',$value)->where('created_at','>=',$lastMonthStart)->where('created_at','<=',$lastMonthEnd)->count(); $order_count = \App\Models\Server\TouristOrder::where('merchant_id',$value)->where('created_at','>=',$lastMonthStart)->where('created_at','<=',$lastMonthEnd)->count(); $profit = MEarning::where('m_id',$value)->where('status','finished')->where('created_at','>=',$lastMonthStart)->where('created_at','<=',$lastMonthEnd)->sum('value'); $content = "上月累计访问用户数".$visit_count.",其中新用户数".$add_count.",总订单数为".$order_count.",共产生".$profit."元收益"; $insert = [ 'm_id' => $value, 'm_user_id' => 0, 'type' => 'analyse', 'type_id' => 0, 'content' => json_encode(['title' => $title, 'content' => $content],true), 'created_at' => date('Y-m-d H:i:s'), 'updated_at' => date('Y-m-d H:i:s'), ]; $arr[] = $insert; } SaasNotice::insert($arr); return 'ok'; } catch (\Exception $e) { $this->getError($e); return 'fail'; } } public function banUser(Request $request, $user_id) { $old_data = []; $new_data = []; $list = SystemBlacklist::withTrashed() ->where('user_id', $user_id) ->first(); $user = User::find($user_id); $start_time = $request->start_time?$request->start_time:date('Y-m-d H:i:s'); $end_time = $request->end_time; if (empty($end_time)) return $this->failure('请选择结束时间'); if (empty($request->reason)) return $this->failure('请输入封禁理由'); $data = [ 'user_id'=>$user_id, 'operate_user_id'=>auth()->id(), 'reason'=>$request->input('reason'), 'photos'=>json_encode($request->input('photos')?:[]), 'start_time'=>$start_time, 'end_time'=>$end_time ]; if (empty($list)) { $black = SystemBlacklist::create($data); }elseif ($list && $list->deleted_at) { $list->restore(); $list->update($data); }else{ SystemBlacklist::updateOrCreate(['user_id'=>$user_id],['start_time'=>$start_time,'end_time'=>$end_time,'reason'=>$request->input('reason')]); } $old_data['black_reason'] = NULL; $new_data['black_reason'] = $request->reason; $old_data['black_type'] = NULL; $new_data['black_reason'] = '禁止登录'; $user->can_be_found = 0; $user->hidden_profile = "ALLSEX"; $user->save(); $history = new CloseProfileHistory(); $history->create($user_id,$status=2,$reason='封号,禁止登录', $operator=auth()->id()); ProfileChangeHistory::create([ 'user_id'=>auth()->id(), 'owner_user_id'=>$user->id, 'new_content'=>json_encode($new_data), 'old_content'=>json_encode($old_data) ]); ClientComment::create([ 'user_id'=> $user->id, 'maker_user_id'=>auth()->id(), 'comment'=>'用户【'.$user->nickname.'】被管理员【'.auth()->user()->nickname.'】封号至'.$end_time.', 理由:'.$request->input('reason'), ]); return $this->success('ok'); } public function deleteBanUser(Request $request,$user_id) { $old_data = []; $new_data = []; $user = User::find($user_id); $list = SystemBlacklist::where('user_id', $user_id) ->first(); if (empty($list)) return $this->failure('该账号未被封号'); $user->can_be_found = 1; $user->hidden_profile = 'NONE'; $list->delete(); $user->save(); $old_data['black_reason'] = $list->reason; $new_data['black_reason'] = NULL; $old_data['black_type'] = '禁止登陆'; $new_data['black_type'] = '允许登录'; ProfileChangeHistory::create([ 'user_id'=>auth()->id(), 'owner_user_id'=>$user->id, 'new_content'=>json_encode($new_data), 'old_content'=>json_encode($old_data) ]); ClientComment::create([ 'user_id'=> $user->id, 'maker_user_id'=>auth()->id(), 'comment'=>'用户【'.$user->nickname.'】被管理员【'.auth()->user()->nickname.'】解除封号', ]); return $this->success('ok'); } /** * 福币提现列表 */ public function withdrawCoinLogs(Request $request) { try { $logs = CoinWithdrawLog::with('user', 'operateUser')->whereHas('user'); $keyword = $request->input('keyword'); if ($keyword) { $logs = $logs->whereHas('user', function($sql) use($keyword){ $sql->where('name', 'like', '%'.$keyword.'%') ->orWhere('mobile', 'like', '%'.$keyword.'%') ->orWhere('nickname', 'like', '%'.$keyword.'%'); }); } $status = $request->input('status'); if (is_numeric($status)) { $logs = $logs->where('status', $status); } $logs = $logs->orderBy('id', 'desc')->paginate(); foreach ($logs as $log){ if(!empty($log->user)){ $log->user->avatar = $log->user->userAvatar(); } } return $this->success('ok', $logs); } catch (\Exception $e) { $this->getError($e); return $this->failure('获取福币提现记录失败,请稍后再试'); } } public function dealWithdrawCoinLogs(Request $request, $log_id) { try { //判断权限 $result = $this->userCon->checkOperateWithdrawCoin($log_id); if (empty($result)) throw new \Exception("检查提现记录失败", 1); if (is_array($result) && $result['code']) return $this->failure($result['msg']); //审核 $result = $this->userCon->dealWithdrawCoinLogs($log_id); if (empty($result)) throw new \Exception("审核提现记录失败", 1); return $this->success('ok'); } catch (\Exception $e) { $this->getError($e); return $this->failure('审核失败,请稍后再试'); } } public function changeCoin(Request $request) { // $str = json_decode($request->str); // var_dump($str);die; \CronService::transferAccount(); return $this->success('ok'); } //用户打招呼记录 public function userGreetLog(Request $request,$user_id){ $keyword = $request->keyword; $logs = LinkingRequest::with('user','linkingUser')->where('user_linking_id',$user_id)->orderBy('created_at','desc'); if ($keyword) { $keyword = trim($keyword); $logs = $logs->whereHas('user',function($sql) use($keyword){ $sql->where('id',$keyword)->orWhere('nickname','like','%'.$keyword.'%')->orWhere('mobile','like','%'.$keyword.'%'); }); } $logs = $logs->paginate(); foreach ($logs as $item){ $item->profile = ProfileCourtship::where('user_id',$item->user_id)->select('birthday','state','city','province')->first(); } return $this->success('ok',$logs); } //用户被打招呼记录 public function userGreetedLog(Request $request,$user_id){ $keyword = $request->keyword; $logs = LinkingRequest::with('user','linkingUser')->where('user_id',$user_id)->orderBy('created_at','desc'); if ($keyword) { $keyword = trim($keyword); $logs = $logs->whereHas('user',function($sql) use($keyword){ $sql->where('id',$keyword)->orWhere('nickname','like','%'.$keyword.'%')->orWhere('mobile','like','%'.$keyword.'%'); }); } $logs = $logs->orderBy('id','desc')->paginate(); foreach ($logs as $item){ $item->profile = ProfileCourtship::where('user_id',$item->user_linking_id)->select('birthday','state','city','province')->first(); } return $this->success('ok',$logs); } /** * 可提现福币用户管理 */ public function coinWithdrawers(Request $request) { try { $withdrawers = CoinWithdrawer::with('user:id,nickname,mobile,photo,app_avatar,sex', 'coin:user_id,remain_amount,amount_from_other'); $keyword = $request->input('keyword'); if ($keyword) { $withdrawers = $withdrawers->whereHas('user', function($sql) use($keyword){ $sql->where('nickname', 'like', '%'.trim($keyword).'%') ->orWhere('id', 'like', '%'.trim($keyword).'%') ->orWhere('mobile', 'like', '%'.trim($keyword).'%'); }); } $withdrawers = $withdrawers->orderBy('id', 'desc')->paginate(); return $this->success('ok', $withdrawers); } catch (\Exception $e) { $this->getError($e); return $this->failure('获取提现用户列表失败,请联系开发人员'); } } /** * 增加可提现者 * @param Request $request [description] */ public function addCoinWithdrawer(Request $request) { try { $result = $this->checkAddWithdrawer(); if (empty($result)) throw new \Exception("参数错误", 1); if (is_array($result) && $result['code']) return $this->failure($result['msg']); $withdrawer = $this->userCon->addCoinWithdrawer(); if (empty($withdrawer)) throw new \Exception("参数错误", 1); return $this->success('ok', $withdrawer); } catch (\Exception $e) { $this->getError($e); return $this->failure('增加提现用户失败,请联系开发人员'); } } /** * 检查增加提现者 * @return [type] [description] */ public function checkAddWithdrawer() { try { if (empty(request()->input('user_id'))) return ['code'=>1, 'msg'=>'请选择用户']; //是否已存在 $withdrawer = CoinWithdrawer::where('user_id', request()->user_id)->first(); if ($withdrawer) return ['code'=>1, 'msg'=>'用户已存在']; return true; } catch (\Exception $e) { $this->getError($e); return false; } } /** * 检查删除提现者 * @return [type] [description] */ public function checkDeleteWithdrawer() { try { if (empty(request()->input('user_id'))) return ['code'=>1, 'msg'=>'请选择用户']; return true; } catch (\Exception $e) { $this->getError($e); return false; } } public function deleteCoinWithdrawer(Request $request) { try { $result = $this->checkDeleteWithdrawer(); if (empty($result)) throw new \Exception("参数错误", 1); if (is_array($result) && $result['code']) return $this->failure($result['msg']); $result = $this->userCon->deleteCoinWithdrawer(); if (empty($result)) throw new \Exception("参数错误", 1); return $this->success('ok'); } catch (\Exception $e) { $this->getError($e); return $this->failure('删除提现用户失败,请联系开发人员'); } } //设置/删除举报通知手机号 public function setRepotMobile(Request $request){ $key = 'repot_notice_mobile'; if($request->type == 0){ Redis::srem($key, $request->mobile); }else{ Redis::sadd($key, $request->mobile); } return $this->success('ok'); } //举报通知手机号列表 public function repotMobiles(Request $request){ $key = 'repot_notice_mobile'; $mobiles = Redis::smembers($key); $users = User::select('id','nickname', 'name', 'app_avatar', 'photo', 'circle_avatar', 'sex', 'mobile')->whereIn('mobile', $mobiles)->get(); foreach ($users as $user) { $user->sex = (int)$user->sex; } return $this->success('ok', $users); } //批量发送短信 public function batchSms(Request $request){ return $this->failure('该功能已停用'); if(!in_array(auth()->id(), [49408, 93991])){ return $this->failure('没有权限'); }; $users = User::orderBy('id', 'desc'); $type = $request->input('type', ''); //单身、介绍人 if ($type && $type != 'all') { if ($type == 'marriage') { $users = $users->where('type', '<>', 'single'); }else{ $users = $users->where('type', $type); } } //搜索 $keyword = $request->input('keyword', ''); if ($keyword) { $keyword = trim($keyword); $users = $users->where(function($sql)use($keyword){ $sql->where('name', 'like', '%'.$keyword.'%') ->orWhere('id', $keyword) ->orWhere('mobile', 'like', '%'.$keyword.'%') ->orWhere('nickname', 'like', '%'.$keyword.'%'); }); } //性别 $sex = $request->input('sex', 0); if (is_numeric($sex) && $sex) { $users = $users->where('sex', $sex); } //实名认证 $is_approved = $request->is_approved; if (is_numeric($is_approved)) { $users = $users->where('is_approved',$is_approved); } $is_real_approved = $request->is_real_approved; if (is_numeric($is_real_approved)) { $real_approve_users = ApproveHistory::where('status', 1)->where('type', 'body')->pluck('user_id')->toArray(); $orderby = implode(',', $real_approve_users); $users = $users->where('is_real_approved',$is_real_approved)->orderByRaw(DB::raw("FIELD(id, $orderby) desc")); } //头像认证 if (is_numeric($request->is_photo_audited)) { $users = $users->where('is_photo_audited',$request->is_photo_audited); } //时间 $start_time = $request->input('start_time'); $end_time = $request->input('end_time'); if ($start_time && $end_time) { $users = $users->whereBetween('created_at', [$start_time, $end_time]); } // 否是会员 $is_vip = $request->input('is_vip'); if (is_numeric($is_vip) && $is_vip) { $users = $users->where('rank_id', '>', 0); } if ($request->input('small_age') || $request->input('max_age')) { $small_age = $request->input('small_age', 0); $max_age = $request->input('max_age', 100); $small_time= date('Y-00-00 00:00:00', strtotime("-$small_age year")); $max_time = date('Y-00-00 00:00:00', strtotime("-$max_age year")); $users = $users->whereHas('profileCourtship', function($sql) use($max_time, $small_time){ $sql->whereBetween('birthday', [$max_time, $small_time]); }); } if($request->has('have_remark') && is_numeric($request->have_remark)){ if($request->have_remark == 0){ $users = $users->where('tag_num',0); }else{ $users = $users->where('tag_num', '!=',0); } } if ($request->input('small_height') || $request->input('max_height')) { //身高 $small_height = $request->input('small_height', 0); $max_height = $request->input('max_height', 250); $users = $users->whereHas('profileCourtship', function($sql) use($small_height, $max_height, $users){ $sql->whereBetween('stature', [$small_height, $max_height]); }); } if($request->has('city') && $request->city){ $city = $request->city; $users = $users->whereHas('profileCourtship', function($query) use($city){ $query->where('city', 'like', '%'.$city.'%'); }); } if($request->has('province') && $request->province && !$request->city){ $province = $request->province; $users = $users->whereHas('profileCourtship', function($query) use($province){ $query->where('province', 'like', '%'.$province.'%'); }); } if($request->user_type == 'app'){ $app_user_ids = Db::table('user_register_channels')->where('channel', '!=', 'mini_program')->pluck('user_id')->toArray(); $users = $users->whereIn('id', $app_user_ids); } if($request->degree && $request->degree != 'all'){ $degree = $request->degree; $users = $users->whereHas('profileCourtship', function($query) use($degree){ $query->where('degree', $degree); }); } //单身状态 if($request->state && $request->state != 'all'){ $state = $request->state; $users = $users->whereHas('profileCourtship', function($query) use($state){ $query->where('state', $state); }); } if ($request->belief && $request->belief != 'all') { $users = $users->where('belief', $request->belief); } if($request->orderby){ switch ($request->orderby){ case 'last_visit': $users = $users->orderBy('last_visit', 'desc'); } } if($request->last_visit){ $users = $users->where('last_visit', '<', $request->last_visit); } $users = $users->pluck('mobile')->toArray(); $array = [ 'mobile' => $users, 'message' => "亲爱的会员,请您详细填写福恋APP上的个人资料,完成真人认证. 如有疑问,请拨打400-040-1707", ]; SendSmsBatch::dispatch($array)->onQueue('love'); return $this->success('ok'); } //后台操作记录 public function operateLog(Request $request){ try { $keyword = $request->input('keyword'); $logs = AdminLog::with('user')->where('method','!=','GET')->orderBy('created_at','desc')->whereHas('user'); if ($keyword) { $keyword = trim($keyword); $logs = $logs->where(function($sql) use($keyword){ $sql->where('path','like','%'.$keyword.'%'); })->orWhereHas('user',function($sql) use($keyword){ $sql->where('id','like','%'.$keyword.'%')->orWhere('nickname','like','%'.$keyword.'%')->orWhere('mobile','like','%'.$keyword.'%'); }); } $logs = $logs->paginate(); foreach ($logs as $log) { $log->param = $log->param ? json_decode($log->param,true) : ''; } return $this->success('ok',$logs); } catch (\Exception $e) { $this->getError($e); return $this->failure('获取列表失败,请稍后再试'); } } //后台重新审核所有学历认证 // public function reEducateAudite(Request $request){ // $user_ids = ApproveHistory::where('type','educate')->where('status','1')->pluck('user_id'); // $user = User::whereIn('id',$user_ids)->update(['is_educate_approved' => 2]); // ApproveHistory::where('type','educate')->where('status','1')->update(['status' => 0]); //所有通过学历的改为审核中,人工重新审核 // return $this->success('ok'); // } //工作/虚拟号列表 public function testPhoneList(Request $request){ try { $status = $request->status; $t_user = TestUser::with('user:id,sex,nickname,name,mobile,circle_avatar,app_avatar,created_at,updated_at')->whereHas('user')->where('status',$status); $keyword = $request->keyword; if ($keyword) { $keyword = trim($keyword); $t_user = $t_user->whereHas('user', function ($sql) use ($keyword) { $sql->where('id', $keyword) ->orwhere('name', 'like', '%' . $keyword . '%') ->orwhere('nickname', 'like', '%' . $keyword . '%') ->orwhere('mobile', 'like', '%' . $keyword . '%'); }); } $t_user = $t_user->orderBy('created_at', 'desc')->paginate(); return $this->success('ok', $t_user); } catch (\Exception $e) { $this->getError($e); return $this->failure('获取列表失败'); } } //添加工作号 public function addTestPhone(Request $request){ try { $user_id = $request->user_id; if (empty($user_id)) return $this->failure('请选择用户'); $user = User::find($user_id); if (empty($user)) return $this->failure('用户不存在'); $t_user = TestUser::where('user_id',$user_id)->count(); if ($t_user) return $this->failure('用户已在列表'); $tag = $request->tag ?? ''; TestUser::create([ 'user_id' => $user_id, 'status' => 0, 'tag' => $tag ]); return $this->success('ok'); } catch (\Exception $e) { $this->getError($e); return $this->failure('添加员工号失败'); } } /** * 编辑工作号 * @param Request $request * @return \Illuminate\Contracts\View\Factory|\Illuminate\Foundation\Application|JsonResponse|\Illuminate\View\View */ public function updateTestPhone(Request $request) { try { $id = $request->id; $data = TestUser::where('id',$id)->where('status',0)->first(); if($data){ $tag = $request->tag ?? ''; $data->tag = $tag; $data->save(); } return $this->success('ok'); }catch (\Exception $e){ $this->getError($e); return $this->failure($e->getMessage()); } } //移除工作号 public function delTestPhone(Request $request){ try { $user_id = $request->user_id; if (empty($user_id)) return $this->failure('请选择用户'); TestUser::where('user_id',$user_id)->where('status',0)->delete(); return $this->success('ok'); } catch (\Exception $e) { $this->getError($e); return $this->failure('添加员工号失败'); } } //创建虚拟测试号 public function addFakePhone(Request $request){ try { $virtualNumber = $request->virtualNumber; $mobile = $request->mobile; if (empty($mobile)) return $this->failure('请输入号码'); $password = bcrypt($request->password); if (empty($password)) return $this->failure('请输入密码'); DB::beginTransaction(); $user = User::create([ 'mobile' => $mobile, 'password' => $password, 'type' => 'marriage' ]); if ($user->type == 'single') { ProfileCourtship::create([ 'user_id' => $user->id ]); }else{ ProfileMarriage::create([ 'user_id' => $user->id ]); } TestUser::create([ 'user_id' => $user->id, 'status' => 1, 'virtualNumber' => $virtualNumber ]); TestUser::create([ 'user_id' => $user->id, 'status' => 0, 'virtualNumber' => $virtualNumber ]); DB::commit(); return $this->success('ok'); } catch (\Exception $e) { DB::rollback(); $this->getError($e); return $this->failure('创建失败'); } } //修改测试号密码 public function updateFakePsw(Request $request){ try { $user_id = $request->user_id; if (empty($user_id)) return $this->failure('请选择用户'); $user = User::find($user_id); if (empty($user)) return $this->failure('用户不存在'); $password = $request->input('password'); if ($password && $password != '') { $user->password = bcrypt($password); $user->save(); } return $this->success('ok'); } catch (\Exception $e) { $this->getError($e); return $this->failure('修改失败'); } } //增加客服 同步网易 // updateUinfo($accid,$name='',$icon='',$sign='',$email='',$birth='',$mobile='',$gender='0',$ex='') public function addServiceClient(Request $request){ $array = ['is_client'=>1]; $extension = json_encode($array); // dd($extension); $user_id = $request->user_id; $user = User::find($user_id); if (empty($user)) return $this->failure('该用户不存在'); UserInfo::updateOrcreate(['user_id' => $user_id],['is_service_client' => 1]); //用户信息 $sex = $user->sex ? $user->sex : 0; $avatar = $user->userAvatar($user_id); $phone = $user->mobile ? $user->mobile : ''; $name = $user->nickname ? $user->nickname : $user->name; $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, $name, $avatar, $sign = '', $user->email, $birthday, $phone, $sex,$extension); return $this->success('ok',$result); } //客服列表 public function serviceClientsList(Request $request){ $keyword = $request->keyword; $clients = UserInfo::with('user')->where('is_service_client',1)->orderBy('id','desc'); if ($keyword) { $keyword = trim($keyword); $clients = $clients->whereHas('user',function($sql) use($keyword){ $sql->where('id',$keyword)->orWhere('nickname','like','%'.$keyword.'%')->orWhere('mobile','like','%'.$keyword.'%'); }); } $clients = $clients->paginate(); return $this->success('ok',$clients); } //移除客服 public function removeClients(Request $request){ $user_id = $request->user_id; $client = UserInfo::where('user_id',$user_id)->first(); if (empty($client)) return $this->failure('该用户不是客服人员'); //用户信息 $user = User::find($user_id); $sex = $user->sex ? $user->sex : 0; $avatar = $user->userAvatar($user_id); $phone = $user->mobile ? $user->mobile : ''; $name = $user->nickname ? $user->nickname : $user->name; $birthday = $user->profileCourtship ? $user->profileCourtship->birthday : null; $array = ['is_client'=>0]; $extension = json_encode($array); $client->is_service_client = 0; //取消客服同步网易云信 $im_service = new IMService(env('IM_APP_KEY'), env('IM_APP_SECRET')); $result = $im_service->updateUinfo($user_id,$name,$avatar,$sign='',$user->email,$birthday,$phone,$sex,$extension); $client->save(); return $this->success('ok',$result); } //个人动态列表 public function personalMoments(Request $request,$user_id){ $keyword = $request->keyword; $moments = Moment::with('user:id,nickname,app_avatar,circle_avatar','topic:id,name')->where('user_id',$user_id)->orderBy('is_show','desc')->orderBy('id','desc'); if ($keyword) { $keyword = trim($keyword); $moments = $moments->where('content','like','%'.$keyword.'%')->orWhere('id',$keyword); } $moments = $moments->paginate(); foreach ($moments as $moment) { $moment->photos = json_decode($moment->photos,true); } return $this->success('ok',$moments); } //所有关闭资料用户 public function hiddenToAll(Request $request){ try { $status = $request->input('status',0); $keyword = $request->input('keyword'); $ids = CloseProfileHistory::where('status', $status)->orderby('updated_at','asc')->pluck('user_id')->toArray(); $orderby = implode(',',$ids); $users = User::with('closeProfile','closeProfile.operatorUser:id,nickname,app_avatar,circle_avatar,sex')->where('hidden_profile','ALLSEX')->whereHas('closeProfile', function($sql) use($status) { $sql->where('status', $status); })->select('id','nickname','app_avatar','circle_avatar','sex'); if ($keyword) { $keyword = trim($keyword); $users = $users->where(function($query) use($keyword){ $query->where('id',$keyword)->orWhere('nickname','like','%'.$keyword.'%')->orWhere('mobile','like','%'.$keyword.'%'); }); } $users = $users->orderByRaw(DB::raw("FIELD(id, $orderby) desc"))->paginate(); foreach ($users as $user) { if (!empty($user->closeProfile && !empty($user->closeProfile->remark))) { $user->closeProfile->remark = json_decode($user->closeProfile->remark,true); } $user->mobile = ''; } return $this->success('ok', $users); } catch (\Exception $e) { $this->getError($e); return $this->failure("服务器休息,请稍后再试"); } } //修改关闭跟进资料状态 public function changeCloseProfileStatus(Request $request,$user_id) { try { if (empty($user_id)) throw new \Exception("请选择用户"); $user = auth()->user(); $status = $request->input('status', 0); $history = CloseProfileHistory::updateOrCreate(['user_id'=>$user_id],['status'=>$status, 'operator'=>$user->id]); return $this->success('ok',$history); } catch (\Exception $e) { $this->getError($e); return $this->failure('服务器休息,请稍后再试'); } // $nickname = $user->nickname ? $user->nickname :$user->name; // $avatar = $user->userAvatar($id); // $content = $request->input('content'); // if (!$content) return $this->failure('请输入跟进信息'); // if (empty($history->remark)){ // $record = array( // array('沟通方式'=>$content[0],'跟进内容'=>$content[1],'达成结果'=>$content[2],'跟进人'=>auth()->id(),'跟进时间'=>date('Y-m-d H:i:s'),'跟进人头像'=>$avatar,'跟进人昵称'=>$nickname)); // }else{ // $desc = json_decode($history->remark,true); // $array = array( // array('沟通方式'=>$content[0],'跟进内容'=>$content[1],'达成结果'=>$content[2],'跟进人'=>auth()->id(),'跟进时间'=>date('Y-m-d H:i:s'),'跟进人头像'=>$avatar,'跟进人昵称'=>$nickname)); // array_push($desc,$array); // $record = $desc; // } // // dd($status); // $history->status = $status; // $history->remark = json_encode($record,JSON_UNESCAPED_UNICODE); // $history->operator = $user_id; // $history->save(); } //老师增加手机号 public function addMobileViewer(Request $request){ $anchor_id = $request->anchor_id; $viewer_id = $request->viewer_id; $mobile = $request->mobile; $viewer = Viewer::find($viewer_id); $anchor = Anchor::find($anchor_id); $viewer->mobile = $mobile; $anchor->mobile = $mobile; $viewer->save(); $anchor->save(); return $this->success('ok'); } //被投诉主播列表 public function complaintdAuthor(Request $request){ $keyword = $request->keyword; $status = $request->input('status',0); $authors = ComplaintHistory::with('user','otherUser','operatorUser')->whereHas('user')->where('type','interact_live')->where('status',$status); if ($keyword) { $keyword = trim($keyword); $authors = $authors->whereHas('user', function($sql) use($keyword){ $sql->where('nickname', 'like', '%'.$keyword.'%')->orWhere('id',$keyword)->orWhere('mobile','%'.$keyword.'%'); })->orWhereHas('otherUser', function($sq) use($keyword){ $sq->where('nickname', 'like', '%'.$keyword.'%')->orWhere('id',$keyword)->orWhere('mobile','%'.$keyword.'%'); }); } $authors = $authors->orderBy('created_at','desc')->paginate(); foreach ($authors as $author) { $user = $author->user; $user_name = $user ? $user->nickname : ''; $complaint_user = $author->otherUser; $complaint_name = $complaint_user ? $complaint_user->nickname : ''; $user_avatar = $user ? $user->avatar : ''; $complaint_avatar = $complaint_user? $complaint_user->avatar : ''; $author->user_name = $user_name; $author->complaint_name = $complaint_name; $author->user_avatar = $user_avatar; $author->complaint_avatar = $complaint_avatar; $author->photos = json_decode($author->photos); if ($author->remark_type == 2){ $author->remark = json_decode($author->remark); } } return $this->success('ok',$authors); } //用户消费记录 public function userConsumHistory(Request $request,$user_id){ $keyword = $request->keyword; $histories = Order::with('user:id,name,nickname,app_avatar,circle_avatar,mobile')->where('user_id',$user_id)->where('pay_status','PAID'); if ($keyword) { $keyword = trim($keyword); $histories = $histories->whereHas('user',function($sql) use($keyword){ $sql->where('id',$keyword)->orWhere('nickname','like','%'.$keyword.'%')->orWhere('mobile','like','%'.$keyword.'%'); }); } $histories = $histories->orderBy('created_at','desc')->paginate(); return $this->success('ok',$histories); } public function changeOperator(Request $request){ CloseProfileHistory::where('operator',1)->update(['operator'=>0]); return $this->success('ok'); } //用户消费记录(兼容福恋订单和saas订单) 点击跳转 public function userConsumHistoryV2(Request $request,$user_id){ $user = User::find($user_id); if(empty($user)) return $this->failure('用户不存在'); $official_openid = $user->wechat ? $user->wechat->official_openid: ''; $mp_openid = $user->wechat ? $user->wechat->openid: ''; // dd($official_openid,$mp_openid); $keyword = trim($request->keyword); $order_type = $request->input('order_type','saas'); if($order_type == 'saas'){ $merchant_user = MerchantUser::where('user_id',$user_id)->first(); // dd($merchant_user); if(!$merchant_user) $merchant_user = MerchantUser::where('openid',$official_openid)->first(); $orders = TouristOrder::whereIn('pay_status',[1,4])->where(function($sql) use($merchant_user,$official_openid,$mp_openid){ $sql->whereIn('open_id',[$official_openid,$mp_openid]); if($merchant_user){ $sql->orWhere('account_id',$merchant_user->id); } }); if ($keyword) $orders = $orders->where('desc','like','%'.$keyword.'%'); $orders = $orders->orderBy('id','desc')->paginate(); }else{ $orders = Order::with('user:id,name,nickname,app_avatar,circle_avatar,mobile')->where('user_id',$user_id)->where('pay_status','PAID'); if ($keyword) $orders = $orders->where('goods','like','%'.$keyword.'%'); $orders = $orders->orderBy('created_at','desc')->paginate(); } return $this->success('ok',$orders); } //H5用户列表 public function h5Users(Request $request){ $keyword = $request->keyword; $viewers = Viewer::orderBy('id','desc')->select('id','nickname','actual_name','mobile','sex','avatar','created_at'); if ($keyword) { $viewers = $viewers->where(function($sql) use($keyword){ $sql->where('id',$keyword)->orWhere('nickname','like','%'.$keyword.'%')->orWhere('mobile','like','%'.$keyword.'%')->orWhere('actual_name','like','%'.$keyword.'%'); }); } $viewers = $viewers->paginate(); return $this->success('ok',$viewers); } //审核公众号上墙 public function auditedOfficalWall(Request $request,$user_id){ try { $operator_id = auth()->id(); $reason = $request->reason; $official_user = MyQuestion::where('user_id',$user_id)->where('status',0)->first(); if (empty($official_user)) return $this->failure('该用户不在审核列表'); $status = $request->status; if ($status == 1){ $official_user->status = $status; $official_user->reson = null; $official_user->Operator = $operator_id; $official_user->save(); } if ($status == 2){ if (empty($reason)) return $this->failure('请输入拒绝理由'); $official_user->status = $status; $official_user->reson = $reason; $official_user->Operator = $operator_id; $official_user->save(); } return $this->success('ok',$official_user); } catch (\Exception $e) { $this->getError($e); return $this->failure('审核失败'); } } //公众号上墙列表 public function officalWallUsers(Request $request){ try { $keyword = $request->keyword; $status = $request->status ? $request->status : 0; $official_users = MyQuestion::with('user:id,nickname,name,app_avatar,circle_avatar,sex,mobile','operator')->where('status',$status)->whereHas('user')->orderBy('sort','desc')->orderBy('id','desc'); if ($keyword) { $keyword = trim($keyword); $official_users = $official_users->whereHas('user',function($sql) use($keyword){ $sql->where('id',$keyword)->orWhere('nickname','like','%'.$keyword.'%') ->orWhere('mobile','like','%'.$keyword.'%'); }); } $official_users = $official_users->paginate(); foreach ($official_users as $official_user) { $official_user->photos = json_decode($official_user->photos,true); $official_user->user->mobile = ''; } return $this->success('ok',$official_users); } catch (\Exception $e) { $this->getError($e); return $this->failure('获取列表失败'); } } //移除公众号上墙用户 public function removeOfficalWallUser(Request $request ,$id){ try { $official_user = MyQuestion::find($id); if(empty($official_user)) return $this->failure('上墙用户不存在'); $official_user->delete(); return $this->success('ok'); } catch (\Exception $e) { $this->getError($e); return $this->failure('移除失败'); } } //是否推荐公众号上墙用户 public function recommendOfficalWallUser(Request $request,$user_id){ try { $recommend = $request->recommend ? $request->recommend : 0; $official_user = MyQuestion::where('user_id',$user_id)->where('status',1)->first(); if (empty($official_user)) return $this->failure('选择的用户不在列表'); $official_user->recommend = $recommend; $official_user->save(); return $this->success('ok',$official_user); } catch (\Exception $e) { $this->getError($e); return $this->failure('推荐失败'); } } //爱情故事列表 public function lovestories(Request $request){ $keyword = $request->keyword; $status = $request->status ? $request->status : 0; $love_stories = LoveStory::with('user:id,nickname,app_avatar,circle_avatar,mobile,sex','operateUser:id,nickname,circle_avatar,app_avatar')->where('status',$status)->orderBy('sort')->orderBy('created_at','desc'); if ($keyword) { $love_stories = $love_stories->whereHas('user',function($sql) use($keyword){ $sql->where('nickname','like','%'.$keyword.'%')->orWhere('id',$keyword)->orWhere('mobile','like','%'.$keyword.'%'); }); } $love_stories = $love_stories->paginate(); foreach ($love_stories as $love_story) { $love_story->acquaintance_photos = json_decode($love_story->acquaintance_photos,true); $love_story->know_each_other_photos = json_decode($love_story->know_each_other_photos,true); $love_story->loveing_photos = json_decode($love_story->loveing_photos,true); $love_story->open_communication_photos = json_decode($love_story->open_communication_photos,true); $love_story->marry_photos = json_decode($love_story->marry_photos,true); $love_story->proposal_photos = json_decode($love_story->proposal_photos,true); } return $this->success('ok',$love_stories); } //审核爱情故事 public function auditedLoveStory(Request $request,$id){ $user_id = auth()->id(); $love_story = LoveStory::find($id); if (empty($love_story)) return $this->failure('该用户不在审核列表'); $status = $request->input('status'); $love_story->update(['status'=>$status,'operator'=>$user_id]); return $this->success('ok',$love_story); } //删除爱情故事 public function deleteLoveStory(Request $request ,$id){ $love_story = LoveStory::where('id',$id)->first(); if (empty($love_story)) return $this->failure('数据不存在'); $love_story->delete(); return $this->success('ok'); } //用户被访问记录 public function userPreviewHistories(Request $request ,$user_id){ $keyword = $request->keyword; $histories = UserPreviewHistory::with('users')->whereHas('users')->where('user_id',$user_id)->orderBy('updated_at','desc'); if ($keyword) { $keyword = trim($keyword); $histories = $histories->whereHas('users',function($sql) use($keyword){ $sql->where('id',$keyword)->orWhere('nickname','like','%'.$keyword.'%')->orWhere('mobile','like','%'.$keyword.'%'); }); } $histories = $histories->paginate(); foreach ($histories as $item){ $item->profile = ProfileCourtship::where('user_id',$item->preview_user_id)->select('birthday','state','city','province')->first(); } return $this->success('ok',$histories); } /** * 用户访问记录 * @param Request $request * @param $user_id * @return \Illuminate\Contracts\View\Factory|\Illuminate\Foundation\Application|JsonResponse|\Illuminate\View\View */ public function previewUserHistories(Request $request, $user_id) { $keyword = $request->keyword; $histories = UserPreviewHistory::with('previewUsers')->whereHas('previewUsers')->where('preview_user_id',$user_id)->orderBy('created_at','desc'); if ($keyword) { $keyword = trim($keyword); $histories = $histories->whereHas('previewUsers',function($sql) use($keyword){ $sql->where('id',$keyword)->orWhere('nickname','like','%'.$keyword.'%')->orWhere('mobile','like','%'.$keyword.'%'); }); } $histories = $histories->paginate(); foreach ($histories as $item){ $item->profile = ProfileCourtship::where('user_id',$item->user_id)->select('birthday','state','state','city','province')->first(); } return $this->success('ok',$histories); } //插入短信 public function insertSms(Request $request){ $mobile = $request->mobile; $code = $request->code; Message::create([ 'phone' => $mobile, 'message' => '登录验证码:'.$code.',福恋用科技让交友变简单!【福恋】', 'code' => $code, 'confirmed' => 0, 'ip' => '127.0.0.1', 'is_click' => 0, ]); return $this->success('ok',$code); } //用户有两个号 需要将一个号转移到另外一个用 public function transferToOtherAccount(Request $request,$mobile,$other_mobile){ try{ $user = User::where('mobile',$mobile)->first(); $other_user = User::where('mobile',$other_mobile)->first(); if (empty($user)) return $this->failure('用户'.$mobile.'不存在'); if (empty($other_user)) return $this->failure('用户'.$other_mobile.'不存在'); $user_id = $user->id; $other_user_id = $other_user->id; $name_history = ApproveHistory::where('user_id',$user_id)->where('type','name')->first(); $educate_history = ApproveHistory::where('user_id',$user_id)->where('type','educate')->first(); $body_history = ApproveHistory::where('user_id',$user_id)->where('type','body')->first(); DB::beginTransaction(); //开始转移 if (!empty($name_history)) { ApproveHistory::updateOrCreate(['user_id' => $other_user_id,'type' => 'name'], [ 'ways' => $name_history->ways, 'status' => $name_history->status, 'reason' => null, 'from_platform' => null, 'from_user_id' => null, ]); } if (!empty($educate_history)) { ApproveHistory::updateOrCreate(['user_id' => $other_user_id,'type' => 'educate'], [ 'ways' => $educate_history->ways, 'status' => $educate_history->status, 'reason' => null, 'from_platform' => null, 'from_user_id' => null, ]); } if (!empty($body_history)) { ApproveHistory::updateOrCreate(['user_id' => $other_user_id,'type' => 'body'], [ 'ways' => $body_history->ways, 'status' => $body_history->status, 'reason' => null, 'from_platform' => null, 'from_user_id' => null, ]); } //身份证号码 $other_user->card_num = $user->card_num; $user->card_num = null; $other_user->name = $user->name; $user->name = null; //实名认证 $other_user->is_approved = $user->is_approved; $user->is_approved = 0; //学历认证 $other_user->is_educate_approved = $user->is_educate_approved; $user->is_educate_approved = 0; //真人认证 $other_user->is_real_approved = $user->is_real_approved; $user->is_real_approved = 0; $other_user->identification_photos = $user->identification_photos; $user->identification_photos = null; if ($user->type == 'single' && $other_user->type == 'single') { $profile = ProfileCourtship::where('user_id',$user_id)->first(); $other_profile = ProfileCourtship::where('user_id',$other_user_id)->first(); if (!empty($profile) && !empty($other_user)) { $other_profile->degree = $profile->degree; $profile->degree = null; $other_profile->graduate_school = $profile->graduate_school; $profile->graduate_school = null; $other_profile->edc_type = $profile->edc_type; $profile->edc_type = null; $other_profile->chsi_code = $profile->chsi_code; $profile->chsi_code = null; $other_profile->identification_photos = $profile->identification_photos; $profile->identification_photos = null; $other_profile->educate_photo = $profile->educate_photo; $profile->educate_photo = null; $profile->save(); $other_profile->save(); } } $user->save(); $other_user->save(); if (!empty($name_history)) $name_history->delete(); if (!empty($educate_history)) $educate_history->delete(); if (!empty($body_history)) $body_history->delete(); DB::commit(); return $this->success('ok'); } catch (\Exception $e) { DB::rollback(); $this->getError($e); return $this->failure('认证失败,请稍后再试'); } } //给商家打款 public function tranferToMerchant(Request $request,$id){ $price = $request->price; if(!is_numeric($price) || $price <= 0) return $this->failure('请输入正确的金额'); $desc = $request->desc; $price = number_format($price,2); $account = MerchantAccount::where('id',$id)->first(); if(empty($account)) return $this->failure('该号码尚未绑定任何商户,请确认后再进行打款'); //开始打款 TouristOrder::create([ 'price' => $request->price, 'pay_type' =>'wechat', 'type' => 'system', 'pay_status' => 1, 'trade_no' => 'system001', 'withdrawal_radio' => 100, 'name' => '福恋智能', 'mobile' => '福恋智能', 'desc' => $desc, 'merchant_id' => $account->id, 'operator' => auth()->id(), ]); // $earning_account = MEarningAccount::where('m_id',$id)->first(); // if(!$earning_account){ // $earning_account = new MEarningAccount(); // $earning_account->m_id = $id; // $earning_account->m_user_id = 0; // } // $earning_account->balance = $earning_account->balance+$price; // $earning_account->total_value = $earning_account->total_value+$price; // $earning_account->save(); return $this->success('ok'); } /** 价值渠道列表 */ public function worthChannels(Request $request) { try{ $channels = WorthChannel::paginate(); return $this->success('ok', $channels); }catch(\Exception $e){ $this->getError($e); return $this->failure('获取信息失败,请联系开发人员'); } } /** 修改价值渠道信息 */ public function updateWorthChannel(Request $request) { try{ $channel_id = $request->channel_id; $channel = WorthChannel::find($channel_id); if(empty($channel)) throw new \Exception('被修改的渠道不存在'); if($request->has('amount') && $request->amount != $channel->amount){ $channel->amount = $request->amount; } if($request->has('amount_status') && $request->amount_status != $channel->amount_status){ $channel->amount_status = $request->amount_status; if($channel->amount > 1 && $channel->amount_status == 'ratio') return $this->failure('如果金额状态是比例型时,金额值不能大于1'); } if($request->has('amount_type') && $request->amount_type != $channel->amount_type){ $channel->amount_type = $request->amount_type; } if($request->has('direct_ratio') && $request->direct_ratio != $channel->direct_ratio){ $channel->direct_ratio = $request->direct_ratio; } if($request->has('indirect_ratio') && $request->indirect_ratio != $channel->indirect_ratio){ $channel->indirect_ratio = $request->indirect_ratio; } if($request->has('bind_ratio') && $request->amount != $channel->bind_ratio){ $channel->bind_ratio = $request->bind_ratio; } if($request->has('user_ratio') && $request->user_ratio != $channel->user_ratio){ $channel->user_ratio = $request->user_ratio; } $channel->save(); $redis = Redis::connection('big_data'); $redis->set('worth:'.$channel->channel.':channel', $channel); return $this->success('ok'); }catch(\Exception $e){ $this->getError($e); return $this->failure('修改信息失败,请联系开发人员'); } } /** 价值账号列表 */ public function worthAccounts(Request $request) { try{ $accounts = WorthAccount::with('user:id,nickname,photo,app_avatar,mobile'); $keyword = $request->input('keyword'); if(trim($keyword)){ $accounts = $accounts->whereHas('user', function($sql)use($keyword){ $sql->where('nickname', 'like', '%'.$keyword.'%') ->orWhere('mobile', 'like', '%'.$keyword.'%'); }); } $accounts = $accounts->orderBy('id', 'desc')->paginate(); return $this->success('ok', $accounts); }catch(\Exception $e){ $this->getError($e); return $this->failure('获取信息失败,请联系开发人员'); } } public function worthAccount(Request $request) { try{ $user_id = $request->input('user_id'); if(empty($user_id)) throw new \Exception("缺少用户id参数"); $account = WorthAccount::where('user_id',$user_id)->first(); return $this->success('ok', $account); }catch(\Exception $e){ $this->getError($e); return $this->failure('获取信息失败,请联系开发人员'); } } /** 收益记录 */ public function worthLogs(Request $request) { try{ $user_id = $request->input('user_id'); if(empty($user_id)) throw new \Exception("缺少用户id参数"); $logs = WorthLog::where('user_id',$user_id)->orderBy('id', 'desc')->paginate(); return $this->success('ok', $logs); }catch(\Exception $e){ $this->getError($e); return $this->failure('获取信息失败,请联系开发人员'); } } public function transferDate(Request $request){ $profile = ProfileCourtship::whereRaw('char_length(birthday) < 10')->whereNotNull('birthday')->orderBy('id','asc')->limit(100)->pluck('birthday')->toArray(); foreach ($profile as $key => $value) { $time = date('Y-m-d',strtotime($value)); ProfileCourtship::where('birthday',$value)->update(['birthday'=>$time]); } return $this->success('ok'); } public function deleteUserV2(Request $request) { try { DB::beginTransaction(); $mobile = $request->input('mobile'); if (empty($mobile)) return $this->failure("请输入手机号"); $openid = $request->input('openid'); $viewer = Viewer::where('mobile', $mobile)->first(); if (empty($openid) && (empty($viewer) || !$viewer->openid)) { $merchant = MerchantAccount::where('mobile', $mobile)->forceDelete(); Anchor::where('m_id', $merchant->id)->forceDelete(); MerchantUser::where('mobile', $mobile)->forceDelete(); Viewer::where('mobile', $mobile)->forceDelete(); $user = User::where('mobile', $mobile)->first(); if ($user){ Wechat::where('user_id', $user->id)->forceDelete(); $user->forceDelete(); } } else { if ($viewer) { $openid = $openid?:$viewer->openid; } Viewer::where('mobile', $mobile)->orWhere('openid', $openid)->forceDelete(); $user = User::where('mobile', $mobile)->first(); if ($user){ Wechat::where('user_id', $user->id)->forceDelete(); $user->forceDelete(); } MerchantAccount::where('openid', $openid)->orWhere('mobile', $mobile)->forceDelete(); AccessRecord::where('open_id', $openid)->forceDelete(); MerchantUser::where('openid', $openid)->orWhere('mobile', $mobile)->forceDelete(); Anchor::where('openid', $openid)->orWhere('mobile', $mobile)->forceDelete(); } DB::commit(); return $this->success('ok'); } catch (\Exception $e) { DB::rollBack(); return $this->failure('删除失败'); } } //标记用户上墙状态 public function tagUserWall(Request $request){ $user_id = $request->user_id; $is_account_wall = $request->is_account_wall; $info = UserInfo::updateOrCreate(['user_id'=>$user_id],['is_account_wall'=>$is_account_wall]); if($is_account_wall == 1){ $value = '可上墙'; }elseif($is_account_wall == 2){ $value = '已上墙'; }else{ $value = '取消上墙'; } //生成备注 $maker_user_id = auth()->id(); $nickname = User::where('id',$maker_user_id)->value('nickname'); // $admin = User:: ClientComment::create([ 'user_id'=>$user_id, 'maker_user_id'=>auth()->id(), 'type'=>'active', 'comment'=>'管理员:'.$nickname.'更改ta的上墙状态为'.$value, ]); return $this->success('ok',$info); } public function delMerchantByEmail(Request $request){ $email = $request->email; $account = MerchantAccount::where('email',$email)->first(); $anchor = Anchor::where('m_id',$account->id)->first(); if($account && $anchor){ $account->delete(); $anchor->delete(); } return $this->success('ok'); } /** * 条件查询用户列表 * @param Request $request */ public function optionUsers(Request $request) { //消费 $consume = $request->input('consume'); //资料 $info = $request->input('info'); //颜值 $face = $request->input('face'); if ($consume) { // $users = $users->with(['orders'=>function($sql) { // $sql->select('user_id', DB::raw('SUM(price) as sum_price'))->where('pay_status', "PAID")->groupBy('user_id')->orderBy('sum_price', 'desc'); // }]); // $table = DB::table('orders')->selectRaw('user_id, SUM(price) as sum_price')->where('pay_status', 'PAID')->groupBy('user_id')->limit(2)->get(); // $users = $users->leftJoin($table, 'user_id', '=', 'ufutx_profile_courthship.user_id')->get(); // $users = $users->whereHas('orders', function($sql) { // $sql->select('user_id', DB::raw('SUM(price) as sum_price'))->where('pay_status', "PAID")->groupBy('user_id')->orderBy('sum_price', 'desc'); // }); $users = DB::table('orders as o' )->leftJoin("profile_courtships as c", 'c.user_id', '=', 'o.user_id')->where('o.pay_status', '=','PAID')->groupBy('o.user_id')->orderBy('sum_price', 'desc')->select(DB::raw('sum(ufutx_o.price)as sum_price,ufutx_o.user_id,ufutx_c.sex,ufutx_c.belief,ufutx_c.income')); //性别 1:男,2:女 $sex = $request->input('sex'); if ($sex) { $users = $users->where('c.sex', '=', $sex); } $consume_type = $request->input('consume_type'); if ($consume_type){ $users = $users->where('o.type', '=', $consume_type); } $users = $users->orderBy('user_id', 'desc')->paginate(); foreach ($users as $user) { $user->user = User::where('id', $user->user_id)->select('id','nickname', 'name', 'photo','info_complete_score', 'face_score')->first(); } }else if($info || $face){ $users = DB::table('profile_courtships as c' )->leftJoin("users as u", 'c.user_id', '=', 'u.id')->select(DB::raw('ufutx_c.user_id,ufutx_c.sex,ufutx_c.belief,ufutx_c.income,ufutx_u.info_complete_score,ufutx_u.face_score')); // //性别 1:男,2:女 $sex = $request->input('sex'); if ($sex) { $users = $users->where('c.sex', '=', $sex); } if ($info) { $users->orderBy('info_complete_score', 'desc'); } if ($face) { $users->orderBy('face_score', 'desc'); } $users = $users->orderBy('user_id', 'desc')->paginate(); foreach ($users as $user) { $user->user = User::where('id', $user->user_id)->select('id','nickname', 'name', 'photo','info_complete_score', 'face_score')->first(); } }else { //性别 1:男,2:女 $sex = $request->input('sex'); $users = ProfileCourtship::with('user:id,name,nickname,photo,info_complete_score')->whereHas('user', function ($sql){ $sql->type('single'); })->whereNotNull('user_id'); if ($sex) { $users = $users->where('sex', $sex); } //收入 $income = $request->input("income"); if ($income) { $users->orderByRaw(" case when income is null then 0 when income = '其他' then 1 when income = '5~10w' then 2 when income = '10~20w' then 3 when income = '10~30w' then 4 when income = '30~50w' then 5 when income = '50~100w' then 6 when income = '100~500w' then 7 when income = '500w以上' then 8 end DESC "); } //活跃 一个月 $active = $request->input('active'); if ($active) { $users = $users->orderBy('month_dynamic', 'desc'); } $users = $users->select('user_id','sex','belief','income', 'month_dynamic')->orderBy('user_id', 'desc')->paginate(); } return $this->success('ok', $users); } /** * * @param Request $request */ public function optionMerchants(Request $request) { $type = $request->input('type'); $order_type = $request->input('order_type', 'desc'); $orderby_col = 'id'; //销售额 if ($type == 'sale') { $orderby_col = 'sum_price'; } if ($type == 'profit') { $orderby_col = 'sum_profit_price'; } if ($type == 'course') { $orderby_col = 'course_count'; } // if ($type == 'article') // { // $orderby_col = 'article_count'; // } if ($type == 'info') { $orderby_col = 'information_count'; } if ($type == 'activity') { $orderby_col = 'activity_count'; } if ($type == 'service') { $orderby_col = 'service_count'; } if ($type == 'goods') { $orderby_col = 'goods_count'; } if ($type == 'video') { $orderby_col = 'video_count'; } if ($type == 'consult') { $orderby_col = 'consult_count'; } //销售额 $sale_table = DB::table('tourist_orders')->select('merchant_id', DB::raw('sum(price) as sum_price'))->where('pay_status','!=',0)->where('type', 'not like', '%reward%')->groupBy('merchant_id'); //收益额 $profit_table = DB::table('tourist_orders')->select('merchant_id', DB::raw('sum(price) as sum_profit_price'))->where('pay_status','=',1)->groupBy('merchant_id'); //课程数 $course_table = DB::table('courses')->select('merchant_id', DB::raw('count(*) as course_count'))->where('type','=','business')->groupBy('merchant_id'); //文章数 // $article_table = DB::table('anchor_articles')->select(DB::raw('count(*) as article_count, m_id as merchant_id'))->groupBy('m_id'); //资讯数 $info_table = DB::table('merchant_informations')->select('merchant_id', DB::raw('count(*) as information_count'))->groupBy('merchant_id'); //活动数 $activity_table = DB::table('community_activities')->where('type', 'business')->where('class', '=', 'one')->select('merchant_id', DB::raw('count(*) as activity_count'))->groupBy('merchant_id'); //服务数 $service_table = DB::table('community_activities')->where('type', 'business')->where('class','=', 'many')->select('merchant_id', DB::raw('count(*) as service_count'))->groupBy('merchant_id'); //商品数 $goods_table = DB::table('merchant_shops')->select('merchant_id', DB::raw('count(*) as goods_count'))->groupBy('merchant_id'); //视频 $video_table = DB::table('anchor_videos')->select( DB::raw('count(*) as video_count, m_id as merchant_id'))->groupBy('m_id'); //咨询 $consultations_table = DB::table("consultations")->select('consult_account_id', DB::raw('count(*) as consult_count'))->groupBy('consult_account_id'); $consult_table = DB::table('consult_accounts as ca')->leftJoinSub($consultations_table, 'ufutx_cont', function($join) { $join->on('ca.id', '=', 'cont.consult_account_id'); })->select('merchant_id', DB::raw("sum(consult_count) as consult_count")); $start_time = $request->input('start_time'); $end_time = $request->input('end_time'); if ($start_time && $end_time) { $sale_table->whereBetween('created_at', [$start_time, $end_time]); $profit_table->whereBetween('created_at', [$start_time, $end_time]); $course_table->whereBetween('created_at', [$start_time, $end_time]); // $article_table->whereBetween('created_at', [$start_time, $end_time]); $info_table->whereBetween('created_at', [$start_time, $end_time]); $activity_table->whereBetween('created_at', [$start_time, $end_time]); $service_table->whereBetween('created_at', [$start_time, $end_time]); $goods_table->whereBetween('created_at', [$start_time, $end_time]); $video_table->whereBetween('created_at', [$start_time, $end_time]); $consult_table->whereBetween('created_at', [$start_time, $end_time]); } $merchants = DB::table('live_anchors as a')->where('m_id', '>', 0)->leftJoinSub($sale_table, 'ufutx_o', function($join){ $join->on('a.m_id', '=', 'o.merchant_id'); })->leftJoinSub($profit_table, 'ufutx_p',function($join){ $join->on('a.m_id', '=', 'p.merchant_id'); })->leftJoinSub($course_table, 'ufutx_c',function($join){ $join->on('a.m_id', '=', 'c.merchant_id'); }) // ->leftJoinSub($article_table, 'ufutx_ar',function($join){ // $join->on('a.m_id', '=', 'ar.merchant_id'); // }) ->leftJoinSub($info_table, 'ufutx_i',function($join){ $join->on('a.m_id', '=', 'i.merchant_id'); })->leftJoinSub($activity_table, 'ufutx_at',function($join){ $join->on('a.m_id', '=', 'at.merchant_id'); })->leftJoinSub($service_table, 'ufutx_st',function($join){ $join->on('a.m_id', '=', 'st.merchant_id'); })->leftJoinSub($goods_table, 'ufutx_gt',function($join){ $join->on('a.m_id', '=', 'gt.merchant_id'); })->leftJoinSub($video_table, 'ufutx_vt',function($join){ $join->on('a.m_id', '=', 'vt.merchant_id'); })->leftJoinSub($consult_table, 'ufutx_cont',function($join){ $join->on('a.m_id', '=', 'cont.merchant_id'); }) ->orderBy($orderby_col,$order_type)->orderBy('id', 'desc') ->select('id', 'm_id', 'name', 'pic', 'sum_price', 'sum_profit_price','course_count', /*'article_count',*/'information_count', 'activity_count', 'service_count','goods_count', 'video_count', 'consult_count', 'created_at')->paginate(); foreach ($merchants as $merchat) { $merchat->sum_price = $merchat->sum_price?:0; $merchat->sum_profit_price = $merchat->sum_profit_price?:0; $merchat->course_count = $merchat->course_count?:0; // $merchat->article_count = $merchat->article_count?:0; $merchat->information_count = $merchat->information_count?:0; $merchat->activity_count = $merchat->activity_count?:0; $merchat->service_count = $merchat->service_count?:0; $merchat->goods_count = $merchat->goods_count?:0; $merchat->video_count = $merchat->video_count?:0; $merchat->consult_count = $merchat->consult_count?:0; } return $this->success('ok', $merchants); } public function searchClientCommentsByKeyword(Request $request){ $nopage = $request->nopage; $single_user_ids = [];//单身用户id $marriage_user_ids = [];//非单身用户id $single_keyword_arr = ['交往中','恋爱中','已脱单','结识','相识','认识']; $marriage_keyword_arr = ['伴侣','婚姻','已婚']; foreach ($single_keyword_arr as $key => $single_keyword) { $single_user_idss = ClientComment::where('comment','like','%'.$single_keyword.'%')->pluck('user_id')->toArray(); $result = array_unique($single_user_idss); $single_user_ids[$single_keyword] = $result; } foreach ($marriage_keyword_arr as $key => $marriage_keyword) { $marriage_user_idss = ClientComment::where('comment','like','%'.$marriage_keyword.'%')->pluck('user_id')->toArray(); $result = array_unique($marriage_user_idss); $marriage_user_ids[$marriage_keyword] = $result; } // dd($single_user_ids,$marriage_user_ids); $single_user_ids = array_reduce($single_user_ids, 'array_merge', array()); $marriage_user_ids = array_reduce($marriage_user_ids, 'array_merge', array()); // dd($single_user_ids,$marriage_user_ids); $single_users = User::with('profileCourtship:user_id,birthday,city','clientComments:user_id,comment')->whereHas('profileCourtship')->whereIn('id',$single_user_ids)->select('id','sex','mobile','hidden_profile','type','nickname'); $marriage_users = User::with('profileCourtship:user_id,birthday,city','clientComments:user_id,comment')->whereHas('profileCourtship')->whereIn('id',$marriage_user_ids)->select('id','sex','mobile','hidden_profile','type','nickname'); if($request->nopage == 1){ $single_users = $single_users->get(); $marriage_users = $marriage_users->get(); }else{ $single_users = $single_users->paginate(); $marriage_users = $marriage_users->paginate(); } $single_comments = []; $marriage_comments = []; foreach ($single_users as $key => $single_user) { $single_user->age = $single_user->profileCourtship ? \CommonUtilsService::getAge($single_user->profileCourtship->birthday):'未获取'; $single_user->type = $single_user->type == 'single' ? '单身' : '介绍人'; $single_user->hidden_profile = $single_user->hidden_profile == 'NONE' ? '资料未关闭' : '关闭资料'; $single_user->sex = $single_user->sex == 1 ? '男':'女'; $single_user->city = $single_user->profileCourtship?$single_user->profileCourtship->city:'未获取'; unset($single_user->profileCourtship); } foreach ($marriage_users as $key => $marriage_user) { $marriage_user->age = $marriage_user->profileCourtship ? \CommonUtilsService::getAge($marriage_user->profileCourtship->birthday):'未获取'; $marriage_user->type = $marriage_user->type == 'single' ? '单身' : '介绍人'; $marriage_user->hidden_profile = $marriage_user->hidden_profile == 'NONE' ? '资料未关闭' : '关闭资料'; $marriage_user->sex = $marriage_user->sex == 1 ? '男':'女'; $marriage_user->city = $marriage_user->profileCourtship?$marriage_user->profileCourtship->city:'未获取'; unset($marriage_user->profileCourtship); } return $this->success('ok',compact('single_users','marriage_users')); } public function hiddenProfileUsers(Request $request){ $nopage = $request->nopage; $has_find = User::with('feedback','profileCourtship:user_id,birthday,city')->where('hidden_profile','ALLSEX')->select('id','sex','mobile','hidden_profile','type','nickname')->whereHas('feedback',function($sql) { $sql->where('content','like','%福恋找到伴侣%'); }); $other_find = User::with('feedback','profileCourtship:user_id,birthday,city')->where('hidden_profile','ALLSEX')->select('id','sex','mobile','hidden_profile','type','nickname')->whereHas('feedback',function($sql) { $sql->where('content','like','%其它方式找到伴侣%'); }); if($nopage == 1){ $has_find = $has_find->get(); $other_find = $other_find->get(); }else{ $has_find = $has_find->paginate(); $other_find = $other_find->paginate(); } $has_find_feedback = []; $other_find_feedback = []; foreach ($has_find as $key => $value) { $value->age = $value->profileCourtship ? \CommonUtilsService::getAge($value->profileCourtship->birthday):'未获取'; $value->type = $value->type == 'single' ? '单身' : '介绍人'; $value->hidden_profile = $value->hidden_profile == 'NONE' ? '资料未关闭' : '关闭资料'; $value->city = $value->profileCourtship?$value->profileCourtship->city :'未获取'; $value->sex = $value->sex == 1 ? '男' : '女'; unset($value->profileCourtship); } foreach ($other_find as $key => $value) { $value->age = $value->profileCourtship ? \CommonUtilsService::getAge($value->profileCourtship->birthday):'未获取'; $value->type = $value->type == 'single' ? '单身' : '介绍人'; $value->city = $value->profileCourtship ?$value->profileCourtship->city:'未获取'; $value->hidden_profile = $value->hidden_profile == 'NONE' ? '资料未关闭' : '关闭资料'; $value->sex = $value->sex == 1 ? '男' : '女'; unset($value->profileCourtship); } return $this->success('ok',compact('has_find','other_find')); } //查看用户隐藏手机号增加记录 public function saveAdminLog(Request $request,$user_id){ $admin_id = auth()->id(); $param = ['user_id'=>$user_id]; $log = [ 'path'=> $request->path(), 'method'=>$request->method(), 'user_id'=>$admin_id, 'param'=>json_encode($param), 'model'=>'User', 'model_id'=>$user_id, 'created_at'=>date('Y-m-d H:i:s'), 'updated_at'=>date('Y-m-d H:i:s'), ]; $mobile = User::where('id',$user_id)->value('mobile'); AdminLog::insert($log); return $this->success('ok',['mobile'=>$mobile]); } //查看记录列表 public function adminLogs(Request $request){ $keyword = $request->keyword; $logs = AdminLog::with('admin:id,mobile,nickname,name,circle_avatar,app_avatar','users:id,mobile,nickname,name,circle_avatar,app_avatar')->where('method','GET')->where('path','like','%/preview/%'); $start_time = $request->start_time; $end_time = $request->end_time; if($start_time && $end_time){ $logs = $logs->whereBetween('created_at',[$start_time,$end_time]); } if($keyword){ $keyword = trim($keyword); $logs = $logs->whereHas('users',function($sql) use($keyword){ $sql->where('name','like','%'.$keyword.'%') ->orWhere('mobile','like','%'.$keyword.'%') ->orWhere('nickname','like','%'.$keyword.'%'); }); } $logs = $logs->orderBy('id','desc')->paginate(); return $this->success('ok',$logs); } //查看手机号统计详情 public function watchMobile(Request $request){ $model_id = $request->model_id; $user_id = $request->user_id; if(isset($user_id)){ //管理员 $user = User::where('id',$user_id)->select('id','mobile','nickname','name','mobile','circle_avatar','app_avatar')->first(); if(empty($user)) return $this->failure('该用户不存在'); $logs = AdminLog::with('users:id,mobile,nickname,name,circle_avatar,app_avatar')->where('user_id',$user_id); }else{ //用户 $user = User::where('id',$model_id)->select('id','mobile','nickname','name','mobile','circle_avatar','app_avatar')->first(); if(empty($user)) return $this->failure('该用户不存在'); $logs = AdminLog::with('admin:id,mobile,nickname,name,circle_avatar,app_avatar')->where('model_id',$model_id); } $keyword = $request->keyword; if($keyword){ $keyword = trim($keyword); $logs = $logs->whereHas('users',function($sql) use($keyword){ $sql->where('name','like','%'.$keyword.'%') ->orWhere('mobile','like','%'.$keyword.'%') ->orWhere('nickname','like','%'.$keyword.'%'); }); } $start_time = $request->start_time; $end_time = $request->end_time; if($start_time && $end_time){ $logs = $logs->whereBetWeen('created_at',[$start_time,$end_time]); } $logs = $logs->where('path','like','%/preview/%')->where('model','User')->orderBy('id','desc')->paginate(); return $this->success('ok',compact('user','logs')); } /** * 排序查询某天以来打招呼最频繁的用户 * @param Request $request * @return \Illuminate\Contracts\View\Factory|\Illuminate\Foundation\Application|\Illuminate\Http\JsonResponse|\Illuminate\View\View */ public function getLikeMaxUserList(Request $request){ $limit = $request->limit ?? 10; $maxUserList = LinkingRequest::when($request->start_time,function ($query) use ($request){ $query->where('created_at','>=',$request->start_time); }) ->when($request->end_time,function ($query) use ($request){ $query->where('created_at','<=',$request->end_time); }) ->select('user_linking_id',DB::Raw('count(user_linking_id) AS count_user')) ->groupBy('user_linking_id') ->orderBy("count_user","DESC") ->limit($limit) ->get(); return $this->success('ok',$maxUserList); } /** * 排序查询某天以来打招呼最频繁的用户 * @param Request $request * @return \Illuminate\Contracts\View\Factory|\Illuminate\Foundation\Application|\Illuminate\Http\JsonResponse|\Illuminate\View\View */ public function getLikeMaxUserTarget(Request $request){ if(!$request->user_linking_id){ $this->failure('user_linking_id为必传参数'); } $maxUserList = LinkingRequest::where('user_linking_id',$request->user_linking_id) ->when($request->start_time,function ($query) use ($request){ $query->where('created_at','>=',$request->start_time); }) ->when($request->end_time,function ($query) use ($request){ $query->where('created_at','<=',$request->end_time); }) ->pluck('user_id'); return $this->success('ok',$maxUserList); } //编辑拒绝理由 public function refuseReason(Request $request){ $content = $request->input('content'); Configs::updateOrCreate(['key'=>'photo_refuse_reason'],['value'=>json_encode($content),'remark'=>'头像认证拒绝理由']); return $this->success('ok'); } //拒绝理由 public function refuseReasons(Request $request){ $config = Configs::where('key','photo_refuse_reason')->first(); if(empty($config)) return $this->success('ok',[]); $result = json_decode($config->value); return $this->success('ok',$result); } //上墙申请列表 public function upperWallUsers(Request $request){ $status = $request->status ?? 0; $keyword = trim($request->keyword); $histories = UpperWallHistory::with('user','user.profileCourtship','user.profilePhoto','admin')->whereHas('user')->where('status',$status); if($keyword){ $histories = $histories->whereHas('user',function($sql) use($keyword){ $sql->where('id',$keyword) ->orWhere('mobile','like',"%$keyword%") ->orWhere('name','like',"%$keyword%") ->orWhere('nickname','like',"%$keyword%"); }); } $histories = $histories->orderBy('id','desc')->paginate(); return $this->success('ok',$histories); } public function auditedWallUsers(Request $request,$id){ $history = UpperWallHistory::find($id); $status = $request->status??1; $reason = $request->reason??''; if(!$history) return $this->failure('记录不存在'); $history->status = $status; $history->reason = $reason; $history->admin_id = auth()->id(); $history->save(); $nickname = User::where('id',auth()->id())->value('nickname'); $result = $status == 1 ? '同意' : '拒绝'; ClientComment::create([ 'user_id'=>$history->user_id, 'maker_user_id'=>auth()->id(), 'type'=>'active', 'pics'=>null, 'comment'=>'管理员:'.$nickname.$result.'他的公众号上墙申请', ]); return $this->success('ok'); } //设置分区推荐 public function areaClassSetting(Request $request,$class_id) { try { $class = ClassArea::find($class_id); if(empty($class)) return $this->failure('要设置的分区不存在'); $min_birth = $request->min_birth ?? null; $max_birth = $request->max_birth ?? null; $is_vip = $request->is_vip ?? null; $is_real_approved = $request->is_real_approved ?? null; $belief = $request->belief ?? null; $min_degree = $request->min_degree ?? null; $max_degree = $request->max_degree ?? null; $min_stature = $request->min_stature ?? null; $max_stature = $request->max_stature ?? null; $province = $request->province ?? null; $city = $request->city ?? null; $state = $request->state ?? null; $photo_num = $request->photo_num ??0; $introduction_num = $request->introduction_num ??0; $ideal_mate_num = $request->ideal_mate_num ??0; $last_visit = $request->last_visit??0; if($request->min_birth && !$request->max_birth){ $max_birth = '2006-01-01 00:00:00'; } if(!$request->min_birth && $request->max_birth){ $min_birth = '1960-01-01 00:00:00'; } if($request->min_birth && $request->max_birth){ if($request->min_birth > $request->max_birth) return $this->failure('年龄区间设置有误'); } if($request->min_degree && $request->max_degree){ if($request->min_degree > $request->max_degree) return $this->failure('学历区间设置有误'); } if($request->min_stature && $request->max_stature){ if($request->min_stature > $request->max_stature) return $this->failure('身高区间设置有误'); } ClassAreaSetting::updateOrCreate([ 'class_id'=>$class_id, ],[ 'min_birth'=>$min_birth, 'max_birth'=>$max_birth, 'is_vip'=>$is_vip, 'is_real_approved'=>$is_real_approved, 'belief'=>$belief, 'min_degree'=>$min_degree, 'max_degree'=>$max_degree, 'min_stature'=>$min_stature, 'max_stature'=>$max_stature, 'province'=>$province, 'city'=>$city, 'state'=>$state, 'photo_num'=>$photo_num, 'introduction_num'=>$introduction_num, 'ideal_mate_num'=>$ideal_mate_num, "last_visit"=>$last_visit, ]); return $this->success('ok'); } catch (\Exception $e) { $this->getError($e); return $this->failure(); } } //获取分区推荐设置 public function areaSetting(Request $request,$class_id) { $value = ClassAreaSetting::where('class_id',$class_id)->first(); return $this->success('ok',$value); } public function recommendUsers(Request $request, $user_id) { try { $users = RecommendUser::with('otherUser:id,nickname,photo', 'otherUser.profileCourtship:id,user_id,belief,sex,stature,weight,province,city')->where('user_id', $user_id); $keyword = $request->input('keyword'); if ($keyword) { $keyword = trim($keyword); $users = $users->whereHas('otherUser', function($sql) use($keyword) { $sql->where('nickname', 'like', '%'.$keyword.'%') ->orWhere('id', 'like', '%'.$keyword.'%') ->orWhere('mobile', 'like', '%'.$keyword.'%'); }); } $users = $users->orderBy('start_time', 'desc')->paginate(14); return $this->success('ok', $users); }catch (\Exception $e) { $this->getError($e); return $this->failure(); } } //首页投票 public function homeVote(Request $request){ $all = ['思辨力'=>0,'表达力'=>0,'洞察力'=>0,'提问力'=>0,'沟通力'=>0,'决策力'=>0,'抗压力'=>0,'意志力'=>0,'责任感'=>0,'时间管理'=>0,'择偶认知'=>0,'接纳能力'=>0,'两性差异'=>0,'设立界线'=>0,'冲突处理'=>0,'情绪处理'=>0,'情伤疗愈'=>0,'关系发展评估'=>0,'恋爱旅程设计'=>0,'建立亲密关系'=>0,'制定婚姻规划'=>0]; $feedbacks = FeedbackHistory::whereNotNull('star')->whereNotNull('content')->where('created_at','>','2022-07-07 00:00:00')->select('id','user_id','content')->get(); $array = []; foreach ($feedbacks as $key => $feedback) { $value = explode(' ',$feedback->content); $array[$key] = $value; } foreach ($array as $ke => $val) { foreach ($val as $k => $v) { $all[$v] += 1; } } arsort($all); return $this->success('ok',$all); } /** * 牵线匹配 * @param Request $request * @return JsonResponse|string */ public function getMatchmakersMatch(Request $request) { try { $degree = [ '其他' => 0, '小学' => 1, '初中' => 2, '初中及初中以下' => 2, '中专' => 4, '高中' => 4, '高中/中专' => 4, '大专' => 5, '专科' => 5, '本科' => 6, '硕士' => 7,'硕士以上' => 7, '博士' => 8, ]; $user_id = $request->user_id; $mate_condition = json_decode($request->getContent(), true); if (!$mate_condition) { return $this->failure('匹配参数不存在'); } if ($mate_condition && !empty($mate_condition['location_province'])) { $mate_condition['location'] = $mate_condition['location_province']; } $send_user = User::find($user_id); if (!$send_user) { return $this->failure('获取用户资料失败'); } else { if ($send_user->profileCourtship) { if (!$send_user->profileCourtship->matchmaker_condition || $send_user->profileCourtship->matchmaker_condition != $mate_condition) { $data_object = $send_user->profileCourtship; if (!$data_object->matchmaker_condition) { $data_object->matchmaker_condition = json_encode([]); } if(!$data_object->mate_conditon){ $data_object->mate_conditon = json_encode([]); } $data_object->matchmaker_condition = json_encode(array_merge(json_decode($data_object->mate_conditon, true), $mate_condition)); $data_object->save(); } } else { return $this->failure('获取用户详细资料缺失'); } if (!$send_user['sex']) { return $this->failure('用户性别未设置,不能进行匹配'); } else { if ($send_user['sex'] == 1) { $sex = 2; } elseif ($send_user['sex'] == 2) { $sex = 1; } else { return $this->failure('用户性别异常,不能进行匹配'); } } $no_match_user = json_decode(Redis::get('no_match_user_' . $send_user->id),true); $users = Profile::with('member:photo,name,is_real_approved,id')->where('sex', $sex) ->when(!empty($mate_condition['age']), function ($query) use ($mate_condition) { if (!($mate_condition['age'] == '年龄不限' || $mate_condition['age'] == '不限')) { list($min_age, $max_age) = explode('-', $mate_condition['age']); $min_age = str_replace('岁', '', $min_age); $max_age = str_replace('岁', '', $max_age); $min_age = (date('Y') - $min_age) . '-12-31'; $max_age = (date('Y') - $max_age) . '-01-01'; if ($min_age != '不限') { $query->when($min_age, function ($sub_query) use ($min_age) { $sub_query->where('birthday', '<=', $min_age); }); } if ($max_age != '不限') { $query->when($max_age, function ($sub_query) use ($max_age) { $sub_query->where('birthday', '>=', $max_age); }); } } }) ->when(!empty($mate_condition['belief']), function ($query) use ($mate_condition) { if (!($mate_condition['belief'] == '信仰不限' || $mate_condition['belief'] == '不限')) { $query->where('belief', $mate_condition['belief']); } }) ->when(!empty($mate_condition['degree']), function ($query) use ($mate_condition, $degree) { if (!($mate_condition['degree'] == '学历不限' || $mate_condition['degree'] == '不限')) { list($min_degree, $max_degree) = explode('-', $mate_condition['degree']); if ($max_degree) { if ($max_degree != '不限') { $min_degree_temp = $degree[$min_degree]; $max_degree_temp = $degree[$max_degree]; $degree_array = []; foreach ($degree as $key => $val) { if ($val >= $min_degree_temp && $val <= $max_degree_temp) { $degree_array[] = $key; } } if($degree_array){ $query->whereIn('degree', $degree_array); } }else{ $min_degree_temp = $degree[$min_degree]; foreach ($degree as $key => $val) { if ($val >= $min_degree_temp) { $degree_array[] = $key; } } if($degree_array){ $query->whereIn('degree', $degree_array); } } } } }) ->when(!empty($mate_condition['location_province']), function ($query) use ($mate_condition) { if (!($mate_condition['location_province'] == '所在地不限' || $mate_condition['location_province'] == '不限')) { $query->where('province', $mate_condition['location_province']); } }) ->when(!empty($mate_condition['location_city']), function ($query) use ($mate_condition) { if (!($mate_condition['location_city'] == '不限' || $mate_condition['location_city'] == '所在地不限')) { $query->where('city', $mate_condition['location_city']); } }) ->when(!empty($mate_condition['resident_province']), function ($query) use ($mate_condition) { if (!($mate_condition['resident_province'] == '不限' || $mate_condition['resident_province'] == '所在地不限')) { $query->where('resident_province', $mate_condition['resident_province']); } }) ->when(!empty($mate_condition['resident_city']), function ($query) use ($mate_condition) { if (!($mate_condition['resident_city'] == '不限' || $mate_condition['resident_city'] == '所在地不限')) { $query->where('resident_city', $mate_condition['resident_city']); } }) ->when(!empty($mate_condition['stature']), function ($query) use ($mate_condition) { if ($mate_condition['stature'] != '不限') { list($min_stature, $max_stature) = explode('-', $mate_condition['stature']); if ($max_stature) { $max_stature = str_replace('cm', '', $max_stature); if ($max_stature != '不限') { $query->when($max_stature, function ($sub_query) use ($max_stature) { $sub_query->where('stature', '<=', $max_stature); }); } } if ($min_stature) { $min_stature = str_replace('cm', '', $min_stature); $query->where('stature', '>=', $min_stature); } } }) ->when(!empty($mate_condition['weight']), function ($query) use ($mate_condition) { if (!($mate_condition['weight'] == '不限' || $mate_condition['weight'] == '身高不限')) { list($min_weight, $max_weight) = explode('-', $mate_condition['weight']); if ($max_weight) { if ($max_weight != '不限') { $query->where('weight', '<=', $max_weight); } } if ($min_weight) { if ($min_weight != '不限') { $query->where('weight', '>=', $min_weight); } } } }) ->when(!empty($mate_condition['state']), function ($query) use ($mate_condition) { if ($mate_condition['state'] != '不限') { if (is_array($mate_condition['state'])) { if(in_array('未婚',$mate_condition['state']) || in_array('从未结婚',$mate_condition['state']) ){ $query->whereIn('state', array_merge(['未婚', '从未结婚'],$mate_condition['state'])); }else{ $query->whereIn('state',$mate_condition['state']); } } } }) ->when(!empty($mate_condition['year_income']), function ($query) use ($mate_condition) { if ($mate_condition['year_income'] != '不限') { if (strpos('~', $mate_condition['year_income']) !== false) { list($min_income, $max_income) = explode('~', $mate_condition['year_income']); $min_income = str_replace('万', '', $min_income); $max_income = str_replace('万', '', $max_income); $min_income = str_replace('w', '', $min_income); $max_income = str_replace('w', '', $max_income); if ($min_income != '不限') { $query->where('income', '>=', $min_income); } if ($max_income != '不限') { $max_income = str_replace('w', '', $max_income); $query->where('income', '<=', $max_income); } } else { //处理5W以下 $min_income = str_replace('万', '', $mate_condition['year_income']); $query->where('income', '<=', $min_income); } } }) ->when($no_match_user,function ($query) use($no_match_user){ $query->whereNotIn('user_id',$no_match_user); }) ->whereHas('member', function ($query) { $query->where('type', 'single')->whereNotNull('photo') ->where('hidden_profile', 'NONE') ->select(); }) ->select('birthday', 'sex', 'resident_province', 'resident_city', 'province', 'city', 'user_id','belief') ->paginate(); foreach ($users as $key => $val){ $match = MatchLog::where('send_user_id',$send_user->id) ->where('receive_user_id',$val->user_id) ->first(); if($match){ $val->is_matched = 1; }else{ $val->is_matched = 0; } } } return $this->success('ok', $users); } catch (\Exception $e) { $this->getError($e); return $this->failure('服务器休息中,请稍后再试'); } } /** * 更新匹配时不匹配的用户 * @param Request $request * @return JsonResponse|string */ public function updateNoMatchUser(Request $request){ try { $user_id = $request->user_id; $no_match_user_list = $request->no_match_user_list; if(!$no_match_user_list || !is_array($no_match_user_list)){ return $this->fail('no_match_user_list不能为空'); } $no_match_user = json_decode(Redis::get('no_match_user_' . $user_id),true); if(!$no_match_user){ $no_match_user = []; } $no_match_user_list = array_merge($no_match_user_list, $no_match_user); Redis::set('no_match_user_' . $user_id,json_encode($no_match_user_list)); return $this->success('ok'); }catch (\Exception $e) { $this->getError($e); return $this->failure('服务器休息中,请稍后再试'); } } /** * 获取匹配时不匹配的用户 * @param Request $request * @return JsonResponse|string */ public function getNoMatchUser(Request $request){ try { $user_id = $request->user_id; $no_match_user = json_decode(Redis::get('no_match_user_' . $user_id),true); if(!empty($no_match_user)){ $users = Profile::with('member:photo,name,is_real_approved,id')->whereIn('user_id', $no_match_user) ->select('birthday', 'sex', 'resident_province', 'resident_city', 'province', 'city', 'user_id', 'belief') ->paginate(); }else{ $users = Profile::whereNull('id')->paginate(); } return $this->success('ok', $users); }catch (\Exception $e) { $this->getError($e); return $this->failure('服务器休息中,请稍后再试'); } } public function userSubscibe() { try { $qrcode = 'https://image.fulllinkai.com/202211/08/95b64ecb9967dc592e214da0b231e9cd.jpeg'; $is_subscribe = 0; $user = auth()->user(); $openid = Wechat::where('user_id', $user->id)->value('official_openid'); if (empty($openid)) return $this->success('ok', compact('is_subscribe', 'qrcode')); $is_subscribe = $user->isSubscribe($openid); if ($user->is_subscribe != $is_subscribe) { User::where('id', $is_subscribe)->update(['is_subscribe'=>$is_subscribe]); } return $this->success('ok', compact('is_subscribe', 'qrcode')); } catch (\Exception $e) { $this->getError($e); return $this->failure(); } } public function combineUsers(Request $request, $user_id, $other_user_id) { try { $user = User::find($user_id); $other_user = User::find($other_user_id); if ($user->id == $other_user->id) return $this->failure("同账号无法合并"); $retain_user_id = $request->input('retain_user_id'); if (empty($retain_user_id)) return $this->failure("请选择合并后的账号"); if ($user->id == $retain_user_id) { $last_user = $user; $last_other_user = $other_user; }else { $last_user = $other_user; $last_other_user = $user; } //头像 $user_info_arr = ['nickname','name', 'photo', 'sex', 'mobile', 'card_num', 'is_approved', 'is_real_approved', 'is_educate_approved','is_photo_audited', 'belief','industry', 'industry_sub', 'rank_id']; $profile_info_arr = ['belief', 'sex', 'birthday', 'state', 'stature', 'weight', 'province', 'city', 'resident_province', 'resident_city', 'interest_hobby','interest_label','ideal_mate', 'profile_photos', 'degree', 'income','introduction']; DB::beginTransaction(); //备份变化前的数据 $openid = $request->input('openid'); if ($openid) { if ($last_other_user->wechat && $last_other_user->wechat->openid == $openid) { Wechat::where(['user_id'=>$last_other_user->id])->update(['openid'=>null]); } Wechat::updateOrCreate(['user_id'=>$last_user->id], ['openid'=>$openid]); } $result = $this->userParam($last_user, $last_other_user, $user_info_arr); $origin_user = $result['origin_profile']; $origin_other_user = $result['origin_other_profile']; $result = $this->userParam($last_user->profileCourtship, $last_other_user->profileCourtship, $profile_info_arr); $origin_profile = $result['origin_profile']; $origin_other_profile = $result['origin_other_profile']; $user_info = array_merge($origin_user, $origin_profile); $other_user_info = array_merge($origin_other_user, $origin_other_profile); CombineUserLog::create([ 'user_id'=>$last_user->id, 'other_user_id'=>$last_other_user->id, 'user_info'=>json_encode($user_info), 'other_user_info'=>json_encode($other_user_info), ]); DB::commit(); return $this->success('ok'); }catch (\Exception $e) { DB::rollBack(); $this->getError($e); return $this->failure(); } } public function userParam($profile, $other_profile, $keys) { $origin_profile = []; $origin_other_profile = []; foreach ($keys as $key) { if ($key != 'profile_photos') { $origin_profile[$key] = $profile->$key; $origin_other_profile[$key] = $other_profile->$key; } $value = request()->input($key); if (empty($value)) continue; if ($key == 'mobile' && $value != $profile->$key) { $profile->$key = $value; $other_profile->$key = null; continue; } if ($key == 'rank_id') { $profile->$key = $value; $other_profile->$key = null; RankHistory::where('user_id', $other_profile->id)->update(['user_id'=>$profile->id]); } if ($key == 'is_photo_audited' && $other_profile->is_photo_audited == 1) { $profile->$key = 1; $profile->photo = $other_profile->photo; continue; } if ($key == 'interest_label') { $profile->$key = json_encode($value); continue; } switch ($key) { case "is_approved": $type = 'name'; break; case "is_real_approved": $type = "body"; break; case "is_educate_approved": $type = 'educate'; break; default: $type = null; } if ($type) { if ($profile->approveLog()->where('type', $type)->where('status')->exists()) continue; $approve = $other_profile->approveLog()->where('type', $type)->first(); if ($approve) { if ($key == 'is_approved' || $key == 'is_real_approved') { $profile->name = $other_profile->name?:$profile->name; $profile->card_num = $other_profile->card_num?:$profile->card_num; $other_profile->card_num = null; } if ($key == 'is_educate_approved' && $profile->is_educate_approved != 1) { $other_single_profile = ProfileCourtship::where('user_id', $other_profile->id)->first(); ProfileCourtship::where('user_id', $profile->id)->update(['graduate_photos'=>$other_single_profile->graduate_photos, 'educate_photo'=>$other_single_profile->educate_photo, 'degree'=>$other_single_profile->degree, 'graduate_school'=>$other_single_profile->graduate_school]); } $approve->user_id = $profile->id; $approve->save(); } $profile->$key = $value; continue; } if ($key == 'profile_photos') { if ($value[0]['user_id'] != $profile->user_id) { ProfilePhoto::where('user_id', $value[0]['user_id'])->update(['user_id'=>$profile->user_id]); } continue; } $profile->$key = $value; } $other_profile->save(); $profile->save(); return ['origin_profile'=>$origin_profile, 'origin_other_profile'=>$origin_other_profile]; } public function mpUrlLink(Request $request) { try { $type = $request->input('type'); $type_id = $request->input('type_id'); if (empty($type) || empty($type_id)) throw new \Exception("缺少类型参数"); switch ($type) { case "activity": $path = 'pages/party/detail'; $query = 'party_id='.$type_id; break; case "service": $path = 'pages/party/servicesDetail'; $query = 'party_id='.$type_id; break; default: throw new \Exception("暂不支持该类型"); } $params = [ 'path'=>$path, 'query'=>$query ]; $url_link = WechatService::urlLink($params); return $this->success('ok', $url_link); }catch (\Exception $e) { $this->getError($e); return $this->failure(); } } public function sendMsgToUser(Request $request, $user_id) { try { $user = User::find($user_id); if (empty($user)) throw new \Exception("用户不存在"); $message = $request->input('message'); if (empty($message)) return $this->failure("请输入短信内容"); if (empty($user->mobile)) return $this->failure("用户手机号不存在"); $array = [ 'message'=>$message, 'mobile'=>$user->mobile, ]; SendEasySms::dispatch($array)->onQueue('love'); return $this->success('ok'); } catch (\Exception $e){ $this->getError($e); return $this->failure(); } } /** * 关闭资料 选择 找到对象的列表 * @param Request $request * @return \Illuminate\Contracts\View\Factory|\Illuminate\Foundation\Application|JsonResponse|\Illuminate\View\View */ public function hiddenUsersByFindLove(Request $request) { try { $keyword = $request->input('keyword'); $data = LoveLink::with('user:id,nickname,photo,app_avatar,circle_avatar,type,sex,is_photo_audited') ->whereHas('user', function ($query) use ($keyword) { $query->where('name', 'like', "%{$keyword}%"); }) ->where('type',1) ->orderBy('updated_at', 'desc') ->paginate(); return $this->success('ok', $data); } catch (\Exception $e) { $this->getError($e); return $this->failure(); } } public function writeOffUser(Request $request) { try { $operate_ids = [12441,69938,12337,58859]; if (config('app.env') == 'production') { $operate_id = auth()->id(); if (!in_array($operate_id, $operate_ids)) { return $this->failure("无权限"); } } $mobile = $request->mobile; if (empty($mobile)) return $this->failure('请输入手机号'); $user = User::where('mobile', $mobile)->first(); if (empty($user)) return $this->failure("手机号已注销"); if (config('app.env') == 'production') { $today_del_num = DB::table('close_users')->whereDate('deleted_at',today())->count(); if ($today_del_num >= 5){ return $this->failure("今日注销人数暂不能超过5个,联系技术处理"); } } DB::beginTransaction(); $data = $user->getAttributes(); $data['deleted_at'] = date("Y-m-d H:i:s"); DB::table('close_users')->insert($data); if($user->wechat){ DB::table('close_wechats')->insert($user->wechat->getAttributes()); $user->wechat->forceDelete(); } $user->forceDelete(); //增加操作记录 AdminLog::create([ 'path'=> $request->path(), 'method'=>$request->method(), 'user_id'=> auth()->id(), 'param'=> json_encode($request->all()), 'model'=>null, 'model_id'=>0, ]); DB::commit(); return $this->success('ok'); }catch (\Exception $e){ DB::rollBack(); $this->getError($e); return $this->failure($e->getMessage()); } } public function writeOffUserList(Request $request) { try { $operate_ids = [12441,69938,12337,58859]; if (config('app.env') == 'production') { $operate_id = auth()->id(); if (!in_array($operate_id, $operate_ids)) { return $this->failure("无权限"); } } $data = DB::table('close_users')->orderByDesc('deleted_at')->paginate(); return $this->success('ok',$data); }catch (\Exception $e){ return $this->failure($e->getMessage()); } } public function getUserInfoByMobile(Request $request) { try { $mobile = $request->input('mobile'); $user = User::query()->where('mobile', $mobile)->first(); return $this->success('ok',[$user]); }catch (\Exception $e){ return $this->failure($e->getMessage()); } } //用户被投诉记录 public function userComplainLogs(Request $request, User $user) { $logs = $user->complains()->orderByDesc("id")->get(); return $this->success("Ok", $logs); } }