ForceSubscribeUserIService.php 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  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;}) )
  19. return ['is_subscribed'=>true,'appid'=>''];
  20. $subscribe_appdis = $subscribe_info->pluck('appid')->all();
  21. echo '$subscribe_appdis'.PHP_EOL;
  22. print_r($subscribe_appdis);
  23. $useable_appdis = self::getOfficialAccount($distribution_channel_id);
  24. echo '$useable_appdis'.PHP_EOL;
  25. print_r($useable_appdis);
  26. //没有可用的公众号
  27. if(empty($useable_appdis)) return ['is_subscribed'=>true,'appid'=>''];
  28. echo '2222222222222222222222'.PHP_EOL;
  29. $appids = collect($useable_appdis)->diff($subscribe_appdis)->toArray();
  30. if($appids){
  31. echo '33333333333333333333'.PHP_EOL;
  32. return ['is_subscribed'=>false,'appid'=>$appids[0]];
  33. }
  34. return ['is_subscribed'=>true,'appid'=>''];
  35. }
  36. //用户强关公众号
  37. public static function getUserSubscribes($uid){
  38. return ForceSubscribeUsers::where('uid',$uid)->where('is_subscribed',1)->select('appid','send_order_id')->get();
  39. }
  40. //可用公众号
  41. public static function getOfficialAccount($distribution_channel_id){
  42. $result = OfficialAccount::where('distribution_channel_id',$distribution_channel_id)
  43. ->where('is_auth',1)
  44. ->where('is_enabled',1)
  45. ->where('subscribe_top_num','>',0)
  46. ->where('subscribe_day_maximum','>',0)
  47. ->orderBy('sort_no', 'desc')
  48. ->select('appid','subscribe_top_num','subscribe_day_maximum')
  49. ->get();
  50. if($result->isEmpty()) return [];
  51. $data = [];
  52. foreach ($result as $value){
  53. $fans_stats = self::getOfficialAccountFanStats($value->appid);
  54. {
  55. $fans_stats['day_fans'] < $value->subscribe_day_maximum
  56. && $fans_stats['all_fans'] < $value->subscribe_top_num && array_push($data,$value->appid);
  57. }
  58. }
  59. return $data;
  60. }
  61. //粉丝数
  62. public static function getOfficialAccountFanStats($appid){
  63. $total_fans_cancel_nums = (int)Redis::hget('day_appid_fans_nums_appid:cancel:' . $appid, 'total');
  64. $total_fan_info = Redis::hmget('day_appid_fans_nums_appid:add:' . $appid,['total',date('Y-m-d')]);
  65. $total_fans_add_nums = $total_fan_info[0]?$total_fan_info[0]:0;
  66. $day_fans = $total_fan_info[1]?$total_fan_info[1]:0;
  67. $all_fans = $total_fans_add_nums - $total_fans_cancel_nums;
  68. return compact('day_fans','all_fans');
  69. }
  70. }