ForceSubscribeUsers.php 46 KB

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