From 668cfa6a24870a001c08b66e49032d3bac9bac37 Mon Sep 17 00:00:00 2001 From: hashbro Date: Wed, 9 Sep 2026 03:50:23 +0800 Subject: [PATCH] feat: stats --- app/Services/DashboardStatsService.php | 16 ++++++---------- app/Telegram/Handlers/DataCommand.php | 2 +- resources/views/admin/dashboard/index.blade.php | 2 +- tests/Feature/AdminAgentPortalTest.php | 2 +- 4 files changed, 9 insertions(+), 13 deletions(-) diff --git a/app/Services/DashboardStatsService.php b/app/Services/DashboardStatsService.php index 9591931..33d2468 100644 --- a/app/Services/DashboardStatsService.php +++ b/app/Services/DashboardStatsService.php @@ -282,7 +282,7 @@ class DashboardStatsService } /** - * Address count is still in-range; coin sums are all matching addresses (no time window). + * Address count + coin sums in one pass over wallet_addresses in range. * * @return array{0: int, 1: array{usdt: string, trx: string, eth: string, btc: string, bnb: string}} */ @@ -294,24 +294,20 @@ class DashboardStatsService Carbon $from, Carbon $to, ): array { - $base = $this->scopedDeviceChildren( + $q = $this->scopedDeviceChildren( WalletAddress::query(), 'wallet_addresses', $agent, $agentUserId, $channelId, $channelExact, - ); + )->whereBetween('wallet_addresses.created_at', [$from, $to]); - $addressCount = (clone $base) - ->whereBetween('wallet_addresses.created_at', [$from, $to]) - ->count('wallet_addresses.id'); - - $selects = []; + $selects = ['COUNT(wallet_addresses.id) as addr_count']; foreach (WalletAddress::COIN_COLUMNS as $col) { $selects[] = 'COALESCE(SUM(wallet_addresses.'.$col.'), 0) as '.$col; } - $row = (clone $base)->selectRaw(implode(', ', $selects))->first(); + $row = $q->selectRaw(implode(', ', $selects))->first(); $out = []; foreach (WalletAddress::COIN_COLUMNS as $col) { @@ -321,7 +317,7 @@ class DashboardStatsService } /** @var array{usdt: string, trx: string, eth: string, btc: string, bnb: string} $out */ - return [$addressCount, $out]; + return [(int) ($row?->addr_count ?? 0), $out]; } /** diff --git a/app/Telegram/Handlers/DataCommand.php b/app/Telegram/Handlers/DataCommand.php index fca2b6c..c3bb143 100644 --- a/app/Telegram/Handlers/DataCommand.php +++ b/app/Telegram/Handlers/DataCommand.php @@ -92,7 +92,7 @@ class DataCommand '助记词: '.$data['mnemonic_count'], '钱包地址: '.$data['address_count'], '', - '💰 总余额(全部地址)', + '💰 总余额(区间内新增地址)', '• USDT '.$data['balances']['usdt'], '• TRX '.$data['balances']['trx'], '• BTC '.$data['balances']['btc'], diff --git a/resources/views/admin/dashboard/index.blade.php b/resources/views/admin/dashboard/index.blade.php index 18bf4a2..2f01af4 100644 --- a/resources/views/admin/dashboard/index.blade.php +++ b/resources/views/admin/dashboard/index.blade.php @@ -145,7 +145,7 @@ -
总余额全部地址,不受时间范围影响
+
总余额区间内新增地址
USDT
diff --git a/tests/Feature/AdminAgentPortalTest.php b/tests/Feature/AdminAgentPortalTest.php index 7139ba6..3add3ca 100644 --- a/tests/Feature/AdminAgentPortalTest.php +++ b/tests/Feature/AdminAgentPortalTest.php @@ -390,7 +390,7 @@ class AdminAgentPortalTest extends TestCase ->assertJsonPath('data.wallet_count', 1) ->assertJsonPath('data.mnemonic_count', 1) ->assertJsonPath('data.address_count', 1) - ->assertJsonPath('data.balances.usdt', '8') + ->assertJsonPath('data.balances.usdt', '5') ->assertJsonPath('data.date_from', '2026-08-01') ->assertJsonPath('data.date_to', '2026-08-15'); }