$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); } } } }