game2006api/webapp/controller/OutAppCircuitController.class.php
hujiabin a221a65776 1
2024-09-23 14:56:46 +08:00

95 lines
3.5 KiB
PHP

<?php
use phpcommon\SqlHelper;
require_once('services/ServerSwitchService.php');
require_once('mt/Parameter.php');
require_once('mt/CircuitTime.php');
require_once('mt/CircuitReward.php');
require_once('models/CircuitReward.php');
require_once('models/Circuit.php');
require_once('models/User.php');
use services\ServerSwitchService;
use models\CircuitReward;
use models\Circuit;
use models\User;
class OutAppCircuitController extends BaseController {
public function getCircuitRewardHistory(){
$address = getReqVal('address', '');
if (empty($address)){
myself()->_rspErr(1, 'param error');
return;
}
$user = User::findByAddress($address);
if (!$user){
myself()->_rspErr(1, 'user not found');
return;
}
$data = array();
$currentCircuitMeta = mt\CircuitTime::getCurrentCircuit();
if ($currentCircuitMeta){
$metas = mt\CircuitTime::getListBySeason($currentCircuitMeta['circuit_season']);
foreach ($metas as $meta){
$info = array(
'start_time' => strtotime($meta['start_time']),
'end_time' => strtotime($meta['end_time']),
'reward' => -1,
);
$rewardDb = CircuitReward::find($address,$currentCircuitMeta['circuit_season'],$meta['circuit_phase']);
if ($rewardDb){
$info['reward'] = $rewardDb['reward_num'];
}
array_push($data,$info);
}
}
$this->_rspData(array('data' => $data));
}
public function circuitSettlement(){
$currentStageMeta = \mt\CircuitTime::getCurrentStage();
$prevStageMeta = \mt\CircuitTime::getPrevStage();
if (!$currentStageMeta && $prevStageMeta && !CircuitReward::_verifySettlement($prevStageMeta['circuit_season'],$prevStageMeta['circuit_phase'])){
$rows = Circuit::getRankingList($prevStageMeta['circuit_season']);
if (count($rows) > 0){
$totalWeight = 0;
$rate = \mt\Parameter::getVal('circuit_reward_rate','');
$count = floor(count($rows) * $rate) ;
foreach ($rows as $k=>$value){
$ranking = $k+1;
$rewardWeight = \mt\CircuitReward::getRewardWeight($ranking);
if ($ranking <= $count){
$totalWeight += $rewardWeight;
}
}
$cecPool = $prevStageMeta['cec_pool'];
foreach ($rows as $k=>$value){
$cec = 0;
$ranking = $k+1;
$rewardWeight = \mt\CircuitReward::getRewardWeight($ranking);
if ($ranking <= $count){
$cec = max(1, floor(($rewardWeight / $totalWeight) * $cecPool));
}
$user = User::find($value['account_id']);
CircuitReward::add(
$user['account_id'],
$user['address'],
$prevStageMeta['circuit_season'],
$prevStageMeta['circuit_phase'],
$ranking,
$cec
);
}
}
$this->_rspOk();
return;
}
$this->_rspErr(1,'未满足结算条件');
}
}