MCPcopy Create free account
hub / github.com/aiprodcoder/MIXAPI / GetUserMonthlyUsageStatistics

Function GetUserMonthlyUsageStatistics

model/usage_statistics.go:443–531  ·  view source on GitHub ↗

GetUserMonthlyUsageStatistics 获取特定用户的月度用量统计数据

(userId int, startDate, endDate string, tokenId int, modelName string, page, pageSize int)

Source from the content-addressed store, hash-verified

441
442// GetUserMonthlyUsageStatistics 获取特定用户的月度用量统计数据
443func GetUserMonthlyUsageStatistics(userId int, startDate, endDate string, tokenId int, modelName string, page, pageSize int) ([]*UsageStatistics, int64, error) {
444 var statistics []*UsageStatistics
445 var total int64
446
447 // 使用原生SQL查询实现按月分组统计
448 db := DB.Table("usage_statistics").
449 Joins("JOIN tokens ON usage_statistics.token_id = tokens.id").
450 Where("tokens.user_id = ?", userId)
451
452 // 构建查询条件
453 conditions := " AND tokens.user_id = ?"
454 params := []interface{}{userId}
455
456 // 添加日期范围条件(按月查询)
457 if startDate != "" {
458 conditions += " AND usage_statistics.date >= ?"
459 params = append(params, startDate+"-01")
460 }
461 if endDate != "" {
462 // 获取 endDate 所在月份的最后一天
463 if len(endDate) >= 7 {
464 year := endDate[0:4]
465 month := endDate[5:7]
466 conditions += " AND usage_statistics.date <= ?"
467 params = append(params, year+"-"+month+"-31")
468 }
469 }
470
471 if tokenId > 0 {
472 conditions += " AND usage_statistics.token_id = ?"
473 params = append(params, tokenId)
474 }
475 if modelName != "" {
476 conditions += " AND usage_statistics.model_name LIKE ?"
477 params = append(params, "%"+modelName+"%")
478 }
479
480 // 构建完整的SQL查询
481 sql := `
482 SELECT
483 MAX(usage_statistics.id) as id,
484 SUBSTR(usage_statistics.date, 1, 7) as date,
485 usage_statistics.token_id,
486 usage_statistics.token_name,
487 usage_statistics.model_name,
488 SUM(usage_statistics.total_requests) as total_requests,
489 SUM(usage_statistics.successful_requests) as successful_requests,
490 SUM(usage_statistics.failed_requests) as failed_requests,
491 SUM(usage_statistics.total_tokens) as total_tokens,
492 SUM(usage_statistics.prompt_tokens) as prompt_tokens,
493 SUM(usage_statistics.completion_tokens) as completion_tokens,
494 SUM(usage_statistics.total_quota) as total_quota,
495 MAX(usage_statistics.created_time) as created_time,
496 MAX(usage_statistics.updated_time) as updated_time
497 FROM usage_statistics
498 JOIN tokens ON usage_statistics.token_id = tokens.id
499 WHERE 1=1` + conditions + `
500 GROUP BY SUBSTR(usage_statistics.date, 1, 7), usage_statistics.token_id, usage_statistics.token_name, usage_statistics.model_name

Callers 1

Calls 1

ScanMethod · 0.45

Tested by

no test coverage detected