ForceSubscribeUsers.php 46 KB

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