achievement.php 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640
  1. <?php
  2. defined('IN_WEB') or die('Include Error!');
  3. /**
  4. * 成就系统
  5. */
  6. class ModelAchievement
  7. {
  8. public $contypes = array(
  9. 'com', // '普通场对局'
  10. 'allin', // 'All In次数'
  11. 'win', // '胜利次数'
  12. 'swinchips', // 单局赢多少筹码
  13. 'winchips', // 累计赢多少筹码
  14. 'maxchips', // 最大拥有筹码数
  15. 'straight', // 顺子胜利次数
  16. 'flush', // 同花胜利次数
  17. 'straight_flush', // 同花顺胜利次数
  18. 'matchwin', // 比赛场获得名次
  19. 'recall', // 成功召回好友
  20. 'playslots', // 玩老虎机次数
  21. 'sendfn', // 赠送好友游戏币次数
  22. 'senddealer', // 打赏荷官
  23. 'invites', // 成功邀请好友数
  24. 'paid', // 累计充值
  25. 'hlu', //葫芦
  26. 'stiao', //四条
  27. );
  28. public $notIncContypes = array('win', 'maxchips', 'paid');
  29. public $achievementConfig = array();
  30. public $errCode = 0;
  31. public function __construct() {
  32. $this->dbToConfig();
  33. }
  34. /**
  35. * 获取成就列表
  36. * @param int $uid
  37. * @return array
  38. */
  39. public function getList($uid) {
  40. $data = array('code' => -1, 'list' => []);
  41. if (!$uid || !$this->achievementConfig) {
  42. return $data;
  43. }
  44. $ret = $this->achievementConfig;
  45. $rewardedStr = $this->getRewarded($uid);
  46. $rewarded = str_split($rewardedStr);
  47. $conKeys = array();
  48. foreach ($ret as $id => &$v) {
  49. if (!isset($v['subtask']) || !is_array($v['subtask'])) {
  50. unset($v);
  51. continue;
  52. }
  53. $status = isset($rewarded[$id - 1]) ? (int) $rewarded[$id - 1] : 0;
  54. foreach ($v['subtask'] as $subid => &$task) {
  55. $task['num'] = (int) $task[0];
  56. $task['reward'] = (int) $task[1];
  57. // 匹配用户已完成的子任务
  58. if ($status & (1 << $subid - 1)) {
  59. $task['rewarded'] = 1;
  60. } else {
  61. $task['rewarded'] = 0;
  62. }
  63. unset($task[0], $task[1]);
  64. }
  65. $conKeys[] = $v['contype'];
  66. unset($v['zh_name']);
  67. }
  68. $condition = $this->getCondition($uid, $conKeys);
  69. // 数据重组
  70. foreach ($ret as $id => &$v) {
  71. $v['cur'] = (int) $condition[$v['contype']];
  72. }
  73. $data['code'] = 1;
  74. $data['list'] = $ret;
  75. return $data;
  76. }
  77. /**
  78. * 获取用户领取情况
  79. * @param int $uid
  80. * @return array
  81. */
  82. public function getRewarded($uid) {
  83. if (!$uid) return array();
  84. $cacheKey = okeys::achi($uid);
  85. $cache = oo::commonOprRedis('userinfo')->get($cacheKey);
  86. if (!is_null($cache) && $cache !== false) {
  87. return $cache;
  88. }
  89. $tb = otable::achi($uid);
  90. $query = "select rewarded from {$tb} where uid='{$uid}' limit 1";
  91. $row = oo::commonOprDb('common')->getOne($query, MYSQLI_ASSOC);
  92. if ($row) {
  93. $rewarded = !empty($row['rewarded']) ? $row['rewarded'] : $this->getDefault();
  94. } else {
  95. $rewarded = $this->getDefault();
  96. $query = "insert into {$tb} (uid,rewarded) values ('{$uid}','{$rewarded}')";
  97. $flg = oo::commonOprDb('common')->query($query);
  98. if (!$flg)
  99. return array();
  100. }
  101. oo::commonOprRedis('userinfo')->setex($cacheKey, $rewarded, oo::redisRandomExpire(7 * 86400));
  102. return $rewarded;
  103. }
  104. /**
  105. * 获取用户当前缓存状态
  106. * @param int $uid
  107. * @param array $types
  108. * @return array
  109. */
  110. public function getCondition($uid, $types = array()) {
  111. if (!$uid || !$types || !is_array($types)) {
  112. return array();
  113. }
  114. $cacheKey = okeys::achi($uid.'-');
  115. if (!oo::commonOprRedis('usercache')->exists($cacheKey)) { // 没有缓存
  116. $ret = $this->getConditionFromDB($uid, true);
  117. } else {
  118. $ret = oo::commonOprRedis('usercache')->hMget($cacheKey, $types);
  119. }
  120. $property = array();
  121. // if (isset($ret['paid'])) {
  122. // $ret['paid'] = $ret['paid']; // 泰铢
  123. // }
  124. if (in_array('maxchips', $types)) {
  125. $property or $property = oo::commonOprModel('member')->getUserAssetsInfo($uid);
  126. $ret['maxchips'] = $property['money'];
  127. }
  128. return $ret;
  129. }
  130. /**
  131. * 默认串
  132. * @return string
  133. */
  134. public function getDefault() {
  135. $maxId = max(array_keys($this->achievementConfig));
  136. return str_pad('', $maxId, '0');
  137. }
  138. /**
  139. * 获取条件值的数据库记录,或更新至缓存
  140. * @param int $uid
  141. * @param bool $toCache
  142. * @return array
  143. */
  144. public function getConditionFromDB($uid, $toCache = false) {
  145. if (!$uid)
  146. return array();
  147. $tb = otable::achi($uid.'-');
  148. $query = "select * from {$tb} where uid='{$uid}' limit 1";
  149. $data = oo::commonOprDb('common')->getOne($query, MYSQLI_ASSOC);
  150. if ($toCache) {
  151. oo::commonOprRedis('usercache')->delete(okeys::achi($uid));
  152. unset($data['rewarded']);
  153. oo::commonOprRedis('usercache')->hMget(okeys::achi($uid), $data);
  154. }
  155. return $data;
  156. }
  157. /**
  158. * 设置已领奖励缓存
  159. * @param int $uid
  160. * @param int $id
  161. * @param int $subid
  162. * @return bool
  163. */
  164. public function setRewarded($uid, $id, $subid) {
  165. if (!$uid || !$id || !$subid) {
  166. $this->errCode = -201;
  167. return false;
  168. }
  169. $rewardedStr = $this->getRewarded($uid);
  170. // 如果有新成就则可以补全
  171. $maxId = max(array_keys($this->achievementConfig));
  172. $rewardedStr = str_pad($rewardedStr, $maxId, '0');
  173. $rewarded = str_split($rewardedStr);
  174. $idx = $id - 1; // ** 重要,存储的字符串是要ID-1
  175. if (!isset($rewarded[$idx])) {
  176. $this->errCode = -201;
  177. return false;
  178. }
  179. if ($rewarded[$idx] & (1 << $subid - 1)) { // 已经设置过
  180. $this->errCode = -202;
  181. return false;
  182. }
  183. $rewarded[$idx] |= 1 << $subid - 1;
  184. return $this->updateRewarded($uid, implode('', $rewarded));
  185. }
  186. /**
  187. * 更新领取情况
  188. * @param int $uid
  189. * @param string $rewarded
  190. * @return bool
  191. */
  192. public function updateRewarded($uid, $rewarded) {
  193. if (!$uid || empty($rewarded)) {
  194. return false;
  195. }
  196. $rewarded = oo::functions()->escape($rewarded);
  197. oo::commonOprRedis('userinfo')->delete(okeys::achi($uid));
  198. $tb = otable::achi($uid);
  199. $query = "update {$tb} set rewarded='{$rewarded}' where uid='{$uid}' limit 1";
  200. return oo::commonOprDb('common')->query($query);
  201. }
  202. /**
  203. * 累加条件缓存
  204. * @param int $uid
  205. * @param string $type
  206. * @param int $num
  207. * @return bool
  208. */
  209. public function incCondition($uid, $type, $num = 1) {
  210. if (!$uid || !in_array($type, $this->contypes)) {
  211. return false;
  212. }
  213. $cacheKey = okeys::achi($uid.'-');
  214. $curCondition = $this->getCondition($uid, [$type]);
  215. if ($type == 'winchips' && $curCondition['winchips'] > 100000000) { // 已经超过最大值了
  216. return false;
  217. }
  218. $diffCacheKey = okeys::achiDiff($uid);
  219. if ($type == 'swinchips') {
  220. if ($num <= $curCondition['swinchips']) {
  221. return false;
  222. } else {
  223. oo::commonOprRedis('usercache')->hSet($diffCacheKey, $type, $num);
  224. return oo::commonOprRedis('usercache')->hSet($cacheKey, $type, $num);
  225. }
  226. }
  227. oo::commonOprRedis('usercache')->hIncrBy($diffCacheKey, $type, $num);
  228. $ret = oo::commonOprRedis('usercache')->hIncrBy($cacheKey, $type, $num);
  229. return $ret;
  230. }
  231. /**
  232. * 成就用户数据值入库落地(放在用户登录的时候,落地一次)
  233. * loginHandler.php
  234. * @param array $arr
  235. * @return bool
  236. */
  237. public function recordCondition($arr) {
  238. $uid = (int) $arr['uid'];
  239. if (!$uid)
  240. return false;
  241. $cacheKey = okeys::achiDiff($uid);
  242. $cache = oo::commonOprRedis('usercache')->hGetAll($cacheKey);
  243. if ($cache === false) { // 没有缓存
  244. return false;
  245. }
  246. oo::commonOprRedis('usercache')->delete($cacheKey); // 删除差值,重新累加
  247. $tb = otable::achi($uid);
  248. if (!is_array($cache) || !$cache)
  249. return false;
  250. $insert = "";
  251. $update = "";
  252. foreach ($cache as $k => $v) {
  253. $v = (int) $v;
  254. if (!in_array($k, $this->contypes) || ($v <= 0)) {
  255. continue;
  256. }
  257. $insert .= "`{$k}`='{$v}',";
  258. if ($k == 'swinchips') { // 更新不累加
  259. $update .= "`{$k}`='{$v}',";
  260. } else {
  261. $update .= "`{$k}`=`{$k}`+'{$v}',";
  262. }
  263. }
  264. if (empty($insert))
  265. return false;
  266. $insert = rtrim($insert, ',');
  267. $update = rtrim($update, ',');
  268. $query = "insert into {$tb} set uid='{$uid}',{$insert} on duplicate key update {$update}";
  269. return oo::commonOprDb('achi')->query($query);
  270. }
  271. /**
  272. * 数据库内容读入配置文件
  273. */
  274. public function dbToConfig()
  275. {
  276. $key = okeys::achievementConfig();
  277. $cacheData = oo::commonOprRedis('config')->get($key);
  278. if ($cacheData) {
  279. $tempArr = json_decode($cacheData, 1);
  280. foreach ($tempArr as $id => &$info) {
  281. $info['name'] = oo::getLang('achievement_'.$info['contype']);
  282. $info['desc'] = oo::getLang('achievement_desc_'.$info['contype']);
  283. }
  284. $this->achievementConfig = $tempArr;
  285. return;
  286. }
  287. $table = otable::achievementConfig();
  288. $sql = "SELECT * FROM {$table} ORDER BY aid ASC ";
  289. $list = oo::commonOprDb('common')->getAll($sql, 1);
  290. $i = 1;
  291. $taskList = array();
  292. foreach ($list as $ke => $value) {
  293. $value['id'] = $taskid = intval($value['id']);
  294. $value['sort'] = intval($value['sort']);
  295. $value['name'] = oo::getLang('achievement_'.$value['contype']);
  296. $value['desc'] = oo::getLang('achievement_desc_'.$value['contype']);
  297. $subtask = json_decode($value['subtask'], 1);
  298. $value['subtask'] = $subtask;
  299. $taskList[$taskid] = $value;
  300. $i++;
  301. }
  302. $taskListJson = json_encode($taskList);
  303. oo::commonOprRedis('config')->set($key, $taskListJson, 3600);
  304. $this->achievementConfig = $taskList;
  305. return $taskList;
  306. }
  307. /**
  308. * 配置文件写入数据库
  309. */
  310. public function configToDb()
  311. {
  312. $table = otable::achievementConfig();
  313. foreach ($this->achievementConfig as $key => $info) {
  314. $name = $info['name'];
  315. $zh_name = $info['zh_name'];
  316. $contype = $info['contype'];
  317. $image = $info['image'];
  318. $sort = $info['sort'];
  319. $desc = $info['desc'];
  320. $subtask = json_encode( $info['subtask'] );
  321. $sql = "INSERT INTO {$table} VALUES({$key}, '{$name}', '{$zh_name}', '{$contype}', '{$image}', {$sort}, '{$desc}', '{$subtask}')";
  322. oo::commonOprDb('common')->query($sql);
  323. echo $key."\r\n";
  324. }
  325. }
  326. // -----------------------------------------------------------------------------------------------------------------
  327. /**
  328. * 成就配置
  329. * @param string $aid
  330. * @return mixed
  331. * Created by: Owen
  332. * Created on: 2019/6/13 17:50
  333. * Description:
  334. */
  335. public function getAchieveConfig($aid = ''){
  336. $cacheKey = okeys::AchieveConfig();
  337. $arrJson = oo::commonOprRedis('config')->hGetAll($cacheKey);
  338. $arr = funs::getArrFromJsonArr($arrJson);
  339. if(empty($arr)||($aid!==''&&empty($arr[$aid]))){
  340. $tb = otable::achievementConfig();
  341. $sql = "SELECT * FROM {$tb}";
  342. $ret = oo::commonOprDb('config')->getAll($sql,1);
  343. if(!empty($ret)){
  344. foreach ($ret as $k=>$v){
  345. $arr[$v['aid']] = $v;
  346. $cache[$v['aid']] = json_encode($v);
  347. }
  348. oo::commonOprRedis('config')->hMset($cacheKey,$cache);
  349. oo::commonOprRedis('config')->expire($cacheKey,oo::redisRandomExpire(7*86400));
  350. }
  351. }
  352. $data = $aid===''?$arr:$arr[$aid];
  353. return $data;
  354. }
  355. /**
  356. * 成就列表
  357. * @param $uid
  358. * @return array
  359. * Created by: Owen
  360. * Created on: 2020/4/7 18:27
  361. */
  362. public function getAchieveList($uid){
  363. $achieveConfig = self::getAchieveConfig();
  364. $achieveUser = self::getUserAchieve($uid);
  365. $achieve = [];
  366. $lang = oo::getDefinedLang($uid);
  367. foreach ($achieveConfig as $row){
  368. $reward = json_decode($row['reward']);
  369. $stage = explode(',',$row['stage']);
  370. $i = 0;
  371. $process = ($achieveUser[$row['aid']]['process'])??0;
  372. foreach ($stage as $k){
  373. if($process>=$k){
  374. $i++;
  375. }
  376. }
  377. $userStage = ($achieveUser[$row['aid']]['stage'])??0;
  378. if($userStage >= count($stage)){
  379. $userStage = $userStage - 1;
  380. }
  381. if($lang == 'zh'){
  382. $designation = $row['designation'];
  383. $content = $row['content'];
  384. }else{
  385. $designation = $row['designation_'.$lang];
  386. $content = $row['content_'.$lang];
  387. }
  388. $temp = [
  389. 'id' =>$row['aid'],
  390. 'rewardTimes' =>$i,
  391. 'name' =>$designation,
  392. 'desc' =>$content,
  393. 'spinsNum' =>$reward[$userStage]->spin,
  394. 'coinsNum' =>$reward[$userStage]->coin,
  395. 'progress' =>$process,
  396. 'target' =>$stage[$userStage],
  397. 'curRewardTimes'=>($achieveUser[$row['aid']]['stage'])??0
  398. ];
  399. $achieve[] = $temp;
  400. }
  401. return $achieve;
  402. }
  403. /**
  404. * 获取用户成就
  405. * @param $uid
  406. * @param $aid
  407. * @return mixed
  408. * Created by: Owen
  409. * Created on: 2019/6/13 17:50
  410. * Description:
  411. */
  412. public function getUserAchieve($uid,$aid = ''){
  413. $cacheKey = okeys::UserAchieve($uid);
  414. $data = oo::commonOprRedis('Usercache')->hGetAll($cacheKey);
  415. if(empty($data)){
  416. $tb = otable::achievement($uid);
  417. $data = oo::commonOprDb('achievement')->getAll("SELECT * FROM {$tb} WHERE uid={$uid}",MYSQLI_ASSOC);
  418. if(empty($data)){
  419. if($aid !== ''){
  420. return self::InsertUserAchieve($uid,$aid);
  421. }else if($aid == ''){
  422. return [];
  423. }
  424. }
  425. foreach ($data as $row){
  426. oo::commonOprRedis('Usercache')->hSetNx($cacheKey,$row['aid'],json_encode($row));
  427. }
  428. oo::commonOprRedis('Usercache')->expire($cacheKey,oo::redisRandomExpire(3*2*60*60));
  429. }else{
  430. $data = funs::getArrFromJsonArr($data);
  431. }
  432. $out = [];
  433. foreach ($data as $key=>$row){
  434. if($key == $aid && $aid !== ''){
  435. return $row;
  436. }
  437. $out[$key] = $row;
  438. }
  439. if($aid === ''){
  440. return $out;
  441. }else{
  442. return self::InsertUserAchieve($uid,$aid);
  443. }
  444. }
  445. /**
  446. * 插入成就
  447. * @param $uid
  448. * @param $aid
  449. * @return array
  450. * Created by: Owen
  451. * Created on: 2020/7/3 14:52
  452. */
  453. public function InsertUserAchieve($uid,$aid){
  454. $cacheKey = okeys::UserAchieve($uid);
  455. $ret = [
  456. 'uid' => $uid,
  457. 'aid' => $aid,
  458. 'process' => 0,
  459. 'stage' => 0
  460. ];
  461. $res = oo::commonOprRedis('Usercache')->hSetNx($cacheKey,$aid,json_encode($ret));
  462. if($res){//并发锁
  463. $tb = otable::achievement($uid);
  464. oo::commonOprDb('achievement')->query("INSERT INTO {$tb} (uid,aid,process) VALUES ({$uid},{$aid},0)",false);
  465. }
  466. return $ret;
  467. }
  468. /**
  469. * 更新成就缓存
  470. * @param $uid
  471. * @param $aid
  472. * @param $ret
  473. * @return bool
  474. * Created by: Owen
  475. * Created on: 2020/4/7 18:19
  476. */
  477. public function updateUserAchieve($uid,$aid,$ret){
  478. $cacheKey = okeys::UserAchieve($uid);
  479. $ret['isLanding'] = 1;
  480. $bool = oo::commonOprRedis('Usercache')->hSet($cacheKey,$aid,json_encode($ret));
  481. oo::commonOprRedis('Usercache')->expire($cacheKey,oo::redisRandomExpire(3*2*60*60));
  482. /** 数据落地标识 */
  483. oo::commonOprRedis('Usercache')->zAdd(okeys::Landing("ACHIEVE", $uid),time(),$uid);
  484. return $bool;
  485. }
  486. /**
  487. * 更新成就数值
  488. * @param $uid
  489. * @param $aid
  490. * @param int $num
  491. * @param string $opt
  492. * @return bool
  493. * Created by: Owen
  494. * Created on: 2020/4/7 10:42
  495. */
  496. public function updateAchi($uid,$aid,$num = 1,$opt = '+'){
  497. $ret = self::getUserAchieve($uid,$aid);
  498. if($opt == '+'){
  499. $ret['process'] = $ret['process'] + $num;
  500. }else if($opt == '='){
  501. $ret['process'] = $num;
  502. }
  503. self::updateUserAchieve($uid,$aid,$ret);
  504. $ret = self::getAchieveConfig($aid);
  505. $stage = explode(',',$ret['stage']);
  506. if($ret['process'] <= $stage[count($stage)-1]){
  507. if(count($stage) > $ret['stage'] && $ret['process'] >= $stage[$ret['stage']]){
  508. $is_push = oo::commonOprRedis('Usercache')->hGet(okeys::redPointLock($uid,'Achi-'.$aid),$ret['stage']+1);
  509. if(!$is_push){
  510. oo::commonOprModel('Workerman')->push($uid,ocmd::$redPoint,['type'=>10]);
  511. oo::commonOprRedis('Usercache')->hSet(okeys::redPointLock($uid,'Achi-'.$aid),$ret['stage']+1,1);
  512. oo::commonOprRedis('usercache')->expire(okeys::redPointLock($uid,'Achi-'.$aid),oo::redisRandomExpire(7*86400));
  513. }
  514. }
  515. }
  516. return ($ret)?true:false;
  517. }
  518. /**
  519. * 领取成就奖品
  520. * @param $uid
  521. * @param $aid
  522. * @return array
  523. * Created by: Owen
  524. * Created on: 2019/6/13 18:33
  525. * Description:
  526. */
  527. public function getAchieveReward($uid,$aid){
  528. $achieve = self::getUserAchieve($uid,$aid);
  529. if(empty($achieve)){
  530. return ['code'=>-1,'msg'=>'未达标,无法领取奖品'];
  531. }
  532. $rewardStage = $achieve['stage'];
  533. $config = self::getAchieveConfig($aid);
  534. $configStage = explode(',',$config['stage']);
  535. if(count($configStage) == $rewardStage){
  536. return ['code'=>-1,'msg'=>'已领取最高等级奖励'];
  537. }
  538. $lang = oo::getDefinedLang($uid);
  539. if($configStage[$rewardStage]<=$achieve['process']){
  540. $achieve['stage'] = $rewardStage + 1;
  541. $ret = self::updateUserAchieve($uid,$aid,$achieve);
  542. if($ret){
  543. $reward = json_decode($config['reward'],true);
  544. $nextReward = $reward[$rewardStage+1];
  545. $rewardTemp = $reward[$rewardStage];
  546. $reward = [
  547. 'spins' => $rewardTemp['spin'],
  548. 'money' => $rewardTemp['coin'],
  549. ];
  550. oo::commonOprModel('member')->optProperty($uid,$reward,'+',102,'领取成就奖励:'.$aid.'-'.$rewardStage);
  551. $i = 0;
  552. $process = $achieve['process'];
  553. $stage = explode(',',$config['stage']);
  554. foreach ($stage as $k){
  555. if($process>$k){
  556. $i++;
  557. }
  558. }
  559. $data = [
  560. 'coin' =>$reward['money'],
  561. 'coins'=>$reward['money'],
  562. 'spins'=>$reward['spins'],
  563. ];
  564. if($lang == 'zh'){
  565. $designation = $config['designation'];
  566. $content = $config['content'];
  567. }else{
  568. $designation = $config['designation_'.$lang];
  569. $content = $config['content_'.$lang];
  570. }
  571. $data['achieve'] = [
  572. 'id' =>$aid,
  573. 'rewardTimes' =>$i,
  574. 'name' =>$designation,
  575. 'desc' =>$content,
  576. 'spinsNum' =>$nextReward['spin']??0,
  577. 'coinsNum' =>$nextReward['coin']??0,
  578. 'progress' =>$process,
  579. 'target' =>$stage[$rewardStage+1]??0,
  580. 'curRewardTimes'=>($rewardStage+1)
  581. ];
  582. oo::commonOprRedis('Usercache')->hDel(okeys::redPointLock($uid,'Achi-'.$aid),$rewardStage+1);
  583. return ['code'=>1,'msg'=>'领取奖品成功','data'=>$data];
  584. }
  585. }else{
  586. return ['code'=>-1,'msg'=>'未达标,无法领取奖品'];
  587. }
  588. }
  589. /**
  590. * 1.5.0 新版配置 --------------------------------------------------------------------------------------------------
  591. */
  592. /**
  593. * 成就列表
  594. * @param $uid
  595. * @return array
  596. * Created by: Owen
  597. * Created on: 2020/4/7 18:27
  598. */
  599. public function getAchieveList2($uid){
  600. $achieveConfig = self::getAchieveConfig();
  601. $achieveUser = self::getUserAchieve($uid);
  602. $achieve = [];
  603. foreach ($achieveConfig as $row){
  604. $process = ($achieveUser[$row['aid']]['process'])??0;
  605. $temp = [
  606. 'id' =>$row['aid'],
  607. 'progress' =>$process,
  608. 'curRewardTimes'=>($achieveUser[$row['aid']]['stage'])??0
  609. ];
  610. $achieve[] = $temp;
  611. }
  612. return $achieve;
  613. }
  614. }