- 后端 internal/service 按职责拆分: fulfillment.go(1397→527)拆出 wallet/timeout/data/order/query/dashboard/shipnotify delivery.go(1124→801)拆出 upstream/link/state/helpers merchant.go(855→251)拆出 member/product/api_client/catalog/helpers - 前端 MerchantCenter.tsx(1327→606)拆出 merchantCenterTabs/merchantCenterUtils - docker-compose backend 透传 CORS_ALLOWED_ORIGINS - CORS 白名单实现(config/router/README/.env.example 配套) - 修复 gofmt 与文件尾部多余空行
46 lines
1.3 KiB
Go
46 lines
1.3 KiB
Go
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("无效的手续费类型")
|
|
}
|
|
}
|