import json async def main(request, params_kw): """ 查询某产品在有效供销合同下的折扣信息。 参数: productid, prodtypeid(可选) 折扣查找优先级: 1. 精确匹配 productid 2. 匹配 prodtypeid 3. 使用合同默认折扣 """ user_orgid = await get_userorgid() dbname = get_module_dbname('supplychain') productid = params_kw.get("productid") prodtypeid = params_kw.get("prodtypeid") if not productid: return json.dumps({"status": "error", "message": "缺少productid参数"}) config = getConfig(".") DBPools(config.databases) async with db.sqlorContext(dbname) as sor: # Try exact product match sql = """SELECT sci.id, sci.contract_id, sci.discount, sci.settlement_price, sc.contract_code, sc.contract_name, sc.supplier_id, s.supplier_name FROM supply_contract_items sci JOIN supply_contracts sc ON sci.contract_id = sc.id LEFT JOIN suppliers s ON sc.supplier_id = s.id WHERE sci.resellerid = ${resellerid}$ AND sc.status = '1' AND sc.start_date <= CURDATE() AND (sc.end_date IS NULL OR sc.end_date >= CURDATE()) AND sci.productid = ${productid}$ ORDER BY sc.start_date DESC""" recs = await sor.sqlExe(sql, {"resellerid": user_orgid, "productid": productid}) if not recs and prodtypeid: sql = """SELECT sci.id, sci.contract_id, sci.discount, sci.settlement_price, sc.contract_code, sc.contract_name, sc.supplier_id, s.supplier_name FROM supply_contract_items sci JOIN supply_contracts sc ON sci.contract_id = sc.id LEFT JOIN suppliers s ON sc.supplier_id = s.id WHERE sci.resellerid = ${resellerid}$ AND sc.status = '1' AND sc.start_date <= CURDATE() AND (sc.end_date IS NULL OR sc.end_date >= CURDATE()) AND sci.prodtypeid = ${prodtypeid}$ ORDER BY sc.start_date DESC""" recs = await sor.sqlExe(sql, {"resellerid": user_orgid, "prodtypeid": prodtypeid}) if not recs: # Fallback to contract default sql = """SELECT id as contract_id, contract_code, contract_name, supplier_id, default_discount as discount, NULL as settlement_price FROM supply_contracts WHERE resellerid = ${resellerid}$ AND status = '1' AND start_date <= CURDATE() AND (end_date IS NULL OR end_date >= CURDATE()) ORDER BY start_date DESC""" recs = await sor.sqlExe(sql, {"resellerid": user_orgid}) result = [dict(r) for r in recs] if recs else [] return json.dumps({"status": "ok", "data": result})