倍率问题和图片问题调整
This commit is contained in:
1 parent
f1993eb388
commit
3f29ba716a
20 files changed
+1210
-24
No files matched your search
@@ -8,11 +8,44 @@ import (
|
||||
"git.nianxx.cn/wangxuming/NianAIGC/backend/internal/billing"
|
||||
)
|
||||
|
||||
// Merge each default tier with only its saved administrator markup. The default
|
||||
// tier order, factors and metadata remain authoritative. One UPSERT keeps the
|
||||
// merge atomic with concurrent administrator price updates.
|
||||
const SeedBillingPriceRulesSQL = `INSERT INTO public.billing_price_rules (id, provider, capability, req_key, variant_key, unit, standard_unit_price_fen, markup_multiplier, enabled, conditions, quantity_source, priority, note, source, parameter_dimensions)
|
||||
SELECT rule->>'id', rule->>'provider', rule->>'capability', NULLIF(rule->>'reqKey', ''), NULLIF(rule->>'variantKey', ''), rule->>'unit', (rule->>'standardUnitPriceFen')::bigint, (rule->>'markupMultiplier')::numeric, COALESCE((rule->>'enabled')::boolean, true), COALESCE(rule->'conditions', '{}'::jsonb), NULLIF(rule->>'quantitySource', ''), COALESCE((rule->>'priority')::integer, 0), NULLIF(rule->>'note', ''), rule->'source', COALESCE(rule->'parameterDimensions', '[]'::jsonb)
|
||||
FROM jsonb_array_elements($1::jsonb) AS rule
|
||||
ON CONFLICT (provider, capability, COALESCE(req_key, ''), COALESCE(variant_key, ''), COALESCE(conditions, '{}'::jsonb)) DO UPDATE SET
|
||||
req_key = EXCLUDED.req_key, variant_key = EXCLUDED.variant_key, unit = EXCLUDED.unit, standard_unit_price_fen = EXCLUDED.standard_unit_price_fen, enabled = EXCLUDED.enabled, conditions = EXCLUDED.conditions, quantity_source = EXCLUDED.quantity_source, priority = EXCLUDED.priority, note = EXCLUDED.note, source = EXCLUDED.source, parameter_dimensions = EXCLUDED.parameter_dimensions, updated_at = now()`
|
||||
req_key = EXCLUDED.req_key, variant_key = EXCLUDED.variant_key, unit = EXCLUDED.unit, standard_unit_price_fen = EXCLUDED.standard_unit_price_fen, enabled = EXCLUDED.enabled, conditions = EXCLUDED.conditions, quantity_source = EXCLUDED.quantity_source, priority = EXCLUDED.priority, note = EXCLUDED.note, source = EXCLUDED.source,
|
||||
parameter_dimensions = (
|
||||
SELECT COALESCE(jsonb_agg(
|
||||
jsonb_set(default_dimension.dimension, '{tiers}', (
|
||||
SELECT COALESCE(jsonb_agg(
|
||||
CASE
|
||||
WHEN jsonb_typeof(existing_tier.tier->'markupMultiplier') = 'number'
|
||||
THEN CASE
|
||||
WHEN (existing_tier.tier->>'markupMultiplier')::numeric BETWEEN 1 AND 1000
|
||||
THEN jsonb_set(default_tier.tier, '{markupMultiplier}', existing_tier.tier->'markupMultiplier', true)
|
||||
ELSE default_tier.tier
|
||||
END
|
||||
ELSE default_tier.tier
|
||||
END ORDER BY default_tier.position
|
||||
), '[]'::jsonb)
|
||||
FROM jsonb_array_elements(COALESCE(default_dimension.dimension->'tiers', '[]'::jsonb)) WITH ORDINALITY AS default_tier(tier, position)
|
||||
LEFT JOIN LATERAL (
|
||||
SELECT old_tier.tier
|
||||
FROM jsonb_array_elements(COALESCE((
|
||||
SELECT old_dimension.dimension->'tiers'
|
||||
FROM jsonb_array_elements(COALESCE(billing_price_rules.parameter_dimensions, '[]'::jsonb)) AS old_dimension(dimension)
|
||||
WHERE old_dimension.dimension->>'key' = default_dimension.dimension->>'key'
|
||||
LIMIT 1
|
||||
), '[]'::jsonb)) AS old_tier(tier)
|
||||
WHERE old_tier.tier->>'value' = default_tier.tier->>'value'
|
||||
LIMIT 1
|
||||
) AS existing_tier ON true
|
||||
), true) ORDER BY default_dimension.position
|
||||
), '[]'::jsonb)
|
||||
FROM jsonb_array_elements(COALESCE(EXCLUDED.parameter_dimensions, '[]'::jsonb)) WITH ORDINALITY AS default_dimension(dimension, position)
|
||||
), updated_at = now()`
|
||||
|
||||
func (db *Database) SeedBillingPriceRules(ctx context.Context, rules []billing.PriceRule) error {
|
||||
if len(rules) == 0 {
|
||||
|
||||
Reference in new issue
Block a user