tokenFactory/model/channel_model_heat.go

105 lines
3.7 KiB
Go

package model
import (
"time"
"gorm.io/gorm"
)
// ChannelModelHeat 存储渠道-模型组合的热力排序配置
type ChannelModelHeat struct {
ID int64 `gorm:"primaryKey;autoIncrement" json:"id"`
ChannelID int `gorm:"not null;index:idx_channel_model,unique;index:idx_channel" json:"channel_id"`
ModelName string `gorm:"type:varchar(255);not null;index:idx_channel_model,unique;index:idx_model" json:"model_name"`
ModelSortWeight float64 `gorm:"type:double precision;default:1" json:"model_sort_weight"`
ChannelSortWeight float64 `gorm:"column:channel_sort_weight;type:double precision;default:1" json:"channel_sort_weight"`
ManualBaseReqCount int64 `gorm:"column:manual_base_req_count;default:0" json:"manual_base_req_count"`
CreatedAt time.Time `gorm:"autoCreateTime" json:"created_at"`
UpdatedAt time.Time `gorm:"autoUpdateTime" json:"updated_at"`
}
func (ChannelModelHeat) TableName() string {
return "channel_model_heats"
}
// GetChannelModelHeat 获取指定渠道-模型组合的热力配置
func GetChannelModelHeat(channelID int, modelName string) (*ChannelModelHeat, error) {
var heat ChannelModelHeat
err := DB.Where("channel_id = ? AND model_name = ?", channelID, modelName).First(&heat).Error
if err != nil {
if err == gorm.ErrRecordNotFound {
return nil, nil
}
return nil, err
}
return &heat, nil
}
// GetChannelModelHeatsByChannel 获取指定渠道的所有模型热力配置
func GetChannelModelHeatsByChannel(channelID int) ([]ChannelModelHeat, error) {
var heats []ChannelModelHeat
err := DB.Where("channel_id = ?", channelID).Find(&heats).Error
return heats, err
}
// GetAllChannelModelHeats 获取所有渠道-模型组合的热力配置
func GetAllChannelModelHeats() ([]ChannelModelHeat, error) {
var heats []ChannelModelHeat
err := DB.Find(&heats).Error
return heats, err
}
// SaveChannelModelHeat 保存或更新渠道-模型组合的热力配置
func SaveChannelModelHeat(heat *ChannelModelHeat) error {
var existing ChannelModelHeat
err := DB.Where("channel_id = ? AND model_name = ?", heat.ChannelID, heat.ModelName).First(&existing).Error
if err != nil {
if err == gorm.ErrRecordNotFound {
// 创建新记录
return DB.Create(heat).Error
}
return err
}
// 更新现有记录
existing.ModelSortWeight = heat.ModelSortWeight
existing.ChannelSortWeight = heat.ChannelSortWeight
existing.ManualBaseReqCount = heat.ManualBaseReqCount
return DB.Save(&existing).Error
}
// BatchSaveChannelModelHeats 批量保存渠道-模型组合的热力配置
func BatchSaveChannelModelHeats(heats []ChannelModelHeat) error {
return DB.Transaction(func(tx *gorm.DB) error {
for _, heat := range heats {
var existing ChannelModelHeat
err := tx.Where("channel_id = ? AND model_name = ?", heat.ChannelID, heat.ModelName).First(&existing).Error
if err != nil {
if err == gorm.ErrRecordNotFound {
if err := tx.Create(&heat).Error; err != nil {
return err
}
continue
}
return err
}
existing.ModelSortWeight = heat.ModelSortWeight
existing.ChannelSortWeight = heat.ChannelSortWeight
existing.ManualBaseReqCount = heat.ManualBaseReqCount
if err := tx.Save(&existing).Error; err != nil {
return err
}
}
return nil
})
}
// DeleteChannelModelHeat 删除指定渠道-模型组合的热力配置
func DeleteChannelModelHeat(channelID int, modelName string) error {
return DB.Where("channel_id = ? AND model_name = ?", channelID, modelName).Delete(&ChannelModelHeat{}).Error
}
// DeleteChannelModelHeatsByChannel 删除指定渠道的所有热力配置
func DeleteChannelModelHeatsByChannel(channelID int) error {
return DB.Where("channel_id = ?", channelID).Delete(&ChannelModelHeat{}).Error
}