32 lines
1.4 KiB
Go
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
|
|
}
|