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

8045 lines
351 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

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

<?php
namespace App\Http\Controllers\Admin;
use App\Facades\WechatService;
use App\Jobs\SendEasySms;
use App\Jobs\SendNoticeMessage;
use App\Jobs\SendTemplateMsg;
use App\Models\Audit;
use App\Models\CombineUserLog;
use App\Models\CrmUser;
use App\Models\CrmUserLog;
use App\Models\LoveLink;
use App\Models\Match\Profile;
use App\Models\MEarning;
use App\Models\MyQuestion;
use App\Models\LinkingBlacklist;
use App\Models\NoticeMessage;
use App\Models\RecommendUser;
use App\Models\Server\MatchLog;
use App\Models\Server\SaasNotice;
use App\Models\Server\UserLabelRecode;
use App\Models\TempMember;
use App\Models\Followable;
use App\Jobs\SendSmsBatch;
use App\Models\Activity;
use App\Models\BadWord;
use App\Models\WrongInfoHistories;
use App\Models\TeamLiveAnchor;
use App\Models\ShareImgLog;
use App\Models\Live\Anchor;
use App\Models\TestUser;
use App\Models\CommunityStar;
use App\Models\CloseProfileHistory;
use App\Models\Live\ActivityUser;
use App\Models\Moment;
use App\Models\Rbac\Menu;
use App\Models\PlatformBehavior;
use App\Models\UserPreviewHistory;
use App\Services\CronService;
use App\Services\UserService;
use App\Utils\Str;
use Illuminate\Http\JsonResponse;
use Illuminate\Support\Facades\Cache;
use App\Models\SingleService;
use App\Models\Rbac\RoleUser;
use App\Jobs\SendSpreaderNote;
use App\Facades\QrcodeRectService;
use App\Models\Live\Asset;
use Illuminate\Support\Facades\Redis;
use Intervention\Image\ImageManagerStatic as Image;
use Illuminate\Support\Facades\DB;
use App\Models\Coin;
use App\Models\CoinLog;
use App\Models\InteractLiveLog;
use App\Models\MakerScoreLog;
use App\Models\User;
use App\Models\Linking;
use App\Models\LinkingRequest;
use App\Models\Wechat;
use App\Models\ProfileCourtship;
use App\Models\ProfileMarriage;
use App\Models\Salary;
use App\Models\Order;
use App\Models\PayOrder;
use App\Models\Rank;
use App\Models\RankHistory;
use App\Models\FriendQuestionAnswer;
use App\Models\Notice;
use App\Models\ComplaintHistory;
use App\Models\UserGift;
use App\Models\Gift;
use App\Models\Goods;
use App\Models\VipQuestionAnswer;
use App\Models\VipAnswerResult;
use App\Models\VipQuestion;
use App\Models\VipQuestionOption;
use App\Models\GiftHistory;
use App\Models\ScoreHistory;
use App\Models\Dynamic;
use App\Models\Score;
use App\Models\FeedbackHistory;
use App\Models\Character;
use App\Models\LoveCharacter;
use App\Models\LoveLanguage;
use App\Models\InviteOrder;
use App\Utils\Messenger;
use App\Models\ArticleHistory;
use App\Utils\Http;
use App\Events\NoticeServer;
use Illuminate\Http\Request;
use App\Repositories\Eloquent\SmsRepository as Sms;
use App\Http\Controllers\Controller;
use App\Models\UserGroup;
use App\Models\PositionHistory;
use App\Models\MessageLinkman;
use App\Models\MatchingRate;
use App\Models\FormId;
use App\Models\ChatMessage;
use App\Jobs\SyncScore;
use App\Models\MatchmakerClient;
use App\Models\GoodMatch;
use App\Models\UserProfile;
use App\Models\InviteHistory;
use App\Models\Matchmaker;
use App\Models\SubRank;
use App\Models\UserPreview;
use App\Models\Admin;
use App\Contracts\UserContract;
use App\Exports\ReferrerInviteUsersExport;
use App\Models\ProfilePhoto;
use App\Models\AssistantMessage;
use App\Models\ApproveHistory;
use App\Models\Message;
use Illuminate\Pagination\LengthAwarePaginator;
use App\Models\AddedBonus;
use App\Models\Bonus;
use App\Models\TransferOrder;
use App\Models\PlatformUser;
use App\Models\Platform;
use App\Models\Paas;
use App\Models\BannedHistory;
use App\Models\ServiceClient;
use App\Models\ProfileChangeHistory;
use App\Models\Matching;
use App\Models\Address;
use App\Models\Blacklist;
use App\Imports\SingleProfilesImport;
use App\Models\SingleProfile;
use App\Models\MatchingSingleHistory;
use App\Models\RecommendSingleHistory;
use DateTime;
use App\Jobs\SendAGRecommend;
use App\Exports\FeedbackExport;
use App\Models\Live\Viewer;
use App\Http\Response\ResponseJson;
use App\Jobs\FaceMatchJob;
use App\Models\SystemBlacklist;
use App\Models\CoinWithdrawLog;
use App\Services\IMService;
use App\Services\AliyunService;
use App\Models\CoinWithdrawer;
use App\Models\AreaUser;
use App\Models\ClassArea;
use App\Models\AdminLog;
use App\Models\ImageInfo;
use App\Models\LoveStory;
use App\Models\MerchantAccount;
use App\Models\UserInfo;
use App\Models\WorthChannel;
use App\Models\WorthAccount;
use App\Models\WorthLog;
use App\Models\MerchantInformation;
use App\Models\Server\MEarningAccount;
use App\Models\Server\MerchantFollow;
use App\Models\TouristOrder;
use App\Models\AccessRecord;
use App\Models\ClassAreaSetting;
use App\Models\ClientComment;
use App\Models\Configs;
use App\Models\ErrorPhoto;
use App\Models\Server\IdentityAuthorization;
use App\Models\Server\MerchantUser;
use App\Models\Server\MerchantAccount as MAccount;
use App\Models\UpperWallHistory;
use App\Models\Server\MerchantUserProfile;
ini_set('memory_limit', '1024M');
class UserController extends Controller
{
use ResponseJson;
protected $sms;
protected $userCon;
public function __construct(Sms $sms, UserContract $userCon)
{
$this->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'));
//性别 12
$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'));
// //性别 12
$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 {
//性别 12
$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);
}
}