123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512 |
- <?php
- namespace App\Modules\OfficialAccount\Models;
- use Illuminate\Database\Eloquent\Model;
- use App\Modules\OfficialAccount\Models\TempForceSubscribeUsers;
- use DB;
- use App\Modules\User\Services\UserService;
- class ForceSubscribeUsers extends Model
- {
- protected $connection = 'api_mysql';
- protected $tables = 'force_subscribe_users';
- protected $fillable = ['uid', 'official_account_id', 'distribution_channel_id', 'appid', 'openid', 'is_subscribed', 'subscribe_time', 'unsubscribe_time', 'last_interactive_time', 'bid', 'send_order_id'];
- /**
- * 根据openid和appid获取强关用户
- */
- static function forceSubscribeUsersByAppidAndOpenId($appid, $openid)
- {
- return self::where(['appid' => isset($appid) ? $appid : '', 'openid' => isset($openid) ? $openid : ''])->first();
- }
- /**
- * 获取所有强关用户
- */
- static function forceSubscribeUsersAllOf()
- {
- return self::where('is_subscribed', 1)->get();
- }
-
- /**
- * 修改公众号迁移用户数据
- */
- static function updateSubscribeUserTransfer($distribution_channel_id,$uid,$from_appid,$to_appid,$to_openid){
- return self::where(['distribution_channel_id'=>$distribution_channel_id,'uid'=>$uid,'appid'=>$from_appid])->update(['appid'=>$to_appid,'openid'=>$to_openid,'updated_at'=>date('Y-m-d H:i:s')]);
- }
- /**
- * 根据uid获取强关用户
- */
- static function forceSubscribeUsersByUid($uid)
- {
- return self::where(['uid' => $uid, 'is_subscribed' => 1])->first();
- }
-
- /**
- * 根据uid获取强关用户
- */
- static function allForceSubscribeUsersByUid($uid)
- {
-
- return self::where(['uid' => $uid, 'is_subscribed' => 1])->get();
-
- }
- /**
- * 根据distribution_channel_id获取强关用户
- */
- static function forceSubscribeUsersByChannelidAndTimeset($distribution_channel_id, $timeset)
- {
- $lastTime = date('Y-m-d H:i:s', time() - $timeset);
- return self::where(['distribution_channel_id' => $distribution_channel_id, 'is_subscribed' => 1])->where('last_interactive_time', '<', $lastTime)->get();
- }
- /**
- * 根据distribution_channel_id获取强关用户
- */
- static function forceSubscribeNewUsersByTimeset($distribution_channel_id, $timeset)
- {
- $lastTime = date('Y-m-d H:i:s', time() - $timeset);
- return self::where(['distribution_channel_id' => $distribution_channel_id, 'is_subscribed' => 1])->where('created_at', '<', $lastTime)->where('created_at', '>', date('Y-m-d H:i:s', strtotime('-2 day')))->get();
- // return self::where(['distribution_channel_id'=>$distribution_channel_id,'is_subscribed'=>1])->where('created_at','<',$lastTime)->get();
- }
- /**
- * 根据distribution_channel_id获取未付费的强关用户
- */
- static function forceSubscribeNewUnpaidUsersByTime($distribution_channel_id, $start_time,$end_time)
- {
- // return self::where('distribution_channel_id',$distribution_channel_id)
- // ->where('is_subscribed', 1)
- // ->where('created_at', '<', $end_time)
- // ->where('created_at', '>=', $start_time)
- // ->whereNotExists(function ($query) {
- // $query->select('uid')
- // ->from('orders')
- // ->where('orders.uid', '=', 'force_subscribe_users.uid') // TODO用框架这里有bug
- // ->where('orders.status', 'PAID')
- // ->limit(1);
- // })->skip(0)->take(20000)->get();
- $data = DB::select(
- "select force_subscribe_users.* from force_subscribe_users
- where distribution_channel_id = '{$distribution_channel_id}'
- and is_subscribed = 1
- and created_at < '{$end_time}'
- and created_at >= '{$start_time}'
- and not exists (select uid from orders where orders.uid=force_subscribe_users.uid and orders.status='PAID' limit 1 )
- limit 20000
- "
- );
- return object_to_array($data);
- }
-
- /**
- * 根据uid和appid获取强关用户
- */
- static function forceSubscribeUsersByUidAndAppidAndChannelId($uid, $appid, $distribution_channel_id)
- {
- $query = self::where(['uid' => $uid, 'distribution_channel_id' => $distribution_channel_id, 'is_subscribed' => 1]);
- $appidArray = explode(',', $appid);
- return $query->wherein('appid', $appidArray)->get();
- }
- /**
- * 根据uid获取强关用户包括取关的用户
- */
- static function forceSubscribeUsersByUidIncludeCancel($uid)
- {
- return self::where(['uid' => $uid])->first();
- }
- /**
- * 根据openid获取一个强关用户
- */
- static function forceSubscribeUsersByOpenid($openid, $appid = '')
- {
- return self::where(['openid' => $openid, 'is_subscribed' => 1])->first();
- }
- /**
- * openid获取强关用户
- */
- static function getOneForceSubscribeUsersByOpenid($openid)
- {
- return self::where('openid', $openid)->first();
- }
- /**
- * 根据openid获取所有强关用户
- */
- static function forceAllSubscribeUsersByOpenid($openid)
- {
- return self::where(['openid' => $openid, 'is_subscribed' => 1])->get();
- }
- /**
- * 根据openid获取强关用户
- */
- static function forceSubscribeUsersByOpenidAndAC($openid, $appid = '', $distribution_channel_id = '')
- {
- $query = self::where('openid', $openid);
- if ($appid) {
- # code...
- $query->where('appid', $appid);
- }
- if ($distribution_channel_id) {
- # code...
- $query->where('distribution_channel_id', $distribution_channel_id);
- }
- return $query->first();
- }
- /**
- * 根据渠道号和日期获取强关用户数量
- */
- static function forceSubscribeUserCountByChannelIdAndDate($distribution_channel_id, $startTime = '', $endTime = '')
- {
- $query = self::orderBy('id', 'desc');
- $distribution_channel_id && $query->where('distribution_channel_id', $distribution_channel_id);
- if ($startTime && $endTime) {
- $query->where('created_at', '>=', date('Y-m-d H:i:s', strtotime($startTime)))->where('created_at', '<', date('Y-m-d H:i:s', strtotime($endTime) + 1 * 86400));
- } elseif ($startTime) {
- # code...
- $end_time = date("Y-m-d",strtotime($startTime)+86400);
- //$query->whereDate('created_at', $startTime);
- $query->where('created_at', '>=',$startTime)->where('created_at', '<',$end_time);
- } elseif ($endTime) {
- # code...
- $end_time = date("Y-m-d",strtotime($endTime)+86400);
- //$query->whereDate('created_at', $endTime);
- $query->where('created_at', '>=',$endTime)->where('created_at', '<',$end_time);
- }
- return $query->count();
- }
- /**
- * 根据openid获取强关用户
- */
- static function forceSubscribeUsersByOpenidAndChannelId($openid, $distribution_channel_id)
- {
- return self::where(['openid' => $openid, 'distribution_channel_id' => $distribution_channel_id])->first();
- }
- /**
- * 根据openid获取一个取关用户
- */
- static function forceUnSubscribeUsersByOpenid($openid)
- {
- return self::where(['openid' => $openid, 'is_subscribed' => 0])->first();
- }
- /**
- * 根据openid获取全部取关用户
- */
- static function forceAllUnSubscribeUsersByOpenid($openid)
- {
- return self::where(['openid' => $openid, 'is_subscribed' => 0])->get();
- }
- /**
- * 根据appid获取强关用户
- */
- static function forceSubscribeUsersByAppid($appid)
- {
- return self::where(['appid' => $appid, 'is_subscribed' => 1])->get();
- }
-
- /**
- * 根据appid获取强关用户数量
- */
- static function forceSubscribeUsersCountByAppid($appid)
- {
-
- return self::where(['appid' => $appid, 'is_subscribed' => 1])->count();
-
- }
-
- /**
- * 根据appid获取今日新增粉丝数
- */
- static function todayForceSubscribeUsers($appid)
- {
- // dd($appid);
- // return 0;
- $subscribe_time = date("Y-m-d");
- $end_time = date("Y-m-d",strtotime($subscribe_time)+86400);
- //return self::where(['appid' => $appid, 'is_subscribed' => 1])->whereDate('subscribe_time', $subscribe_time)->count();
- return self::where(['appid' => $appid, 'is_subscribed' => 1])->where('subscribe_time', '>=',$subscribe_time)->where('subscribe_time', '<',$end_time)->count();
- }
- /**
- * 根据appid获取粉丝总数
- */
- static function allForceSubscribeUsers($appid)
- {
- return self::where(['appid' => $appid, 'is_subscribed' => 1])->count();
- }
- //获取推广带来的净关粉丝总数
- static function getFansNum($send_order_id)
- {
- return self::where('send_order_id', $send_order_id)->where('is_subscribed', 1)->count();
- }
- //获取推广带来的新关粉丝总数
- static function getNewFansNum($send_order_id)
- {
- return self::where('send_order_id', $send_order_id)->count();
- }
- //根据模板消息传的各项条件检索用户
- static function forceUserCountByTemplatePrams($appids, $distribution_channel_id, $subscribe_time = '', $sex = '', $balance = '', $category_id = '', $order_type = '', $skip = 0)
- {
- $query = self::leftJoin('users', 'users.id', '=', 'force_subscribe_users.uid')
- ->select('force_subscribe_users.id', 'force_subscribe_users.uid', 'force_subscribe_users.official_account_id', 'force_subscribe_users.distribution_channel_id', 'force_subscribe_users.appid', 'force_subscribe_users.openid', 'force_subscribe_users.is_subscribed', 'force_subscribe_users.subscribe_time', 'force_subscribe_users.unsubscribe_time', 'force_subscribe_users.last_interactive_time', 'force_subscribe_users.bid',
- 'users.nickname');
- $query->where('force_subscribe_users.distribution_channel_id', $distribution_channel_id);
- $query->where('force_subscribe_users.is_subscribed', 1);
- $appidArray = explode(',', $appids);
- $query->wherein('force_subscribe_users.appid', $appidArray);
- if ($subscribe_time) {
- # code...
- switch ($subscribe_time) {
- case 'a':
- # code...
- $selTime = date('Y-m-d H:i:s', strtotime('-5 day'));
- $query->where('subscribe_time', '>', $selTime);
- break;
- case 'b':
- # code...
- $selTimeStart = date('Y-m-d H:i:s', strtotime('-5 day'));
- $selTimeEnd = date('Y-m-d H:i:s', strtotime('-15 day'));
- $query->where('subscribe_time', '<=', $selTimeStart);
- $query->where('subscribe_time', '>', $selTimeEnd);
- break;
- case 'c':
- # code...
- $selTimeStart = date('Y-m-d H:i:s', strtotime('-15 day'));
- $selTimeEnd = date('Y-m-d H:i:s', strtotime('-30 day'));
- $query->where('subscribe_time', '<=', $selTimeStart);
- $query->where('subscribe_time', '>', $selTimeEnd);
- break;
- case 'd':
- # code...
- $selTimeStart = date('Y-m-d H:i:s', strtotime('-30 day'));
- $query->where('subscribe_time', '<=', $selTimeStart);
- break;
- case 'e':
- # code...
- $selTimeStart = date('Y-m-d H:i:s', strtotime('-1 day'));
- $selTimeEnd = date('Y-m-d H:i:s');
- $query->where('subscribe_time', '<=', $selTimeEnd);
- $query->where('subscribe_time', '>', $selTimeStart);
- break;
- case 'f':
- # code...
- $selTimeStart = date('Y-m-d H:i:s', strtotime('-2 day'));
- $selTimeEnd = date('Y-m-d H:i:s', strtotime('-1 day'));
- $query->where('subscribe_time', '<=', $selTimeEnd);
- $query->where('subscribe_time', '>', $selTimeStart);
- break;
- default:
- # code...
- break;
- }
- }
- if ($sex || $balance) {
- if ($sex) {
- # code...
- switch ($sex) {
- case 'a':
- # code...
- $query->where('users.sex', 1);
- break;
- case 'b':
- # code...
- $query->where('users.sex', 2);
- break;
- default:
- # code...
- break;
- }
- }
- if ($balance) {
- # code...
- switch ($balance) {
- case 'a':
- # code...
- $query->where('users.balance', '<', 500);
- break;
- case 'b':
- # code...
- $query->where('users.balance', '>=', 500);
- $query->where('users.balance', '<', 2000);
- break;
- case 'c':
- # code...
- $query->where('users.balance', '>=', 2000);
- $query->where('users.balance', '<', 5000);
- break;
- default:
- # code...
- break;
- }
- }
- }
- if ($category_id) {
- if ($category_id != 'z') {
- # code...
- $query->join('books', 'force_subscribe_users.bid', '=','books.id');
- $categoryArray = explode(',', $category_id);
- $query->wherein('books.category_id', $categoryArray);
- // $query->where('books.category_id',$category_id);
- }
- }
- if ($order_type) {
- switch ($order_type) {
- case 'a':
- # code...
- //未消费用户
- $query->whereNotExists(function ($query) {
- $query->select(DB::raw(1))
- ->from('orders')
- ->whereRaw('orders.uid =force_subscribe_users.uid')
- ->whereRaw('orders.status="PAID"')
- ->limit(1);
- });
- break;
- case 'b':
- # code...
- //已消费用户
- $query->whereExists(function ($query) {
- $query->select(DB::raw(1))
- ->from('orders')
- ->whereRaw('orders.uid=force_subscribe_users.uid')
- ->whereRaw('orders.status="PAID"')
- ->limit(1);
- });
- break;
- case 'c':
- # code...
- //包年用户
- $query->whereExists(function ($query) {
- $query->select('uid')
- ->from('year_orders')
- ->whereRaw('year_orders.uid = force_subscribe_users.uid')
- ->where('year_orders.begin_time', '<', date('Y-m-d H:i:s'))
- ->where('year_orders.end_time', '>', date('Y-m-d H:i:s'))
- ->limit(1);
- });
-
- break;
- case 'd':
- # code...
- //昨天消费用户
- $query->whereExists(function ($query) {
- $query->select('uid')
- ->from('orders')
- ->whereRaw('orders.uid=force_subscribe_users.uid')
- ->whereRaw('orders.status="PAID"')
- ->where('orders.created_at', '>=',date('Y-m-d',strtotime('-1 day')))
- ->where('orders.created_at', '<',date('Y-m-d'))
- ->limit(1);
- });
-
- break;
- default:
- # code...
- break;
- }
- }
- // dd($query->get());
- return $query->skip($skip)->take(10000)->get();
- }
- //根据客服消息传的各项条件检索用户,精确到appid级别
- static function forceUserCountByCustomPrams($appids, $distribution_channel_id, $subscribe_time = '', $sex = '', $balance = '', $category_id = '', $order_type = '', $sign_time = '', $skip = 0)
- {
- $canSendDate = date('Y-m-d H:i:s', strtotime('-2 day'));
- # 缓存表
- $query = TempForceSubscribeUsers::select('temp_force_subscribe_users.id', 'temp_force_subscribe_users.uid', 'temp_force_subscribe_users.distribution_channel_id', 'temp_force_subscribe_users.appid', 'temp_force_subscribe_users.openid',
- 'temp_force_subscribe_users.is_subscribed', 'temp_force_subscribe_users.subscribe_time', 'temp_force_subscribe_users.unsubscribe_time', 'temp_force_subscribe_users.last_interactive_time', 'temp_force_subscribe_users.bid');
- $query->where('temp_force_subscribe_users.last_interactive_time', '>', $canSendDate);
-
- $query->where('temp_force_subscribe_users.distribution_channel_id', $distribution_channel_id);
- $query->where('temp_force_subscribe_users.is_subscribed', 1);
- $appidArray = explode(',', $appids);
- $query->wherein('temp_force_subscribe_users.appid', $appidArray);
- if ($subscribe_time) {
- # code...
- switch ($subscribe_time) {
- case 'a':
- # code...
- $selTime = date('Y-m-d H:i:s', strtotime('-5 day'));
- $query->where('subscribe_time', '>', $selTime);
- break;
- case 'b':
- # code...
- $selTimeStart = date('Y-m-d H:i:s', strtotime('-5 day'));
- $selTimeEnd = date('Y-m-d H:i:s', strtotime('-15 day'));
- $query->where('subscribe_time', '<=', $selTimeStart);
- $query->where('subscribe_time', '>', $selTimeEnd);
- break;
- case 'c':
- # code...
- $selTimeStart = date('Y-m-d H:i:s', strtotime('-15 day'));
- $selTimeEnd = date('Y-m-d H:i:s', strtotime('-30 day'));
- $query->where('subscribe_time', '<=', $selTimeStart);
- $query->where('subscribe_time', '>', $selTimeEnd);
- break;
- case 'd':
- # code...
- $selTimeStart = date('Y-m-d H:i:s', strtotime('-30 day'));
- $query->where('subscribe_time', '<=', $selTimeStart);
- break;
- case 'e':
- # code...
- $selTimeStart = date('Y-m-d H:i:s', strtotime('-1 day'));
- $selTimeEnd = date('Y-m-d H:i:s');
- $query->where('subscribe_time', '<=', $selTimeEnd);
- $query->where('subscribe_time', '>', $selTimeStart);
- break;
- case 'f':
- # code...
- $selTimeStart = date('Y-m-d H:i:s', strtotime('-2 day'));
- $selTimeEnd = date('Y-m-d H:i:s', strtotime('-1 day'));
- $query->where('subscribe_time', '<=', $selTimeEnd);
- $query->where('subscribe_time', '>', $selTimeStart);
- break;
- case 'g':
- # 客服消息专用,24小时前的老用户,不发给新用户
- $selTimeEnd = date('Y-m-d H:i:s', strtotime('-1 day'));
- $query->where('subscribe_time', '<=', $selTimeEnd);
- break;
- case 'h':
- // 关注10-50分钟之间
- $selTimeStart = date('Y-m-d H:i:s', strtotime('-50 min'));
- $selTimeEnd = date('Y-m-d H:i:s', strtotime('-10 min'));
- $query->where('subscribe_time', '<=', $selTimeEnd);
- $query->where('subscribe_time', '>', $selTimeStart);
- break;
- case 'i':
- # 关注时间 36小时-48小时
- $selTimeStart = date('Y-m-d H:i:s', strtotime('-48 hour'));
- $selTimeEnd = date('Y-m-d H:i:s', strtotime('-36 hour'));
- $query->where('subscribe_time', '<=', $selTimeEnd);
- $query->where('subscribe_time', '>', $selTimeStart);
- break;
- case 'j':
- # 关注时间 20小时-48小时
- $selTimeStart = date('Y-m-d H:i:s', strtotime('-48 hour'));
- $selTimeEnd = date('Y-m-d H:i:s', strtotime('-20 hour'));
- $query->where('subscribe_time', '<=', $selTimeEnd);
- $query->where('subscribe_time', '>', $selTimeStart);
- break;
- case 'k':
- # 关注时间 42小时-48小时
- $selTimeStart = date('Y-m-d H:i:s', strtotime('-48 hour'));
- $selTimeEnd = date('Y-m-d H:i:s', strtotime('-42 hour'));
- $query->where('subscribe_time', '<=', $selTimeEnd);
- $query->where('subscribe_time', '>', $selTimeStart);
- break;
- case 'l':
- # 关注时间 12小时-48小时
- $selTimeStart = date('Y-m-d H:i:s', strtotime('-48 hour'));
- $selTimeEnd = date('Y-m-d H:i:s', strtotime('-12 hour'));
- $query->where('subscribe_time', '<=', $selTimeEnd);
- $query->where('subscribe_time', '>', $selTimeStart);
- break;
- default:
- # code...
- break;
- }
- }
- if ($sex || $balance) {
- # code...
- $query->join('users', 'temp_force_subscribe_users.uid', '=', 'users.id');
- if ($sex) {
- # code...
- switch ($sex) {
- case 'a':
- # code...
- $query->where('users.sex', 1);
- break;
- case 'b':
- # code...
- $query->where('users.sex', 2);
- break;
- default:
- # code...
- break;
- }
- }
- if ($balance) {
- # code...
- switch ($balance) {
- case 'a':
- # code...
- $query->where('users.balance', '<', 500);
- break;
- case 'b':
- # code...
- $query->where('users.balance', '>=', 500);
- $query->where('users.balance', '<', 2000);
- break;
- case 'c':
- # code...
- $query->where('users.balance', '>=', 2000);
- $query->where('users.balance', '<', 5000);
- break;
- default:
- # code...
- break;
- }
- }
- }
- if ($category_id) {
- if ($category_id != 'z') {
- # code...
- $query->join('books', 'temp_force_subscribe_users.bid','=', 'books.id');
- $categoryArray = explode(',', $category_id);
- $query->wherein('books.category_id', $categoryArray);
- // $query->where('books.category_id',$category_id);
- }
- }
- if ($order_type) {
- switch ($order_type) {
- case 'a':
- # code...
- //未消费用户
- $query->whereNotExists(function ($query) {
- $query->select(DB::raw(1))
- ->from('orders')
- ->whereRaw('orders.uid =temp_force_subscribe_users.uid')
- ->whereRaw('orders.status="PAID"')
- ->limit(1);
- });
- break;
- case 'b':
- # code...
- //已消费用户
- $query->whereExists(function ($query) {
- $query->select(DB::raw(1))
- ->from('orders')
- ->whereRaw('orders.uid =temp_force_subscribe_users.uid')
- ->whereRaw('orders.status="PAID"')
- ->limit(1);
- });
- break;
- case 'c':
- # code...
- //包年用户
- $query->whereExists(function ($query) {
- $query->select(DB::raw(1))
- ->from('year_orders')
- ->whereRaw('year_orders.uid = temp_force_subscribe_users.uid')
- ->where('year_orders.begin_time', '<', date('Y-m-d H:i:s'))
- ->where('year_orders.end_time', '>', date('Y-m-d H:i:s'))
- ->limit(1);
- });
- break;
- case 'd':
- # code...
- //6-13小时之间有过订阅记录
-
- $query->whereExists(function ($query) {
- $query->select(DB::raw(1))
- ->from('orders')
- ->whereRaw('orders.uid =temp_force_subscribe_users.uid')
- ->whereRaw('orders.status="PAID"')
- ->where('orders.created_at','>',date('Y-m-d H:i:s', strtotime('-13 hour')))
- ->where('orders.created_at','<=',date('Y-m-d H:i:s', strtotime('-6 hour')))
- ->limit(1);
- });
-
- break;
- default:
- # code...
- break;
- }
- }
-
- if ($sign_time) {
- switch ($sign_time) {
- case 'a':
- //签到 60-90分钟内
- $query->whereExists(function ($query) {
- $query->select(DB::raw(1))
- ->from('smart_push_user_sign')
- ->whereRaw('smart_push_user_sign.uid =temp_force_subscribe_users.uid')
- ->where('smart_push_user_sign.sign_time', '<', (microtime(true) - 60*60))
- ->where('smart_push_user_sign.sign_time', '>', (microtime(true) - 60*90))
- ->limit(1);
- });
-
- break;
- default:
- break;
- }
- }
- // 单次获取1w,改动此数值,必须更改CustomMsgService下SmartPush方法内对应数值
- return $query->skip($skip)->take(10000)->get();
- }
-
-
- //根据客服消息传的各项条件检索用户,精确到appid级别
- static function forceUserCountByBatchWechatCustomPrams($appids, $distribution_channel_id, $subscribe_time = '', $sex = '', $balance = '', $category_id = '', $order_type = '', $sign_time = '', $interaction_time = '', $skip = 0)
- {
- $canSendDate = date('Y-m-d H:i:s', strtotime('-2 day'));
- # 缓存表
- $query = ForceSubscribeUsers::select('force_subscribe_users.id', 'force_subscribe_users.uid', 'force_subscribe_users.distribution_channel_id', 'force_subscribe_users.appid', 'force_subscribe_users.openid',
- 'force_subscribe_users.is_subscribed', 'force_subscribe_users.subscribe_time', 'force_subscribe_users.unsubscribe_time', 'force_subscribe_users.last_interactive_time', 'force_subscribe_users.bid');
- // $query->where('force_subscribe_users.last_interactive_time', '>', $canSendDate);
-
- $query->where('force_subscribe_users.distribution_channel_id', $distribution_channel_id);
- $query->where('force_subscribe_users.is_subscribed', 1);
- $appidArray = explode(',', $appids);
- $query->wherein('force_subscribe_users.appid', $appidArray);
-
- if ($subscribe_time) {
- # code...
- switch ($subscribe_time) {
- case 'a':
- # code...
- $selTime = date('Y-m-d H:i:s', strtotime('-1 day'));
- $query->where('subscribe_time', '>', $selTime);
- break;
- case 'b':
- # code...
- $selTimeStart = date('Y-m-d H:i:s', strtotime('-1 day'));
- $selTimeEnd = date('Y-m-d H:i:s', strtotime('-3 day'));
- $query->where('subscribe_time', '<=', $selTimeStart);
- $query->where('subscribe_time', '>', $selTimeEnd);
- break;
- case 'c':
- # code...
- $selTimeStart = date('Y-m-d H:i:s', strtotime('-3 day'));
- $selTimeEnd = date('Y-m-d H:i:s', strtotime('-5 day'));
- $query->where('subscribe_time', '<=', $selTimeStart);
- $query->where('subscribe_time', '>', $selTimeEnd);
- break;
- case 'd':
- # code...
- $selTimeStart = date('Y-m-d H:i:s', strtotime('-5 day'));
- $selTimeEnd = date('Y-m-d H:i:s', strtotime('-7 day'));
- $query->where('subscribe_time', '<=', $selTimeStart);
- $query->where('subscribe_time', '>', $selTimeEnd);
- break;
- case 'e':
- # code...
- $selTimeStart = date('Y-m-d H:i:s', strtotime('-7 day'));
- $selTimeEnd = date('Y-m-d H:i:s', strtotime('-14 day'));
- $query->where('subscribe_time', '<=', $selTimeStart);
- $query->where('subscribe_time', '>', $selTimeEnd);
- break;
- case 'f':
- # code...
- $selTimeStart = date('Y-m-d H:i:s', strtotime('-14 day'));
- $selTimeEnd = date('Y-m-d H:i:s', strtotime('-30 day'));
- $query->where('subscribe_time', '<=', $selTimeStart);
- $query->where('subscribe_time', '>', $selTimeEnd);
- break;
- case 'g':
- # code...
- $selTimeStart = date('Y-m-d H:i:s', strtotime('-30 day'));
- $selTimeEnd = date('Y-m-d H:i:s', strtotime('-60 day'));
- $query->where('subscribe_time', '<=', $selTimeStart);
- $query->where('subscribe_time', '>', $selTimeEnd);
- break;
- case 'h':
- # code...
- $selTimeStart = date('Y-m-d H:i:s', strtotime('-60 day'));
- $query->where('subscribe_time', '<=', $selTimeStart);
- break;
-
- default:
- # code...
- break;
- }
-
- }
-
- // 互动时间
- if ($interaction_time) {
- # code...
- switch ($interaction_time) {
- case 'a':
- # code...
- $selTimeStart = date('Y-m-d H:i:s', strtotime('-2 day'));
- $query->where('last_interactive_time', '>', $selTimeStart);
- break;
- case 'b':
- # code...
- $selTimeStart = date('Y-m-d H:i:s', strtotime('-2 day'));
- $query->where('last_interactive_time', '<=', $selTimeStart);
- break;
- default:
- # code...
- break;
- }
-
- }
-
-
- if ($sex || $balance) {
- # code...
- $query->join('users', 'force_subscribe_users.uid', '=', 'users.id');
- if ($sex) {
- # code...
- switch ($sex) {
- case 'a':
- # code...
- $query->where('users.sex', 1);
- break;
- case 'b':
- # code...
- $query->where('users.sex', 2);
- break;
- default:
- # code...
- break;
- }
- }
-
- if ($balance) {
- # code...
- switch ($balance) {
- case 'a':
- # code...
- $query->where('users.balance', '<', 500);
- break;
- case 'b':
- # code...
- $query->where('users.balance', '>=', 500);
- $query->where('users.balance', '<', 2000);
- break;
- case 'c':
- # code...
- $query->where('users.balance', '>=', 2000);
- $query->where('users.balance', '<', 5000);
- break;
- default:
- # code...
- break;
- }
- }
-
- }
-
-
- // 书籍分类
- if ($category_id) {
- if ($category_id != 'z') {
- # code...
- $query->join('books', 'force_subscribe_users.bid','=', 'books.id');
- $categoryArray = explode(',', $category_id);
- $query->wherein('books.category_id', $categoryArray);
- // $query->where('books.category_id',$category_id);
- }
- }
-
- if ($order_type) {
- switch ($order_type) {
- case 'a':
- # code...
- //未消费用户
- $query->whereNotExists(function ($query) {
- $query->select(DB::raw(1))
- ->from('orders')
- ->whereRaw('orders.uid = force_subscribe_users.uid')
- ->whereRaw('orders.status="PAID"')
- ->limit(1);
- });
-
- break;
- case 'b':
- # code...
- //已消费用户
- $query->whereExists(function ($query) {
- $query->select(DB::raw(1))
- ->from('orders')
- ->whereRaw('orders.uid = force_subscribe_users.uid')
- ->whereRaw('orders.status="PAID"')
- ->limit(1);
- });
-
- break;
-
- default:
- # code...
- break;
- }
- }
-
- if ($sign_time) {
- switch ($sign_time) {
- case 'a':
- //签到 60-90分钟内
- $query->whereExists(function ($query) {
- $query->select(DB::raw(1))
- ->from('smart_push_user_sign')
- ->whereRaw('smart_push_user_sign.uid = force_subscribe_users.uid')
- ->where('smart_push_user_sign.sign_time', '<', (microtime(true) - 60*60))
- ->where('smart_push_user_sign.sign_time', '>', (microtime(true) - 60*90))
- ->limit(1);
- });
-
- break;
- default:
- break;
- }
- }
-
- // 单次获取1w,改动此数值,必须更改CustomMsgService下SmartPush方法内对应数值
- return $query->skip($skip)->take(10000)->get();
-
- }
-
- //指定强关用户获取
- static function simpleForceUserCountByPrams($uids, $param=[],$skip = 0)
- {
- $query = ForceSubscribeUsers::leftjoin('wechat_templates','wechat_templates.appid','=','force_subscribe_users.appid');
-
- $query->select('force_subscribe_users.id', 'force_subscribe_users.uid', 'force_subscribe_users.distribution_channel_id', 'force_subscribe_users.appid', 'force_subscribe_users.openid',
- 'force_subscribe_users.is_subscribed', 'force_subscribe_users.subscribe_time','force_subscribe_users.unsubscribe_time', 'force_subscribe_users.last_interactive_time',
- 'force_subscribe_users.bid','wechat_templates.template_id');
-
- $query->where('force_subscribe_users.subscribe_time', '>=','2018-11-15');
- $query->where('force_subscribe_users.is_subscribed', 1);
- $query->wherein('force_subscribe_users.uid', $uids);
-
- $subscribe_time = isset($param['subscribe_time'])?$param['subscribe_time']:'z';
- $category_id = isset($param['category_id'])?$param['category_id']:'z';
- $sex = isset($param['sex'])?$param['sex']:'';// 不区分
- $balance = isset($param['balance'])?$param['balance']:'';
- $order_type = isset($param['order_type'])?$param['order_type']:'z';
- $sign_time = isset($param['sign_time'])?$param['sign_time']:'z';
- $common_template_id = isset($param['common_template_id'])?$param['common_template_id']:'';
-
- if($common_template_id){
- $query->where('wechat_templates.common_template_id', $common_template_id);
- // $query->select(DB::raw('(select template_id from wechat_templates where appid=force_subscribe_users.appid and common_template_id="'.$common_template_id.'" limit 1) as template_id'));
- }
- if ($subscribe_time) {
- # code...
- switch ($subscribe_time) {
- case 'a':
- # code...
- $selTime = date('Y-m-d H:i:s', strtotime('-5 day'));
- $query->where('subscribe_time', '>', $selTime);
- break;
- case 'b':
- # code...
- $selTimeStart = date('Y-m-d H:i:s', strtotime('-5 day'));
- $selTimeEnd = date('Y-m-d H:i:s', strtotime('-15 day'));
- $query->where('subscribe_time', '<=', $selTimeStart);
- $query->where('subscribe_time', '>', $selTimeEnd);
- break;
- case 'c':
- # code...
- $selTimeStart = date('Y-m-d H:i:s', strtotime('-15 day'));
- $selTimeEnd = date('Y-m-d H:i:s', strtotime('-30 day'));
- $query->where('subscribe_time', '<=', $selTimeStart);
- $query->where('subscribe_time', '>', $selTimeEnd);
- break;
- case 'd':
- # code...
- $selTimeStart = date('Y-m-d H:i:s', strtotime('-30 day'));
- $query->where('subscribe_time', '<=', $selTimeStart);
- break;
- case 'e':
- # code...
- $selTimeStart = date('Y-m-d H:i:s', strtotime('-1 day'));
- $selTimeEnd = date('Y-m-d H:i:s');
- $query->where('subscribe_time', '<=', $selTimeEnd);
- $query->where('subscribe_time', '>', $selTimeStart);
- break;
- case 'f':
- # code...
- $selTimeStart = date('Y-m-d H:i:s', strtotime('-2 day'));
- $selTimeEnd = date('Y-m-d H:i:s', strtotime('-1 day'));
- $query->where('subscribe_time', '<=', $selTimeEnd);
- $query->where('subscribe_time', '>', $selTimeStart);
- break;
- case 'g':
- # 客服消息专用,24小时前的老用户,不发给新用户
- $selTimeEnd = date('Y-m-d H:i:s', strtotime('-1 day'));
- $query->where('subscribe_time', '<=', $selTimeEnd);
- break;
- case 'h':
- // 关注10-50分钟之间
- $selTimeStart = date('Y-m-d H:i:s', strtotime('-50 min'));
- $selTimeEnd = date('Y-m-d H:i:s', strtotime('-10 min'));
- $query->where('subscribe_time', '<=', $selTimeEnd);
- $query->where('subscribe_time', '>', $selTimeStart);
- break;
- case 'i':
- # 关注时间 36小时-48小时
- $selTimeStart = date('Y-m-d H:i:s', strtotime('-48 hour'));
- $selTimeEnd = date('Y-m-d H:i:s', strtotime('-36 hour'));
- $query->where('subscribe_time', '<=', $selTimeEnd);
- $query->where('subscribe_time', '>', $selTimeStart);
- break;
- case 'j':
- # 关注时间 20小时-48小时
- $selTimeStart = date('Y-m-d H:i:s', strtotime('-48 hour'));
- $selTimeEnd = date('Y-m-d H:i:s', strtotime('-20 hour'));
- $query->where('subscribe_time', '<=', $selTimeEnd);
- $query->where('subscribe_time', '>', $selTimeStart);
- break;
- case 'k':
- # 关注时间 42小时-48小时
- $selTimeStart = date('Y-m-d H:i:s', strtotime('-48 hour'));
- $selTimeEnd = date('Y-m-d H:i:s', strtotime('-42 hour'));
- $query->where('subscribe_time', '<=', $selTimeEnd);
- $query->where('subscribe_time', '>', $selTimeStart);
- break;
- case 'l':
- # 关注时间 12小时-48小时
- $selTimeStart = date('Y-m-d H:i:s', strtotime('-48 hour'));
- $selTimeEnd = date('Y-m-d H:i:s', strtotime('-12 hour'));
- $query->where('subscribe_time', '<=', $selTimeEnd);
- $query->where('subscribe_time', '>', $selTimeStart);
- break;
- case 'm':
- # 关注时间 60小时-80小时
- $selTimeStart = date('Y-m-d H:i:s', strtotime('-80 hour'));
- $selTimeEnd = date('Y-m-d H:i:s', strtotime('-60 hour'));
- $query->where('subscribe_time', '<=', $selTimeEnd);
- $query->where('subscribe_time', '>', $selTimeStart);
- break;
- default:
- # code...
- break;
- }
-
- }
- if ($sex || $balance) {
- # code...
- $query->join('users', 'force_subscribe_users.uid', '=', 'users.id');
- if ($sex) {
- # code...
- switch ($sex) {
- case 'a':
- # code...
- $query->where('users.sex', 1);
- break;
- case 'b':
- # code...
- $query->where('users.sex', 2);
- break;
- default:
- # code...
- break;
- }
- }
- if ($balance) {
- # code...
- switch ($balance) {
- case 'a':
- # code...
- $query->where('users.balance', '<', 500);
- break;
- case 'b':
- # code...
- $query->where('users.balance', '>=', 500);
- $query->where('users.balance', '<', 2000);
- break;
- case 'c':
- # code...
- $query->where('users.balance', '>=', 2000);
- $query->where('users.balance', '<', 5000);
- break;
- default:
- # code...
- break;
- }
- }
- }
-
- if ($category_id) {
- if ($category_id != 'z') {
- # code...
- $query->join('books', 'force_subscribe_users.bid','=', 'books.id');
- $categoryArray = explode(',', $category_id);
- $query->wherein('books.category_id', $categoryArray);
- // $query->where('books.category_id',$category_id);
- }
-
-
- }
-
- if ($order_type) {
- switch ($order_type) {
- case 'a':
- # code...
- //未消费用户
- $query->whereNotExists(function ($query) {
- $query->select(DB::raw(1))
- ->from('orders')
- ->whereRaw('orders.uid =force_subscribe_users.uid')
- ->whereRaw('orders.status="PAID"')
- ->limit(1);
- });
-
- break;
- case 'b':
- # code...
- //已消费用户
- $query->whereExists(function ($query) {
- $query->select(DB::raw(1))
- ->from('orders')
- ->whereRaw('orders.uid =force_subscribe_users.uid')
- ->whereRaw('orders.status="PAID"')
- ->limit(1);
- });
-
- break;
- case 'c':
- # code...
- //包年用户
- $query->whereExists(function ($query) {
- $query->select(DB::raw(1))
- ->from('year_orders')
- ->whereRaw('year_orders.uid = force_subscribe_users.uid')
- ->where('year_orders.begin_time', '<', date('Y-m-d H:i:s'))
- ->where('year_orders.end_time', '>', date('Y-m-d H:i:s'))
- ->limit(1);
- });
-
- break;
- default:
- # code...
- break;
- }
- }
-
- if ($sign_time) {
- switch ($sign_time) {
- case 'a':
- //签到 60-90分钟内
- $query->whereExists(function ($query) {
- $query->select(DB::raw(1))
- ->from('user_sign')
- ->whereRaw('user_sign.uid =force_subscribe_users.uid')
- ->where('user_sign.sign_time', '<', (microtime(true) - 60*60))
- ->where('user_sign.sign_time', '>', (microtime(true) - 60*90))
- ->limit(1);
- });
-
- break;
- default:
- break;
- }
- }
-
- // 单次获取1w,改动此数值,必须更改CustomMsgService下SmartPush方法内对应数值
- return $query->skip($skip)->take(10000)->get();
-
- }
-
-
- //根据客服消息传的各项条件检索用户--老版
- static function forceUserCountByCustomPrams2($appids, $distribution_channel_id, $subscribe_time = '', $sex = '', $balance = '', $category_id = '', $order_type = '', $sign_time = '', $skip = 0)
- {
-
- $query = self::select('force_subscribe_users.id', 'force_subscribe_users.uid', 'force_subscribe_users.official_account_id', 'force_subscribe_users.distribution_channel_id', 'force_subscribe_users.appid', 'force_subscribe_users.openid', 'force_subscribe_users.is_subscribed', 'force_subscribe_users.subscribe_time', 'force_subscribe_users.unsubscribe_time', 'force_subscribe_users.last_interactive_time', 'force_subscribe_users.bid');
- $query->where('force_subscribe_users.distribution_channel_id', $distribution_channel_id);
- $query->where('force_subscribe_users.is_subscribed', 1);
- $appidArray = explode(',', $appids);
- $query->wherein('force_subscribe_users.appid', $appidArray);
- $canSendDate = date('Y-m-d H:i:s', strtotime('-2 day'));
- $query->where('force_subscribe_users.last_interactive_time', '>', $canSendDate);
- if ($subscribe_time) {
- # code...
- switch ($subscribe_time) {
- case 'a':
- # code...
- $selTime = date('Y-m-d H:i:s', strtotime('-5 day'));
- $query->where('subscribe_time', '>', $selTime);
- break;
- case 'b':
- # code...
- $selTimeStart = date('Y-m-d H:i:s', strtotime('-5 day'));
- $selTimeEnd = date('Y-m-d H:i:s', strtotime('-15 day'));
- $query->where('subscribe_time', '<=', $selTimeStart);
- $query->where('subscribe_time', '>', $selTimeEnd);
- break;
- case 'c':
- # code...
- $selTimeStart = date('Y-m-d H:i:s', strtotime('-15 day'));
- $selTimeEnd = date('Y-m-d H:i:s', strtotime('-30 day'));
- $query->where('subscribe_time', '<=', $selTimeStart);
- $query->where('subscribe_time', '>', $selTimeEnd);
- break;
- case 'd':
- # code...
- $selTimeStart = date('Y-m-d H:i:s', strtotime('-30 day'));
- $query->where('subscribe_time', '<=', $selTimeStart);
- break;
- case 'e':
- # code...
- $selTimeStart = date('Y-m-d H:i:s', strtotime('-1 day'));
- $selTimeEnd = date('Y-m-d H:i:s');
- $query->where('subscribe_time', '<=', $selTimeEnd);
- $query->where('subscribe_time', '>', $selTimeStart);
- break;
- case 'f':
- # code...
- $selTimeStart = date('Y-m-d H:i:s', strtotime('-2 day'));
- $selTimeEnd = date('Y-m-d H:i:s', strtotime('-1 day'));
- $query->where('subscribe_time', '<=', $selTimeEnd);
- $query->where('subscribe_time', '>', $selTimeStart);
- break;
- case 'g':
- # 客服消息专用,24小时前的老用户,不发给新用户
- $selTimeEnd = date('Y-m-d H:i:s', strtotime('-1 day'));
- $query->where('subscribe_time', '<=', $selTimeEnd);
- break;
- case 'h':
- // 关注10-25分钟之间
- $selTimeStart = date('Y-m-d H:i:s', strtotime('-25 min'));
- $selTimeEnd = date('Y-m-d H:i:s', strtotime('-10 min'));
- $query->where('subscribe_time', '<=', $selTimeEnd);
- $query->where('subscribe_time', '>', $selTimeStart);
- break;
- case 'i':
- # 关注时间 36小时-48小时
- $selTimeStart = date('Y-m-d H:i:s', strtotime('-48 hour'));
- $selTimeEnd = date('Y-m-d H:i:s', strtotime('-36 hour'));
- $query->where('subscribe_time', '<=', $selTimeEnd);
- $query->where('subscribe_time', '>', $selTimeStart);
- break;
- case 'j':
- # 关注时间 20小时-48小时
- $selTimeStart = date('Y-m-d H:i:s', strtotime('-48 hour'));
- $selTimeEnd = date('Y-m-d H:i:s', strtotime('-20 hour'));
- $query->where('subscribe_time', '<=', $selTimeEnd);
- $query->where('subscribe_time', '>', $selTimeStart);
- break;
- case 'k':
- # 关注时间 42小时-48小时
- $selTimeStart = date('Y-m-d H:i:s', strtotime('-48 hour'));
- $selTimeEnd = date('Y-m-d H:i:s', strtotime('-42 hour'));
- $query->where('subscribe_time', '<=', $selTimeEnd);
- $query->where('subscribe_time', '>', $selTimeStart);
- break;
- case 'l':
- # 关注时间 12小时-48小时
- $selTimeStart = date('Y-m-d H:i:s', strtotime('-48 hour'));
- $selTimeEnd = date('Y-m-d H:i:s', strtotime('-12 hour'));
- $query->where('subscribe_time', '<=', $selTimeEnd);
- $query->where('subscribe_time', '>', $selTimeStart);
- break;
- default:
- # code...
- break;
- }
-
- }
- if ($sex || $balance) {
- # code...
- $query->join('users', 'force_subscribe_users.uid', '=', 'users.id');
- if ($sex) {
- # code...
- switch ($sex) {
- case 'a':
- # code...
- $query->where('users.sex', 1);
- break;
- case 'b':
- # code...
- $query->where('users.sex', 2);
- break;
- default:
- # code...
- break;
- }
- }
- if ($balance) {
- # code...
- switch ($balance) {
- case 'a':
- # code...
- $query->where('users.balance', '<', 500);
- break;
- case 'b':
- # code...
- $query->where('users.balance', '>=', 500);
- $query->where('users.balance', '<', 2000);
- break;
- case 'c':
- # code...
- $query->where('users.balance', '>=', 2000);
- $query->where('users.balance', '<', 5000);
- break;
- default:
- # code...
- break;
- }
- }
- }
-
- if ($category_id) {
- if ($category_id != 'z') {
- # code...
- $query->join('books', 'force_subscribe_users.bid', '=','books.id');
- $categoryArray = explode(',', $category_id);
- $query->wherein('books.category_id', $categoryArray);
- // $query->where('books.category_id',$category_id);
- }
-
-
- }
-
- if ($order_type) {
- switch ($order_type) {
- case 'a':
- # code...
- //未消费用户
- $query->whereNotExists(function ($query) {
- $query->select(DB::raw(1))
- ->from('orders')
- ->whereRaw('orders.uid =force_subscribe_users.uid')
- ->whereRaw('orders.status="PAID"')
- ->limit(1);
- });
-
- break;
- case 'b':
- # code...
- //已消费用户
- $query->whereExists(function ($query) {
- $query->select(DB::raw(1))
- ->from('orders')
- ->whereRaw('orders.uid =force_subscribe_users.uid')
- ->whereRaw('orders.status="PAID"')
- ->limit(1);
- });
-
- break;
- case 'c':
- # code...
- //包年用户
- $query->whereExists(function ($query) {
- $query->select(DB::raw(1))
- ->from('year_orders')
- ->whereRaw('year_orders.uid = force_subscribe_users.uid')
- ->where('year_orders.begin_time', '<', date('Y-m-d H:i:s'))
- ->where('year_orders.end_time', '>', date('Y-m-d H:i:s'))
- ->limit(1);
- });
-
- break;
- default:
- # code...
- break;
- }
- }
-
- if ($sign_time) {
- switch ($sign_time) {
- case 'a':
- //签到 60-90分钟内
- $query->whereExists(function ($query) {
- $query->select(DB::raw(1))
- ->from('user_sign')
- ->whereRaw('user_sign.uid =force_subscribe_users.uid')
- ->where('user_sign.sign_time', '<', (microtime(true) - 60*60))
- ->where('user_sign.sign_time', '>', (microtime(true) - 60*90))
- ->limit(1);
- });
-
- break;
- default:
- break;
- }
- }
-
- // 单次获取1w,改动此数值,必须更改CustomMsgService下SmartPush方法内对应数值
- return $query->skip($skip)->take(10000)->get();
-
- }
- /**
- * 通过uid获取用户关注的服务号名称
- * @param $uid
- * @return mixed
- */
- static function getOfficalAccountNickName($uid)
- {
- $search_obj = self::select('official_accounts.nickname')->leftjoin('official_accounts', 'force_subscribe_users.appid', '=', 'official_accounts.appid')->where('force_subscribe_users.uid', $uid);
- return $search_obj->first();
- }
- /**
- * 根据openid获取用户的性别信息
- * @param unknown_type $distribution_channel_id
- * @param unknown_type $openid
- */
- static function getSexByOpenid($distribution_channel_id,$openid){
- $sex = self::join('books','force_subscribe_users.bid','=','books.id')
- ->join('book_categories', 'books.category_id','=', 'book_categories.id')
- ->select('book_categories.channel_name','force_subscribe_users.bid')
- ->where('force_subscribe_users.openid',$openid)
- ->where('force_subscribe_users.distribution_channel_id',$distribution_channel_id)
- ->first();
- \Log::info('getSexByOpenid:'.$openid.' sex:'.json_encode($sex));
- if(isset($sex->channel_name) && $sex->channel_name){
- if($sex->channel_name == '男频'){
- return 1;
- }
- return 2;
- }else{
- // 判断用户性别
- $user = self::join('users','force_subscribe_users.uid','=','users.id')
- ->select('users.sex')
- ->where('force_subscribe_users.openid',$openid)
- ->where('force_subscribe_users.distribution_channel_id',$distribution_channel_id)
- ->first();
- \Log::info('getSexByOpenid_user_openid:'.$openid.' sex:'.json_encode($user));
- if(isset($user->sex) && $user->sex == 1){
- \Log::info('getSexByOpenid_by_user_sex:'.$user->sex);
- return 1;
- }
- return 2;
- }
- }
-
- /**
- * 根据uid获取用户的真实性别信息
- */
- static function getUserRealSexByUid($uid){
- // 判断用户性别
- $user = UserService::getById($uid);
- $sex = isset($user->sex) && $user->sex==1?1:2;
-
- \Log::info('getUserRealSexByUid:'.$uid.' sex:'.$sex);
- return $sex;
- }
-
-
- /**
- * 根据openid获取用户的性别信息--无需判断性别
- */
- static function getSimpleSexByOpenid($distribution_channel_id,$openid){
- $sex = self::join('books','force_subscribe_users.bid','=','books.id')
- ->join('book_categories', 'books.category_id','=', 'book_categories.id')
- ->select('book_categories.channel_name','force_subscribe_users.bid')
- ->where('force_subscribe_users.openid',$openid)
- ->where('force_subscribe_users.distribution_channel_id',$distribution_channel_id)
- ->first();
- \Log::info('getSimpleSexByOpenid:'.$openid.' sex:'.json_encode($sex));
- if(isset($sex->channel_name) && $sex->channel_name){
- if($sex->channel_name == '男频'){
- return 1;
- }
- }
- return 2;
- }
-
- /**
- * 根据uid获取用户的性别信息--无需判断性别
- */
- static function getSimpleSexByUid($uid){
- if($uid == 0){
- return 2;
- }
- $sex = self::join('books','force_subscribe_users.bid','=','books.id')
- ->join('book_categories', 'books.category_id','=', 'book_categories.id')
- ->select('book_categories.channel_name','force_subscribe_users.bid')
- ->where('force_subscribe_users.uid',$uid)
- ->first();
- \Log::info('getSimpleSexByUid:'.$uid.' sex:'.json_encode($sex));
- if(isset($sex->channel_name) && $sex->channel_name){
- if($sex->channel_name == '男频'){
- return 1;
- }
- }
- return 2;
- }
- public static function getOldUserNewSubsribeNum($params){
- $obj = self::whereRaw('force_subscribe_users.subscribe_time > force_subscribe_users.created_at');
- if(isset($params['distribution_channel_id']) && $params['distribution_channel_id']){
- $obj->where('distribution_channel_id',$params['distribution_channel_id']);
- }
- if(isset($params['start_time']) && $params['start_time']){
- $obj->where('subscribe_time','>=',$params['start_time']);
- }
- if(isset($params['end_time']) && $params['end_time']){
- $obj->where('subscribe_time','<=',$params['end_time']);
- }
- return $obj->count('id');
- }
- }
|