package listing import ( "context" "strings" "hfb_sys/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 }