You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

71 lines
2.4 KiB
Go

package serializer
import (
"fonchain-artshow/cmd/model"
"fonchain-artshow/pkg/utils"
"math"
)
func CalcPrice(artworks []*model.ArtworkPrice, ruler int32, totalPrice int64) (err error, save []*model.ArtworkPrice) {
if totalPrice == 0 || ruler == 0 {
return nil, artworks
}
save = make([]*model.ArtworkPrice, 0)
var (
needAddPriceArtworkIndex int
currentArtworkRuler int
currentTotalPrice int64
maxRulerIndex int
totalDiv float64
)
price := utils.FormatFloat(float64(totalPrice)/float64(ruler)/10, 2) * 10 // 用于计算的单价
//ruler_price := math.Floor(float64(total_price)/float64(ruler)/10) * 10 // 保存的单价
for i := 0; i < len(artworks); i++ {
if currentArtworkRuler < int(artworks[i].Ruler) {
currentArtworkRuler = int(artworks[i].Ruler)
needAddPriceArtworkIndex = i
maxRulerIndex = i
} else if currentArtworkRuler == int(artworks[i].Ruler) {
currentArtworkRuler = 0
needAddPriceArtworkIndex = -1
}
artworks[i].RulerPrice = int64(price)
artworks[i].Price = int64(price * float64(artworks[i].Ruler))
artworkPrice := float64(artworks[i].Price) * 0.95
artworkPrice, div1 := math.Modf(artworkPrice)
artworks[i].ArtworkPrice = int64(artworkPrice)
totalDiv += div1 // 小数点 省略掉的 0.5
copyrightPrice := artworks[i].Price - artworks[i].ArtworkPrice
artworks[i].CopyrightPrice = copyrightPrice
currentTotalPrice += artworks[i].Price
}
if needAddPriceArtworkIndex == -1 {
needAddPriceArtworkIndex = maxRulerIndex
}
artworks[needAddPriceArtworkIndex].RulerPrice = int64(price)
artworks[needAddPriceArtworkIndex].FloatPrice = totalPrice - currentTotalPrice - artworks[needAddPriceArtworkIndex].Price
artworks[needAddPriceArtworkIndex].Price = int64(float32(totalPrice) - float32(currentTotalPrice) + float32(artworks[needAddPriceArtworkIndex].Price))
artworks[needAddPriceArtworkIndex].ArtworkPrice = int64((float64(artworks[needAddPriceArtworkIndex].Price) * 0.95) + totalDiv)
artworks[needAddPriceArtworkIndex].CopyrightPrice = artworks[needAddPriceArtworkIndex].Price - artworks[needAddPriceArtworkIndex].ArtworkPrice
return nil, artworks
}
func CalcReward(artworks []*model.ArtworkPrice, reward int64) (err error, save []*model.ArtworkPrice) {
save = artworks
if reward == 0 {
return nil, artworks
}
for i := 0; i < len(artworks); i++ {
artworks[i].ArtistPrice = reward * int64(artworks[i].Ruler)
}
return nil, save
}