95 lines
3.5 KiB
PHP
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,'未满足结算条件');
|
|
}
|
|
|
|
}
|