1897 lines
93 KiB
PHP
1897 lines
93 KiB
PHP
<?php
|
||
|
||
namespace App\Http\Controllers\Admin;
|
||
|
||
use App\Exports\ReferrerInviteUsersExport;
|
||
use App\Models\AppLog;
|
||
use App\Models\CloseProfileHistory;
|
||
use App\Models\CoinExchange;
|
||
use Illuminate\Support\Facades\Cache;
|
||
use App\Models\SignLog;
|
||
use App\Models\TemplateMsgLog;
|
||
use App\Models\Rbac\Menu;
|
||
use App\Models\Rbac\RoleUser;
|
||
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\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\Followable;
|
||
use App\Models\ChatMessage;
|
||
use App\Models\Matchmaker;
|
||
use App\Models\HomeRecommend;
|
||
use App\Models\Announcement;
|
||
use App\Models\Platform;
|
||
use App\Models\Referre;
|
||
use App\Models\ReferreAwardHistory;
|
||
use App\Models\PaasAnnouncement;
|
||
use App\Models\PaasHomeRecommend;
|
||
use App\Models\ApproveHistory;
|
||
use App\Models\FeedbackHistory;
|
||
use App\Contracts\UserContract;
|
||
use App\Models\RefundOrder;
|
||
use Illuminate\Support\Facades\DB;
|
||
use App\Models\ClientComment;
|
||
use App\Exports\FeedbackExport;
|
||
use App\Models\AreaUser;
|
||
use App\Models\Community;
|
||
use App\Models\CommunityActivity;
|
||
use App\Models\Configs;
|
||
use App\Models\ConsultationRecords;
|
||
use App\Models\LabelHistory;
|
||
use App\Models\Live\Anchor;
|
||
use App\Models\Live\Viewer;
|
||
use App\Models\RecommendCommunityActivity;
|
||
use App\Models\UpperWallHistory;
|
||
use Illuminate\Support\Carbon;
|
||
use Illuminate\Support\Facades\Redis;
|
||
|
||
class HomeController extends Controller
|
||
{
|
||
|
||
protected $sms;
|
||
protected $userCon;
|
||
public function __construct(Sms $sms, UserContract $userCon){
|
||
$this->sms = $sms;
|
||
$this->userCon = $userCon;
|
||
}
|
||
|
||
public function dailyStat(Request $request)
|
||
{
|
||
$admin_type = $request->session()->get('admin_type');
|
||
$start_time = $request->input('start_time', date('Y-m-d 00:00:00'));
|
||
$end_time = $request->input('end_time');
|
||
// if (empty($end_time)) {
|
||
// $end_time = date('Y-m-d H:i:s', strtotime('+1 day', strtotime($start_time)));
|
||
// }
|
||
if (empty($start_time) || $start_time == 'undefined') {
|
||
$start_time = date('Y-m-d');
|
||
}
|
||
if (empty($end_time)) {
|
||
$end_time = date('Y-m-d H:i:s');
|
||
}
|
||
// print_r($start_time.'::'.$end_time);die;
|
||
$courtship_count = User::where('type', 'single')->whereBetween('created_at', [$start_time, $end_time]);
|
||
$marriage_count = User::where('type', '<>', 'single')->whereBetween('created_at', [$start_time, $end_time]);
|
||
if ($admin_type == 'worker' || $admin_type == 'matcher') {//红娘或者同工
|
||
$openid = Wechat::where('user_id', auth()->id())->value('openid');
|
||
$courtship_count = $courtship_count->where('from_openid', $openid);
|
||
$marriage_count = $marriage_count->where('from_openid', $openid);
|
||
}elseif ($admin_type == 'admin') {//超级管理员
|
||
// $result = $this->getWeekStat([]);
|
||
//收入
|
||
// $income = PayOrder::whereBetween('created_at', [date('Y-m-d',strtotime('this week Monday',time())), date('Y-m-d H:i:s', time())])->where('pay_status', 'PAID')->sum('cash');
|
||
}elseif ($admin_type == 'paas_admin') {//平台管理员
|
||
|
||
//平台信息
|
||
$paas_obj = $admin_type = $request->session()->get('paas_obj');
|
||
//平台成员
|
||
$paas_user_ids = $this->userCon->paasUserIds($paas_obj->name, 'MAIN');
|
||
$courtship_count = $courtship_count->whereIn('id', $paas_user_ids); $marriage_count = $marriage_count->whereIn('id', $paas_user_ids);
|
||
}
|
||
$courtship_count = $courtship_count->count();
|
||
$marriage_count = $marriage_count->count();
|
||
|
||
//当日进入小程序人数
|
||
$wechat_count = (Wechat::whereBetween('created_at', [$start_time, $end_time])->count())?:0;
|
||
|
||
//当天多少通过分享进入的
|
||
$invite_count = (Wechat::whereBetween('created_at', [$start_time, $end_time])->whereNotNull('from_openid')->count())?:0;
|
||
$week_start_time = date('Y-m-d 00:00:00', strtotime('-2 monday', time()));
|
||
$week_end_time = date('Y-m-d 23:59:59', strtotime('-1 sunday', time()));
|
||
//上周进入小程序人数
|
||
$week_wechat_count = (Wechat::whereBetween('created_at', [$week_start_time, $week_end_time])->count())?:0;
|
||
//上周分享进入人数
|
||
$week_invite_count = (Wechat::whereBetween('created_at', [$week_start_time, $week_end_time])->whereNotNull('from_openid')->count())?:0;
|
||
//上周分享注册人数
|
||
$week_invite_register_count = (User::whereBetween('created_at', [$week_start_time, $week_end_time])->whereNotNull('from_openid')->count())?:0;
|
||
//上周注册人数
|
||
$week_register_count = (User::whereBetween('created_at', [$week_start_time, $week_end_time])->count())?:0;
|
||
//上周认证人数
|
||
$week_approve_count = (User::whereBetween('approve_date', [$week_start_time, $week_end_time])->count())?:0;
|
||
//上周购买超级会员人数
|
||
$week_rank_count = (Order::whereBetween('created_at', [$week_start_time, $week_end_time])->where('type', 'rank')->where('pay_status', 'PAID')->count())?:0;
|
||
//信息分数
|
||
$info_complete_count = (User::where('info_complete_score', '>=', 15)->where('type', 'single')->count())?:0;
|
||
//上周信息大于20分
|
||
$week_register_info_count = (User::whereBetween('created_at', [$week_start_time, $week_end_time])->where('info_complete_score', '>=', 15)->where('type', 'single')->count())?:0;
|
||
$week_rank_cash = (PayOrder::whereHas('order', function($sql){
|
||
$sql->where('type', 'rank');
|
||
})->whereBetween('created_at', [$week_start_time, $week_end_time])->sum('cash'))?:0;
|
||
$week_activity_cash = (PayOrder::whereHas('order', function($sql){
|
||
$sql->where('type', 'activity');
|
||
})->whereBetween('created_at', [$week_start_time, $week_end_time])->sum('cash'))?:0;
|
||
//关闭资料用户
|
||
$hidden_user_count = User::where('hidden_profile', 'ALLSEX')->where('type', 'single')->count();
|
||
//有资料的用户并且没有关闭资料
|
||
$profile_single_count = User::where('type', 'single')->whereHas('profileCourtship', function($sql){
|
||
$sql->where('id', '>', 0);
|
||
})->where('hidden_profile','<>', 'ALLSEX')->count();
|
||
$single_count = User::where('type', 'single')->count();
|
||
//所有单身用户
|
||
return $this->success('ok', compact('courtship_count','marriage_count', 'wechat_count', 'invite_count', 'week_wechat_count', 'week_invite_count', 'week_approve_count', 'week_rank_count', 'week_register_count', 'info_complete_count', 'week_register_info_count', 'week_rank_cash', 'week_activity_cash', 'week_invite_register_count', 'hidden_user_count', 'single_count', 'profile_single_count'));
|
||
}
|
||
|
||
public function monthStat(Request $request)
|
||
{
|
||
$start_time = $request->input('start_time', date('Y-m-01'));
|
||
$end_time = $request->input('end_time', date('Y-m-d H:i:s'));
|
||
|
||
//进入小程序人数
|
||
$wechat_count = (Wechat::whereBetween('created_at', [$start_time, $end_time])->count())?:0;
|
||
$register_count = (User::whereBetween('created_at', [$start_time, $end_time])->count())?:0;
|
||
$invite_register_count = (User::whereBetween('created_at', [$start_time, $end_time])->whereNotNull('from_openid')->count())?:0;
|
||
$approve_count = (User::whereBetween('approve_date', [$start_time, $end_time])->count())?:0;
|
||
$approve_fee = Order::where('type', 'approve')->whereBetween('created_at', [$start_time, $end_time])->where('trade_no', '<>', '123')->sum('price');
|
||
$rank_count = (Order::whereBetween('created_at', [$start_time, $end_time])->where('type', 'rank')->where('pay_status', 'PAID')->count())?:0;
|
||
$rank_fee = (Order::whereBetween('created_at', [$start_time, $end_time])->where('type', 'rank')->where('pay_status', 'PAID')->sum('price'))?:0;
|
||
$qian_xian_count = Order::where('type', 'single_service')->whereIn('type_id', [2,5])->where('pay_status', 'PAID')->whereBetween('created_at', [$start_time, $end_time])->count()?:0;
|
||
$qian_xian_fee = Order::where('type', 'single_service')->whereIn('type_id', [2,5])->where('pay_status', 'PAID')->whereBetween('created_at', [$start_time, $end_time])->sum('price')?:0;
|
||
$tuo_guan_count = Order::where('type', 'single_service')->whereIn('type_id', [3,6])->where('pay_status', 'PAID')->whereBetween('created_at', [$start_time, $end_time])->sum('price')?:0;
|
||
$tuo_guan_fee = Order::where('type', 'single_service')->whereIn('type_id', [3,6])->where('pay_status', 'PAID')->whereBetween('created_at', [$start_time, $end_time])->sum('price')?:0;
|
||
$ag_count = Order::where('type', 'single_service')->whereIn('type_id', [1,4])->where('pay_status', 'PAID')->whereBetween('created_at', [$start_time, $end_time])->count()?:0;
|
||
$ag_fee = Order::where('type', 'single_service')->whereIn('type_id', [1,4])->where('pay_status', 'PAID')->whereBetween('created_at', [$start_time, $end_time])->sum('price')?:0;
|
||
return $this->success('ok', compact('wechat_count', 'register_count', 'invite_register_count', 'approve_count', 'approve_fee', 'rank_count', 'rank_fee', 'qian_xian_count', 'qian_xian_fee', 'tuo_guan_count', 'tuo_guan_fee', 'ag_count', 'ag_fee'));
|
||
}
|
||
|
||
public function infoScoreCount(Request $request)
|
||
{
|
||
$score = $request->input('score', 23);
|
||
$info_complete_count = (User::where('info_complete_score', '>=', $score)->where('type', 'single')->count())?:0;
|
||
return $this->success('ok', compact('info_complete_count'));
|
||
}
|
||
|
||
public function userCount(Request $request){
|
||
$user_id = auth()->id();
|
||
//是否是推广团队
|
||
// $key = 'user_count'.$user_id; //缓存键
|
||
$start_time = $request->start_time ?: '2015-01-01 00:00:00';
|
||
$end_time = $request->end_time ?: date('Y-m-d H:i:s');
|
||
// if ($request->start_time || $request->end_time){ //有搜索条件 走数据库
|
||
if ($start_time){ //有搜索条件 走数据库
|
||
$all = User::whereBetween('created_at', [$start_time, $end_time]);
|
||
$is_approved = User::whereBetween('created_at', [$start_time, $end_time])->where('is_approved', 1)->where('hidden_profile', 'NONE');
|
||
$hidden_profile = User::whereBetween('created_at', [$start_time, $end_time])->where('hidden_profile', 'ALLSEX');
|
||
$single = User::whereBetween('created_at', [$start_time, $end_time])->where('type', 'single')->where('hidden_profile', 'NONE');
|
||
$marriage = User::whereBetween('created_at', [$start_time, $end_time])->where('type', 'marriage')->where('hidden_profile', 'NONE');
|
||
$bind_mobile = User::whereBetween('created_at', [$start_time, $end_time])->whereNotNull('mobile');
|
||
$no_bind_mobile = User::whereBetween('created_at', [$start_time, $end_time])->whereNull('mobile');
|
||
$user_count['all'] = $all->count();
|
||
$user_count['is_approved'] = $is_approved->count();
|
||
$user_count['hidden_profile'] = $hidden_profile->count();
|
||
$user_count['single'] = $single->count();
|
||
$user_count['marriage'] = $marriage->count();
|
||
$user_count['bind_mobile'] = $bind_mobile->count();
|
||
$user_count['no_bind_mobile'] = $no_bind_mobile->count();
|
||
return $this->success('ok', compact('user_count'));
|
||
}
|
||
// else { //没有搜索条件 有缓存 走缓存
|
||
// if (Cache::has($key)){
|
||
// $data = Cache::get($key);
|
||
// return $this->success('ok',$data);
|
||
// }else{//没有搜索条件 没有缓存 走数据库 并放入缓存
|
||
// $all = User::whereBetween('created_at', [$start_time, $end_time]);
|
||
// $is_approved = User::whereBetween('created_at', [$start_time, $end_time])->where('is_approved', 1)->where('hidden_profile', 'NONE');
|
||
// $hidden_profile = User::whereBetween('created_at', [$start_time, $end_time])->where('hidden_profile', 'ALLSEX');
|
||
// $single = User::whereBetween('created_at', [$start_time, $end_time])->where('type', 'single')->where('hidden_profile', 'NONE');
|
||
// $marriage = User::whereBetween('created_at', [$start_time, $end_time])->where('type', 'marriage')->where('hidden_profile', 'NONE');
|
||
// $bind_mobile = User::whereBetween('created_at', [$start_time, $end_time])->whereNotNull('mobile');
|
||
// $no_bind_mobile = User::whereBetween('created_at', [$start_time, $end_time])->whereNull('mobile');
|
||
// $user_count['all'] = $all->count();
|
||
// $user_count['is_approved'] = $is_approved->count();
|
||
// $user_count['hidden_profile'] = $hidden_profile->count();
|
||
// $user_count['single'] = $single->count();
|
||
// $user_count['marriage'] = $marriage->count();
|
||
// $user_count['bind_mobile'] = $bind_mobile->count();
|
||
// $user_count['no_bind_mobile'] = $no_bind_mobile->count();
|
||
// $data = ['user_count'=>$user_count];
|
||
// Cache::put($key,$data,86400);
|
||
// return $this->success('ok', compact('user_count'));
|
||
// }
|
||
// }
|
||
}
|
||
|
||
//数据统计(固定时间)
|
||
public function statistics(Request $request){
|
||
$yesterday_start_time = date("Y-m-d H:i:s",mktime(0,0,0,date('m'),date('d')-1,date('Y'))); //昨天开始时间
|
||
$yesterday_end_time = date("Y-m-d H:i:s",mktime(0,0,0,date('m'),date('d'),date('Y'))-1); //昨天结束时间
|
||
$last_week_start=date("Y-m-d H:i:s", mktime(0,0,0,date('m'),date('d')-date('w')+1-7,date('Y')));
|
||
$last_week_end=date("Y-m-d H:i:s",mktime(23,59,59,date('m'),date('d')-date('w')+7-7,date('Y')));
|
||
// $last_month_start=date('Y-m-01 00:00:00',strtotime('-1 month'));
|
||
// 上个月第一天
|
||
$last_month_start = new Carbon('first day of last month');
|
||
$last_month_start = $last_month_start->startOfMonth()->toDateTimeString();
|
||
// dd($last_month_start);
|
||
// 上个月最后一天
|
||
// $last_month_end=date("Y-m-d 23:59:59", strtotime(-date('d').'day'));
|
||
$last_month_end = new Carbon('last day of last month');
|
||
$last_month_end =$last_month_end->endOfMonth()->toDateTimeString();
|
||
// dd($last_month_end);
|
||
$next_month_start=date('Y-m-01 00:00:00',strtotime('+1 month'));
|
||
$user_id = auth()->id();
|
||
// dd($last_month_start,$last_month_end,$next_month_start);
|
||
|
||
|
||
$user_count['all_count'] = User::count();
|
||
$info_complete_score = User::where('info_complete_score', '>', 7);
|
||
$yesterday_count = User::whereBetween('created_at', [$yesterday_start_time, $yesterday_end_time]);
|
||
$last_week_order_count = Order::where('pay_status', 'PAID')->whereBetween('created_at', [$last_week_start, $last_week_end]);
|
||
$all_order_count = Order::where('pay_status', 'PAID');
|
||
// dd($last_month_start,$last_month_end);
|
||
$last_month_start = Order::where('pay_status', 'PAID')->whereBetween('created_at', [$last_month_start, $last_month_end]);
|
||
|
||
$price_sum = Order::where('pay_status', 'PAID');
|
||
|
||
//昨天成交订单
|
||
$yesterday_order_count = Order::where('pay_status','PAID')->whereBetween('created_at',[$yesterday_start_time,$yesterday_end_time]);
|
||
//本月销售额
|
||
$this_month_count = Order::where('pay_status','PAID')->whereBetween('created_at',[$last_month_end,$next_month_start]);
|
||
$user_count['info_complete_score'] = $info_complete_score->count();
|
||
$user_count['yesterday_count'] = $yesterday_count->count();
|
||
$user_count['last_week_order_count'] = $last_week_order_count->count();
|
||
$user_count['all_order_count'] = $all_order_count->count();
|
||
$last_month_price_sum = $last_month_start->sum('price');
|
||
$user_count['last_month_price_sum'] = round($last_month_price_sum);
|
||
$price_sum = $price_sum->sum('price');
|
||
$user_count['price_sum'] = round($price_sum);
|
||
$user_count['yesterday_order_count'] = $yesterday_order_count->count();
|
||
$user_count['yesterday_price_count'] = $yesterday_order_count->sum('price');
|
||
$user_count['this_month_count'] = $this_month_count->sum('price');
|
||
return $this->success('ok', compact('user_count'));
|
||
}
|
||
|
||
//每天推送模板记录
|
||
public function dailyRecommendRecord(Request $request){
|
||
if($request->start_time && $request->end_time){
|
||
$start_time = $request->start_time;
|
||
$end_time = $request->end_time;
|
||
//间隔天数
|
||
$between_time = ceil((strtotime($end_time) - strtotime($start_time))/3600/24) + 1;
|
||
for($i=0; $i<$between_time; $i++){
|
||
$date[] = date("Y-m-d 00:00:00",strtotime("+$i day", strtotime($start_time)));
|
||
}
|
||
}
|
||
foreach ($date as $start_time) {
|
||
$end_time = date("Y-m-d 23:59:59",strtotime($start_time));
|
||
$date_arr[] = $start_time;
|
||
|
||
//公众号t推送1人模板
|
||
$official_count = TemplateMsgLog::where('template_id','i1RR-kXNlHwVHgmKz4I9iN72B0tCYZtLNVpf2wG2i70')->where('status',1)->whereBetween('created_at',[$start_time,$end_time])->count();
|
||
$arr['official_count'] = $official_count;
|
||
$officials_count[] = $official_count;
|
||
|
||
//签到模板
|
||
$sign_count = TemplateMsgLog::where('template_id','eM6XgLkFfxjw0iMNtqWmMCM97FXPJH26Je8RSb2tlnU')->where('status',1)->whereBetween('created_at',[$start_time,$end_time])->count();
|
||
$arr['sign_count'] = $sign_count;
|
||
$signs_count[] = $sign_count;
|
||
|
||
//大数据推送模板
|
||
$bigdata_count = TemplateMsgLog::where('template_id','rfbjIvh0a70hUXjw3k8tbc7Ai2Rb_CBS_SNivMspLNE')->where('status',1)->whereBetween('created_at',[$start_time,$end_time])->count();
|
||
$arr['bigdata_count'] = $bigdata_count;
|
||
$bigdatas_count[] = $bigdata_count;
|
||
|
||
//预推荐大数据
|
||
$pre_res = $pre_count = Redis::get('recommend_num_'.date("Y-m-d",strtotime($start_time)))?:0;
|
||
if ($pre_res) {
|
||
$pre_count = json_decode($pre_res)->subscribe_count;
|
||
}
|
||
$arr['pre_count'] = $pre_count;
|
||
$pre_data_count[] = $pre_count;
|
||
}
|
||
|
||
return $this->success('ok',compact('date_arr','officials_count','signs_count','bigdatas_count', 'pre_data_count'));
|
||
}
|
||
public function ageAndSexCount(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();
|
||
$platfroms = "'".implode("','", $platfroms)."'";
|
||
|
||
$start_time = $request->start_time ?: '2015-01-01 00:00:00';
|
||
$end_time = $request->end_time ?: date('Y-m-d H:i:s');
|
||
// if($is_promote){
|
||
// $user_count['age_group'] = DB::select("SELECT age, count( * ) AS count FROM
|
||
// (
|
||
// SELECT
|
||
// CASE
|
||
// WHEN age <= 20 THEN '20'
|
||
// WHEN age <= 30 AND age >= 21 THEN '21-30'
|
||
// WHEN age <= 40 AND age >= 31 THEN '31-40'
|
||
// WHEN age <= 50 AND age >= 41 THEN '41-50'
|
||
// WHEN age <= 60 AND age >= 51 THEN '51-60'
|
||
// WHEN age >= 61 THEN '61'
|
||
// END AS age
|
||
// FROM
|
||
// `ufutx_users` where created_at between '{$start_time}' and '{$end_time}' and from_platform IN ({$platfroms})
|
||
// ) AS a GROUP BY age");
|
||
// }else{
|
||
$user_count['age_group'] = DB::select("SELECT age, count( * ) AS count FROM
|
||
(
|
||
SELECT
|
||
CASE
|
||
WHEN age <= 20 THEN '20'
|
||
WHEN age <= 30 AND age >= 21 THEN '21-30'
|
||
WHEN age <= 40 AND age >= 31 THEN '31-40'
|
||
WHEN age <= 50 AND age >= 41 THEN '41-50'
|
||
WHEN age <= 60 AND age >= 51 THEN '51-60'
|
||
WHEN age >= 61 THEN '61'
|
||
END AS age
|
||
FROM
|
||
`ufutx_profile_courtships` where created_at between '{$start_time}' and '{$end_time}'
|
||
) AS a GROUP BY age");
|
||
// }
|
||
|
||
|
||
// if($is_promote){
|
||
// // 年龄下的性别分布
|
||
// $age_sex[20] = DB::select("select count(id) as count,sex from ufutx_profile_courtships where age < 21 and created_at between '{$start_time}' and '{$end_time}' and from_platform IN ({$platfroms}) group by sex ");
|
||
// $age_sex['21-30'] = DB::select("select count(id) as count,sex from ufutx_profile_courtships where age between 21 and 30 and created_at between '{$start_time}' and '{$end_time}' and from_platform IN ({$platfroms}) group by sex ");
|
||
// $age_sex['31-40'] = DB::select("select count(id) as count,sex from ufutx_profile_courtships where age between 31 and 40 and created_at between '{$start_time}' and '{$end_time}' and from_platform IN ({$platfroms}) group by sex ");
|
||
// $age_sex['41-50'] = DB::select("select count(id) as count,sex from ufutx_profile_courtships where age between 41 and 50 and created_at between '{$start_time}' and '{$end_time}' and from_platform IN ({$platfroms}) group by sex ");
|
||
// $age_sex['51-60'] = DB::select("select count(id) as count,sex from ufutx_profile_courtships where age between 51 and 60 and created_at between '{$start_time}' and '{$end_time}' and from_platform IN ({$platfroms}) group by sex ");
|
||
// $age_sex[61] = DB::select("select count(id) as count,sex from ufutx_profile_courtships where age > 60 and created_at between '{$start_time}' and '{$end_time}' and from_platform IN ({$platfroms}) group by sex ");
|
||
// $sex_group = DB::select("select count(id) as count,sex from ufutx_profile_courtships where created_at between'{$start_time}' and '{$end_time}' and from_platform IN ({$platfroms}) group by sex");
|
||
// }else{
|
||
// 年龄下的性别分布
|
||
$age_sex[20] = DB::select("select count(id) as count,sex from ufutx_profile_courtships where age < 21 and created_at between '{$start_time}' and '{$end_time}' group by sex ");
|
||
$age_sex['21-30'] = DB::select("select count(id) as count,sex from ufutx_profile_courtships where age between 21 and 30 and created_at between '{$start_time}' and '{$end_time}' group by sex ");
|
||
$age_sex['31-40'] = DB::select("select count(id) as count,sex from ufutx_profile_courtships where age between 31 and 40 and created_at between '{$start_time}' and '{$end_time}' group by sex ");
|
||
$age_sex['41-50'] = DB::select("select count(id) as count,sex from ufutx_profile_courtships where age between 41 and 50 and created_at between '{$start_time}' and '{$end_time}' group by sex ");
|
||
$age_sex['51-60'] = DB::select("select count(id) as count,sex from ufutx_profile_courtships where age between 51 and 60 and created_at between '{$start_time}' and '{$end_time}' group by sex ");
|
||
$age_sex[61] = DB::select("select count(id) as count,sex from ufutx_profile_courtships where age > 60 and created_at between '{$start_time}' and '{$end_time}' group by sex ");
|
||
$sex_group = DB::select("select count(id) as count,sex from ufutx_profile_courtships where created_at between'{$start_time}' and '{$end_time}' group by sex ");
|
||
// }
|
||
|
||
//统一key值,方便前端处理
|
||
foreach ($age_sex as &$val){
|
||
$val = array_column($val, 'count', 'sex');
|
||
}
|
||
|
||
$age_sex['other'][0] = ProfileCourtship::query()->where('sex',0)->whereNull('age')->whereNotNull('updated_at')->count();
|
||
$age_sex['other'][1] = ProfileCourtship::query()->where('sex',1)->whereNull('age')->whereNotNull('updated_at')->count();
|
||
$age_sex['other'][2] = ProfileCourtship::query()->where('sex',2)->whereNull('age')->whereNotNull('updated_at')->count();
|
||
|
||
$user_count['age_sex'] = $age_sex;
|
||
$user_count['sex_group'] = array_column($sex_group, 'count', 'sex');
|
||
|
||
return $this->success('ok', compact('user_count'));
|
||
}
|
||
|
||
public function weekStat(Request $request)
|
||
{
|
||
//管理员类型
|
||
$start_time = $request->start_time;
|
||
$end_time = $request->end_time;
|
||
$admin_type = $request->session()->get('admin_type', 'admin');
|
||
// return $this->success('ok', date('Y-m-d',strtotime('this week Monday',time())));
|
||
if ($admin_type == 'worker' || $admin_type == 'matcher') {//红娘或者同工
|
||
$openid = Wechat::where('user_id', auth()->id())->value('openid');
|
||
$result = $this->getweekStat($admin_type, [], $openid);
|
||
//收入
|
||
$income = 0;
|
||
}elseif ($admin_type == 'admin') {//超级管理员
|
||
$result = $this->getWeekStat($admin_type);
|
||
$result['single'] = User::whereBetween('created_at',[$start_time, $end_time])->where('type', 'single')->count();
|
||
$result['marriage'] = User::whereBetween('created_at',[$start_time, $end_time])->where('type', 'marriage')->count();
|
||
|
||
//收入
|
||
$income = PayOrder::whereBetween('created_at', [date('Y-m-d',strtotime('this week Monday',time())), date('Y-m-d H:i:s', time())])->where('pay_status', 'PAID')->sum('cash');
|
||
}elseif ($admin_type == 'paas_admin') {//平台管理员
|
||
//平台信息
|
||
$paas_obj = $request->session()->get('paas_obj');
|
||
//平台成员
|
||
$paas_user_ids = $this->userCon->paasUserIds($paas_obj->name, 'MAIN');
|
||
$result = $this->getWeekStat($admin_type, $paas_user_ids);
|
||
//收入
|
||
$income = PayOrder::whereBetween('created_at', [date('Y-m-d',strtotime('this week Monday',time())), date('Y-m-d H:i:s', time())])->where('pay_status', 'PAID')->whereIn('user_id', $paas_user_ids)->sum('cash');
|
||
}
|
||
$courtship_arr = $result['courtship_arr'];
|
||
$marriage_arr = $result['marriage_arr'];
|
||
$day_arr = $result['day_arr'];
|
||
return $this->success('ok', compact('day_arr', 'courtship_arr','marriage_arr', 'income'));
|
||
}
|
||
|
||
/**
|
||
* 最近七天增长人数
|
||
* @param [type] $user_ids [description]
|
||
* @param [type] $from_openid [description]
|
||
* @return [type] [description]
|
||
*/
|
||
public function getWeekStat($admin_type, $user_ids=[], $from_openid=null)
|
||
{
|
||
$end_time = date('Y-m-d', time());
|
||
$start_time = date('Y-m-d', strtotime('-6 day'));
|
||
|
||
//$end_time = date('Y-m-d', strtotime('2019-07-15'));
|
||
//$start_time = date('Y-m-d', strtotime('2019-06-11'));
|
||
//时间段
|
||
$day_arr = \CommonUtilsService::daliy($start_time, $end_time);
|
||
$courtship_arr = [];
|
||
$marriage_arr = [];
|
||
$income_arr = [];
|
||
for ($i=0; $i < count($day_arr); $i++) {
|
||
$day_start_time = $day_arr[$i];
|
||
if ($i < count($day_arr) - 1) {
|
||
$day_end_time = $day_arr[$i + 1];
|
||
}else{
|
||
$day_end_time = date('Y-m-d', strtotime('+1 day', strtotime($day_start_time)));
|
||
}
|
||
$courtship_count = User::where('type', 'single')->whereBetween('created_at', [$day_start_time, $day_end_time]);
|
||
$marriage_count = User::where('type', '<>', 'single')->whereBetween('created_at', [$day_start_time, $day_end_time]);
|
||
if ($admin_type == 'paas_admin') {
|
||
$courtship_count = $courtship_count->whereIn('id', $user_ids);
|
||
$marriage_count = $marriage_count->whereIn('id', $user_ids);
|
||
}
|
||
if ($from_openid) {
|
||
$courtship_count = $courtship_count->where('from_openid', $from_openid);
|
||
$marriage_count = $marriage_count->where('from_openid', $from_openid);
|
||
}
|
||
$courtship_count = $courtship_count->count();
|
||
$marriage_count = $marriage_count->count();
|
||
$courtship_arr[] = $courtship_count;
|
||
$marriage_arr[] = $marriage_count;
|
||
|
||
}
|
||
return $array = [
|
||
'courtship_arr'=>$courtship_arr,
|
||
'marriage_arr'=>$marriage_arr,
|
||
'day_arr'=>$day_arr
|
||
];
|
||
}
|
||
|
||
|
||
/**
|
||
* 前七周数据
|
||
* 订单金额、活动金额、退认证费金额、邀请注册金额、注册用户数
|
||
* @param Request $request [description]
|
||
* @return [type] [description]
|
||
*/
|
||
public function weeksStat(Request $request)
|
||
{
|
||
$time_arr = [];
|
||
$pay_orders_cash_arr = [];
|
||
$activity_cash_arr =[];
|
||
$approve_refund_cash_arr = [];
|
||
$award_cash_arr = [];
|
||
$user_num_arr = [];
|
||
$i = 0;
|
||
$num = 7;
|
||
while ($num) {
|
||
$unix_start_time = strtotime('-'.$num.' saturday', time());
|
||
//当前时间
|
||
$unix_end_time = $unix_start_time + 7 * 24 * 3600;
|
||
$data = [];
|
||
$start_time = date('Y-m-d', $unix_start_time);
|
||
$end_time = date('Y-m-d', $unix_end_time);
|
||
// $new_data[] = $data;
|
||
//所有订单金额 总和不符
|
||
$pay_orders_cash = PayOrder::where('created_at', '>', $start_time)->where('created_at','<',$end_time)->where('is_hooked', 1)->where('pay_status', 'PAID')->sum('cash');
|
||
$pay_orders_cash_arr[] = $pay_orders_cash;
|
||
//trade_no = 123 是赠送的认证(无真实支付)
|
||
// $pay_orders_cash = Order::where('created_at', '>', $start_time)->where('created_at','<',$end_time)->where('pay_status', 'PAID')->where('trade_no', '<>', '123')->sum('price');
|
||
// $pay_orders_cash_arr[] = $pay_orders_cash;
|
||
//活动金额
|
||
$activity_cash = Order::whereHas('payorder',function ($query) {
|
||
$query->where('is_hooked', 1);
|
||
})->where('created_at', '>', $start_time)->where('created_at','<',$end_time)->where('pay_status', 'PAID')->where('type', 'activity')->sum('price');
|
||
$activity_cash_arr[] = $activity_cash;
|
||
//认证退费
|
||
$approve_refund_cash = RefundOrder::where('created_at', '>', $start_time)->where('created_at','<',$end_time)->where('is_hook', 1)->where('type', 'approve')->sum('refund_fee');
|
||
$approve_refund_cash_arr[] = $approve_refund_cash;
|
||
//VIP金额
|
||
$vip_cash = Order::whereHas('payorder',function ($query) {
|
||
$query->where('is_hooked', 1);
|
||
})->where('created_at', '>', $start_time)->where('created_at','<',$end_time)->where('pay_status', 'PAID')->where('type', 'rank')->sum('price');
|
||
$vip_cash_arr[] = $vip_cash;
|
||
//AG金额
|
||
$ag_cash = Order::whereHas('payorder',function ($query) {
|
||
$query->where('is_hooked', 1);
|
||
})->where('created_at', '>', $start_time)->where('created_at','<',$end_time)->where('pay_status', 'PAID')->where('type', 'single_service')->where('type_id', 1)->sum('price');
|
||
$ag_cash_arr[] = $ag_cash;
|
||
//meet
|
||
$meet_cash = Order::whereHas('payorder',function ($query) {
|
||
$query->where('is_hooked', 1);
|
||
})->where('created_at', '>', $start_time)->where('created_at','<',$end_time)->where('pay_status', 'PAID')->where('type', 'meet')->sum('price');
|
||
$single_service_cash = Order::where('created_at', '>', $start_time)->where('created_at','<',$end_time)->where('pay_status', 'PAID')->where('type', 'single_service')->where('type_id','<>', 1)->sum('price');
|
||
//单身金额
|
||
$single_cash_arr[] = $single_service_cash+$meet_cash;
|
||
|
||
//认证费
|
||
$approve_cash = Order::whereHas('payorder',function ($query) {
|
||
$query->where('is_hooked', 1);
|
||
})->where('created_at', '>', $start_time)->where('created_at','<',$end_time)->where('pay_status', 'PAID')->where('type', 'approve')->where('trade_no','<>', '123')->sum('price');
|
||
$approve_cash_arr[]= $approve_cash;
|
||
//邀请注册金额
|
||
$award_cash = ReferreAwardHistory::where('created_at', '>', $start_time)->where('created_at','<',$end_time)->where('is_hooked', 1)->sum('amount');
|
||
$award_cash_arr[] = $award_cash;
|
||
//注册用户
|
||
$user_num = User::where('created_at', '>', $start_time)->where('created_at','<',$end_time)->count();
|
||
$user_num_arr[] = $user_num;
|
||
$end_time = $unix_start_time + 6 * 24 * 3600;
|
||
$time['end_time'] = date('Y-m-d', $end_time);
|
||
$time['start_time'] = date('Y-m-d', $unix_start_time);
|
||
$time_arr[] = $time;
|
||
$num--;
|
||
}
|
||
return $this->success('ok', compact('time_arr', 'pay_orders_cash_arr', 'activity_cash_arr', 'approve_refund_cash_arr', 'award_cash_arr', 'user_num_arr', 'vip_cash_arr', 'ag_cash_arr', 'single_cash_arr', 'approve_cash_arr'));
|
||
}
|
||
|
||
|
||
/**
|
||
* 被邀请的用户(来源推荐人)
|
||
* @param Request $request [description]
|
||
* @return [type] [description]
|
||
*/
|
||
public function inviteUserFromUsers(Request $request)
|
||
{
|
||
$result = $this->getDay($request);
|
||
$type = $request->input('type');
|
||
if (empty($type)) {
|
||
$start_time = $request->input('start_time', '2018-1-1');
|
||
$end_time = $request->input('end_time', date('Y-m-d H:i:s'));
|
||
}else{
|
||
$start_time = $result['start_time'];
|
||
$end_time = $result['end_time'];
|
||
}
|
||
//邀请人openid
|
||
$from_openids = User::whereBetween('created_at', [$start_time, $end_time])->whereNotNull('from_openid');
|
||
$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');
|
||
$from_openids = $from_openids->whereIn("id", $paas_user_ids);
|
||
}
|
||
$from_openids = $from_openids->distinct('from_openid')->pluck('from_openid');
|
||
//邀请人微信信息
|
||
$wechats = Wechat::whereIn('openid', $from_openids)->whereNotNull('user_id');
|
||
if ($admin_type == 'paas_admin') {
|
||
$wechats = $wechats->whereIn('user_id', $paas_user_ids);
|
||
}
|
||
$keyword = $request->input('keyword');
|
||
if (!empty($keyword)) {
|
||
$keyword = trim($keyword);
|
||
$wechats = $wechats->whereHas('user', function($sql) use($keyword){
|
||
$sql->where('name', 'like', '%'.$keyword.'%')
|
||
->orWhere('mobile', 'like', '%'.$keyword.'%');
|
||
});
|
||
}
|
||
$wechats = $wechats->paginate();
|
||
foreach ($wechats as $wechat) {
|
||
if (empty($wechat->user_id)) {
|
||
$wechat->invite_count = 0;
|
||
continue;
|
||
}
|
||
$user = User::where('id', $wechat->user_id)->first();
|
||
if (!empty($user)) {
|
||
$wechat->name = $user->name;
|
||
$wechat->circle_avatar = $user->circle_avatar;
|
||
$wechat->mobile = $user->mobile;
|
||
$wechat->sex = $user->sex;
|
||
}
|
||
$invite_count = User::whereBetween('created_at', [$start_time, $end_time])->where('from_openid', $wechat->openid)->count();
|
||
$wechat->invite_count = $invite_count;
|
||
}
|
||
return $this->success('ok', $wechats);
|
||
}
|
||
|
||
/**
|
||
* 所有推荐平台列表
|
||
* @param Request $request [description]
|
||
* @return [type] [description]
|
||
*/
|
||
public function inviteUserFromPlatforms(Request $request)
|
||
{
|
||
//开始与结束时间
|
||
$start_time = $request->input('start_time');
|
||
$end_time = $request->input('end_time');
|
||
if (empty($start_time)) {
|
||
$start_time = '2018-1-1';
|
||
}
|
||
if (empty($end_time)) {
|
||
$end_time = date('Y-m-d H:i:s');
|
||
}
|
||
//渠道列表
|
||
$platforms = User::whereBetween('created_at', [$start_time, $end_time])->whereNotNUll('from_platform')->distinct('from_platform')->pluck('from_platform');
|
||
$platforms = Platform::whereIn('app_id', $platforms);
|
||
$admin_type = $request->session()->get('admin_type');
|
||
if ($admin_type == 'paas_admin') {
|
||
$paas_obj = $request->session()->get('paas_obj');
|
||
$paas_platforms = Platform::where('paas_id', $paas_obj->id)->pluck('app_id');
|
||
$platforms = $platforms->whereIn('app_id', $paas_platforms);
|
||
}
|
||
$keyword = $request->input('keyword');
|
||
if (!empty($keyword)) {
|
||
$keyword = trim($keyword);
|
||
$platforms = $platforms->where(function($sql) use($keyword){
|
||
$sql->where('name', 'like', '%'.$keyword.'%')
|
||
->orWhere('app_id', 'like', '%'.$keyword.'%');
|
||
});
|
||
}
|
||
$platforms = $platforms->paginate();
|
||
foreach ($platforms as $platform) {
|
||
$invite_count = User::whereBetween('created_at', [$start_time, $end_time])->where('from_platform', $platform->app_id)->count();
|
||
$platform->invite_count = $invite_count;
|
||
$platform->app_id = $platform->name?$platform->name:$platform->app_id;
|
||
}
|
||
// $start_time = $request->input('start_time');
|
||
// $end_time = $request->input('end_time');
|
||
// if (empty($start_time)) {
|
||
// $start_time = '2018-1-1';
|
||
// }
|
||
// if (empty($end_time)) {
|
||
// $end_time = date('Y-m-d');
|
||
// }
|
||
|
||
// $invite_count_query = DB::raw("(select count(*) from `ufutx_users` where `ufutx_platforms`.`app_id` = `ufutx_users`.`from_platform` and `ufutx_users`.`deleted_at` is null and `ufutx_users`.`created_at` >= '$start_time' and `ufutx_users`.`created_at` <= '$end_time') as `invite_count`");
|
||
|
||
// $platforms = \DB::table('platforms')->leftJoin('users','users.from_platform','=','platforms.app_id')->select('platforms.id', 'platforms.app_id', 'platforms.name', $invite_count_query);
|
||
// $keyword = $request->input('keyword');
|
||
// if (!empty($keyword)) {
|
||
// $keyword = trim($keyword);
|
||
// $platforms->where('platforms.name', 'like', '%'.$keyword.'%');
|
||
// }
|
||
// $admin_type = $request->session()->get('admin_type');
|
||
// if ($admin_type == 'paas_admin') {
|
||
// $paas_obj = $request->session()->get('paas_obj');
|
||
// $paas_platforms = Platform::where('paas_id', $paas_obj->id)->pluck('app_id');
|
||
// $platforms = $platforms->whereIn('platforms.app_id', $paas_platforms);
|
||
// }
|
||
|
||
// $platforms = $platforms->orderBy('invite_count', 'desc')->groupBy('platforms.id')->paginate();
|
||
if ($request->input('debug')) {
|
||
return view('welcome');
|
||
}
|
||
return $this->success('ok', $platforms);
|
||
}
|
||
|
||
|
||
public function getDay($request)
|
||
{
|
||
$now_time = time();
|
||
$end_time = date('Y-m-d H:i:s', $now_time);
|
||
$type = $request->input('type');
|
||
if ($type == 'day') {
|
||
$start_time = date('Y-m-d 0:0:0', $now_time);
|
||
}elseif ($type == 'week') {
|
||
$start_time = date('Y-m-d', ($now_time - ((date('w') == 0 ? 7 : date('w')) - 1) * 24 * 3600));
|
||
}elseif ($type == 'month') {
|
||
$start_time = date('Y-m-1 0:0:0', $now_time);
|
||
}else {
|
||
$start_time = '1970-1-1';
|
||
}
|
||
return $array = ['start_time'=>$start_time, 'end_time'=>$end_time];
|
||
}
|
||
|
||
|
||
/**
|
||
* 征婚推荐列表
|
||
* @param Request $request [description]
|
||
* @return [type] [description]
|
||
*/
|
||
public function homeRecommends(Request $request)
|
||
{
|
||
$recommends = HomeRecommend::with('user')->where('status', 1)->orderBy('id', 'desc');
|
||
$admin_type = $request->session()->get('admin_type');
|
||
if ($admin_type == 'paas_admin') {
|
||
$paas_obj = $request->session()->get('paas_obj');
|
||
$paas_recommend_ids = PaasHomeRecommend::where('paas_id', $paas_obj->id)->pluck('recommend_id')->toArray();
|
||
$recommends = $recommends->whereIn('id', $paas_recommend_ids);
|
||
}
|
||
$recommends = $recommends->get();
|
||
return $this->success('ok', $recommends);
|
||
}
|
||
|
||
/**
|
||
* 推荐人列表
|
||
* @param Request $request [description]
|
||
* @return [type] [description]
|
||
*/
|
||
public function homeRecommendsV2(Request $request)
|
||
{
|
||
$recommends = HomeRecommend::with('user')->orderBy('id', 'desc');
|
||
$status = $request->input('status', 0);
|
||
if($status != 2){
|
||
$recommends = $recommends->where('status', $status);
|
||
}
|
||
|
||
$keyword = $request->input('keyword');
|
||
if ($keyword) {
|
||
$keyword = trim($keyword);
|
||
$recommends = $recommends->whereHas('user', function($sql) use($keyword){
|
||
$sql->where('name', 'like', '%'.$keyword.'%');
|
||
});
|
||
}
|
||
$recommends = $recommends->paginate();
|
||
foreach ($recommends as $recommend) {
|
||
$recommend->photo = $recommend->user->photo;
|
||
$recommend->user->rank_name = $recommend->user->rankName();
|
||
}
|
||
return $this->success('ok', $recommends);
|
||
}
|
||
|
||
/**
|
||
* 审核首页推荐
|
||
* @param Request $request [description]
|
||
* @param HomeRecommend $recommend [description]
|
||
* @return [type] [description]
|
||
*/
|
||
public function checkHomeRecommend(Request $request, HomeRecommend $recommend)
|
||
{
|
||
$status = $request->input('status');
|
||
if (empty($status)) {
|
||
return $this->failure('请选择审核结果');
|
||
}
|
||
//修改状态
|
||
$recommend->update(['status'=>$status]);
|
||
//助手消息
|
||
$user_id = $recommend->user_id;
|
||
if ($status == 1) {//通过
|
||
$content = '你申请的首页推荐已通过审核!';
|
||
}elseif ($status == -1) {//不通过
|
||
$content = $request->input('content');
|
||
if (empty($content)) {
|
||
return $this->failure('请输入拒绝理由');
|
||
}
|
||
//删除推荐
|
||
$recommend->delete();
|
||
}
|
||
//助手消息
|
||
$this->userCon->sendAssistantMessage(compact('user_id'), $content);
|
||
return $this->success('ok');
|
||
}
|
||
|
||
/**
|
||
* 添加征婚推荐
|
||
* @param Request $request [description]
|
||
* @param [type] $user_id [description]
|
||
*/
|
||
public function addHomeRecommend(Request $request)
|
||
{
|
||
$user_id = $request->input('user_id');
|
||
if (empty($user_id)) {
|
||
return $this->failure('请选择用户');
|
||
}
|
||
$user = User::find($user_id);
|
||
if (empty($user)) {
|
||
return $this->failure('用户不存在');
|
||
}
|
||
$photo = $request->input('photo');
|
||
if (empty($photo)) {
|
||
return $this->failure('请上传照片');
|
||
}
|
||
$recommend = HomeRecommend::create([
|
||
'user_id'=>$user_id,
|
||
'photo'=>$photo,
|
||
'status'=>1,
|
||
]);
|
||
$admin_type = $request->session()->get('admin_type');
|
||
if ($admin_type == 'paas_admin') {
|
||
$paas_obj = $request->session()->get('paas_obj');
|
||
PaasHomeRecommend::create([
|
||
'paas_id'=>$paas_obj->id,
|
||
'recommend_id'=>$recommend->id,
|
||
]);
|
||
}
|
||
return $this->success('ok', $recommend);
|
||
}
|
||
|
||
/**
|
||
* 修改征婚推荐人
|
||
* @param Request $request [description]
|
||
* @param [type] $id [description]
|
||
* @return [type] [description]
|
||
*/
|
||
public function updateHomeRecommend(Request $request, $id)
|
||
{
|
||
$recommend = HomeRecommend::find($id);
|
||
if ($request->has('user_id') && $request->user_id != $recommend->user_id) {
|
||
$recommend->user_id = $request->user_id;
|
||
}
|
||
if ($request->has('photo') && $request->photo != $recommend->photo) {
|
||
$recommend->photo = $request->photo;
|
||
}
|
||
if ($request->has('status') && $request->status != $recommend->status) {
|
||
$recommend->status = $request->status;
|
||
}
|
||
$recommend->save();
|
||
return $this->success('ok', $recommend);
|
||
}
|
||
|
||
/**
|
||
* 刪除征婚推荐人
|
||
* @param Request $request [description]
|
||
* @param [type] $id [description]
|
||
* @return [type] [description]
|
||
*/
|
||
public function deleteHomeRecommend(Request $request, $id)
|
||
{
|
||
HomeRecommend::where('id', $id)->delete();
|
||
return $this->success('ok');
|
||
}
|
||
|
||
/**
|
||
* 征婚推荐人详情
|
||
* @param Request $request [description]
|
||
* @param [type] $id [description]
|
||
* @return [type] [description]
|
||
*/
|
||
public function homeRecommend(Request $request, $id)
|
||
{
|
||
$recommend = HomeRecommend::find($id);
|
||
return $this->success('ok', $recommend);
|
||
}
|
||
|
||
/**
|
||
* 公告列表
|
||
* @param Request $request [description]
|
||
* @return [type] [description]
|
||
*/
|
||
public function announcements(Request $request)
|
||
{
|
||
$announcements = Announcement::orderBy('id', 'desc');
|
||
$admin_type = $request->session()->get('admin_type');
|
||
if ($admin_type == 'paas_admin') {
|
||
$paas_obj = $request->session()->get('paas_obj');
|
||
$paas_announcement_ids = PaasAnnouncement::where('paas_id', $paas_obj->id)->pluck('announcement_id')->toArray();
|
||
$announcements = $announcements->whereIn('id', $paas_announcement_ids);
|
||
}
|
||
$announcements = $announcements->get();
|
||
return $this->success('ok', $announcements);
|
||
}
|
||
|
||
public function announcement(Request $request, $announcement_id)
|
||
{
|
||
$announcement = Announcement::findOrFail($announcement_id);
|
||
return $this->success('ok', $announcement);
|
||
}
|
||
|
||
public function AddAnnouncement(Request $request)
|
||
{
|
||
//删除已有的
|
||
Announcement::where('id', '>', 0)->delete();
|
||
//创建最新的
|
||
$announcement = $request->input('announcement');
|
||
if ($announcement && count($announcement)) {
|
||
foreach ($announcement as $an) {
|
||
$announcement = Announcement::create([
|
||
'title'=>$an['title'],
|
||
'path'=>$an['path'],
|
||
'type'=>$an['type'],
|
||
'pic'=>isset($an['pic'])?$an['pic']:null,
|
||
'start_time'=>$an['start_time'],
|
||
'end_time'=>$an['end_time'],
|
||
]);
|
||
$admin_type = $request->session()->get('admin_type');
|
||
if ($admin_type == 'paas_admin') {
|
||
$paas_obj = $request->session()->get('paas_obj');
|
||
PaasAnnouncement::create([
|
||
'paas_id'=>$paas_obj->id,
|
||
'announcement_id'=>$announcement->id,
|
||
]);
|
||
}
|
||
}
|
||
}
|
||
|
||
// $title = $request->input('title');
|
||
// if (empty($title)) {
|
||
// return $this->failure('请输入标题');
|
||
// }
|
||
// $path = $request->input('path');
|
||
// if (empty($path)) {
|
||
// return $this->failure('请输入地址链接');
|
||
// }
|
||
// $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('请选择结束时间时间');
|
||
// }
|
||
// $announcement = Announcement::create([
|
||
// 'title'=>$title,
|
||
// 'path'=>$path,
|
||
// 'type'=>$type,
|
||
// 'start_time'=>$start_time,
|
||
// 'end_time'=>$end_time
|
||
// ]);
|
||
return $this->success('ok');
|
||
}
|
||
|
||
public function updateAnnouncement(Request $request, $announcement_id)
|
||
{
|
||
$announcement = Announcement::findOrFail($announcement_id);
|
||
if ($request->input('title') != $announcement->title) {
|
||
$announcement->title = $request->title;
|
||
}
|
||
if ($request->input('path') != $announcement->path) {
|
||
$announcement->path = $request->path;
|
||
}
|
||
if ($request->input('type') != $announcement->type) {
|
||
$announcement->type = $request->type;
|
||
}
|
||
if ($request->input('start_time') != $announcement->start_time) {
|
||
$announcement->start_time = $request->start_time;
|
||
}
|
||
if ($request->input('start_time') != $announcement->start_time) {
|
||
$announcement->start_time = $request->start_time;
|
||
}
|
||
$announcement->save();
|
||
return $this->success('ok', $announcement);
|
||
}
|
||
|
||
public function deleteAnnouncement(Request $request, $announcement_id)
|
||
{
|
||
$announcement = Announcement::findOrFail($announcement_id);
|
||
$announcement->delete();
|
||
return $this->success('ok');
|
||
}
|
||
|
||
/**
|
||
* 设置福恋推荐人推荐人
|
||
* 推荐人同时成为红娘
|
||
* 推荐人推荐注册成功获得一元现金奖励
|
||
* 推荐人推荐实名认证成功获得二元现金奖励
|
||
* @param Request $request [description]
|
||
* @param [type] $user_id [description]
|
||
*/
|
||
public function setReferre(Request $request, $user_id)
|
||
{
|
||
$user = User::findOrFail($user_id);
|
||
//设置成为推荐人
|
||
$referre = Referre::firstOrCreate([
|
||
'user_id'=>$user_id,
|
||
]);
|
||
//设置红娘
|
||
$maker = Matchmaker::firstOrCreate([
|
||
'user_id'=>$user_id,
|
||
]);
|
||
$maker->status = 1;
|
||
$maker->save();
|
||
return $this->success('ok');
|
||
}
|
||
|
||
/**
|
||
* 福恋使者列表
|
||
* 显示推荐人数和总奖励
|
||
* @param Request $request [description]
|
||
* @return [type] [description]
|
||
*/
|
||
public function referres(Request $request)
|
||
{
|
||
$start_time = $request->input("start_time");
|
||
$end_time = $request->input('end_time');
|
||
$referres = Referre::orderBy('num', 'desc')->orderBy('id', 'desc');
|
||
$keyword = $request->input('keyword');
|
||
if (!empty($keyword)) {
|
||
$keyword = trim($keyword);
|
||
$referres = $referres->whereHas('user', function($sql) use($keyword){
|
||
$sql->where('name', 'like', '%'.$keyword.'%');
|
||
});
|
||
}
|
||
$referres = $referres->paginate();
|
||
foreach ($referres as $referre) {
|
||
$user = User::where('id', $referre->user_id)->select('id', 'name', 'circle_avatar')->first();
|
||
if (empty($user)) {
|
||
continue;
|
||
}
|
||
$referre->name = $user->name;
|
||
$referre->circle_avatar = $user->circle_avatar;
|
||
if ($start_time && $end_time) {
|
||
$amount = ReferreAwardHistory::where('user_id', $user->id)->where('is_hooked', 1)->where('created_at','>=', $start_time)->where('created_at', '<', $end_time)->sum('amount');
|
||
$num = ReferreAwardHistory::where('user_id', $user->id)->where('type', 'register')->where('is_hooked', 1)->where('created_at','>=', $start_time)->where('created_at', '<', $end_time)->count();
|
||
$referre->num = $num;
|
||
}else{
|
||
$amount = ReferreAwardHistory::where('user_id', $user->id)->where('is_hooked', 1)->sum('amount');
|
||
}
|
||
$referre->amount = $amount?$amount:0.00;
|
||
|
||
}
|
||
return $this->success('ok', $referres);
|
||
}
|
||
|
||
/**
|
||
* 修改福恋使者
|
||
*/
|
||
public function updateReferre(Request $request, Referre $referre)
|
||
{
|
||
if ($request->input('register_amount') && $referre->register_amount != $request->register_amount && $request->register_amount < 10) {
|
||
$referre->register_amount = $request->register_amount;
|
||
}
|
||
if ($request->input('approve_amount') && $referre->approve_amount != $request->approve_amount && $request->approve_amount < 10) {
|
||
$referre->approve_amount = $request->approve_amount;
|
||
}
|
||
$referre->save();
|
||
return $this->success('ok', $referre);
|
||
}
|
||
|
||
/**
|
||
* 新增福恋使者人数
|
||
* @param Request $request [description]
|
||
* @return [type] [description]
|
||
*/
|
||
public function newReferreNum(Request $request, Referre $referre)
|
||
{
|
||
$start_time = $request->input("start_time", date('Y-m-d'));
|
||
$end_time = $request->input('end_time', date('Y-m-d H:i:s'));
|
||
if (empty($start_time) || empty($end_time)) {
|
||
$referre_count = $referre->count();
|
||
}else{
|
||
$referre_count = $referre->where('created_at', '>=', $start_time)->where('created_at', '<', $end_time)->count();
|
||
}
|
||
return $this->success('ok', compact('referre_count'));
|
||
|
||
}
|
||
|
||
// public function
|
||
|
||
/**
|
||
* 推荐人推荐奖励记录
|
||
* @param Request $request [description]
|
||
* @param [type] $user_id [description]
|
||
* @return [type] [description]
|
||
*/
|
||
public function referreAwardHistories(Request $request, $user_id)
|
||
{
|
||
$histories = ReferreAwardHistory::where('user_id', $user_id);
|
||
$keyword = $request->input('keyword');
|
||
if ($keyword) {
|
||
$keyword = trim($keyword);
|
||
$histories = $histories->whereHas("otherUser", function($sql) use($keyword){
|
||
$sql->where('name','like', '%'.$keyword.'%')
|
||
->orWhere('mobile', 'like', '%'.$keyword.'%');
|
||
});
|
||
}
|
||
$histories = $histories->where('is_hooked', 1)->orderBy('id', 'desc')->paginate();
|
||
foreach ($histories as $history) {
|
||
$user = User::where('id', $history->user_id)->select('id', 'name', 'circle_avatar')->first();
|
||
if (empty($user)) {
|
||
continue;
|
||
}
|
||
$history->name = $user->name;
|
||
$history->circle_avatar = $user->circle_avatar;
|
||
$other_user = User::where('id', $history->other_user_id)->select('id', 'name', 'circle_avatar')->first();
|
||
if (empty($other_user)) {
|
||
continue;
|
||
}
|
||
$history->other_user_name = $other_user->name;
|
||
$history->other_user_circle_avatar = $other_user->circle_avatar;
|
||
}
|
||
return $this->success('ok', $histories);
|
||
}
|
||
|
||
/**
|
||
* 删除用户推荐
|
||
* @param Referre $referre [description]
|
||
* @return [type] [description]
|
||
*/
|
||
public function deleteReferre(Referre $referre)
|
||
{
|
||
$referre->delete();
|
||
return $this->success('ok');
|
||
}
|
||
|
||
/**
|
||
* 提示消息数
|
||
* @param Request $request [description]
|
||
* @param ApproveHistory $approveHistory [description]
|
||
* @param User $user [description]
|
||
* @param FeedbackHistory $feedback [description]
|
||
* @param ComplaintHistory $complaint [description]
|
||
* @return [type] [description]
|
||
*/
|
||
public function notices(Request $request, ApproveHistory $approveHistory, User $user, FeedbackHistory $feedback, ComplaintHistory $complaint)
|
||
{
|
||
$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');
|
||
//未审核实名认证申请
|
||
$approve_count = $approveHistory->whereIn('user_id', $paas_user_ids)->where('type', 'name')->where('status', 0)->count();
|
||
//未审核头像
|
||
$photo_count = $user->whereIn('id', $paas_user_ids)->whereNotNull('photo')->where('is_photo_audited', 0)->count();
|
||
//反馈
|
||
$feedback_count = $feedback->whereIn('user_id', $paas_user_ids)->whereHas('user', function($sql){
|
||
$sql->where('id', '>', 0);
|
||
})->where('status', 0)->count();
|
||
//投诉
|
||
$complaint_count = $complaint->whereIn('user_id', $paas_user_ids)->where('status', 0)->count();
|
||
// 获取不存在备注的用户数量
|
||
$nocommuser_count = User::where('created_at', '>', '2019-12-01 00:00:00')->whereIn('id', $paas_user_ids)->where('tag_num', 0)->count();
|
||
// 获取不存在备注的订单数量
|
||
$paas_order_ids = Order::where('type', '<>', 'activity')->whereIn('user_id', $paas_user_ids)->pluck('id')->toArray();
|
||
$activity_ids = PaasActivity::where('paas_id', $paas_obj->id)->pluck('activity_id');
|
||
$paas_activity_order_ids = Order::whereIn('type_id', $activity_ids)->where('type', 'activity')->pluck('id')->toArray();
|
||
$new_paas_order_ids = array_merge($paas_order_ids, $paas_activity_order_ids);
|
||
$nocommorder_count = Order::whereIn('id', $new_paas_order_ids)->where('created_at', '>', '2019-12-01 00:00:00')->where('tag_num', 0)->count();
|
||
}else{
|
||
//未审核实名认证申请
|
||
$approve_count = $approveHistory->where('type', 'name')->where('status', 0)->count();
|
||
//未审核头像
|
||
$photo_count = $user->whereNotNull('photo')->where('is_photo_audited', 0)->count();
|
||
//反馈
|
||
$feedback_count = $feedback->whereHas('user', function($sql){
|
||
$sql->where('id', '>', 0);
|
||
})->where('status', 0)->count();
|
||
//投诉
|
||
$complaint_count = $complaint->where('status', 0)->count();
|
||
|
||
|
||
|
||
$admin_user_id = auth()->id();
|
||
//是否是推广团队
|
||
$is_promote = RoleUser::where('user_id', $admin_user_id)->where('role_id', 6)->count();
|
||
$platfroms = Platform::where('paas_id', 33)->pluck('app_id')->toArray();
|
||
// 获取不存在备注的用户数量
|
||
$nocommuser_count = User::where('created_at', '>', '2019-12-01 00:00:00')->where('tag_num', 0);
|
||
if($is_promote){
|
||
$nocommuser_count = $nocommuser_count->whereIn('from_platform', $platfroms);
|
||
}
|
||
$nocommuser_count = $nocommuser_count->count();
|
||
// 获取不存在备注的订单数量
|
||
$nocommorder_count = Order::where('created_at', '>', '2019-12-01 00:00:00')->where('user_id', '!=', 616)->where('pay_status', 'PAID')->where('tag_num', 0);
|
||
if($is_promote){
|
||
$nocommuser_count = $nocommuser_count->whereHas('user', function($query) use ($platfroms){
|
||
$query->whereIn('from_platform', $platfroms);
|
||
});
|
||
}
|
||
$nocommorder_count = $nocommorder_count->count();
|
||
}
|
||
|
||
|
||
return $this->success('ok', compact('approve_count', 'photo_count', 'feedback_count', 'complaint_count', 'nocommuser_count', 'nocommorder_count'));
|
||
}
|
||
/*意见反馈complaintsMGT/suggestionFeedback
|
||
*
|
||
*/
|
||
// public function newNotices(Request $request, ApproveHistory $approveHistory, User $user, FeedbackHistory $feedback, ComplaintHistory $complaint){
|
||
// $path_arr = Menu::whereIn('title', ['人工认证', '用户列表', '订单列表', '反馈列表', '投诉列表', '头像审核', '学历认证'])->pluck('menu_path')->toArray();
|
||
// $admin_user_id = auth()->id();
|
||
// $is_promote = RoleUser::where('user_id', $admin_user_id)->where('role_id', 6)->count();
|
||
// $platfroms = Platform::where('paas_id', 33)->pluck('app_id')->toArray();
|
||
|
||
// $notices = [];
|
||
// //一级菜单是否显示红点用,显示消息的菜单都是固定死的,所以写死
|
||
// $user_count = 0;
|
||
// $order_count = 0;
|
||
// $approve_count = 0;
|
||
// $educate_count = 0;
|
||
// foreach ($path_arr as $path){
|
||
// switch ($path){
|
||
// case '/certificationMGT/realNameCertification': //人工认证
|
||
// $user_ids = $approveHistory->where('type','body')->where('ways',1)->where('status',0)->distinct('user_id')->pluck('user_id');
|
||
// $count = $user->whereIn('id',$user_ids)->whereNotNull('identification_photos')->count();
|
||
// $approve_count += $count;
|
||
// break;
|
||
// case '/certificationMGT/educationCertification': //学历认证
|
||
// $count = $approveHistory->with('user')->whereHas('user')->where('type', 'educate')->where('status', 0)->count();
|
||
// $educate_count += $count;
|
||
// break;
|
||
// case '/userMGT/userList': //用户列表
|
||
// $count = User::where('created_at', '>', '2019-12-01 00:00:00')->where('tag_num', 0);
|
||
// if($is_promote){
|
||
// $count = $count->whereIn('from_platform', $platfroms);
|
||
// }
|
||
// $count = $count->count();
|
||
// $user_count += $count;
|
||
// break;
|
||
// case '/orderMGT/orderList': //订单列表
|
||
// $count = Order::where('created_at', '>', '2019-12-01 00:00:00')->where('user_id', '!=', 616)->where('pay_status', 'PAID')->where('tag_num', 0);
|
||
// if($is_promote){
|
||
// $count = $count->whereHas('user', function($query) use ($platfroms){
|
||
// $query->whereIn('from_platform', $platfroms);
|
||
// });
|
||
// }
|
||
// $count = $count->count();
|
||
// $order_count += $count;
|
||
// break;
|
||
// case '/userMGT/feedbackList': //反馈列表
|
||
// $count = $feedback->whereHas('user',function($sql){
|
||
// $sql->where('id','>',0);
|
||
// })->where('status', 0)->where('type', '!=', 'team')->count();
|
||
// $user_count += $count;
|
||
// break;
|
||
// case '/userMGT/complaintsList': //投诉列表
|
||
// $count = $complaint->whereHas('user')->where('status', 0)->where('type', '!=', 'moment')->count();
|
||
// $user_count += $count;
|
||
// break;
|
||
// case '/certificationMGT/portraitAudit': //头像审核🐕
|
||
// $count = $user->whereNotNull('photo')->where('is_photo_audited', 0)->count();
|
||
// $approve_count += $count;
|
||
// break;
|
||
// default:
|
||
// break;
|
||
// }
|
||
// $arr['count'] = $count;
|
||
// $arr['path'] = $path;
|
||
// $arr['overflowCount'] = 999;
|
||
// $arr['dot'] = false;
|
||
// $arr['offset'] = [-4,10];
|
||
// $notices[] = $arr;
|
||
// }
|
||
// $user_arr = [
|
||
// 'count' => $user_count,
|
||
// 'path' => '/userMGT',
|
||
// 'overflowCount' => 999,
|
||
// 'dot' => $user_count ? true:false,
|
||
// 'offset' =>[0,90],
|
||
// ];
|
||
|
||
// $approve_arr = [
|
||
// 'count' => $approve_count,
|
||
// 'path' => '/certificationMGT',
|
||
// 'overflowCount' => 999,
|
||
// 'dot' => $approve_count ? true: false,
|
||
// 'offset' =>[0,90],
|
||
// ];
|
||
|
||
// $order_arr = [
|
||
// 'count' => $order_count,
|
||
// 'path' => '/orderMGT',
|
||
// 'overflowCount' => 999,
|
||
// 'dot' => $order_count ? true : false,
|
||
// 'offset' =>[0,90],
|
||
// ];
|
||
// array_push($notices, $user_arr, $approve_arr, $order_arr);
|
||
// return $this->success('ok', $notices);
|
||
// }
|
||
|
||
public function newNotices(Request $request, ApproveHistory $approveHistory, User $user, FeedbackHistory $feedback, ComplaintHistory $complaint,Anchor $anchor,ConsultationRecords $record){
|
||
$title = ['人工认证'/*, '用户列表'*/,'意见反馈','用户举报','群聊举报', '订单列表', '反馈列表', '投诉列表', '头像认证',
|
||
'学历认证','入驻管理','咨询管理','友福驿站','置顶推荐','真人认证审核','上墙管理', '关闭资料','兑换商品'];
|
||
$path_arr = Menu::whereIn('title', $title)->pluck('menu_path')->toArray();
|
||
$admin_user_id = auth()->id();
|
||
$is_promote = RoleUser::where('user_id', $admin_user_id)->where('role_id', 6)->count();
|
||
$platfroms = Platform::where('paas_id', 33)->pluck('app_id')->toArray();
|
||
|
||
$notices = [];
|
||
//一级菜单是否显示红点用,显示消息的菜单都是固定死的,所以写死
|
||
$user_count = 0;
|
||
$order_count = 0;
|
||
$approve_count = 0;
|
||
$educate_count = 0;
|
||
$complaint_count = 0;
|
||
$service_count = 0;
|
||
$drainage_count = 0;
|
||
$platform_count = 0;//平台管理
|
||
$top_up_mgt_count = 0;//福币管理
|
||
$count = 0;
|
||
foreach ($path_arr as $path){
|
||
switch ($path){
|
||
case '/CustomerServiceMGT/realNameAuthentication': //人工认证
|
||
$user_ids = $approveHistory->where('type','body')->where('ways',1)->where('status',0)->distinct('user_id')->pluck('user_id');
|
||
$count = $user->whereIn('id',$user_ids)->whereNotNull('identification_photos')->count();
|
||
$approve_count += $count;
|
||
break;
|
||
case '/CustomerServiceMGT/eduAntuentication': //学历认证
|
||
$count = $approveHistory->with('user')->whereHas('user')/*->whereHas('user.profileCourtship',function($sql){
|
||
$sql->whereNotNull('educate_photo');
|
||
})*/->where('type', 'educate')->where('status', 0)->count();
|
||
$educate_count += $count;
|
||
break;
|
||
case '/userMGT/userList': //用户列表
|
||
// $count = User::where('created_at', '>', '2019-12-01 00:00:00')->where('tag_num', 0);
|
||
// if($is_promote){
|
||
// $count = $count->whereIn('from_platform', $platfroms);
|
||
// }
|
||
// $count = $count->count();
|
||
$count = 0;
|
||
$user_count += $count;
|
||
break;
|
||
case '/orderMGT/orderList': //订单列表
|
||
$count = Order::where('created_at', '>', '2019-12-01 00:00:00')->where('user_id', '!=', 616)->where('pay_status', 'PAID')->where('tag_num', 0);
|
||
if($is_promote){
|
||
$count = $count->whereHas('user', function($query) use ($platfroms){
|
||
$query->whereIn('from_platform', $platfroms);
|
||
});
|
||
}
|
||
$count = $count->count();
|
||
$order_count += $count;
|
||
break;
|
||
case '/CustomerServiceMGT/feedbackList': //反馈列表
|
||
$count = $feedback->whereHas('user',function($sql){
|
||
$sql->where('id','>',0);
|
||
})->where('status', 0)->where('type', '!=', 'team')->count();
|
||
$user_count += $count;
|
||
break;
|
||
case '/CustomerServiceMGT/userReport': //投诉列表
|
||
$count = $complaint->whereHas('user')->where('status', 0)->whereNotIn('type', ['moment','bless'])->count();
|
||
$user_count += $count;
|
||
break;
|
||
case '/CustomerServiceMGT/imageAuthentication': //头像审核🐕
|
||
$count = $user->whereNotNull('photo')->where('is_photo_audited', 0)->count();
|
||
// $count = 0;//头像不需要人工审核 写死 0 ;
|
||
$approve_count += $count;
|
||
break;
|
||
case '/CustomerServiceMGT/feedbackList'://意见反馈
|
||
$count = $feedback->whereHas('user',function($sql){
|
||
$sql->where('id','>',0);
|
||
})->where('status', 0)->where('type', '!=', 'team')->count();
|
||
$complaint_count += $count;
|
||
break;
|
||
case '/CustomerServiceMGT/userReport'://用户举报
|
||
$count = $complaint->whereHas('user')->where('status', 0)->whereNotIn('type', ['moment','bless'])->count();
|
||
$complaint_count += $count;
|
||
break;
|
||
|
||
case '/complaintsMGT/groupReport'://群聊举报
|
||
$count = $feedback->whereHas('user',function($sql){
|
||
$sql->where('id','>',0);
|
||
})->where('status', 0)->where('type', 'team')->count();
|
||
$complaint_count += $count;
|
||
break;
|
||
case '/teacherMGT/counselMGT'://咨询管理
|
||
$count = $record->where('pay_status',1)->where('status',0)->count();//未跟进
|
||
$service_count += $count;
|
||
break;
|
||
case '/teacherMGT/enterList'://入驻管理
|
||
$count = $anchor->where('status','0')->count();//未跟进
|
||
$service_count += $count;
|
||
break;
|
||
case '/leadFlowMGT/uLoveStation'://友福驿站
|
||
$count = $complaint->where('type','bless')->where('status',0)->count();
|
||
$drainage_count += $count;
|
||
break;
|
||
case '/CustomerServiceMGT/topRecommend'://置顶推荐
|
||
$count = AreaUser::with('user')->whereHas('user')->where('area_id',1)->where('is_audited',0)->count();
|
||
// $platform_count += $count;
|
||
$platform_count =0;
|
||
break;
|
||
case '/CustomerServiceMGT/officialAccounts'://上墙管理
|
||
$count = UpperWallHistory::with('user')->whereHas('user')->where('status',0)->count();
|
||
$approve_count += $count;
|
||
break;
|
||
case '/CustomerServiceMGT/closeDataList'://关闭资料
|
||
$count = CloseProfileHistory::whereHas('user', function($sql) {
|
||
$sql->where('hidden_profile', 'ALLSEX');
|
||
})->where('status', 0)->count();
|
||
$complaint_count += $count;
|
||
break;
|
||
case '/topUpMGT/exchangeShop'://
|
||
$start_datetime = date('Y-m-d H:i:s', strtotime('-15 days'));
|
||
$where = [['created_at', '>=', $start_datetime]];
|
||
$count = CoinExchange::where($where)->whereNull('shipping_no')->count();
|
||
$top_up_mgt_count += $count;
|
||
break;
|
||
default:
|
||
break;
|
||
}
|
||
$arr['count'] = $count;
|
||
$arr['path'] = $path;
|
||
$arr['overflowCount'] = 999;
|
||
$arr['dot'] = false;
|
||
$arr['offset'] = [-4,10];
|
||
$notices[] = $arr;
|
||
}
|
||
$user_arr = [
|
||
'count' => $user_count,
|
||
'path' => '/userMGT',
|
||
'overflowCount' => 999,
|
||
'dot' => $user_count ? true:false,
|
||
'offset' =>[0,90],
|
||
];
|
||
|
||
$approve_arr = [
|
||
'count' => $approve_count,
|
||
'path' => '/certificationMGT',
|
||
'overflowCount' => 999,
|
||
'dot' => $approve_count ? true: false,
|
||
'offset' =>[0,90],
|
||
];
|
||
|
||
$order_arr = [
|
||
'count' => $order_count,
|
||
'path' => '/orderMGT',
|
||
'overflowCount' => 999,
|
||
'dot' => $order_count ? true : false,
|
||
'offset' =>[0,90],
|
||
];
|
||
|
||
$complaint_arr = [
|
||
'count' => $complaint_count,
|
||
'path' => '/complaintsMGT',
|
||
'overflowCount' => 999,
|
||
'dot' => $complaint_count ? true : false,
|
||
'offset' =>[0,90],
|
||
];
|
||
$service_arr = [
|
||
'count' => $service_count,
|
||
'path' => '/teacherMGT',
|
||
'overflowCount' => 999,
|
||
'dot' => $service_count ? true : false,
|
||
'offset' =>[0,90],
|
||
];
|
||
$drainage_arr = [
|
||
'count' => $drainage_count,
|
||
'path' => '/leadFlowMGT',
|
||
'overflowCount' => 999,
|
||
'dot' => $drainage_count ? true : false,
|
||
'offset' =>[0,90],
|
||
];
|
||
$platform_arr = [
|
||
'count' => $platform_count,
|
||
'path' => '/platformMGT',
|
||
'overflowCount' => 999,
|
||
'dot' => $platform_count ? true : false,
|
||
'offset' =>[0,90],
|
||
];
|
||
$top_arr = [
|
||
'count' => $platform_count,
|
||
'path' => '/recommendedMGT',
|
||
'overflowCount' => 999,
|
||
'dot' => $platform_count ? true : false,
|
||
'offset' =>[0,90],
|
||
];
|
||
$top_up_mgt_arr = [
|
||
'count' => $top_up_mgt_count,
|
||
'path' => '/topUpMGT',
|
||
'overflowCount' => 999,
|
||
'dot' => $top_up_mgt_count ? true : false,
|
||
'offset' =>[0,90],
|
||
];
|
||
array_push($notices, $user_arr, $approve_arr, $order_arr,$complaint_arr,$service_arr,$drainage_arr,$platform_arr,$top_arr,$top_up_mgt_arr);
|
||
return $this->success('ok', $notices);
|
||
}
|
||
|
||
//客服组 消息提醒
|
||
public function lastestNotices(Request $request, User $user,ComplaintHistory $complaint,FeedbackHistory $feedback,ApproveHistory $approveHistory){
|
||
$path_arr = Menu::whereIn('title', ['用户举报','意见反馈','真人认证审核','学历认证','置顶推荐','上墙管理'])->pluck('menu_path')->toArray();
|
||
$notices = [];
|
||
$client_count = 0;
|
||
$count = 0;
|
||
foreach ($path_arr as $key => $path) {
|
||
switch ($path) {
|
||
case '/CustomerServiceMGT/userReport':
|
||
$count = $complaint->whereHas('user')->where('status', 0)->whereNotIn('type', ['moment','bless'])->count();
|
||
$client_count += $count;
|
||
break;
|
||
case '/CustomerServiceMGT/feedbackList':
|
||
$count = $feedback->whereHas('user',function($sql){
|
||
$sql->where('id','>',0);
|
||
})->where('status', 0)->where('type', '!=', 'team')->count();
|
||
$client_count += $count;
|
||
break;
|
||
case '/CustomerServiceMGT/realNameAuthentication':
|
||
$user_ids = $approveHistory->where('type','body')->where('ways',1)->where('status',0)->distinct('user_id')->pluck('user_id');
|
||
$count = $user->whereIn('id',$user_ids)->whereNotNull('identification_photos')->count();
|
||
$client_count += $count;
|
||
break;
|
||
case '/CustomerServiceMGT/eduAntuentication':
|
||
$count = $approveHistory->with('user')->whereHas('user')->where('type', 'educate')->where('status', 0)->count();
|
||
$client_count += $count;
|
||
break;
|
||
case '/CustomerServiceMGT/topRecommend':
|
||
$count = AreaUser::with('user')->whereHas('user')->where('area_id',1)->where('is_audited',0)->count();
|
||
$client_count += $count;
|
||
break;
|
||
case '/CustomerServiceMGT/imageAuthentication':
|
||
$count = $user->where('is_photo_audited',0)->count();
|
||
$client_count += $count;
|
||
break;
|
||
case '/CustomerServiceMGT/officialAccounts':
|
||
// $count = UpperWallHistory::where('status',0)->count();
|
||
$count = 1;
|
||
$client_count += $count;
|
||
break;
|
||
default:
|
||
# code...
|
||
break;
|
||
}
|
||
$arr['count'] = $count;
|
||
$arr['path'] = $path;
|
||
$arr['overflowCount'] = 999;
|
||
$arr['dot'] = false;
|
||
$arr['offset'] = [-4,10];
|
||
$notices[] = $arr;
|
||
}
|
||
$client_arr = [
|
||
'count' => $client_count,
|
||
'path' => '/CustomerServiceMGT',
|
||
'overflowCount' => 999,
|
||
'dot' => $client_count ? true : false,
|
||
'offset' =>[0,90],
|
||
];
|
||
array_push($notices, $client_arr);
|
||
return $this->success('ok', $notices);
|
||
}
|
||
|
||
//过去十二个月的数据
|
||
public function monthCount(Request $request){
|
||
$time = date('Y-m-1 00:00:00');
|
||
$user_id = auth()->id();
|
||
$arr = array();
|
||
for($i = 11;$i >= 0; $i--){
|
||
$month = (new Carbon)->setTimeFromTimeString($time)->addMonths(-$i)->toDateTimeString();
|
||
$month = date('Y-m',strtotime($month));
|
||
$months[]=$month;
|
||
}
|
||
for($j = 0; $j<=11;$j++){
|
||
$start = date('Y-m-01',strtotime($months[$j]));
|
||
if($j == 11) {
|
||
$end = date('Y-m-01',strtotime('+1 month',strtotime($months[11])));
|
||
}else{
|
||
$end = date('Y-m-01',strtotime($months[$j+1]));
|
||
}
|
||
$count[] = User::whereBetween('created_at', [$start,$end])->count();
|
||
}
|
||
return $this->success('ok', compact('months', 'count'));
|
||
}
|
||
|
||
//周小程序、APP、H5用户统计
|
||
public function weekUserStat(Request $request){
|
||
$key = 'week_user_stat';
|
||
if ($request->forget) {
|
||
Cache::forget($key);
|
||
}
|
||
if($request->start_time){ //有搜索条件 走数据库
|
||
$start_time = $request->start_time;
|
||
$date[] = $start_time;
|
||
for($i=1; $i<7; $i++){
|
||
$date[] = date("Y-m-d 00:00:00",strtotime("+$i day", strtotime($start_time)));
|
||
}
|
||
$all_app_count = 0;
|
||
$all_mini_count = 0;
|
||
$all_h5_count = 0;
|
||
foreach ($date as $start_time){
|
||
$end_time = date("Y-m-d 23:59:59",strtotime($start_time));
|
||
$app_user_ids = Db::table('user_register_channels')->where('channel', '!=', 'mini_program')->whereBetween('created_at', [$start_time, $end_time])->pluck('user_id')->toArray();
|
||
$app_count = User::whereIn('id', $app_user_ids)->count();
|
||
$mini_count = User::whereNotIn('id', $app_user_ids)->whereBetween('created_at', [$start_time, $end_time])->count();
|
||
$h5_count = Viewer::whereBetween('created_at', [$start_time, $end_time])->count();
|
||
|
||
$arr['app_count'] = $app_count;
|
||
$arr['mini_count'] = $mini_count;
|
||
$arr['h5_count'] = $h5_count;
|
||
$date_arr[] = $start_time;
|
||
$all_app_count += $app_count;
|
||
$all_mini_count += $mini_count;
|
||
$all_h5_count += $h5_count;
|
||
$count[] = $arr;
|
||
}
|
||
$all_count = [$all_app_count, $all_mini_count, $all_h5_count];
|
||
return $this->success('ok', compact('count', 'date_arr', 'all_count'));
|
||
}else{ //没有搜索条件 有缓存 走缓存
|
||
if (Cache::has($key)){
|
||
$data = Cache::get($key);
|
||
return $this->success('ok',$data);
|
||
}else{//没有搜索条件 没有缓存 放入缓存
|
||
$start_time=date("Y-m-d H:i:s",mktime(0, 0 , 0,date("m"),date("d")-date("w")+1-7,date("Y")));
|
||
$date[] = $start_time;
|
||
for($i=1; $i<7; $i++){
|
||
$date[] = date("Y-m-d 00:00:00",strtotime("+$i day", strtotime($start_time)));
|
||
}
|
||
$all_app_count = 0;
|
||
$all_mini_count = 0;
|
||
$all_h5_count = 0;
|
||
foreach ($date as $start_time){
|
||
$end_time = date("Y-m-d 23:59:59",strtotime($start_time));
|
||
$app_user_ids = Db::table('user_register_channels')->where('channel', '!=', 'mini_program')->whereBetween('created_at', [$start_time, $end_time])->pluck('user_id')->toArray();
|
||
$app_count = User::whereIn('id', $app_user_ids)->count();
|
||
$mini_count = User::whereNotIn('id', $app_user_ids)->whereBetween('created_at', [$start_time, $end_time])->count();
|
||
$h5_count = Viewer::whereBetween('created_at', [$start_time, $end_time])->count();
|
||
|
||
$arr['app_count'] = $app_count;
|
||
$arr['mini_count'] = $mini_count;
|
||
$arr['h5_count'] = $h5_count;
|
||
$date_arr[] = $start_time;
|
||
$all_app_count += $app_count;
|
||
$all_mini_count += $mini_count;
|
||
$all_h5_count += $h5_count;
|
||
$count[] = $arr;
|
||
}
|
||
$all_count = [$all_app_count, $all_mini_count, $all_h5_count];
|
||
$data = ['count'=>$count,'date_arr'=>$date_arr,'all_count'=>$all_count];
|
||
Cache::put($key,$data,86400);
|
||
return $this->success('ok', compact('count', 'date_arr', 'all_count'));
|
||
}
|
||
|
||
|
||
}
|
||
|
||
}
|
||
|
||
//服务器报错日志
|
||
public function errorLogs(Request $request){
|
||
$log = DB::table('error_logs')->orderBy('id', 'desc');
|
||
if(is_numeric($request->status)){
|
||
$log = $log->where('status', $request->status);
|
||
}
|
||
if(is_numeric($request->count)){
|
||
$log = $log->where('count', '>=',$request->status);
|
||
}
|
||
if($request->keyword){
|
||
$log = $log->where('message', 'like', '%'.$request->keyword.'%');
|
||
}
|
||
$log = $log->paginate();
|
||
return $this->success('ok', $log);
|
||
}
|
||
|
||
//处理服务器错误
|
||
public function errorUpdate(Request $request, $log_id){
|
||
$status = $request->input('status', 1);
|
||
DB::table('error_logs')->where('id', $log_id)->update(['status'=>$status]);
|
||
return $this->success('ok');
|
||
}
|
||
|
||
public function errorLog(Request $request, $log_id){
|
||
$log = DB::table('error_logs')->where('id', $log_id)->first();
|
||
return $this->success('ok', $log);
|
||
}
|
||
|
||
//app更新日志
|
||
public function appLogs(Request $request){
|
||
$logs = AppLog::orderBy('id', 'desc');
|
||
if($request->keyword){
|
||
$keyword = $request->keyword;
|
||
$logs = $logs->where('next_version', 'like', '%'.$keyword.'%');
|
||
}
|
||
if(is_numeric($request->is_forced)){
|
||
$logs = $logs->where('is_forced', $request->is_forced);
|
||
}
|
||
if(is_numeric($request->is_check_forced)){
|
||
$logs = $logs->where('is_check_forced', $request->is_check_forced);
|
||
}
|
||
if(is_numeric($request->type)){
|
||
$logs = $logs->where('type', $request->type);
|
||
}
|
||
$logs = $logs->paginate();
|
||
return $this->success('ok', $logs);
|
||
}
|
||
|
||
public function appLog(Request $request, $log_id){
|
||
$log = AppLog::find($log_id);
|
||
return $this->success('ok', $log);
|
||
}
|
||
|
||
//创建APP日志
|
||
public function addAppLog(Request $request){
|
||
$appLog = New AppLog();
|
||
$appLog->is_forced = $request->input('is_forced', 0);
|
||
$appLog->is_check_forced = $request->input('is_check_forced', 0);
|
||
$appLog->apk = $request->apk;
|
||
$appLog->type = $request->type ?:0;
|
||
$appLog->now_version = $request->now_version;
|
||
$appLog->next_version = $request->next_version;
|
||
$appLog->start_time = $request->start_time;
|
||
$appLog->point = $request->point;
|
||
$appLog->and_app_code = $request->and_app_code ? : '00';
|
||
$appLog->save();
|
||
return $this->success('ok');
|
||
}
|
||
|
||
//更新APP日志
|
||
public function updateAppLog(Request $request, $log_id){
|
||
$log = AppLog::find($log_id);
|
||
if(is_numeric($request->is_forced) && $request->is_forced != $log->is_forced){
|
||
$log->is_forced = $request->is_forced;
|
||
}
|
||
if(is_numeric($request->is_check_forced) && $request->is_check_forced != $log->is_check_forced){
|
||
$log->is_check_forced = $request->is_check_forced;
|
||
}
|
||
if(is_numeric($request->type) && $request->type != $log->type){
|
||
$log->type = $request->type;
|
||
}
|
||
if($request->apk && $request->apk != $log->apk){
|
||
$log->apk = $request->apk;
|
||
}
|
||
if($request->now_version && $request->now_version != $log->now_version){
|
||
$log->now_version = $request->now_version;
|
||
}
|
||
if($request->next_version && $request->next_version != $log->next_version){
|
||
$log->next_version = $request->next_version;
|
||
}
|
||
if($request->start_time && $request->start_time != $log->start_time){
|
||
$log->start_time = $request->start_time;
|
||
}
|
||
if($request->point && $request->point != $log->point){
|
||
$log->point = $request->point;
|
||
}
|
||
if($request->and_app_code && $request->and_app_code != $log->and_app_code){
|
||
$log->and_app_code = $request->and_app_code;
|
||
}
|
||
$log->save();
|
||
return $this->success('ok');
|
||
}
|
||
|
||
//删除APP日志
|
||
public function delAppLog(Request $request, $log_id){
|
||
AppLog::where('id', $log_id)->delete();
|
||
return $this->success('ok');
|
||
}
|
||
|
||
//用户签到统计
|
||
public function signLog(Request $request){
|
||
if($request->start_time && $request->end_time){
|
||
$start_time = $request->start_time;
|
||
$end_time = $request->end_time;
|
||
//间隔天数
|
||
$between_time = ceil((strtotime($end_time) - strtotime($start_time))/3600/24) + 1;
|
||
for($i=0; $i<$between_time; $i++){
|
||
$date[] = date("Y-m-d 00:00:00",strtotime("+$i day", strtotime($start_time)));
|
||
}
|
||
}
|
||
foreach ($date as $start_time) {
|
||
$end_time = date("Y-m-d 23:59:59",strtotime($start_time));
|
||
$date_arr[] = $start_time;
|
||
$mini_count = SignLog::where('source',1)->whereBetween('sign_date',[$start_time,$end_time])->count();
|
||
$minis_count [] = $mini_count;
|
||
$app_count = SignLog::where('source',2)->whereBetween('sign_date',[$start_time,$end_time])->count();
|
||
$apps_count [] = $app_count;
|
||
}
|
||
return $this->success('ok',compact('date_arr','minis_count','apps_count'));
|
||
}
|
||
|
||
|
||
// 小程序首页 活动服务推荐
|
||
public function setMpRecommendServices(Request $request){
|
||
try {
|
||
$recommend_ids = $request->recommend_ids;
|
||
if(count($recommend_ids) != count(array_unique($recommend_ids)))
|
||
return $this->failure('推荐数据重复,请确认后再保存');
|
||
if(!in_array(count($recommend_ids),[4,8]))
|
||
return $this->failure('推荐数目限制在4或8个');
|
||
RecommendCommunityActivity::where('id','>',0)->update(['is_show'=>0]);
|
||
foreach ($recommend_ids as $key => $value) {
|
||
RecommendCommunityActivity::updateOrCreate(['activity_id'=>$value],['is_show'=>1]);
|
||
}
|
||
return $this->success('ok');
|
||
} catch (\Exception $e) {
|
||
$this->getError($e);
|
||
return $this->failure('服务器休息,请稍后再试');
|
||
}
|
||
}
|
||
|
||
//获取小程序首页推荐服务
|
||
public function mpRecommendServices(Request $request){
|
||
try {
|
||
$keyword = trim($request->keyword);
|
||
$now = date('Y-m-d H:i:s');
|
||
$service = CommunityActivity::where('is_mp_show',1)->where(function($sql) use($now){
|
||
$sql->where('end_time', ">", $now)->orWhere(function($sq){
|
||
$sq->whereNull('start_time')->whereNull('end_time');
|
||
});
|
||
})->select('id','title','pic','class','is_mp_show');
|
||
if($keyword){
|
||
$service = $service->where('title','like',"%$keyword%");
|
||
}
|
||
$service = $service->get();
|
||
// $activity_ids = RecommendCommunityActivity::where('is_show',1)->orderByDesc('is_top')->pluck('activity_id');
|
||
// $return = CommunityActivity::whereIn('id',$activity_ids)->select('id','title','pic','class','is_mp_show','end_time')->get();
|
||
$return = RecommendCommunityActivity::join('community_activities as ca', 'recommend_community_activities.activity_id', 'ca.id')
|
||
->select('ca.id','ca.title','ca.pic','ca.class','ca.is_mp_show','ca.end_time','recommend_community_activities.is_top')
|
||
->where('recommend_community_activities.is_show',1)
|
||
->orderByDesc('recommend_community_activities.is_top')
|
||
->get();
|
||
$now = date('Y-m-d H:i:s');
|
||
foreach ($return as $key => $value) {
|
||
$value->activity_end = 0;
|
||
if($value->class == 'many') continue;
|
||
if($value->end_time && $value->end_time < $now){
|
||
$value->activity_end = 1;
|
||
}
|
||
}
|
||
return $this->success('ok',compact('service','return'));
|
||
} catch (\Exception $e) {
|
||
$this->getError($e);
|
||
return $this->failure('服务器休息,请稍后再试');
|
||
}
|
||
}
|
||
|
||
public function modifyRecommendService(Request $request)
|
||
{
|
||
try {
|
||
$id = $request->input('id');
|
||
$is_top = $request->input('is_top',0);
|
||
if (!is_numeric($is_top)) {
|
||
return $this->failure('置顶参数错误');
|
||
}
|
||
$data = RecommendCommunityActivity::query()->where('activity_id',$id)->first();
|
||
if ($data){
|
||
$data->is_top = $is_top;
|
||
$data->save();
|
||
}
|
||
return $this->success('ok',compact('is_top'));
|
||
}catch (\Exception $e){
|
||
return $this->failure($e->getMessage());
|
||
}
|
||
}
|
||
|
||
public function statisticsUsers(Request $request){
|
||
try {
|
||
if($request->start_time && $request->end_time){
|
||
$start_time = $request->start_time;
|
||
$end_time = $request->end_time;
|
||
//间隔天数
|
||
$between_time = ceil((strtotime($end_time) - strtotime($start_time))/3600/24) + 1;
|
||
for($i=0; $i<$between_time; $i++){
|
||
$date[] = date("Y-m-d 00:00:00",strtotime("+$i day", strtotime($start_time)));
|
||
}
|
||
}else{
|
||
return $this->failure('请选择开始和结束时间');
|
||
}
|
||
foreach ($date as $start_time) {
|
||
$end_time = date("Y-m-d 23:59:59",strtotime($start_time));
|
||
$date_arr[] = $start_time;
|
||
//评论次数
|
||
$comment_count[] = LabelHistory::whereBetween('created_at',[$start_time,$end_time])->count();
|
||
//关注次数
|
||
$follow_count[] = DB::table('followables')->where('followable_type', 'App\\Models\\User')->where('relation', 'follow')->whereBetween('created_at',[$start_time,$end_time])->count();
|
||
//打招呼次数
|
||
$friend_count[] = LinkingRequest::whereBetween('created_at',[$start_time,$end_time])->count();
|
||
//处理好友请求次数
|
||
$deal_friend_count[] = LinkingRequest::where('status','<>',0)->whereBetween('created_at',[$start_time,$end_time])->count();
|
||
//登录次数
|
||
$visit_count[] = DB::table('login_logs')->whereBetween('created_at',[$start_time,$end_time])->groupBy('user_id')->get()->count();
|
||
//真人认证次数
|
||
$approve_count[] = ApproveHistory::whereBetween('created_at',[$start_time,$end_time])->count();
|
||
}
|
||
return $this->success('ok',compact('date_arr','comment_count','follow_count','friend_count','visit_count','approve_count','deal_friend_count'));
|
||
} catch (\Exception $e) {
|
||
$this->getError($e);
|
||
return $this->failure('服务器休息,请稍后再试');
|
||
}
|
||
|
||
}
|
||
}
|