game2006api/webapp/services/callback/BuyPassCbService.php
2023-06-19 17:17:34 +08:00

118 lines
3.1 KiB
PHP

<?php
namespace services;
require_once('mt/BattlePass.php');
use mt\BattlePass;
use phpcommon\SqlHelper;
class BuyPassCbService
{
public function process($order){
switch ($order['item_id']){
//购买通行证回调
case V_ITEM_PASS : {
$this->_activateUser($order['address']);
}
break;
//购买等级回调
case V_ITEM_EXP : {
$this->_updateUserLevel($order['address'],$order['item_num']);
}
default : {
}
}
}
private function _activateUser($address){
SqlHelper::update
(myself()->_getMysql($address),
't_user',
array(
'address' => $address
),
array(
'activated' => 1,
'activatetime' => myself()->_getNowTime(),
)
);
}
private function _updateUserLevel($address,$exp){
$userDb = SqlHelper::ormSelectOne(
myself()->_getMysql($address),
't_user',
array(
'address' => $address
)
);
$expNew = $userDb['exp'] + $exp;
$levelNew = $userDb['level'];
BattlePass::getExpByLv($levelNew,$expNew);
SqlHelper::update
(myself()->_getMysql($address),
't_user',
array(
'address' => $address
),
array(
'exp' => $expNew,
'level' => $levelNew,
)
);
$userDbNew = SqlHelper::ormSelectOne(
myself()->_getMysql($address),
't_user',
array(
'address' => $address
)
);
$this->_updatePassData($userDbNew);
}
private function _updatePassData($user){
$currSeasonMeta = BattlePass::getCurrentSeason();
$passDb = SqlHelper::ormSelectOne(
myself()->_getMysql($user['address']),
't_user_pass',
array(
'account_id' => $user['account_id'],
'season_id' => $currSeasonMeta['id'],
)
);
$rewards = emptyReplace(json_decode($passDb['data'], true), array());
foreach ($rewards['basic'] as &$reward){
if ($user['level'] >= $reward['level'] && $reward['state']==-1){
$reward['state'] = 0;
}
}
if ($user['activated']){
foreach ($rewards['platinum'] as &$reward){
if ($user['level'] >= $reward['level'] && $reward['state']==-1){
$reward['state'] = 0;
}
}
}
SqlHelper::update(
myself()->_getMysql($user['address']),
't_user_pass',
array(
'account_id' => $user['account_id'],
'season_id' => $currSeasonMeta['id'],
),
array(
'data' => json_encode($rewards),
'modifytime' => myself()->_getNowTime()
)
);
}
}