perf(query): 优化后台手机号精确查询
This commit is contained in:
@@ -877,14 +877,30 @@ func (r *Repository) ListAdminInvitations(ctx context.Context, query AdminInvita
|
||||
Joins("LEFT JOIN users invitee ON invitee.id = ui.invitee_id")
|
||||
|
||||
if p := strings.TrimSpace(query.Phone); p != "" {
|
||||
like := "%" + p + "%"
|
||||
db = db.Where("(inviter.phone LIKE ? OR invitee.phone LIKE ?)", like, like)
|
||||
if isPhoneKeyword(p) {
|
||||
db = db.Where(
|
||||
"(ui.inviter_id = (SELECT id FROM users WHERE phone = ?) OR ui.invitee_id = (SELECT id FROM users WHERE phone = ?))",
|
||||
p,
|
||||
p,
|
||||
)
|
||||
} else {
|
||||
like := "%" + p + "%"
|
||||
db = db.Where("(inviter.phone LIKE ? OR invitee.phone LIKE ?)", like, like)
|
||||
}
|
||||
}
|
||||
if p := strings.TrimSpace(query.InviterPhone); p != "" {
|
||||
db = db.Where("inviter.phone LIKE ?", "%"+p+"%")
|
||||
if isPhoneKeyword(p) {
|
||||
db = db.Where("ui.inviter_id = (SELECT id FROM users WHERE phone = ?)", p)
|
||||
} else {
|
||||
db = db.Where("inviter.phone LIKE ?", "%"+p+"%")
|
||||
}
|
||||
}
|
||||
if p := strings.TrimSpace(query.InviteePhone); p != "" {
|
||||
db = db.Where("invitee.phone LIKE ?", "%"+p+"%")
|
||||
if isPhoneKeyword(p) {
|
||||
db = db.Where("ui.invitee_id = (SELECT id FROM users WHERE phone = ?)", p)
|
||||
} else {
|
||||
db = db.Where("invitee.phone LIKE ?", "%"+p+"%")
|
||||
}
|
||||
}
|
||||
if code := strings.TrimSpace(query.InviteCode); code != "" {
|
||||
db = db.Where("ui.invite_code LIKE ?", "%"+code+"%")
|
||||
@@ -1008,10 +1024,18 @@ func (r *Repository) adminRebateLedgerBase(ctx context.Context, query AdminRebat
|
||||
db = db.Where("irl.order_no LIKE ?", "%"+o+"%")
|
||||
}
|
||||
if p := strings.TrimSpace(query.InviterPhone); p != "" {
|
||||
db = db.Where("inviter.phone LIKE ?", "%"+p+"%")
|
||||
if isPhoneKeyword(p) {
|
||||
db = db.Where("irl.inviter_id = (SELECT id FROM users WHERE phone = ?)", p)
|
||||
} else {
|
||||
db = db.Where("inviter.phone LIKE ?", "%"+p+"%")
|
||||
}
|
||||
}
|
||||
if p := strings.TrimSpace(query.InviteePhone); p != "" {
|
||||
db = db.Where("invitee.phone LIKE ?", "%"+p+"%")
|
||||
if isPhoneKeyword(p) {
|
||||
db = db.Where("irl.invitee_id = (SELECT id FROM users WHERE phone = ?)", p)
|
||||
} else {
|
||||
db = db.Where("invitee.phone LIKE ?", "%"+p+"%")
|
||||
}
|
||||
}
|
||||
if t := strings.TrimSpace(query.TradeRole); t != "" {
|
||||
db = db.Where("irl.trade_role = ?", t)
|
||||
@@ -1050,6 +1074,18 @@ func parseAdminRebateDate(value string) (time.Time, bool) {
|
||||
return time.Time{}, false
|
||||
}
|
||||
|
||||
func isPhoneKeyword(s string) bool {
|
||||
if len(s) != 11 || s[0] != '1' {
|
||||
return false
|
||||
}
|
||||
for i := 0; i < len(s); i++ {
|
||||
if s[i] < '0' || s[i] > '9' {
|
||||
return false
|
||||
}
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
// ListAdminRebateLedgers 管理后台查询返利流水
|
||||
func (r *Repository) ListAdminRebateLedgers(ctx context.Context, query AdminRebateLedgerQuery) ([]map[string]any, int64, error) {
|
||||
if r == nil || r.db == nil {
|
||||
|
||||
Reference in New Issue
Block a user