user.php 45 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056
  1. <?php
  2. defined('IN_WEB') or die('Include Error!');
  3. /**
  4. * 玩家相关操作,分担member类
  5. */
  6. class ModelUser
  7. {
  8. protected $payOrderLimit = 10; //订单历史记录上限
  9. protected $bindRwd = 50000;//绑定奖励
  10. /**
  11. * 删除账号
  12. * @param array $uidList
  13. * @return int
  14. * Created by: Owen
  15. * Created on: 2020/12/30 15:04
  16. */
  17. public function delAccount($uidList = array()){
  18. if( !is_array($uidList) ){
  19. return -1;
  20. }
  21. foreach ($uidList as $uid) {
  22. $tb = otable::taccount();
  23. $fb = oo::commonOprDb('account')->getOne("SELECT * FROM {$tb} WHERE uid='{$uid}' LIMIT 1",MYSQLI_ASSOC);
  24. $userInfo = oo::commonOprModel('member')->getUserInfo($uid);
  25. if(!empty($fb)){//FB
  26. $siteUid = $fb['siteuid'];
  27. oo::commonOprRedis('user')->delete(okeys::account($siteUid));
  28. $tb = otable::taccount();
  29. oo::commonOprDb('account')->query("DELETE FROM {$tb} WHERE siteuid='{$siteUid}' LIMIT 1");
  30. }
  31. if($userInfo['login_plat'] == 1){
  32. $tb = otable::mobile();
  33. }else if($userInfo['login_plat'] == 2){
  34. $tb = otable::openudid();
  35. }
  36. $bool = oo::commonOprDb('userinfo')->query("DELETE FROM {$tb} WHERE uid = {$uid}");
  37. $bool && oo::commonOprDb('userinfo')->query("DELETE FROM ".otable::DeviceId()." WHERE uid = {$uid}");
  38. if($bool){
  39. oo::commonOprModel('member')->getUserInfo($uid, NULL, TRUE, ['sstatus' => 2]);
  40. $tb = otable::DeleteUserLog();
  41. $sid = $userInfo['login_plat'];
  42. $siteUid = $userInfo['siteuid'];
  43. $mac = $userInfo['mac'];
  44. $fbToken = $userInfo['token'];
  45. $time = time();
  46. oo::commonOprDb('userinfo')->query("INSERT INTO {$tb} (uid, sid, siteUid, mac, fbToken, time) VALUES('{$uid}','{$sid}','{$siteUid}','{$mac}','{$fbToken}',{$time})");
  47. oo::commonOprRedis('common')->delete([
  48. okeys::richestKing($uid),
  49. okeys::richestKingTo($uid),
  50. okeys::EnemyID($uid),
  51. okeys::EnemyList($uid),
  52. okeys::LevelLock($uid),
  53. okeys::AttackLock($uid),
  54. okeys::UserAssets($uid),
  55. okeys::levelAttackLock($uid),
  56. okeys::applyFriend($uid),
  57. okeys::slotLock($uid),
  58. okeys::newcomerProtection($uid),
  59. okeys::StealHistory($uid),
  60. okeys::StealedNum($uid),
  61. okeys::Adreward($uid),
  62. okeys::redPointLock($uid,'Task'),
  63. okeys::Symbol($uid),
  64. okeys::chatLock($uid),
  65. okeys::recall($uid),
  66. ]);
  67. oo::commonOprRedis('common')->hDel(okeys::spinsFirebase(),$uid);
  68. oo::commonOprRedis('common')->hDel(okeys::beginGuide(),$uid);
  69. oo::commonOprRedis('common')->hDel(okeys::AttackedNum(),$uid);
  70. $this->clearSteal($uid);
  71. $this->clearEnemy($uid);
  72. }
  73. }
  74. return 1;
  75. }
  76. /**
  77. * Notes:清除偷取相关缓存
  78. * User: wsc
  79. * Time: 2020/3/28 16:11
  80. * @param $uid
  81. */
  82. public function clearSteal($uid){
  83. oo::commonOprModel('steal')->clearBindKing($uid);//清理king绑定关系
  84. oo::commonOprModel('steal')->clearOtherBind($uid);//清理其他与$uid绑定的关系
  85. }
  86. public function clearEnemy($uid){
  87. $key1 = okeys::userLevelOrig($uid);//用户等级orig信息
  88. $key2 = okeys::EnemyListCache($uid);//用户随机可攻击用户缓存
  89. $key3 = okeys::defaultAttactList($uid);//用户默认攻击列表
  90. oo::commonOprRedis('Userinfo')->delete($key1);
  91. oo::commonOprRedis('Userinfo')->delete($key2);
  92. oo::commonOprRedis('Userinfo')->delete($key3);
  93. }
  94. /**
  95. * 记录token, 推送需要使用token
  96. */
  97. public function recordPushToken($param){
  98. $uid = oo::functions()->uint($param['uid']);
  99. $token = oo::functions()->escape($param['token']);
  100. $sid = oo::functions()->uint($param['sid']);
  101. $lang = oo::getDefinedLang($uid);
  102. $time = time();
  103. $tb = otable::xg_push();
  104. $ret = oo::commonOprDb('common')->getOne("SELECT * FROM {$tb} WHERE uid={$uid} LIMIT 1",MYSQLI_ASSOC);
  105. $userInfo = oo::commonOprModel('member')->getUserInfo($uid);
  106. $accountType = intval($userInfo['isFb']);
  107. if(!empty($ret)){
  108. $sql = "UPDATE {$tb} SET token='{$token}',sid='{$sid}',lang='{$lang}',updatetime='{$time}',accountType='{$accountType}' WHERE uid={$uid} LIMIT 1";
  109. $ret = oo::commonOprDb('common')->query($sql);
  110. }else{
  111. if(funs::concurrentLock($uid,'pushToken')){
  112. $sql = "INSERT INTO {$tb}(uid, token, sid, updatetime, lang, accountType) VALUES ({$uid},'{$token}',{$sid},{$time},'{$lang}','{$accountType}')";
  113. $ret = oo::commonOprDb('common')->query($sql);
  114. funs::delConcurrentLock($uid,'pushToken');
  115. }
  116. }
  117. if($ret && !IS_DEBUF){
  118. oo::commonOprModel('firebase')->refreshUserTopicByLang($uid);
  119. }
  120. return json_encode(array('code' => 1));
  121. }
  122. /**
  123. * 获取绑定奖励
  124. * @return int
  125. */
  126. public function getBindRwd()
  127. {
  128. return $this->bindRwd;
  129. }
  130. // /**
  131. // * 游客绑定FB和LINE
  132. // * @param $uid
  133. // * @param $token
  134. // * @param $flag 1 fb 2 line
  135. // * @param $mobile_request -- mac地址
  136. // * @return array
  137. // */
  138. // public function visitorBind($uid, $token, $flag, $mobile_request)
  139. // {
  140. // if(empty($uid) || empty($token) || !in_array($flag, [1,2])){
  141. // oo::logs()->debug3('-1 参数错误: uid:'.$uid.' token:'.$token.' flag:'.$flag.' mobile_request:'.$mobile_request, 'visitorBind.php');
  142. // return oo::res(-1);
  143. // }
  144. // $mac = $this->getMac($mobile_request);
  145. // if(empty($mac)) {
  146. // oo::logs()->debug3('-1 参数错误: uid:'.$uid.' token:'.$token.' flag:'.$flag.' mac:'.$mac, 'visitorBind.php');
  147. // return oo::res(-1);
  148. // }
  149. //
  150. // //查看是否已绑定
  151. // $isBind = $this->isVisitorBind($uid);
  152. // if($isBind > 0) {
  153. // oo::logs()->debug3('-3 已绑定过: uid:'.$uid.' token:'.$token.' flag:'.$flag.' mac:'.$mac, 'visitorBind.php');
  154. // return oo::res(-3);//已绑定过
  155. // }
  156. //
  157. // if($flag == 1) {//FB
  158. // $res = $this->bindFB($token, $uid, $mac);
  159. // }else {//line
  160. // $res = $this->bindLINE($token, $uid, $mac);
  161. // }
  162. //
  163. // if($res < 0) {
  164. // return oo::res($res);
  165. // }
  166. // $platid = $res;
  167. //
  168. // //写入绑定对应表
  169. // $table = otable::visitorbind();
  170. // $now = time();
  171. // $bindSql = "INSERT INTO {$table} (uid, platid, flag, mac, updatetime) VALUES ({$uid}, '{$platid}', {$flag}, '{$mac}', {$now})";
  172. // $ret = oo::commonOprDb('userinfo')->query($bindSql);
  173. // if(!$ret){
  174. // oo::logs()->debug3('-6 操作失败: uid:'.$uid.' token:'.$token.' flag:'.$flag.' mac:'.$mobile_request, 'visitorBind.php');
  175. // return oo::res(-4);//操作失败
  176. // }
  177. //
  178. // return oo::res(1);
  179. // }
  180. /**
  181. * 游客是否已绑定FB或者LINE
  182. * @param $uid
  183. * @return bool
  184. */
  185. public function isVisitorBind($uid)
  186. {
  187. $table = otable::visitorbind();
  188. $sql = "SELECT * FROM {$table} WHERE uid = {$uid} LIMIT 1";
  189. $ret = oo::commonOprDb('userinfo')->getOne($sql, 1);
  190. if(isset($ret['uid']) && $ret['uid'] > 0) {
  191. return intval($ret['flag']);
  192. }
  193. return 0;
  194. }
  195. /**
  196. * 绑定FB
  197. * @param $token
  198. * @param $arr_poker
  199. * @param $uid
  200. * @param $mac
  201. * @return int
  202. */
  203. public function bindFB($token, $uid, $mac)
  204. {
  205. oo::facebooksdk4()->setAccessToken($token);
  206. $userinfo = oo::facebooksdk4()->getMe();
  207. if(empty($userinfo) || !isset($userinfo['id']) || empty($userinfo['id'])) {
  208. oo::logs()->debug3('-2 获取用户信息失败: uid:'.$uid.' token:'.$token.' flag:1 mac:'.$mac, 'visitorBind.php');
  209. return -2;//获取用户信息失败
  210. }
  211. $platid = $userinfo['id'];//FB平台ID
  212. //是否是FB用户
  213. $fbInfo = oo::commonOprModel('member')->getAccount($platid);
  214. if(!is_int($fbInfo) && $fbInfo != 0) {
  215. oo::logs()->debug3('-3 已经是FB用户了: uid:'.$uid.' token:'.$token.' flag:1 mac:'.$mac, 'visitorBind.php');
  216. return -3;//已经是FB用户了
  217. }
  218. $ret = oo::commonOprModel('member')->setAccount($platid, $uid);
  219. if ($ret != 0) {
  220. oo::logs()->debug3('-4 写入FB用户表失败: uid:'.$uid.' token:'.$token.' flag:1 mac:'.$mac, 'visitorBind.php');
  221. return -4;//写入FB用户表失败
  222. }
  223. return $platid;
  224. }
  225. // /**
  226. // * 获取mac地址
  227. // * @param $mobile_request
  228. // * @return int|string
  229. // */
  230. // public function getMac($mobile_request)
  231. // {
  232. //
  233. // /* 统计机器码 */
  234. // if (empty($mobile_request)) {
  235. // return '';
  236. // }
  237. //
  238. // $code = base64_decode($mobile_request);
  239. // if (empty($code)) {
  240. // return '';
  241. // }
  242. //
  243. // $arr = explode('_', $code);
  244. // if (count($arr) !== 2) {
  245. // return '';
  246. // }
  247. //
  248. // $secret = $arr[1];
  249. // if ($secret !== 'superant') {
  250. // return '';
  251. // }
  252. //
  253. // if (DEVICEID == 2) {//苹果
  254. // $mac = $arr[0];
  255. // } else {
  256. // $mac = $this->getMacId($arr[0]);
  257. // }
  258. //
  259. // return $mac;
  260. // }
  261. //
  262. //
  263. // public function getMacId($macAddr) {
  264. // $macAddr = trim($macAddr);
  265. // if(strlen($macAddr) > 30){
  266. // return 0;
  267. // }
  268. // $match = array();
  269. // if (!preg_match("/^[0-9a-f][0-9a-f][:-]"."[0-9a-f][0-9a-f][:-]"."[0-9a-f][0-9a-f][:-]"."[0-9a-f][0-9a-f][:-]"."[0-9a-f][0-9a-f][:-]"."[0-9a-f][0-9a-f]/i", $macAddr, $match)) {
  270. // return 0;
  271. // }
  272. // $str = strtr($macAddr, array(':' => ''));
  273. // $hexadecimal = '0x'.$str;
  274. // $macid = base_convert($hexadecimal, 16, 10);
  275. // return $macid;
  276. // }
  277. //查看玩家信息
  278. public function showUserInfo($uid)
  279. {
  280. $data = [];
  281. $arr = ['uid','nick','sex','s_picture','signature','u_flag','avatarBox','avatar'];
  282. //玩家基本信息
  283. $data['vipInfo'] = oo::commonOprModel('newvip')->getVipInfo($uid);
  284. $memberInfo = oo::commonOprModel('member')->getUserInfo($uid,$arr,false,NULL);
  285. $memberInfo['avatarBox'] = empty($memberInfo['avatarBox'])?[]:json_decode($memberInfo['avatarBox']);
  286. $memberInfo['avatarBox'] = $memberInfo['avatarBox'] ?? [];
  287. $memberAssets = oo::commonOprModel('member')->getUserAssetsInfo($uid);
  288. $memberAssets['coins'] = $memberAssets['money'];
  289. unset($memberAssets['money']);
  290. $data = array_merge($data, $memberInfo, $memberAssets);
  291. $data['avatar'] = (in_array($data['avatar'],$data['avatarBox']))?intval($data['avatar']):0;
  292. unset($data['mac']);
  293. unset($data['token']);
  294. unset($data['locale']);
  295. return $data;
  296. }
  297. /**
  298. * 刷新体力操作
  299. * @param $uid
  300. * @param $multiple
  301. * @return array|float|int
  302. * Created by: Owen
  303. * Created on: 2020/1/9 16:08
  304. */
  305. public function refreshSpins($uid,$multiple){
  306. if( empty($uid) ){
  307. $data = array('code' => -1, 'desc' => '参数错误');
  308. return $data;
  309. }
  310. $getUserInfo = oo::commonOprModel('member')->getUserAssetsInfo($uid);
  311. $levelId = intval($getUserInfo['levelId']);
  312. if((intval($getUserInfo['spins']) - (1 * $multiple)) >=0 ){
  313. $userSpins = intval($getUserInfo['spins']) - (1 * $multiple);
  314. }else{
  315. $userSpins = 0;
  316. }
  317. $setTime = oo::commonOprModel('readconfig')->getCon('basic','restoreTime'); // 定义多久
  318. $setSpins = oo::commonOprModel('member')->getUserLevelUpLimit($uid,'recovery'); // 恢复多少
  319. $maxSpins = oo::commonOprModel('member')->getLevelUpLimit($levelId,'spins') ?? 50;
  320. $curTime = time();
  321. //体力返回
  322. $keys = okeys::userRestoreTime($uid);
  323. $is_Restore = oo::commonOprRedis('common')->get($keys);
  324. //当获取后的体力大于50 或者 当前用户大于50
  325. if($userSpins >= $maxSpins){
  326. //先判断有没有在计时的数据 有的话把时间改为 0* 剩余时间 记录暂停
  327. if($is_Restore){
  328. //切割 时间戳*剩余时间
  329. $time = explode('*',$is_Restore);
  330. if($time[0] > 0 && $time[1] > 0){
  331. //当前时间减去上一次记录的时间戳
  332. //剩余时间
  333. $last_time = $time[1] - ($curTime - $time[0]);//计算剩余时间 暂停处理 剩余时间-(当前时间-上一次记录时间戳)
  334. if($last_time > 0){
  335. $val = '0*'.$last_time;
  336. oo::commonOprRedis('common')->set($keys, $val);
  337. }else{
  338. oo::commonOprRedis('common')->delete($keys);
  339. }
  340. }
  341. }
  342. }else{
  343. //需要恢复体力
  344. if($is_Restore){
  345. //切割 时间戳*剩余时间
  346. $time = explode('*',$is_Restore);
  347. //判断是不是从上次暂停倒计时开始计时
  348. if($time[0] == 0){
  349. //修改为当前时间戳并且继续倒计时
  350. $val = $curTime.'*'.$time[1];
  351. oo::commonOprRedis('common')->set($keys, $val);
  352. $lastTimes = $setTime;
  353. }else{
  354. $speedUp = "";
  355. if(count($time) > 2){
  356. $bet = $time[3];
  357. $speedUpLastTime = $time[2];
  358. if($curTime < $speedUpLastTime){
  359. $temp_lastTime = ($curTime-$time[0]);
  360. $speedUp = "*{$speedUpLastTime}";
  361. }else{
  362. $temp_lastTime = $curTime - $speedUpLastTime + (($speedUpLastTime - $time[0]));
  363. }
  364. }else{
  365. $temp_lastTime = $curTime-$time[0]; // 当前请求时间 - 上次存库时间 100
  366. }
  367. $lastTime = $time[1] - $temp_lastTime; //60 -100 -40
  368. if($lastTime <= 0){
  369. //倒计时结束 加体力 并且重新开始一个倒计时 因为体力还没满
  370. //给用户加体力
  371. //还有个计算 当前剩余时间 - 上次剩余时间 / 60
  372. if($temp_lastTime > $lastTime){
  373. $oneAddSpins = $setSpins;
  374. }
  375. $oneSpins = floor(abs($lastTime) / $setTime); //22
  376. $oneAddSpins += $setSpins * $oneSpins; //110 //加的体力 3 + 0
  377. //加倍恢复
  378. $bet = oo::commonOprRedis('common')->get(okeys::SpeedUpSpins($uid))?oo::commonOprRedis('common')->get(okeys::SpeedUpSpins($uid)):1;
  379. $oneAddSpins = $oneAddSpins*$bet;
  380. $oneResidue = $setTime - (abs($lastTime) - ($oneSpins * $setTime)); //10 //余下的时间
  381. if($oneAddSpins>=$maxSpins || ($userSpins+$oneAddSpins) >= $maxSpins){
  382. oo::commonOprRedis('common')->delete($keys); //停止计时
  383. $changeNum = max($maxSpins - $getUserInfo['spins'],0);
  384. oo::commonOprModel('member')->optProperty($uid,['spins'=>$changeNum],"+",111,"自动恢复");
  385. }else{
  386. oo::commonOprModel('member')->optProperty($uid,['spins'=>$oneAddSpins],'+',111,"自动恢复2=>原始体力:".$getUserInfo['spins']."bet:{$bet},恢复体力:".$oneAddSpins.",数据原始值".$is_Restore);
  387. if($oneResidue && $oneResidue != 'null'){
  388. $val = $curTime.'*'.$oneResidue; //test
  389. $lastTimes = $oneResidue;
  390. }else{
  391. $val = $curTime.'*'.$setTime;
  392. $lastTimes = $setTime;
  393. }
  394. oo::commonOprRedis('common')->set($keys, $val.$speedUp);
  395. }
  396. }else{
  397. $val = $curTime.'*'.$lastTime;
  398. oo::commonOprRedis('common')->set($keys, $val.$speedUp);
  399. $lastTimes = $lastTime;
  400. }
  401. }
  402. }else{
  403. $val = $curTime.'*'.$setTime;
  404. $lastTimes = $setTime;
  405. oo::commonOprRedis('common')->set($keys, $val);
  406. }
  407. }
  408. $lastTimess = $lastTimes;
  409. return $lastTimess;
  410. }
  411. /**
  412. * 刷新体力操作
  413. * @param $uid
  414. * @param $multiple
  415. * @return array|float|int
  416. * Created by: Owen
  417. * Created on: 2020/1/9 16:08
  418. */
  419. public function refreshSpinsOld($uid,$multiple){
  420. if( empty($uid) ){
  421. $data = array('code' => -1, 'desc' => '参数错误');
  422. return $data;
  423. }
  424. $getUserInfo = oo::commonOprModel('member')->getUserAssetsInfo($uid);
  425. $levelId = intval($getUserInfo['levelId']);
  426. if((intval($getUserInfo['spins']) - (1 * $multiple)) >=0 ){
  427. $userSpins = intval($getUserInfo['spins']) - (1 * $multiple);
  428. }else{
  429. $userSpins = 0;
  430. }
  431. $setTime = oo::commonOprModel('readconfig')->getCon('basic','restoreTime'); // 定义多久
  432. $setSpins = oo::commonOprModel('member')->getUserLevelUpLimit($uid,'recovery'); // 恢复多少
  433. $maxSpins = oo::commonOprModel('member')->getLevelUpLimit($levelId,'spins') ?? 50;
  434. $curTime = time();
  435. //体力返回
  436. $keys = okeys::userRestoreTime($uid);
  437. $is_Restore = oo::commonOprRedis('common')->get($keys);
  438. //当获取后的体力大于50 或者 当前用户大于50
  439. if($userSpins >= $maxSpins){
  440. //先判断有没有在计时的数据 有的话把时间改为 0* 剩余时间 记录暂停
  441. if($is_Restore){
  442. //切割 时间戳*剩余时间
  443. $time = explode('*',$is_Restore);
  444. if($time[0] > 0 && $time[1] > 0){
  445. //当前时间减去上一次记录的时间戳
  446. //剩余时间
  447. $last_time = $time[1] - ($curTime - $time[0]);//计算剩余时间 暂停处理 剩余时间-(当前时间-上一次记录时间戳)
  448. if($last_time > 0){
  449. $val = '0*'.$last_time;
  450. oo::commonOprRedis('common')->set($keys, $val);
  451. }else{
  452. oo::commonOprRedis('common')->delete($keys);
  453. }
  454. }
  455. }
  456. }else{
  457. //需要恢复体力
  458. if($is_Restore){
  459. //切割 时间戳*剩余时间
  460. $time = explode('*',$is_Restore);
  461. //判断是不是从上次暂停倒计时开始计时
  462. if($time[0] == 0){
  463. //修改为当前时间戳并且继续倒计时
  464. $val = $curTime.'*'.$time[1];
  465. oo::commonOprRedis('common')->set($keys, $val);
  466. $lastTimes = $setTime;
  467. }else{
  468. $speedUp = "";
  469. if(count($time) > 2){
  470. $bet = $time[3];
  471. $speedUpLastTime = $time[2];
  472. if($curTime < $speedUpLastTime){
  473. $temp_lastTime = ($curTime-$time[0]) * $bet;
  474. $speedUp = "*{$speedUpLastTime}*$bet";
  475. }else{
  476. $temp_lastTime = $curTime - $speedUpLastTime + (($speedUpLastTime - $time[0]) * $bet);
  477. }
  478. }else{
  479. $temp_lastTime = $curTime-$time[0]; // 当前请求时间 - 上次存库时间 100
  480. }
  481. $lastTime = $time[1] - $temp_lastTime; //60 -100 -40
  482. if($lastTime <= 0){
  483. //倒计时结束 加体力 并且重新开始一个倒计时 因为体力还没满
  484. //给用户加体力
  485. //还有个计算 当前剩余时间 - 上次剩余时间 / 60
  486. if($temp_lastTime > $lastTime){
  487. $oneAddSpins = $setSpins;
  488. }
  489. $oneSpins = floor(abs($lastTime) / $setTime); //22
  490. $oneAddSpins += $setSpins * $oneSpins; //110 //加的体力 3 + 0
  491. $oneResidue = $setTime - (abs($lastTime) - ($oneSpins * $setTime)); //10 //余下的时间
  492. if($oneAddSpins>=$maxSpins || ($userSpins+$oneAddSpins) >= $maxSpins){
  493. oo::commonOprRedis('common')->delete($keys); //停止计时
  494. $changeNum = max($maxSpins - $getUserInfo['spins'],0);
  495. oo::commonOprModel('member')->optProperty($uid,['spins'=>$changeNum],"+",111,"自动恢复");
  496. }else{
  497. oo::commonOprModel('member')->optProperty($uid,['spins'=>$oneAddSpins],'+',111,"自动恢复2=>原始体力:".$getUserInfo['spins'].",恢复体力:".$oneAddSpins.",数据原始值".$is_Restore);
  498. if($oneResidue && $oneResidue != 'null'){
  499. $val = $curTime.'*'.$oneResidue; //test
  500. $lastTimes = $oneResidue;
  501. }else{
  502. $val = $curTime.'*'.$setTime;
  503. $lastTimes = $setTime;
  504. }
  505. oo::commonOprRedis('common')->set($keys, $val.$speedUp);
  506. }
  507. }else{
  508. $val = $curTime.'*'.$lastTime;
  509. oo::commonOprRedis('common')->set($keys, $val.$speedUp);
  510. $lastTimes = $lastTime;
  511. }
  512. }
  513. }else{
  514. $val = $curTime.'*'.$setTime;
  515. $lastTimes = $setTime;
  516. oo::commonOprRedis('common')->set($keys, $val);
  517. }
  518. }
  519. $lastTimess = $lastTimes;
  520. return $lastTimess;
  521. }
  522. /**
  523. * 判断控制
  524. * @param $uid
  525. * @return string
  526. * Created by: Owen
  527. * Created on: 2020/5/15 11:51
  528. */
  529. public function getUserVersion($uid){
  530. $userInfo = oo::commonOprModel('member')->getUserInfo($uid, ['version'], false);
  531. return $userInfo['version']??'1.0.0';
  532. }
  533. /**
  534. * 判断控制
  535. * @param $uid
  536. * @return string
  537. * Created by: Owen
  538. * Created on: 2020/5/15 11:51
  539. */
  540. public function getUserChannel($uid){
  541. $userInfo = oo::commonOprModel('member')->getUserInfo($uid, ['channel'], false);
  542. return intval($userInfo['channel']);
  543. }
  544. /**
  545. * 获取用户登录设备
  546. * @param $uid
  547. * @return int
  548. * Created by: Owen
  549. * Created on: 2020/4/28 17:42
  550. */
  551. public function getUserLoginPlat($uid){
  552. $userinfo = oo::commonOprModel('member')->getUserInfo($uid);
  553. $login_plat = ($userinfo['login_plat'])??1;
  554. return $login_plat;
  555. }
  556. public function getAvatar($uid){
  557. $userinfo = oo::commonOprModel('member')->getUserInfo($uid);
  558. $data['avatar'] = $userinfo['avatar'];
  559. $data['avatarBox'] = json_decode($userinfo['avatarBox'],true);;
  560. return $data;
  561. }
  562. /**
  563. * 派发头像框
  564. * @param $uid
  565. * @param $scardId //0默认1,初级vip,2感恩节,3圣诞节,4中级vip,5高级vip,6至尊,7感恩節(新)
  566. * @return mixed
  567. * Created by: Owen
  568. * Created on: 2020/3/4 11:14
  569. */
  570. public function rewardAvatarBox($uid,$scardId){
  571. $userinfo = oo::commonOprModel('member')->getUserInfo($uid);
  572. $avatarBox = json_decode($userinfo['avatarBox'],true);
  573. $avatarBox[] = $scardId;
  574. $avatarBox = array_unique($avatarBox);
  575. $avatarBox = json_encode($avatarBox,JSON_NUMERIC_CHECK);
  576. $updateInfo['savatarBox'] = $avatarBox;
  577. oo::commonOprModel('member')->getUserInfo($uid, NULL, TRUE,$updateInfo);
  578. $userinfo = oo::commonOprModel('member')->getUserInfo($uid);
  579. $data['avatar'] = intval($scardId);
  580. $data['avatarBox'] = json_decode($userinfo['avatarBox'],true);
  581. return $data;
  582. }
  583. /**
  584. * Notes:初始化rechestking
  585. * User: wsc
  586. * Time: 2020/6/28 12:29
  587. * @param $uid
  588. * @param int $multiple
  589. * @return false|string
  590. */
  591. public function getRichestKing($uid,$multiple = 0,$new=false){
  592. //获取偷取对象统计,该统计取消
  593. //oo::commonOprModel('statistics')->getRichestKingSta($uid);
  594. $multiple = oo::commonOprRedis('usercache')->get(okeys::curUserBet($uid));
  595. if(!$multiple){
  596. oo::commonOprRedis('usercache')->setex(okeys::curUserBet($uid),1,3600*2);
  597. }
  598. if($new){
  599. oo::commonOprModel('steal')->clearBindKing($uid);//清理老的rechestking
  600. }
  601. if(oo::commonOprModel('Workerman')->isUidOnline($uid)){
  602. $version = $this->getUserVersion($uid);
  603. if(!oo::compareVersion($version,'1.8.1')){
  604. $attacks = oo::commonOprModel('level')->getStealData($uid);
  605. }else{
  606. $attacks = oo::commonOprModel('steal')->getStealData($uid);
  607. }
  608. if($attacks){
  609. $nick = oo::commonOprModel('member')->getUserFirstName($attacks['nick']);
  610. //快速推
  611. oo::commonOprModel('Workerman')->push($uid,ocmd::$SVR_PLAYER_RAID_INFO,array('levelId'=>$attacks["levelId"],'nick'=>$nick,'vip'=>$attacks['vip'],'vipLv'=>$attacks['vipLv'],'vipExpire'=>$attacks['vip_expire'],'avatar'=>intval($attacks['avatar']),'url'=>$attacks['s_picture'],'coins'=>intval($attacks['coins'])),true);
  612. return json_encode(['code'=>1, 'msg'=>'Triggers the successful retrieval of the object']);
  613. }else{
  614. return json_encode(['code'=>-2, 'msg'=>'No attacks object']);
  615. }
  616. }else{
  617. return json_encode(['code'=>-3, 'msg'=>'UnOnline']);
  618. }
  619. }
  620. /**
  621. * 检查 游客 FB 账号
  622. * @param $macType
  623. * @param $macAddress
  624. * @param $token
  625. * @param int $uid
  626. * @return array|bool
  627. * Created by: Owen
  628. * Created on: 2020/5/22 16:18
  629. */
  630. public function checkAccountSynchronize($userPlat,$macAddress,$token,$uid = 0,$deviceId = ""){
  631. if(empty($macAddress) || empty($token)){
  632. return false;
  633. }
  634. $ret = $this->loginByMac($userPlat,$macAddress,$deviceId);
  635. if(empty($ret)){
  636. return false;
  637. }
  638. $info = [] ;
  639. $uidArr = [
  640. 'guest' => $ret['uid'],
  641. 'facebook'=> $uid
  642. ];
  643. foreach ($uidArr as $key=>$row){
  644. $userInfo = oo::commonOprModel('member')->getUserInfo($row);
  645. $assetsInfo = oo::commonOprModel('member')->getUserAssetsInfo($row);
  646. $lastTime = ($key == "facebook") ? (oo::commonOprRedis('common')->get(okeys::FbAccountSynListTime($uid)) ?? (int)$userInfo['lasttime']) : (int)$userInfo['lasttime'];
  647. $info[$key] = [
  648. 'uid' => (int)$row,
  649. 'nick' => $userInfo['nick'],
  650. 's_picture' => $userInfo['s_picture'],
  651. 'avatar' => (int)$userInfo['avatar'],
  652. 'star' => $assetsInfo['star'],
  653. 'levelId' => (int)$assetsInfo['levelId'],
  654. 'vipLv' => (int)$userInfo['vipLv'],
  655. 'lastTime' => $lastTime
  656. ];
  657. }
  658. return count($info)>=2 ? $info : false;
  659. }
  660. /**
  661. * @param $transformType 1 => 使用 FB 進度 2 => 使用 游客 進度
  662. * @param $macAddress
  663. * @param $token
  664. * @param int $uid
  665. * @param int $visitorUid
  666. * @return mixed
  667. * Created by: Owen
  668. * Created on: 2020/5/22 16:32
  669. */
  670. public function accountSynchronize($transformType,$macAddress,$token,$uid,$visitorUid,$deviceId){
  671. $macAddress = explode('_',base64_decode($macAddress));
  672. if(empty($macAddress) || empty($macAddress[0]) || $macAddress[1] != 'superant'){
  673. return oo::response(-1);
  674. }
  675. $userPlat = self::getUserLoginPlat($visitorUid);
  676. $macAddressTemp = $this->getSiteIdByMac($userPlat,$macAddress[0]);
  677. $ret = $this->loginByMac($userPlat,$macAddressTemp,$deviceId);
  678. if(empty($ret)){
  679. $userPlat = ($userPlat == 1) ? 2 : 1;
  680. $macAddressTemp = $this->getSiteIdByMac($userPlat,$macAddress[0]);
  681. $ret = $this->loginByMac($userPlat,$macAddressTemp,$deviceId);
  682. if(empty($ret)){
  683. return oo::response(-2,[],'游客賬號異常');
  684. }
  685. }
  686. if($visitorUid != $ret['uid']){
  687. return oo::response(-2,[],'MAC地址與UID不一致');
  688. }
  689. $visitorUid = $ret['uid'];
  690. $fbUserInfo = json_decode(funs::sendCurlPastThird('https://graph.facebook.com/me?access_token='.$token.'&fields=id,name,email,first_name,gender,locale,location,birthday,hometown,picture.height(200).width(200)'),true);
  691. if(empty($fbUserInfo)){
  692. return oo::response(-2,[],"FB 數據異常");
  693. }
  694. $siteUid = intval($fbUserInfo['id']);
  695. oo::commonOprRedis('user')->delete(okeys::account($siteUid));
  696. $account = oo::commonOprModel('member')->getAccount($siteUid);
  697. if(empty($account)){
  698. return oo::response(-2,[],"FB 賬號異常");
  699. }
  700. $fbUid = $account['uid'];
  701. if($uid != $fbUid){
  702. return oo::response(-2,['serverFbUid'=>$fbUid,'ClientFbUid'=>$uid],"FB UID 異常");
  703. }
  704. if($transformType == 2){
  705. $setAccountBool = oo::commonOprModel('member')->updateAccount($siteUid, $uid , $visitorUid);
  706. if($setAccountBool){
  707. $bool = $this->disconnectUidByMac($userPlat,$visitorUid,$macAddressTemp,$deviceId);
  708. $bool && oo::commonOprModel('member')->getUserInfo($visitorUid, NULL, TRUE, [
  709. 'ssiteuid' =>$siteUid,
  710. 'snick' =>isset($fbUserInfo['name']) ? $fbUserInfo['name'] : $uid,
  711. 'ssex' =>$fbUserInfo['gender'] ?? 'f',
  712. 'semail' =>isset($fbUserInfo['email']) ? $fbUserInfo['email'] : '',
  713. 'ss_picture' =>'https://graph.facebook.com/'.$siteUid.'/picture',
  714. 'sm_picture' =>'https://graph.facebook.com/'.$siteUid.'/picture?type=normal',
  715. 'sb_picture' =>'https://graph.facebook.com/'.$siteUid.'/picture?type=large',
  716. 'slocale' =>isset($fbUserInfo['locale'])? $fbUserInfo['locale'] : '',
  717. 'slocationid' =>isset($fbUserInfo['location']['id']) ? $fbUserInfo['location']['id'] : '',
  718. 'slocationname'=>isset($fbUserInfo['location']['name']) ? $fbUserInfo['location']['name'] : '',
  719. 'shometownid' =>isset($fbUserInfo['hometown']['id']) ? $fbUserInfo['hometown']['id'] : '',
  720. 'shometownname'=>isset($fbUserInfo['hometown']['name']) ? $fbUserInfo['hometown']['name'] : '',
  721. ]) && oo::commonOprModel('member')->getUserInfo($uid, NULL, TRUE, [
  722. 'sstatus' => 3
  723. ]);
  724. /** 判断是否有IOS 与 FB 绑定的UID 与 FB 一起转到游客UID*/
  725. if($userPlat == 2){
  726. $tb = otable::openudid();
  727. $appleAuthAccountInfo = oo::commonOprDb('common')->getOne("SELECT * FROM {$tb} WHERE uid='{$fbUid}' AND openudid LIKE '%.%.%' LIMIT 1",MYSQLI_ASSOC);
  728. if(!empty($appleAuthAccountInfo)){
  729. $openudid = $appleAuthAccountInfo['openudid'];
  730. oo::commonOprDb('common')->query("UPDATE {$tb} SET uid='{$visitorUid}' WHERE uid = {$fbUid} AND openudid='{$openudid}' LIMIT 1");
  731. $this->setTransformLog(['sid'=> $userPlat, 'uid'=> $fbUid, 'transformType'=> 4, 'visitorUid'=> $visitorUid, 'visitorMac'=> $macAddressTemp, 'fbUid'=> $fbUid, 'fbSiteUid'=> $siteUid, 'fbToken'=> $openudid, 'time'=>time()]);
  732. }
  733. }
  734. }
  735. }else if($transformType == 1){
  736. $bool = $this->disconnectUidByMac($userPlat,$visitorUid,$macAddressTemp,$deviceId);
  737. $bool && oo::commonOprModel('member')->getUserInfo($visitorUid, NULL, TRUE, ['sstatus' => 3]);
  738. }else{
  739. return oo::response(-2);
  740. }
  741. if($bool){
  742. $sqlBool = $this->setTransformLog(['sid'=> $userPlat, 'uid'=> $uid, 'transformType'=> $transformType, 'visitorUid'=> $visitorUid, 'visitorMac'=> $macAddressTemp, 'fbUid'=> $fbUid, 'fbSiteUid'=> $siteUid, 'fbToken'=> $token, 'time'=>time()]);
  743. }
  744. return $bool&&$sqlBool? oo::response(1) : oo::response(-2);
  745. }
  746. /**
  747. * fb 绑定
  748. * @param $uid
  749. * @param $macAddress
  750. * @param $fbToken
  751. * @return string
  752. * Created by: Owen
  753. * Created on: 2020/8/24 19:23
  754. */
  755. public function accountBind($uid,$macAddress,$fbToken,$del,$deviceId){
  756. $macAddress = explode('_',base64_decode($macAddress));
  757. if(empty($macAddress) || empty($macAddress[0]) || $macAddress[1] != 'superant'){
  758. return oo::response(-1);
  759. }
  760. $userPlat = self::getUserLoginPlat($uid);
  761. $actionMacAddress = $this->getSiteIdByMac($userPlat,$macAddress[0]);
  762. $ret = $this->loginByMac($userPlat,$actionMacAddress,$deviceId);
  763. if(empty($ret)){
  764. return oo::response(-2,[],'用户不存在');
  765. }
  766. if($uid != $ret['uid']){
  767. return oo::response(-3,[],'MAC 与 uid 不一致');
  768. }
  769. $fbUserInfo = json_decode(funs::sendCurlPastThird('https://graph.facebook.com/me?access_token='.$fbToken.'&fields=id,name,email,first_name,gender,locale,location,birthday,hometown,picture.height(200).width(200)'),true);
  770. if(empty($fbUserInfo)){
  771. return oo::response(-4,[],"Fb Token 异常");
  772. }
  773. $siteUid = intval($fbUserInfo['id']);
  774. oo::commonOprRedis('user')->delete(okeys::account($siteUid));
  775. $account = oo::commonOprModel('member')->getAccount($siteUid);
  776. if($account['uid'] == $ret['uid']){
  777. return oo::response(-7,[],"账号相同");
  778. }
  779. if(!empty($account)){
  780. $userInfo = oo::commonOprModel('member')->getUserInfo($account['uid']);
  781. $userAssetsInfo = oo::commonOprModel('member')->getUserAssetsInfo($account['uid']);
  782. $info = [
  783. 'uid' => (int)$account['uid'],
  784. 'nick' => $userInfo['nick'],
  785. 's_picture' => $userInfo['s_picture'],
  786. 'avatar' => (int)$userInfo['avatar'],
  787. 'star' => $userAssetsInfo['star'],
  788. 'levelId' => (int)$userAssetsInfo['levelId'],
  789. 'vipLv' => (int)$userInfo['vipLv'],
  790. 'lastTime' => (int)$userInfo['lasttime']
  791. ];
  792. return oo::response(-5,['fbData'=>$info],"fb 账号已存在");
  793. }
  794. $setAccountBool = oo::commonOprModel('member')->setAccount($siteUid, $uid);
  795. if($setAccountBool == 0){
  796. $del && $this->disconnectUidByMac($userPlat,$uid,$actionMacAddress,$deviceId);
  797. $updateInfo = [
  798. 'ssiteuid' => $siteUid,
  799. 'stoken' => $fbToken,
  800. 'snick' => isset($fbUserInfo['name']) ? $fbUserInfo['name'] : $uid,
  801. 'ssex' => $fbUserInfo['gender'] ?? 'f',
  802. 'semail' => isset($fbUserInfo['email']) ? $fbUserInfo['email'] : '',
  803. 'ss_picture' => 'https://graph.facebook.com/' . $siteUid . '/picture',
  804. 'sm_picture' => 'https://graph.facebook.com/' . $siteUid . '/picture?type=normal',
  805. 'sb_picture' => 'https://graph.facebook.com/' . $siteUid . '/picture?type=large',
  806. 'slocale' => isset($fbUserInfo['locale']) ? $fbUserInfo['locale'] : '',
  807. 'slocationid' => isset($fbUserInfo['location']['id']) ? $fbUserInfo['location']['id'] : '',
  808. 'slocationname' => isset($fbUserInfo['location']['name']) ? $fbUserInfo['location']['name'] : '',
  809. 'shometownid' => isset($fbUserInfo['hometown']['id']) ? $fbUserInfo['hometown']['id'] : '',
  810. 'shometownname' => isset($fbUserInfo['hometown']['name']) ? $fbUserInfo['hometown']['name'] : '',
  811. ];
  812. oo::commonOprModel('member')->getUserInfo($uid, NULL, TRUE, $updateInfo);
  813. $reward = [
  814. 'money' => intval(oo::commonOprModel('readconfig')->getCon("Game","fbBindCoins")),
  815. 'spins' => intval(oo::commonOprModel('readconfig')->getCon("Game","fbBindSpins")),
  816. ];
  817. oo::commonOprModel('member')->optProperty($uid,$reward,'+',109,"游客绑定FB账号");
  818. /**
  819. * 被邀请者绑定FB给予邀请者奖励
  820. */
  821. oo::commonOprModel('invite')->recordInviteBindFb($uid);
  822. oo::commonOprModel('ta')->setEventData($uid,'user_setOnce',["account_bind_time"=>time()]);
  823. return oo::response(1,[
  824. 'nick' =>$updateInfo['snick'] ,
  825. 'sex' =>$updateInfo['ssex'] ,
  826. 's_picture' =>$updateInfo['ss_picture'] ,
  827. ]);
  828. }
  829. return oo::response(-6,[],'服务器数据异常');
  830. }
  831. /**
  832. * 根据Mac地址获取SiteId
  833. * @param $sid
  834. * @param $identify
  835. * @param string $superKey
  836. * @return int|string
  837. * Created by: Owen
  838. * Created on: 2021/4/10 9:41
  839. */
  840. public function getSiteIdByMac($sid,$identify,$superKey = ""){
  841. if($sid == 1){
  842. $mac = funs::macToSiteUid($identify);
  843. if($mac==0 && !empty($identify) && $identify!='null'){
  844. $mac= funs::AdvertisementIdToSiteUid($identify);
  845. }
  846. if($mac==0 && !empty($superKey)){
  847. $tb = otable::super();
  848. $ret = oo::commonOprDb('account')->getOne("SELECT * FROM {$tb} WHERE superKey='{$superKey}' LIMIT 1",MYSQLI_ASSOC);
  849. if(empty($ret)){
  850. $mac = date('Ymd').time().rand(0,10000);
  851. $sql = "INSERT INTO {$tb} (superKey,siteuid) VALUES ('{$superKey}','{$mac}')";
  852. oo::commonOprDb('account')->query($sql,false);
  853. }else{
  854. $mac = $ret['siteuid'];
  855. }
  856. }
  857. }else{
  858. $mac = $identify;
  859. }
  860. return $mac;
  861. }
  862. /**
  863. * 设置deviceId 与 uid 关系
  864. * @param $sid
  865. * @param $uid
  866. * @param $deviceId
  867. * @param $lid
  868. * Created by: Owen
  869. * Created on: 2021/4/10 10:54
  870. */
  871. public function setUserDeviceId($sid,$uid,$deviceId,$lid){
  872. $tb = otable::DeviceId();
  873. $sid = !empty($sid)?$sid:1;
  874. $lid = !empty($lid)?$lid:2;
  875. !empty($deviceId) && oo::commonOprDb('userinfo')->query("REPLACE INTO {$tb} (`sid`, `uid`, `deviceId`,`lid`) VALUES ({$sid},{$uid},'{$deviceId}',{$lid})");
  876. }
  877. /**
  878. * IOS 授权登录
  879. * @param $site
  880. * @param $appleUserId
  881. * @param $appleIdentityToken
  882. * @return array
  883. * Created by: Owen
  884. * Created on: 2021/4/10 11:33
  885. */
  886. public function iosLoginByAppleUserId($siteId,$appleUserId,$appleIdentityToken){
  887. if(empty($appleIdentityToken)){
  888. $errArr = ['code'=>0,'uid'=>-1,'line'=>__LINE__,'msg'=>"token empty"];
  889. funs::errLog($errArr);
  890. return ['err' => $errArr];
  891. }
  892. $ret = oo::commonOprModel('ios')->appleJwtVerify($appleIdentityToken);
  893. $packages = ['com.unioncity.crazycoin', 'com.gworld.crazyspinios', 'com.newsky.crazycoin'];
  894. if(!$ret['status'] || !in_array($ret['data']['aud'], $packages) || $ret['data']['sub'] != $appleUserId){
  895. $errArr = ['code'=>0,'uid'=>-1,'line'=>__LINE__,'msg'=>$ret['error']];
  896. funs::errLog($errArr);
  897. return ['err' => $errArr];
  898. }
  899. $isAppleAuthUser = oo::commonOprDb('userinfo')->getOne(sprintf("SELECT * FROM %s WHERE openudid='%s'", otable::openudid(), $appleUserId),MYSQLI_ASSOC);
  900. if(empty($isAppleAuthUser)){
  901. $isVisitor = oo::commonOprDb('userinfo')->getOne(sprintf("SELECT * FROM %s WHERE openudid='%s'", otable::openudid(), $siteId),MYSQLI_ASSOC);
  902. if(!empty($isVisitor)){
  903. oo::commonOprDb('userinfo')->query(sprintf("INSERT INTO %s (openudid,uid,createtime) VALUES('%s',%d,%d)", otable::openudid(), $appleUserId, $isVisitor['uid'], time()));
  904. }
  905. }
  906. $loginInfo = oo::commonOprDb('userinfo')->getOne(sprintf("SELECT * FROM %s WHERE openudid='%s'", otable::openudid(), $appleUserId),MYSQLI_ASSOC);
  907. return $loginInfo ;
  908. }
  909. /**
  910. * 游客登录
  911. * @param $sid
  912. * @param $siteId
  913. * @param string $deviceId
  914. * @return array
  915. * Created by: Owen
  916. * Created on: 2021/4/10 15:40
  917. */
  918. public function loginByMac($sid,$siteId,$deviceId = ""){
  919. return $sid == 1 ? $this->androidLoginByMac($siteId,$deviceId) : $this->iosLoginByMac($siteId);
  920. }
  921. /**
  922. * IOS 游客登录
  923. * @param $siteId
  924. * @return array
  925. * Created by: Owen
  926. * Created on: 2021/4/10 12:01
  927. */
  928. public function iosLoginByMac($siteId){
  929. return oo::commonOprDb('userinfo')->getOne(sprintf("SELECT * FROM %s WHERE openudid='%s'", otable::openudid(), $siteId),MYSQLI_ASSOC);
  930. }
  931. /**
  932. * android 游客登录
  933. * @param $siteId
  934. * @param string $deviceId
  935. * Created by: Owen
  936. * Created on: 2021/4/10 12:12
  937. */
  938. public function androidLoginByMac($siteId,$deviceId = ""){
  939. $ret = oo::commonOprDb('userinfo')->getOne(sprintf("SELECT * FROM %s WHERE macid='%s'", otable::mobile(), $siteId),MYSQLI_ASSOC);
  940. if(empty($ret)){
  941. $ret = oo::commonOprDb('userinfo')->getOne(sprintf("SELECT * FROM %s WHERE deviceId='%s' AND lid='%d'", otable::DeviceId(), $deviceId,2),MYSQLI_ASSOC);
  942. }
  943. return $ret;
  944. }
  945. /**
  946. * 断开游客与mac的联系
  947. * @param $sid
  948. * @param $uid
  949. * @param $identify
  950. * @param string $deviceId
  951. * @return mixed
  952. * Created by: Owen
  953. * Created on: 2021/4/10 15:43
  954. */
  955. public function disconnectUidByMac($sid,$uid,$identify,$deviceId = ""){
  956. if($sid == 1){
  957. $bool= oo::commonOprDb('common')->query(sprintf("DELETE FROM %s WHERE uid='%d' AND macid='%s'", otable::mobile(), $uid , $identify));
  958. $bool && !empty($deviceId) && oo::commonOprDb('common')->query(sprintf("DELETE FROM %s WHERE uid='%d' AND deviceId='%s'", otable::DeviceId(),$uid,$deviceId));
  959. }else{
  960. $bool= oo::commonOprDb('common')->query(sprintf("DELETE FROM %s WHERE uid='%d' AND openudid='%s'", otable::openudid(), $uid , $identify));
  961. }
  962. return $bool;
  963. }
  964. /**
  965. * 账号转换记录
  966. * @param $insertData
  967. * @return mixed
  968. * Created by: Owen
  969. * Created on: 2021/4/13 11:06
  970. */
  971. public function setTransformLog($insertData){
  972. $tb = otable::TransformLog();
  973. $keys = implode(',',array_keys($insertData));
  974. $values = "'".implode("','",array_values($insertData))."'";
  975. return oo::commonOprDb('common')->query("INSERT INTO {$tb} ({$keys}) VALUES ({$values})");
  976. }
  977. /**
  978. * Notes:用户头像框发放
  979. * User: wsc
  980. * Time: 2022/6/30 14:59
  981. * @param $uid
  982. * @param $aid
  983. */
  984. public function sendUserAvatar($uid,$aid){
  985. $key =okeys::userAvatar($uid);
  986. $alist = oo::commonOprRedis('common')->hGetAll($key);
  987. if(in_array($aid,array_keys($alist))){
  988. return -1;
  989. }
  990. $tb = otable::userAvatar();
  991. $data =[
  992. "uid"=>$uid,
  993. "avatar_id"=>$aid,
  994. "active"=>1,
  995. "created_at"=>time(),
  996. ];
  997. $sql = funs::db_insertSQL($tb,$data);
  998. $ret = oo::commonOprDb('common')->query($sql,1);
  999. $id = oo::commonOprDb('common')->insertID();
  1000. if(!$ret){
  1001. return -2;
  1002. }
  1003. $data['id'] = $id;
  1004. oo::commonOprRedis('common')->hSet($key,$aid,json_encode($data));
  1005. oo::commonOprRedis('common')->expire($key,7*86400);
  1006. return 1;
  1007. }
  1008. }