From 553704c8361f616dda2400a5cb1a4296a31c7588 Mon Sep 17 00:00:00 2001 From: zhouyonggao <1971162852@qq.com> Date: Wed, 17 Dec 2025 20:01:51 +0800 Subject: [PATCH] =?UTF-8?q?fix(exports):=20=E4=BC=98=E5=8C=96=E5=AF=BC?= =?UTF-8?q?=E5=87=BA=E6=8E=A5=E5=8F=A3=E7=9A=84=E8=A1=8C=E6=95=B0=E4=BC=B0?= =?UTF-8?q?=E7=AE=97=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 修改估算行数的回退逻辑,使用精确 COUNT 替代原先的快速估算 - 添加日志记录精确统计阶段的相关信息,便于跟踪统计过程 - 修正导出接口的估算准确性,提升导出性能和稳定性 fix(metadata): 隐藏 marketingMetadataTables 中键“绑定类型”字段 - 将绑定类型字段的 Hidden 属性由 false 改为 true - 避免绑定类型字段在某些场景下被展示 - 保持批次相关字段显示的合理性和安全性 --- server/internal/api/exports.go | 16 ++++++++++++++-- server/internal/api/metadata.go | 2 +- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/server/internal/api/exports.go b/server/internal/api/exports.go index 15acdb9..bbad569 100644 --- a/server/internal/api/exports.go +++ b/server/internal/api/exports.go @@ -305,7 +305,7 @@ func (a *ExportsAPI) create(w http.ResponseWriter, r *http.Request) { fail(w, r, http.StatusBadRequest, fmt.Sprintf("EXPLAIN 未通过:评分=%d,请优化索引或缩小查询范围", score)) return } - // 估算行数(优先使用分块统计,失败或结果为 0 时回退到单次 COUNT) + // 估算行数(优先使用分块统计,失败或结果为 0 时回退到精确 COUNT) var estimate int64 estimate = rrepo.EstimateFastChunked(dataDB, ds, main, p.Filters) if estimate <= 0 { @@ -314,8 +314,20 @@ func (a *ExportsAPI) create(w http.ResponseWriter, r *http.Request) { "datasource": ds, "main_table": main, "filters": p.Filters, + "stage": "fast_chunked", + "estimate": estimate, + }) + // 使用完整导出 SQL 做一次精确统计,避免分表/索引等原因导致估算为 0 + estimate = exporter.CountRows(dataDB, q, args) + logging.JSON("INFO", map[string]interface{}{ + "event": "estimate_exact_count", + "datasource": ds, + "main_table": main, + "filters": p.Filters, + "sql": q, + "args": args, + "estimate": estimate, }) - estimate = rrepo.EstimateFast(dataDB, ds, main, p.Filters) } hdrs := make([]string, len(filtered)) for i, tf := range filtered { diff --git a/server/internal/api/metadata.go b/server/internal/api/metadata.go index c741849..9eafdaf 100644 --- a/server/internal/api/metadata.go +++ b/server/internal/api/metadata.go @@ -95,7 +95,7 @@ func marketingMetadataTables() []tableInfo { {Key: "key_batch.plan_id", Field: "plan_id", Label: "计划编号", Hidden: true}, {Key: "key_batch.style", Field: "style", Label: "KEY样式", Hidden: false}, {Key: "key_batch.batch_name", Field: "batch_name", Label: "KEY批次名称", Hidden: false}, - {Key: "key_batch.bind_object", Field: "bind_object", Label: "绑定类型", Hidden: false}, + {Key: "key_batch.bind_object", Field: "bind_object", Label: "绑定类型", Hidden: true}, {Key: "key_batch.quantity", Field: "quantity", Label: "发放KEY数量", Hidden: true}, {Key: "key_batch.stock", Field: "stock", Label: "剩余库存信息", Hidden: true}, {Key: "key_batch.allow_repetition", Field: "allow_repetition", Label: "允许商品重复选择:1允许,0不允许", Hidden: true},