diamond.php 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632
  1. <?php
  2. defined( 'IN_WEB') or die( 'Include Error!');
  3. /**
  4. * 钻石相关
  5. */
  6. class ModelDiamond
  7. {
  8. CONST COINNOTENOUGH = 4; //金币不足pid
  9. CONST SPINNOTENOUGH = 5; //体力不足pid
  10. /**
  11. * 钻石商品gpid映射的groupid
  12. * @return array
  13. */
  14. public function getGroupWithGpid() {
  15. return [ 1 => 220, 2 => 221, 3 => 222, 4 => 223, 5 => 224, 6 => 225, ];
  16. }
  17. /**
  18. * 钻石积分获取兑换商城分组列表
  19. * @param int $groupId
  20. * @return array
  21. */
  22. public function getGroupsByScore($score) {
  23. //积分分组
  24. $scores = [
  25. 220 => [
  26. [0, 100],
  27. [101, 10000],
  28. ],
  29. 221 => [
  30. [0, 100],
  31. [10000, 9999999999],
  32. ],
  33. 222 => [
  34. [0, 100],
  35. [101, 10000],
  36. ],
  37. 223 => [
  38. [10000, 9999999999],
  39. ],
  40. 224 => [
  41. [101, 10000],
  42. ],
  43. 225 => [
  44. [10000, 9999999999],
  45. ]
  46. ];
  47. $arr = [];
  48. foreach($scores as $k => $v){
  49. foreach($v as $vv){
  50. if($score >= $vv[0] && $score <= $vv[1]){
  51. $arr[] = $k;
  52. break;
  53. }
  54. }
  55. }
  56. return $arr;
  57. }
  58. /**
  59. * 获取钻石商城兑换信息
  60. */
  61. public function getShopDiamondWithClient($uid) {
  62. $version = oo::commonOprModel('user')->getUserVersion($uid);
  63. if(oo::compareVersion($version,'1.7.7')){
  64. $shop = $this->getNewShopDiamond();
  65. $uExchanged = $this->getNewUserExchangeInfo($uid);
  66. }else{
  67. $shop = $this->getShopDiamond();
  68. $uExchanged = $this->getUserExchangeInfo($uid);
  69. }
  70. if(!oo::compareVersion($version,'1.8.4')){
  71. unset($shop[2237]);
  72. unset($shop[2238]);
  73. unset($shop[2239]);
  74. }
  75. $pStages = $arr = [];
  76. foreach($shop as $k => $v){
  77. if(!isset($pStages[$v['pid']])){
  78. $pStages[$v['pid']] = 0;
  79. }else{
  80. $pStages[$v['pid']] += 1;
  81. }
  82. $pInfo = empty($uExchanged[$v['pid']]) ? [] : $uExchanged[$v['pid']];
  83. if(oo::compareVersion($version,'1.7.7') && isset($pInfo[$pStages[$v['pid']]])){
  84. $pInfo = isset($pInfo[$pStages[$v['pid']]]) ? $pInfo[$pStages[$v['pid']]] : [];
  85. }
  86. if(!isset($arr[$v['pid']])){
  87. $expire = isset($pInfo['expire']) ? $pInfo['expire'] : 0;
  88. $stage = empty($pInfo['stage']) ? 0 : $pInfo['stage'];
  89. $buyTimes = empty($pInfo['buyTimes']) ? 0 : $pInfo['buyTimes'];
  90. if($expire && $expire < time()){ //cd过期了
  91. $expire = $stage = $buyTimes = 0;
  92. }
  93. //每次都有cd,客户端只有最后一次展示cd
  94. if(oo::compareVersion($version,'1.7.7')){
  95. $expire = $buyTimes < $v['times'] ? 0 : $expire;
  96. }else{
  97. if($expire && !$this->checkIfLast($v['pid'], $pInfo, $version)){
  98. $expire = 0;
  99. }
  100. }
  101. $arr[$v['pid']] = [
  102. 'gid' => $v['pid'],
  103. 'list' => [],
  104. ];
  105. if(!oo::compareVersion($version,'1.7.7')){
  106. $arr[$v['pid']]['stage'] = $stage;
  107. $arr[$v['pid']]['buyTimes'] = $buyTimes;
  108. $arr[$v['pid']]['expire'] = $expire;
  109. }
  110. }
  111. if(isset($v['gbaseReward']['props'])){
  112. $v['propId'] = $v['gbaseReward']['props'];
  113. $v['num'] = 1;
  114. }else{
  115. $v['gbaseReward'] = $this->getReward($uid, $v['gbaseReward']);
  116. $key = key($v['gbaseReward']);
  117. $key = $key == 'money' ? 'coins' : $key;
  118. $v['propId'] = $key;
  119. $v['num'] = current($v['gbaseReward']);
  120. }
  121. if(oo::compareVersion($version,'1.7.7')){
  122. if((!isset($pInfo['expire']) || $pInfo['expire'] < time())){
  123. $v['expire'] = $v['buyTimes'] = 0;
  124. }else{
  125. $v['expire'] = $pInfo['expire'];
  126. $v['buyTimes'] = isset($pInfo['buyTimes']) ? $pInfo['buyTimes'] : 0;
  127. }
  128. $v['stage'] = $pStages[$v['pid']];
  129. }else{
  130. $v['expire'] = $v['gExpire'];
  131. }
  132. unset($v['gbaseReward'], $v['gExpire'], $v['stages']);
  133. $arr[$v['pid']]['list'][] = $v;
  134. }
  135. return array_values($arr);
  136. }
  137. /**
  138. * 获取玩家阶次兑换信息
  139. * @param int $uid
  140. * @param int $pid
  141. */
  142. public function getExchangedWithClient($uid, $pid, $stage, $version = '') {
  143. if(empty($version)){
  144. $version = oo::commonOprModel('user')->getUserVersion($uid);
  145. }
  146. if(oo::compareVersion($version,'1.7.7')){
  147. $info = $this->getNewUserExchangeInfo($uid, $pid);
  148. if(isset($info[$stage])){
  149. $info = $info[$stage];
  150. }else{
  151. $info = [];
  152. }
  153. }else{
  154. $info = $this->getUserExchangeInfo($uid, $pid);
  155. }
  156. if(empty($info)){
  157. $info = ['stage' => 0, 'buyTimes' => 0, 'expire' => 0];
  158. }
  159. if(oo::compareVersion($version,'1.7.7')){
  160. $shopArr = $this->getShopDiamondByPid($pid, $version);
  161. $gInfo = isset($shopArr[$stage]) ? $shopArr[$stage] : [];
  162. if(empty($gInfo) || $gInfo['times'] > $info['buyTimes']){
  163. $info['expire'] = 0;
  164. }
  165. $info['stage'] = $stage;
  166. $info['expire'] = (isset($info['expire']) && $info['expire'] > time()) ? $info['expire'] : 0;
  167. }else{
  168. if(empty($info['expire']) || !$this->checkIfLast($pid, $info, $version)){
  169. $info['expire'] = 0;
  170. }
  171. }
  172. return $info;
  173. }
  174. public function getShopDiamondByPid($pid = 0, $version = '1.7.3') {
  175. if(oo::compareVersion($version,'1.7.7')){
  176. $tmp = $this->getNewShopDiamond();
  177. }else{
  178. $tmp = $this->getShopDiamond();
  179. }
  180. $arr = [];
  181. foreach($tmp as $k => $v){
  182. if(!isset($arr[$v['pid']])){
  183. $arr[$v['pid']] = [];
  184. }
  185. $arr[$v['pid']][] = $v;
  186. }
  187. return isset($arr[$pid]) ? $arr[$pid] : [];
  188. }
  189. /**
  190. * 新版钻石兑换分3行显示
  191. * @param int $gid
  192. * @return array
  193. */
  194. public function getNewShopDiamond($gid = 0) {
  195. $arr = $this->getShopDiamond();
  196. $pid3Arr = $data = [];
  197. $end = end($arr);
  198. $stages3 = $end['stages'];
  199. $stages2 = 0;
  200. foreach($arr as $k => $v){
  201. if($v['pid'] == 3){ //pid3的结构有变更
  202. $v['pid'] = 2;
  203. $v['stages'] += $stages2;
  204. $pid3Arr[$k] = $v;
  205. continue;
  206. }
  207. if($v['pid'] == 2){
  208. empty($stages2) && $stages2 = $v['stages'];
  209. $v['stages'] = $v['stages'] + $stages3;
  210. }
  211. $data[$k] = $v;
  212. }
  213. $data = $data + $pid3Arr;
  214. if($gid){
  215. return !isset($data[$gid]) ? [] : $data[$gid];
  216. }
  217. return $data;
  218. }
  219. public function getShopDiamond($gid = 0) {
  220. $arr = oo::commonOprRedis("common")->hGetAll(okeys::shopDiamond());
  221. ksort($arr);
  222. $stages = [];
  223. if(empty($arr)){
  224. $tb = otable::diamondCrazy();
  225. $sql = "SELECT * FROM {$tb} WHERE pid IN(1, 2, 3,6)";
  226. $rs = oo::commonOprDb('common')->getAll($sql,1);
  227. $arr = [];
  228. foreach($rs as $k => $v){
  229. $v['gbaseReward'] = json_decode($v['gbaseReward'], true);
  230. $arr[$v['gid']] = $v;
  231. $stages[$v['pid']] = isset($stages[$v['pid']]) ? $stages[$v['pid']]+1 : 1;
  232. }
  233. //存redis
  234. foreach($arr as $k => $v){
  235. $v['stages'] = isset($stages[$v['pid']]) ? $stages[$v['pid']] : 0;
  236. $arr[$k] = $v;
  237. oo::commonOprRedis("common")->hSet(okeys::shopDiamond(), $k, json_encode($v));
  238. }
  239. }
  240. foreach($arr as $k => $v){
  241. $arr[$k] = is_array($v) ? $v : (array)json_decode($v, true);
  242. }
  243. if($gid){
  244. return !isset($arr[$gid]) ? [] : $arr[$gid];
  245. }
  246. return $arr;
  247. }
  248. /**
  249. * 获取下一次过期时间戳
  250. */
  251. public function getExpire() {
  252. $expire = strtotime(date('Y-m-d', strtotime('+1 days')));
  253. if(defined('IS_DEBUF') && IS_DEBUF){
  254. $h = date('H');
  255. if($h < 8){ //世界时间前一天
  256. $expire = strtotime(date('Y-m-d', time()))+8*3600;
  257. }else{
  258. $expire = strtotime(date('Y-m-d', strtotime('+1 days')))+8*3600;
  259. }
  260. }
  261. return $expire;
  262. }
  263. /**
  264. * 新版玩家钻石兑换记录
  265. * @param int $uid
  266. * @param int $pid
  267. * @return array
  268. */
  269. public function getNewUserExchangeInfo($uid, $pid = 0) {
  270. $arr = oo::commonOprRedis("user")->hGetAll(okeys::userDdiamond($uid));
  271. //最大过期时间,第二天0点
  272. $maxExpire = $this->getExpire();
  273. if($pid){
  274. $info = !empty($arr[$pid]) ? (array)json_decode($arr[$pid], true) : [];
  275. foreach($info as $k => $v){
  276. if($info[$k] && !isset($info[$k]['buyTimes'])){ //第一次直接重置
  277. //$info[$k]['expire'] = time()-8*3600-1; //世界时间
  278. oo::commonOprRedis("user")->delete(okeys::userDdiamond($uid));
  279. return [];
  280. }
  281. if(!empty($info[$k]['expire']) && $info[$k]['expire'] > $maxExpire){
  282. $info[$k]['expire'] = $maxExpire;
  283. }
  284. if($info[$k]['expire'] < time()){
  285. $info[$k]['expire'] = $info[$k]['buyTimes'] = 0;
  286. }
  287. }
  288. return $info;
  289. }
  290. foreach($arr as $k => $v){
  291. $arr[$k] = (array)json_decode($v, true);
  292. //老版本的数据直接清除
  293. if($arr[$k] && (isset($arr[$k]['buyTimes']) || isset($arr[$k]['expire']))){
  294. oo::commonOprRedis("user")->delete(okeys::userDdiamond($uid));
  295. return [];
  296. }
  297. foreach($arr[$k] as $kk => $vv){
  298. if(!empty($arr[$k][$kk]['expire']) && $arr[$k][$kk]['expire'] > $maxExpire){
  299. $arr[$k][$kk]['expire'] = $maxExpire;
  300. }
  301. if($arr[$k][$kk]['expire'] < time()){
  302. $arr[$k][$kk]['buyTimes'] = $arr[$k][$kk]['expire'] = 0;
  303. }
  304. }
  305. }
  306. return $arr;
  307. }
  308. /**
  309. * 获取玩家当前商品钻石兑换阶次
  310. * @param int $uid
  311. * @param int $pid 钻石商品组id [1, 2, 3]
  312. * @return array
  313. */
  314. public function getUserExchangeInfo($uid, $pid = 0) {
  315. $arr = oo::commonOprRedis("user")->hGetAll(okeys::userDdiamond($uid));
  316. //最大过期时间,第二天0点
  317. $maxExpire = $this->getExpire();
  318. if($pid){
  319. $info = !empty($arr[$pid]) ? (array)json_decode($arr[$pid], true) : [];
  320. if($info && !isset($info['expire'])){
  321. $info['expire'] = 0; //世界时间
  322. oo::commonOprRedis("user")->hSet(okeys::userDdiamond($uid), $pid, json_encode($info));
  323. }
  324. if(!empty($info['expire']) && $info['expire'] > $maxExpire){
  325. $info['expire'] = $maxExpire;
  326. }
  327. return $info;
  328. }
  329. foreach($arr as $k => $v){
  330. $arr[$k] = (array)json_decode($v, true);
  331. //兼容前期redis没有设置expire问题
  332. if($arr[$k] && !isset($arr[$k]['expire'])){
  333. $arr[$k]['expire'] = 0; //世界时间
  334. oo::commonOprRedis("user")->hSet(okeys::userDdiamond($uid), $k, json_encode($arr[$k]));
  335. }
  336. if(!empty($arr[$k]['expire']) && $arr[$k]['expire'] > $maxExpire){
  337. $arr[$k]['expire'] = $maxExpire;
  338. }
  339. }
  340. return $arr;
  341. }
  342. public function getGroupIdByGid($gid) {
  343. $arr = $this->getShopDiamond($gid);
  344. if(empty($arr['pid'])){
  345. return 0;
  346. }
  347. return $arr['pid'];
  348. }
  349. /**
  350. * 判断玩家当前是否到了最后一次兑换
  351. * @param int $pid
  352. * @param array $info
  353. * @return bool
  354. */
  355. public function checkIfLast($pid, $info, $version = '1.7.3') {
  356. if(empty($info['stage'])){
  357. return false;
  358. }
  359. $shopArr = $this->getShopDiamondByPid($pid, $version);
  360. if($info['stage'] < count($shopArr) - 1){
  361. return false;
  362. }
  363. $shopInfo = $shopArr[$info['stage']];
  364. if($info['buyTimes'] >= $shopInfo['buyTimes']){
  365. return true;
  366. }
  367. return false;
  368. }
  369. /**
  370. * 判断当前玩家当前是否可用宝石兑换物品
  371. */
  372. public function canExchange($uid, $pid, $stage, $version = '1.7.3') {
  373. if(oo::compareVersion($version,'1.7.7')){
  374. $tmp = $this->getNewUserExchangeInfo($uid, $pid);
  375. if(isset($tmp[$stage])){
  376. $info = $tmp[$stage];
  377. }else{
  378. $info = [];
  379. }
  380. }else{
  381. $info = $this->getUserExchangeInfo($uid, $pid);
  382. if(empty($info)){
  383. $info = ['stage' => 0, 'buyTimes' => 0];
  384. }
  385. }
  386. $shopInfoArr = $this->getShopDiamondByPid($pid, $version);
  387. if(!isset($shopInfoArr[$stage])){
  388. return false;
  389. }
  390. $shopInfo = $shopInfoArr[$stage];
  391. $curShopInfo = [];
  392. if(!oo::compareVersion($version,'1.7.7')){
  393. $curShopInfo = $shopInfoArr[$info['stage']];
  394. }
  395. if(empty($stage)){ //0阶
  396. //已过cd时间
  397. if(!empty($info['expire']) && $info['expire'] < time()){
  398. return true;
  399. }
  400. if(!oo::compareVersion($version,'1.7.7')){
  401. //还未到最后一阶
  402. if($info['stage'] && $info['stage'] < $shopInfo['stages'] - 1){
  403. return false;
  404. }
  405. //最后一阶次数未完
  406. if($info['stage'] >= $shopInfo['stages'] - 1 && $info['buyTimes'] < $curShopInfo['times']){
  407. return false;
  408. }
  409. //cd中
  410. if($info['stage'] && !empty($info['expire']) && $info['expire'] > time()){
  411. return false;
  412. }
  413. //当前阶次数买完了
  414. if(empty($info['stage']) && $info['buyTimes'] >= $curShopInfo['times']){
  415. return false;
  416. }
  417. }
  418. if(isset($info['buyTimes']) && $info['buyTimes'] >= $shopInfo['times']){
  419. return false;
  420. }
  421. }else{
  422. //已过cd时间
  423. if(!empty($info['expire']) && $info['expire'] < time()){
  424. return true;
  425. }
  426. if(!oo::compareVersion($version,'1.7.7')){
  427. if($info['stage'] > $stage){ //请求阶错误
  428. return false;
  429. }
  430. if($info['stage'] + 1 < $stage){ //跨阶了
  431. return false;
  432. }
  433. //当前阶次数未买完
  434. if($info['stage'] + 1 == $stage && $info['buyTimes'] < $curShopInfo['times']){
  435. return false;
  436. }
  437. //当前阶已买完
  438. if($info['stage'] == $stage && $info['buyTimes'] >= $curShopInfo['times']){
  439. return false;
  440. }
  441. }
  442. if(isset($info['buyTimes']) && $info['buyTimes'] >= $shopInfo['times']){
  443. return false;
  444. }
  445. }
  446. $assetsInfo = oo::commonOprModel('member')->getUserAssetsInfo($uid);
  447. //钻石不足
  448. if($shopInfo['price'] > (int)$assetsInfo['diamond']){
  449. return false;
  450. }
  451. return true;
  452. }
  453. /**
  454. * 使用钻石兑换物品
  455. * @param int $uid
  456. * @param int $pid
  457. */
  458. public function diamondExchange($uid, $pid, $stage, $version = '1.7.3') {
  459. $shopInfoArr = $this->getShopDiamondByPid($pid, $version);
  460. if(!isset($shopInfoArr[$stage])){
  461. return false;
  462. }
  463. if(oo::compareVersion($version, '1.7.7')){
  464. $info = $this->getNewUserExchangeInfo($uid, $pid);
  465. }else{
  466. $info = $this->getUserExchangeInfo($uid, $pid);
  467. }
  468. $shopInfo = $shopInfoArr[$stage];
  469. //扣除钻石
  470. $ret = oo::commonOprModel('member')->optProperty(
  471. $uid,['diamond' => $shopInfo['price']],'-',12,'钻石兑换,消耗钻石:'.$pid.':'.$stage
  472. );
  473. if(!$ret){
  474. oo::logs()->debug(['uid'=> $uid,'data'=>$shopInfo['price']],'getDiamond.log', date('Ymd').'/');
  475. return false;
  476. }
  477. if(oo::compareVersion($version,'1.7.7')){
  478. $upArr = $info;
  479. if(!isset($upArr[$stage])){
  480. $upArr[$stage] = ['buyTimes' => 1];
  481. }else{
  482. $upArr[$stage]['buyTimes'] += 1;
  483. }
  484. }else{
  485. $upArr = ['stage' => (int)$stage];
  486. if($stage != $info['stage']){ //跨阶或重新开始买
  487. $upArr['buyTimes'] = 1;//重置次数
  488. }else{
  489. $times = $info['buyTimes']+1 >= $shopInfo['times'] ? $shopInfo['times'] : $info['buyTimes']+1;
  490. $upArr['buyTimes'] = (int)$times;
  491. }
  492. }
  493. //最后一阶了,更新倒计时,世界时间第二天0点
  494. $expire = $this->getExpire();
  495. if(oo::compareVersion($version,'1.7.7')){
  496. $upArr[$stage]['expire'] = (isset($upArr[$stage]['expire']) && $upArr[$stage]['expire'] > time()) ? $upArr[$stage]['expire'] : $expire;
  497. }else{
  498. $upArr['expire'] = $expire;
  499. }
  500. //更新兑换信息
  501. $ret = oo::commonOprRedis("user")->hSet(okeys::userDdiamond($uid), $pid, json_encode($upArr));
  502. if(!$ret){
  503. $log = json_encode(['act' => 'up user diamond exchange stage fail','value' => $stage+1]);
  504. oo::logs()->debug(['uid'=> $uid, 'data'=>$log],'getDiamond.log', date('Ymd').'/');
  505. return false;
  506. }
  507. $reward = $this->getReward($uid, $shopInfo['gbaseReward']);
  508. if(isset($shopInfo['gbaseReward']['crazyPassExp'])){
  509. $ret = oo::commonOprModel('member')->sendReward($uid, 38, $shopInfo['gbaseReward']['crazyPassExp'],13,'钻石兑换,增加物品:'.$pid.':'.$stage);
  510. }else{
  511. $ret = oo::commonOprModel('member')->optProperty($uid,$reward,'+',13,'钻石兑换,增加物品:'.$pid.':'.$stage);
  512. }
  513. if(!$ret){
  514. $log = json_encode(['act'=>'diamond exchange attr fail,stage:'.((int)$stage+1),'value'=>$shopInfo['gbaseReward']]);
  515. oo::logs()->debug(['uid'=> $uid,'data'=>$log],'getDiamond.log', date('Ymd').'/');
  516. }
  517. return $ret;
  518. }
  519. public function getReward($uid, $gbaseReward) {
  520. if(is_array($gbaseReward) && isset($gbaseReward['coins'])){
  521. $gbaseReward['money'] = oo::commonOprModel('goods')->getGoodCoins($uid, $gbaseReward['coins']);
  522. $num = isset($gbaseReward['num']) ? (int)$gbaseReward['num'] : 1;
  523. if($num < 0){
  524. $num = 1;
  525. }
  526. $gbaseReward['money'] = $gbaseReward['money'] * $num;
  527. unset($gbaseReward['coins'], $gbaseReward['num']);
  528. }
  529. return $gbaseReward;
  530. }
  531. /**
  532. * 金币/体力不足直接钻石兑换列表
  533. * @param $gid int
  534. * @return array
  535. */
  536. public function getNotEnoughDiamond($uid, $gid = 0) {
  537. $arr = oo::commonOprRedis("common")->hGetAll(okeys::notEnouthDiamond());
  538. ksort($arr);
  539. if(empty($arr)){
  540. $tb = otable::diamondCrazy();
  541. $pids = self::COINNOTENOUGH . ',' . self::SPINNOTENOUGH;
  542. $sql = "SELECT * FROM {$tb} WHERE pid IN({$pids})";
  543. $rs = oo::commonOprDb('common')->getAll($sql,1);
  544. $arr = [];
  545. foreach($rs as $k => $v){
  546. $v['gbaseReward'] = json_decode($v['gbaseReward'], true);
  547. $arr[$v['gid']] = $v;
  548. }
  549. unset($v['gExpire'], $v['times']);
  550. //存redis
  551. foreach($arr as $k => $v){
  552. $arr[$k] = $v;
  553. oo::commonOprRedis("common")->hSet(okeys::notEnouthDiamond(), $k, json_encode($v));
  554. }
  555. }
  556. foreach($arr as $k => $v){
  557. $v = is_array($v) ? $v : (array)json_decode($v, true);
  558. if(!is_array($v) || empty($v)){
  559. continue;
  560. }
  561. unset($v['gExpire'], $v['times']);
  562. if(isset($v['gbaseReward']['props'])){
  563. $v['propId'] = $v['gbaseReward']['props'];
  564. $v['num'] = 1;
  565. }else{
  566. $v['gbaseReward'] = $this->getReward($uid, $v['gbaseReward']);
  567. }
  568. $arr[$k] = is_array($v) ? $v : (array)json_decode($v, true);
  569. }
  570. if($gid){
  571. return !isset($arr[$gid]) ? [] : $arr[$gid];
  572. }
  573. return $arr;
  574. }
  575. /**
  576. * 返回给客户端的结构
  577. */
  578. public function notEnoughWithClient($uid) {
  579. $tmp = $this->getNotEnoughDiamond($uid);
  580. $data = [
  581. 'diamondCoin' => [],
  582. 'diamondSpin' => [],
  583. ];
  584. foreach($tmp as $v) {
  585. $v['id'] = $v['gid'];
  586. $v['addRatio'] = empty($v['gaddRatio']) ? '0' : $v['gaddRatio'];
  587. unset($v['gaddRatio']);
  588. if($v['pid'] == self::SPINNOTENOUGH){
  589. $v['num'] = $v['gbaseReward']['spins'];
  590. unset($v['gbaseReward']);
  591. $data['diamondSpin'][] = $v;
  592. }else{
  593. $v['num'] = $v['gbaseReward']['money'];
  594. unset($v['gbaseReward']);
  595. $data['diamondCoin'][] = $v;
  596. }
  597. }
  598. return $data;
  599. }
  600. }