_getOrmUserInfo(); $currSeasonMeta = mt\RankSeason::getCurrentSeason(); if($currSeasonMeta){ $this->_setV(TN_RANK_STATUS, 1, 1); if ($userInfo['last_season_id'] > 0 && $currSeasonMeta['id'] != $userInfo['last_season_id'] ){ $this->_setV(TN_RANK_STATUS, 0, 2); } }else{ $this->_setV(TN_RANK_STATUS, 1, 0); } $rank_status = $this->_getV(TN_RANK_STATUS, 0 ); $is_rank = $this->_getV(TN_RANK_STATUS, 1 ); $this->_rspData(array( 'status' => $rank_status, // 0:常规状态 1:引导初始排位 2:赛季初,需结算上个赛季 'is_rank' => $is_rank //赛季是否空挡期 )); } public function rankingList() { $userInfo = $this->_getOrmUserInfo(); $type = getReqVal('type', 0); $userList = array(); { $rows = myself()->_getSelfMysql()->execQuery( 'SELECT * FROM t_user ' . "LIMIT 50", array( ) ); foreach ($rows as $row) { array_push($userList, User::info($row)); } } $rankingList = array(); $ranked = 1; foreach ($userList as $user) { array_push($rankingList, array( 'ranked' => $ranked++, 'account_id' => $user['account_id'], 'address' => phpcommon\extractOpenId($user['account_id']), 'name' => $user['name'], 'sex' => $user['sex'], 'head_id' => $user['hero_id'], 'head_frame' => $user['head_frame'], 'level' => $user['level'], 'exp' => $user['exp'], 'rank' => $user['rank'], 'score' => $user['score'], 'gold' => $user['gold'], 'diamond' => $user['diamond'], 'hero_id' => $user['hero_id'], 'first_fight' => $user['first_fight'], )); } $rankingData = array( 'type' => $type, 'ranking_list' => $rankingList, 'my_ranked' => array( 'ranked' => -1, 'account_id' => $this->_getAccountId(), 'address' => $this->_getOpenId(), 'name' => $userInfo['name'], 'sex' => $userInfo['sex'], 'head_id' => $userInfo['hero_id'], 'head_frame' => $userInfo['head_frame'], 'level' => $userInfo['level'], 'exp' => $userInfo['exp'], 'rank' => $userInfo['rank'], 'score' => $userInfo['score'], 'gold' => $userInfo['gold'], 'diamond' => $userInfo['diamond'], 'hero_id' => $userInfo['hero_id'], 'first_fight' => $userInfo['first_fight'], ) ); $this->_rspData(array( 'ranking_list' =>$rankingData )); } public function getOpenList() { $this->calcCECSeasonAward(2);die; $this->_rspData(array( 'list' => mt\RankActivity::getOpenList() )); } public function activityRankingList() { $rankingData = $this->internalGetActivityRankData(getReqVal('type', 0)); $this->_rspData( $rankingData ); } public function resetRankGainAward(){ $userInfo = $this->_getOrmUserInfo(); $lastSeasonRank = $userInfo['rank']; $lastSeasonScore = $userInfo['score']; $currSeasonMeta = mt\RankSeason::getCurrentSeason(); if ($currSeasonMeta && $userInfo['last_season_id'] > 0 && $currSeasonMeta['id'] > $userInfo['last_season_id']) { $rank = $userInfo['rank']; for ($i=$userInfo['last_season_id'];$i<$currSeasonMeta['id'];$i++){ $currRankMeta = mt\Rank::getRankById($rank); $dropRankMeta = mt\Rank::getRankById($currRankMeta ? $currRankMeta['next_season'] : 1); $rank= $dropRankMeta['id']; $award = Season::seasonReward($currRankMeta); } //掉段 if ($dropRankMeta) { myself()->_updateUserInfo(array( 'rank' => $dropRankMeta['id'], 'score' => $dropRankMeta['rank_score'], 'last_season_id' => $currSeasonMeta['id'], )); } $awardService = new services\AwardService(); $propertyChgService = new services\PropertyChgService(); $propertyChgService->addUserChg(); $propertyChgService->addBagChg(); if ($award){ $this->_addItems($award,$awardService,$propertyChgService); } $this->_setV(TN_RANK_STATUS, 0, 0); $this->_rspData([ 'data'=> array( 'last_rank'=>$lastSeasonRank, 'last_score'=>$lastSeasonScore, 'current_rank'=>$dropRankMeta['id'], 'current_score'=>$dropRankMeta['rank_score'], 'award' => $award ), 'property_chg' => $propertyChgService->toDto(), ]); return; } $this->_rspErr(1, "The new season hasn't started yet"); } private function internalGetActivityRankData($type) { $channel = 6516; if (SERVER_ENV != _ONLINE) { $channel = 6513; } $userInfo = $this->_getOrmUserInfo(); $myRanked = array( 'ranked' => -1, 'user' => User::toSimple($userInfo), 'value' => 0, 'modifytime' => 0, ); $rankingList = array(); $meta = mt\RankActivity::get($type); if ($meta) { $row = myself()->_getSelfMysql()->execQueryOne( 'SELECT COUNT(*) AS row_count FROM t_rank_activity ' . 'WHERE type=:type AND channel=:channel AND value>:value;', array( ':type' => $type, ':channel' => $channel, ':value' => $meta['cond'], ) ); if ($row['row_count'] > 0) { $count = ceil($row['row_count'] / 2); $rows = myself()->_getSelfMysql()->execQuery( 'SELECT * FROM t_rank_activity ' . 'WHERE type=:type AND channel=:channel AND value>=:value ' . 'ORDER BY value DESC, modifytime ASC ' . "LIMIT ${count}", array( ':type' => $type, ':channel' => $channel, ':value' => $meta['cond'] ) ); $ranked = 1; foreach ($rows as $row) { $user = User::find($row['account_id']); if ($user) { if ($user['account_id'] == $myRanked['user']['account_id']) { $myRanked['ranked'] = $ranked; $myRanked['value'] = $row['value']; $myRanked['modifytime'] = $row['modifytime']; } array_push($rankingList, array( 'ranked' => $ranked++, 'user' => User::toSimple($user), 'value' => $row['value'], 'modifytime' => $row['modifytime'], )); } } } } { $row = myself()->_getSelfMysql()->execQueryOne( 'SELECT * FROM t_rank_activity ' . 'WHERE type=:type AND channel=:channel AND account_id=:account_id;', array( ':type' => $type, ':channel' => $channel, ':account_id' => myself()->_getAccountId(), ) ); if ($row) { $myRanked['value'] = $row['value']; $myRanked['modifytime'] = $row['modifytime']; } } if (SERVER_ENV != _ONLINE) { for ($i = 0; $i < 100; ++$i) { $userDto = User::find('6513_2006_3WOWIsmpcihK1KTnNP1Ky5MBOh7rt6Rl'); $userDto = User::toSimple($userDto); $userDto['account_id'] = 'test' . $i; $userDto['name'] = 'test' . $i; array_push($rankingList, array( 'ranked' => count($rankingList) + 1, 'value' => count($rankingList) + 1, 'user' => $userDto, 'modifytime' => myself()->_getNowTime(), )); } } $timeZone = 8; $rankingData = array( /*'daySeconds' => phpcommon\getdayseconds(myself()->_getNowTime(), $timeZone), 'nextDaySeconds' => phpcommon\getNextDaySeconds(myself()->_getNowTime(), $timeZone), 'mondaySeconds' => phpcommon\getMondaySeconds(myself()->_getNowTime(), $timeZone), 'monthFirstDaySeconds' => phpcommon\getThisMonthFirstDaySeconds(myself()->_getNowTime(), $timeZone), 'nextMonthFirstDaySeconds' => phpcommon\getNextMonthFirstDaySeconds(myself()->_getNowTime(), $timeZone), 'yearFirstDaySeconds' => phpcommon\getThisYearFirstDaySeconds(myself()->_getNowTime(), $timeZone),*/ 'type' => $type, 'rows' => $rankingList, 'my_ranked' => $myRanked ); return $rankingData; } private function calcCECSeasonAward($seasonId){ $data = SeasonHistory::getDataBySeasonId($seasonId); $rewardParamMeta = \mt\Parameter::getByName('rank_ring_reward'); $rewardParamMetaValue = $rewardParamMeta ? $rewardParamMeta['param_value'] : ''; $rewardList = explode('|',$rewardParamMetaValue); if (count($data)>0){ $rankList = array(); $ringList = array(); $KingCount = 0; $users = User::orderBy($data); foreach ($users as $k=>$user){ $user['rank_sort'] = $k+1; if ($user['score'] >= $this->starshine){ $KingCount += 1; $user['echelonTopX'] = \services\FormulaService::echelonTopX($user['rank_sort']); // $r = $this->_getRedis($this->TopXunid.$user['echelonTopX']); // $TopX_List = $this->readRankingList($r,$this->TopXunid.$user['echelonTopX']); // array_push($TopX_List,$user); // $this->saveRankingList($r,$this->TopXunid.$user['echelonTopX'],$TopX_List); if ( ! isset( ${$this->TopXunid.$user['echelonTopX']} )){ ${$this->TopXunid.$user['echelonTopX']} =array(); } array_push(${$this->TopXunid.$user['echelonTopX']},$user); } switch ($user['rank_sort']){ case 1:$user['ring_item_id'] = $rewardList[0];array_push($ringList,$user);break; case 2:$user['ring_item_id'] = $rewardList[1];array_push($ringList,$user);break; case 3:$user['ring_item_id'] = $rewardList[2];array_push($ringList,$user);break; default : $user['ring_item_id'] = 0; } array_push($rankList,$user); } //当月排位赛最大分配金额 $maxSum = \services\FormulaService::calcCECMaxSum(); //排位赛预计分配额 $expected_CEC_Sum = 0; foreach ($rankList as $k=>$value){ // $r = $this->_getRedis($this->TopXunid.($value['echelonTopX']+1)); // $TopX_List = $this->readRankingList($r,$this->TopXunid.($value['echelonTopX']+1)); // $XX = $TopX_List ? $TopX_List[0]["rank_sort"]:10001; $TopX_List = ${$this->TopXunid.($value['echelonTopX']+1)}; $XX = $TopX_List ? $TopX_List[0]["rank_sort"]:10001; $rankList[$k]['XX'] = $XX; $rankList[$k]['standardTopX'] = \services\FormulaService::standardTopX($value['rank_sort'],$XX); $expected_CEC_Sum += \services\FormulaService::calcCECTopXSum($value['rank_sort'],$KingCount,$XX); } //排位赛金额% $rankAmountPre = min($maxSum/($expected_CEC_Sum+1),1); //MIN(当月排位赛最大分配额/(排位赛预计分配额+1),1) } print_r($expected_CEC_Sum); } private function readRankingList($r,$rankUnid) { $list = $r->get(RANKING_KEY.$rankUnid); if (empty($list)) { return array(); } $list = json_decode($list, true); return $list; } private function saveRankingList($r,$rankUnid ,$list) { $r->set(RANKING_KEY.$rankUnid , json_encode($list)); $r->pexpire(RANKING_KEY.$rankUnid , 6*60*60*1000); } }