diff --git a/model/channel_pricing.go b/model/channel_pricing.go index 8bc308b..a5280fb 100644 --- a/model/channel_pricing.go +++ b/model/channel_pricing.go @@ -235,6 +235,13 @@ func GetChannelPricingByModelWithChannelInfo(modelName string) ([]*ChannelPricin globalModelPrice = 0 } + + // 获取全局扩展比率(用于 CASE WHEN 回退) + globalCacheRatio, _ := ratio_setting.GetCacheRatio(modelName) + globalCacheCreationRatio, _ := ratio_setting.GetCreateCacheRatio(modelName) + globalImageRatio, _ := ratio_setting.GetImageRatio(modelName) + globalAudioRatio := ratio_setting.GetAudioRatio(modelName) + globalAudioCompletionRatio := ratio_setting.GetAudioCompletionRatio(modelName) // 查询所有支持该模型的渠道,左连接渠道定价表 err := DB.Table("abilities"). Select(`abilities.channel_id, channels.name as channel_name, channels.type as channel_type, @@ -244,14 +251,19 @@ func GetChannelPricingByModelWithChannelInfo(modelName string) ([]*ChannelPricin COALESCE(channel_pricings.model_price, ?) as model_price, channel_pricings.id as id, channel_pricings.tag_ids as tag_ids, + CASE WHEN channel_pricings.cache_ratio > 0 THEN channel_pricings.cache_ratio ELSE ? END as cache_ratio, + CASE WHEN channel_pricings.cache_creation_ratio > 0 THEN channel_pricings.cache_creation_ratio ELSE ? END as cache_creation_ratio, + CASE WHEN channel_pricings.image_ratio > 0 THEN channel_pricings.image_ratio ELSE ? END as image_ratio, + CASE WHEN channel_pricings.audio_ratio > 0 THEN channel_pricings.audio_ratio ELSE ? END as audio_ratio, + CASE WHEN channel_pricings.audio_completion_ratio > 0 THEN channel_pricings.audio_completion_ratio ELSE ? END as audio_completion_ratio, (channel_pricings.id IS NOT NULL) as has_custom_pricing`, - defaultQuotaType, globalModelRatio, globalCompletionRatio, globalModelPrice). + defaultQuotaType, globalModelRatio, globalCompletionRatio, globalModelPrice, globalCacheRatio, globalCacheCreationRatio, globalImageRatio, globalAudioRatio, globalAudioCompletionRatio). Joins("LEFT JOIN channels ON abilities.channel_id = channels.id"). Joins("LEFT JOIN channel_pricings ON abilities.channel_id = channel_pricings.channel_id AND channel_pricings.model_name = ? AND channel_pricings.deleted_at IS NULL", modelName). Where("abilities.model = ?", modelName). Where("abilities.enabled = ?", true). Where("channels.status = ?", 1). // 只显示启用的渠道 - Group("abilities.channel_id, channels.name, channels.type, channel_pricings.quota_type, channel_pricings.model_ratio, channel_pricings.completion_ratio, channel_pricings.model_price, channel_pricings.id, channel_pricings.tag_ids"). + Group("abilities.channel_id, channels.name, channels.type, channel_pricings.quota_type, channel_pricings.model_ratio, channel_pricings.completion_ratio, channel_pricings.model_price, channel_pricings.id, channel_pricings.tag_ids, channel_pricings.cache_ratio, channel_pricings.cache_creation_ratio, channel_pricings.image_ratio, channel_pricings.audio_ratio, channel_pricings.audio_completion_ratio"). Scan(&results).Error if err != nil { return nil, err