newvip.php 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726
  1. <?php
  2. /**
  3. * vip相关
  4. * User: liqx
  5. * Date: 2018/3/20
  6. * Time: 14:36
  7. */
  8. class ModelNewvip
  9. {
  10. const SUBVIPCONFKEY = 'SubVip';
  11. /**
  12. * 订阅会员特权配置key
  13. */
  14. private $subVipKeys = [
  15. 'vipTurnTable', //订阅会员每日转转盘次数
  16. 'vipSignBet', //订阅会员额外签到倍率
  17. 'vipDailySpins', //订阅会员每日体力领取
  18. //'vipAttackCss', //订阅会员炮台值
  19. ];
  20. /**
  21. * 设置VIP
  22. * @param $uid
  23. * @param int $expire
  24. * @param string $purchaseToken
  25. * @return bool
  26. * Created by: Owen
  27. * Created on: 2019/11/11 19:03
  28. */
  29. public function setVip($uid,$expire,$purchaseToken){
  30. if(empty($uid)){
  31. return false;
  32. }
  33. $tb = otable::subscription();
  34. $sql = "SELECT * FROM {$tb} WHERE uid={$uid}";
  35. $ret = oo::commonOprDb('payment')->getOne($sql,MYSQLI_ASSOC);
  36. if(!empty($ret)){
  37. $sql = "UPDATE {$tb} SET `purchaseToken`='{$purchaseToken}' WHERE `uid`={$uid}";
  38. }else{
  39. $sql = "INSERT INTO {$tb} (uid,purchaseToken) VALUES ({$uid},'{$purchaseToken}')";
  40. }
  41. oo::commonOprDb('payment')->query($sql,false);
  42. $updateInfo['svip'] = 1;
  43. $updateInfo['svip_expire'] = $expire;
  44. oo::commonOprModel('member')->getUserInfo($uid, NULL, true,$updateInfo);
  45. oo::commonOprRedis('common')->delete(okeys::VipExperience($uid));
  46. oo::commonOprRedis('userinfo')->delete(okeys::IsSubscription($uid));
  47. return true;
  48. }
  49. /**
  50. * 设置体验Vip
  51. * @param $uid
  52. * @param $freeTime
  53. * @return mixed
  54. * created by owen
  55. * created at 22:12
  56. */
  57. public function setExperienceVip($uid,$freeTime){
  58. $experienceLv = self::getUserVipLv($uid,false,true);
  59. if($experienceLv <= self::getVipExperienceLv($uid)){
  60. return false;
  61. }
  62. $updateInfo['svip'] = 1;
  63. $updateInfo['svip_expire'] = $freeTime + time();
  64. $updateInfo['svipExperienceLv'] = $experienceLv;
  65. oo::commonOprModel('member')->getUserInfo($uid, NULL, true,$updateInfo);
  66. oo::commonOprRedis('common')->setex(okeys::VipExperience($uid),1,$freeTime);
  67. return ['vipInfo'=>self::checkVip($uid)];
  68. }
  69. /**
  70. * 设置免费Vip -- 测试用
  71. * @param $uid
  72. * @param $freeTime
  73. * @return mixed
  74. * created by owen
  75. * created at 22:12
  76. */
  77. public function setFreeVip($uid,$freeTime){
  78. $updateInfo['svip'] = 1;
  79. $updateInfo['svip_expire'] = $freeTime + time();
  80. oo::commonOprModel('member')->getUserInfo($uid, NULL, true,$updateInfo);
  81. return true;
  82. }
  83. /**
  84. * 获得已体验的最大等级
  85. * @param $uid
  86. * @return int
  87. * Created by: Owen
  88. * Created on: 2020/2/26 22:27
  89. */
  90. public function getVipExperienceLv($uid){
  91. $userInfo = oo::commonOprModel('member')->getUserInfo($uid);
  92. return intval($userInfo['vipExperienceLv']);
  93. }
  94. /**
  95. * 判断VIP状态
  96. * @param $uid
  97. * @return bool|mixed
  98. * Created by: Owen
  99. * Created on: 2019/11/11 19:03
  100. * PS:vip 头像框 1,4,5,
  101. */
  102. public function checkVip($uid){
  103. if(empty($uid)){
  104. return false;
  105. }
  106. $userInfo = oo::commonOprModel('member')->getUserInfo($uid);
  107. if(empty($userInfo)){
  108. return false;
  109. }
  110. if($userInfo['vip_expire'] > time()){ //订阅未到期
  111. $ret['expire'] = intval($userInfo['vip_expire']);
  112. $config = self::getUserVipLv($uid,true,false,155);
  113. if(!empty($config)){
  114. $vipLv = intval($userInfo['vipLv']);
  115. $curPoint = intval($config['curPoint']);
  116. if($curPoint != 0 && $vipLv == 0){
  117. $updateInfo['svipLv'] = $config['lv'];
  118. $vipLv = intval($config['lv']);
  119. }
  120. if($userInfo['vipExperienceLv'] != $vipLv){
  121. $updateInfo['svipExperienceLv'] = $vipLv;
  122. }
  123. $ret['level'] = $vipLv;
  124. $ret['curPoint'] = $curPoint;
  125. $ret['isFreeing'] = intval(oo::commonOprRedis('common')->get(okeys::VipExperience($uid)));
  126. //1.8.5以后vip特权转转盘增加次数取消,改为vip订阅的特权
  127. //$ret['tpStatus'] = max($config['turnTable']['num'] - intval(oo::commonOprRedis('common')->hGet(okeys::vipTurnTable(),$uid)),0);
  128. $ret['tpStatus'] = 0;
  129. $avatarBox = json_decode($userInfo['avatarBox'],true)??[];
  130. if($config['avatarBox'] == 5){
  131. $vipAvatarBox = array_merge($avatarBox,[1,4,5,6,8]);
  132. }else if($config['avatarBox'] == 4){
  133. $vipAvatarBox = array_merge($avatarBox,[1,4,5,6]);
  134. }else if($config['avatarBox'] == 3){
  135. $vipAvatarBox = array_merge($avatarBox,[1,4,5]);
  136. }else if($config['avatarBox'] == 2){
  137. $vipAvatarBox = array_merge($avatarBox,[1,4]);
  138. }else if($config['avatarBox'] == 1){
  139. $vipAvatarBox = array_merge($avatarBox,[1]);
  140. }
  141. $vipAvatarBox = array_unique($vipAvatarBox);
  142. if(count($vipAvatarBox) != count($avatarBox)){
  143. sort($vipAvatarBox);
  144. $updateInfo['savatarBox'] = json_encode($vipAvatarBox,JSON_NUMERIC_CHECK);
  145. oo::commonOprModel('member')->getUserInfo($uid, NULL, TRUE,$updateInfo);
  146. }
  147. }else{
  148. $ret['level'] = 0;
  149. $ret['curPoint'] = 0;
  150. //1.8.5以后vip特权转转盘增加次数取消,改为vip订阅的特权
  151. //$ret['tpStatus'] = max(3 - intval(oo::commonOprRedis('common')->hGet(okeys::vipTurnTable(),$uid)),0);
  152. $ret['tpStatus'] = 0;
  153. }
  154. return $ret;
  155. }else{
  156. if($userInfo['vip']==0){
  157. return false;
  158. }
  159. //vip过期清除所有avatabox
  160. //$userAvatarBox = (array)json_decode($userInfo['avatarBox'],true);
  161. //$flag = false;
  162. //if(!empty($userAvatarBox)){
  163. // foreach ($userAvatarBox as $key=>$row){
  164. // if(in_array($row,[1,4,5])){
  165. // unset($userAvatarBox[$key]);
  166. // $flag = true;
  167. // }
  168. // }
  169. //}
  170. //if(!empty($userAvatarBox)){
  171. // $userAvatarBox = [];
  172. // sort($userAvatarBox);
  173. // $userAvatarBox = array_unique($userAvatarBox);
  174. // $userAvatarBox = json_encode($userAvatarBox);
  175. // $updateInfo['savatarBox'] = $userAvatarBox;
  176. // $updateInfo['savatarBox'] = $userAvatarBox;
  177. //}
  178. $updateInfo['savatarBox'] = '[]';
  179. $updateInfo['savatar'] = 0;
  180. $updateInfo['svip'] = 0;
  181. oo::commonOprModel('member')->getUserInfo($uid, NULL, TRUE,$updateInfo);
  182. oo::commonOprModel('ta')->setEventData($uid,'user_set',["is_member"=>0]);
  183. return false;
  184. }
  185. }
  186. /**
  187. * 判断订阅会员状态
  188. * @param $uid
  189. * @return bool|mixed
  190. * Created by: Owen
  191. * Created on: 2019/11/11 19:03
  192. * PS:vip 头像框 1,4,5,
  193. */
  194. public function checkSubVip($uid) {
  195. $userInfo = oo::commonOprModel('member')->getUserInfo($uid);
  196. if(empty($userInfo['vip_expire']) || $userInfo['vip_expire'] < time()){
  197. return false;
  198. }
  199. return $this->getUserSubVipInfo($uid);
  200. }
  201. /**
  202. * 1.14版本后只有订阅玩家才是vip
  203. * @param int $uid
  204. * @param string $version
  205. * @return box|mixed
  206. */
  207. public function checkNewVip($uid, $version = '') {
  208. return $this->checkSubVip($uid) ? true : false;
  209. }
  210. /**
  211. * 获取 VIP 转盘状态
  212. * @param $uid
  213. * @return mixed
  214. * Created by: Owen
  215. * Created on: 2019/11/11 19:03
  216. */
  217. public function vipTurnTableStatus($uid){
  218. if($ret = self::checkVip($uid)){
  219. if($ret['turnTableStatus']){
  220. return false;
  221. }else{
  222. return true;
  223. }
  224. }
  225. return false;
  226. }
  227. /**
  228. * 设置 VIP 转盘状态
  229. * @param $uid
  230. * @return mixed
  231. * Created by: Owen
  232. * Created on: 2019/11/11 19:03
  233. */
  234. public function vipSetTurnTableStatus($uid){
  235. return oo::commonOprRedis('common')->hSet(okeys::vipTurnTable(),$uid,1);
  236. }
  237. public function getUserCurPoint($uid){
  238. $userInfo = oo::commonOprModel('member')->getUserInfo($uid);
  239. $vipPoint = intval($userInfo['vipPoint']);
  240. if($vipPoint == -1){
  241. $totalPayNum = oo::commonOprModel('payment')->getUserTotalPayNum($uid);
  242. $vipPoint = intval($totalPayNum*100);
  243. if($vipPoint != 0 && $vipPoint<100){
  244. $vipPoint = 150;
  245. }
  246. $updateInfo['svipPoint'] = $vipPoint;
  247. oo::commonOprModel('member')->getUserInfo($uid, NULL, true,$updateInfo);
  248. }
  249. return $vipPoint;
  250. }
  251. /**
  252. * 更新当前积分
  253. * @param $uid
  254. * @param $num
  255. * Created by: Owen
  256. * Created on: 2020/3/5 19:43
  257. */
  258. public function updateUserCurPoint($uid,$num){
  259. $curPoint = self::getUserCurPoint($uid);
  260. $updateInfo['svipPoint'] = $curPoint+$num;
  261. oo::commonOprModel('member')->getUserInfo($uid, NULL, true,$updateInfo);
  262. }
  263. /**
  264. * 用户vip等级
  265. * @param $uid
  266. * @param bool $returnConfig
  267. * @param bool $fromCache
  268. * @param string $version
  269. * @return array|mixed
  270. * created by owen
  271. * created at 14:37
  272. */
  273. public function getUserVipLv($uid,$returnConfig = false,$fromCache = false,$version = ''){
  274. if($fromCache){
  275. $userInfo = oo::commonOprModel('member')->getUserInfo($uid);
  276. return $userInfo['vipLv'];
  277. }
  278. $curPoint = self::getUserCurPoint($uid);
  279. if($curPoint == 0 && $returnConfig){
  280. return [];
  281. }else if($curPoint == 0 && !$returnConfig){
  282. return 0;
  283. }
  284. $config = self::getVipLvConfig($curPoint,$version);
  285. if($returnConfig){
  286. $config['curPoint'] = $curPoint;
  287. return $config;
  288. }else{
  289. return intval($config['lv']);
  290. }
  291. }
  292. /**
  293. * vip 配置
  294. * @param int $integration
  295. * @param mixed $version
  296. * @return array
  297. * created by owen
  298. * created at 14:35
  299. */
  300. public function getVipLvConfig($integration = 0,$version = ''){
  301. $cacheKey = okeys::VipLvConfig($version);
  302. $cacheJson = oo::commonOprRedis('config')->hGetAll($cacheKey);
  303. $cache =funs::getArrFromJsonArr($cacheJson);
  304. if($cache){
  305. array_multisort(array_column($cache,'lv'),SORT_ASC,$cache);
  306. if($integration){
  307. $return = [];
  308. foreach ($cache as $key=>$row){
  309. if($row['integration'] <= $integration){
  310. $return = $row;
  311. }
  312. }
  313. return $return;
  314. }else{
  315. return $cache;
  316. }
  317. }
  318. $tb = otable::VipLvConfig($version);
  319. $sql = "SELECT * FROM {$tb} WHERE 1";
  320. $ret = oo::commonOprDb('config')->getAll($sql,MYSQLI_ASSOC);
  321. foreach ($ret as $key=>$row){
  322. $ret[$key]['turnTable'] = json_decode($row['turnTable'],true);
  323. $ret[$key]['weekRewardChest'] = json_decode($row['weekRewardChest'],true);
  324. $ret[$key]['weekRewardBless'] = json_decode($row['weekRewardBless'],true);
  325. $ret[$key]['weekRewardLuckydraw'] = json_decode($row['weekRewardLuckydraw'],true);
  326. $cacheJson[$key] = json_encode($ret[$key]);
  327. }
  328. array_multisort(array_column($ret,'lv'),SORT_ASC,$ret);
  329. oo::commonOprRedis('config')->hMset($cacheKey,$cacheJson);
  330. oo::commonOprRedis('config')->expire($cacheKey,oo::redisRandomExpire(7*86400));
  331. if($integration){
  332. $return = [];
  333. foreach ($ret as $key=>$row){
  334. if($row['integration'] < $integration){
  335. $return = $row;
  336. }
  337. }
  338. return $return;
  339. }else{
  340. return $ret;
  341. }
  342. }
  343. /**
  344. * 获取vip订阅会员单个配置值
  345. * @param string $key
  346. * @return int
  347. */
  348. public function getSubVipConfByKey($key) {
  349. return (int)oo::commonOprModel('readconfig')->getCon(self::SUBVIPCONFKEY, $key);
  350. }
  351. /**
  352. * 获取订阅会员特权配置
  353. * @return array
  354. */
  355. public function getSubVipConf() {
  356. $keyArr = [];
  357. foreach($this->subVipKeys as $key){
  358. $keyArr[] = self::SUBVIPCONFKEY."-".$key;
  359. }
  360. $tb = otable::basicConfig();
  361. $tmp = oo::commonOprRedis('config')->hMget($tb, $keyArr);
  362. $arr = [];
  363. foreach($tmp as $k => $v){
  364. $key = str_replace(self::SUBVIPCONFKEY."-", "", $k);
  365. $arr[$key] = empty($v) ? oo::commonOprModel('readconfig')->getCon(self::SUBVIPCONFKEY, $key) : $v;
  366. }
  367. return $arr;
  368. }
  369. /**
  370. * 获取玩家vip订阅会员信息
  371. */
  372. public function getUserSubVipInfo($uid) {
  373. $res = $this->getSubVipConf();
  374. $dailyInfo = (array)oo::commonOprRedis('common')->hGetAll(okeys::userSubVipDaily($uid));
  375. $res['vipTurnTableNum'] = isset($dailyInfo['vipTurnTable']) ? (int)$dailyInfo['vipTurnTable'] : 0;
  376. $res['vipDailySpinsStatus'] = isset($dailyInfo['vipDailySpins']) ? 1 : 0;
  377. return $res;
  378. }
  379. /**
  380. * 获取vip周奖励
  381. * @param $uid
  382. * @return string
  383. * created by owen
  384. * created at 15:21
  385. */
  386. public function getUserVipWeekReward($uid){
  387. if(oo::commonOprRedis('common')->get(okeys::VipExperience($uid))){
  388. return oo::response(-4,[],"体验VIp,不可领取");
  389. }
  390. if(!self::checkVip($uid)){
  391. return oo::response(-3,[],"非VIp,不可领取");
  392. }
  393. $cache = oo::commonOprRedis('common')->get(okeys::UserVipWeekReward($uid));
  394. if(intval($cache) == 1){
  395. return oo::response(-2,[],"本周已领取过奖励");
  396. }
  397. $config = self::getUserVipLv($uid,true);
  398. /*
  399. * 体力
  400. */
  401. $add = [];
  402. if($config['weekRewardSpins'] > 0){
  403. $add['spins'] = $config['weekRewardSpins'];
  404. }
  405. if($config['weekRewardShield']>0){
  406. $userAssetsInfo = oo::commonOprModel('member')->getUserAssetsInfo($uid);
  407. $shieldUntilFull = $config['shieldGroove'] + 3 - $userAssetsInfo['shield'];
  408. if($shieldUntilFull >= $config['weekRewardShield']){
  409. $add['shield'] = $config['weekRewardShield'];
  410. }else{
  411. $turnToSpins = $config['weekRewardShield'] - $shieldUntilFull;
  412. $add['shield'] = $shieldUntilFull;
  413. $add['spins'] = intval($add['spins']) + $turnToSpins;
  414. }
  415. }
  416. if(!empty($add)){
  417. oo::commonOprModel('member')->optProperty($uid, $add, '+',352,'vip每周奖励');
  418. }
  419. if(!empty($config['weekRewardChest']) && $config['weekRewardChest']['propsId'] != 0 && $config['weekRewardChest']['num'] != 0){
  420. $data = $config['weekRewardChest'];
  421. oo::commonOprModel('props')->addUserProps($uid,$data['propsId'],$data['num'],0,352);
  422. }
  423. if(!empty($config['weekRewardBless']) && $config['weekRewardBless']['propsId'] != 0 && $config['weekRewardBless']['num'] != 0){
  424. $data = $config['weekRewardBless'];
  425. oo::commonOprModel('props')->addUserProps($uid,$data['propsId'],$data['num'],0,352);
  426. }
  427. if(!empty($config['weekRewardLuckydraw']) && $config['weekRewardLuckydraw']['propsId'] != 0 && $config['weekRewardLuckydraw']['num'] != 0){
  428. $data = $config['weekRewardLuckydraw'];
  429. oo::commonOprModel('props')->addUserProps($uid,$data['propsId'],$data['num'],0,352);
  430. }
  431. oo::commonOprRedis('common')->setex(okeys::UserVipWeekReward($uid),1,oo::weekDeadline());
  432. $userAssetsInfo = oo::commonOprModel('member')->getUserAssetsInfo($uid);
  433. return oo::response(1,[
  434. 'spins' => $userAssetsInfo['spins'],
  435. 'shield' => $userAssetsInfo['shield'],
  436. 'rewardStatus' => 3,
  437. ],"",true);
  438. }
  439. /**
  440. * 获取vip每日奖励
  441. * @param $uid
  442. * @return string
  443. * created by owen
  444. * created at 15:21
  445. */
  446. public function getUserVipWeekReward2($uid){
  447. if(!self::checkNewVip($uid)){
  448. return oo::response(-3,[],"非VIp,不可领取");
  449. }
  450. $cache = oo::commonOprRedis('common')->get(okeys::UserVipWeekReward($uid));
  451. if(intval($cache) == 1){
  452. return oo::response(-2,[],"本日已领取过奖励");
  453. }
  454. $config = self::getUserVipLv($uid,true,false,155);
  455. /*
  456. * 体力
  457. */
  458. $add = [];
  459. //1.8.5版本取消vip每日体力奖励特权
  460. //if($config['weekRewardSpins'] > 0){
  461. // $add['spins'] = $config['weekRewardSpins'];
  462. //}
  463. if($config['weekRewardShield']>0){
  464. $shield = oo::commonOprModel('member')->getUserLevelUpLimit($uid,'shield');
  465. $userAssetsInfo = oo::commonOprModel('member')->getUserAssetsInfo($uid);
  466. $shieldUntilFull = max($config['shieldGroove'] + $shield - $userAssetsInfo['shield'],0);
  467. if($shieldUntilFull >= $config['weekRewardShield']){
  468. $add['shield'] = $config['weekRewardShield'];
  469. }else{
  470. $turnToSpins = $config['weekRewardShield'] - $shieldUntilFull;
  471. $add['shield'] = $shieldUntilFull;
  472. $add['spins'] = intval($add['spins']) + $turnToSpins;
  473. }
  474. }
  475. if(!empty($add)){
  476. oo::commonOprModel('member')->optProperty($uid, $add, '+',351,'vip每日奖励');
  477. }
  478. if(!empty($config['weekRewardChest']) && $config['weekRewardChest']['propsId'] != 0 && $config['weekRewardChest']['num'] != 0){
  479. $data = $config['weekRewardChest'];
  480. oo::commonOprModel('props')->addUserProps($uid,$data['propsId'],$data['num'],0,351);
  481. }
  482. if(!empty($config['weekRewardBless']) && $config['weekRewardBless']['propsId'] != 0 && $config['weekRewardBless']['num'] != 0){
  483. $data = $config['weekRewardBless'];
  484. oo::commonOprModel('props')->addUserProps($uid,$data['propsId'],$data['num'],0,351);
  485. }
  486. if(!empty($config['weekRewardLuckydraw']) && $config['weekRewardLuckydraw']['propsId'] != 0 && $config['weekRewardLuckydraw']['num'] != 0){
  487. $data = $config['weekRewardLuckydraw'];
  488. oo::commonOprModel('props')->addUserProps($uid,$data['propsId'],$data['num'],0,351);
  489. }
  490. oo::commonOprRedis('common')->setex(okeys::UserVipWeekReward($uid),1,oo::todayDeadline());
  491. $userAssetsInfo = oo::commonOprModel('member')->getUserAssetsInfo($uid);
  492. return oo::response(1,[
  493. 'spins' => $userAssetsInfo['spins'],
  494. 'shield' => $userAssetsInfo['shield'],
  495. 'rewardStatus' => 3,
  496. 'vipPoint' => $this->getUserCurPoint($uid),
  497. ],"",true);
  498. }
  499. /**
  500. * 1.8.5版本vip订阅会员领取每日奖励
  501. * @param $uid int
  502. * @return array
  503. */
  504. public function gainSubVipDailyReward($uid) {
  505. oo::commonOprRedis('user')->hIncrBy(okeys::userSubVipDaily($uid), 'vipDailySpins', 1);
  506. if(oo::commonOprRedis('user')->ttl(okeys::userSubVipDaily($uid)) == -1){
  507. oo::commonOprRedis('user')->expire(okeys::userSubVipDaily($uid), oo::todayDeadline());
  508. }
  509. $spinsNum = $this->getSubVipConfByKey('vipDailySpins');
  510. $spinsNum = $spinsNum < 1 ? 1 : $spinsNum;
  511. oo::commonOprModel('member')->optProperty($uid, ['spins' => $spinsNum], '+',351,'vip订阅会员每日奖励');
  512. $userAssetsInfo = oo::commonOprModel('member')->getUserAssetsInfo($uid);
  513. return oo::response(1,[
  514. 'spins' => $userAssetsInfo['spins'],
  515. 'rewardStatus' => 3,
  516. ],"",true);
  517. }
  518. public function getVipInfo($uid, $version = ''){
  519. $isVip = self::checkVip($uid);
  520. $vipData = [];
  521. ///////////////////////1.14.1还原原vip业务///////////////////////
  522. if($isVip){
  523. $vipData = $isVip;
  524. $vipData['rewardStatus'] = self::getVipRewardStatus($uid,true);
  525. $vipData['pointRewardStatus'] = intval(oo::commonOprRedis('User')->get(okeys::VipPointWeekReward($uid)));
  526. $vipData['isSubscribed'] = self::getVipIsSubscribed($uid);
  527. $vipData['countdown'] = max($vipData['expire'] - time() , 0);
  528. $vipData['openLv'] = intval(oo::commonOprModel('readconfig')->getCon('vip','openLv'));//开放等级
  529. $vipData['openPoint'] = intval(oo::commonOprModel('readconfig')->getCon('vip','openPoint'));//开放积分
  530. $vipData['subVipInfo'] = $this->getUserSubVipInfo($uid);
  531. //给客户端的状态值,0:未订阅, 2-可领取 3-已领取
  532. $vipData['subVipInfo']['vipDailySpinsStatus'] = empty($vipData['subVipInfo']['vipDailySpinsStatus']) ? 2 : 3;
  533. }else{
  534. $userInfo = oo::commonOprModel('member')->getUserInfo($uid);
  535. $vipData = [
  536. 'level' => self::getUserVipLv($uid,false,false,155),
  537. 'expire' => intval($userInfo['vip_expire']),
  538. 'countdown' => 0,
  539. 'tpStatus' => 0,
  540. 'rewardStatus' => self::getVipRewardStatus($uid,false),
  541. 'pointRewardStatus' => intval(oo::commonOprRedis('User')->get(okeys::VipPointWeekReward($uid))),
  542. 'curPoint' => self::getUserCurPoint($uid),
  543. 'isFreeing' => 0,
  544. 'isSubscribed' => self::getVipIsSubscribed($uid),
  545. 'openLv' => intval(oo::commonOprModel('readconfig')->getCon('vip','openLv')),
  546. 'openPoint' => intval(oo::commonOprModel('readconfig')->getCon('vip','openPoint')),
  547. 'subVipInfo' => $this->getSubVipConf(),
  548. ];
  549. $vipData['subVipInfo']['vipDailySpinsStatus'] = 0; //给客户端的状态值,0:未订阅, 2-可领取 3-已领取
  550. }
  551. return $vipData;
  552. }
  553. public function getVipRewardStatus($uid,$isVip = false){
  554. if($isVip){
  555. // 判断是否已领取当周奖励
  556. if(oo::commonOprRedis('common')->get(okeys::UserVipWeekReward($uid))){
  557. return 3;
  558. }else{
  559. return 2;
  560. }
  561. }else{
  562. return 0;
  563. if(self::getUserVipLv($uid,false,true) > self::getVipExperienceLv($uid)){
  564. return 1;
  565. }else{
  566. return 0;
  567. }
  568. }
  569. }
  570. public function getVipIsSubscribed($uid){
  571. $cacheKey = okeys::IsSubscription($uid);
  572. $cache = oo::commonOprRedis('userinfo')->get($cacheKey);
  573. if(!empty($cache)){
  574. return $cache;
  575. }
  576. $tb = otable::subscription();
  577. $sql = "SELECT * FROM {$tb} WHERE uid={$uid}";
  578. $ret = oo::commonOprDb('payment')->getOne($sql,MYSQLI_ASSOC);
  579. if(!empty($ret)){
  580. oo::commonOprRedis('userinfo')->setex($cacheKey,1,7*24*60*60);
  581. return 1;
  582. }
  583. oo::commonOprRedis('userinfo')->setex($cacheKey,0,7*24*60*60);
  584. return 0;
  585. }
  586. public function updateVipLv($uid){
  587. $config = self::getUserVipLv($uid,true,false,155);
  588. $updateInfo['svipLv'] = intval($config['lv']);
  589. oo::commonOprModel('member')->getUserInfo($uid, NULL, true,$updateInfo);
  590. return true;
  591. }
  592. public function vipTurnTable($uid){
  593. $config = self::getUserVipLv($uid,true);
  594. $memberAssets = oo::commonOprModel('member')->getUserAssetsInfo($uid);
  595. $levelId = 1;
  596. if(!empty($memberAssets) && !empty($memberAssets['levelId'])){
  597. $levelId = $memberAssets['levelId'];
  598. }
  599. if($config['turnTable']['id'] == 601){
  600. $trun_arr = oo::commonOprModel('slot')->getSlotTurnConfig($levelId);
  601. }else if(in_array($config['turnTable']['id'],[602,603])){
  602. $trun_arr = oo::commonOprModel('slot')->getTurnConfigPlusConfig($levelId);
  603. }
  604. $arr = [];
  605. foreach ($trun_arr as $val) {
  606. $arr[$val['id']] = floatval($val['v']);
  607. }
  608. $rid = oo::commonOprModel('slot')->get_rand($arr,true); // 中奖id
  609. if(($rid-1) >= 0){
  610. $res['rid'] = $rid - 1;
  611. }else{
  612. $res['rid'] = 0;
  613. }
  614. $protecte = false;
  615. $tpdown = oo::todayDeadline();
  616. if($config['turnTable']['id'] == 601){
  617. $res['prize'] = intval($trun_arr[$res['rid']]['prize']);
  618. $res['type'] = 1;
  619. $res['betRewardTime'] = 10;
  620. $res['tpCountdown'] = $tpdown;
  621. $protecte = true;
  622. oo::commonOprModel('member')->optProperty($uid,array('money'=>$res['prize']),'+',41,'大转盘摇奖');
  623. oo::commonOprRedis('usercache')->setex(okeys::TurntableBetReward($uid),$res['prize'],180);
  624. }else if(in_array($config['turnTable']['id'],[602,603])){
  625. $res['prize'] = intval($trun_arr[$res['rid']]['num']);
  626. $res['type'] = intval($trun_arr[$res['rid']]['type']);
  627. $res['betRewardTime'] = 0;
  628. $res['tpCountdown'] = $tpdown;
  629. if($res['type'] == 1){
  630. $type = 'money';
  631. $protecte = true;
  632. $res['prize'] = ($config['turnTable']['id']==603)?intval($res['prize'])*10:intval($res['prize']);
  633. }else if($res['type'] == 2){
  634. $type = "spins";
  635. }
  636. oo::commonOprModel('member')->optProperty($uid,array($type=>$res['prize']),'+',42,'大转盘摇奖');
  637. }
  638. oo::commonOprRedis('common')->hIncrBy(okeys::vipTurnTable($config['turnTable']['id']),$uid,1);
  639. /**
  640. * 偷保护
  641. */
  642. if($protecte){
  643. oo::commonOprModel('member')->setUserStealProtect($uid,intval(oo::commonOprModel('readconfig')->getCon('basic','payStealProtectTime')) * 60);
  644. }
  645. $memberAssets = oo::commonOprModel('member')->getUserAssetsInfo($uid);
  646. $res['lastMoney'] = $memberAssets['money'];
  647. $res['lastSpins'] = $memberAssets['spins'];
  648. //数数事件-点击水果机
  649. $ssEventData =[
  650. "fruit_coin"=>$res['prize'],
  651. "fruit_result"=>$rid,
  652. "fruit_type"=>3
  653. ];
  654. oo::commonOprModel('ta')->setEventData($uid,'tap_fruit',$ssEventData);
  655. return oo::response(1,$res,'',true);
  656. }
  657. /**
  658. * 1.8.5版本订阅会员每日免费转转盘
  659. * @param $uid int
  660. * @return string
  661. */
  662. public function subVipTurnTable($uid){
  663. $tpdown = oo::todayDeadline();
  664. //更新每天转盘次数
  665. $ret = oo::commonOprRedis('user')->hIncrBy(okeys::userSubVipDaily($uid), 'vipTurnTable', 1);
  666. if(oo::commonOprRedis('user')->ttl(okeys::userSubVipDaily($uid)) == -1){
  667. oo::commonOprRedis('user')->expire(okeys::userSubVipDaily($uid), $tpdown);
  668. }
  669. $res = oo::commonOprModel('slot')->actionTurnTable($uid, 6, 2);
  670. $res = $res ? (array)json_decode($res, true) : [];
  671. if(!empty($res['data'])){
  672. $res['data']['vipTurnTableNum'] = $ret;
  673. }
  674. return json_encode($res, JSON_NUMERIC_CHECK);
  675. }
  676. /**
  677. * 奖励配置
  678. * @param $uid
  679. * @param string $form
  680. * @return int|mixed
  681. * Created by: Owen
  682. * Created on: 2020/11/21 11:41
  683. */
  684. public function vipRewardConf($uid,$form = ""){
  685. if(!self::checkNewVip($uid)){
  686. return 0;
  687. }
  688. $config = self::getUserVipLv($uid,true,false,155);
  689. return round($config[$form]/100,2);
  690. }
  691. }