fix(query): 支持12位纯数字时间编号(如202609040184)商品编号的精准索引路由

This commit is contained in:
yml2213
2026-09-05 11:25:14 +08:00
parent a9125b1939
commit cd719fc355
9 changed files with 91 additions and 29 deletions
+5 -5
View File
@@ -125,11 +125,11 @@ func (r *Repository) adminDisputeCountQuery(ctx context.Context, query AdminList
return r.db.WithContext(ctx).Table("disputes AS d").
Joins("JOIN rental_orders AS o ON o.id = d.order_id")
}
if strings.HasPrefix(upper, "RO") || strings.HasPrefix(upper, "ORD") || (len(kw) >= 12 && isAllDigits(kw)) {
if strings.HasPrefix(upper, "RO") || strings.HasPrefix(upper, "ORD") {
return r.db.WithContext(ctx).Table("disputes AS d").
Joins("JOIN rental_orders AS o ON o.id = d.order_id")
}
if strings.HasPrefix(upper, "L") {
if strings.HasPrefix(upper, "L") || (len(kw) >= 12 && isAllDigits(kw)) {
return r.db.WithContext(ctx).Table("disputes AS d").
Joins("JOIN rental_orders AS o ON o.id = d.order_id").
Joins("JOIN rental_listings AS l ON l.id = o.listing_id")
@@ -155,11 +155,11 @@ func applyAdminListFilters(db *gorm.DB, query AdminListQuery) *gorm.DB {
if len(keyword) == 11 && keyword[0] == '1' && isAllDigits(keyword) {
// 11 位手机号:命中 users(phone) 唯一索引
db = db.Where("(owner.phone = ? OR renter.phone = ?)", keyword, keyword)
} else if strings.HasPrefix(upper, "RO") || strings.HasPrefix(upper, "ORD") || (len(keyword) >= 12 && isAllDigits(keyword)) {
} else if strings.HasPrefix(upper, "RO") || strings.HasPrefix(upper, "ORD") {
// 订单号:命中 rental_orders(order_no) 唯一索引
db = db.Where("o.order_no = ?", keyword)
} else if strings.HasPrefix(upper, "L") {
// 商品编号:命中 rental_listings(listing_no) 唯一索引
} else if strings.HasPrefix(upper, "L") || (len(keyword) >= 12 && isAllDigits(keyword)) {
// 商品编号(如 L前缀或时间计算生成的 12位纯数字如 202609040184):命中 rental_listings(listing_no) 唯一索引
db = db.Where("l.listing_no = ?", keyword)
} else if id, err := strconv.ParseUint(keyword, 10, 64); err == nil && id > 0 && keyword[0] != '0' && id < 100000000 {
// 短纯数字 ID(非零开头):命中纠纷 ID、订单 ID 或关联 ID