game2006api/webapp/controller/FirstTopupController.class.php
songliang 46a2173c2c ...
2023-07-17 15:25:23 +08:00

228 lines
5.3 KiB
PHP

<?php
require_once 'mt/FirstTopup.php';
require_once('services/PropertyChgService.php');
use mt\FirstTopup;
use phpcommon\SqlHelper;
use models\Bag;
use models\Hero;
use models\HeroSkin;
use models\Gun;
use models\GunSkin;
use models\Chip;
class FirstTopupController extends BaseAuthedController
{
public function info()
{
$complete = false;
// $address = myself()->_getAddress();
// if (!$address) {
// $this->_rspErr(1, 'you have not a web3 address');
// return;
// }
$conn = myself()->_getMysql('');
$status = $this->getStatusFromDB($conn);
// 检查所有 奖励都 领取完成
$complete = ($status[0] == 2 && $status[1] == 2 && $status[2] == 2) ? 1 : 0;
if ($complete == 1) {
$this->_setV(TN_FIRST_TUPOP_STATUS, 0, 1);
}
$this->_rspData(
array(
'complete' => $complete,
'firstTopupList' => mt\FirstTopup::getGroups(),
'status' => $status,
)
);
}
private function begin()
{
$conn = myself()->_getMysql('');
$address = myself()->_getAddress();
if (!$address) {
$this->_rspErr(1, 'you have not a web3 address');
return;
}
$exist = SqlHelper::selectOne(
$conn,
't_first_topup',
array('address'),
array('address' => myself()->_getAddress())
);
if ($exist) {
$this->_rspErr(1, '首充奖励活动已经开启');
return;
}
// 开始首充奖励活动进程
$chk = SqlHelper::insert(
$conn,
't_first_topup',
array(
'address' => myself()->_getAddress(),
'createtime' => myself()->_getNowTime(),
'status1' => 0,
'status2' => 0,
'status3' => 0,
)
);
if ($chk) {
$this->_rspOk();
} else {
$this->_rspErr(1, '首充奖励活动开启失败');
}
}
public function get()
{
$group = getReqVal('group', 1);
$conn = myself()->_getMysql('');
$address = myself()->_getAddress();
if (!$address) {
$this->_rspErr(1, 'you have not a web3 address');
return;
}
$status = $this->getStatusFromDB($conn);
$test = $status[$group - 1];
if ($test == 1) {
$status[$group - 1] = 2;
$chk = SqlHelper::update(
$conn,
't_first_topup',
array(
'address' => myself()->_getAddress(),
),
array(
'status' . $group => 2,
)
);
// 发放奖励
$reward = mt\FirstTopup::getByGroup($group);
$propertyChgService = new services\PropertyChgService();
for ($i = 0; $i < count($reward); $i++) {
$item = $reward[$i];
$itemMeta = mt\Item::get($item['goods_id']);
for ($j = 0; $j < $item['goods_num']; $j++) {
$this->internalAddItem($propertyChgService, $itemMeta, 1);
}
}
$complete = ($status[0] == 2 && $status[1] == 2 && $status[2] == 2) ? 1 : 0;
if ($complete == 1) {
$this->_setV(TN_FIRST_TUPOP_STATUS, 0, 1);
}
$this->_rspData(
array(
'group' => $group,
'status' => $status,
'reward' => $reward,
'property_chg' => $propertyChgService->toDto(),
)
);
} else if ($test >= 2) {
$this->_rspErr(2, "already received the reward, group: $group");
} else if ($test < 1) {
$this->_rspErr(1, "not yet to receive the reward, group: $group");
}
}
private function getStatus($group, $time)
{
$beginDayTime = myself()->_getDaySeconds($time);
$now = myself()->_getNowTime();
$diff = $now - ($beginDayTime + $group * 24 * 3600);
if ($diff >= 0) {
return 1;
} else {
return 0;
}
}
private function getStatusFromDB($conn)
{
// 从数据库中获取 status
$row = SqlHelper::selectOne(
$conn,
't_first_topup',
array('createtime', 'status1', 'status2', 'status3'),
array('address' => myself()->_getAddress())
);
$status = [0, 0, 0];
if ($row) {
// 0 未领取 1 可领取 2 已领取
$status = [(int)$row['status1'], (int)$row['status2'], (int)$row['status3']];
$time = $row['createtime'];
for ($i = 0; $i < 3; $i++) {
if ($status[$i] < 2) {
// 检测是否到了可以领取的时间
$status[$i] = $this->getStatus($i, $time);
}
}
}
return $status;
}
private function internalAddItem($propertyChgService, $itemMeta, $count)
{
switch ($itemMeta['type']) {
case mt\Item::HERO_TYPE: {
Hero::addHero($itemMeta);
$propertyChgService->addHeroChg();
$propertyChgService->addUserChg();
}
break;
case mt\Item::HERO_SKIN_TYPE: {
HeroSkin::addSkin($itemMeta);
$propertyChgService->addHeroSkinChg();
}
break;
case mt\Item::GUN_TYPE: {
Gun::addGun($itemMeta);
$propertyChgService->addGunChg();
}
break;
case mt\Item::GUN_SKIN_TYPE: {
GunSkin::addSkin($itemMeta);
$propertyChgService->addGunSkinChg();
}
break;
case mt\Item::CHIP_TYPE: {
Chip::addChip($itemMeta);
$propertyChgService->addChip();
}
break;
default: {
Bag::addItem($itemMeta['id'], $count);
$propertyChgService->addBagChg();
}
break;
}
}
}