refactor(exports): 移除冗余字段去重逻辑以简化代码
- 删除与主表和副表字段去重相关的冗余逻辑,提升代码可读性 - 移除易码通客户名称字段的去重逻辑,简化字段管理 - 优化相同列名去重逻辑,确保主表字段优先保留 - 更新日志记录逻辑,确保字段去重事件的清晰记录
This commit is contained in:
parent
143199dcd3
commit
8e4d2b4790
|
|
@ -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)})
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue