From 2fcd33cdba15bb9299b893676e3fdec98cd4c5b7 Mon Sep 17 00:00:00 2001 From: yumoqing Date: Mon, 6 Jul 2026 15:03:06 +0800 Subject: [PATCH] feat: get_pricing_display supports optional model filter - Add model parameter to filter displayed pricing items to a single model - DSPY endpoint accepts ?model=xxx param - Backward compatible: omitting model returns all items --- pricing/pricing.py | 21 ++++++++++++++++++++- wwwroot/api/get_pricing_display.dspy | 3 ++- 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/pricing/pricing.py b/pricing/pricing.py index 8cafe61..d6d936a 100644 --- a/pricing/pricing.py +++ b/pricing/pricing.py @@ -753,9 +753,13 @@ def generate_formula_from_factors(price_factors): return formula -async def get_pricing_display(ppid): +async def get_pricing_display(ppid, model=None): """获取定价项目的可读定价数据,供客户/前端展示。 + Args: + ppid: 定价项目ID + model: 可选,按模型名过滤,只返回匹配该模型的定价项 + 返回结构: { "ppid": "...", @@ -915,6 +919,21 @@ async def get_pricing_display(ppid): item['formula'] = p['formula'] items.append(item) + # 按模型过滤:只返回匹配该模型的定价项 + if model: + filtered_items = [] + for item in items: + item_model = None + # 从 filters dict 中取 model + if item.get('filters') and isinstance(item['filters'], dict): + item_model = item['filters'].get('model') + # 从 filter_labels 中取(用 key 名"模型"查找) + if not item_model and item.get('filter_labels'): + item_model = item['filter_labels'].get('模型') + if item_model == model: + filtered_items.append(item) + items = filtered_items + # 生成可读价格表 display_lines = [f"【{getattr(r, 'name', '')}】定价:"] for item in items: diff --git a/wwwroot/api/get_pricing_display.dspy b/wwwroot/api/get_pricing_display.dspy index 244735a..16a75c1 100644 --- a/wwwroot/api/get_pricing_display.dspy +++ b/wwwroot/api/get_pricing_display.dspy @@ -1,9 +1,10 @@ ppid = params_kw.get('ppid') +model = params_kw.get('model') if not ppid: return json.dumps({"status": "error", "message": "ppid parameter required"}, ensure_ascii=False) try: - result = await get_pricing_display(ppid) + result = await get_pricing_display(ppid, model) return json.dumps({"status": "ok", "data": result}, ensure_ascii=False, default=str) except Exception as e: exception(f'get_pricing_display({ppid}) failed: {e}\n{format_exc()}')