From 588e5be5d667bcef258e6763158c03fb3a3f6ad2 Mon Sep 17 00:00:00 2001 From: ymq Date: Sat, 8 Aug 2026 14:56:02 +0800 Subject: [PATCH] fix: _find_project fuzzy match in Python (avoid aiomysql % format issue) --- wwwroot/api/cockpit_chat.dspy | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/wwwroot/api/cockpit_chat.dspy b/wwwroot/api/cockpit_chat.dspy index 07ccbf0..96db287 100644 --- a/wwwroot/api/cockpit_chat.dspy +++ b/wwwroot/api/cockpit_chat.dspy @@ -447,12 +447,16 @@ async def _find_project(sor, name, org_id): {"name": name, "oid": org_id}) if recs: return recs[0] - # Fuzzy match: name contains keyword - # Use f-string for LIKE to avoid aiomysql % escaping issues - kw = name.replace("'", "''") - sql = f"SELECT id, name FROM sd_projects WHERE name LIKE '%{kw}%' AND org_id='{org_id}' LIMIT 1" - recs = await sor.sqlExe(sql, {}) - return recs[0] if recs else None + # Fuzzy: load all projects for this org and match in Python + all_recs = await sor.sqlExe( + "SELECT id, name FROM sd_projects WHERE org_id=${oid}$", + {"oid": org_id}) + kw = name.lower() + for rec in (all_recs or []): + rname = (getattr(rec, 'name', '') or '').lower() + if kw in rname: + return rec + return None # ==================== 问题路由 ====================