_rspData(array( 'list' => mt\EventRanking::getEventRankingList() )); } public function activityRankingList() { $wave = getReqVal('wave', 0); $type = getReqVal('type', 0); if (!$wave || !$type){ $this->_rspErr(1, "error param"); return; } $rankingData = $this->internalGetActivityRankData($wave,$type); $this->_rspData( array( 'ranking_list'=>$rankingData ) ); } private $myRanked = array(); private function internalGetActivityRankData($wave,$type){ $page = getReqVal('page', 1); $size = getReqVal('size', 100); $userInfo = $this->_getOrmUserInfo(); $this->myRanked = array( 'ranked' => -1, 'user' => User::toSimple($userInfo), 'value' => 0, 'rewardNum'=>0, 'extraRewardNum'=>0, 'modifytime' => 0, ); $rankingList = array(); $pages = 0; switch ($type){ case 1:{ $rows = myself()->_getSelfMysql()->execQuery( // 'SELECT t1.*,@rownum := @rownum + 1 AS ranked FROM ' . // '(SELECT * FROM t_rank_activity WHERE wave=:wave AND type=:type ORDER BY value DESC LIMIT 1200) t1,'. // '( SELECT @rownum := 0 ) t2', 'SELECT * FROM t_rank_activity ' . 'WHERE wave=:wave AND type=:type ' . 'ORDER BY value DESC ' . "LIMIT 1200", array( ':wave' => $wave, ':type' => $type ) ); $data = $this->paginate($rows,$page,$size); $pages = $data['pages']; $rankingList = $data['lists']; // $pages = ceil(count($rows)/$size)>1?ceil(count($rows)/$size):0; // $offset=($page-1)*$size; // $ranked = 0; // foreach ($rows as $row){ // $ranked+=1; // if ($row['account_id'] == $myRanked['user']['account_id']) { // $myRanked['ranked'] = $ranked; // $myRanked['value'] = $row['value']; // $myRanked['modifytime'] = $row['modifytime']; // } // if ($offset<$ranked && $ranked<=$offset+$size){ // array_push($rankingList, array( // 'ranked' => $ranked, // 'user' => User::toSimple(User::find($row['account_id'])), // 'value' => $row['value'], // 'modifytime' => $row['modifytime'], // )); // } // } } break; case 2:{ $rows = myself()->_getSelfMysql()->execQuery( 'SELECT * FROM t_rank_activity ' . 'WHERE wave=:wave AND type=:type ' . 'ORDER BY value DESC ' . "LIMIT 10", array( ':wave' => $wave, ':type' => $type ) ); $ranked = 0; foreach ($rows as $row) { $ranked += 1; if ($row['account_id'] == myself()->_getAccountId()) { $this->myRanked['ranked'] = $ranked; $this->myRanked['value'] = $row['value']; $this->myRanked['rewardNum'] = $this->celAward($wave,$type,$ranked)['rewardNum']; $this->myRanked['extraRewardNum'] = $this->celAward($wave,$type,$ranked)['extraRewardNum']; $this->myRanked['modifytime'] = $row['modifytime']; } array_push($rankingList, array( 'ranked' => $ranked, 'user' => User::toSimple(User::find($row['account_id'])), 'value' => $row['value'], 'rewardNum' => $this->celAward($row['wave'],$row['type'],$ranked)['rewardNum'], 'extraRewardNum' => $this->celAward($row['wave'],$row['type'],$ranked)['extraRewardNum'], 'modifytime' => $row['modifytime'], )); } } break; case 3:{ $rows = myself()->_getSelfMysql()->execQuery( 'SELECT * FROM t_rank_activity ' . 'WHERE wave=:wave AND type=:type ' . 'ORDER BY value DESC ' . "LIMIT 1800", array( ':wave' => $wave, ':type' => $type ) ); $data = $this->paginate($rows,$page,$size); $pages = $data['pages']; $rankingList = $data['lists']; // $pages = ceil(count($rows)/$size)>1?ceil(count($rows)/$size):0; // $offset=($page-1)*$size; // $ranked = 0; // foreach ($rows as $row){ // $ranked+=1; // if ($row['account_id'] == $myRanked['user']['account_id']) { // $myRanked['ranked'] = $ranked; // $myRanked['value'] = $row['value']; // $myRanked['modifytime'] = $row['modifytime']; // } // if ($offset<$ranked && $ranked<=$offset+$size){ // array_push($rankingList, array( // 'ranked' => $ranked, // 'user' => User::toSimple(User::find($row['account_id'])), // 'value' => $row['value'], // 'modifytime' => $row['modifytime'], // )); // } // } } break; case 4:{ $rows = myself()->_getSelfMysql()->execQuery( 'SELECT guild_id,SUM(value) AS value FROM t_rank_activity ' . 'WHERE wave=:wave AND type=:type ' . 'GROUP BY guild_id '. 'ORDER BY value DESC ' . "LIMIT 10", array( ':wave' => $wave, ':type' => $type ) ); $ranked = 0; foreach ($rows as $row) { $ranked += 1; $guildDb = Guild::find($row['guild_id']); // $guildDb = null; if (!$userInfo['guild_id']){ $this->myRanked = array(); }else if($userInfo['guild_id'] && $userInfo['guild_id'] == $row['guild_id']){ $this->myRanked['ranked'] = $ranked; $this->myRanked['user'] = array(); $this->myRanked['guild'] = Guild::toSimple($guildDb); $this->myRanked['value'] = $row['value']; $this->myRanked['rewardNum'] = $this->celAward($wave,$type,$ranked)['rewardNum']; $this->myRanked['extraRewardNum'] = $this->celAward($wave,$type,$ranked)['extraRewardNum']; $this->myRanked['modifytime'] = $row['modifytime']; }else{ $guildDb = Guild::find($userInfo['guild_id']); $value = myself()->_getSelfMysql()->execQuery( 'SELECT guild_id,SUM(value) AS value FROM t_rank_activity ' . 'WHERE wave=:wave AND type=:type AND guild_id=:guild_id ' . 'GROUP BY guild_id limit 1', array( ':wave' => $wave, ':type' => $type, ':guild_id'=>$userInfo['guild_id'] ) ); $this->myRanked['user'] = array(); $this->myRanked['guild'] =Guild::toSimple($guildDb); $this->myRanked['value'] =$value[0]['value']; } array_push($rankingList, array( 'ranked' => $ranked, 'user' => array(), 'guild'=>Guild::toSimple($guildDb), 'value' => $row['value'], 'rewardNum' => $this->celAward($wave,$type,$ranked)['rewardNum'], 'extraRewardNum' => $this->celAward($wave,$type,$ranked)['extraRewardNum'], 'modifytime' => $row['modifytime'], )); } } break; } $rankingData = array( 'type' => $type, 'pages' => $pages, 'rows' => $rankingList, 'my_ranked' => $this->myRanked ); return $rankingData; // print_r($rankingData);die; } private function paginate($rows,$page,$size){ $rankingList = array(); $pages = ceil(count($rows)/$size)>1?ceil(count($rows)/$size):0; $offset=($page-1)*$size; $ranked = 0; foreach ($rows as $row){ $ranked+=1; if ($row['account_id'] == myself()->_getAccountId()) { $this->myRanked['ranked'] = $ranked; $this->myRanked['value'] = $row['value']; $this->myRanked['rewardNum'] = $this->celAward($row['wave'],$row['type'],$ranked)['rewardNum']; $this->myRanked['extraRewardNum'] = $this->celAward($row['wave'],$row['type'],$ranked)['extraRewardNum']; $this->myRanked['modifytime'] = $row['modifytime']; } if ($offset<$ranked && $ranked<=$offset+$size){ array_push($rankingList, array( 'ranked' => $ranked, 'user' => User::toSimple(User::find($row['account_id'])), 'value' => $row['value'], 'rewardNum' => $this->celAward($row['wave'],$row['type'],$ranked)['rewardNum'], 'extraRewardNum' => $this->celAward($row['wave'],$row['type'],$ranked)['extraRewardNum'], 'modifytime' => $row['modifytime'], )); } } return array( 'pages' => $pages, 'lists' => $rankingList ); } private function celAward($wave,$type,$ranked){ $rankingMeta = \mt\EventRanking::findByWaveOrType($wave,$type); $rewardNum = 0; $extraRewardNum = 0; if ($rankingMeta){ $rewardArr = explode('|',$rankingMeta['reward']); $extraRewardArr = explode('|',$rankingMeta['extraReward']); if($rewardArr){ foreach ($rewardArr as $value){ $temp = explode(',',$value); if ($ranked<=$temp[0]){ $rewardNum+=$temp[1]; break; } } } if($extraRewardArr){ foreach ($extraRewardArr as $val){ $temp = explode(',',$val); if ($ranked == $temp[0]){ $extraRewardNum+=$temp[1]; } } } } return array( 'rewardNum' => $rewardNum, 'extraRewardNum' => $extraRewardNum ); } }