| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376 |
- <?php
- declare (strict_types = 1);
- namespace app\controller;
- use app\BaseController;
- use app\model\MerchantDailyModel;
- use app\model\GameDailyModel;
- use app\model\MerchantHistoryModel;
- use think\facade\Request;
- class DailyStatistics extends BaseController
- {
- /**
- * 获取商户每日数据列表
- */
- public function merchantDailyList()
- {
- $userInfo = $this->request->userInfo;
-
- // 获取查询参数
- $page = Request::get('page', 1, 'intval');
- $limit = Request::get('limit', 10, 'intval');
- $startDate = Request::get('start_date', date('Y-m-d', strtotime('-7 days')), 'trim');
- $endDate = Request::get('end_date', date('Y-m-d'), 'trim');
-
- try {
- // 获取商户每日数据
- $result = MerchantDailyModel::getMerchantDailyList(
- $userInfo['merchant_id'],
- $startDate,
- $endDate,
- $page,
- $limit
- );
-
- // 格式化数据
- foreach ($result['list'] as &$item) {
- $item['game_profit'] = round($item['game_profit'], 2);
- $item['bet_amount'] = round($item['bet_amount'], 2);
- $item['commission_amount'] = round($item['commission_amount'], 2);
- $item['platform_fee'] = round($item['platform_fee'], 2);
- $item['merchant_name'] = $userInfo['merchant_name'] ?? '商户' . $userInfo['merchant_id'];
- }
-
- return json_success($result, '获取成功');
- } catch (\Exception $e) {
- return json_error([], '获取商户每日数据失败:' . $e->getMessage());
- }
- }
-
- /**
- * 获取游戏每日数据列表
- */
- public function gameDailyList()
- {
- $userInfo = $this->request->userInfo;
-
- // 获取查询参数
- $page = Request::get('page', 1, 'intval');
- $limit = Request::get('limit', 10, 'intval');
- $gameId = Request::get('game_id', 0, 'intval');
- $gameName = Request::get('game_name', '', 'trim');
- $startDate = Request::get('start_date', date('Y-m-d', strtotime('-7 days')), 'trim');
- $endDate = Request::get('end_date', date('Y-m-d'), 'trim');
-
- $filters = [
- 'merchant_id' => $userInfo['merchant_id'],
- 'game_id' => $gameId,
- 'game_name' => $gameName,
- 'start_date' => $startDate,
- 'end_date' => $endDate
- ];
-
- try {
- // 获取游戏每日数据
- $result = GameDailyModel::getGameDailyList($filters, $page, $limit);
-
- // 格式化数据
- foreach ($result['list'] as &$item) {
- $item['game_profit'] = round($item['game_profit'], 2);
- $item['bet_amount'] = round($item['bet_amount'], 2);
- $item['commission_amount'] = round($item['commission_amount'], 2);
- }
-
- return json_success($result, '获取成功');
- } catch (\Exception $e) {
- return json_error([], '获取游戏每日数据失败:' . $e->getMessage());
- }
- }
-
- /**
- * 获取商户汇总统计
- */
- public function merchantSummary()
- {
- $userInfo = $this->request->userInfo;
-
- $startDate = Request::get('start_date', date('Y-m-d', strtotime('-30 days')), 'trim');
- $endDate = Request::get('end_date', date('Y-m-d'), 'trim');
-
- try {
- $summary = MerchantDailyModel::getMerchantSummary(
- $userInfo['merchant_id'],
- $startDate,
- $endDate
- );
-
- return json_success($summary, '获取成功');
- } catch (\Exception $e) {
- return json_error([], '获取商户汇总统计失败:' . $e->getMessage());
- }
- }
-
- /**
- * 获取游戏列表
- */
- public function getGameList()
- {
- $userInfo = $this->request->userInfo;
-
- try {
- $games = GameDailyModel::getGameList($userInfo['merchant_id']);
-
- return json_success($games, '获取成功');
- } catch (\Exception $e) {
- return json_error([], '获取游戏列表失败:' . $e->getMessage());
- }
- }
-
- /**
- * 获取商户历史数据统计
- */
- public function merchantHistory()
- {
- $userInfo = $this->request->userInfo;
-
- // 获取过滤参数
- $filters = [
- 'start_date' => Request::get('start_date', '', 'trim'),
- 'end_date' => Request::get('end_date', '', 'trim')
- ];
-
- try {
- $history = MerchantHistoryModel::getMerchantHistoryStatistics(
- $userInfo['merchant_id'],
- $filters
- );
-
- return json_success($history, '获取成功');
- } catch (\Exception $e) {
- return json_error([], '获取商户历史数据失败:' . $e->getMessage());
- }
- }
-
- /**
- * 获取商户历史数据列表(按月或按天)
- */
- public function merchantHistoryList()
- {
- $userInfo = $this->request->userInfo;
-
- // 获取查询参数
- $page = Request::get('page', 1, 'intval');
- $limit = Request::get('limit', 10, 'intval');
- $groupBy = Request::get('group_by', 'month', 'trim'); // month 或 day
-
- $filters = [
- 'start_date' => Request::get('start_date', '', 'trim'),
- 'end_date' => Request::get('end_date', '', 'trim')
- ];
-
- try {
- $result = MerchantHistoryModel::getMerchantHistoryList(
- $userInfo['merchant_id'],
- $groupBy,
- $page,
- $limit,
- $filters
- );
-
- return json_success($result, '获取成功');
- } catch (\Exception $e) {
- return json_error([], '获取商户历史数据列表失败:' . $e->getMessage());
- }
- }
-
- /**
- * 导出商户历史数据
- */
- public function exportMerchantHistory()
- {
- $userInfo = $this->request->userInfo;
-
- $groupBy = Request::get('group_by', 'month', 'trim');
- $filters = [
- 'start_date' => Request::get('start_date', '', 'trim'),
- 'end_date' => Request::get('end_date', '', 'trim')
- ];
-
- try {
- // 获取所有数据
- $result = MerchantHistoryModel::getMerchantHistoryList(
- $userInfo['merchant_id'],
- $groupBy,
- 1,
- 100000,
- $filters
- );
-
- // 生成CSV数据
- $csvData = "时间,RTP(%),注单数,注单金额(THB),游戏输赢(THB),注单金额(USDT),游戏输赢(USDT),登录用户,注册用户,投注用户,抽水额度(USDT),购买免费游戏次数\n";
-
- foreach ($result['list'] as $item) {
- $csvData .= sprintf(
- "%s,%.2f,%d,%.2f,%.2f,%.4f,%.4f,%d,%d,%d,%.4f,%d\n",
- $item['period'],
- $item['rtp'],
- $item['total_orders'],
- $item['total_bet_thb'],
- $item['game_profit_thb'],
- $item['total_bet_usdt'],
- $item['game_profit_usdt'],
- $item['login_users'],
- $item['register_users'],
- $item['bet_users'],
- $item['commission_usdt'],
- $item['free_game_count']
- );
- }
-
- // 返回CSV数据
- return response($csvData)
- ->header(['Content-Type' => 'text/csv; charset=utf-8'])
- ->header(['Content-Disposition' => 'attachment; filename="merchant_history_' . date('YmdHis') . '.csv"'])
- ->header(['Cache-Control' => 'no-cache, must-revalidate']);
-
- } catch (\Exception $e) {
- return json_error([], '导出商户历史数据失败:' . $e->getMessage());
- }
- }
-
- /**
- * 获取游戏汇总统计
- */
- public function gameSummary()
- {
- $userInfo = $this->request->userInfo;
-
- $startDate = Request::get('start_date', date('Y-m-d', strtotime('-30 days')), 'trim');
- $endDate = Request::get('end_date', date('Y-m-d'), 'trim');
-
- try {
- $summary = GameDailyModel::getGameSummary(
- $userInfo['merchant_id'],
- $startDate,
- $endDate
- );
-
- // 格式化数据
- foreach ($summary as &$item) {
- $item['total_profit'] = round($item['total_profit'], 2);
- $item['avg_rtp'] = round($item['avg_rtp'], 2);
- $item['total_bet_amount'] = round($item['total_bet_amount'], 2);
- $item['total_commission'] = round($item['total_commission'], 2);
- }
-
- return json_success($summary, '获取成功');
- } catch (\Exception $e) {
- return json_error([], '获取游戏汇总统计失败:' . $e->getMessage());
- }
- }
-
- /**
- * 导出商户每日数据
- */
- public function exportMerchantDaily()
- {
- $userInfo = $this->request->userInfo;
-
- $startDate = Request::get('start_date', date('Y-m-d', strtotime('-30 days')), 'trim');
- $endDate = Request::get('end_date', date('Y-m-d'), 'trim');
-
- try {
- // 获取所有数据
- $result = MerchantDailyModel::getMerchantDailyList(
- $userInfo['merchant_id'],
- $startDate,
- $endDate,
- 1,
- 100000
- );
-
- // 生成CSV数据
- $csvData = "日期,商户,游戏输赢,游戏RTP(%),注单金额,注单数,投注用户,注册用户,登录用户,抽水额度,平台费用(USDT),购买免费游戏次数\n";
-
- foreach ($result['list'] as $item) {
- $csvData .= sprintf(
- "%s,%s,%.2f,%.2f,%.2f,%d,%d,%d,%d,%.2f,%.2f,%d\n",
- $item['date'],
- $userInfo['merchant_name'] ?? '商户' . $userInfo['merchant_id'],
- $item['game_profit'],
- $item['game_rtp'],
- $item['bet_amount'],
- $item['bet_count'],
- $item['bet_users'],
- $item['register_users'],
- $item['login_users'],
- $item['commission_amount'],
- $item['platform_fee'],
- $item['free_game_count']
- );
- }
-
- // 返回CSV数据
- return response($csvData)
- ->header(['Content-Type' => 'text/csv; charset=utf-8'])
- ->header(['Content-Disposition' => 'attachment; filename="merchant_daily_' . date('YmdHis') . '.csv"'])
- ->header(['Cache-Control' => 'no-cache, must-revalidate']);
-
- } catch (\Exception $e) {
- return json_error([], '导出商户每日数据失败:' . $e->getMessage());
- }
- }
-
- /**
- * 导出游戏每日数据
- */
- public function exportGameDaily()
- {
- $userInfo = $this->request->userInfo;
-
- $startDate = Request::get('start_date', date('Y-m-d', strtotime('-30 days')), 'trim');
- $endDate = Request::get('end_date', date('Y-m-d'), 'trim');
-
- $filters = [
- 'merchant_id' => $userInfo['merchant_id'],
- 'start_date' => $startDate,
- 'end_date' => $endDate
- ];
-
- try {
- // 获取所有数据
- $result = GameDailyModel::getGameDailyList($filters, 1, 100000);
-
- // 生成CSV数据
- $csvData = "日期,游戏名称,游戏输赢,游戏RTP(%),注单金额,注单数,投注用户,注册用户,登录用户,抽水额度,购买免费游戏次数\n";
-
- foreach ($result['list'] as $item) {
- $csvData .= sprintf(
- "%s,%s,%.2f,%.2f,%.2f,%d,%d,%d,%d,%.2f,%d\n",
- $item['date'],
- $item['game_name'],
- $item['game_profit'],
- $item['game_rtp'],
- $item['bet_amount'],
- $item['bet_count'],
- $item['bet_users'],
- $item['register_users'],
- $item['login_users'],
- $item['commission_amount'],
- $item['free_game_count']
- );
- }
-
- // 返回CSV数据
- return response($csvData)
- ->header(['Content-Type' => 'text/csv; charset=utf-8'])
- ->header(['Content-Disposition' => 'attachment; filename="game_daily_' . date('YmdHis') . '.csv"'])
- ->header(['Cache-Control' => 'no-cache, must-revalidate']);
-
- } catch (\Exception $e) {
- return json_error([], '导出游戏每日数据失败:' . $e->getMessage());
- }
- }
- }
|