fix: 数据列表搜索条件排序问题
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
package repository
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
@@ -53,20 +54,18 @@ func (r Alarm) SelectByPage(querys model.AlarmQuery) ([]model.Alarm, int64) {
|
||||
return rows, total
|
||||
}
|
||||
|
||||
// 排序
|
||||
if querys.SortField != "" {
|
||||
sortField := querys.SortField
|
||||
if querys.SortOrder == "desc" {
|
||||
sortField = sortField + " desc"
|
||||
}
|
||||
tx = tx.Order(sortField)
|
||||
}
|
||||
|
||||
// 查询数据分页
|
||||
if querys.PageNum != 0 && querys.PageSize != 0 {
|
||||
pageNum, pageSize := datasource.PageNumSize(querys.PageNum, querys.PageSize)
|
||||
tx = tx.Limit(pageSize).Offset(pageSize * pageNum)
|
||||
err := tx.Find(&rows).Error
|
||||
if err != nil {
|
||||
}
|
||||
|
||||
// 排序
|
||||
if querys.SortField != "" {
|
||||
tx = tx.Order(fmt.Sprintf("%s %s", querys.SortField, querys.SortOrder))
|
||||
}
|
||||
|
||||
if err := tx.Find(&rows).Error; err != nil {
|
||||
logger.Errorf("query find err => %v", err.Error())
|
||||
return rows, total
|
||||
}
|
||||
|
||||
@@ -2,7 +2,6 @@ package repository
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"sort"
|
||||
"strings"
|
||||
|
||||
dborm "be.ems/lib/core/datasource"
|
||||
@@ -162,6 +161,15 @@ func (r *CDREventIMS) SelectPage(querys model.CDREventIMSQuery) map[string]any {
|
||||
result["total"] = total
|
||||
}
|
||||
|
||||
// 排序
|
||||
orderSql := ""
|
||||
if querys.SortField != "" {
|
||||
orderSql = fmt.Sprintf(" ORDER BY %s ASC ", querys.SortField)
|
||||
if querys.SortOrder == "desc" {
|
||||
orderSql = fmt.Sprintf(" ORDER BY %s DESC ", querys.SortField)
|
||||
}
|
||||
}
|
||||
|
||||
// 分页
|
||||
pageNum, pageSize := repo.PageNumSize(querys.PageNum, querys.PageSize)
|
||||
pageSql := " limit ?,? "
|
||||
@@ -169,53 +177,14 @@ func (r *CDREventIMS) SelectPage(querys model.CDREventIMSQuery) map[string]any {
|
||||
params = append(params, pageSize)
|
||||
|
||||
// 查询数据
|
||||
querySql := r.selectSql + whereSql + pageSql
|
||||
querySql := r.selectSql + whereSql + orderSql + pageSql
|
||||
results, err := datasource.RawDB("", querySql, params)
|
||||
if err != nil {
|
||||
logger.Errorf("query err => %v", err)
|
||||
}
|
||||
rows := r.convertResultRows(results)
|
||||
|
||||
// 排序
|
||||
if querys.SortField != "" {
|
||||
sort.SliceStable(rows, func(i, j int) bool {
|
||||
// 支持的排序字段映射
|
||||
fieldGetters := map[string]func(*model.CDREventIMS) any{
|
||||
"id": func(row *model.CDREventIMS) any { return row.ID },
|
||||
"timestamp": func(row *model.CDREventIMS) any { return row.Timestamp },
|
||||
// 可添加更多支持的字段
|
||||
}
|
||||
|
||||
// 获取字段 getter 函数
|
||||
getter, ok := fieldGetters[querys.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 querys.SortOrder == "desc" {
|
||||
return v > valJ.(int64)
|
||||
}
|
||||
return v < valJ.(int64)
|
||||
case string:
|
||||
if querys.SortOrder == "desc" {
|
||||
return v > valJ.(string)
|
||||
}
|
||||
return v < valJ.(string)
|
||||
default:
|
||||
// 不支持的字段类型,使用默认排序
|
||||
return rows[i].ID < rows[j].ID
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 转换实体
|
||||
rows := r.convertResultRows(results)
|
||||
result["rows"] = rows
|
||||
return result
|
||||
}
|
||||
@@ -271,49 +240,14 @@ func (r CDREventIMS) SelectByPage(querys model.CDREventIMSQuery) ([]model.CDREve
|
||||
tx = tx.Limit(pageSize).Offset(pageSize * pageNum)
|
||||
}
|
||||
|
||||
err := tx.Find(&rows).Error
|
||||
if err != nil {
|
||||
logger.Errorf("query find err => %v", err.Error())
|
||||
return rows, total
|
||||
}
|
||||
|
||||
// 排序
|
||||
if querys.SortField != "" {
|
||||
sort.SliceStable(rows, func(i, j int) bool {
|
||||
// 支持的排序字段映射
|
||||
fieldGetters := map[string]func(*model.CDREventIMS) any{
|
||||
"id": func(row *model.CDREventIMS) any { return row.ID },
|
||||
"timestamp": func(row *model.CDREventIMS) any { return row.Timestamp },
|
||||
// 可添加更多支持的字段
|
||||
tx = tx.Order(fmt.Sprintf("%s %s", querys.SortField, querys.SortOrder))
|
||||
}
|
||||
|
||||
// 获取字段 getter 函数
|
||||
getter, ok := fieldGetters[querys.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 querys.SortOrder == "desc" {
|
||||
return v > valJ.(int64)
|
||||
}
|
||||
return v < valJ.(int64)
|
||||
case string:
|
||||
if querys.SortOrder == "desc" {
|
||||
return v > valJ.(string)
|
||||
}
|
||||
return v < valJ.(string)
|
||||
default:
|
||||
// 不支持的字段类型,使用默认排序
|
||||
return rows[i].ID < rows[j].ID
|
||||
}
|
||||
})
|
||||
if err := tx.Find(&rows).Error; err != nil {
|
||||
logger.Errorf("query find err => %v", err.Error())
|
||||
return rows, total
|
||||
}
|
||||
return rows, total
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
package repository
|
||||
|
||||
import (
|
||||
"sort"
|
||||
"fmt"
|
||||
|
||||
"be.ems/src/framework/datasource"
|
||||
"be.ems/src/framework/logger"
|
||||
@@ -58,49 +58,14 @@ func (r CDREventSGWC) SelectByPage(querys model.CDREventSGWCQuery) ([]model.CDRE
|
||||
tx = tx.Limit(pageSize).Offset(pageSize * pageNum)
|
||||
}
|
||||
|
||||
err := tx.Find(&rows).Error
|
||||
if err != nil {
|
||||
logger.Errorf("query find err => %v", err.Error())
|
||||
return rows, total
|
||||
}
|
||||
|
||||
// 排序
|
||||
if querys.SortField != "" {
|
||||
sort.SliceStable(rows, func(i, j int) bool {
|
||||
// 支持的排序字段映射
|
||||
fieldGetters := map[string]func(*model.CDREventSGWC) any{
|
||||
"id": func(row *model.CDREventSGWC) any { return row.ID },
|
||||
"timestamp": func(row *model.CDREventSGWC) any { return row.Timestamp },
|
||||
// 可添加更多支持的字段
|
||||
tx = tx.Order(fmt.Sprintf("%s %s", querys.SortField, querys.SortOrder))
|
||||
}
|
||||
|
||||
// 获取字段 getter 函数
|
||||
getter, ok := fieldGetters[querys.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 querys.SortOrder == "desc" {
|
||||
return v > valJ.(int64)
|
||||
}
|
||||
return v < valJ.(int64)
|
||||
case string:
|
||||
if querys.SortOrder == "desc" {
|
||||
return v > valJ.(string)
|
||||
}
|
||||
return v < valJ.(string)
|
||||
default:
|
||||
// 不支持的字段类型,使用默认排序
|
||||
return rows[i].ID < rows[j].ID
|
||||
}
|
||||
})
|
||||
if err := tx.Find(&rows).Error; err != nil {
|
||||
logger.Errorf("query find err => %v", err.Error())
|
||||
return rows, total
|
||||
}
|
||||
return rows, total
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
package repository
|
||||
|
||||
import (
|
||||
"sort"
|
||||
"fmt"
|
||||
"strings"
|
||||
|
||||
dborm "be.ems/lib/core/datasource"
|
||||
@@ -148,6 +148,15 @@ func (r *CDREventSMF) SelectPage(querys model.CDREventSMFQuery) map[string]any {
|
||||
result["total"] = total
|
||||
}
|
||||
|
||||
// 排序
|
||||
orderSql := ""
|
||||
if querys.SortField != "" {
|
||||
orderSql = fmt.Sprintf(" ORDER BY %s ASC ", querys.SortField)
|
||||
if querys.SortOrder == "desc" {
|
||||
orderSql = fmt.Sprintf(" ORDER BY %s DESC ", querys.SortField)
|
||||
}
|
||||
}
|
||||
|
||||
// 分页
|
||||
pageNum, pageSize := repo.PageNumSize(querys.PageNum, querys.PageSize)
|
||||
pageSql := " limit ?,? "
|
||||
@@ -155,53 +164,14 @@ func (r *CDREventSMF) SelectPage(querys model.CDREventSMFQuery) map[string]any {
|
||||
params = append(params, pageSize)
|
||||
|
||||
// 查询数据
|
||||
querySql := r.selectSql + whereSql + pageSql
|
||||
querySql := r.selectSql + whereSql + orderSql + pageSql
|
||||
results, err := datasource.RawDB("", querySql, params)
|
||||
if err != nil {
|
||||
logger.Errorf("query err => %v", err)
|
||||
}
|
||||
rows := r.convertResultRows(results)
|
||||
|
||||
// 排序
|
||||
if querys.SortField != "" {
|
||||
sort.SliceStable(rows, func(i, j int) bool {
|
||||
// 支持的排序字段映射
|
||||
fieldGetters := map[string]func(*model.CDREventSMF) any{
|
||||
"id": func(row *model.CDREventSMF) any { return row.ID },
|
||||
"timestamp": func(row *model.CDREventSMF) any { return row.Timestamp },
|
||||
// 可添加更多支持的字段
|
||||
}
|
||||
|
||||
// 获取字段 getter 函数
|
||||
getter, ok := fieldGetters[querys.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 querys.SortOrder == "desc" {
|
||||
return v > valJ.(int64)
|
||||
}
|
||||
return v < valJ.(int64)
|
||||
case string:
|
||||
if querys.SortOrder == "desc" {
|
||||
return v > valJ.(string)
|
||||
}
|
||||
return v < valJ.(string)
|
||||
default:
|
||||
// 不支持的字段类型,使用默认排序
|
||||
return rows[i].ID < rows[j].ID
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 转换实体
|
||||
rows := r.convertResultRows(results)
|
||||
result["rows"] = rows
|
||||
return result
|
||||
}
|
||||
@@ -251,49 +221,14 @@ func (r CDREventSMF) SelectByPage(querys model.CDREventSMFQuery) ([]model.CDREve
|
||||
tx = tx.Limit(pageSize).Offset(pageSize * pageNum)
|
||||
}
|
||||
|
||||
err := tx.Find(&rows).Error
|
||||
if err != nil {
|
||||
logger.Errorf("query find err => %v", err.Error())
|
||||
return rows, total
|
||||
}
|
||||
|
||||
// 排序
|
||||
if querys.SortField != "" {
|
||||
sort.SliceStable(rows, func(i, j int) bool {
|
||||
// 支持的排序字段映射
|
||||
fieldGetters := map[string]func(*model.CDREventSMF) any{
|
||||
"id": func(row *model.CDREventSMF) any { return row.ID },
|
||||
"timestamp": func(row *model.CDREventSMF) any { return row.Timestamp },
|
||||
// 可添加更多支持的字段
|
||||
tx = tx.Order(fmt.Sprintf("%s %s", querys.SortField, querys.SortOrder))
|
||||
}
|
||||
|
||||
// 获取字段 getter 函数
|
||||
getter, ok := fieldGetters[querys.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 querys.SortOrder == "desc" {
|
||||
return v > valJ.(int64)
|
||||
}
|
||||
return v < valJ.(int64)
|
||||
case string:
|
||||
if querys.SortOrder == "desc" {
|
||||
return v > valJ.(string)
|
||||
}
|
||||
return v < valJ.(string)
|
||||
default:
|
||||
// 不支持的字段类型,使用默认排序
|
||||
return rows[i].ID < rows[j].ID
|
||||
}
|
||||
})
|
||||
if err := tx.Find(&rows).Error; err != nil {
|
||||
logger.Errorf("query find err => %v", err.Error())
|
||||
return rows, total
|
||||
}
|
||||
return rows, total
|
||||
}
|
||||
|
||||
@@ -2,7 +2,6 @@ package repository
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"sort"
|
||||
"strings"
|
||||
|
||||
dborm "be.ems/lib/core/datasource"
|
||||
@@ -163,63 +162,30 @@ func (r *CDREventSMSC) SelectPage(querys model.CDREventSMSCQuery) map[string]any
|
||||
result["total"] = total
|
||||
}
|
||||
|
||||
// 排序
|
||||
orderSql := ""
|
||||
if querys.SortField != "" {
|
||||
orderSql = fmt.Sprintf(" ORDER BY %s ASC ", querys.SortField)
|
||||
if querys.SortOrder == "desc" {
|
||||
orderSql = fmt.Sprintf(" ORDER BY %s DESC ", querys.SortField)
|
||||
}
|
||||
}
|
||||
|
||||
// 分页
|
||||
pageNum, pageSize := repo.PageNumSize(querys.PageNum, querys.PageSize)
|
||||
if pageNum == 0 && pageSize > total {
|
||||
pageSize = total
|
||||
}
|
||||
pageSql := " limit ?,? "
|
||||
params = append(params, pageNum*pageSize)
|
||||
params = append(params, pageSize)
|
||||
|
||||
// 查询数据
|
||||
querySql := r.selectSql + whereSql + pageSql
|
||||
querySql := r.selectSql + whereSql + orderSql + pageSql
|
||||
results, err := datasource.RawDB("", querySql, params)
|
||||
if err != nil {
|
||||
logger.Errorf("query err => %v", err)
|
||||
}
|
||||
rows := r.convertResultRows(results)
|
||||
|
||||
// 排序
|
||||
if querys.SortField != "" {
|
||||
sort.SliceStable(rows, func(i, j int) bool {
|
||||
// 支持的排序字段映射
|
||||
fieldGetters := map[string]func(*model.CDREventSMSC) any{
|
||||
"id": func(row *model.CDREventSMSC) any { return row.ID },
|
||||
"timestamp": func(row *model.CDREventSMSC) any { return row.Timestamp },
|
||||
// 可添加更多支持的字段
|
||||
}
|
||||
|
||||
// 获取字段 getter 函数
|
||||
getter, ok := fieldGetters[querys.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 querys.SortOrder == "desc" {
|
||||
return v > valJ.(int64)
|
||||
}
|
||||
return v < valJ.(int64)
|
||||
case string:
|
||||
if querys.SortOrder == "desc" {
|
||||
return v > valJ.(string)
|
||||
}
|
||||
return v < valJ.(string)
|
||||
default:
|
||||
// 不支持的字段类型,使用默认排序
|
||||
return rows[i].ID < rows[j].ID
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 转换实体
|
||||
rows := r.convertResultRows(results)
|
||||
result["rows"] = rows
|
||||
return result
|
||||
}
|
||||
@@ -275,82 +241,14 @@ func (r CDREventSMSC) SelectByPage(querys model.CDREventSMSCQuery) ([]model.CDRE
|
||||
tx = tx.Limit(pageSize).Offset(pageSize * pageNum)
|
||||
}
|
||||
|
||||
err := tx.Find(&rows).Error
|
||||
if err != nil {
|
||||
logger.Errorf("query find err => %v", err.Error())
|
||||
return rows, total
|
||||
}
|
||||
|
||||
// const maxPageSize = 50000
|
||||
// if pageSize > maxPageSize {
|
||||
// var allRows []model.CDREventSMSC
|
||||
// // 保存原始查询条件
|
||||
// originalTx := tx
|
||||
// // 计算总批次数
|
||||
// totalBatches := (pageSize + maxPageSize - 1) / maxPageSize
|
||||
// for i := range totalBatches {
|
||||
// var batchRows []model.CDREventSMSC
|
||||
// currentOffset := pageNum*pageSize + i*maxPageSize
|
||||
// currentLimit := maxPageSize
|
||||
// // 最后一批可能不足maxPageSize
|
||||
// if i == totalBatches-1 {
|
||||
// currentLimit = pageSize - i*maxPageSize
|
||||
// }
|
||||
// // 执行当前批次查询
|
||||
// err := originalTx.Limit(currentLimit).Offset(currentOffset).Find(&batchRows).Error
|
||||
// if err != nil {
|
||||
// logger.Errorf("batch query %d failed: %v", i, err)
|
||||
// return nil, 0
|
||||
// }
|
||||
// allRows = append(allRows, batchRows...)
|
||||
// }
|
||||
// rows = allRows
|
||||
// } else {
|
||||
// tx = tx.Limit(pageSize).Offset(pageSize * pageNum)
|
||||
// err := tx.Find(&rows).Error
|
||||
// if err != nil {
|
||||
// logger.Errorf("query find err => %v", err.Error())
|
||||
// return rows, total
|
||||
// }
|
||||
// }
|
||||
|
||||
// 排序
|
||||
if querys.SortField != "" {
|
||||
sort.SliceStable(rows, func(i, j int) bool {
|
||||
// 支持的排序字段映射
|
||||
fieldGetters := map[string]func(*model.CDREventSMSC) any{
|
||||
"id": func(row *model.CDREventSMSC) any { return row.ID },
|
||||
"timestamp": func(row *model.CDREventSMSC) any { return row.Timestamp },
|
||||
// 可添加更多支持的字段
|
||||
tx = tx.Order(fmt.Sprintf("%s %s", querys.SortField, querys.SortOrder))
|
||||
}
|
||||
|
||||
// 获取字段 getter 函数
|
||||
getter, ok := fieldGetters[querys.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 querys.SortOrder == "desc" {
|
||||
return v > valJ.(int64)
|
||||
}
|
||||
return v < valJ.(int64)
|
||||
case string:
|
||||
if querys.SortOrder == "desc" {
|
||||
return v > valJ.(string)
|
||||
}
|
||||
return v < valJ.(string)
|
||||
default:
|
||||
// 不支持的字段类型,使用默认排序
|
||||
return rows[i].ID < rows[j].ID
|
||||
}
|
||||
})
|
||||
if err := tx.Find(&rows).Error; err != nil {
|
||||
logger.Errorf("query find err => %v", err.Error())
|
||||
return rows, total
|
||||
}
|
||||
return rows, total
|
||||
}
|
||||
|
||||
@@ -2,7 +2,6 @@ package repository
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"sort"
|
||||
"strings"
|
||||
|
||||
dborm "be.ems/lib/core/datasource"
|
||||
@@ -149,6 +148,15 @@ func (r *UEEventAMF) SelectPage(querys model.UEEventAMFQuery) map[string]any {
|
||||
result["total"] = total
|
||||
}
|
||||
|
||||
// 排序
|
||||
orderSql := ""
|
||||
if querys.SortField != "" {
|
||||
orderSql = fmt.Sprintf(" ORDER BY %s ASC ", querys.SortField)
|
||||
if querys.SortOrder == "desc" {
|
||||
orderSql = fmt.Sprintf(" ORDER BY %s DESC ", querys.SortField)
|
||||
}
|
||||
}
|
||||
|
||||
// 分页
|
||||
pageNum, pageSize := repo.PageNumSize(querys.PageNum, querys.PageSize)
|
||||
pageSql := " limit ?,? "
|
||||
@@ -156,53 +164,14 @@ func (r *UEEventAMF) SelectPage(querys model.UEEventAMFQuery) map[string]any {
|
||||
params = append(params, pageSize)
|
||||
|
||||
// 查询数据
|
||||
querySql := r.selectSql + whereSql + pageSql
|
||||
querySql := r.selectSql + whereSql + orderSql + pageSql
|
||||
results, err := datasource.RawDB("", querySql, params)
|
||||
if err != nil {
|
||||
logger.Errorf("query err => %v", err)
|
||||
}
|
||||
rows := r.convertResultRows(results)
|
||||
|
||||
// 排序
|
||||
if querys.SortField != "" {
|
||||
sort.SliceStable(rows, func(i, j int) bool {
|
||||
// 支持的排序字段映射
|
||||
fieldGetters := map[string]func(*model.UEEventAMF) any{
|
||||
"id": func(row *model.UEEventAMF) any { return row.ID },
|
||||
"timestamp": func(row *model.UEEventAMF) any { return row.Timestamp },
|
||||
// 可添加更多支持的字段
|
||||
}
|
||||
|
||||
// 获取字段 getter 函数
|
||||
getter, ok := fieldGetters[querys.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 querys.SortOrder == "desc" {
|
||||
return v > valJ.(int64)
|
||||
}
|
||||
return v < valJ.(int64)
|
||||
case string:
|
||||
if querys.SortOrder == "desc" {
|
||||
return v > valJ.(string)
|
||||
}
|
||||
return v < valJ.(string)
|
||||
default:
|
||||
// 不支持的字段类型,使用默认排序
|
||||
return rows[i].ID < rows[j].ID
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 转换实体
|
||||
rows := r.convertResultRows(results)
|
||||
result["rows"] = rows
|
||||
return result
|
||||
}
|
||||
@@ -245,51 +214,19 @@ func (r UEEventAMF) SelectByPage(querys model.UEEventAMFQuery) ([]model.UEEventA
|
||||
}
|
||||
|
||||
// 查询数据分页
|
||||
if querys.PageNum != 0 && querys.PageSize != 0 {
|
||||
pageNum, pageSize := datasource.PageNumSize(querys.PageNum, querys.PageSize)
|
||||
tx = tx.Limit(pageSize).Offset(pageSize * pageNum)
|
||||
err := tx.Find(&rows).Error
|
||||
if err != nil {
|
||||
logger.Errorf("query find err => %v", err.Error())
|
||||
return rows, total
|
||||
}
|
||||
|
||||
// 排序
|
||||
if querys.SortField != "" {
|
||||
sort.SliceStable(rows, func(i, j int) bool {
|
||||
// 支持的排序字段映射
|
||||
fieldGetters := map[string]func(*model.UEEventAMF) any{
|
||||
"id": func(row *model.UEEventAMF) any { return row.ID },
|
||||
"timestamp": func(row *model.UEEventAMF) any { return row.Timestamp },
|
||||
// 可添加更多支持的字段
|
||||
tx = tx.Order(fmt.Sprintf("%s %s", querys.SortField, querys.SortOrder))
|
||||
}
|
||||
|
||||
// 获取字段 getter 函数
|
||||
getter, ok := fieldGetters[querys.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 querys.SortOrder == "desc" {
|
||||
return v > valJ.(int64)
|
||||
}
|
||||
return v < valJ.(int64)
|
||||
case string:
|
||||
if querys.SortOrder == "desc" {
|
||||
return v > valJ.(string)
|
||||
}
|
||||
return v < valJ.(string)
|
||||
default:
|
||||
// 不支持的字段类型,使用默认排序
|
||||
return rows[i].ID < rows[j].ID
|
||||
}
|
||||
})
|
||||
if err := tx.Find(&rows).Error; err != nil {
|
||||
logger.Errorf("query find err => %v", err.Error())
|
||||
return rows, total
|
||||
}
|
||||
return rows, total
|
||||
}
|
||||
|
||||
@@ -2,7 +2,6 @@ package repository
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"sort"
|
||||
"strings"
|
||||
|
||||
dborm "be.ems/lib/core/datasource"
|
||||
@@ -149,6 +148,15 @@ func (r *UEEventMME) SelectPage(querys model.UEEventMMEQuery) map[string]any {
|
||||
result["total"] = total
|
||||
}
|
||||
|
||||
// 排序
|
||||
orderSql := ""
|
||||
if querys.SortField != "" {
|
||||
orderSql = fmt.Sprintf(" ORDER BY %s ASC ", querys.SortField)
|
||||
if querys.SortOrder == "desc" {
|
||||
orderSql = fmt.Sprintf(" ORDER BY %s DESC ", querys.SortField)
|
||||
}
|
||||
}
|
||||
|
||||
// 分页
|
||||
pageNum, pageSize := repo.PageNumSize(querys.PageNum, querys.PageSize)
|
||||
pageSql := " limit ?,? "
|
||||
@@ -156,54 +164,14 @@ func (r *UEEventMME) SelectPage(querys model.UEEventMMEQuery) map[string]any {
|
||||
params = append(params, pageSize)
|
||||
|
||||
// 查询数据
|
||||
querySql := r.selectSql + whereSql + pageSql
|
||||
querySql := r.selectSql + whereSql + orderSql + pageSql
|
||||
results, err := datasource.RawDB("", querySql, params)
|
||||
if err != nil {
|
||||
logger.Errorf("query err => %v", err)
|
||||
}
|
||||
|
||||
rows := r.convertResultRows(results)
|
||||
|
||||
// 排序
|
||||
if querys.SortField != "" {
|
||||
sort.SliceStable(rows, func(i, j int) bool {
|
||||
// 支持的排序字段映射
|
||||
fieldGetters := map[string]func(*model.UEEventMME) any{
|
||||
"id": func(row *model.UEEventMME) any { return row.ID },
|
||||
"timestamp": func(row *model.UEEventMME) any { return row.Timestamp },
|
||||
// 可添加更多支持的字段
|
||||
}
|
||||
|
||||
// 获取字段 getter 函数
|
||||
getter, ok := fieldGetters[querys.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 querys.SortOrder == "desc" {
|
||||
return v > valJ.(int64)
|
||||
}
|
||||
return v < valJ.(int64)
|
||||
case string:
|
||||
if querys.SortOrder == "desc" {
|
||||
return v > valJ.(string)
|
||||
}
|
||||
return v < valJ.(string)
|
||||
default:
|
||||
// 不支持的字段类型,使用默认排序
|
||||
return rows[i].ID < rows[j].ID
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 转换实体
|
||||
rows := r.convertResultRows(results)
|
||||
result["rows"] = rows
|
||||
return result
|
||||
}
|
||||
@@ -246,51 +214,19 @@ func (r UEEventMME) SelectByPage(querys model.UEEventMMEQuery) ([]model.UEEventM
|
||||
}
|
||||
|
||||
// 查询数据分页
|
||||
if querys.PageNum != 0 && querys.PageSize != 0 {
|
||||
pageNum, pageSize := datasource.PageNumSize(querys.PageNum, querys.PageSize)
|
||||
tx = tx.Limit(pageSize).Offset(pageSize * pageNum)
|
||||
err := tx.Find(&rows).Error
|
||||
if err != nil {
|
||||
logger.Errorf("query find err => %v", err.Error())
|
||||
return rows, total
|
||||
}
|
||||
|
||||
// 排序
|
||||
if querys.SortField != "" {
|
||||
sort.SliceStable(rows, func(i, j int) bool {
|
||||
// 支持的排序字段映射
|
||||
fieldGetters := map[string]func(*model.UEEventMME) any{
|
||||
"id": func(row *model.UEEventMME) any { return row.ID },
|
||||
"timestamp": func(row *model.UEEventMME) any { return row.Timestamp },
|
||||
// 可添加更多支持的字段
|
||||
tx = tx.Order(fmt.Sprintf("%s %s", querys.SortField, querys.SortOrder))
|
||||
}
|
||||
|
||||
// 获取字段 getter 函数
|
||||
getter, ok := fieldGetters[querys.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 querys.SortOrder == "desc" {
|
||||
return v > valJ.(int64)
|
||||
}
|
||||
return v < valJ.(int64)
|
||||
case string:
|
||||
if querys.SortOrder == "desc" {
|
||||
return v > valJ.(string)
|
||||
}
|
||||
return v < valJ.(string)
|
||||
default:
|
||||
// 不支持的字段类型,使用默认排序
|
||||
return rows[i].ID < rows[j].ID
|
||||
}
|
||||
})
|
||||
if err := tx.Find(&rows).Error; err != nil {
|
||||
logger.Errorf("query find err => %v", err.Error())
|
||||
return rows, total
|
||||
}
|
||||
return rows, total
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user