Quellcode durchsuchen

fix(sort): sort_order=0 的记录排到最后,非0值按升序排列

模型和供应商查询统一排序规则:sort_order=0 视为未设置排到最后,
非0值按升序排列。涉及 GetAllModels、SearchModels、GetAllVendors、
SearchVendors 以及 pricing 的内存排序。

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
master
fengsilin vor 2 Wochen
Ursprung
Commit
3b99c83e32
3 geänderte Dateien mit 27 neuen und 7 gelöschten Zeilen
  1. +2
    -2
      model/model_meta.go
  2. +23
    -3
      model/pricing.go
  3. +2
    -2
      model/vendor_meta.go

+ 2
- 2
model/model_meta.go Datei anzeigen

@@ -118,7 +118,7 @@ func GetVendorModelCounts() (map[int64]int64, error) {

func GetAllModels(offset int, limit int) ([]*Model, error) {
var models []*Model
err := DB.Order("sort_order ASC, id ASC").Offset(offset).Limit(limit).Find(&models).Error
err := DB.Order("CASE WHEN sort_order = 0 THEN 1 ELSE 0 END ASC, sort_order ASC, id ASC").Offset(offset).Limit(limit).Find(&models).Error
return models, err
}

@@ -166,7 +166,7 @@ func SearchModels(keyword string, vendor string, offset int, limit int) ([]*Mode
if err := db.Count(&total).Error; err != nil {
return nil, 0, err
}
if err := db.Order("sort_order ASC, models.id ASC").Offset(offset).Limit(limit).Find(&models).Error; err != nil {
if err := db.Order("CASE WHEN sort_order = 0 THEN 1 ELSE 0 END ASC, sort_order ASC, models.id ASC").Offset(offset).Limit(limit).Find(&models).Error; err != nil {
return nil, 0, err
}
return models, total, nil


+ 23
- 3
model/pricing.go Datei anzeigen

@@ -183,6 +183,16 @@ func updatePricing() {
sort.Slice(vendorsList, func(i, j int) bool {
oi := vendorOrderMap[vendorsList[i].ID]
oj := vendorOrderMap[vendorsList[j].ID]
// 0 排到最后
if oi == 0 && oj == 0 {
return vendorsList[i].ID < vendorsList[j].ID
}
if oi == 0 {
return false
}
if oj == 0 {
return true
}
if oi != oj {
return oi < oj
}
@@ -336,13 +346,23 @@ func updatePricing() {
pricingMap = append(pricingMap, pricing)
}

// 按 sort_order 排序 pricingMap
// 按 sort_order 排序 pricingMap,0 排到最后
sort.Slice(pricingMap, func(i, j int) bool {
mi, okI := metaMap[pricingMap[i].ModelName]
mj, okJ := metaMap[pricingMap[j].ModelName]
if okI && okJ {
if mi.SortOrder != mj.SortOrder {
return mi.SortOrder < mj.SortOrder
si, sj := mi.SortOrder, mj.SortOrder
if si == 0 && sj == 0 {
return pricingMap[i].ModelName < pricingMap[j].ModelName
}
if si == 0 {
return false
}
if sj == 0 {
return true
}
if si != sj {
return si < sj
}
} else if okI {
return true


+ 2
- 2
model/vendor_meta.go Datei anzeigen

@@ -66,7 +66,7 @@ func GetVendorByID(id int) (*Vendor, error) {
// GetAllVendors 获取全部供应商(分页)
func GetAllVendors(offset int, limit int) ([]*Vendor, error) {
var vendors []*Vendor
err := DB.Order("sort_order ASC, id ASC").Offset(offset).Limit(limit).Find(&vendors).Error
err := DB.Order("CASE WHEN sort_order = 0 THEN 1 ELSE 0 END ASC, sort_order ASC, id ASC").Offset(offset).Limit(limit).Find(&vendors).Error
return vendors, err
}

@@ -82,7 +82,7 @@ func SearchVendors(keyword string, offset int, limit int) ([]*Vendor, int64, err
return nil, 0, err
}
var vendors []*Vendor
if err := db.Order("sort_order ASC, id ASC").Offset(offset).Limit(limit).Find(&vendors).Error; err != nil {
if err := db.Order("CASE WHEN sort_order = 0 THEN 1 ELSE 0 END ASC, sort_order ASC, id ASC").Offset(offset).Limit(limit).Find(&vendors).Error; err != nil {
return nil, 0, err
}
return vendors, total, nil


Laden…
Abbrechen
Speichern