GetUserMonthlyUsageStatisticsSummary 获取特定用户的月度用量统计摘要信息
(userId int, startDate, endDate string, tokenId int, modelName string)
| 588 | |
| 589 | // GetUserMonthlyUsageStatisticsSummary 获取特定用户的月度用量统计摘要信息 |
| 590 | func 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"` |
no test coverage detected