MarketingSystemDataExportTool/server/internal/schema/marketing.go

81 lines
3.0 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package schema
type marketingSchema struct{}
func (marketingSchema) TableName(t string) string { return t }
func (marketingSchema) MapField(t, f string) (string, bool) { return f, true }
func (marketingSchema) BuildJoins(need map[string]bool, main string) []string {
out := []string{}
if need["order_detail"] {
// order_detail无id字段使用普通JOIN
out = append(out, " LEFT JOIN `order_detail` ON `order_detail`.order_number = `order`.order_number")
}
if need["order_cash"] {
// order_cash无id字段使用普通JOIN
out = append(out, " LEFT JOIN `order_cash` ON `order_cash`.order_number = `order`.order_number")
}
if need["order_voucher"] {
// MAX ID 子查询去重
out = append(out, " LEFT JOIN `order_voucher` ON `order_voucher`.id = (SELECT MAX(ov2.id) FROM `order_voucher` ov2 WHERE ov2.order_number = `order`.order_number)")
}
if need["plan"] || need["key_batch"] {
out = append(out, " LEFT JOIN `plan` ON `plan`.id = `order`.plan_id")
}
if need["key_batch"] {
// MAX ID 子查询去重
out = append(out, " LEFT JOIN `key_batch` ON `key_batch`.id = (SELECT MAX(kb2.id) FROM `key_batch` kb2 WHERE kb2.plan_id = `plan`.id)")
}
if need["code_batch"] {
// MAX ID 子查询去重
out = append(out, " LEFT JOIN `code_batch` ON `code_batch`.id = (SELECT MAX(cb2.id) FROM `code_batch` cb2 WHERE cb2.key_batch_id = `key_batch`.id)")
}
if need["voucher"] {
out = append(out, " LEFT JOIN `voucher` ON `voucher`.id = (SELECT MAX(v2.id) FROM `voucher` v2 WHERE v2.channel_activity_id = `order_voucher`.channel_activity_id)")
}
if need["voucher_batch"] {
out = append(out, " LEFT JOIN `voucher_batch` ON `voucher_batch`.id = (SELECT MAX(vb2.id) FROM `voucher_batch` vb2 WHERE vb2.voucher_id = `voucher`.id)")
}
if need["merchant_key_send"] {
// MAX ID 子查询去重
out = append(out, " LEFT JOIN `merchant_key_send` ON `merchant_key_send`.id = (SELECT MAX(mks2.id) FROM `merchant_key_send` mks2 WHERE mks2.key = `order`.`key`)")
}
return out
}
func (marketingSchema) FilterColumn(key string) (string, string, bool) {
switch key {
case "creator_in":
return "order", "creator", true
case "create_time_between":
return "order", "create_time", true
case "type_eq":
return "order", "type", true
case "out_trade_no_eq":
return "order", "out_trade_no", true
case "account_eq":
return "order", "account", true
case "plan_id_eq":
return "order", "plan_id", true
case "key_batch_id_eq":
return "order", "key_batch_id", true
case "product_id_eq":
return "order", "product_id", true
case "reseller_id_eq":
return "order", "reseller_id", true
case "code_batch_id_eq":
return "order", "code_batch_id", true
case "order_cash_cash_activity_id_eq":
return "order_cash", "cash_activity_id", true
case "order_voucher_channel_activity_id_eq":
return "order_voucher", "channel_activity_id", true
case "voucher_batch_channel_activity_id_eq":
return "voucher_batch", "channel_activity_id", true
case "merchant_out_biz_no_eq":
return "merchant_key_send", "out_biz_no", true
default:
return "", "", false
}
}