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

Function GetUserMonthlyUsageStatisticsSummary

model/usage_statistics.go:590–673  ·  view source on GitHub ↗

GetUserMonthlyUsageStatisticsSummary 获取特定用户的月度用量统计摘要信息

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

Source from the content-addressed store, hash-verified

588
589// GetUserMonthlyUsageStatisticsSummary 获取特定用户的月度用量统计摘要信息
590func GetUserMonthlyUsageStatisticsSummary(userId int, startDate, endDate string, tokenId int, modelName string) (map[string]interface{}, error) {
591 // 使用原生SQL查询实现按月分组统计
592 db := DB.Table("usage_statistics").
593 Joins("JOIN tokens ON usage_statistics.token_id = tokens.id").
594 Where("tokens.user_id = ?", userId)
595
596 // 构建查询条件
597 conditions := " AND tokens.user_id = ?"
598 params := []interface{}{userId}
599
600 // 添加日期范围条件(按月查询)
601 if startDate != "" {
602 conditions += " AND usage_statistics.date >= ?"
603 params = append(params, startDate+"-01")
604 }
605 if endDate != "" {
606 // 获取 endDate 所在月份的最后一天
607 if len(endDate) >= 7 {
608 year := endDate[0:4]
609 month := endDate[5:7]
610 conditions += " AND usage_statistics.date <= ?"
611 params = append(params, year+"-"+month+"-31")
612 }
613 }
614
615 if tokenId > 0 {
616 conditions += " AND usage_statistics.token_id = ?"
617 params = append(params, tokenId)
618 }
619 if modelName != "" {
620 conditions += " AND usage_statistics.model_name LIKE ?"
621 params = append(params, "%"+modelName+"%")
622 }
623
624 // 构建完整的SQL查询
625 sql := `
626 SELECT
627 SUM(total_requests) as total_requests,
628 SUM(successful_requests) as successful_requests,
629 SUM(failed_requests) as failed_requests,
630 SUM(total_tokens) as total_tokens,
631 SUM(total_quota) as total_quota
632 FROM (
633 SELECT
634 SUM(usage_statistics.total_requests) as total_requests,
635 SUM(usage_statistics.successful_requests) as successful_requests,
636 SUM(usage_statistics.failed_requests) as failed_requests,
637 SUM(usage_statistics.total_tokens) as total_tokens,
638 SUM(usage_statistics.total_quota) as total_quota
639 FROM usage_statistics
640 JOIN tokens ON usage_statistics.token_id = tokens.id
641 WHERE 1=1` + conditions + `
642 GROUP BY SUBSTR(usage_statistics.date, 1, 7), usage_statistics.token_id, usage_statistics.token_name, usage_statistics.model_name
643 ) as grouped_data
644 `
645
646 var result struct {
647 TotalRequests int `json:"total_requests"`

Callers 1

Calls 1

ScanMethod · 0.45

Tested by

no test coverage detected