176 lines
5.9 KiB
PHP
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);
|
|
}
|
|
}
|
|
}
|
|
}
|