fix(query): 支持12位纯数字时间编号(如202609040184)商品编号的精准索引路由
This commit is contained in:
@@ -743,15 +743,12 @@ func applyAdminPickupFilters(db *gorm.DB, query AdminPickupQuery) *gorm.DB {
|
||||
} else if strings.HasPrefix(upper, "PK") || strings.HasPrefix(upper, "P") {
|
||||
// 提号编号:命中 admin_pickups(pickup_no) 唯一索引
|
||||
db = db.Where("p.pickup_no = ?", kw)
|
||||
} else if strings.HasPrefix(upper, "L") {
|
||||
// 商品编号:命中 rental_listings(listing_no) 唯一索引
|
||||
} else if strings.HasPrefix(upper, "L") || (len(kw) >= 12 && isAllDigits(kw)) {
|
||||
// 商品编号(如 L前缀或时间计算生成的 12位纯数字如 202609040184):命中 rental_listings(listing_no) 唯一索引
|
||||
db = db.Where("l.listing_no = ?", kw)
|
||||
} else if id, err := strconv.ParseUint(kw, 10, 64); err == nil && id > 0 && kw[0] != '0' && id < 100000000 {
|
||||
// 短纯数字 ID(非零开头):命中 admin_pickups 主键及关联 ID
|
||||
db = db.Where("(p.id = ? OR p.listing_id = ? OR p.account_id = ? OR p.owner_id = ?)", id, id, id, id)
|
||||
} else if len(kw) >= 12 && isAllDigits(kw) {
|
||||
// 12位以上纯数字可能为商品编号或提号编号
|
||||
db = db.Where("(p.pickup_no = ? OR l.listing_no = ?)", kw, kw)
|
||||
} else {
|
||||
like := "%" + kw + "%"
|
||||
db = db.Where(
|
||||
@@ -782,7 +779,7 @@ func (r *Repository) adminPickupCountQuery(ctx context.Context, query AdminPicku
|
||||
return r.db.WithContext(ctx).Table("admin_pickups AS p").
|
||||
Joins("JOIN users AS owner ON owner.id = p.owner_id")
|
||||
}
|
||||
if strings.HasPrefix(upper, "L") {
|
||||
if strings.HasPrefix(upper, "L") || (len(kw) >= 12 && isAllDigits(kw)) {
|
||||
return r.db.WithContext(ctx).Table("admin_pickups AS p").
|
||||
Joins("JOIN rental_listings AS l ON l.id = p.listing_id")
|
||||
}
|
||||
|
||||
@@ -736,9 +736,9 @@ func TestApplyAdminPickupFiltersSmartRouting(t *testing.T) {
|
||||
wantSQLFrag: "p.id = ? OR p.listing_id = ? OR p.account_id = ? OR p.owner_id = ?",
|
||||
},
|
||||
{
|
||||
name: "长纯数字路由至提号编号或商品编号",
|
||||
query: AdminPickupQuery{Keyword: "2026090510001234"},
|
||||
wantSQLFrag: "p.pickup_no = ? OR l.listing_no = ?",
|
||||
name: "12位时间计算的纯数字商品编号路由至rental_listings(listing_no)",
|
||||
query: AdminPickupQuery{Keyword: "202609040184"},
|
||||
wantSQLFrag: "l.listing_no = ?",
|
||||
},
|
||||
{
|
||||
name: "普通文字退回多列LIKE模糊匹配",
|
||||
|
||||
Reference in New Issue
Block a user