package config import ( "errors" "time" "gorm.io/gorm" ) // RecordRequest 记录请求统计 func RecordRequest(providerID, modelName string) error { db := GetDB() if db == nil { return errors.New("数据库未初始化") } today := time.Now().Format("2006-01-02") todayTime, _ := time.Parse("2006-01-02", today) // 使用事务确保并发安全 return db.Transaction(func(tx *gorm.DB) error { var stats UsageStats // 查找或创建统计记录 err := tx.Where("provider_id = ? AND model_name = ? AND date = ?", providerID, modelName, todayTime). First(&stats).Error if errors.Is(err, gorm.ErrRecordNotFound) { // 创建新记录 stats = UsageStats{ ProviderID: providerID, ModelName: modelName, RequestCount: 1, Date: todayTime, } return tx.Create(&stats).Error } else if err != nil { return err } // 更新计数 return tx.Model(&stats).Update("request_count", gorm.Expr("request_count + 1")).Error }) } // GetStats 查询统计 func GetStats(providerID, modelName string, startDate, endDate *time.Time) ([]UsageStats, error) { db := GetDB() if db == nil { return nil, errors.New("数据库未初始化") } var stats []UsageStats query := db.Model(&UsageStats{}) if providerID != "" { query = query.Where("provider_id = ?", providerID) } if modelName != "" { query = query.Where("model_name = ?", modelName) } if startDate != nil { query = query.Where("date >= ?", startDate) } if endDate != nil { query = query.Where("date <= ?", endDate) } err := query.Order("date DESC").Find(&stats).Error if err != nil { return nil, err } return stats, nil }