| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947 | <?phpnamespace App\Http\Controllers\Wap\User;use App\Modules\Activity\Services\ActivityService;use App\Modules\Book\Services\BookConfigService;use App\Modules\Channel\Models\Channel;use App\Modules\Subscribe\Models\BookOrder;use App\Modules\Subscribe\Models\YearOrder;use App\Modules\Subscribe\Services\YearOrderService;use App\Modules\User\Models\User;use App\Modules\User\Services\ReadRecordService;use App\Modules\User\Services\UserBindHkWelfareService;use App\Modules\User\Services\UserService;use Illuminate\Http\Request;use App\Http\Controllers\Controller;use Hashids;use EasyWeChat\Foundation\Application;use Log;use Exception;use Redis;use Cookie;use DB;/** * 朋友圈链接 * Class CoflController * @package App\Http\Controllers\Wap\User */class CoflController extends Controller{    public function index(Request $request){        $bid = $request->get('bid');        if(empty($bid)){            $default_ink = $this->getLink();            return redirect()->to($default_ink);        }        $openid = $request->get('openid');        //授权        $params = $request->except('_url');        if(empty($openid)){            //$url = str_replace('http://', env('PROTOCOL') . '://', url()->current() . '?' . http_build_query($params));            $url = url()->current() . '?' . http_build_query($params);            $params['redirect_url'] = urlencode($url);            $app = new Application($this->auth($params));            return $app->oauth->redirect();        }        try{            if(is_numeric($bid) && $bid == 6500 ){                $params['bid'] = Hashids::encode($bid);            }else{                $bid = Hashids::decode($bid)[0];            }        }catch (Exception $e){            return redirect()->to($this->getLink());        }        $crm = $request->get('crm','book_'.$bid);        if(!$bid) return redirect()->to($this->getLink());        //获取用户        //$user = $this->getUsers($openid);        $test_param = $request->input('test',0);        //if($test_param ==1 || $test_param =='1' ) {        $user = $this->getUsersV2($openid);        //}        if(!$user[0]){            $user[1] = 123;        }        //有阅读纪录的跳转        $read_record = ReadRecordService::getByField($user[0],$bid);        if($read_record){            $cid = explode('_',$read_record)[0];        }else{            //没有阅读记录的跳转            $book_info = BookConfigService::getBookById($bid);            $cid = $book_info->first_cid;        }        $params['cid'] = $cid;        $params['crm']  ='book_'.$bid;        if(isset($params['openid']))  unset($params['openid']);        if(isset($params['unionid']))  unset($params['unionid']);        $url = $this->getLink($user[1]).'reader?'.http_build_query($params);        $this->stats('book',$crm);        $this->statsDetail($user[0],'book',$bid);        return redirect()->to($url);    }    public function freeCurrencyView(Request $request){        $openid = $request->get('openid');        //授权        $params = $request->except('_url');        if(empty($openid)){            //$url = str_replace('http://', env('PROTOCOL') . '://', url()->current() . '?' . http_build_query($params));            $url = url()->current() . '?' . http_build_query($params);            $params['redirect_url'] = urlencode($url);            $app = new Application($this->auth($params));            return $app->oauth->redirect();        }        $uri = $request->path();        $token = $request->get('token');        $rfee = $request->get('amount');        $crm = $request->get('crm','reward');        $source = $request->get('wx','none');        $type = 'CRM';        if($uri == 'freethrhcurrency'){            //$fee = 300;            $fee = 500;            $this->stats('reward_300',$crm);        }elseif($uri == 'wfreecurrency'){            $fee = 200;            $type = 'WCRM';        }elseif ($uri == 'frocefreethrhcurrency'){            //$fee = 200;            $fee = 500;            $type = 'CRM_FORCE';        }        else{            $this->stats('reward_200',$crm);            $fee = $this->freeCurrencyFee($token,$rfee);        }        //$user = $this->getUsers($openid);        $user = $this->getUsersV2($openid);        if(!$user || !$user[0] || !$user[1]) return redirect()->to($this->getLink().'?'.http_build_query($params));        if($type == 'CRM'){            $this->statsDetail($user[0],'reward',0);        }elseif ($type == 'CRM_FORCE'){            $this->statsDetail($user[0],'forcereward',0);        } else{            $this->statsDetail($user[0],'wreward',0);        }        $get_free_currency = UserBindHkWelfareService::isHasGet($user[0]);        if($get_free_currency){            //已经领过            if(isset($user[2]) && !empty($user[2]) && isset($user[3]) && !empty($user[3])){                $bid = Hashids::encode($user[2]);                $cid = $user[3];                $params['bid'] = $bid;                $params['cid'] = $cid;                $link = $this->getLink($get_free_currency->distribution_channel_id).'reader?'.http_build_query($params);            }else{                $link = $this->getLink($get_free_currency->distribution_channel_id).'recent?'.http_build_query($params);            }            return view('jump.bindHkFreeCurrency',['fee'=>$fee,'url'=>$link,'is_get'=>1,'uid'=>$get_free_currency->uid,'source'=>$source]);        }else{            if(isset($user[2]) && !empty($user[2]) && isset($user[3]) && !empty($user[3])){                $bid = Hashids::encode($user[2]);                $cid = $user[3];                $params['bid'] = $bid;                $params['cid'] = $cid;                $link = $this->getLink($user[1]).'reader?'.http_build_query($params);            }else{                $link = $this->getLink($user[1]).'recent?'.http_build_query($params);            }            $this->getReward($user[0],$fee,$source,$type);            return view('jump.bindHkFreeCurrency',['fee'=>$fee,'url'=>$link,'is_get'=>0,'uid'=>$user[0],'source'=>$source]);        }    }    private function freeCurrencyFee($token,$fee){        if(!$token || !$fee) return 200;        $param['fee'] = $fee;        if( _sign($param,env('SECRET_KEY')) == $token)  return $fee;        return 200;    }    public function freeCurrencyPost(Request $request){        $uid = $request->post('uid');        $fee = $request->post('fee',200);        $source = $request->post('source','');        $result = UserBindHkWelfareService::getfreeCurrency($uid,$fee,'CRM',$source);        if($result){            UserService::addBalance($uid,$fee,0,$fee);        }        return response()->success(['uid'=>$uid,'result'=>$result]);    }    private function getReward($uid,$fee,$source,$crm='CRM'){        $result = UserBindHkWelfareService::getfreeCurrency($uid,$fee,$crm,$source);        if($result){            UserService::addBalance($uid,$fee,0,$fee);        }    }    public function activity(Request $request){        $token = $request->get('token');        if(empty($token)){            $default_ink = $this->getLink();            return redirect()->to($default_ink);        }        $openid = $request->get('openid');        //授权        $params = $request->except('_url');        if(empty($openid)){            $url = url()->current() . '?' . http_build_query($params);            $params['redirect_url'] = urlencode($url);            $app = new Application($this->auth($params));            return $app->oauth->redirect();        }        $crm = $request->get('crm');        $this->stats('activity',$crm);        $activity = ActivityService::getByToken($token);        if($activity){            $user = $this->getUsersV2($openid);            $distribution_channel_id = (isset($user[1]) && !empty($user[1]))?$user[1]:123;            $url_format = '%s://site%s.%s.com%s';            $activity_page = $activity->activity_page ;            if($activity->id == 6000){                $activity_page = '/activity/common?token=LNyAqbFMgvkmvnHP8PXV3DYPIIhQm3oe';            }            $url = sprintf($url_format, env('PROTOCOL'), encodeDistributionChannelId($distribution_channel_id),                env('CUSTOM_HOST'),                $activity_page            );            return redirect()->to($url);        }        $default_ink = $this->getLink();        return redirect()->to($default_ink);    }    public function indexRoot(Request $request){        $openid = $request->get('openid');        //授权        $params = $request->except('_url');        if(empty($openid)){            $url = url()->current() . '?' . http_build_query($params);            $params['redirect_url'] = urlencode($url);            $app = new Application($this->auth($params));            return $app->oauth->redirect();        }        list($uid,$distribution_channel_id) = $this->getUsersV2($openid);        $link = $this->getLink($distribution_channel_id);        $crm = $request->get('crm','index');        $params['crm'] = $crm;        $link  = $link.'?'.http_build_query($params);        $this->stats('index',$crm);        $this->statsDetail($uid,'index',0);        return redirect()->to($link);    }    public function recent(Request $request){        $openid = $request->get('openid');        //授权        $params = $request->except('_url');        if(empty($openid)){            $url = url()->current() . '?' . http_build_query($params);            $params['redirect_url'] = urlencode($url);            $app = new Application($this->auth($params));            return $app->oauth->redirect();        }        $user = $this->getUsersV2($openid);        if(!$user[0]){            $distribution_channel_id = 123;        }else{            $distribution_channel_id = $user[1];        }        $crm = $request->get('crm');        $this->stats('recent',$crm);        $this->statsDetail($user[0],'recent',0);        $link = $this->getLink($distribution_channel_id).'recent?'.http_build_query($params);        return redirect()->to($link);    }    public function person(Request $request){        $openid = $request->get('openid');        //授权        $params = $request->except('_url');        if(empty($openid)){            $url = url()->current() . '?' . http_build_query($params);            $params['redirect_url'] = urlencode($url);            $app = new Application($this->auth($params));            return $app->oauth->redirect();        }        $user = $this->getUsersV2($openid);        if(!$user[0]){            $distribution_channel_id = 123;        }else{            $distribution_channel_id = $user[1];        }        $crm = $request->get('crm');        $this->stats('person',$crm);        $this->statsDetail($user[0],'person',0);        $link = $this->getLink($distribution_channel_id).'person?'.http_build_query($params);        return redirect()->to($link);    }    public function sign(Request $request){        $openid = $request->get('openid');        //授权        $params = $request->except('_url');        if(empty($openid)){            $url = url()->current() . '?' . http_build_query($params);            $params['redirect_url'] = urlencode($url);            $app = new Application($this->auth($params));            return $app->oauth->redirect();        }        $user = $this->getUsersV2($openid);        if(!$user[0]){            $distribution_channel_id = 123;        }else{            $distribution_channel_id = $user[1];        }        $crm = $request->get('crm');        $uri = $request->path();        if($uri == 'sign'){            $this->stats('sign',$crm);            $this->statsDetail($user[0],'sign',0);        }elseif($uri == 'wsign'){            $this->stats('wsign',$crm);            $this->statsDetail($user[0],'wsign',0);        }        $link = $this->getLink($distribution_channel_id).'sign?'.http_build_query($params);        return redirect()->to($link);    }    private function getUsers($openid){        $users = User::where('openid',$openid)->select('id','distribution_channel_id')->get();        if($users->isEmpty()) return [0,0,0,0];        $temp = null;        $distribution_channel_id = 0;        $uid = 0;        $bid = 0;        $cid = 0;        foreach ($users as $user){            $last_read = ReadRecordService::getByField($user->id,'last_read');            if(!$last_read) continue;            if(!$temp ){                $distribution_channel_id = $user->distribution_channel_id;                $uid  = $user->id;                $temp = $last_read;            }else{                $temp_last_read_info = explode('_',$temp);                $last_read_info = explode('_',$last_read);                if($last_read_info[2] > $temp_last_read_info[2]){                    $uid = $user->id;                    $distribution_channel_id = $user->distribution_channel_id;                    $temp = $last_read;                    $bid = $last_read_info[0];                    $cid = $last_read_info[1];                }            }        }        return [$uid,$distribution_channel_id,$bid,$cid];    }    /**     * @param $openid     * @return array     */    private function getUsersV2($openid){        $friend_link_uid_bind = DB::table('friend_link_uid_bind')->where('openid',$openid)->first();        if($friend_link_uid_bind) {            $user = User::where('id',$friend_link_uid_bind->uid)->select('id','distribution_channel_id')->first();            if($user) {                \Log::info('user;'.json_encode($user));                return [$user->id,$user->distribution_channel_id];            }        }        //外部渠道导粉        if(Redis::Hexists('crm:out_guide_exposure_user',$openid)){            $user = $this->createUser($openid,$openid,5204,0,'');            $uid = $user->id;            $distribution_channel_id = 5204;            $ouid = Redis::hget('crm:out_guide_exposure_user',$openid);            UserService::transfer($ouid,$uid,5204);            $insert_data = ['uid'=>$uid,'openid'=>$openid ,'created_at'=>date('Y-m-d H:i:s'),'updated_at'=>date('Y-m-d H:i:s')];            DB::table('friend_link_uid_bind')->insert($insert_data);            Redis::del('crm:out_guide_exposure_user',$openid);            return [$uid,$distribution_channel_id];        }        $inner_channels = Channel::join('channel_users','channel_users.id','=','distribution_channels.channel_user_id')            ->select('distribution_channels.id')            ->whereIn('channel_users.id',explode(',',redisEnv('PROMOTION_GROUP_CHANNEL_USER_ID')))            ->get()            ->pluck('id')            ->toArray();        //\Log::info($inner_channels);        $users = User::where('openid',$openid)->select('id','distribution_channel_id')->get();        \Log::info('users:openid:'.$openid);        if($users->isEmpty()) return [0,0];        $temp = null;        $distribution_channel_id = 0;        $uid = 0;        $inner_channel_uid_list = [];        //先筛网站运营部UID        foreach ($users as $user){            if(in_array($user->distribution_channel_id,$inner_channels)) {                $inner_channel_uid_list[] = $user;            }        }        if(count($inner_channel_uid_list) == 1) {            $insert_data = ['uid'=>$inner_channel_uid_list[0]->id,'openid'=>$openid ,'created_at'=>date('Y-m-d H:i:s'),'updated_at'=>date('Y-m-d H:i:s')];            \Log::info('anchor:count $inner_channel_uid_list =1');            DB::table('friend_link_uid_bind')->insert($insert_data);            return [$inner_channel_uid_list[0]->id,$inner_channel_uid_list[0]->distribution_channel_id];        }        if(count($inner_channel_uid_list)>1) {            //有多个网站运营部UID,针对网站运营部UID进入到下一步筛选            $users = $inner_channel_uid_list;        }        //筛选包年UID        $uid_list = [];        foreach ($users as $item) {            $uid_list[] =$item->id;        }        $year_order = YearOrder::whereIn('uid',$uid_list)->orderBy('end_time','desc')->first();        if($year_order) {            foreach ($users as $item) {                if($item->id == $year_order->uid) {                    //筛选包年结束时间最后的UID                    $insert_data = ['uid'=>$item->id,'openid'=>$openid ,'created_at'=>date('Y-m-d H:i:s'),'updated_at'=>date('Y-m-d H:i:s')];                    \Log::info('anchor:year_order');                    DB::table('friend_link_uid_bind')->insert($insert_data);                    return [$item->id,$item->distribution_channel_id];                }            }        }        //按订阅章节数最多的筛选        $users_select = ['id'=>0,'count'=>0,'user'=>null,'create_time'=>0];        foreach ($users as $each){            $table_prefix = ($each->id)%512;            $chapter_count = DB::connection('chapter_order_mysql')                ->table('chapter_orders'.$table_prefix)                ->where('created_at','>=',date('Y-m-d H:i:s',strtotime('-3 day')))                ->where('uid',$each->id)                //->where('bid',$bid)                ->count('id');            $book_order = BookOrder::where('uid',$each->id)                //->where('bid',$bid)                ->where('created_at','>=',date('Y-m-d H:i:s',strtotime('-3 day')))                ->first();            if($book_order) {                $chapter_count += 30;            }            //$each->chapter_count = $chapter_count;            if($chapter_count>$users_select['count']) {                $users_select['id'] = $each->id;                $users_select['count'] = $chapter_count;                $users_select['user'] = $each;            }        }        if($users_select['id'] >0) {            $insert_data = ['uid'=>$users_select['user']->id,'openid'=>$openid ,'created_at'=>date('Y-m-d H:i:s'),'updated_at'=>date('Y-m-d H:i:s')];            \Log::info('anchor:subs_chapter');            DB::table('friend_link_uid_bind')->insert($insert_data);            return [$users_select['user']->id,$users_select['user']->distribution_channel_id];        }        //有订阅记录的        foreach ($users as $value) {            $table_prefix = ($value->id)%512;            $chapter_order = DB::connection('chapter_order_mysql')                ->table('chapter_orders'.$table_prefix)                ->where('uid',$value->id)                //->where('bid',$bid)                ->orderBy('created_at','desc')                ->first();            $book_order = BookOrder::where('uid',$value->id)                //->where('bid',$bid)                ->first();            if($chapter_order ){                if(strtotime($chapter_order->created_at) > $users_select['create_time']) {                    $users_select['id'] = $value->id;                    $users_select['create_time'] = strtotime($chapter_order->created_at);                    $users_select['user'] = $value;                }            }            if($book_order){                if(strtotime($book_order->created_at) > $users_select['create_time']){                    $users_select['id']=$value->id;                    $users_select['create_time']= strtotime($book_order->created_at);                    $users_select['user']= $value;                }            }        }        if($users_select['id'] >0) {            $insert_data = ['uid'=>$users_select['user']->id,'openid'=>$openid ,'created_at'=>date('Y-m-d H:i:s'),'updated_at'=>date('Y-m-d H:i:s')];            \Log::info('anchor:subs_');            DB::table('friend_link_uid_bind')->insert($insert_data);            return [$users_select['user']->id,$users_select['user']->distribution_channel_id];        }        if(count($inner_channel_uid_list)>1) {            //有多个网站运营部UID,针对网站运营部UID进入到下一步筛选            $insert_data = ['uid'=>$inner_channel_uid_list[0]->id,'openid'=>$openid ,'created_at'=>date('Y-m-d H:i:s'),'updated_at'=>date('Y-m-d H:i:s')];            \Log::info('anchor:count $inner_channel_uid_list >1');            DB::table('friend_link_uid_bind')->insert($insert_data);            return [$inner_channel_uid_list[0]['id'],$inner_channel_uid_list[0]['distribution_channel_id']];        }        \Log::info('anchor:over');        return [0,0];    }    private function getUsersV3($openid){        //5204        //\Log::info($inner_channels);        $users = User::where('openid',$openid)->select('id','distribution_channel_id')->get();        if($users->isEmpty()) return [0,0];        if(count($users) == 1){            return [$users->first()->id,$users->first()->distribution_channel_id];        }        $temp = null;        //筛选包年UID        $uid_list = [];        foreach ($users as $item) {            $uid_list[] =$item->id;        }        $year_order = YearOrder::whereIn('uid',$uid_list)->orderBy('end_time','desc')->first();        if($year_order) {            foreach ($users as $item) {                if($item->id == $year_order->uid) {                    //筛选包年结束时间最后的UID                    return [$item->id,$item->distribution_channel_id];                }            }        }        //按订阅章节数最多的筛选        $users_select = ['id'=>0,'count'=>0,'user'=>null,'create_time'=>0];        foreach ($users as $each){            $table_prefix = ($each->id)%512;            $chapter_count = DB::connection('chapter_order_mysql')                ->table('chapter_orders'.$table_prefix)                ->where('created_at','>=',date('Y-m-d H:i:s',strtotime('-3 day')))                ->where('uid',$each->id)                //->where('bid',$bid)                ->count('id');            $book_order = BookOrder::where('uid',$each->id)                //->where('bid',$bid)                ->where('created_at','>=',date('Y-m-d H:i:s',strtotime('-3 day')))                ->first();            if($book_order) {                $chapter_count += 30;            }            //$each->chapter_count = $chapter_count;            if($chapter_count>$users_select['count']) {                $users_select['id'] = $each->id;                $users_select['count'] = $chapter_count;                $users_select['user'] = $each;            }        }        if($users_select['id'] >0) {            $insert_data = ['uid'=>$users_select['user']->id,'openid'=>$openid ,'created_at'=>date('Y-m-d H:i:s'),'updated_at'=>date('Y-m-d H:i:s')];            return [$users_select['user']->id,$users_select['user']->distribution_channel_id];        }        //有订阅记录的        foreach ($users as $value) {            $table_prefix = ($value->id)%512;            $chapter_order = DB::connection('chapter_order_mysql')                ->table('chapter_orders'.$table_prefix)                ->where('uid',$value->id)                //->where('bid',$bid)                ->orderBy('created_at','desc')                ->first();            $book_order = BookOrder::where('uid',$value->id)                //->where('bid',$bid)                ->first();            if($chapter_order ){                if(strtotime($chapter_order->created_at) > $users_select['create_time']) {                    $users_select['id'] = $value->id;                    $users_select['create_time'] = strtotime($chapter_order->created_at);                    $users_select['user'] = $value;                }            }            if($book_order){                if(strtotime($book_order->created_at) > $users_select['create_time']){                    $users_select['id']=$value->id;                    $users_select['create_time']= strtotime($book_order->created_at);                    $users_select['user']= $value;                }            }        }        if($users_select['id'] >0) {            return [$users_select['user']->id,$users_select['user']->distribution_channel_id];        }        return [0,0];    }    private function getLink($distribution_channel_id=123){        $url_format = '%s://site%s.%s.com/';        return  sprintf(            $url_format,            env('PROTOCOL'),            encodeDistributionChannelId($distribution_channel_id),            env('CUSTOM_HOST')        );    }    private function auth($param){        $param['appid'] = 'wx9d389a73b88bbeae';        $options = [            'app_id' => 'wx9d389a73b88bbeae',            'secret' => '2f6594bb595dfa256b5512e43a32a3d3',            'oauth' => [                'scopes' => ['snsapi_base'],                'callback' => env('AUTH_CALLBACK_URL') . '?' . http_build_query($param),            ],        ];        return $options;    }    private function stats($page,$flag){        if(!$page || !$flag) return ;        $flag = trim($flag);        //pv        $day = date('Y-m-d');        $pv_key = sprintf('crm:pv:%s',$flag);        Redis::hincrby($pv_key, $day, 1);        //Redis::hincrby($pv_key, 'total', 1);        Redis::sadd('crm_'.$day,$flag);        //uv        $cookie_flag = Cookie::get('crm_flag');        if(!$cookie_flag || $cookie_flag != $flag){            $uv_key = sprintf('crm:uv:%s',$flag);            Redis::hincrby($uv_key, $day, 1);            //Redis::hincrby($uv_key, 'total', 1);        }        Cookie::queue('crm_flag', $flag, env('U_COOKIE_EXPIRE'), null, null, false, false);    }    private function statsDetail($uid,$page,$bid=0)    {        try{            DB::table('crm_visit_detail')->insert([                'uid'=>$uid,'page'=>$page,                'bid'=>$bid,'day'=>date('Y-m-d'),                'created_at'=>date('Y-m-d H:i:s'),                'updated_at'=>date('Y-m-d H:i:s')            ]);        }catch (\Exception $e){}    }    public function longActivity(Request $request)    {        $openid = $request->get('openid');        //授权        $params = $request->except('_url');        if(empty($openid)){            $url = url()->current() . '?' . http_build_query($params);            $params['redirect_url'] = urlencode($url);            $app = new Application($this->auth($params));            return $app->oauth->redirect();        }        $user = $this->getUsersV2($openid);        if(!$user[0]){            $distribution_channel_id = 123;        }else{            $distribution_channel_id = $user[1];        }        $crm = $request->get('crm');        $this->stats('activity',$crm);        $baselink  = $this->getLink($distribution_channel_id).'activity/crm?'.http_build_query($params);        if(isset($params['token']) && !empty($params['token'])){            return redirect()->to($baselink.'activity/crm?'.http_build_query($params));        }        return redirect()->to($baselink);    }    public function yearActivity(Request $request)    {        $openid = $request->get('openid');        //授权        $params = $request->except('_url');        if(empty($openid)){            $url = url()->current() . '?' . http_build_query($params);            $params['redirect_url'] = urlencode($url);            $app = new Application($this->auth($params));            return $app->oauth->redirect();        }        $user = $this->getUsersV2($openid);        if(!$user[0]){            $distribution_channel_id = 123;        }else{            $distribution_channel_id = $user[1];        }        $crm = $request->get('crm','crm_year_activity');        $params['crm'] = $crm;        $this->stats('activity',$crm);        $this->statsDetail($user[0],'year_activity',0);        $baselink  = $this->getLink($distribution_channel_id).'activity/crmy?'.http_build_query($params);        return redirect()->to($baselink);    }    public function guidePersonal(Request $request){        $openid = $request->get('openid');        //授权        $params = $request->except('_url');        if(empty($openid)){            $url = url()->current() . '?' . http_build_query($params);            $params['redirect_url'] = urlencode($url);            $app = new Application($this->auth($params));            return $app->oauth->redirect();        }        list($uid,$distribution_channel_id) = $this->getUsersV2($openid);        $link = $this->getLink($distribution_channel_id);        $get_info = UserBindHkWelfareService::isHasGet($uid);        if($get_info)   redirect()->to($link);        $crm = $request->get('crm','guide_personal');        $params['crm'] = $crm;        $params['uid'] = $uid;        $link  = $link.'guidestrem?'.http_build_query($params);        $this->stats('index',$crm);        $this->statsDetail($uid,'guidePersonal',0);        return redirect()->to($link);    }    public function guidePersonalAccount(Request $request,$channel_id){        $uid = $request->get('uid',0);        //$user_cookie = Cookie::get(env('COOKIE_AUTH_WEB_WECHAT'));        //$uid = $user_cookie ? decrypt($user_cookie) : null;        $cookie_crm_img = Cookie::get('crm_person_img');        $cookie_crm_name = Cookie::get('crm_person_name','');        $get_info = UserBindHkWelfareService::isHasGet($uid);        $fee = $request->get('fee',200);        if($get_info)   return back();        if($cookie_crm_img){            return view('jump.guidePersonalAccountOurs',['img'=>$cookie_crm_img,'name'=>$cookie_crm_name,'fee'=>$fee]);        }        //$distribution_channel_id = decodeDistributionChannelId($channel_id);        $distribution_channel_id = $channel_id;        //if(in_array($distribution_channel_id,Redis::SISMEMBER('')));        //$out = false;        $group = 'ACTIVE';        if(Redis::SISMEMBER('crm:out_channel_sites',$distribution_channel_id)){            //$out = true;            $group = 'OUT_ACTIVE';            $env_config = redisEnvMulti('OUT_ACTIVE_GUIDE_PERSONAL_ACCOUNT_OURS_QRCODE',                'OUT_ACTIVE_GUIDE_PERSONAL_ACCOUNT_MAX_UV','OUT_ACTIVE_GUIDE_PERSONAL_ACCOUNT_ID',                'OUT_ACTIVE_GUIDE_PERSONAL_ACCOUNT_MAX_EVERY_UV');        }else{            $env_config = redisEnvMulti('ACTIVE_GUIDE_PERSONAL_ACCOUNT_OURS_QRCODE',                'ACTIVE_GUIDE_PERSONAL_ACCOUNT_MAX_UV','ACTIVE_GUIDE_PERSONAL_ACCOUNT_ID',                'ACTIVE_GUIDE_PERSONAL_ACCOUNT_MAX_EVERY_UV');        }        if(empty($env_config[0])){            return back();        }        //$img = empty($env_config[0])?'https://cdn-novel.iycdm.com/h5/personal_account/chenchen.jpg':$env_config[0];        $img =$env_config[0];        $max = empty($env_config[1])?100:$env_config[1];        $max = (int)$max;        $one_loop_max = empty($env_config[3])?10:$env_config[3];        $now_id = (int)$env_config[2];        if($group == 'OUT_ACTIVE'){            $uv_key = 'out_active_guide_personal_uv';        }else{            $uv_key = 'active_guide_personal_uv';        }        $uv = Redis::scard($uv_key);        $personal_info = DB::table('personal_account_list')->where('id',$now_id)->select('count')->first();        if(!$personal_info){            return back();        }        $total_max = (int)($personal_info->count+$uv);        //Log::info('$total_max is: '.);        if($uv >= $one_loop_max || $total_max>=$max){            if($total_max>=$max){                DB::table('personal_account_list')->where('id',$now_id)->update([                    'status'=>2,                    'count'=>$total_max,                    'updated_at'=>date('Y-m-d H:i:s')                ]);            }else{                DB::table('personal_account_list')->where('id',$now_id)->increment('count',$uv,[                    'updated_at'=>date('Y-m-d H:i:s')                ]);            }            $account = DB::table('personal_account_list')                ->where('is_enable',1)                ->whereIn('status',[1,0])                ->select('id','url')                ->where('group',$group)                ->where('count','<',$max)                ->orderBy('count','asc')                ->orderBy('id')                ->first();            Redis::del($uv_key);            if($account){                DB::table('personal_account_list')->where('id',$account->id)->update([                    'status'=>1,                    'updated_at'=>date('Y-m-d H:i:s')                ]);                $img = $account->url;                $now_id = $account->id;                Redis::Hmset('env',$group.'_GUIDE_PERSONAL_ACCOUNT_OURS_QRCODE',$account->url,$group.'_GUIDE_PERSONAL_ACCOUNT_ID',$account->id);            }else{                Redis::Hmset('env',$group.'_GUIDE_PERSONAL_ACCOUNT_OURS_QRCODE','',$group.'_GUIDE_PERSONAL_ACCOUNT_ID','');                return back();            }        }        Redis::sadd($uv_key,$uid);        if($uid){            if($group == 'OUT_ACTIVE'){                DB::table('ad_pdd')->insert([                    'uid'=>$uid,                    'img'=>'OUT_GUIDE_PERSONAL_ACCOUNT_'.$now_id,                    'date'=>date('Y-m-d'),                    'created_at'=>date('Y-m-d H:i:s'),                    'updated_at'=>date('Y-m-d H:i:s')                ]);                $user = UserService::getById($uid);                Redis::hset('crm:out_guide_exposure_user',$user->openid,$uid);            }else{                DB::table('ad_pdd')->insert([                    'uid'=>$uid,                    'img'=>'GUIDE_PERSONAL_ACCOUNT_'.$now_id,                    'date'=>date('Y-m-d'),                    'created_at'=>date('Y-m-d H:i:s'),                    'updated_at'=>date('Y-m-d H:i:s')                ]);            }        }        $name = '';        $name_info = DB::table('personal_account_list')->where('id',$now_id)->select('name')->first();        if($name_info){            $name = $name_info->name;        }        /*if(in_array($channel_id,explode(',',redisEnv('GUIDE_PERSONAL_ACCOUNT_WEID_SITES')))){            $imgs = redisEnv('GUIDE_PERSONAL_ACCOUNT_WEID_QRCODE',[]);            if($imgs) $imgs = json_decode($imgs,1);            $page = 'jump.guidePersonalAccount';        }else{            $imgs = redisEnv('GUIDE_PERSONAL_ACCOUNT_OURS_QRCODE',[]);            if($imgs) $imgs = json_decode($imgs,1);            $page = 'jump.guidePersonalAccountOurs';        }*/        $page = 'jump.guidePersonalAccountOurs';        $time = strtotime(date('Y-m-d',time()+86400))-time();        Cookie::queue('crm_person_img', $img,$time);        Cookie::queue('crm_person_name', $name,$time);        //$page = 'jump.guidePersonalAccount';        //$img = collect($imgs)->random();        return view($page,['img'=>$img,'name'=>$name,'fee'=>$fee]);    }    public function r(Request $request,$number){        switch ($number){            case 1:                //首页                break;            case 2:                //阅读器                break;            case 3:                //阅读器                break;            case 4:                //个人中心                break;            case 5:                //最近阅读                break;            case 6:        }    }    public function freeCurrencyViewForTransfer(Request $request){        $openid = $request->get('openid');        //授权        $params = $request->except('_url');        if(empty($openid)){            //$url = str_replace('http://', env('PROTOCOL') . '://', url()->current() . '?' . http_build_query($params));            $url = url()->current() . '?' . http_build_query($params);            $params['redirect_url'] = urlencode($url);            $app = new Application($this->auth($params));            return $app->oauth->redirect();        }        $crm = $request->get('crm','treward');        $source = $request->get('wx','none');        $fee = 500;        $type = 'TCRM';        $this->stats('treward_500',$crm);        $crm_transfer_uid_bind = DB::table('crm_transfer')->where('openid',$openid)->first();        if($crm_transfer_uid_bind) {            $user = User::where('id',$crm_transfer_uid_bind->to_uid)->select('id','distribution_channel_id')->first();            $uid = $crm_transfer_uid_bind->to_uid;            $distribution_channel_id = 5204;        }else{            list($ouid,$distribution_channel_id) = $this->getUsersV3($openid);            $user = $this->createUser($openid,$openid,5204,0,'');            $uid = $user->id;            $distribution_channel_id = 5204;            UserService::transfer($ouid,$uid,5204);            $insert_data = ['uid'=>$uid,'openid'=>$openid ,'created_at'=>date('Y-m-d H:i:s'),'updated_at'=>date('Y-m-d H:i:s')];            DB::table('friend_link_uid_bind')->insert($insert_data);        }        if(!$uid) return redirect()->to($this->getLink($distribution_channel_id).'?'.http_build_query($params));        $this->statsDetail($uid,'treward',0);        $get_free_currency = UserBindHkWelfareService::isHasGet($uid);        if($get_free_currency){            //已经领过            $link = $this->getLink($distribution_channel_id).'recent?'.http_build_query($params);            return view('jump.bindHkFreeCurrency',['fee'=>$fee,'url'=>$link,'is_get'=>1,'uid'=>$uid,'source'=>$source]);        }else{            $link = $this->getLink($distribution_channel_id).'recent?'.http_build_query($params);            $this->getReward($uid,$fee,$source,$type);            return view('jump.bindHkFreeCurrency',['fee'=>$fee,'url'=>$link,'is_get'=>0,'uid'=>$uid,'source'=>$source]);        }    }    private function createUser($openid,$unionid,$distribution_channel_id,$send_order_id,$ip){        $user = null;        try{            $user =  UserService::addUser(                ['openid' => $openid,                    'unionid' => $unionid,                    'distribution_channel_id' =>$distribution_channel_id,                    'send_order_id'=>$send_order_id,                    'is_new'=>1,                    'register_ip'=>$ip                ]);        }catch (\Exception $e){            myLog('user-error')->info($e);        }        // 注册动作        $action_type = 'Register';        $param = [            'openid' => $openid,            'uid' => isset($user->id)?$user->id:'0',        ];        UserService::PushUserActionToQueue($action_type,$distribution_channel_id,$param);        return $user;    }}
 |