UserVipExtendService.php 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: Elton
  5. * Date: 2020/4/22
  6. * Time: 11:47
  7. */
  8. namespace app\common\service;
  9. use app\common\library\Redis;
  10. use app\common\model\UserVipExtend;
  11. use app\main\constants\UserConstants;
  12. use app\main\helper\ArrayHelper;
  13. use app\main\model\object\AdminConfigObject;
  14. use app\main\model\object\BaseObject;
  15. use app\main\service\ApiService;
  16. use app\main\service\UserService;
  17. use app\source\model\UserUpdate;
  18. class UserVipExtendService
  19. {
  20. public static $self;
  21. protected $redisKey = UserConstants::USER_VIP_START_TIME_PRE;
  22. /**
  23. * @return UserVipExtendService
  24. */
  25. public static function instance()
  26. {
  27. if(self::$self == NULL){
  28. self::$self = new self();
  29. }
  30. return self::$self;
  31. }
  32. /**
  33. * @return UserVipExtend
  34. */
  35. public function getUserVipExtendModel(){
  36. return model('UserVipExtend');
  37. }
  38. /**
  39. * 维护 vip_starttime
  40. * @param $user_id
  41. * @param $start_time VIP 开始时间
  42. */
  43. public function saveVipStartTime($user_id, $start_time)
  44. {
  45. // 维护缓存,供前台使用
  46. $redisKey = $this->redisKey . $user_id;
  47. if (ApiService::instance()->checkApiOn()) {
  48. if ($this->getVipStartTime($user_id) != $start_time) {
  49. $userUpdate = new UserUpdate();
  50. $userUpdate->setVipStarttime($start_time)->setId($user_id);
  51. \app\source\service\UserService::instance()->updateUser($userUpdate);
  52. Redis::instance()->del($redisKey);
  53. }
  54. } else {
  55. $obj = $this->getUserVipExtendModel()->where('user_id', 'eq', $user_id)->find();
  56. if ($obj) {
  57. // 更新
  58. $this->getUserVipExtendModel()->where('user_id', 'eq', $user_id)->update(['vip_starttime' => $start_time, 'updatetime' => time()]);
  59. } else {
  60. // 插入
  61. $data = [
  62. 'user_id' => $user_id,
  63. 'vip_starttime' => $start_time
  64. ];
  65. $this->getUserVipExtendModel()->save($data);
  66. }
  67. Redis::instance()->set($redisKey, $start_time, 86400);
  68. }
  69. }
  70. /**
  71. * 维护用户隶属的快分推手id
  72. * @param $userId
  73. * @param $kuaifenId 快分推手id
  74. */
  75. public function saveUserKuaifenId($userId, $kuaifenId)
  76. {
  77. if (ApiService::instance()->checkApiOn()) {
  78. if ($this->getUserKuaifenId($userId) != $kuaifenId) {
  79. $userUpdate = new UserUpdate();
  80. $userUpdate->setKuaifen($kuaifenId)->setId($userId);
  81. \app\source\service\UserService::instance()->updateUser($userUpdate);
  82. }
  83. } else {
  84. $obj = $this->getUserVipExtendModel()->where('user_id', $userId)->find();
  85. if ($obj) {
  86. if ($obj['ext_a'] != $kuaifenId) {
  87. $this->getUserVipExtendModel()->where('user_id', $userId)->update([
  88. 'ext_a' => $kuaifenId,
  89. 'updatetime' => time()
  90. ]);
  91. }
  92. } else {
  93. $data = ['user_id' => $userId, 'ext_a' => $kuaifenId, 'createtime' => time(), 'updatetime' => time()];
  94. $this->getUserVipExtendModel()->insert($data);
  95. }
  96. }
  97. }
  98. /**
  99. * 获取用户隶属快分app的推手id
  100. * @param $userId
  101. * @return int|mixed
  102. */
  103. public function getUserKuaifenId($userId)
  104. {
  105. if (!$userId) {
  106. return 0;
  107. }
  108. if (ApiService::instance()->checkApiOn()) {
  109. return (int)\app\source\service\UserService::instance()->getUserInfo($userId)->kuaifen;
  110. } else {
  111. $obj = $this->getUserVipExtendModel()->where('user_id', $userId)->find();
  112. if ($obj) {
  113. return $obj['ext_a'];
  114. } else {
  115. return 0;
  116. }
  117. }
  118. }
  119. /**
  120. * 获取 用户 vip开始时间
  121. * @param $user_id
  122. * @return bool|int|string
  123. */
  124. public function getVipStartTime($user_id)
  125. {
  126. if (!$user_id) {
  127. return 0;
  128. }
  129. if (ApiService::instance()->checkApiOn()) {
  130. return (int)\app\source\service\UserService::instance()->getUserInfo($user_id)->vip_starttime;
  131. } else {
  132. $redisKey = $this->redisKey.$user_id;
  133. if ($rst = Redis::instance()->get($redisKey)) {
  134. return $rst;
  135. } else {
  136. $obj = $this->getUserVipExtendModel()->where('user_id', 'eq', $user_id)->find();
  137. if ($obj) {
  138. $start_time = intval($obj->vip_starttime);
  139. Redis::instance()->set($redisKey, $start_time, 86400);
  140. return $start_time;
  141. } else {
  142. return 0;
  143. }
  144. }
  145. }
  146. }
  147. public function getUserOs($user_id){
  148. if (!$user_id) {
  149. return 0;
  150. }
  151. $redisKey = UserConstants::USER_OS.$user_id;
  152. if (ApiService::instance()->checkApiOn()) {
  153. Redis::instance()->del($redisKey);
  154. return (int)\app\source\service\UserService::instance()->getUserInfo($user_id)->os;
  155. } else {
  156. if($rst = Redis::instance()->get($redisKey)){
  157. return $rst;
  158. }else{
  159. $obj = $this->getUserVipExtendModel()->where('user_id', $user_id)->find();
  160. if ($obj && !empty($obj['ext_b'])) {
  161. Redis::instance()->set($redisKey, $obj['ext_b'], 86400);
  162. return $obj['ext_b'];
  163. } else {
  164. return 0;
  165. }
  166. }
  167. }
  168. }
  169. /**
  170. * @todo 更新用户系统
  171. * @param $user_id
  172. * @param $os
  173. */
  174. public function updateUserOs($user_id,$os){
  175. $redisKey = UserConstants::USER_OS.$user_id;
  176. if (ApiService::instance()->checkApiOn()) {
  177. if ($this->getUserOs($user_id) != $os) {
  178. $userUpdate = new UserUpdate();
  179. $userUpdate->setId($user_id)->setOs($os);
  180. \app\source\service\UserService::instance()->updateUser($userUpdate);
  181. Redis::instance()->del($redisKey);
  182. }
  183. } else {
  184. $obj = Redis::instance()->get($redisKey);
  185. if(!$obj){
  186. $row = $this->getUserVipExtendModel()->where('user_id', $user_id)->find();
  187. if($row){
  188. if($row->ext_b != $os){
  189. $this->getUserVipExtendModel()->where('user_id', $user_id)->update([
  190. 'ext_b' => $os,
  191. 'updatetime' => time()
  192. ]);
  193. }
  194. Redis::instance()->set($redisKey, $os, 86400);
  195. }else{
  196. $data = ['user_id' => $user_id, 'ext_b' => $os, 'createtime' => time(), 'updatetime' => time()];
  197. try{
  198. if(Redis::instance()->setnx($redisKey, $os)){
  199. Redis::instance()->expire($redisKey,86400);
  200. $this->getUserVipExtendModel()->insert($data);
  201. }
  202. }catch (\Exception $e){
  203. LogService::notice($e->getMessage());
  204. }
  205. }
  206. }else{
  207. if($obj != $os){
  208. $this->getUserVipExtendModel()->where('user_id', $user_id)->update([
  209. 'ext_b' => $os,
  210. 'updatetime' => time()
  211. ]);
  212. Redis::instance()->set($redisKey, $os, 86400);
  213. }
  214. }
  215. }
  216. }
  217. /**
  218. * @param $adminConfigObject
  219. * @param $uid
  220. * @param $str
  221. * @return bool
  222. */
  223. public function isBlockIosUser($adminConfigObject,$uid, $str){
  224. if ($adminConfigObject instanceof BaseObject) {
  225. $adminConfigObject = $adminConfigObject->toArray();
  226. }
  227. $block_ios_user_switch = ArrayHelper::array_find($adminConfigObject, 'block_ios_user_switch');
  228. if ($block_ios_user_switch == 1) {
  229. $userUaVal = self::instance()->getUserOs($uid);
  230. if ($userUaVal == 2 && (strpos($str, 'index/recharge') !== false || strpos($str, '/s/') !== false)) {
  231. return true;
  232. }
  233. }
  234. return false;
  235. }
  236. }