feat(listing): 极品专区发布时增加比例加价

This commit is contained in:
yml2213
2026-11-04 20:54:11 +08:00
parent aeda6f4cd3
commit 5ac1afd573
11 changed files with 149 additions and 0 deletions
@@ -183,6 +183,7 @@ type PublishDepositSkinGroupRule struct {
type PublishRatioConfig struct {
QualityOwnerRatioDiscount float64 `json:"quality_owner_ratio_discount"`
PremiumReviewRatioMarkup float64 `json:"premium_review_ratio_markup"`
InsuranceBaseRatios []PublishInsuranceBaseRatio `json:"insurance_base_ratios"`
ConfigItems []PublishRatioConfigItem `json:"config_items"`
CoinCorrections []PublishCoinCorrection `json:"coin_corrections"`
@@ -252,6 +252,19 @@ func normalizePublishOptions(options *PublishOptionsDTO) {
if len(options.RatioConfig.CoinCorrections) == 0 {
options.RatioConfig.CoinCorrections = defaults.RatioConfig.CoinCorrections
}
options.RatioConfig.PremiumReviewRatioMarkup = normalizePremiumReviewRatioMarkup(
options.RatioConfig.PremiumReviewRatioMarkup,
)
}
func normalizePremiumReviewRatioMarkup(value float64) float64 {
if value < 0 || math.IsNaN(value) || math.IsInf(value, 0) {
return 0
}
if value > 10 {
return 10
}
return math.Round(value*10) / 10
}
func normalizeSalePriceConfig(config *PublishSalePriceConfig) {
@@ -106,6 +106,7 @@ func DefaultPublishOptions() PublishOptionsDTO {
},
RatioConfig: PublishRatioConfig{
QualityOwnerRatioDiscount: 1,
PremiumReviewRatioMarkup: 1,
InsuranceBaseRatios: []PublishInsuranceBaseRatio{
{Insurance: "3*3", Ratio: 40},
{Insurance: "2*3", Ratio: 42},
@@ -128,6 +128,36 @@ func TestNormalizePublishOptionsValueDefaultsQualityOwnerRatioDiscount(t *testin
got.RatioConfig.QualityOwnerRatioDiscount,
)
}
if got.RatioConfig.PremiumReviewRatioMarkup != 1 {
t.Fatalf(
"premium_review_ratio_markup = %v, want 1",
got.RatioConfig.PremiumReviewRatioMarkup,
)
}
}
func TestNormalizePublishOptionsValuePreservesExplicitZeroPremiumReviewRatioMarkup(t *testing.T) {
options := DefaultPublishOptions()
options.RatioConfig.PremiumReviewRatioMarkup = 0
raw, err := json.Marshal(options)
if err != nil {
t.Fatalf("构造配置失败: %v", err)
}
normalized, err := normalizePublishOptionsValue(string(raw))
if err != nil {
t.Fatalf("规范化失败: %v", err)
}
var got PublishOptionsDTO
if err := json.Unmarshal([]byte(normalized), &got); err != nil {
t.Fatalf("解析规范化结果失败: %v", err)
}
if got.RatioConfig.PremiumReviewRatioMarkup != 0 {
t.Fatalf(
"premium_review_ratio_markup = %v, want explicit 0",
got.RatioConfig.PremiumReviewRatioMarkup,
)
}
}
func TestNormalizePublishOptionsValuePreservesExplicitZeroQualityOwnerDiscount(t *testing.T) {
@@ -337,6 +337,10 @@ func normalizePublishOptionsValue(value string) (string, error) {
options.RatioConfig.QualityOwnerRatioDiscount =
DefaultPublishOptions().RatioConfig.QualityOwnerRatioDiscount
}
if !hasNestedJSONField(fields, "ratio_config", "premium_review_ratio_markup") {
options.RatioConfig.PremiumReviewRatioMarkup =
DefaultPublishOptions().RatioConfig.PremiumReviewRatioMarkup
}
originalVersion := options.SchemaVersion
if options.SchemaVersion < publishOptionsSchemaVersion {
if hasLegacyPublishQuantityItem(options.QuantityItems) {