81 lines
3.0 KiB
Go
81 lines
3.0 KiB
Go
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
|
||
}
|
||
}
|