123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252 |
- <?php
- /**
- * Created by PhpStorm.
- * User: Elton
- * Date: 2020/4/22
- * Time: 11:47
- */
- namespace app\common\service;
- use app\common\library\Redis;
- use app\common\model\UserVipExtend;
- use app\main\constants\UserConstants;
- use app\main\helper\ArrayHelper;
- use app\main\model\object\AdminConfigObject;
- use app\main\model\object\BaseObject;
- use app\main\service\ApiService;
- use app\main\service\UserService;
- use app\source\model\UserUpdate;
- class UserVipExtendService
- {
- public static $self;
- protected $redisKey = UserConstants::USER_VIP_START_TIME_PRE;
- /**
- * @return UserVipExtendService
- */
- public static function instance()
- {
- if(self::$self == NULL){
- self::$self = new self();
- }
- return self::$self;
- }
- /**
- * @return UserVipExtend
- */
- public function getUserVipExtendModel(){
- return model('UserVipExtend');
- }
- /**
- * 维护 vip_starttime
- * @param $user_id
- * @param $start_time VIP 开始时间
- */
- public function saveVipStartTime($user_id, $start_time)
- {
- // 维护缓存,供前台使用
- $redisKey = $this->redisKey . $user_id;
- if (ApiService::instance()->checkApiOn()) {
- if ($this->getVipStartTime($user_id) != $start_time) {
- $userUpdate = new UserUpdate();
- $userUpdate->setVipStarttime($start_time)->setId($user_id);
- \app\source\service\UserService::instance()->updateUser($userUpdate);
- Redis::instance()->del($redisKey);
- }
- } else {
- $obj = $this->getUserVipExtendModel()->where('user_id', 'eq', $user_id)->find();
- if ($obj) {
- // 更新
- $this->getUserVipExtendModel()->where('user_id', 'eq', $user_id)->update(['vip_starttime' => $start_time, 'updatetime' => time()]);
- } else {
- // 插入
- $data = [
- 'user_id' => $user_id,
- 'vip_starttime' => $start_time
- ];
- $this->getUserVipExtendModel()->save($data);
- }
- Redis::instance()->set($redisKey, $start_time, 86400);
- }
- }
- /**
- * 维护用户隶属的快分推手id
- * @param $userId
- * @param $kuaifenId 快分推手id
- */
- public function saveUserKuaifenId($userId, $kuaifenId)
- {
- if (ApiService::instance()->checkApiOn()) {
- if ($this->getUserKuaifenId($userId) != $kuaifenId) {
- $userUpdate = new UserUpdate();
- $userUpdate->setKuaifen($kuaifenId)->setId($userId);
- \app\source\service\UserService::instance()->updateUser($userUpdate);
- }
- } else {
- $obj = $this->getUserVipExtendModel()->where('user_id', $userId)->find();
- if ($obj) {
- if ($obj['ext_a'] != $kuaifenId) {
- $this->getUserVipExtendModel()->where('user_id', $userId)->update([
- 'ext_a' => $kuaifenId,
- 'updatetime' => time()
- ]);
- }
- } else {
- $data = ['user_id' => $userId, 'ext_a' => $kuaifenId, 'createtime' => time(), 'updatetime' => time()];
- $this->getUserVipExtendModel()->insert($data);
- }
- }
- }
- /**
- * 获取用户隶属快分app的推手id
- * @param $userId
- * @return int|mixed
- */
- public function getUserKuaifenId($userId)
- {
- if (!$userId) {
- return 0;
- }
- if (ApiService::instance()->checkApiOn()) {
- return (int)\app\source\service\UserService::instance()->getUserInfo($userId)->kuaifen;
- } else {
- $obj = $this->getUserVipExtendModel()->where('user_id', $userId)->find();
- if ($obj) {
- return $obj['ext_a'];
- } else {
- return 0;
- }
- }
- }
- /**
- * 获取 用户 vip开始时间
- * @param $user_id
- * @return bool|int|string
- */
- public function getVipStartTime($user_id)
- {
- if (!$user_id) {
- return 0;
- }
- if (ApiService::instance()->checkApiOn()) {
- return (int)\app\source\service\UserService::instance()->getUserInfo($user_id)->vip_starttime;
- } else {
- $redisKey = $this->redisKey.$user_id;
- if ($rst = Redis::instance()->get($redisKey)) {
- return $rst;
- } else {
- $obj = $this->getUserVipExtendModel()->where('user_id', 'eq', $user_id)->find();
- if ($obj) {
- $start_time = intval($obj->vip_starttime);
- Redis::instance()->set($redisKey, $start_time, 86400);
- return $start_time;
- } else {
- return 0;
- }
- }
- }
- }
- public function getUserOs($user_id){
- if (!$user_id) {
- return 0;
- }
- $redisKey = UserConstants::USER_OS.$user_id;
- if (ApiService::instance()->checkApiOn()) {
- Redis::instance()->del($redisKey);
- return (int)\app\source\service\UserService::instance()->getUserInfo($user_id)->os;
- } else {
- if($rst = Redis::instance()->get($redisKey)){
- return $rst;
- }else{
- $obj = $this->getUserVipExtendModel()->where('user_id', $user_id)->find();
- if ($obj && !empty($obj['ext_b'])) {
- Redis::instance()->set($redisKey, $obj['ext_b'], 86400);
- return $obj['ext_b'];
- } else {
- return 0;
- }
- }
- }
- }
- /**
- * @todo 更新用户系统
- * @param $user_id
- * @param $os
- */
- public function updateUserOs($user_id,$os){
- $redisKey = UserConstants::USER_OS.$user_id;
- if (ApiService::instance()->checkApiOn()) {
- if ($this->getUserOs($user_id) != $os) {
- $userUpdate = new UserUpdate();
- $userUpdate->setId($user_id)->setOs($os);
- \app\source\service\UserService::instance()->updateUser($userUpdate);
- Redis::instance()->del($redisKey);
- }
- } else {
- $obj = Redis::instance()->get($redisKey);
- if(!$obj){
- $row = $this->getUserVipExtendModel()->where('user_id', $user_id)->find();
- if($row){
- if($row->ext_b != $os){
- $this->getUserVipExtendModel()->where('user_id', $user_id)->update([
- 'ext_b' => $os,
- 'updatetime' => time()
- ]);
- }
- Redis::instance()->set($redisKey, $os, 86400);
- }else{
- $data = ['user_id' => $user_id, 'ext_b' => $os, 'createtime' => time(), 'updatetime' => time()];
- try{
- if(Redis::instance()->setnx($redisKey, $os)){
- Redis::instance()->expire($redisKey,86400);
- $this->getUserVipExtendModel()->insert($data);
- }
- }catch (\Exception $e){
- LogService::notice($e->getMessage());
- }
- }
- }else{
- if($obj != $os){
- $this->getUserVipExtendModel()->where('user_id', $user_id)->update([
- 'ext_b' => $os,
- 'updatetime' => time()
- ]);
- Redis::instance()->set($redisKey, $os, 86400);
- }
- }
- }
- }
- /**
- * @param $adminConfigObject
- * @param $uid
- * @param $str
- * @return bool
- */
- public function isBlockIosUser($adminConfigObject,$uid, $str){
- if ($adminConfigObject instanceof BaseObject) {
- $adminConfigObject = $adminConfigObject->toArray();
- }
- $block_ios_user_switch = ArrayHelper::array_find($adminConfigObject, 'block_ios_user_switch');
- if ($block_ios_user_switch == 1) {
- $userUaVal = self::instance()->getUserOs($uid);
- if ($userUaVal == 2 && (strpos($str, 'index/recharge') !== false || strpos($str, '/s/') !== false)) {
- return true;
- }
- }
- return false;
- }
- }
|