feat(distribution): 分站可下调收号比例且不超过主站上限

让分销站能按自身能力下调收号比例扩大利润,同时把主站回收比例作为硬边界,避免分站把比例加得比主站更高。

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
yml2213
2026-09-15 20:35:30 +08:00
co-authored by Cursor
parent 1c86bef765
commit c9d9160ff4
27 changed files with 1159 additions and 106 deletions
@@ -2,6 +2,7 @@ package listing
import (
"context"
"strings"
)
func (s *Service) Create(ctx context.Context, ownerID uint64, req CreateRequest, siteCode ...string) (*ListingDTO, error) {
@@ -11,6 +12,14 @@ func (s *Service) Create(ctx context.Context, ownerID uint64, req CreateRequest,
if !req.AgreedVirtualAssetSale || !req.AgreedSellerAgreement {
return nil, ErrAgreementRequired
}
effectiveSiteCode := ""
if len(siteCode) > 0 {
effectiveSiteCode = strings.TrimSpace(siteCode[0])
}
delta, onDistribution := s.repo.ResolveReceiveRatioDelta(ctx, 0, effectiveSiteCode)
if err := s.applyMainSiteReceivePricing(ctx, &req, delta, onDistribution); err != nil {
return nil, err
}
rules, err := s.publishRules(ctx)
if err != nil {
return nil, err
@@ -29,17 +38,21 @@ func (s *Service) Create(ctx context.Context, ownerID uint64, req CreateRequest,
if err != nil {
return nil, err
}
effectiveSiteCode := ""
if len(siteCode) > 0 {
effectiveSiteCode = siteCode[0]
}
return s.repo.Create(ctx, ownerID, req, reviewRequired, cooldown, effectiveSiteCode)
}
func (s *Service) Update(ctx context.Context, ownerID uint64, id uint64, req UpdateRequest) (*ListingDTO, error) {
func (s *Service) Update(ctx context.Context, ownerID uint64, id uint64, req UpdateRequest, siteCode ...string) (*ListingDTO, error) {
if s.repo == nil {
return nil, ErrDependencyUnavailable
}
effectiveSiteCode := ""
if len(siteCode) > 0 {
effectiveSiteCode = strings.TrimSpace(siteCode[0])
}
delta, onDistribution := s.repo.ResolveReceiveRatioDelta(ctx, id, effectiveSiteCode)
if err := s.applyMainSiteReceivePricing(ctx, &req, delta, onDistribution); err != nil {
return nil, err
}
rules, err := s.publishRules(ctx)
if err != nil {
return nil, err