143 lines
4.3 KiB
PHP
143 lines
4.3 KiB
PHP
<?php
|
|
|
|
namespace classes;
|
|
|
|
use phpcommon;
|
|
use metatable;
|
|
|
|
require_once 'metatable/rechargeActivity.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 && $row['activity'] != null && $row['activity'] != '') {
|
|
$activity = json_decode($row['activity']);
|
|
}
|
|
|
|
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) ' .
|
|
' WHERE accountid=:accountid;',
|
|
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();
|
|
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'] < phpcommon\getdayseconds($nowTime)) {
|
|
$activity[$key]['cur'] = $num;
|
|
$activity[$key]['award'] = 0;
|
|
} else {
|
|
if ($item['cur'] >= $item['target']) {
|
|
break;
|
|
}
|
|
|
|
$activity[$key]['cur'] += $num;
|
|
}
|
|
$activity[$key]['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(
|
|
'id' => $itemconf['shop_id'],
|
|
'cur' => $num,
|
|
'target' => $itemconf['target'],
|
|
'award' => 0,
|
|
);
|
|
|
|
if ($num > $itemconf['target']) {
|
|
$item['cur'] = $itemconf['target'];
|
|
}
|
|
|
|
if ($itemconf['type'] == 3) {
|
|
$item['time'] = $nowTime;
|
|
}
|
|
|
|
array_push($activity, $item);
|
|
}
|
|
}
|
|
}
|
|
}
|