2026-07-12 17:38:48 +08:00

32 lines
1.4 KiB
Go

package mysql
import (
"context"
"hyapp/pkg/appcode"
"hyapp/pkg/xerr"
"hyapp/services/wallet-service/internal/domain/ledger"
)
// GetHostRevenueStats 聚合 POINT 分录;兑换按 available 侧冻结扣减计数,审核结算不会再次累计。
func (r *Repository) GetHostRevenueStats(ctx context.Context, query ledger.HostRevenueStatsQuery) (ledger.HostRevenueStats, error) {
if r == nil || r.db == nil {
return ledger.HostRevenueStats{}, xerr.New(xerr.Unavailable, "mysql repository is not configured")
}
var stats ledger.HostRevenueStats
err := r.db.QueryRowContext(ctx, `
SELECT
COALESCE(SUM(CASE WHEN e.available_delta > 0 AND t.biz_type <> ? THEN e.available_delta ELSE 0 END), 0),
COALESCE(SUM(CASE WHEN e.available_delta < 0 THEN -e.available_delta ELSE 0 END), 0),
COUNT(DISTINCT CASE WHEN e.available_delta > 0 AND e.counterparty_user_id > 0 THEN e.counterparty_user_id END)
FROM wallet_entries e
INNER JOIN wallet_transactions t
ON t.app_code = e.app_code AND t.transaction_id = e.transaction_id
WHERE e.app_code = ? AND e.user_id = ? AND e.asset_type = ?
AND e.created_at_ms >= ? AND e.created_at_ms < ?`,
bizTypeSalaryWithdrawalRelease,
appcode.FromContext(ctx), query.HostUserID, ledger.AssetPoint, query.StartAtMS, query.EndAtMS,
).Scan(&stats.DiamondEarnings, &stats.DiamondExchanged, &stats.GiftSenders)
return stats, err
}