game2004api/webapp/classes/RechargeActivity.php
2025-04-07 21:06:49 +08:00

176 lines
5.9 KiB
PHP

<?php
namespace classes;
use phpcommon;
use metatable;
require_once 'metatable/rechargeActivity.php';
require_once 'metatable/parameter.php';
class RechargeActivity
{
protected function getMysql($account_id)
{
$mysql_conf = getMysqlConfig(crc32($account_id));
$conn = new phpcommon\Mysql(array(
'host' => $mysql_conf['host'],
'port' => $mysql_conf['port'],
'user' => $mysql_conf['user'],
'passwd' => $mysql_conf['passwd'],
'dbname' => DBNAME_PREFIX . $mysql_conf['instance_id']
));
return $conn;
}
public function triggerConsume($account_id, $num)
{
$conn = $this->getMysql($account_id);
if (!$conn) {
return;
}
$row = $conn->execQueryOne(
'SELECT activity FROM recharge WHERE accountid=:accountid;',
array(
':accountid' => $account_id,
)
);
$activity = array();
if ($row && !is_null($row['activity']) && !empty($row['activity'])) {
$activity = json_decode($row['activity'], true);
}
if ($this->updateActivityCur($activity, $num, false)) {
return;
}
$nowTime = time();
if ($row) {
$conn->execScript(
'UPDATE recharge SET activity=:activity, modify_time=:modify_time' .
' WHERE accountid=:accountid;',
array(
':accountid' => $account_id,
':activity' => json_encode($activity),
':modify_time' => $nowTime,
)
);
} else {
$conn->execScript(
'INSERT recharge(accountid,activity,create_time,modify_time) VALUES(:accountid,:activity, :create_time, :modify_time); ',
array(
':accountid' => $account_id,
':activity' => json_encode($activity),
':create_time' => $nowTime,
':modify_time' => $nowTime,
)
);
}
}
public function updateActivityCur(&$activity, $num, $isrecharge)
{
$activityconf = metatable\getRechargeActivityConf();
if (!$activityconf) {
return;
}
$nowTime = time();
$todaysecs = phpcommon\getdayseconds($nowTime);
$daysumtarget = intval(metatable\getParameterById(RECHARGE_TARGET)['param_value']) * 10;
foreach ($activityconf as $itemconf) {
if ($nowTime < strtotime($itemconf['time1']) || $nowTime > strtotime($itemconf['time2'])) {
continue;
}
if ($isrecharge == ($itemconf['type'] == 2)) {
continue;
}
$found = false;
foreach ($activity as $key => $item) {
if ($itemconf['shop_id'] != $item['id']) {
continue;
}
$found = true;
if ($itemconf['type'] == 3) {
if ($item['time'] < $todaysecs) {
$activity[$key]['cur'] = $num;
$activity[$key]['award'] = 0;
} else {
if ($item['cur'] >= $item['target']) {
break;
}
$activity[$key]['cur'] += $num;
}
$activity[$key]['time'] = $nowTime;
}
if ($itemconf['type'] == 4) {
if ($item['time'] > 0 || $item['cur'] >= $item['target'] || $item['update_cur_time'] >= $todaysecs) {
break;
}
if ($item['recharge_time'] < $todaysecs) {
$activity[$key]['recharge_sum'] = $num;
} else {
$activity[$key]['recharge_sum'] += $num;
}
$activity[$key]['recharge_time'] = $nowTime;
if ($daysumtarget <= $activity[$key]['recharge_sum']) {
$activity[$key]['cur']++;
$activity[$key]['update_cur_time'] = $nowTime;
}
} else {
if ($item['cur'] >= $item['target']) {
break;
}
$activity[$key]['cur'] += $num;
}
if ($activity[$key]['cur'] > $activity[$key]['target']) {
$activity[$key]['cur'] = $activity[$key]['target'];
}
break;
}
if (!$found) {
$item = array();
if ($itemconf['type'] == 4) {
$item = array(
'id' => $itemconf['shop_id'],
'cur' => $num < $daysumtarget ? 0 : 1,
'target' => $itemconf['target'],
'time' => 0,
"recharge_sum" => $num, //当天充值总额
"recharge_time" => $nowTime, //最近充值时间戳
"update_cur_time" => $num < $daysumtarget ? 0 : $nowTime, //最近更新cur时间戳
);
} else {
$item = array(
'id' => $itemconf['shop_id'],
'cur' => $num,
'target' => $itemconf['target'],
'time' => 0,
);
if ($num > $itemconf['target']) {
$item['cur'] = $itemconf['target'];
}
if ($itemconf['type'] == 3) {
$item['time'] = $nowTime;
$item['award'] = 0;
}
}
array_push($activity, $item);
}
}
}
}