fix: 用户排行JOIN users.username,供应商排行JOIN llmprovider.name

This commit is contained in:
yumoqing 2026-07-22 16:53:01 +08:00
parent a229abfb81
commit ef83842af2

View File

@ -246,20 +246,26 @@ async def get_top_models(env, sor, limit=5):
async def get_top_providers(env, sor, limit=5):
"""Top N 供应商(按金额,全量)"""
sql = """SELECT providerid, COUNT(*) as cnt, COALESCE(SUM(amount_cny), 0) as total_amount
FROM dm_model_call_fact WHERE providerid IS NOT NULL
GROUP BY providerid ORDER BY total_amount DESC LIMIT ${limit}$"""
sql = """SELECT f.providerid, COUNT(*) as cnt, COALESCE(SUM(f.amount_cny), 0) as total_amount,
COALESCE(p.name, f.providerid) as provider_name
FROM dm_model_call_fact f
LEFT JOIN llmprovider p ON p.id = f.providerid
WHERE f.providerid IS NOT NULL
GROUP BY f.providerid ORDER BY total_amount DESC LIMIT ${limit}$"""
recs = await sor.sqlExe(sql, {'limit': limit})
return [{'provider_name': r.providerid or 'Unknown', 'cnt': int(r.cnt),
'total_amount': round(float(r.total_amount), 2)} for r in recs]
return [{'provider_name': r.provider_name or r.providerid or 'Unknown',
'cnt': int(r.cnt), 'total_amount': round(float(r.total_amount), 2)} for r in recs]
async def get_top_users(env, sor, limit=5):
"""全量 Top N 用户(按金额)"""
sql = """SELECT userid, COUNT(*) as cnt, COALESCE(SUM(amount_cny), 0) as total_amount
FROM dm_model_call_fact GROUP BY userid ORDER BY total_amount DESC LIMIT ${limit}$"""
sql = """SELECT f.userid, COUNT(*) as cnt, COALESCE(SUM(f.amount_cny), 0) as total_amount,
COALESCE(u.username, f.userid) as user_name
FROM dm_model_call_fact f
LEFT JOIN users u ON u.id = f.userid
GROUP BY f.userid ORDER BY total_amount DESC LIMIT ${limit}$"""
recs = await sor.sqlExe(sql, {'limit': limit})
return [{'user_name': r.userid, 'cnt': int(r.cnt),
return [{'user_name': r.user_name or r.userid, 'cnt': int(r.cnt),
'total_amount': round(float(r.total_amount), 2)} for r in recs]