_rspData(array( 'list' => mt\EventRanking::getEventRankingList(), 'ceg' => EventRanking::getSumV() )); } 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 \services\RankActivityService::KILLS_TYPE : { $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']; } break; case \services\RankActivityService::WINS_TYPE : { $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 \services\RankActivityService::BATTLES_TYPE : { $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']; } break; case \services\RankActivityService::GUILD_TYPE : { $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; if (!$userInfo['guild_id']){ $this->myRanked['guild'] = array(); } if($userInfo['guild_id'] && $userInfo['guild_id'] == $row['guild_id']){ $guildDb = Guild::find($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']; }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?$value[0]['value']:0; } $guildDb = Guild::find($row['guild_id']); 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'], )); } } break; } $rankingData = array( 'type' => $type, 'pages' => $pages, 'rows' => $rankingList, 'my_ranked' => $this->myRanked ); error_log(json_encode( array( 'account_id'=>$userInfo['account_id'], 'guild_id'=>$userInfo['guild_id'], 'type' => $type, 'pages' => $pages, 'rows' => $rankingList, 'my_ranked' => $this->myRanked ) )); return $rankingData; } 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 ); } public function settlementRankingAward(){ $currentRankingMeta = mt\EventRanking::getCurrentRanking(); $userInfo = $this->_getOrmUserInfo(); $myAward = array( 'ranked' => -1, 'rewardNum' => 0, 'extraRewardNum' => 0 ); if ($currentRankingMeta){ $lastRankingMeta = mt\EventRanking::find($currentRankingMeta['id']-1); if ($lastRankingMeta){ switch ($lastRankingMeta['themeType']){ case \services\RankActivityService::KILLS_TYPE : { $rows = myself()->_getSelfMysql()->execQuery( 'SELECT * FROM t_rank_activity ' . 'WHERE wave=:wave AND type=:type ' . 'ORDER BY value DESC ' . "LIMIT 1200", array( ':wave' => $lastRankingMeta['wave'], ':type' => $lastRankingMeta['themeType'] ) ); $ranked = 0; foreach ($rows as $row){ $ranked+=1; if ($row['account_id'] == myself()->_getAccountId()) { $myAward['ranked'] = $ranked; $myAward['rewardNum'] = $this->celAward($row['wave'],$row['type'],$ranked)['rewardNum']; $myAward['extraRewardNum'] = $this->celAward($row['wave'],$row['type'],$ranked)['extraRewardNum']; } } if ($myAward['ranked'] > 0){ //记录此活动的CEG奖励 $cegNum = $myAward['rewardNum']+$myAward['extraRewardNum']; EventRanking::setV($lastRankingMeta['wave'],$lastRankingMeta['themeType'],$cegNum); } error_log(json_encode(array( 'myAward' => $myAward, 'ranking' => 'KillRanking', 'number'=>$myAward['rewardNum']+$myAward['extraRewardNum'] ))); $this->_rspOk(); };break; case \services\RankActivityService::WINS_TYPE : { $rows = myself()->_getSelfMysql()->execQuery( 'SELECT * FROM t_rank_activity ' . 'WHERE wave=:wave AND type=:type ' . 'ORDER BY value DESC ' . "LIMIT 10", array( ':wave' => $lastRankingMeta['wave'], ':type' => $lastRankingMeta['themeType'] ) ); $ranked = 0; foreach ($rows as $row) { $ranked += 1; if ($row['account_id'] == myself()->_getAccountId()) { $myAward['ranked'] = $ranked; $myAward['rewardNum'] = $this->celAward($row['wave'],$row['type'],$ranked)['rewardNum']; $myAward['extraRewardNum'] = $this->celAward($row['wave'],$row['type'],$ranked)['extraRewardNum']; } } if ($myAward['ranked'] > 0){ //记录此活动的CEG奖励 $cegNum = $myAward['rewardNum']+$myAward['extraRewardNum']; EventRanking::setV($lastRankingMeta['wave'],$lastRankingMeta['themeType'],$cegNum); } error_log(json_encode(array( 'myAward' => $myAward, 'ranking' => 'WinRanking', 'number'=>$myAward['rewardNum']+$myAward['extraRewardNum'] ))); $this->_rspOk(); };break; case \services\RankActivityService::BATTLES_TYPE : { $rows = myself()->_getSelfMysql()->execQuery( 'SELECT * FROM t_rank_activity ' . 'WHERE wave=:wave AND type=:type ' . 'ORDER BY value DESC ' . "LIMIT 1800", array( ':wave' => $lastRankingMeta['wave'], ':type' => $lastRankingMeta['themeType'] ) ); $ranked = 0; foreach ($rows as $row){ $ranked+=1; if ($row['account_id'] == myself()->_getAccountId()) { $myAward['ranked'] = $ranked; $myAward['rewardNum'] = $this->celAward($row['wave'],$row['type'],$ranked)['rewardNum']; $myAward['extraRewardNum'] = $this->celAward($row['wave'],$row['type'],$ranked)['extraRewardNum']; } } if ($myAward['ranked'] > 0){ //记录此活动的CEG奖励 $cegNum = $myAward['rewardNum']+$myAward['extraRewardNum']; EventRanking::setV($lastRankingMeta['wave'],$lastRankingMeta['themeType'],$cegNum); } error_log(json_encode(array( 'myAward' => $myAward, 'ranking' => 'BattleRanking', 'number'=>$myAward['rewardNum']+$myAward['extraRewardNum'] ))); $this->_rspOk(); };break; case \services\RankActivityService::GUILD_TYPE : { $rows = myself()->_getSelfMysql()->execQuery( 'SELECT guild_id,wave,type,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' => $lastRankingMeta['wave'], ':type' => $lastRankingMeta['themeType'] ) ); $ranked = 0; $guildAward = array( 'ranked' => -1, 'rewardNum' => 0, 'extraRewardNum' => 0 ); foreach ($rows as $row) { $ranked += 1; if($userInfo['guild_id'] && $userInfo['guild_id'] == $row['guild_id']){ $myAward['ranked'] = $ranked; $guildAward['ranked'] = $ranked; $guildAward['rewardNum'] = $this->celAward($row['wave'],$row['type'],$ranked)['rewardNum']; $guildAward['extraRewardNum'] = $this->celAward($row['wave'],$row['type'],$ranked)['extraRewardNum']; } } if ($myAward['ranked'] > 0){ //记录此活动的CEG奖励 $myValue = myself()->_getSelfMysql()->execQuery( 'SELECT * FROM t_rank_activity ' . 'WHERE wave=:wave AND type=:type AND account_id=:account_id', array( ':wave' => $lastRankingMeta['wave'], ':type' => $lastRankingMeta['themeType'], ':account_id' => myself()->_getAccountId() ) ); $sumValue = 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' => $lastRankingMeta['wave'], ':type' => $lastRankingMeta['themeType'], ':guild_id'=>$userInfo['guild_id'] ) ); if ($myValue && $sumValue ){ $myAward['rewardNum'] = $myValue[0]['value']/$sumValue[0]['value']*$guildAward['rewardNum']; } $guildDb = Guild::find($userInfo['guild_id']); if ($guildDb && $guildDb['owner_id'] == myself()->_getAccountId() ){ $myAward['extraRewardNum'] = $guildAward['extraRewardNum']; } $cegNum = $myAward['rewardNum']+$myAward['extraRewardNum']; EventRanking::setV($lastRankingMeta['wave'],$lastRankingMeta['themeType'],$cegNum); } error_log(json_encode(array( 'myAward' => $myAward, 'ranking' => 'BattleRanking', 'number'=>$myAward['rewardNum']+$myAward['extraRewardNum'] ))); $this->_rspOk(); };break; default : { error_log('运营活动不存在'); } } } } } }