fix: 修复总Token消耗USD计算重复统计问题

- 将usage-costs的all模式改为只使用monthly数据,避免daily、monthly、hourly重复计算
- 更新正则表达式只匹配monthly格式的key
- 确保总消耗与模型统计表格的USD计算保持一致

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
shaw
2025-07-20 21:36:51 +08:00
parent ff554d7c70
commit 4f0d8db757

View File

@@ -1190,17 +1190,17 @@ router.get('/usage-costs', authenticateAdmin, async (req, res) => {
} else if (period === 'monthly') { } else if (period === 'monthly') {
pattern = `usage:model:monthly:*:${currentMonth}`; pattern = `usage:model:monthly:*:${currentMonth}`;
} else { } else {
// 全部时间先尝试从Redis获取所有历史模型统计数据 // 全部时间先尝试从Redis获取所有历史模型统计数据只使用monthly数据避免重复计算
const allModelKeys = await client.keys('usage:model:*:*:*'); const allModelKeys = await client.keys('usage:model:monthly:*:*');
logger.info(`💰 Total period calculation: found ${allModelKeys.length} model keys`); logger.info(`💰 Total period calculation: found ${allModelKeys.length} monthly model keys`);
if (allModelKeys.length > 0) { if (allModelKeys.length > 0) {
// 如果有详细的模型统计数据,使用模型级别的计算 // 如果有详细的模型统计数据,使用模型级别的计算
const modelUsageMap = new Map(); const modelUsageMap = new Map();
for (const key of allModelKeys) { for (const key of allModelKeys) {
// 解析模型名称 // 解析模型名称只处理monthly数据
let modelMatch = key.match(/usage:model:(?:daily|monthly|hourly):(.+):(\d{4}-\d{2}(?:-\d{2})?(?::\d{2})?)$/); let modelMatch = key.match(/usage:model:monthly:(.+):(\d{4}-\d{2})$/);
if (!modelMatch) continue; if (!modelMatch) continue;
const model = modelMatch[1]; const model = modelMatch[1];