123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- <?php
- /**
- * Created by PhpStorm.
- * User: z-yang
- * Date: 2019/3/26
- * Time: 15:09
- */
- namespace App\Modules\User\Services;
- use App\Modules\OfficialAccount\Models\ForceSubscribeUsers;
- use App\Modules\OfficialAccount\Models\OfficialAccount;
- use Redis;
- class ForceSubscribeUserIService
- {
- private static $official_name = [];
- public static function subscribes($uid, $distribution_channel_id, $send_order_id)
- {
- $subscribe_info = self::getUserSubscribes($uid);
- //没关注
- if ($subscribe_info->isNotEmpty() &&
- $subscribe_info->search(
- function ($item, $k) use ($send_order_id) {
- return $item->send_order_id == $send_order_id;
- }
- ) !== false
- ) {
- return ['is_subscribed' => true, 'appid' => '','name'=>''];
- }
- $subscribe_appdis = $subscribe_info->pluck('appid')->all();
- $useable_appdis = self::getOfficialAccount($distribution_channel_id);
- //没有可用的公众号
- if (empty($useable_appdis)) return ['is_subscribed' => true, 'appid' => '','name'=>''];
- $appids = collect($useable_appdis)->diff($subscribe_appdis)->toArray();
- if ($appids && isset($appids[0])) {
- return ['is_subscribed' => false, 'appid' => $appids[0],'name'=>self::$official_name[$appids[0]]];
- }
- return ['is_subscribed' => true, 'appid' => '','name'=>''];
- }
- //用户强关公众号
- public static function getUserSubscribes($uid)
- {
- return ForceSubscribeUsers::where('uid', $uid)->where('is_subscribed', 1)->select('appid', 'send_order_id')->get();
- }
- //可用公众号
- public static function getOfficialAccount($distribution_channel_id)
- {
- $result = OfficialAccount::where('distribution_channel_id', $distribution_channel_id)
- ->where('is_auth', 1)
- ->where('is_enabled', 1)
- ->where('subscribe_top_num', '>', 0)
- ->where('subscribe_day_maximum', '>', 0)
- ->orderBy('sort_no', 'desc')
- ->select('appid', 'subscribe_top_num', 'subscribe_day_maximum','nickname')
- ->get();
- if ($result->isEmpty()) return [];
- $data = [];
- foreach ($result as $value) {
- self::$official_name[$value->appid] = $value->nickname;
- $fans_stats = self::getOfficialAccountFanStats($value->appid);
- {
- $fans_stats['day_fans'] < $value->subscribe_day_maximum
- && $fans_stats['all_fans'] < $value->subscribe_top_num && array_push($data, $value->appid);
- }
- }
- return $data;
- }
- //粉丝数
- public static function getOfficialAccountFanStats($appid)
- {
- $total_fans_cancel_nums = (int)Redis::hget('day_appid_fans_nums_appid:cancel:' . $appid, 'total');
- $total_fan_info = Redis::hmget('day_appid_fans_nums_appid:add:' . $appid, ['total', date('Y-m-d')]);
- $total_fans_add_nums = $total_fan_info[0] ? $total_fan_info[0] : 0;
- $day_fans = $total_fan_info[1] ? $total_fan_info[1] : 0;
- $all_fans = $total_fans_add_nums - $total_fans_cancel_nums;
- return compact('day_fans', 'all_fans');
- }
- public static function getForceSubscribeByUidOpenid($uid) {
- $user_info = UserService::getById($uid);
- if($user_info) {
- $force_subs_info = ForceSubscribeUsers::join('users','users.id','=','force_subscribe_users.uid')
- ->select(['force_subscribe_users.uid','force_subscribe_users.subscribe_time',
- 'force_subscribe_users.created_at','users.openid','force_subscribe_users.is_subscribed'])
- ->where('users.openid',$user_info->openid)
- ->where('force_subscribe_users.is_subscribed',1)
- ->orderBy('force_subscribe_users.id','asc')
- ->first();
- return $force_subs_info;
- }
- return false;
- }
- }
|