倍率问题和图片问题调整

This commit is contained in:
andy
2026-09-23 13:33:47 +08:00
parent f1993eb388
commit 3f29ba716a
20 changed files with 1210 additions and 24 deletions

View File

@@ -4,7 +4,7 @@ import {
updateBillingPriceRule,
type BillingPriceRuleInput
} from "@/lib/server/billing-store";
import type { BillingPriceRule } from "@/lib/types";
import type { BillingParameterDimension, BillingPriceRule } from "@/lib/types";
export const BILLING_USD_CNY_RATE = 7.2;
export const DEFAULT_BILLING_MARKUP_MULTIPLIER = 1.2;
@@ -390,7 +390,7 @@ export async function ensureDefaultBillingPriceRules(): Promise<BillingPriceRule
priority: candidate.priority,
note: candidate.note,
source: candidate.source,
parameterDimensions: candidate.parameterDimensions
parameterDimensions: mergeParameterDimensions(candidate.parameterDimensions, existingRule.parameterDimensions)
});
if (updated) {
const index = existing.findIndex((rule) => rule.id === updated.id);
@@ -412,6 +412,31 @@ export async function ensureDefaultBillingPriceRules(): Promise<BillingPriceRule
return [...existing, ...created];
}
function mergeParameterDimensions(
defaults: BillingParameterDimension[] | undefined,
saved: BillingParameterDimension[] | undefined
): BillingParameterDimension[] | undefined {
return defaults?.map((dimension) => {
const savedDimension = saved?.find((item) => item.key === dimension.key);
return {
...dimension,
tiers: dimension.tiers.map((tier) => {
const savedTier = savedDimension?.tiers.find((item) => String(item.value) === String(tier.value));
const savedMarkup = savedTier?.markupMultiplier;
return {
...tier,
markupMultiplier: typeof savedMarkup === "number"
&& Number.isFinite(savedMarkup)
&& savedMarkup >= 1
&& savedMarkup <= 1000
? savedMarkup
: tier.markupMultiplier
};
})
};
});
}
function priceRuleMatchKey(rule: Pick<BillingPriceRule, "provider" | "capability" | "reqKey" | "variantKey" | "conditions">): string {
const conditions = Object.fromEntries(Object.entries(rule.conditions || {}).sort(([left], [right]) => left.localeCompare(right)));
return [rule.provider, rule.capability, rule.reqKey || "", rule.variantKey || "", JSON.stringify(conditions)].join("\u0000");