298 lines
12 KiB
PHP
298 lines
12 KiB
PHP
<?php
|
|
require_once('models/User.php');
|
|
require_once('models/Guild.php');
|
|
|
|
require_once('mt/EventRanking.php');
|
|
|
|
require_once('services/RankActivityService.php');
|
|
|
|
use models\User;
|
|
use models\Guild;
|
|
class EventRankingController extends BaseAuthedController
|
|
{
|
|
public function eventRankingList(){
|
|
$this->_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 = null;
|
|
if (!$userInfo['guild_id']){
|
|
$this->myRanked['guild'] = array();
|
|
error_log('*********************************************************');
|
|
error_log(json_encode($this->myRanked));
|
|
}
|
|
$guildDb = null;
|
|
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'];
|
|
$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
|
|
);
|
|
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;
|
|
// 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
|
|
);
|
|
}
|
|
|
|
|
|
}
|