<?php /** * Created by sublime. * User: wosinC * Date: 2017/12/2 * Time: 上午11:39 */ namespace App\Modules\OfficialAccount\Services; use App\Modules\OfficialAccount\Models\ForceSubscribeUserProperty; use App\Modules\OfficialAccount\Models\ForceSubscribeUsers; use App\Modules\OfficialAccount\Models\TempForceSubscribeUsers; use App\Modules\OfficialAccount\Models\OfficialAccount; use App\Modules\SendOrder\Services\SendOrderService; use App\Modules\User\Services\UserService; use App\Modules\Subscribe\Services\OrderService; use App\Modules\Subscribe\Services\YearOrderService; use App\Modules\User\Models\YqMove; use App\Libs\OSS; use Redis; use App\Jobs\SendTemplate; use App\Jobs\SendStatisticsList; use GuzzleHttp\Client; class ForceSubscribeService { //-----------强关用户--------------- /** * 通过appid和openid获取强关用户 */ static function forceSubscribeUsersByAppidAndOpenId($forceSubscribeUsersPrams) { //\Log::info('======================get_forceSubscribe_Users11111111111======================'."\n"); //\Log::info($forceSubscribeUsersPrams); $officialAccount = OfficialAccount::officialAccountByAppid($forceSubscribeUsersPrams['appid']); // \Log::info('======================get_forceSubscribe_Users222222222222======================'."\n"); // \Log::info($officialAccount); if (!empty($officialAccount)) { $distribution_channel_id = $officialAccount['distribution_channel_id']; //\Log::info('======================get_forceSubscribe_Users333333333333======================'."\n"); //\Log::info(ForceSubscribeUsers::forceSubscribeUsersByOpenidAndChannelId($forceSubscribeUsersPrams['openid'],$officialAccount['distribution_channel_id'])); return ForceSubscribeUsers::forceSubscribeUsersByOpenidAndChannelId($forceSubscribeUsersPrams['openid'],$officialAccount['distribution_channel_id']); } } /** * 通过distribution_channel_id和openid获取素材强关映射关系 */ static function getMaterialForceSubscribeMapping($distribution_channel_id,$openid) { $result = array(); $result['uid'] = Redis::hget('book:linksubscribe:openid:'.$openid.':channelid:'.$distribution_channel_id,'uid'); $result['time'] = Redis::hget('book:linksubscribe:openid:'.$openid.':channelid:'.$distribution_channel_id,'time'); \Log::info('key:'.'book:linksubscribe:openid:'.$openid.':channelid:'.$distribution_channel_id); \Log::info('getMaterialForceSubscribeMapping:distribution_channel_id:'.$distribution_channel_id.' openid:'.$openid.' uid:'.$result['uid'].' time:'.$result['time']); return $result; } /** * 获取所有强关用户 */ static function forceSubscribeUsersAllOf() { return ForceSubscribeUsers::forceSubscribeUsersAllOf(); } /** * 修改切换的 */ static function updateSubscribeUserTransfer($distribution_channel_id,$uid,$from_appid,$to_appid,$to_openid) { return ForceSubscribeUsers::updateSubscribeUserTransfer($distribution_channel_id,$uid,$from_appid,$to_appid,$to_openid); } /** * 通过uid获取强关用户 */ static function forceSubscribeUsersByUid($forceSubscribeUsersPrams) { return ForceSubscribeUsers::forceSubscribeUsersByUid($forceSubscribeUsersPrams['uid']); } static function allForceSubscribeUsersByUid($forceSubscribeUsersPrams) { return ForceSubscribeUsers::allForceSubscribeUsersByUid($forceSubscribeUsersPrams['uid']); } /** * 根据distribution_channel_id获取强关用户 */ static function forceSubscribeUsersByChannelidAndTimeset($forceSubscribeUsersPrams) { return ForceSubscribeUsers::forceSubscribeUsersByChannelidAndTimeset($forceSubscribeUsersPrams['distribution_channel_id'],$forceSubscribeUsersPrams['timeset']); } /** * 获取关注12小时的新用户 */ static function forceSubscribeNewUsersByTimeset($forceSubscribeUsersPrams) { return ForceSubscribeUsers::forceSubscribeNewUsersByTimeset($forceSubscribeUsersPrams['distribution_channel_id'],$forceSubscribeUsersPrams['timeset']); } /** * 获取未付费的新关用户24-48小时 */ static function forceSubscribeNewUnpaidUsersByTime($forceSubscribeUsersPrams) { return ForceSubscribeUsers::forceSubscribeNewUnpaidUsersByTime($forceSubscribeUsersPrams['distribution_channel_id'],$forceSubscribeUsersPrams['start_time'],$forceSubscribeUsersPrams['end_time']); } /** * 通过uid和appid获取强关用户 */ static function forceSubscribeUsersByUidAndAppidAndChannelId($forceSubscribeUsersPrams) { return ForceSubscribeUsers::forceSubscribeUsersByUidAndAppidAndChannelId($forceSubscribeUsersPrams['uid'],$forceSubscribeUsersPrams['appid'],$forceSubscribeUsersPrams['distribution_channel_id']); } /** * 通过openid获取强关用户 */ static function forceSubscribeUsersByOpenid($forceSubscribeUsersPrams) { return ForceSubscribeUsers::forceSubscribeUsersByOpenid($forceSubscribeUsersPrams['openid']); } /** * 通过openid获取性别 */ static function getSexByOpenid($distribution_channel_id,$openid) { return ForceSubscribeUsers::getSexByOpenid($distribution_channel_id,$openid); } /** * 通过openid获取性别,只根据强关书的性别 */ static function getSimpleSexByOpenid($distribution_channel_id,$openid) { return ForceSubscribeUsers::getSimpleSexByOpenid($distribution_channel_id,$openid); } /** * 通过uid获取性别,只根据强关书的性别 */ static function getSimpleSexByUid($uid) { return ForceSubscribeUsers::getSimpleSexByUid($uid); } /** * 通过uid获取强关用户 包括取关用户 */ static function forceSubscribeUsersByUidIncludeCancel($forceSubscribeUsersPrams){ return ForceSubscribeUsers::forceSubscribeUsersByUidIncludeCancel($forceSubscribeUsersPrams['uid']); } /** * 通过openid,appid,distribution_channel_id获取强关用户 */ static function forceSubscribeUsersByOpenidAndAppidAndChannelId($forceSubscribeUsersPrams) { return ForceSubscribeUsers::forceSubscribeUsersByOpenidAndAC($forceSubscribeUsersPrams['openid'],$forceSubscribeUsersPrams['appid'],$forceSubscribeUsersPrams['distribution_channel_id']); } static public function add_subscribe_statistics($uid){ try { \Log::info('add_subscribe_statistics_start:'.$uid); $send_data = array( 'type' => 'subscribe', 'data' => ['openid'=>'','uid'=>$uid] ); $send = new \App\Jobs\SendStatisticsList($send_data); $job = ($send)->onConnection('rabbitmq')->delay(0)->onQueue('send_statistics_list'); dispatch($job); } catch (\Exception $e) { \Log::info('add_subscribe_statistics_ept:'.$e->getMessage()); } } /** * 增加强关用户 */ static function addForceSubscribeUsers($forceSubscribeUsersPrams) { try { \Log::info('~~~~~~~~~~~~~~~~~~~addForceSubscribeUsers~~~~~~~~~~~~~~~~~~~~'."\n"); $officialAccount = OfficialAccount::officialAccountByAppid($forceSubscribeUsersPrams['appid']); if (!empty($officialAccount)) { # code... $forceSubscribeUsers = ForceSubscribeUsers::forceSubscribeUsersByOpenidAndAC($forceSubscribeUsersPrams['openid'],$forceSubscribeUsersPrams['appid'],$officialAccount['distribution_channel_id']); // dd($forceSubscribeUsers); if(empty($forceSubscribeUsers)) { // $data = $request->all(); $bid = Redis::hget('force_subscribe_from_bid',$forceSubscribeUsersPrams['appid'].'_'.$forceSubscribeUsersPrams['uid']); if (empty($bid)) { # code... $bid = '0'; } $sendOrderId = Redis::hget('force_subscribe_from_send_order_id',$forceSubscribeUsersPrams['appid'].'_'.$forceSubscribeUsersPrams['uid']); if (empty($sendOrderId)) { # code... $sendOrderId = '0'; } if($bid && $sendOrderId){ $send_order_bid = Redis::hget('sendOrderIdToBid',$sendOrderId); if(!$send_order_bid){ $send_order_info = SendOrderService::getById($sendOrderId); if($send_order_info){ $send_order_bid = $send_order_info->book_id; Redis::hset('sendOrderIdToBid',$sendOrderId,$send_order_bid); } } if($send_order_bid && $bid == $send_order_bid){ $key = 'accurateSendOrderSubscribeNum:bid:%s:send_order_id:'.$sendOrderId; Redis::sadd(sprintf($key,$bid),$forceSubscribeUsersPrams['uid']); } } $data['is_subscribed'] = 1; $data['subscribe_time'] = date("Y-m-d H:i:s"); $data['last_interactive_time'] = $forceSubscribeUsersPrams['last_interactive_time']; $data['uid'] = $forceSubscribeUsersPrams['uid']; $data['appid'] = $forceSubscribeUsersPrams['appid']; $data['openid'] = $forceSubscribeUsersPrams['openid']; $data['distribution_channel_id'] = $forceSubscribeUsersPrams['distribution_channel_id']; $data['bid'] = $bid; $data['send_order_id'] = $sendOrderId; $data['official_account_id'] = isset($forceSubscribeUsersPrams['official_account_id'])?$forceSubscribeUsersPrams['official_account_id']:0; $forceSubscribeUsers = ForceSubscribeUsers::create($data); //Redis::hset('www.zhuishuyun.com'.'force_subscribe:scene:'.$forceSubscribeUsersPrams['uid'].':'.$forceSubscribeUsersPrams['appid'], 'is_subscribe', '[{is_subscribed:1},{subscribe_time:'.date("Y-m-d H:i:s").'}]'); //在Redis中记录一个appid下每天的强关用户数量 Redis::hincrby('day_appid_fans_nums_appid:add:'.$forceSubscribeUsersPrams['appid'],date("Y-m-d"),1); Redis::hincrby('day_appid_fans_nums_appid:add:'.$forceSubscribeUsersPrams['appid'],'total',1); // $user['openid'] = $forceSubscribeUsersPrams['openid']; // $user['unionid'] = $forceSubscribeUsersPrams['unionid']; // $user['distribution_channel_id'] = $forceSubscribeUsersPrams['distribution_channel_id']; $user['province'] = isset($forceSubscribeUsersPrams['province']) ? $forceSubscribeUsersPrams['province'] : ''; $user['nickname'] = isset($forceSubscribeUsersPrams['nick_name']) ? $forceSubscribeUsersPrams['nick_name'] : ''; $user['city'] = isset($forceSubscribeUsersPrams['city']) ? $forceSubscribeUsersPrams['city'] : ''; $user['country'] = isset($forceSubscribeUsersPrams['country']) ? $forceSubscribeUsersPrams['country'] : ''; $user['head_img'] = isset($forceSubscribeUsersPrams['headimgurl']) ? $forceSubscribeUsersPrams['headimgurl'] : ''; $user['sex'] = isset($forceSubscribeUsersPrams['sex']) ? $forceSubscribeUsersPrams['sex'] : ''; $user['id'] = isset($forceSubscribeUsersPrams['uid']) ? $forceSubscribeUsersPrams['uid'] : ''; \Log::info('~~~~~~~~~~~~~~~~~~~addForceSubscribeUsers~~~~~~~~~~~~~~~~~~~~'."\n"); \Log::info($user); UserService::updateInfo($user['id'],$user); // UserService::addUser($user); // 新关统计 \Log::info('addForceSubscribeUsers_redis_new:'.$forceSubscribeUsersPrams['uid']); $sub_key = 'gzh_new_sub:'.$forceSubscribeUsersPrams['appid'].':'.date('Y-m-d'); Redis::SADD($sub_key,$forceSubscribeUsersPrams['uid']); //Redis::EXPIRE($sub_key,24*3600*3); self::add_subscribe_statistics($forceSubscribeUsersPrams['uid']); return 1; } else { $forceSubscribeUsers['is_subscribed'] = 1; $forceSubscribeUsers['subscribe_time'] = date("Y-m-d H:i:s"); $forceSubscribeUsers->save(); //Redis::hset('www.zhuishuyun.com'.'force_subscribe:scene:'.$forceSubscribeUsersPrams['uid'].':'.$forceSubscribeUsersPrams['appid'], 'is_subscribe', '[{is_subscribed:1},{subscribe_time:'.date("Y-m-d H:i:s").'}]'); Redis::hincrby('day_appid_fans_nums_appid:add:'.$forceSubscribeUsersPrams['appid'],date("Y-m-d"),1); Redis::hincrby('day_appid_fans_nums_appid:add:'.$forceSubscribeUsersPrams['appid'],'total',1); // $user['openid'] = $forceSubscribeUsersPrams['openid']; // $user['unionid'] = $forceSubscribeUsersPrams['unionid']; // $user['distribution_channel_id'] = $forceSubscribeUsersPrams['distribution_channel_id']; $user['province'] = isset($forceSubscribeUsersPrams['province']) ? $forceSubscribeUsersPrams['province'] : ''; $user['nickname'] = isset($forceSubscribeUsersPrams['nick_name']) ? $forceSubscribeUsersPrams['nick_name'] : ''; $user['city'] = isset($forceSubscribeUsersPrams['city']) ? $forceSubscribeUsersPrams['city'] : ''; $user['country'] = isset($forceSubscribeUsersPrams['country']) ? $forceSubscribeUsersPrams['country'] : ''; $user['head_img'] = isset($forceSubscribeUsersPrams['headimgurl']) ? $forceSubscribeUsersPrams['headimgurl'] : ''; $user['sex'] = isset($forceSubscribeUsersPrams['sex']) ? $forceSubscribeUsersPrams['sex'] : ''; $user['id'] = isset($forceSubscribeUsersPrams['uid']) ? $forceSubscribeUsersPrams['uid'] : ''; \Log::info('~~~~~~~~~~~~~~~~~addForceSubscribeUsers~~~~~~~~~~~~~~~~'."\n"); //\Log::info($user); UserService::updateInfo($user['id'],$user); // 老关统计 \Log::info('addForceSubscribeUsers_redis_old:'.$forceSubscribeUsersPrams['uid']); $sub_key = 'gzh_old_sub:'.$forceSubscribeUsersPrams['appid'].':'.date('Y-m-d'); Redis::SADD($sub_key,$forceSubscribeUsersPrams['uid']); Redis::EXPIRE($sub_key,24*3600*3); self::add_subscribe_statistics($forceSubscribeUsersPrams['uid']); return 1; } } } catch (\Exception $e) { // \Log($e); return 0; } } /** * 更新强关用户uid */ static function updateSubscribeUsersUid($forceSubscribeUsersPrams) { try { $forceSubscribeUsers = ForceSubscribeUsers::getOneForceSubscribeUsersByOpenid($forceSubscribeUsersPrams['openid']); if(empty($forceSubscribeUsers)) { return 2; } else { \Log::info('updateSubscribeUsersUid,openid'. $forceSubscribeUsersPrams['openid']. ' old_uid:'.$forceSubscribeUsers->uid.' new_uid:'.$forceSubscribeUsersPrams['uid']); $forceSubscribeUsers['uid'] = $forceSubscribeUsersPrams['uid']; $forceSubscribeUsers->save(); return 1; } } catch (\Exception $e) { \Log::info($e->getMessage()); return 0; } } /** * 更新强关用户最后交互时间 */ static function forceSubscribeUsersLastTimeUpdate($forceSubscribeUsersPrams) { try { $forceSubscribeUsers = ForceSubscribeUsers::forceSubscribeUsersByOpenidAndAC($forceSubscribeUsersPrams['openid'],$forceSubscribeUsersPrams['appid'],$forceSubscribeUsersPrams['distribution_channel_id']); if(empty($forceSubscribeUsers)) { return 2; } else { $forceSubscribeUsers['last_interactive_time'] = $forceSubscribeUsersPrams['last_interactive_time']; $forceSubscribeUsers->save(); return 1; } } catch (\Exception $e) { // \Log($e); return 0; } } /** * 更新强关用户最后交互时间 */ static function tempForceSubscribeUsersLastTimeUpdate($forceSubscribeUsersPrams) { try { $forceSubscribeUsers = ForceSubscribeUsers::forceSubscribeUsersByOpenidAndAC($forceSubscribeUsersPrams['openid'],$forceSubscribeUsersPrams['appid'],$forceSubscribeUsersPrams['distribution_channel_id']); // \Log::info('tempForceSubscribeUsersLastTimeUpdate:'.json_encode($forceSubscribeUsers)); if(empty($forceSubscribeUsers)) { \Log::info('empty_origin_update_temp_force_subscribe_user:'.$forceSubscribeUsersPrams['openid']); return 2; } else { $tempForceSubscribeUsers = TempForceSubscribeUsers::forceSubscribeUsersByOpenidAndAC($forceSubscribeUsersPrams['openid'],$forceSubscribeUsersPrams['appid'],$forceSubscribeUsersPrams['distribution_channel_id']); if(!empty($tempForceSubscribeUsers)){ \Log::info('exist_update_temp_force_subscribe_user2:'.$forceSubscribeUsersPrams['openid']); $tempForceSubscribeUsers->last_interactive_time = $forceSubscribeUsers->last_interactive_time; $tempForceSubscribeUsers->bid = $forceSubscribeUsers->bid; $tempForceSubscribeUsers->is_subscribed = $forceSubscribeUsers->is_subscribed; $tempForceSubscribeUsers->subscribe_time = $forceSubscribeUsers->subscribe_time; $tempForceSubscribeUsers->unsubscribe_time = $forceSubscribeUsers->unsubscribe_time; // 跨渠道迁移的bug $tempForceSubscribeUsers->distribution_channel_id = $forceSubscribeUsers->distribution_channel_id; $tempForceSubscribeUsers->uid = $forceSubscribeUsers->uid; // \Log::info('$tempForceSubscribeUsers:'.json_encode($tempForceSubscribeUsers)); $tempForceSubscribeUsers->save(); } else{ $tempForceSubscribeUsers = [ 'uid'=>$forceSubscribeUsers->uid, 'openid'=>$forceSubscribeUsers->openid, 'appid'=>$forceSubscribeUsers->appid, 'bid'=>$forceSubscribeUsers->bid, 'is_subscribed'=>$forceSubscribeUsers->is_subscribed, 'subscribe_time'=>$forceSubscribeUsers->subscribe_time, 'unsubscribe_time'=>$forceSubscribeUsers->unsubscribe_time, 'distribution_channel_id'=>$forceSubscribeUsers->distribution_channel_id, 'last_interactive_time'=>$forceSubscribeUsersPrams['last_interactive_time'], ]; \Log::info('not_exist_create_temp_force_subscribe_user:'.$forceSubscribeUsersPrams['openid']); TempForceSubscribeUsers::firstOrCreate($tempForceSubscribeUsers); } return 1; } } catch (\Exception $e) { \Log::info('tempForceSubscribeUsersLastTimeUpdate_ept:'.$e->getMessage()); return 0; } } static function getOfficalAccountNickName($uid) { return ForceSubscribeUsers::getOfficalAccountNickName($uid); } /** * 强关用户取关 */ static function cancelForceSubscribeUsers($forceSubscribeUsersPrams) { try { \Log::info('cancelForceSubscribeUsers_start:'.$forceSubscribeUsersPrams['openid']); $forceSubscribeUsers = ForceSubscribeUsers::forceAllSubscribeUsersByOpenid($forceSubscribeUsersPrams['openid']); if(count($forceSubscribeUsers)>0) { for ($i=0; $i < count($forceSubscribeUsers); $i++) { # code... $cancelforceSubscribeUsers = $forceSubscribeUsers[$i]; $cancelforceSubscribeUsers['is_subscribed'] = 0; $cancelforceSubscribeUsers['unsubscribe_time'] = date("Y-m-d H:i:s"); $cancelforceSubscribeUsers->save(); \Log::info('cancelForceSubscribeUsers_id:'.$cancelforceSubscribeUsers->id); Redis::hincrby('day_appid_fans_nums_appid:cancel:'.$forceSubscribeUsersPrams['appid'],date("Y-m-d"),1); Redis::hincrby('day_appid_fans_nums_appid:cancel:'.$forceSubscribeUsersPrams['appid'],'total',1); $theCancelForceSubscribeUserArray = $cancelforceSubscribeUsers->toArray(); $send_data=array( 'type'=>'unsubscribe_user', 'data' => $theCancelForceSubscribeUserArray ); $delay = 0; $job = (new SendStatisticsList($send_data))->onConnection('rabbitmq')->delay($delay)->onQueue('send_statistics_list'); dispatch($job); } return 1; } else { return 2; } } catch (\Exception $e) { \Log::info('cancelForceSubscribeUsers_ept:'.$e->getMessage()); return 0; } } /** * 强制关注 */ static function subscribeForceSubscribeUsers($forceSubscribeUsersPrams) { try { // 老关统计 \Log::info('subscribeForceSubscribeUsers_redis_old:'.$forceSubscribeUsersPrams['uid']); $sub_key = 'gzh_old_sub:'.$forceSubscribeUsersPrams['appid'].':'.date('Y-m-d'); Redis::SADD($sub_key,$forceSubscribeUsersPrams['uid']); Redis::EXPIRE($sub_key,24*3600*3); self::add_subscribe_statistics($forceSubscribeUsersPrams['uid']); $forceSubscribeUsers = ForceSubscribeUsers::forceAllUnSubscribeUsersByOpenid($forceSubscribeUsersPrams['openid']); // \Log::info($forceSubscribeUsers); if(count($forceSubscribeUsers)>0) { // \Log::info(count($forceSubscribeUsers)); for ($i=0; $i < count($forceSubscribeUsers); $i++) { # code... // \Log::info($forceSubscribeUsers[$i]['is_subscribed']); // \Log::info($forceSubscribeUsers[$i]['subscribe_time']); $forceSubscribeUsers[$i]['is_subscribed'] = 1; $forceSubscribeUsers[$i]['subscribe_time'] = date("Y-m-d H:i:s"); $forceSubscribeUsers[$i]['last_interactive_time'] = date("Y-m-d H:i:s"); $forceSubscribeUsers[$i]->save(); Redis::hincrby('day_appid_fans_nums_appid:add:'.$forceSubscribeUsersPrams['appid'],date("Y-m-d"),1); Redis::hincrby('day_appid_fans_nums_appid:add:'.$forceSubscribeUsersPrams['appid'],'total',1); //Redis::hset('www.zhuishuyun.com'.'force_subscribe:scene:'.$forceSubscribeUsers[$i]['uid'].':'.$forceSubscribeUsersPrams['appid'], 'is_subscribe', '[{is_subscribed:1},{subscribe_time:'.date("Y-m-d H:i:s").'}]'); } return 1; } else { return 2; } } catch (\Exception $e) { \Log::info('subscribeForceSubscribeUsers_ept:'.$e->getMessage()); return 0; } } /** * temp表强制关注 */ static function tempSubscribeForceSubscribeUsers($forceSubscribeUsersPrams) { try { \Log::info('tempSubscribeForceSubscribeUsers2:'.$forceSubscribeUsersPrams['openid']); $forceSubscribeUsers = TempForceSubscribeUsers::forceAllUnSubscribeUsersByOpenid($forceSubscribeUsersPrams['openid']); if(count($forceSubscribeUsers)>0) { for ($i=0; $i < count($forceSubscribeUsers); $i++) { $forceSubscribeUsers[$i]['is_subscribed'] = 1; $forceSubscribeUsers[$i]['subscribe_time'] = date("Y-m-d H:i:s"); $forceSubscribeUsers[$i]['last_interactive_time'] = date("Y-m-d H:i:s"); $forceSubscribeUsers[$i]->save(); } return 1; } else { return 2; } } catch (\Exception $e) { return 0; } } //获取推广带来的净关粉丝总数 static function getFansNum($send_order_id) { return ForceSubscribeUsers::getFansNum($send_order_id); } //获取推广带来的新关粉丝总数 static function getNewFansNum($send_order_id) { return ForceSubscribeUsers::getNewFansNum($send_order_id); } //根据模板消息传的各项条件检索用户 static function forceUserCountByTemplatePrams($appids,$distribution_channel_id,$subscribe_time,$sex,$balance,$category_id,$order_type,$skip){ $forceSubscribes = ForceSubscribeUsers::forceUserCountByTemplatePrams($appids,$distribution_channel_id,$subscribe_time,$sex,$balance,$category_id,$order_type,$skip); return $forceSubscribes; } //根据客服消息传的各项条件检索用户 static function forceUserCountByCustomPrams($appids,$distribution_channel_id,$subscribe_time,$sex,$balance,$category_id,$order_type,$sign_time,$skip,$subscribe_time_attach=''){ $forceSubscribes = ForceSubscribeUsers::forceUserCountByCustomPrams($appids,$distribution_channel_id,$subscribe_time,$sex,$balance,$category_id,$order_type,$sign_time,$skip,$subscribe_time_attach); return $forceSubscribes; } // 指定用户的基础信息获取 static function simpleForceUserCountByPrams($uids, $param,$skip){ $forceSubscribes = ForceSubscribeUsers::simpleForceUserCountByPrams($uids, $param,$skip); return $forceSubscribes; } // 根据渠道号和日期获取强关用户数量 /** * startTime endTime 如果两个参数都传会查询这两个时间段内的的强关用户数量 * startTime endTime 如果只传一个,则会查询当天的强关用户数量,传哪个都可以 * startTime endTime 如果都不传, 则会获取该渠道下的所有强关用户数量 */ static function forceSubscribeUserCountByChannelIdAndDate($distribution_channel_id,$startTime,$endTime){ return ForceSubscribeUsers::forceSubscribeUserCountByChannelIdAndDate($distribution_channel_id,$startTime,$endTime); } /** * 获取全服务号粉丝 */ static function getFullOfficialAccountUsers($appid,$next_openid){ // \Log::info('getFullOfficialAccountUsers_start,appid:'.$appid.' next_openid:'.$next_openid); $result = array(); try { $timestamp = time(); $params = array("next_openid"=>$next_openid,'gzh_app_id'=>$appid,"timestamp"=>$timestamp); $sign = get_sign($params); $res = self::getUserClient()->request("GET","get_full_official_account_users", ['query'=>['next_openid'=>$next_openid,'gzh_app_id'=>$appid,'timestamp'=>$timestamp,'sign'=>$sign],'connect_timeout' => 10] )->getBody()->getContents(); // \Log::info($res); $res = object_to_array(json_decode($res)); // 组装格式,方便后面统一处理 $openids= isset($res['data']['data']['openid'])?$res['data']['data']['openid']:array(); $result['openids'] = array(); if(!empty($openids)){ foreach($openids as $key=> $openid){ $result['openids'][$key]['openid'] = $openid; } } $result['next_openid'] = isset($res['data']['next_openid'])?$res['data']['next_openid']:''; $result['count'] = isset($res['data']['count'])?$res['data']['count']:0; $result['total'] = isset($res['data']['total'])?$res['data']['total']:0; //\Log::info('getFullOfficialAccountUsers_end,appid:'.$appid.' next_openid:'.$result['next_openid'].' count:'.$result['count'].' total:'.$result['total'].' num:'.count($result['openids'])); } catch (\Exception $e) { \Log::info($e); } return $result; } /** * 获取客服消息有效公众号用户 */ static function getCustomActiveOfficialAccountUsers($appid,$next_openid) { $result = array(); try { $key = 'gzh_custom:openid:'.$appid; $start = !$next_openid ? 0 : Redis::zrank($key,$next_openid); $end = $start + 10000; $total = 0; $openids = Redis::zrangebyscore($key,$start,$end); $result['openids'] = array(); if($openids){ foreach($openids as $key=> $openid){ $result['openids'][$key]['openid'] = $openid; } } $result['next_openid'] = 0; $result['count'] = count($openids); $result['total'] = 100; } catch (\Exception $e) { \Log::info($e); } return $result; } /** * 获取单个粉丝信息 */ static function getUserInfo($appid,$openid){ \Log::info('getUserInfo_start,appid:'.$appid.' openid:'.$openid); $result = array(); try { $timestamp = time(); $params = array("openid"=>$openid,'gzh_app_id'=>$appid,"timestamp"=>$timestamp); $sign = get_sign($params); $res = self::getUserClient()->request("GET","get_userinfo", ['query'=>['openid'=>$openid,'gzh_app_id'=>$appid,'timestamp'=>$timestamp,'sign'=>$sign],'connect_timeout' => 10] )->getBody()->getContents(); $res = object_to_array(json_decode($res)); $result['nickname'] = isset($res['data']['nickname'])?$res['data']['nickname']:0; \Log::info('getUserInfo_end,appid:'.$appid.' openid:'.$openid.' nickname:'.$result['nickname']); } catch (\Exception $e) { \Log::info('getUserInfo_ept:'.$e->getMessage()); } return $result; } static function getUserInfoAll($appid,$openid){ \Log::info('getUserInfo_start,appid:'.$appid.' openid:'.$openid); $result = array(); try { $timestamp = time(); $params = array("openid"=>$openid,'gzh_app_id'=>$appid,"timestamp"=>$timestamp); $sign = get_sign($params); $res = self::getUserClient()->request("GET","get_userinfo", ['query'=>['openid'=>$openid,'gzh_app_id'=>$appid,'timestamp'=>$timestamp,'sign'=>$sign],'connect_timeout' => 10] )->getBody()->getContents(); $res = object_to_array(json_decode($res)); if(isset($res['data']) && !empty($res['data'])){ return $res['data']; } } catch (\Exception $e) { \Log::info('getUserInfo_ept:'.$e->getMessage()); } return $result; } /** * 占位符替换 * @param unknown_type $content * @param unknown_type $type * @return string */ static public function change_placeholder($content,$params){ \Log::info('change_placeholder_before:'.$content); $wx_name = isset($params['nickname'])?$params['nickname']:''; $content = str_replace('{wx_name}',$wx_name,$content); \Log::info('change_placeholder_end:'.$content); return $content; } static public function getUserClient(){ return new Client(['base_uri' => env('MEDIA_API_BASE_URI')]); } /** * 获取派单的枪管用户 * @param int $send_order_id * @param int $distribution_channel_id * @return mixed */ static public function getUidByParam(int $send_order_id,int $distribution_channel_id){ return ForceSubscribeUsers::where('send_order_id',$send_order_id)->where('distribution_channel_id',$distribution_channel_id)->select('uid')->limit(100)->get(); } /** * 获取云栖迁移的特殊回复 * @param unknown_type $distribution_channel_id * @param unknown_type $openid */ static public function getYqMoveReply($distribution_channel_id,$openid){ $text = ''; $encode_distribution_channel_id = encodeDistributionChannelId($distribution_channel_id); // 检查是否第一次 $move_user = YqMove::getUser($distribution_channel_id,$openid); // 是否订阅大于50章的用户 $is_big_50_user = isset($move_user['read_count']) && $move_user['read_count'] >= 50 ? '1':'0'; $yq_distribution_channel_id = isset($move_user['yq_distribution_channel_id']) && $move_user['yq_distribution_channel_id'] ? $move_user['yq_distribution_channel_id']:$distribution_channel_id; $encode_yq_distribution_channel_id = encodeDistributionChannelId($yq_distribution_channel_id); $not_recommend_old_sites = array('4042','4043','4044'); \Log::info('getYqMoveReply:zsy_distribution_channel_id:'.$distribution_channel_id.' yq_distribution_channel_id:'.$yq_distribution_channel_id.' openid:'.$openid.' is_big_50_user:'.$is_big_50_user); // 已经迁移过用户的文案 if(!empty($move_user)){ if($is_big_50_user == '0'){ $text = "<a href='".env('PROTOCOL')."://site".$encode_distribution_channel_id.".".env('CUSTOM_HOST').".com'>点击进入新站</a>\n\n"; $text .= "<a href='".env('PROTOCOL')."://site".$encode_distribution_channel_id.".".env('CUSTOM_HOST').".com/recent'>点击查看最近阅读</a>"; }else{ if(in_array($distribution_channel_id,$not_recommend_old_sites)){ \Log::info('not_recommend_old_site:'.$distribution_channel_id.' openid:'.$openid); $text = "<a href='".env('PROTOCOL')."://site".$encode_distribution_channel_id.".".env('CUSTOM_HOST').".com'>点击进入新站</a>\n\n"; $text .= "<a href='".env('PROTOCOL')."://site".$encode_distribution_channel_id.".".env('CUSTOM_HOST').".com/recent'>点击查看最近阅读</a>"; }else{ $text = "<a href='".env('PROTOCOL')."://site".$encode_distribution_channel_id.".".env('CUSTOM_HOST').".com/recent'>追书云:点此进入新站,看海量优质小说</a>\n\n". "<a href='http://site".$encode_yq_distribution_channel_id."."."imycmh".".com/recent'>云栖:点此进入老站继续阅读 </a>\n"; } } } // 第一次回复的文案 else { $text = "<a href='".env('PROTOCOL')."://site".$encode_distribution_channel_id.".".env('CUSTOM_HOST').".com'>点击进入新站</a>\n\n"; $text .= "<a href='".env('PROTOCOL')."://site".$encode_distribution_channel_id.".".env('CUSTOM_HOST').".com/recent'>点击查看最近阅读</a>"; } return $text; } /** * @param $distribution_channel * 获取老用户关注数 */ public static function getOldUserNewSubsribeNum($params){ return ForceSubscribeUsers::getOldUserNewSubsribeNum($params); } /** * 临时表数据更新 客服消息交互修改后版本 */ static function updateTempForceUser($params) { TempForceSubscribeUsers::updateInfo($params); } /** * 获取强关用户属性 * @param $openids */ static function getForceUsersNickname($openids = []) { return ForceSubscribeUserProperty::getForceUsersNickname($openids); } static function getForceUsersNicknameByOpenid($openid){ $nick_name_info = ForceSubscribeUserProperty::getForceUsersNicknameByOpenid($openid); if($nick_name_info){ return $nick_name_info->current_nickname; } return ''; } }