ForceSubscribeUsers.php 49 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329
  1. <?php
  2. namespace App\Modules\OfficialAccount\Models;
  3. use Illuminate\Database\Eloquent\Model;
  4. use App\Modules\OfficialAccount\Models\TempForceSubscribeUsers;
  5. use DB;
  6. class ForceSubscribeUsers extends Model
  7. {
  8. protected $tables = 'force_subscribe_users';
  9. protected $fillable = ['uid', 'official_account_id', 'distribution_channel_id', 'appid', 'openid', 'is_subscribed', 'subscribe_time', 'unsubscribe_time', 'last_interactive_time', 'bid', 'send_order_id'];
  10. /**
  11. * 根据openid和appid获取强关用户
  12. */
  13. static function forceSubscribeUsersByAppidAndOpenId($appid, $openid)
  14. {
  15. return self::where(['appid' => isset($appid) ? $appid : '', 'openid' => isset($openid) ? $openid : ''])->first();
  16. }
  17. /**
  18. * 获取所有强关用户
  19. */
  20. static function forceSubscribeUsersAllOf()
  21. {
  22. return self::where('is_subscribed', 1)->get();
  23. }
  24. /**
  25. * 修改公众号迁移用户数据
  26. */
  27. static function updateSubscribeUserTransfer($distribution_channel_id,$uid,$from_appid,$to_appid,$to_openid){
  28. 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')]);
  29. }
  30. /**
  31. * 根据uid获取强关用户
  32. */
  33. static function forceSubscribeUsersByUid($uid)
  34. {
  35. return self::where(['uid' => $uid, 'is_subscribed' => 1])->first();
  36. }
  37. /**
  38. * 根据uid获取强关用户
  39. */
  40. static function allForceSubscribeUsersByUid($uid)
  41. {
  42. return self::where(['uid' => $uid, 'is_subscribed' => 1])->get();
  43. }
  44. /**
  45. * 根据distribution_channel_id获取强关用户
  46. */
  47. static function forceSubscribeUsersByChannelidAndTimeset($distribution_channel_id, $timeset)
  48. {
  49. $lastTime = date('Y-m-d H:i:s', time() - $timeset);
  50. return self::where(['distribution_channel_id' => $distribution_channel_id, 'is_subscribed' => 1])->where('last_interactive_time', '<', $lastTime)->get();
  51. }
  52. /**
  53. * 根据distribution_channel_id获取强关用户
  54. */
  55. static function forceSubscribeNewUsersByTimeset($distribution_channel_id, $timeset)
  56. {
  57. $lastTime = date('Y-m-d H:i:s', time() - $timeset);
  58. 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();
  59. // return self::where(['distribution_channel_id'=>$distribution_channel_id,'is_subscribed'=>1])->where('created_at','<',$lastTime)->get();
  60. }
  61. /**
  62. * 根据distribution_channel_id获取未付费的强关用户
  63. */
  64. static function forceSubscribeNewUnpaidUsersByTime($distribution_channel_id, $start_time,$end_time)
  65. {
  66. $data = DB::select(
  67. "select force_subscribe_users.* from force_subscribe_users
  68. where distribution_channel_id = '{$distribution_channel_id}'
  69. and is_subscribed = 1
  70. and created_at < '{$end_time}'
  71. and created_at >= '{$start_time}'
  72. and not exists (select uid from orders where orders.uid=force_subscribe_users.uid and orders.status='PAID' limit 1 )
  73. limit 20000
  74. "
  75. );
  76. return object_to_array($data);
  77. }
  78. /**
  79. * 根据uid和appid获取强关用户
  80. */
  81. static function forceSubscribeUsersByUidAndAppidAndChannelId($uid, $appid, $distribution_channel_id)
  82. {
  83. $query = self::where(['uid' => $uid, 'distribution_channel_id' => $distribution_channel_id, 'is_subscribed' => 1]);
  84. $appidArray = explode(',', $appid);
  85. return $query->wherein('appid', $appidArray)->get();
  86. }
  87. /**
  88. * 根据uid获取强关用户包括取关的用户
  89. */
  90. static function forceSubscribeUsersByUidIncludeCancel($uid)
  91. {
  92. return self::where(['uid' => $uid])->first();
  93. }
  94. /**
  95. * 根据openid获取一个强关用户
  96. */
  97. static function forceSubscribeUsersByOpenid($openid, $appid = '')
  98. {
  99. return self::where(['openid' => $openid, 'is_subscribed' => 1])->first();
  100. }
  101. /**
  102. * openid获取强关用户
  103. */
  104. static function getOneForceSubscribeUsersByOpenid($openid)
  105. {
  106. return self::where('openid', $openid)->first();
  107. }
  108. /**
  109. * 根据openid获取所有强关用户
  110. */
  111. static function forceAllSubscribeUsersByOpenid($openid)
  112. {
  113. return self::where(['openid' => $openid, 'is_subscribed' => 1])->get();
  114. }
  115. /**
  116. * 根据openid获取强关用户
  117. */
  118. static function forceSubscribeUsersByOpenidAndAC($openid, $appid = '', $distribution_channel_id = '')
  119. {
  120. $query = self::where('openid', $openid);
  121. if ($appid) {
  122. # code...
  123. $query->where('appid', $appid);
  124. }
  125. if ($distribution_channel_id) {
  126. # code...
  127. $query->where('distribution_channel_id', $distribution_channel_id);
  128. }
  129. return $query->first();
  130. }
  131. /**
  132. * 根据渠道号和日期获取强关用户数量
  133. */
  134. static function forceSubscribeUserCountByChannelIdAndDate($distribution_channel_id, $startTime = '', $endTime = '')
  135. {
  136. $query = self::orderBy('id', 'desc');
  137. $distribution_channel_id && $query->where('distribution_channel_id', $distribution_channel_id);
  138. if ($startTime && $endTime) {
  139. $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));
  140. } elseif ($startTime) {
  141. # code...
  142. $end_time = date("Y-m-d",strtotime($startTime)+86400);
  143. //$query->whereDate('created_at', $startTime);
  144. $query->where('created_at', '>=',$startTime)->where('created_at', '<',$end_time);
  145. } elseif ($endTime) {
  146. # code...
  147. $end_time = date("Y-m-d",strtotime($endTime)+86400);
  148. //$query->whereDate('created_at', $endTime);
  149. $query->where('created_at', '>=',$endTime)->where('created_at', '<',$end_time);
  150. }
  151. return $query->count();
  152. }
  153. /**
  154. * 根据openid获取强关用户
  155. */
  156. static function forceSubscribeUsersByOpenidAndChannelId($openid, $distribution_channel_id)
  157. {
  158. return self::where(['openid' => $openid, 'distribution_channel_id' => $distribution_channel_id])->first();
  159. }
  160. /**
  161. * 根据openid获取一个取关用户
  162. */
  163. static function forceUnSubscribeUsersByOpenid($openid)
  164. {
  165. return self::where(['openid' => $openid, 'is_subscribed' => 0])->first();
  166. }
  167. /**
  168. * 根据openid获取全部取关用户
  169. */
  170. static function forceAllUnSubscribeUsersByOpenid($openid)
  171. {
  172. return self::where(['openid' => $openid, 'is_subscribed' => 0])->get();
  173. }
  174. /**
  175. * 根据appid获取强关用户
  176. */
  177. static function forceSubscribeUsersByAppid($appid)
  178. {
  179. return self::where(['appid' => $appid, 'is_subscribed' => 1])->get();
  180. }
  181. /**
  182. * 根据appid获取强关用户数量
  183. */
  184. static function forceSubscribeUsersCountByAppid($appid)
  185. {
  186. return self::where(['appid' => $appid, 'is_subscribed' => 1])->count();
  187. }
  188. /**
  189. * 根据appid获取今日新增粉丝数
  190. */
  191. static function todayForceSubscribeUsers($appid)
  192. {
  193. // dd($appid);
  194. // return 0;
  195. $subscribe_time = date("Y-m-d");
  196. $end_time = date("Y-m-d",strtotime($subscribe_time)+86400);
  197. //return self::where(['appid' => $appid, 'is_subscribed' => 1])->whereDate('subscribe_time', $subscribe_time)->count();
  198. return self::where(['appid' => $appid, 'is_subscribed' => 1])->where('subscribe_time', '>=',$subscribe_time)->where('subscribe_time', '<',$end_time)->count();
  199. }
  200. /**
  201. * 根据appid获取粉丝总数
  202. */
  203. static function allForceSubscribeUsers($appid)
  204. {
  205. return self::where(['appid' => $appid, 'is_subscribed' => 1])->count();
  206. }
  207. //获取推广带来的净关粉丝总数
  208. static function getFansNum($send_order_id)
  209. {
  210. return self::where('send_order_id', $send_order_id)->where('is_subscribed', 1)->count();
  211. }
  212. //获取推广带来的新关粉丝总数
  213. static function getNewFansNum($send_order_id)
  214. {
  215. return self::where('send_order_id', $send_order_id)->count();
  216. }
  217. //根据模板消息传的各项条件检索用户
  218. static function forceUserCountByTemplatePrams($appids, $distribution_channel_id, $subscribe_time = '', $sex = '', $balance = '', $category_id = '', $order_type = '', $skip = 0)
  219. {
  220. $query = self::leftJoin('users', 'users.id', '=', 'force_subscribe_users.uid')
  221. ->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',
  222. 'users.nickname');
  223. $query->where('force_subscribe_users.distribution_channel_id', $distribution_channel_id);
  224. $query->where('force_subscribe_users.is_subscribed', 1);
  225. $appidArray = explode(',', $appids);
  226. $query->wherein('force_subscribe_users.appid', $appidArray);
  227. if ($subscribe_time) {
  228. # code...
  229. switch ($subscribe_time) {
  230. case 'a':
  231. # code...
  232. $selTime = date('Y-m-d H:i:s', strtotime('-5 day'));
  233. $query->where('subscribe_time', '>', $selTime);
  234. break;
  235. case 'b':
  236. # code...
  237. $selTimeStart = date('Y-m-d H:i:s', strtotime('-5 day'));
  238. $selTimeEnd = date('Y-m-d H:i:s', strtotime('-15 day'));
  239. $query->where('subscribe_time', '<=', $selTimeStart);
  240. $query->where('subscribe_time', '>', $selTimeEnd);
  241. break;
  242. case 'c':
  243. # code...
  244. $selTimeStart = date('Y-m-d H:i:s', strtotime('-15 day'));
  245. $selTimeEnd = date('Y-m-d H:i:s', strtotime('-30 day'));
  246. $query->where('subscribe_time', '<=', $selTimeStart);
  247. $query->where('subscribe_time', '>', $selTimeEnd);
  248. break;
  249. case 'd':
  250. # code...
  251. $selTimeStart = date('Y-m-d H:i:s', strtotime('-30 day'));
  252. $query->where('subscribe_time', '<=', $selTimeStart);
  253. break;
  254. case 'e':
  255. # code...
  256. $selTimeStart = date('Y-m-d H:i:s', strtotime('-1 day'));
  257. $selTimeEnd = date('Y-m-d H:i:s');
  258. $query->where('subscribe_time', '<=', $selTimeEnd);
  259. $query->where('subscribe_time', '>', $selTimeStart);
  260. break;
  261. case 'f':
  262. # code...
  263. $selTimeStart = date('Y-m-d H:i:s', strtotime('-2 day'));
  264. $selTimeEnd = date('Y-m-d H:i:s', strtotime('-1 day'));
  265. $query->where('subscribe_time', '<=', $selTimeEnd);
  266. $query->where('subscribe_time', '>', $selTimeStart);
  267. break;
  268. default:
  269. # code...
  270. break;
  271. }
  272. }
  273. if ($sex || $balance) {
  274. if ($sex) {
  275. # code...
  276. switch ($sex) {
  277. case 'a':
  278. # code...
  279. $query->where('users.sex', 1);
  280. break;
  281. case 'b':
  282. # code...
  283. $query->where('users.sex', 2);
  284. break;
  285. default:
  286. # code...
  287. break;
  288. }
  289. }
  290. if ($balance) {
  291. # code...
  292. switch ($balance) {
  293. case 'a':
  294. # code...
  295. $query->where('users.balance', '<', 500);
  296. break;
  297. case 'b':
  298. # code...
  299. $query->where('users.balance', '>=', 500);
  300. $query->where('users.balance', '<', 2000);
  301. break;
  302. case 'c':
  303. # code...
  304. $query->where('users.balance', '>=', 2000);
  305. $query->where('users.balance', '<', 5000);
  306. break;
  307. default:
  308. # code...
  309. break;
  310. }
  311. }
  312. }
  313. if ($category_id) {
  314. if ($category_id != 'z') {
  315. # code...
  316. $query->join('books', 'force_subscribe_users.bid', 'books.id');
  317. $categoryArray = explode(',', $category_id);
  318. $query->wherein('books.category_id', $categoryArray);
  319. // $query->where('books.category_id',$category_id);
  320. }
  321. }
  322. if ($order_type) {
  323. switch ($order_type) {
  324. case 'a':
  325. # code...
  326. //未消费用户
  327. $query->whereNotExists(function ($query) {
  328. $query->select(DB::raw(1))
  329. ->from('orders')
  330. ->whereRaw('orders.uid =force_subscribe_users.uid')
  331. ->whereRaw('orders.status="PAID"')
  332. ->limit(1);
  333. });
  334. break;
  335. case 'b':
  336. # code...
  337. //已消费用户
  338. $query->whereExists(function ($query) {
  339. $query->select(DB::raw(1))
  340. ->from('orders')
  341. ->whereRaw('orders.uid=force_subscribe_users.uid')
  342. ->whereRaw('orders.status="PAID"')
  343. ->limit(1);
  344. });
  345. break;
  346. case 'c':
  347. # code...
  348. //包年用户
  349. $query->whereExists(function ($query) {
  350. $query->select('uid')
  351. ->from('year_orders')
  352. ->whereRaw('year_orders.uid = force_subscribe_users.uid')
  353. ->where('year_orders.begin_time', '<', date('Y-m-d H:i:s'))
  354. ->where('year_orders.end_time', '>', date('Y-m-d H:i:s'))
  355. ->limit(1);
  356. });
  357. break;
  358. case 'd':
  359. # code...
  360. //昨天消费用户
  361. $query->whereExists(function ($query) {
  362. $query->select('uid')
  363. ->from('orders')
  364. ->whereRaw('orders.uid=force_subscribe_users.uid')
  365. ->whereRaw('orders.status="PAID"')
  366. ->where('orders.created_at', '>=',date('Y-m-d',strtotime('-1 day')))
  367. ->where('orders.created_at', '<',date('Y-m-d'))
  368. ->limit(1);
  369. });
  370. break;
  371. default:
  372. # code...
  373. break;
  374. }
  375. }
  376. // dd($query->get());
  377. return $query->skip($skip)->take(10000)->get();
  378. }
  379. //根据客服消息传的各项条件检索用户,精确到appid级别
  380. static function forceUserCountByCustomPrams($appids, $distribution_channel_id, $subscribe_time = '', $sex = '', $balance = '', $category_id = '', $order_type = '', $sign_time = '', $skip = 0,$subscribe_time_attach='')
  381. {
  382. $canSendDate = date('Y-m-d H:i:s', strtotime('-2 day'));
  383. # 缓存表
  384. $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',
  385. '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');
  386. $query->where('temp_force_subscribe_users.last_interactive_time', '>', $canSendDate);
  387. $query->where('temp_force_subscribe_users.distribution_channel_id', $distribution_channel_id);
  388. $query->where('temp_force_subscribe_users.is_subscribed', 1);
  389. $appidArray = explode(',', $appids);
  390. $query->wherein('temp_force_subscribe_users.appid', $appidArray);
  391. //自定义关注时间
  392. $subscribe_time_list = self::subscribeTimeDeal($subscribe_time,$subscribe_time_attach);
  393. if($subscribe_time_list){
  394. $query->where(function ($q) use ($subscribe_time_list){
  395. foreach ($subscribe_time_list as $item){
  396. $q->orWhere(function ($qq) use ($item){
  397. if($item[0] != 0) $qq->where('subscribe_time','>',$item[0]);
  398. if($item[1] != -1)$qq->where('subscribe_time','<',$item[1]);
  399. });
  400. }
  401. });
  402. }
  403. if ($sex || $balance) {
  404. # code...
  405. $query->leftjoin('users', 'temp_force_subscribe_users.uid', '=', 'users.id');
  406. if ($sex) {
  407. # code...
  408. switch ($sex) {
  409. case 'a':
  410. # code...
  411. $query->where('users.sex', 1);
  412. break;
  413. case 'b':
  414. # code...
  415. $query->whereIn('users.sex', [0,2]);
  416. break;
  417. default:
  418. # code...
  419. break;
  420. }
  421. }
  422. if ($balance) {
  423. # code...
  424. $balance_list = explode(',',$balance);
  425. if(count($balance_list) >1){
  426. $true_balance_list = [];
  427. foreach ($balance_list as $balance_item){
  428. $temp_item = self::userbalance($balance_item);
  429. if($temp_item) $true_balance_list[] = $temp_item;
  430. }
  431. $query->where(function ($q) use ($true_balance_list){
  432. foreach ($true_balance_list as $true_balance_item){
  433. $q->orWhere(function ($qq) use ($true_balance_item){
  434. $qq->where('users.balance', '>=', $true_balance_item[0])
  435. ->where('users.balance','<',$true_balance_item[1]);
  436. });
  437. }
  438. });
  439. $balance = 'z';
  440. }
  441. switch ($balance) {
  442. case 'a':
  443. # code...
  444. $query->where('users.balance', '<', 500);
  445. break;
  446. case 'b':
  447. # code...
  448. $query->where('users.balance', '>=', 500);
  449. $query->where('users.balance', '<', 2000);
  450. break;
  451. case 'c':
  452. # code...
  453. $query->where('users.balance', '>=', 2000);
  454. $query->where('users.balance', '<', 5000);
  455. break;
  456. default:
  457. # code...
  458. break;
  459. }
  460. }
  461. }
  462. if ($category_id) {
  463. if ($category_id != 'z') {
  464. # code...
  465. $query->join('books', 'temp_force_subscribe_users.bid', 'books.id');
  466. $categoryArray = explode(',', $category_id);
  467. $query->wherein('books.category_id', $categoryArray);
  468. // $query->where('books.category_id',$category_id);
  469. }
  470. }
  471. if ($order_type) {
  472. switch ($order_type) {
  473. case 'a':
  474. # code...
  475. //未消费用户
  476. $query->whereNotNull('uid')->whereNotExists(function ($query) {
  477. $query->select(DB::raw(1))
  478. ->from('orders')
  479. ->whereRaw('orders.uid =temp_force_subscribe_users.uid')
  480. ->whereRaw('orders.status="PAID"')
  481. ->limit(1);
  482. });
  483. break;
  484. case 'b':
  485. # code...
  486. //已消费用户
  487. $query->whereExists(function ($query) {
  488. $query->select(DB::raw(1))
  489. ->from('orders')
  490. ->whereRaw('orders.uid =temp_force_subscribe_users.uid')
  491. ->whereRaw('orders.status="PAID"')
  492. ->limit(1);
  493. });
  494. break;
  495. case 'c':
  496. # code...
  497. //包年用户
  498. $query->whereExists(function ($query) {
  499. $query->select(DB::raw(1))
  500. ->from('year_orders')
  501. ->whereRaw('year_orders.uid = temp_force_subscribe_users.uid')
  502. ->where('year_orders.begin_time', '<', date('Y-m-d H:i:s'))
  503. ->where('year_orders.end_time', '>', date('Y-m-d H:i:s'))
  504. ->limit(1);
  505. });
  506. break;
  507. case 'd':
  508. # code...
  509. //6-13小时之间有过订阅记录
  510. $query->whereExists(function ($query) {
  511. $query->select(DB::raw(1))
  512. ->from('orders')
  513. ->whereRaw('orders.uid =temp_force_subscribe_users.uid')
  514. ->whereRaw('orders.status="PAID"')
  515. ->where('orders.created_at','>',date('Y-m-d H:i:s', strtotime('-13 hour')))
  516. ->where('orders.created_at','<=',date('Y-m-d H:i:s', strtotime('-6 hour')))
  517. ->limit(1);
  518. });
  519. break;
  520. default:
  521. # code...
  522. break;
  523. }
  524. }
  525. if ($sign_time) {
  526. switch ($sign_time) {
  527. case 'a':
  528. //签到 60-90分钟内
  529. $query->whereExists(function ($query) {
  530. $query->select(DB::raw(1))
  531. ->from('smart_push_user_sign')
  532. ->whereRaw('smart_push_user_sign.uid =temp_force_subscribe_users.uid')
  533. ->where('smart_push_user_sign.sign_time', '<', (microtime(true) - 60*60))
  534. ->where('smart_push_user_sign.sign_time', '>', (microtime(true) - 60*90))
  535. ->limit(1);
  536. });
  537. break;
  538. default:
  539. break;
  540. }
  541. }
  542. // 单次获取1w,改动此数值,必须更改CustomMsgService下SmartPush方法内对应数值
  543. return $query->skip($skip)->take(10000)->get();
  544. }
  545. private static function subscribeTimeDeal($subscribe_time,$subscribe_time_attach){
  546. $result = [];
  547. if($subscribe_time){
  548. $subscribe_time_list = explode(',',$subscribe_time);
  549. $data = self::subscribeTime();
  550. foreach ($subscribe_time_list as $subscribe_time_list_item){
  551. $temp = isset($data[$subscribe_time_list_item])?$data[$subscribe_time_list_item]:'';
  552. if($temp) $result[] = $temp;
  553. }
  554. }
  555. if($subscribe_time_attach){
  556. $subscribe_time_attach_list = explode(',',$subscribe_time_attach);
  557. foreach ($subscribe_time_attach_list as $subscribe_time_attach_item){
  558. list($min_item,$max_item) = explode('-',$subscribe_time_attach_item);
  559. if(!$min_item && !$max_item) continue;
  560. $min_item_time = -1;
  561. $max_item_time = 0;
  562. if($min_item){
  563. $min_item_time = date('Y-m-d H:i:s', strtotime(-$min_item.' hour'));
  564. }
  565. if($max_item){
  566. $max_item_time = date('Y-m-d H:i:s', strtotime(-$max_item.' hour'));
  567. }
  568. $result[] = [$max_item_time,$min_item_time];
  569. }
  570. }
  571. return $result;
  572. }
  573. private static function subscribeTime($key = ''){
  574. $now = date('Y-m-d H:i:s');
  575. $data = [
  576. 'a'=>[date('Y-m-d H:i:s', strtotime('-5 day')),-1],
  577. 'b'=>[date('Y-m-d H:i:s', strtotime('-15 day')),date('Y-m-d H:i:s', strtotime('-5 day'))],
  578. 'c'=>[date('Y-m-d H:i:s', strtotime('-30 day')),date('Y-m-d H:i:s', strtotime('-15 day'))],
  579. 'd'=>[0,date('Y-m-d H:i:s', strtotime('-30 day'))],
  580. 'e'=>[date('Y-m-d H:i:s', strtotime('-1 day')),$now],
  581. 'f'=>[date('Y-m-d H:i:s', strtotime('-2 day')),date('Y-m-d H:i:s', strtotime('-1 day'))],
  582. 'g'=>[0,date('Y-m-d H:i:s', strtotime('-1 day'))],
  583. 'h'=>[date('Y-m-d H:i:s', strtotime('-25 min')),date('Y-m-d H:i:s', strtotime('-10 min'))],
  584. 'i'=>[date('Y-m-d H:i:s', strtotime('-48 hour')),date('Y-m-d H:i:s', strtotime('-36 hour'))],
  585. 'j'=>[date('Y-m-d H:i:s', strtotime('-48 hour')),date('Y-m-d H:i:s', strtotime('-20 hour'))],
  586. 'k'=>[date('Y-m-d H:i:s', strtotime('-48 hour')),date('Y-m-d H:i:s', strtotime('-42 hour'))],
  587. 'l'=>[date('Y-m-d H:i:s', strtotime('-48 hour')),date('Y-m-d H:i:s', strtotime('-12 hour'))],
  588. 'n'=>[date('Y-m-d H:i:s', strtotime('-24 hour')),date('Y-m-d H:i:s', strtotime('-12 hour'))],
  589. 'o'=>[date('Y-m-d H:i:s', strtotime('-48 hour')),date('Y-m-d H:i:s', strtotime('-24 hour'))],
  590. 'p'=>[date('Y-m-d H:i:s', strtotime('-5 day')),date('Y-m-d H:i:s', strtotime('-48 hour'))]
  591. ];
  592. if($key){
  593. if(isset($data[$key])) return $data[$key];
  594. return [];
  595. }
  596. return $data;
  597. }
  598. private static function userbalance($key = ''){
  599. $data = [
  600. 'a'=>[0,500],
  601. 'b'=>[500,2000],
  602. 'c'=>[2000,5000]
  603. ];
  604. if($key){
  605. if(isset($data[$key])) return $data[$key];
  606. return [];
  607. }
  608. return $data;
  609. }
  610. //指定强关用户获取
  611. static function simpleForceUserCountByPrams($uids, $param=[],$skip = 0)
  612. {
  613. $query = ForceSubscribeUsers::leftjoin('wechat_templates','wechat_templates.appid','force_subscribe_users.appid');
  614. $query->select('force_subscribe_users.id', 'force_subscribe_users.uid', 'force_subscribe_users.distribution_channel_id', 'force_subscribe_users.appid', 'force_subscribe_users.openid',
  615. 'force_subscribe_users.is_subscribed', 'force_subscribe_users.subscribe_time','force_subscribe_users.unsubscribe_time', 'force_subscribe_users.last_interactive_time',
  616. 'force_subscribe_users.bid','wechat_templates.template_id');
  617. $query->where('force_subscribe_users.subscribe_time', '>=','2018-11-15');
  618. $query->where('force_subscribe_users.is_subscribed', 1);
  619. $query->wherein('force_subscribe_users.uid', $uids);
  620. $subscribe_time = isset($param['subscribe_time'])?$param['subscribe_time']:'z';
  621. $category_id = isset($param['category_id'])?$param['category_id']:'z';
  622. $sex = isset($param['sex'])?$param['sex']:'';// 不区分
  623. $balance = isset($param['balance'])?$param['balance']:'';
  624. $order_type = isset($param['order_type'])?$param['order_type']:'z';
  625. $sign_time = isset($param['sign_time'])?$param['sign_time']:'z';
  626. $common_template_id = isset($param['common_template_id'])?$param['common_template_id']:'';
  627. if($common_template_id){
  628. $query->where('wechat_templates.common_template_id', $common_template_id);
  629. // $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'));
  630. }
  631. if ($subscribe_time) {
  632. # code...
  633. switch ($subscribe_time) {
  634. case 'a':
  635. # code...
  636. $selTime = date('Y-m-d H:i:s', strtotime('-5 day'));
  637. $query->where('subscribe_time', '>', $selTime);
  638. break;
  639. case 'b':
  640. # code...
  641. $selTimeStart = date('Y-m-d H:i:s', strtotime('-5 day'));
  642. $selTimeEnd = date('Y-m-d H:i:s', strtotime('-15 day'));
  643. $query->where('subscribe_time', '<=', $selTimeStart);
  644. $query->where('subscribe_time', '>', $selTimeEnd);
  645. break;
  646. case 'c':
  647. # code...
  648. $selTimeStart = date('Y-m-d H:i:s', strtotime('-15 day'));
  649. $selTimeEnd = date('Y-m-d H:i:s', strtotime('-30 day'));
  650. $query->where('subscribe_time', '<=', $selTimeStart);
  651. $query->where('subscribe_time', '>', $selTimeEnd);
  652. break;
  653. case 'd':
  654. # code...
  655. $selTimeStart = date('Y-m-d H:i:s', strtotime('-30 day'));
  656. $query->where('subscribe_time', '<=', $selTimeStart);
  657. break;
  658. case 'e':
  659. # code...
  660. $selTimeStart = date('Y-m-d H:i:s', strtotime('-1 day'));
  661. $selTimeEnd = date('Y-m-d H:i:s');
  662. $query->where('subscribe_time', '<=', $selTimeEnd);
  663. $query->where('subscribe_time', '>', $selTimeStart);
  664. break;
  665. case 'f':
  666. # code...
  667. $selTimeStart = date('Y-m-d H:i:s', strtotime('-2 day'));
  668. $selTimeEnd = date('Y-m-d H:i:s', strtotime('-1 day'));
  669. $query->where('subscribe_time', '<=', $selTimeEnd);
  670. $query->where('subscribe_time', '>', $selTimeStart);
  671. break;
  672. case 'g':
  673. # 客服消息专用,24小时前的老用户,不发给新用户
  674. $selTimeEnd = date('Y-m-d H:i:s', strtotime('-1 day'));
  675. $query->where('subscribe_time', '<=', $selTimeEnd);
  676. break;
  677. case 'h':
  678. // 关注10-50分钟之间
  679. $selTimeStart = date('Y-m-d H:i:s', strtotime('-50 min'));
  680. $selTimeEnd = date('Y-m-d H:i:s', strtotime('-10 min'));
  681. $query->where('subscribe_time', '<=', $selTimeEnd);
  682. $query->where('subscribe_time', '>', $selTimeStart);
  683. break;
  684. case 'i':
  685. # 关注时间 36小时-48小时
  686. $selTimeStart = date('Y-m-d H:i:s', strtotime('-48 hour'));
  687. $selTimeEnd = date('Y-m-d H:i:s', strtotime('-36 hour'));
  688. $query->where('subscribe_time', '<=', $selTimeEnd);
  689. $query->where('subscribe_time', '>', $selTimeStart);
  690. break;
  691. case 'j':
  692. # 关注时间 20小时-48小时
  693. $selTimeStart = date('Y-m-d H:i:s', strtotime('-48 hour'));
  694. $selTimeEnd = date('Y-m-d H:i:s', strtotime('-20 hour'));
  695. $query->where('subscribe_time', '<=', $selTimeEnd);
  696. $query->where('subscribe_time', '>', $selTimeStart);
  697. break;
  698. case 'k':
  699. # 关注时间 42小时-48小时
  700. $selTimeStart = date('Y-m-d H:i:s', strtotime('-48 hour'));
  701. $selTimeEnd = date('Y-m-d H:i:s', strtotime('-42 hour'));
  702. $query->where('subscribe_time', '<=', $selTimeEnd);
  703. $query->where('subscribe_time', '>', $selTimeStart);
  704. break;
  705. case 'l':
  706. # 关注时间 12小时-48小时
  707. $selTimeStart = date('Y-m-d H:i:s', strtotime('-48 hour'));
  708. $selTimeEnd = date('Y-m-d H:i:s', strtotime('-12 hour'));
  709. $query->where('subscribe_time', '<=', $selTimeEnd);
  710. $query->where('subscribe_time', '>', $selTimeStart);
  711. break;
  712. case 'm':
  713. # 关注时间 60小时-80小时
  714. $selTimeStart = date('Y-m-d H:i:s', strtotime('-80 hour'));
  715. $selTimeEnd = date('Y-m-d H:i:s', strtotime('-60 hour'));
  716. $query->where('subscribe_time', '<=', $selTimeEnd);
  717. $query->where('subscribe_time', '>', $selTimeStart);
  718. break;
  719. case 'n':
  720. # 关注时间 12小时-24小时
  721. $selTimeStart = date('Y-m-d H:i:s', strtotime('-24 hour'));
  722. $selTimeEnd = date('Y-m-d H:i:s', strtotime('-12 hour'));
  723. $query->where('subscribe_time', '<=', $selTimeEnd);
  724. $query->where('subscribe_time', '>', $selTimeStart);
  725. break;
  726. case 'o':
  727. # 关注时间 24小时-48小时
  728. $selTimeStart = date('Y-m-d H:i:s', strtotime('-48 hour'));
  729. $selTimeEnd = date('Y-m-d H:i:s', strtotime('-24 hour'));
  730. $query->where('subscribe_time', '<=', $selTimeEnd);
  731. $query->where('subscribe_time', '>', $selTimeStart);
  732. break;
  733. case 'p':
  734. # 关注时间 48小时-5天
  735. $selTimeStart = date('Y-m-d H:i:s', strtotime('-5 day'));
  736. $selTimeEnd = date('Y-m-d H:i:s', strtotime('-48 hour'));
  737. $query->where('subscribe_time', '<=', $selTimeEnd);
  738. $query->where('subscribe_time', '>', $selTimeStart);
  739. break;
  740. default:
  741. # code...
  742. break;
  743. }
  744. }
  745. if ($sex || $balance) {
  746. # code...
  747. $query->join('users', 'force_subscribe_users.uid', '=', 'users.id');
  748. if ($sex) {
  749. # code...
  750. switch ($sex) {
  751. case 'a':
  752. # code...
  753. $query->where('users.sex', 1);
  754. break;
  755. case 'b':
  756. # code...
  757. $query->where('users.sex', 2);
  758. break;
  759. default:
  760. # code...
  761. break;
  762. }
  763. }
  764. if ($balance) {
  765. # code...
  766. switch ($balance) {
  767. case 'a':
  768. # code...
  769. $query->where('users.balance', '<', 500);
  770. break;
  771. case 'b':
  772. # code...
  773. $query->where('users.balance', '>=', 500);
  774. $query->where('users.balance', '<', 2000);
  775. break;
  776. case 'c':
  777. # code...
  778. $query->where('users.balance', '>=', 2000);
  779. $query->where('users.balance', '<', 5000);
  780. break;
  781. default:
  782. # code...
  783. break;
  784. }
  785. }
  786. }
  787. if ($category_id) {
  788. if ($category_id != 'z') {
  789. # code...
  790. $query->join('books', 'force_subscribe_users.bid', 'books.id');
  791. $categoryArray = explode(',', $category_id);
  792. $query->wherein('books.category_id', $categoryArray);
  793. // $query->where('books.category_id',$category_id);
  794. }
  795. }
  796. if ($order_type) {
  797. switch ($order_type) {
  798. case 'a':
  799. # code...
  800. //未消费用户
  801. $query->whereNotExists(function ($query) {
  802. $query->select(DB::raw(1))
  803. ->from('orders')
  804. ->whereRaw('orders.uid =force_subscribe_users.uid')
  805. ->whereRaw('orders.status="PAID"')
  806. ->limit(1);
  807. });
  808. break;
  809. case 'b':
  810. # code...
  811. //已消费用户
  812. $query->whereExists(function ($query) {
  813. $query->select(DB::raw(1))
  814. ->from('orders')
  815. ->whereRaw('orders.uid =force_subscribe_users.uid')
  816. ->whereRaw('orders.status="PAID"')
  817. ->limit(1);
  818. });
  819. break;
  820. case 'c':
  821. # code...
  822. //包年用户
  823. $query->whereExists(function ($query) {
  824. $query->select(DB::raw(1))
  825. ->from('year_orders')
  826. ->whereRaw('year_orders.uid = force_subscribe_users.uid')
  827. ->where('year_orders.begin_time', '<', date('Y-m-d H:i:s'))
  828. ->where('year_orders.end_time', '>', date('Y-m-d H:i:s'))
  829. ->limit(1);
  830. });
  831. break;
  832. default:
  833. # code...
  834. break;
  835. }
  836. }
  837. if ($sign_time) {
  838. switch ($sign_time) {
  839. case 'a':
  840. //签到 60-90分钟内
  841. $query->whereExists(function ($query) {
  842. $query->select(DB::raw(1))
  843. ->from('user_sign')
  844. ->whereRaw('user_sign.uid =force_subscribe_users.uid')
  845. ->where('user_sign.sign_time', '<', (microtime(true) - 60*60))
  846. ->where('user_sign.sign_time', '>', (microtime(true) - 60*90))
  847. ->limit(1);
  848. });
  849. break;
  850. default:
  851. break;
  852. }
  853. }
  854. // 单次获取1w,改动此数值,必须更改CustomMsgService下SmartPush方法内对应数值
  855. return $query->skip($skip)->take(10000)->get();
  856. }
  857. //根据客服消息传的各项条件检索用户--老版
  858. static function forceUserCountByCustomPrams2($appids, $distribution_channel_id, $subscribe_time = '', $sex = '', $balance = '', $category_id = '', $order_type = '', $sign_time = '', $skip = 0)
  859. {
  860. $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');
  861. $query->where('force_subscribe_users.distribution_channel_id', $distribution_channel_id);
  862. $query->where('force_subscribe_users.is_subscribed', 1);
  863. $appidArray = explode(',', $appids);
  864. $query->wherein('force_subscribe_users.appid', $appidArray);
  865. $canSendDate = date('Y-m-d H:i:s', strtotime('-2 day'));
  866. $query->where('force_subscribe_users.last_interactive_time', '>', $canSendDate);
  867. if ($subscribe_time) {
  868. # code...
  869. switch ($subscribe_time) {
  870. case 'a':
  871. # code...
  872. $selTime = date('Y-m-d H:i:s', strtotime('-5 day'));
  873. $query->where('subscribe_time', '>', $selTime);
  874. break;
  875. case 'b':
  876. # code...
  877. $selTimeStart = date('Y-m-d H:i:s', strtotime('-5 day'));
  878. $selTimeEnd = date('Y-m-d H:i:s', strtotime('-15 day'));
  879. $query->where('subscribe_time', '<=', $selTimeStart);
  880. $query->where('subscribe_time', '>', $selTimeEnd);
  881. break;
  882. case 'c':
  883. # code...
  884. $selTimeStart = date('Y-m-d H:i:s', strtotime('-15 day'));
  885. $selTimeEnd = date('Y-m-d H:i:s', strtotime('-30 day'));
  886. $query->where('subscribe_time', '<=', $selTimeStart);
  887. $query->where('subscribe_time', '>', $selTimeEnd);
  888. break;
  889. case 'd':
  890. # code...
  891. $selTimeStart = date('Y-m-d H:i:s', strtotime('-30 day'));
  892. $query->where('subscribe_time', '<=', $selTimeStart);
  893. break;
  894. case 'e':
  895. # code...
  896. $selTimeStart = date('Y-m-d H:i:s', strtotime('-1 day'));
  897. $selTimeEnd = date('Y-m-d H:i:s');
  898. $query->where('subscribe_time', '<=', $selTimeEnd);
  899. $query->where('subscribe_time', '>', $selTimeStart);
  900. break;
  901. case 'f':
  902. # code...
  903. $selTimeStart = date('Y-m-d H:i:s', strtotime('-2 day'));
  904. $selTimeEnd = date('Y-m-d H:i:s', strtotime('-1 day'));
  905. $query->where('subscribe_time', '<=', $selTimeEnd);
  906. $query->where('subscribe_time', '>', $selTimeStart);
  907. break;
  908. case 'g':
  909. # 客服消息专用,24小时前的老用户,不发给新用户
  910. $selTimeEnd = date('Y-m-d H:i:s', strtotime('-1 day'));
  911. $query->where('subscribe_time', '<=', $selTimeEnd);
  912. break;
  913. case 'h':
  914. // 关注10-25分钟之间
  915. $selTimeStart = date('Y-m-d H:i:s', strtotime('-25 min'));
  916. $selTimeEnd = date('Y-m-d H:i:s', strtotime('-10 min'));
  917. $query->where('subscribe_time', '<=', $selTimeEnd);
  918. $query->where('subscribe_time', '>', $selTimeStart);
  919. break;
  920. case 'i':
  921. # 关注时间 36小时-48小时
  922. $selTimeStart = date('Y-m-d H:i:s', strtotime('-48 hour'));
  923. $selTimeEnd = date('Y-m-d H:i:s', strtotime('-36 hour'));
  924. $query->where('subscribe_time', '<=', $selTimeEnd);
  925. $query->where('subscribe_time', '>', $selTimeStart);
  926. break;
  927. case 'j':
  928. # 关注时间 20小时-48小时
  929. $selTimeStart = date('Y-m-d H:i:s', strtotime('-48 hour'));
  930. $selTimeEnd = date('Y-m-d H:i:s', strtotime('-20 hour'));
  931. $query->where('subscribe_time', '<=', $selTimeEnd);
  932. $query->where('subscribe_time', '>', $selTimeStart);
  933. break;
  934. case 'k':
  935. # 关注时间 42小时-48小时
  936. $selTimeStart = date('Y-m-d H:i:s', strtotime('-48 hour'));
  937. $selTimeEnd = date('Y-m-d H:i:s', strtotime('-42 hour'));
  938. $query->where('subscribe_time', '<=', $selTimeEnd);
  939. $query->where('subscribe_time', '>', $selTimeStart);
  940. break;
  941. case 'l':
  942. # 关注时间 12小时-48小时
  943. $selTimeStart = date('Y-m-d H:i:s', strtotime('-48 hour'));
  944. $selTimeEnd = date('Y-m-d H:i:s', strtotime('-12 hour'));
  945. $query->where('subscribe_time', '<=', $selTimeEnd);
  946. $query->where('subscribe_time', '>', $selTimeStart);
  947. break;
  948. default:
  949. # code...
  950. break;
  951. }
  952. }
  953. if ($sex || $balance) {
  954. # code...
  955. $query->join('users', 'force_subscribe_users.uid', '=', 'users.id');
  956. if ($sex) {
  957. # code...
  958. switch ($sex) {
  959. case 'a':
  960. # code...
  961. $query->where('users.sex', 1);
  962. break;
  963. case 'b':
  964. # code...
  965. $query->where('users.sex', 2);
  966. break;
  967. default:
  968. # code...
  969. break;
  970. }
  971. }
  972. if ($balance) {
  973. # code...
  974. switch ($balance) {
  975. case 'a':
  976. # code...
  977. $query->where('users.balance', '<', 500);
  978. break;
  979. case 'b':
  980. # code...
  981. $query->where('users.balance', '>=', 500);
  982. $query->where('users.balance', '<', 2000);
  983. break;
  984. case 'c':
  985. # code...
  986. $query->where('users.balance', '>=', 2000);
  987. $query->where('users.balance', '<', 5000);
  988. break;
  989. default:
  990. # code...
  991. break;
  992. }
  993. }
  994. }
  995. if ($category_id) {
  996. if ($category_id != 'z') {
  997. # code...
  998. $query->join('books', 'force_subscribe_users.bid', 'books.id');
  999. $categoryArray = explode(',', $category_id);
  1000. $query->wherein('books.category_id', $categoryArray);
  1001. // $query->where('books.category_id',$category_id);
  1002. }
  1003. }
  1004. if ($order_type) {
  1005. switch ($order_type) {
  1006. case 'a':
  1007. # code...
  1008. //未消费用户
  1009. $query->whereNotExists(function ($query) {
  1010. $query->select(DB::raw(1))
  1011. ->from('orders')
  1012. ->whereRaw('orders.uid =force_subscribe_users.uid')
  1013. ->whereRaw('orders.status="PAID"')
  1014. ->limit(1);
  1015. });
  1016. break;
  1017. case 'b':
  1018. # code...
  1019. //已消费用户
  1020. $query->whereExists(function ($query) {
  1021. $query->select(DB::raw(1))
  1022. ->from('orders')
  1023. ->whereRaw('orders.uid =force_subscribe_users.uid')
  1024. ->whereRaw('orders.status="PAID"')
  1025. ->limit(1);
  1026. });
  1027. break;
  1028. case 'c':
  1029. # code...
  1030. //包年用户
  1031. $query->whereExists(function ($query) {
  1032. $query->select(DB::raw(1))
  1033. ->from('year_orders')
  1034. ->whereRaw('year_orders.uid = force_subscribe_users.uid')
  1035. ->where('year_orders.begin_time', '<', date('Y-m-d H:i:s'))
  1036. ->where('year_orders.end_time', '>', date('Y-m-d H:i:s'))
  1037. ->limit(1);
  1038. });
  1039. break;
  1040. default:
  1041. # code...
  1042. break;
  1043. }
  1044. }
  1045. if ($sign_time) {
  1046. switch ($sign_time) {
  1047. case 'a':
  1048. //签到 60-90分钟内
  1049. $query->whereExists(function ($query) {
  1050. $query->select(DB::raw(1))
  1051. ->from('user_sign')
  1052. ->whereRaw('user_sign.uid =force_subscribe_users.uid')
  1053. ->where('user_sign.sign_time', '<', (microtime(true) - 60*60))
  1054. ->where('user_sign.sign_time', '>', (microtime(true) - 60*90))
  1055. ->limit(1);
  1056. });
  1057. break;
  1058. default:
  1059. break;
  1060. }
  1061. }
  1062. // 单次获取1w,改动此数值,必须更改CustomMsgService下SmartPush方法内对应数值
  1063. return $query->skip($skip)->take(10000)->get();
  1064. }
  1065. /**
  1066. * 通过uid获取用户关注的服务号名称
  1067. * @param $uid
  1068. * @return mixed
  1069. */
  1070. static function getOfficalAccountNickName($uid)
  1071. {
  1072. $search_obj = self::select('official_accounts.nickname')->leftjoin('official_accounts', 'force_subscribe_users.appid', '=', 'official_accounts.appid')->where('force_subscribe_users.uid', $uid);
  1073. return $search_obj->first();
  1074. }
  1075. /**
  1076. * 根据openid获取用户的性别信息
  1077. * @param unknown_type $distribution_channel_id
  1078. * @param unknown_type $openid
  1079. */
  1080. static function getSexByOpenid($distribution_channel_id,$openid){
  1081. $sex = self::join('books','force_subscribe_users.bid','books.id')
  1082. ->join('book_categories', 'books.category_id', 'book_categories.id')
  1083. ->select('book_categories.channel_name','force_subscribe_users.bid')
  1084. ->where('force_subscribe_users.openid',$openid)
  1085. ->where('force_subscribe_users.distribution_channel_id',$distribution_channel_id)
  1086. ->first();
  1087. \Log::info('getSexByOpenid:'.$openid.' sex:'.json_encode($sex));
  1088. if(isset($sex->channel_name) && $sex->channel_name){
  1089. if($sex->channel_name == '男频'){
  1090. return 1;
  1091. }
  1092. return 2;
  1093. }else{
  1094. // 判断用户性别
  1095. $user = self::join('users','force_subscribe_users.uid','users.id')
  1096. ->select('users.sex')
  1097. ->where('force_subscribe_users.openid',$openid)
  1098. ->where('force_subscribe_users.distribution_channel_id',$distribution_channel_id)
  1099. ->first();
  1100. \Log::info('getSexByOpenid_user_openid:'.$openid.' sex:'.json_encode($user));
  1101. if(isset($user->sex) && $user->sex == 1){
  1102. \Log::info('getSexByOpenid_by_user_sex:'.$user->sex);
  1103. return 1;
  1104. }
  1105. return 2;
  1106. }
  1107. }
  1108. /**
  1109. * 根据openid获取用户的性别信息--无需判断性别
  1110. */
  1111. static function getSimpleSexByOpenid($distribution_channel_id,$openid){
  1112. $sex = self::join('books','force_subscribe_users.bid','books.id')
  1113. ->join('book_categories', 'books.category_id', 'book_categories.id')
  1114. ->select('book_categories.channel_name','force_subscribe_users.bid')
  1115. ->where('force_subscribe_users.openid',$openid)
  1116. ->where('force_subscribe_users.distribution_channel_id',$distribution_channel_id)
  1117. ->first();
  1118. \Log::info('getSimpleSexByOpenid:'.$openid.' sex:'.json_encode($sex));
  1119. if(isset($sex->channel_name) && $sex->channel_name){
  1120. if($sex->channel_name == '男频'){
  1121. return 1;
  1122. }
  1123. }
  1124. return 2;
  1125. }
  1126. /**
  1127. * 根据uid获取用户的性别信息--无需判断性别
  1128. */
  1129. static function getSimpleSexByUid($uid){
  1130. if($uid == 0){
  1131. return 2;
  1132. }
  1133. $sex = self::join('books','force_subscribe_users.bid','books.id')
  1134. ->join('book_categories', 'books.category_id', 'book_categories.id')
  1135. ->select('book_categories.channel_name','force_subscribe_users.bid')
  1136. ->where('force_subscribe_users.uid',$uid)
  1137. ->first();
  1138. \Log::info('getSimpleSexByUid:'.$uid.' sex:'.json_encode($sex));
  1139. if(isset($sex->channel_name) && $sex->channel_name){
  1140. if($sex->channel_name == '男频'){
  1141. return 1;
  1142. }
  1143. }
  1144. return 2;
  1145. }
  1146. public static function getOldUserNewSubsribeNum($params){
  1147. $obj = DB::table('official_accounts')->orderBy('id');
  1148. //\Log::info('getOldUser:'.$obj->toSql().json_encode($params));
  1149. if(isset($params['distribution_channel_id']) && $params['distribution_channel_id']){
  1150. $obj->where('distribution_channel_id',$params['distribution_channel_id']);
  1151. }
  1152. $res = 0;
  1153. $official_accounts = $obj->get();
  1154. $date = date('Y-m-d');
  1155. if(isset($params['start_time']) && $params['start_time']) {
  1156. $date = date('Y-m-d',strtotime($params['start_time']));
  1157. }
  1158. foreach ($official_accounts as $official_account) {
  1159. $count = \Redis::scard('gzh_old_sub:'.($official_account->appid).':'.$date);
  1160. \Log::info('gzh_old_sub:'.($official_account->appid).':'.$date.$count);
  1161. $res += $count;
  1162. }
  1163. return $res;
  1164. }
  1165. public static function getOldUserNewSubsribeNumV1($params){
  1166. $obj = self::whereRaw('force_subscribe_users.subscribe_time > force_subscribe_users.created_at');
  1167. if(isset($params['distribution_channel_id']) && $params['distribution_channel_id']){
  1168. $obj->where('distribution_channel_id',$params['distribution_channel_id']);
  1169. }
  1170. if(isset($params['start_time']) && $params['start_time']){
  1171. $obj->where('subscribe_time','>=',$params['start_time']);
  1172. }
  1173. if(isset($params['end_time']) && $params['end_time']){
  1174. $obj->where('subscribe_time','<=',$params['end_time']);
  1175. }
  1176. //\Log::info('getOldUser:'.$obj->toSql().json_encode($params));
  1177. return $obj->count('id');
  1178. }
  1179. }