ForceSubscribeUserIService.php 3.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: z-yang
  5. * Date: 2019/3/26
  6. * Time: 15:09
  7. */
  8. namespace App\Modules\User\Services;
  9. use App\Modules\OfficialAccount\Models\ForceSubscribeUsers;
  10. use App\Modules\OfficialAccount\Models\OfficialAccount;
  11. use Redis;
  12. class ForceSubscribeUserIService
  13. {
  14. public static function subscribes($uid,$distribution_channel_id,$send_order_id){
  15. $subscribe_info = self::getUserSubscribes($uid);
  16. //没关注
  17. if($subscribe_info->isNotEmpty() &&
  18. $subscribe_info->search(function ($item,$k)use ($send_order_id) { return $item->send_order_id == $send_order_id;}) !== false ){
  19. return ['is_subscribed'=>true,'appid'=>''];
  20. }
  21. $subscribe_appdis = $subscribe_info->pluck('appid')->all();
  22. echo '$subscribe_appdis'.PHP_EOL;
  23. print_r($subscribe_appdis);
  24. $useable_appdis = self::getOfficialAccount($distribution_channel_id);
  25. echo '$useable_appdis'.PHP_EOL;
  26. print_r($useable_appdis);
  27. //没有可用的公众号
  28. if(empty($useable_appdis)) return ['is_subscribed'=>true,'appid'=>''];
  29. echo '2222222222222222222222'.PHP_EOL;
  30. $appids = collect($useable_appdis)->diff($subscribe_appdis)->toArray();
  31. if($appids){
  32. echo '33333333333333333333'.PHP_EOL;
  33. return ['is_subscribed'=>false,'appid'=>$appids[0]];
  34. }
  35. return ['is_subscribed'=>true,'appid'=>''];
  36. }
  37. //用户强关公众号
  38. public static function getUserSubscribes($uid){
  39. return ForceSubscribeUsers::where('uid',$uid)->where('is_subscribed',1)->select('appid','send_order_id')->get();
  40. }
  41. //可用公众号
  42. public static function getOfficialAccount($distribution_channel_id){
  43. $result = OfficialAccount::where('distribution_channel_id',$distribution_channel_id)
  44. ->where('is_auth',1)
  45. ->where('is_enabled',1)
  46. ->where('subscribe_top_num','>',0)
  47. ->where('subscribe_day_maximum','>',0)
  48. ->orderBy('sort_no', 'desc')
  49. ->select('appid','subscribe_top_num','subscribe_day_maximum')
  50. ->get();
  51. if($result->isEmpty()) return [];
  52. $data = [];
  53. foreach ($result as $value){
  54. $fans_stats = self::getOfficialAccountFanStats($value->appid);
  55. {
  56. $fans_stats['day_fans'] < $value->subscribe_day_maximum
  57. && $fans_stats['all_fans'] < $value->subscribe_top_num && array_push($data,$value->appid);
  58. }
  59. }
  60. return $data;
  61. }
  62. //粉丝数
  63. public static function getOfficialAccountFanStats($appid){
  64. $total_fans_cancel_nums = (int)Redis::hget('day_appid_fans_nums_appid:cancel:' . $appid, 'total');
  65. $total_fan_info = Redis::hmget('day_appid_fans_nums_appid:add:' . $appid,['total',date('Y-m-d')]);
  66. $total_fans_add_nums = $total_fan_info[0]?$total_fan_info[0]:0;
  67. $day_fans = $total_fan_info[1]?$total_fan_info[1]:0;
  68. $all_fans = $total_fans_add_nums - $total_fans_cancel_nums;
  69. return compact('day_fans','all_fans');
  70. }
  71. public static function getForceSubscribeByUidOpenid($uid) {
  72. $user_info = UserService::getById($uid);
  73. if($user_info) {
  74. $force_subs_info = ForceSubscribeUsers::where('openid',$user_info->openid)->orderBy('id','asc')->first();
  75. return $force_subs_info;
  76. }
  77. return false;
  78. }
  79. }