From 850573feeb93e27451c7e2944903594b14488275 Mon Sep 17 00:00:00 2001 From: Nixevol Date: Wed, 24 Jun 2026 12:49:33 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20Metrix=20=E6=A8=A1=E5=BC=8F?= =?UTF-8?q?=E6=8A=A5=E8=A1=A8=20SQL=20=E5=9B=BA=E5=AE=9A=E6=8C=89=E6=9C=AC?= =?UTF-8?q?=E5=9C=B0=20ReportScript.sql=20=E6=89=A7=E8=A1=8C=EF=BC=88?= =?UTF-8?q?=E7=A7=BB=E9=99=A4=20script=5Fid=20=E6=AD=BB=E8=B7=AF=E5=BE=84?= =?UTF-8?q?=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/services/platform.py | 9 +++------ docs/project_context.md | 7 +++++++ 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/app/services/platform.py b/app/services/platform.py index a0af87b..48e7d60 100644 --- a/app/services/platform.py +++ b/app/services/platform.py @@ -103,13 +103,10 @@ class PlatformClient: time.sleep(interval) raise TimeoutError(f"导入任务 {job_id} 超过 {max_wait}s 仍未完成") - def run_script(self, conn_id: str, script_id: int | None = None, content: str = "", + def run_script(self, conn_id: str, content: str = "", database: str = "", single_session: bool = False, run_timeout: int = 7200) -> dict: - body: dict = {"database": database, "stop_on_error": True, "single_session": single_session} - if content: - body["content"] = content - if script_id is not None: - body["script_id"] = int(script_id) + # 始终按传入的 SQL 文本执行(来自本地 ReportScript.sql),不走 Metrix 库内脚本(script_id)那条路。 + body: dict = {"content": content, "database": database, "stop_on_error": True, "single_session": single_session} resp = self.session.post( f"{self.base}/api/databases/{conn_id}/run-script", json=body, diff --git a/docs/project_context.md b/docs/project_context.md index d450077..4cd48b2 100644 --- a/docs/project_context.md +++ b/docs/project_context.md @@ -687,3 +687,10 @@ - 授权默认到期日:`app/services/license.py::DEFAULT_EXPIRES_ON` 由 `2026-06-20` 改为 `2026-12-30`,前端兜底文案(`FileWorkflow.vue`、`LicenseActivationModal.vue`)同步;授权功能本身保留(连点品牌图标 8 次打开延期窗口)。 - 设置页排版:`styles.css` 的 `.settings-database-stack` 由纵向 `column` 改为 `row wrap`,子卡 `flex:1 1 360px;min-width:320px`,宽屏并排、窄屏自动换行;「处理历史保留」卡加 `work-card-narrow`(`flex-grow:0` + `max-width`)显著收窄;规则同时作用于「数据源/仓库」与「数据库」两个标签页;清理已失效的 `.settings-token-panel` 规则。 - 验证:`python -m compileall app` 通过;前端 `npm run build`(vue-tsc)通过,产物中不再出现 swagger/ApiDocs chunk。 + +## 2026-06-24:Metrix 模式报表 SQL 固定按本地 ReportScript.sql 执行(移除库内脚本 script_id 死路径) + +- 背景:Metrix 平台 `POST /run-script` 同时支持 `content`(直接执行 SQL 文本)与 `script_id`(执行平台数据库里保存的脚本,且 `script_id` 会覆盖 `content`)。CapacityReport 期望「无论哪种触发,Metrix 模式都执行本应用本地的 `ReportScript.sql`」,不使用平台库内保存的脚本。 +- 现状确认:`pipeline.py`/`warehouse.py` 所有 `run_script` 调用本就只传 `content`(报表 SQL 来自 `read_report_sql()` 读取本地 `ReportScript.sql`),从不传 `script_id`,行为已正确。 +- 改动:`app/services/platform.py::run_script` 删除一直未被调用的 `script_id` 参数与对应 body 分支,方法只构造 `content`,从代码层面杜绝走平台库内脚本那条路;签名由 `(conn_id, script_id=None, content="", ...)` 改为 `(conn_id, content="", ...)`,现有调用全用 `content=` 关键字、`conn_id` 位置参,未受影响。 +- 验证:`python -m compileall app` 通过;全仓 `app` 内除该行注释外无 `script_id` 引用。