105 lines
3.7 KiB
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
|
|
}
|