Files

90 lines
3.0 KiB
Go

package listing
import (
"context"
"strings"
"hfb_jysh/backend/internal/model"
)
// ReceiveCostDeltaBySiteCode 读取分站收号压价点数(新口径,收号比例 = R + 点数)。
func (r *Repository) ReceiveCostDeltaBySiteCode(ctx context.Context, siteCode string) float64 {
siteCode = strings.TrimSpace(siteCode)
if r == nil || r.db == nil || siteCode == "" {
return 0
}
var delta float64
_ = r.db.WithContext(ctx).Model(&model.DistributionSite{}).
Select("COALESCE(receive_cost_delta, 0)").
Where("site_code = ? AND status = 'active'", siteCode).
Limit(1).
Scan(&delta)
return NormalizeSiteReceiveCostDelta(delta)
}
// resolveSiteReceiveCostDelta 按站点编码或商品归属站点解析压价点数。
// 返回 onDistribution 表示当前上下文是否为分站(false 时压价不生效)。
func (r *Repository) resolveSiteReceiveCostDelta(ctx context.Context, listingID uint64, siteCode string) (float64, bool) {
if code := strings.TrimSpace(siteCode); code != "" {
return r.ReceiveCostDeltaBySiteCode(ctx, code), true
}
if r == nil || r.db == nil || listingID == 0 {
return 0, false
}
var siteID *uint64
if err := r.db.WithContext(ctx).Model(&model.RentalListing{}).
Select("distribution_site_id").
Where("id = ?", listingID).
Limit(1).
Scan(&siteID).Error; err != nil || siteID == nil || *siteID == 0 {
return 0, false
}
var delta float64
_ = r.db.WithContext(ctx).Model(&model.DistributionSite{}).
Select("COALESCE(receive_cost_delta, 0)").
Where("id = ? AND status = 'active'", *siteID).
Limit(1).
Scan(&delta)
return NormalizeSiteReceiveCostDelta(delta), true
}
// ReceiveRatioDeltaBySiteCode 旧口径(加价抢货)读取,保留只读兼容。
func (r *Repository) ReceiveRatioDeltaBySiteCode(ctx context.Context, siteCode string) float64 {
siteCode = strings.TrimSpace(siteCode)
if r == nil || r.db == nil || siteCode == "" {
return 0
}
var delta float64
_ = r.db.WithContext(ctx).Model(&model.DistributionSite{}).
Select("COALESCE(receive_ratio_delta, 0)").
Where("site_code = ? AND status = 'active'", siteCode).
Limit(1).
Scan(&delta)
return NormalizeSiteReceiveRatioDelta(delta)
}
// ResolveReceiveRatioDelta 旧口径解析入口,保留供旧快照读侧使用。
func (r *Repository) ResolveReceiveRatioDelta(ctx context.Context, listingID uint64, siteCode string) (float64, bool) {
if code := strings.TrimSpace(siteCode); code != "" {
return r.ReceiveRatioDeltaBySiteCode(ctx, code), true
}
if r == nil || r.db == nil || listingID == 0 {
return 0, false
}
var siteID *uint64
if err := r.db.WithContext(ctx).Model(&model.RentalListing{}).
Select("distribution_site_id").
Where("id = ?", listingID).
Limit(1).
Scan(&siteID).Error; err != nil || siteID == nil || *siteID == 0 {
return 0, false
}
var delta float64
_ = r.db.WithContext(ctx).Model(&model.DistributionSite{}).
Select("COALESCE(receive_ratio_delta, 0)").
Where("id = ? AND status = 'active'", *siteID).
Limit(1).
Scan(&delta)
return NormalizeSiteReceiveRatioDelta(delta), true
}