refactor(exports): 移除冗余字段去重逻辑以简化代码

- 删除与主表和副表字段去重相关的冗余逻辑,提升代码可读性
- 移除易码通客户名称字段的去重逻辑,简化字段管理
- 优化相同列名去重逻辑,确保主表字段优先保留
- 更新日志记录逻辑,确保字段去重事件的清晰记录
This commit is contained in:
zhouyonggao 2025-12-17 16:53:53 +08:00
parent 143199dcd3
commit 8e4d2b4790
1 changed files with 0 additions and 105 deletions

View File

@ -262,46 +262,6 @@ func (a *ExportsAPI) create(w http.ResponseWriter, r *http.Request) {
} }
filtered = deduped 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移除红包领取时间列避免“领取时间”为空 // 易码通立减金:保留 order_voucher.grant_time移除红包领取时间列避免“领取时间”为空
if ds == "ymt" && tv == 3 { if ds == "ymt" && tv == 3 {
deduped := make([]string, 0, len(filtered)) deduped := make([]string, 0, len(filtered))
@ -318,72 +278,7 @@ func (a *ExportsAPI) create(w http.ResponseWriter, r *http.Request) {
} }
filtered = deduped 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() 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) { if len(filtered) != len(fs) {
logging.JSON("ERROR", map[string]interface{}{"event": "field_count_mismatch", "template_count": len(fs), "final_count": len(filtered)}) logging.JSON("ERROR", map[string]interface{}{"event": "field_count_mismatch", "template_count": len(fs), "final_count": len(filtered)})