package service import ( "errors" "math" "strings" "affiliate_dash/internal/model" "affiliate_dash/internal/pkg/timeutil" "github.com/google/uuid" ) func newFulfillmentOrderNo() string { return "FO" + timeutil.Now().Format(timeutil.OrderNoLayout) + strings.ReplaceAll(uuid.NewString()[:12], "-", "") } func newTestFulfillmentOrderNo() string { return "O" + timeutil.Now().Format(timeutil.OrderNoLayout) + strings.ReplaceAll(uuid.NewString()[:12], "-", "") } // calculateServiceFee 按"百分比或固定"二选一计算手续费: // - feeType=rate:按 baseAmount * feeRateBP / 10000 计算 // - feeType=fixed:直接取 feeFixedAmount // // 二者互斥,不会叠加。 func calculateServiceFee(baseAmount int64, feeType string, feeRateBP, feeFixedAmount int64) (int64, error) { if baseAmount < 0 || feeRateBP < 0 || feeFixedAmount < 0 { return 0, errors.New("订单金额或手续费配置无效") } switch feeType { case model.FeeTypeFixed: return feeFixedAmount, nil case model.FeeTypeRate, "": if feeRateBP > 10000 { return 0, errors.New("手续费比例不能超过 10000 BP") } if feeRateBP > 0 && baseAmount > math.MaxInt64/feeRateBP { return 0, errors.New("手续费金额超出范围") } return baseAmount * feeRateBP / 10000, nil default: return 0, errors.New("无效的手续费类型") } }