TempForceSubscribeUsers.php 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  1. <?php
  2. namespace App\Modules\OfficialAccount\Models;
  3. use Illuminate\Database\Eloquent\Model;
  4. use DB;
  5. class TempForceSubscribeUsers extends Model
  6. {
  7. protected $connection = 'api_mysql';
  8. protected $tables = 'temp_force_subscribe_users';
  9. protected $fillable = ['uid', 'distribution_channel_id', 'bid','is_subscribed','subscribe_time','unsubscribe_time','appid', 'openid', 'last_interactive_time'];
  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. * 根据openid和appid获取强关用户
  19. */
  20. static function get_user_by_offset($distribution_channel_id,$limit,$offset,$start_time)
  21. {
  22. return self::where('distribution_channel_id', $distribution_channel_id)
  23. ->where('last_interactive_time','>=',$start_time)
  24. ->select('uid','openid')
  25. ->limit($limit)
  26. ->offset($offset)
  27. ->get();
  28. }
  29. /**
  30. * 删除N天前的数据,保持最近几天热数据
  31. */
  32. static function deleteTempForceSubscribeUsersByTime($end_time)
  33. {
  34. while (true)
  35. {
  36. $affect_rows = self::where('last_interactive_time','<=',$end_time)->limit(50000)->delete();
  37. if(!$affect_rows) break;
  38. sleep(1);
  39. }
  40. return true;
  41. //return self::where('last_interactive_time','<=',$end_time)->delete();
  42. }
  43. /**
  44. * 获取所有强关用户
  45. */
  46. static function forceSubscribeUsersAllOf()
  47. {
  48. return self::where('is_subscribed', 1)->get();
  49. }
  50. /**
  51. * 根据uid获取强关用户
  52. */
  53. static function forceSubscribeUsersByUid($uid)
  54. {
  55. return self::where(['uid' => $uid, 'is_subscribed' => 1])->first();
  56. }
  57. /**
  58. * 根据openid获取一个强关用户
  59. */
  60. static function forceSubscribeUsersByOpenid($openid, $appid = '')
  61. {
  62. return self::where(['openid' => $openid, 'is_subscribed' => 1])->first();
  63. }
  64. /**
  65. * openid获取强关用户
  66. */
  67. static function getOneForceSubscribeUsersByOpenid($openid)
  68. {
  69. return self::where('openid', $openid)->first();
  70. }
  71. /**
  72. * 根据openid获取强关用户
  73. */
  74. static function forceSubscribeUsersByOpenidAndAC($openid, $appid = '', $distribution_channel_id = '')
  75. {
  76. $query = self::where('openid', $openid);
  77. if ($appid) {
  78. # code...
  79. $query->where('appid', $appid);
  80. }
  81. if ($distribution_channel_id) {
  82. # code...
  83. $query->where('distribution_channel_id', $distribution_channel_id);
  84. }
  85. return $query->first();
  86. }
  87. /**
  88. * 根据openid获取强关用户
  89. */
  90. static function forceSubscribeUsersByOpenidAndChannelId($openid, $distribution_channel_id)
  91. {
  92. return self::where(['openid' => $openid, 'distribution_channel_id' => $distribution_channel_id])->first();
  93. }
  94. /**
  95. * 根据openid获取一个取关用户
  96. */
  97. static function forceUnSubscribeUsersByOpenid($openid)
  98. {
  99. return self::where(['openid' => $openid, 'is_subscribed' => 0])->first();
  100. }
  101. /**
  102. * 根据openid获取全部取关用户
  103. */
  104. static function forceAllUnSubscribeUsersByOpenid($openid)
  105. {
  106. return self::where(['openid' => $openid, 'is_subscribed' => 0])->get();
  107. }
  108. /**
  109. * 根据appid获取强关用户
  110. */
  111. static function forceSubscribeUsersByAppid($appid)
  112. {
  113. return self::where(['appid' => $appid, 'is_subscribed' => 1])->get();
  114. }
  115. /**
  116. * 根据appid获取强关用户数量
  117. */
  118. static function forceSubscribeUsersCountByAppid($appid)
  119. {
  120. return self::where(['appid' => $appid, 'is_subscribed' => 1])->count();
  121. }
  122. }