From 91c579cff72ce5854fce2c228bbcfe62b1eb0862 Mon Sep 17 00:00:00 2001 From: yumoqing Date: Fri, 24 Jul 2026 16:08:15 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20product=5Fquery=5Fprice=E6=94=B9?= =?UTF-8?q?=E7=94=A8llm=5Fquery=5Fprice=E8=AE=A1=E4=BB=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- wwwroot/api/product_query_price.dspy | 98 ++++++++++++---------------- 1 file changed, 41 insertions(+), 57 deletions(-) diff --git a/wwwroot/api/product_query_price.dspy b/wwwroot/api/product_query_price.dspy index f516619..1b02d49 100644 --- a/wwwroot/api/product_query_price.dspy +++ b/wwwroot/api/product_query_price.dspy @@ -1,58 +1,42 @@ -# -*- coding: utf-8 -*- -"""查询产品价格(适配 platformbiz 调用方) -返回: {"price": 0.0, "currency": "CNY", "product_name": ""} -""" -import json +debug(f'{params_kw=}') +product_type = params_kw.product_type +product_id = params_kw.product_id +config_data = params_kw.config_data +keys = [k for k in config_data.keys()] +if 'off_peak' in keys: + off_peak = config_data.off_peak + if off_peak in ['Y', '1', 1]: + config_data.off_peak = True + elif off_peak in ['N', '0', 0]: + config_data.off_peak = False +debug(f'{config_data=}') +if product_type == 'llm': + try: + recs = await llm_query_price(product_id, config_data) + amount = 0 + original_amount = 0 + for r in recs: + amount += r.amount + if r.original_amount: + original_amount += r.original_amount -productid = params_kw.get('productid', '') -userorgid = params_kw.get('userorgid', '') - -if not productid: - return json.dumps({'error': 'missing productid'}, ensure_ascii=False) - -env = request._run_ns - -# Try product_management pricing first -try: - async with get_sor_context(env, 'product_management') as sor: - sql = """SELECT p.name, p.unit_price, p.currency, pp.program - FROM product p - LEFT JOIN product_pricing pp ON pp.productid = p.id AND pp.userorgid = ${userorgid}$ - WHERE p.id = ${productid}$ OR p.name = ${productid}$""" - recs = await sor.sqlExe(sql, {'productid': productid, 'userorgid': userorgid}) - if recs: - r = recs[0] - price = float(r.unit_price or 0) - if hasattr(r, 'program') and r.program: - try: - prog = json.loads(r.program) - price = float(prog.get('base_price', price)) - except Exception: - pass - return json.dumps({ - 'productid': productid, - 'product_name': r.name or productid, - 'price': price, - 'currency': r.currency or 'CNY', - 'unit_price': float(r.unit_price or 0), - }, ensure_ascii=False) -except Exception: - pass - -# Fallback: try platformbiz DB -try: - async with get_sor_context(env, 'platformbiz') as sor: - sql = """SELECT name, price, currency FROM product WHERE id = ${productid}$""" - recs = await sor.sqlExe(sql, {'productid': productid}) - if recs: - r = recs[0] - return json.dumps({ - 'productid': productid, - 'product_name': r.name or productid, - 'price': float(r.price or 0), - 'currency': 'CNY', - }, ensure_ascii=False) -except Exception: - pass - -return json.dumps({'productid': productid, 'price': 0, 'currency': 'CNY'}, ensure_ascii=False) + return { + "status": "ok", + "data": { + "amount": amount, + "original_amoutn": None if original_amount == 0 else original_amount + } + } + except Exception as e: + return { + "status": "error", + "data": { + "message": str(e) + } + } +return { + "status": "error", + "data": { + "message": f"{product_type=} 未知产品类型" + } +}