From 8e4d2b47909a633282f8dfe0f7f5fc02bff97ac1 Mon Sep 17 00:00:00 2001 From: zhouyonggao <1971162852@qq.com> Date: Wed, 17 Dec 2025 16:53:53 +0800 Subject: [PATCH] =?UTF-8?q?refactor(exports):=20=E7=A7=BB=E9=99=A4?= =?UTF-8?q?=E5=86=97=E4=BD=99=E5=AD=97=E6=AE=B5=E5=8E=BB=E9=87=8D=E9=80=BB?= =?UTF-8?q?=E8=BE=91=E4=BB=A5=E7=AE=80=E5=8C=96=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 删除与主表和副表字段去重相关的冗余逻辑,提升代码可读性 - 移除易码通客户名称字段的去重逻辑,简化字段管理 - 优化相同列名去重逻辑,确保主表字段优先保留 - 更新日志记录逻辑,确保字段去重事件的清晰记录 --- server/internal/api/exports.go | 105 --------------------------------- 1 file changed, 105 deletions(-) diff --git a/server/internal/api/exports.go b/server/internal/api/exports.go index 2fd1453..5494fee 100644 --- a/server/internal/api/exports.go +++ b/server/internal/api/exports.go @@ -262,46 +262,6 @@ func (a *ExportsAPI) create(w http.ResponseWriter, r *http.Request) { } filtered = deduped } - // 主表和副表相同字段去重:以主表为主,移除副表的重复字段 - if ds == "ymt" && (main == "order" || main == "order_info") { - mainTableFields := make(map[string]bool) - // 先收集主表的所有字段名 - for _, tf := range filtered { - parts := strings.Split(tf, ".") - if len(parts) == 2 && parts[0] == "order" { - mainTableFields[parts[1]] = true - } - } - if len(mainTableFields) > 0 { - deduped := make([]string, 0, len(filtered)) - removed := []string{} - for _, tf := range filtered { - parts := strings.Split(tf, ".") - if len(parts) == 2 { - if parts[0] == "order" { - // 主表字段,保留 - deduped = append(deduped, tf) - } else { - // 副表字段,检查是否与主表字段重复 - if mainTableFields[parts[1]] { - // 字段名重复,移除副表字段 - removed = append(removed, tf) - continue - } - // 字段名不重复,保留 - deduped = append(deduped, tf) - } - } else { - // 格式不正确,保留原样 - deduped = append(deduped, tf) - } - } - if len(removed) > 0 { - logging.JSON("INFO", map[string]interface{}{"event": "fields_deduplicated", "removed": removed, "reason": "主表和副表存在相同字段,以主表为主"}) - } - filtered = deduped - } - } // 易码通立减金:保留 order_voucher.grant_time,移除红包领取时间列,避免“领取时间”为空 if ds == "ymt" && tv == 3 { deduped := make([]string, 0, len(filtered)) @@ -318,72 +278,7 @@ func (a *ExportsAPI) create(w http.ResponseWriter, r *http.Request) { } filtered = deduped } - // 易码通客户名称字段去重:若同时选择 order.merchant_name 与 merchant.name,仅保留 merchant.name - if ds == "ymt" { - hasOrderMerchant := false - hasMerchantName := false - for _, tf := range filtered { - if tf == "order.merchant_name" { - hasOrderMerchant = true - } - if tf == "merchant.name" { - hasMerchantName = true - } - } - if hasOrderMerchant && hasMerchantName { - deduped := make([]string, 0, len(filtered)) - removed := []string{} - for _, tf := range filtered { - if tf == "order.merchant_name" { - removed = append(removed, tf) - continue - } - deduped = append(deduped, tf) - } - if len(removed) > 0 { - logging.JSON("INFO", map[string]interface{}{"event": "fields_deduplicated_customer_name", "removed": removed, "reason": "易码通客户名称仅保留 merchant.name"}) - } - filtered = deduped - } - } labels := FieldLabels() - // 相同列名(中文标签)去重:如果多个表的字段共享同一列名,优先保留主表字段 - { - labelIdx := map[string]int{} - deduped := make([]string, 0, len(filtered)) - removed := []string{} - for _, tf := range filtered { - label := labels[tf] - if label == "" { - label = tf - } - parts := strings.Split(tf, ".") - isMain := len(parts) == 2 && parts[0] == main - if idx, ok := labelIdx[label]; ok { - prev := deduped[idx] - prevParts := strings.Split(prev, ".") - prevMain := len(prevParts) == 2 && prevParts[0] == main - switch { - case prevMain: - removed = append(removed, tf) - continue - case isMain: - removed = append(removed, prev) - deduped[idx] = tf - continue - default: - removed = append(removed, tf) - continue - } - } - labelIdx[label] = len(deduped) - deduped = append(deduped, tf) - } - if len(removed) > 0 { - logging.JSON("INFO", map[string]interface{}{"event": "fields_deduplicated_by_label", "removed": removed, "reason": "同名列优先保留主表字段"}) - } - filtered = deduped - } // 字段匹配校验(数量与顺序) if len(filtered) != len(fs) { logging.JSON("ERROR", map[string]interface{}{"event": "field_count_mismatch", "template_count": len(fs), "final_count": len(filtered)})