tokenFactory/model/distributor_markup_resolve.go

70 lines
2.7 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package model
import (
"strings"
"github.com/QuantumNous/new-api/common"
)
// ResolveEffectiveMarkupDiscountPercentForInviteeBilling 返回本次计费应使用的加价折扣率(百分数)。
// 非利润分成模式、或用户非分销商邀请链下被邀请人时,回退为渠道默认加价折扣率。
func ResolveEffectiveMarkupDiscountPercentForInviteeBilling(inviteeUserId, channelId int, originModelName string) float64 {
base := ResolveChannelMarkupDiscountRate(channelId)
if !common.IsDistributorProfitShareMode() || inviteeUserId <= 0 || channelId <= 0 {
return base
}
modelName := strings.TrimSpace(originModelName)
if modelName == "" {
return base
}
u, err := GetUserById(inviteeUserId, false)
if err != nil || u == nil || u.InviterId <= 0 {
return base
}
inv, err := GetUserById(u.InviterId, false)
if err != nil || inv == nil || !UserIsDistributor(inv) {
return base
}
var rel AffInviteRelation
err = DB.Where("inviter_id = ? AND invitee_user_id = ?", u.InviterId, inviteeUserId).First(&rel).Error
if err != nil {
return base
}
list, perr := parseInviteeModelMarkupDiscountRates(rel.ModelMarkupDiscountRate)
if perr != nil || len(list) == 0 {
return base
}
m := inviteeModelMarkupDiscountRateMap(list)
if v, ok := m[inviteeModelMarkupKey(channelId, modelName)]; ok {
return clampChannelMarkupDiscountRate(v)
}
return base
}
// ApplyInviteeMarkupToPricingAPIForUser 在利润分成模式下,将登录被邀请用户的模型×渠道加价覆盖到定价接口展示数据,
// 并按被邀请人加价折扣率重算视频/图片分档展示价video_flat_clip_hint / image_per_image_hint
func ApplyInviteeMarkupToPricingAPIForUser(inviteeUserId int, pricingData []PricingAPIItem) {
if inviteeUserId <= 0 || !common.IsDistributorProfitShareMode() || len(pricingData) == 0 {
return
}
for i := range pricingData {
modelName := strings.TrimSpace(pricingData[i].ModelName)
if modelName == "" {
continue
}
for j := range pricingData[i].ChannelList {
ch := &pricingData[i].ChannelList[j]
if ch.ChannelID <= 0 {
continue
}
ch.MarkupDiscountRate = ResolveEffectiveMarkupDiscountPercentForInviteeBilling(inviteeUserId, ch.ChannelID, modelName)
}
// 定价 data 按「模型×单渠道」展开,重算分档 hint 使首页卡片/侧栏与实扣一致。
if len(pricingData[i].ChannelList) == 1 {
ch := pricingData[i].ChannelList[0]
pricingData[i].VideoFlatClipHint = BuildVideoFlatClipHint(ch.ChannelID, modelName, ch.PriceDiscountPercent, ch.MarkupDiscountRate)
pricingData[i].ImagePerImageHint = BuildImagePerImageHint(ch.ChannelID, modelName, ch.PriceDiscountPercent, ch.MarkupDiscountRate)
}
}
}