From 75ccb7a4f3a906fffb5388ecfd2ba4cab98080b1 Mon Sep 17 00:00:00 2001 From: yangduo Date: Wed, 8 Jan 2025 23:45:52 +0800 Subject: [PATCH] recharge & consume activity --- webapp/classes/RechargeActivity.php | 142 ++++++++++++++++++ .../controller/ActivityController.class.php | 14 +- webapp/controller/AdditemController.class.php | 2 + webapp/controller/EquipController.class.php | 4 + .../FesActivityController.class.php | 2 + .../controller/GameOverController.class.php | 4 + webapp/controller/PayController.class.php | 4 + .../controller/RechargeController.class.php | 84 +++++++---- webapp/controller/ShareController.class.php | 2 + webapp/controller/ShopController.class.php | 2 + 10 files changed, 229 insertions(+), 31 deletions(-) create mode 100644 webapp/classes/RechargeActivity.php diff --git a/webapp/classes/RechargeActivity.php b/webapp/classes/RechargeActivity.php new file mode 100644 index 0000000..e09f27f --- /dev/null +++ b/webapp/classes/RechargeActivity.php @@ -0,0 +1,142 @@ + $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); + } + } + } +} diff --git a/webapp/controller/ActivityController.class.php b/webapp/controller/ActivityController.class.php index 506c8e2..3b3ec81 100644 --- a/webapp/controller/ActivityController.class.php +++ b/webapp/controller/ActivityController.class.php @@ -2,6 +2,7 @@ require 'classes/Quest.php'; require 'classes/AddReward.php'; +require 'classes/RechargeActivity.php'; require_once 'metatable/draw.php'; require_once 'metatable/parameter.php'; require_once 'metatable/drop.php'; @@ -477,7 +478,7 @@ class ActivityController phpcommon\sendError(ERR_USER_BASE + 3, '今日刷新次数已满'); return; } - + $ret = $conn->execScript( 'UPDATE activity SET video_times=:video_times,item_id=:item_id, item_num=:item_num, modify_time=:modify_time ' . ' WHERE accountid=:accountid;', @@ -534,6 +535,9 @@ class ActivityController return; } + $rechargeactivity = new classes\RechargeActivity(); + $rechargeactivity->triggerConsume($account_id, $cur_cost); + $p_flush = $this->getParameter(DIAMONDLOTTERY_TIME); $now_days = $row['now_days']; if ($p_flush['value'] <= $row['diamond_times']) { @@ -1847,6 +1851,9 @@ class ActivityController die(); return; } + + $rechargeactivity = new classes\RechargeActivity(); + $rechargeactivity->triggerConsume($account_id, $count); } else { phpcommon\sendError(ERR_USER_BASE + 3, '货币不足'); return; @@ -1970,6 +1977,11 @@ class ActivityController die(); return; } + + if ($costid == 10003) { + $rechargeactivity = new classes\RechargeActivity(); + $rechargeactivity->triggerConsume($account_id, $cost); + } } $rows = $conn->execQuery( 'SELECT id, cd_time FROM draw WHERE accountid=:accountid;', diff --git a/webapp/controller/AdditemController.class.php b/webapp/controller/AdditemController.class.php index a17778d..3d28d0b 100644 --- a/webapp/controller/AdditemController.class.php +++ b/webapp/controller/AdditemController.class.php @@ -240,6 +240,8 @@ class AdditemController{ die(); return; } + $rechargeactivity = new classes\RechargeActivity(); + $rechargeactivity->triggerConsume($accountid, $num); echo json_encode(array( 'errcode' => 0, 'errmsg' => '', diff --git a/webapp/controller/EquipController.class.php b/webapp/controller/EquipController.class.php index 269504f..57db205 100644 --- a/webapp/controller/EquipController.class.php +++ b/webapp/controller/EquipController.class.php @@ -584,6 +584,8 @@ class EquipController{ die(); return; } + $rechargeactivity = new classes\RechargeActivity(); + $rechargeactivity->triggerConsume($account_id, $diamond_cost); } $active_time = $row['active_time']; if ($active_time + $sub_time <= time() || @@ -904,6 +906,8 @@ class EquipController{ die(); return; } + $rechargeactivity = new classes\RechargeActivity(); + $rechargeactivity->triggerConsume($account_id, $item_num); } else if ($it['type'] == 11) { $rowbag = $conn->execQueryOne('SELECT num FROM bag WHERE accountid=:accountid AND id=:id;', array( diff --git a/webapp/controller/FesActivityController.class.php b/webapp/controller/FesActivityController.class.php index 2c585d7..1167fbf 100644 --- a/webapp/controller/FesActivityController.class.php +++ b/webapp/controller/FesActivityController.class.php @@ -227,6 +227,8 @@ class FesActivityController{ die(); return; } + $rechargeactivity = new classes\RechargeActivity(); + $rechargeactivity->triggerConsume($account_id, $us['condition']); } else { phpcommon\sendError(ERR_USER_BASE + 4, '奖励不可领'); return; diff --git a/webapp/controller/GameOverController.class.php b/webapp/controller/GameOverController.class.php index 898abc8..e21b808 100644 --- a/webapp/controller/GameOverController.class.php +++ b/webapp/controller/GameOverController.class.php @@ -543,6 +543,10 @@ class GameOverController } $addreward = new classes\AddReward(); $items = $addreward->addReward(10003, -$par, $account_id, 0, 0); + if ($par > 0) { + $rechargeactivity = new classes\RechargeActivity(); + $rechargeactivity->triggerConsume($account_id, $par); + } $diamond_num = $addreward->getDiamondNum($account_id); echo json_encode(array( 'errcode' => 0, diff --git a/webapp/controller/PayController.class.php b/webapp/controller/PayController.class.php index a33172c..f557193 100644 --- a/webapp/controller/PayController.class.php +++ b/webapp/controller/PayController.class.php @@ -599,6 +599,8 @@ class PayController{ die(); return; } + $rechargeactivity = new classes\RechargeActivity(); + $rechargeactivity->triggerConsume($account_id, $diamond['coin_num']); } //首充礼包奖励 if ($diamond['shop_type'] == 4) { @@ -833,6 +835,8 @@ class PayController{ die(); return; } + $rechargeactivity = new classes\RechargeActivity(); + $rechargeactivity->triggerConsume($account_id, $item['dprice']); //添加通行证 $addreward = new classes\AddReward(); $addreward->addReward(10005, 1, $account_id); diff --git a/webapp/controller/RechargeController.class.php b/webapp/controller/RechargeController.class.php index 94050fa..48c2df8 100644 --- a/webapp/controller/RechargeController.class.php +++ b/webapp/controller/RechargeController.class.php @@ -2,6 +2,7 @@ require 'classes/Quest.php'; require 'classes/AddReward.php'; +require 'classes/RechargeActivity.php'; require_once 'metatable/shopGoods.php'; require_once 'metatable/privilegecard.php'; require_once 'metatable/rechargeActivity.php'; @@ -151,16 +152,23 @@ class RechargeController ) ); + $rechargeactivity = new classes\RechargeActivity(); + $activity = array(); + if ($rechargerow && $rechargerow['activity'] != null && $rechargerow['activity'] != '') { + $activity = json_decode($rechargerow['activity']); + } + $rechargeactivity->updateActivityCur($activity, $diamonds, true); if (!$rechargerow) { $ret = $conn->execScript( - 'INSERT INTO recharge(accountid, first_data, recharge_diamond, present_diamond, create_time, modify_time) ' . - ' VALUES(:account_id, :first_data, :recharge_diamond, :present_diamond, :create_time, :modify_time) ' . - ' ON DUPLICATE KEY UPDATE accountid=:account_id, first_data=:first_data, recharge_diamond=:recharge_diamond, present_diamond=:present_diamond, modify_time=:modify_time;', + 'INSERT INTO recharge(accountid, first_data, recharge_diamond, present_diamond, activity, create_time, modify_time) ' . + ' VALUES(:account_id, :first_data, :recharge_diamond, :present_diamond, :activity, :create_time, :modify_time) ' . + ' ON DUPLICATE KEY UPDATE accountid=:account_id, first_data=:first_data, recharge_diamond=:recharge_diamond, present_diamond=:present_diamond, activity=:activity, modify_time=:modify_time;', array( ':account_id' => $account_id, ':first_data' => $goodsid, ':recharge_diamond' => $diamonds, ':present_diamond' => $diamond_present, + ':activity' => json_encode($activity), ':create_time' => time(), ':modify_time' => time() ) @@ -182,13 +190,14 @@ class RechargeController } $ret = $conn->execScript( - 'UPDATE recharge SET first_data=:first_data, recharge_diamond=:recharge_diamond, present_diamond=:present_diamond, modify_time=:modify_time' . + 'UPDATE recharge SET first_data=:first_data, recharge_diamond=:recharge_diamond, present_diamond=:present_diamond, activity=:activity, modify_time=:modify_time' . ' WHERE accountid=:accountid;', array( ':accountid' => $account_id, ':first_data' => $firstdata, ':recharge_diamond' => $rechargerow['recharge_diamond'] + $diamonds, ':present_diamond' => $rechargerow['present_diamond'] + $diamond_present, + ':activity' => json_encode($activity), ':modify_time' => time() ) ); @@ -289,6 +298,13 @@ class RechargeController $addreward->addReward(10003, $shopgoods['first_present'], $account_id, 0, 0); } + $rechargeactivity = new classes\RechargeActivity(); + $activity = array(); + if ($rechargerow && $rechargerow['activity'] != null && $rechargerow['activity'] != '') { + $activity = json_decode($rechargerow['activity']); + } + $rechargeactivity->updateActivityCur($activity, $shopgoods['price'] * 10, true); + if ($shopgoods['type'] == 3) { $nowtime = time(); // update vip_info @@ -305,12 +321,13 @@ class RechargeController )); $ret = $conn->execScript( - 'INSERT INTO recharge(accountid, vip_info, create_time, modify_time) ' . - ' VALUES(:account_id, :vip_info, :create_time, :modify_time) ' . - ' ON DUPLICATE KEY UPDATE accountid=:account_id, vip_info=:vip_info, modify_time=:modify_time;', + 'INSERT INTO recharge(accountid, vip_info, activity, create_time, modify_time) ' . + ' VALUES(:account_id, :vip_info, :activity, :create_time, :modify_time) ' . + ' ON DUPLICATE KEY UPDATE accountid=:account_id, vip_info=:vip_info, activity=:activity, modify_time=:modify_time;', array( ':account_id' => $account_id, ':vip_info' => json_encode($vip_info), + ':activity' => json_encode($activity), ':create_time' => $nowtime, ':modify_time' => $nowtime, ) @@ -344,11 +361,12 @@ class RechargeController } $ret = $conn->execScript( - 'UPDATE recharge SET vip_info=:vip_info, modify_time=:modify_time' . + 'UPDATE recharge SET vip_info=:vip_info, activity=:activity, modify_time=:modify_time' . ' WHERE accountid=:accountid;', array( ':accountid' => $account_id, ':vip_info' => json_encode($vip_info), + ':activity' => json_encode($activity), ':modify_time' => time(), ) ); @@ -370,12 +388,13 @@ class RechargeController )); $ret = $conn->execScript( - 'INSERT INTO recharge(accountid, daily_purchase, create_time, modify_time) ' . - ' VALUES(:account_id, :daily_purchase, :create_time, :modify_time) ' . - ' ON DUPLICATE KEY UPDATE accountid=:account_id, daily_purchase=:daily_purchase, modify_time=:modify_time;', + 'INSERT INTO recharge(accountid, daily_purchase, activity, create_time, modify_time) ' . + ' VALUES(:account_id, :daily_purchase, :activity, :create_time, :modify_time) ' . + ' ON DUPLICATE KEY UPDATE accountid=:account_id, daily_purchase=:daily_purchase, activity=:activity, modify_time=:modify_time;', array( ':account_id' => $account_id, ':daily_purchase' => json_encode($daily_purchase), + ':activity' => json_encode($activity), ':create_time' => time(), ':modify_time' => time() ) @@ -398,11 +417,12 @@ class RechargeController } $ret = $conn->execScript( - 'UPDATE recharge SET daily_purchase=:daily_purchase, modify_time=:modify_time' . + 'UPDATE recharge SET daily_purchase=:daily_purchase, activity=:activity, modify_time=:modify_time' . ' WHERE accountid=:accountid;', array( ':accountid' => $account_id, ':daily_purchase' => json_encode($daily_purchase), + ':activity' => json_encode($activity), ':modify_time' => time(), ) ); @@ -695,6 +715,17 @@ class RechargeController } $found = true; + + $coin_num = $addreward->getCoinNum($account_id); + $diamond_num = $addreward->getDiamondNum($account_id); + echo json_encode(array( + 'errcode' => 0, + 'errmsg' => '', + 'coin_nums' => $coin_num, + 'diamond_nums' => $diamond_num, + 'item_list' => $item_list, + 'vip_info' => json_encode($vipinfo), + )); } } @@ -702,15 +733,6 @@ class RechargeController phpcommon\sendError(ERR_USER_BASE + 1, '没月卡 2'); return; } - - echo json_encode(array( - 'errcode' => 0, - 'errmsg' => '', - 'coin_nums' => 0, - 'diamond_nums' => 0, - 'item_list' => $item_list, - 'vip_info' => json_encode($vipinfo), - )); } public function getActivityAward() @@ -806,6 +828,17 @@ class RechargeController } $found = true; + + $coin_num = $addreward->getCoinNum($account_id); + $diamond_num = $addreward->getDiamondNum($account_id); + echo json_encode(array( + 'errcode' => 0, + 'errmsg' => '', + 'coin_nums' => $coin_num, + 'diamond_nums' => $diamond_num, + 'item_list' => $item_list, + 'recharge_activity' => json_encode($activity), + )); } } @@ -813,15 +846,6 @@ class RechargeController phpcommon\sendError(ERR_USER_BASE + 1, '没活动 2'); return; } - - echo json_encode(array( - 'errcode' => 0, - 'errmsg' => '', - 'coin_nums' => 0, - 'diamond_nums' => 0, - 'item_list' => $item_list, - 'recharge_activity' => json_encode($activity), - )); } protected function getDrop($drop_id) diff --git a/webapp/controller/ShareController.class.php b/webapp/controller/ShareController.class.php index 63b080d..3f79fe7 100644 --- a/webapp/controller/ShareController.class.php +++ b/webapp/controller/ShareController.class.php @@ -119,6 +119,8 @@ class ShareController{ if (!$ret) { die(); } + $rechargeactivity = new classes\RechargeActivity(); + $rechargeactivity->triggerConsume($account_id, $num); } protected function randBoxReward($drop_id, $times) diff --git a/webapp/controller/ShopController.class.php b/webapp/controller/ShopController.class.php index 70399d0..38921e3 100644 --- a/webapp/controller/ShopController.class.php +++ b/webapp/controller/ShopController.class.php @@ -1301,6 +1301,8 @@ class ShopController{ if (!$ret) { die(); } + $rechargeactivity = new classes\RechargeActivity(); + $rechargeactivity->triggerConsume($account_id, $coin_num); } if ($tips == 3) {