game2006api/webapp/services/StakingVipService.php
2024-10-15 17:55:07 +08:00

79 lines
2.5 KiB
PHP

<?php
namespace services;
require_once('mt/StakingVip.php');
require_once('phpcommon/bignumber.php');
use mt;
use phpcommon;
class StakingVipService extends BaseService
{
public static function getDetails($accountAddr)
{
if (empty($accountAddr) || !is_string($accountAddr)) {
return;
}
$row = phpcommon\SqlHelper::ormSelectOne(
myself()->_getMarketMysql(),
't_vip_user',
array(
'account_address' => strtolower($accountAddr),
)
);
$details = array(
'lv' => 0,
'cur' => 0,
'target' => 0,
);
if ($row) {
$lv = $row['vip_lv'];
$cfg = mt\StakingVip::find($lv);
$details['lv'] = $lv;
if ($cfg) {
$details['target'] = $cfg['thisPoint'];
$balance = phpcommon\bnInit($row['escec_balance']);
$staking = phpcommon\bnInit($row['escec_stacking']);
$convert = phpcommon\bnInit($row['escec_convert']);
$diff = time() - $row["last_convert_time"];
if ($diff < 0) {
$diff = 0;
}
$eclapse = phpcommon\bnInit($diff);
$depositExec = phpcommon\bnDiv(phpcommon\bnMul($convert, $eclapse), phpcommon\bnInit(365 * 24 * 3600));
if (phpcommon\bnCmp($depositExec, $convert) < 0) {
$depositExec = phpcommon\bnSub($convert, $depositExec);
} else {
$depositExec = phpcommon\bnInit(0);
}
$curExec = phpcommon\bnAdd(phpcommon\bnAdd($staking, $balance), $depositExec);
$convercurExec = intval(phpcommon\bnDiv($curExec, phpcommon\bnInit(1000 * 1000 * 1000 * 1000 * 1000 * 1000)));
$nextlvcfg = mt\StakingVip::find($lv + 1);
$upgraderequire = $cfg['require'];
if ($nextlvcfg && $convercurExec >= $upgraderequire) {
$details['cur'] = intval($cfg['thisPoint'] * ($convercurExec - $upgraderequire) / ($nextlvcfg['require'] - $upgraderequire));
} else if (!$nextlvcfg) {
$details['cur'] = $details['target'];
}
}
} else {
$cfg = mt\StakingVip::find(0);
if ($cfg) {
$details['target'] = $cfg['thisPoint'];
}
}
return $details;
}
}