_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 ) ); $this->myRanked['value'] = $this->getMyValue($wave,$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 ) ); $this->myRanked['value'] = $this->getMyValue($wave,$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 ) ); $this->myRanked['value'] = $this->getMyValue($wave,$type); $data = $this->paginate($rows,$page,$size); $pages = $data['pages']; $rankingList = $data['lists']; } break; case \services\RankActivityService::GUILD_TYPE : { $this->myRanked['test_ceg'] = 0; $rankDb = SqlHelper::ormSelectOne (myself()->_getSelfMysql(), 't_rank_activity', array( 'account_id' => myself()->_getAccountId(), 'wave' => $wave, 'type' => $type, ) ); if ($rankDb){ $this->myRanked['test_ceg'] = $rankDb['value']; } $rows = myself()->_getSelfMysql()->execQuery( 'SELECT guild_id,SUM(value) AS value FROM t_rank_activity ' . 'WHERE wave=:wave AND type=:type AND guild_id<>""' . '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 ); 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 getMyValue($wave,$type){ $value = myself()->_getSelfMysql()->execQuery( 'SELECT * FROM t_rank_activity ' . 'WHERE wave=:wave AND type=:type AND account_id=:account_id ' . "LIMIT 1", array( ':wave' => $wave, ':type' => $type, ':account_id' => myself()->_getAccountId() ) ); return $value ? $value[0]['value'] : 0; } 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(){ return $id = getReqVal('id', 0); // $currentRankingMeta = mt\EventRanking::getCurrentRanking(); $awardList = array(); // if ($currentRankingMeta){ $lastRankingMeta = mt\EventRanking::find($id); 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; array_push($awardList,array( 'ranked'=>$ranked, 'account_id'=>$row['account_id'], 'rewardNum'=>$this->celAward($row['wave'],$row['type'],$ranked)['rewardNum'], 'extraRewardNum'=>$this->celAward($row['wave'],$row['type'],$ranked)['extraRewardNum'], )); } if ($awardList){ //记录此活动的CEG奖励 foreach ($awardList as $value){ $cegNum = $value['rewardNum']+$value['extraRewardNum']; EventRanking::setV($value['account_id'],$lastRankingMeta['wave'],$lastRankingMeta['themeType'],$cegNum); } } error_log('********** KILL RANKING SETTLEMENT SUCCESS ***********'); $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; array_push($awardList,array( 'ranked'=>$ranked, 'account_id'=>$row['account_id'], 'rewardNum'=>$this->celAward($row['wave'],$row['type'],$ranked)['rewardNum'], 'extraRewardNum'=>$this->celAward($row['wave'],$row['type'],$ranked)['extraRewardNum'], )); } if ($awardList){ //记录此活动的CEG奖励 foreach ($awardList as $value){ $cegNum = $value['rewardNum']+$value['extraRewardNum']; EventRanking::setV($value['account_id'],$lastRankingMeta['wave'],$lastRankingMeta['themeType'],$cegNum); } } error_log('********** WIN RANKING SETTLEMENT SUCCESS ***********'); $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; array_push($awardList,array( 'ranked'=>$ranked, 'account_id'=>$row['account_id'], 'rewardNum'=>$this->celAward($row['wave'],$row['type'],$ranked)['rewardNum'], 'extraRewardNum'=>$this->celAward($row['wave'],$row['type'],$ranked)['extraRewardNum'], )); } if ($awardList){ //记录此活动的CEG奖励 foreach ($awardList as $value){ $cegNum = $value['rewardNum']+$value['extraRewardNum']; EventRanking::setV($value['account_id'],$lastRankingMeta['wave'],$lastRankingMeta['themeType'],$cegNum); } } error_log('********** BATTLE RANKING SETTLEMENT SUCCESS ***********'); $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; foreach ($rows as $row) { $ranked += 1; array_push($awardList,array( 'ranked'=>$ranked, 'guild_id'=>$row['guild_id'], 'rewardNum'=>$this->celAward($row['wave'],$row['type'],$ranked)['rewardNum'], 'extraRewardNum'=>$this->celAward($row['wave'],$row['type'],$ranked)['extraRewardNum'], )); } if ($awardList) { //记录此活动的CEG奖励 foreach ($awardList as $value) { $usersDb = User::getListByGuildId($value['guild_id']); $guildDb = Guild::find($value['guild_id']); if (!$guildDb) { error_log('The Guild Does Not Exist : ' . $value['guild_id']); continue; } if ($usersDb) { foreach ($usersDb as $user) { $thisValue = 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' => $user['account_id'] ) ); $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' => $value['guild_id'] ) ); if (!$thisValue || !$sumValue) { error_log('该用户无贡献 : ' . $user['account_id'] . ' | 工会总收益有问题 : ' . $value['guild_id'] ); continue; } $rewardNum = $thisValue[0]['value'] / $sumValue[0]['value'] * $value['rewardNum']; $extraRewardNum = $guildDb['owner_id'] == $user['account_id'] ? $value['extraRewardNum'] : 0; $cegNum = $rewardNum + $extraRewardNum; EventRanking::setV($user['account_id'], $lastRankingMeta['wave'], $lastRankingMeta['themeType'], $cegNum); error_log(json_encode( array( 'account_id' => $user['account_id'], 'guild_id' => $value['guild_id'], 'value' => $thisValue[0]['value'], 'sum_value' => $sumValue[0]['value'], 'rewardNum' => $rewardNum, 'extraRewardNum' => $extraRewardNum, 'CEG' => $cegNum ) )); } } } } error_log('********** GUILD RANKING SETTLEMENT SUCCESS ***********'); $this->_rspOk(); };break; default : { error_log('运营活动不存在'); } } } // } } public function updateWinsData(){ return $rows = myself()->_getSelfMysql()->execQuery( 'SELECT * FROM t_rank_activity ' . 'WHERE wave=:wave AND type=:type ', array( ':wave' => 1, ':type' => 2 ) ); foreach ($rows as &$row){ $battle_record = myself()->_getSelfMysql()->execQuery( 'SELECT * FROM t_battle_record ' . 'WHERE account_id=:account_id AND createtime>:createtime1 AND createtime<:createtime2 ', array( ':account_id' => $row['account_id'], ':createtime1' => 1669896000, ':createtime2' => 1670500800, ) ); foreach ($battle_record as $value){ $request = emptyReplace(json_decode($value['request'], true), array()); if ($request['ranked'] == 1 && $request['match_mode'] == 0){ $row['new_value']+=1; } } } foreach ($rows as $row){ SqlHelper::update (myself()->_getSelfMysql(), 't_rank_activity', array( 'account_id' => $row['account_id'], 'wave' => 1, 'type' => 2, ), array( 'value'=>$row['new_value']?$row['new_value']:0 ) ); } $this->_rspOk(); } public function compensationWins(){ return $rows = myself()->_getSelfMysql()->execQuery( 'SELECT * FROM t_rank_activity ' . 'WHERE wave=:wave AND type=:type ' . 'ORDER BY value DESC ', array( ':wave' => 1, ':type' => 2 ) ); $compensationList= array(); $ranked = 0; foreach ($rows as $row) { $ranked += 1; if ($ranked>10 && $row['value'] >0){ array_push($compensationList,array( 'ranked'=>$ranked, 'account_id'=>$row['account_id'], 'rewardNum'=>5, 'value'=>$row['value'] )); } } if ($compensationList){ //记录此活动的CEG奖励 foreach ($compensationList as $value){ $cegNum = $value['rewardNum']; EventRanking::setV($value['account_id'],1,9999,$cegNum); } } error_log('********** WIN RANKING COMPENSATION SUCCESS ***********'); $this->_rspOk(); } }