Merge branch 'main-v2' into lite-ba

This commit is contained in:
TsMask
2025-10-14 18:07:34 +08:00
40 changed files with 266 additions and 193 deletions

View File

@@ -2,7 +2,6 @@ package repository
import (
"fmt"
"sort"
"strings"
"time"
@@ -61,58 +60,21 @@ func (r UEEvent) SelectByPage(neType string, query map[string]string) ([]model.U
tx = tx.Offset(int(pageNum * pageSize)).Limit(int(pageSize))
}
// 排序
if v, ok := query["sortField"]; ok && v != "" {
sortOrder := "asc"
if o, ok := query["sortOrder"]; ok && o != "" {
if o != "asc" {
sortOrder = "desc"
}
}
tx = tx.Order(fmt.Sprintf("%s %s", v, sortOrder))
}
// 查询数据
if err := tx.Find(&rows).Error; err != nil {
logger.Errorf("query err => %v", err)
}
// 排序
if v, ok := query["sortField"]; ok && v != "" {
sortField := v
sortOrder := "asc"
if o, ok := query["sortOrder"]; ok && o != "" {
if o == "desc" {
sortOrder = "desc"
} else {
sortOrder = "asc"
}
}
sort.SliceStable(rows, func(i, j int) bool {
// 支持的排序字段映射
fieldGetters := map[string]func(*model.UEEvent) any{
"id": func(row *model.UEEvent) any { return row.ID },
"timestamp": func(row *model.UEEvent) any { return row.CreatedAt },
"createdAt": func(row *model.UEEvent) any { return row.CreatedAt },
// 可添加更多支持的字段
}
// 获取字段 getter 函数
getter, ok := fieldGetters[sortField]
if !ok {
// 非法字段使用默认排序id升序
return rows[i].ID < rows[j].ID
}
// 获取比较值
valI, valJ := getter(&rows[i]), getter(&rows[j])
// 根据字段类型进行比较
switch v := valI.(type) {
case int64:
if sortOrder == "desc" {
return v > valJ.(int64)
}
return v < valJ.(int64)
case string:
if sortOrder == "desc" {
return v > valJ.(string)
}
return v < valJ.(string)
default:
// 不支持的字段类型,使用默认排序
return rows[i].ID < rows[j].ID
}
})
return rows, total
}
return rows, total
}