From 3eefe1a67f8fed5add49749599d2cb712831317b Mon Sep 17 00:00:00 2001 From: yumoqing Date: Fri, 5 Jun 2026 18:26:30 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20pricing=5Fdisplay=20=E4=B8=8D=E4=B9=98un?= =?UTF-8?q?it=5Fval=20+=20=E6=B7=BB=E5=8A=A0=E5=8F=AF=E8=AF=BBdisplay=5Fte?= =?UTF-8?q?xt=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. 新格式 unit_prices 已是展示价,不再乘以 unit_val 2. tiered 定价同步修复 3. 返回增加 display_text 字段,格式如官网价格表 --- pricing/pricing.py | 32 ++++++++++++++++++++++++-------- 1 file changed, 24 insertions(+), 8 deletions(-) diff --git a/pricing/pricing.py b/pricing/pricing.py index fee627b..5a23b7a 100644 --- a/pricing/pricing.py +++ b/pricing/pricing.py @@ -842,12 +842,8 @@ async def get_pricing_display(ppid): fdef = fields.get(factor_name, {}) factor_label = fdef.get('label', factor_name) if isinstance(fdef, dict) else factor_name - # 单位换算:unit_price 存储的是原始单价(如 4e-06 元/token), - # 展示时需要乘以单位值(如 百万=1000000)得到人类可读价格(如 4 元/百万token) - unit_val = unit_values.get(unit_str, 1) - if isinstance(unit_val, str): - unit_val = float(unit_val) - display_price = unit_price * unit_val + # 新格式 unit_prices 已是展示价(如 6.0 元/百万),无需再乘 unit_val + display_price = unit_price # 构建 unit_label (元/单位) unit_label = f"元/{unit_str}" if unit_str else "元" @@ -869,7 +865,7 @@ async def get_pricing_display(ppid): fi_copy.pop('unit_prices', None) tiered_pricing.append({ 'filters': fi_copy, - 'unit_prices': raw_tier_price * unit_val + 'unit_prices': raw_tier_price # 新格式已是展示价 }) if tiered_pricing: price_factors_display[0]['tiered'] = tiered_pricing @@ -907,11 +903,31 @@ async def get_pricing_display(ppid): 'formula': p.get('formula', '') }) + # 生成可读价格表 + display_lines = [f"【{getattr(r, 'name', '')}】定价:"] + for item in items: + prefix = '' + if item.get('filter_labels'): + labels = ', '.join(f"{k}: {v}" for k, v in item['filter_labels'].items()) + prefix = f" ({labels})" + for pf in item.get('price_factors', []): + label = pf.get('label', pf.get('factor', '')) + up = pf.get('unit_price') + ul = pf.get('unit_label', '') + if up is not None: + display_lines.append(f" - {label}: {up} {ul}{prefix}") + if pf.get('tiered'): + for t in pf['tiered']: + t_filters = ', '.join(f"{k}={v}" for k, v in t.get('filters', {}).items()) + t_price = t.get('unit_prices', '') + display_lines.append(f" · {t_filters}: {t_price} {ul}") + return { 'ppid': ppid, 'name': getattr(r, 'name', ''), 'pricing_type': pricing_type, - 'items': items + 'items': items, + 'display_text': '\n'.join(display_lines) }