perf: cdr/ue/kpi查询列表数据排序改为程序内处理,加快sql查询速度
This commit is contained in:
@@ -3,6 +3,7 @@ package kpi_c_report
|
|||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
"sort"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
@@ -131,10 +132,10 @@ func (k *KpiCReport) GetReport2FE(c *gin.Context) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// order by
|
// order by
|
||||||
if sortField, sortOrder := querys.SortField, querys.SortOrder; sortField != "" && sortOrder != "" {
|
// if sortField, sortOrder := querys.SortField, querys.SortOrder; sortField != "" && sortOrder != "" {
|
||||||
orderBy := fmt.Sprintf("%s %s", sortField, sortOrder)
|
// orderBy := fmt.Sprintf("%s %s", sortField, sortOrder)
|
||||||
dbg = dbg.Order(orderBy)
|
// dbg = dbg.Order(orderBy)
|
||||||
}
|
// }
|
||||||
|
|
||||||
//err := dborm.DefaultDB().Table(tableName).Where(whereSql, params...).Find(&reports).Error
|
//err := dborm.DefaultDB().Table(tableName).Where(whereSql, params...).Find(&reports).Error
|
||||||
err := dbg.Find(&results).Error
|
err := dbg.Find(&results).Error
|
||||||
@@ -143,6 +144,46 @@ func (k *KpiCReport) GetReport2FE(c *gin.Context) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 排序
|
||||||
|
if querys.SortField != "" {
|
||||||
|
sort.SliceStable(results, func(i, j int) bool {
|
||||||
|
// 支持的排序字段映射
|
||||||
|
fieldGetters := map[string]func(*KpiCReport) any{
|
||||||
|
"id": func(row *KpiCReport) any { return row.ID },
|
||||||
|
"timeGroup": func(row *KpiCReport) any { return row.CreatedAt.Unix() },
|
||||||
|
"created_at": func(row *KpiCReport) any { return row.CreatedAt.Unix() },
|
||||||
|
// 可添加更多支持的字段
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取字段 getter 函数
|
||||||
|
getter, ok := fieldGetters[querys.SortField]
|
||||||
|
if !ok {
|
||||||
|
// 非法字段,使用默认排序(id升序)
|
||||||
|
return results[i].ID < results[j].ID
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取比较值
|
||||||
|
valI, valJ := getter(&results[i]), getter(&results[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 results[i].ID < results[j].ID
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
reports := []map[string]any{}
|
reports := []map[string]any{}
|
||||||
for _, r := range results {
|
for _, r := range results {
|
||||||
report := map[string]any{
|
report := map[string]any{
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package repository
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"sort"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"be.ems/lib/log"
|
"be.ems/lib/log"
|
||||||
@@ -113,19 +114,52 @@ func (r PerfKPI) SelectKPI(query model.GoldKPIQuery) []model.KpiReport {
|
|||||||
if query.EndTime != "" {
|
if query.EndTime != "" {
|
||||||
tx = tx.Where("created_at <= ?", query.EndTime)
|
tx = tx.Where("created_at <= ?", query.EndTime)
|
||||||
}
|
}
|
||||||
// 排序
|
|
||||||
if query.SortField == "" || query.SortField == "timeGroup" {
|
|
||||||
query.SortField = "created_at"
|
|
||||||
}
|
|
||||||
if query.SortOrder == "" {
|
|
||||||
query.SortOrder = "desc"
|
|
||||||
}
|
|
||||||
tx = tx.Order(fmt.Sprintf("%s %s", query.SortField, query.SortOrder))
|
|
||||||
// 查询数据
|
// 查询数据
|
||||||
if err := tx.Find(&rows).Error; err != nil {
|
if err := tx.Find(&rows).Error; err != nil {
|
||||||
logger.Errorf("query find err => %v", err.Error())
|
logger.Errorf("query find err => %v", err.Error())
|
||||||
return rows
|
return rows
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 排序
|
||||||
|
if query.SortField != "" {
|
||||||
|
sort.SliceStable(rows, func(i, j int) bool {
|
||||||
|
// 支持的排序字段映射
|
||||||
|
fieldGetters := map[string]func(*model.KpiReport) any{
|
||||||
|
"id": func(row *model.KpiReport) any { return row.ID },
|
||||||
|
"timeGroup": func(row *model.KpiReport) any { return row.CreatedAt },
|
||||||
|
"created_at": func(row *model.KpiReport) any { return row.CreatedAt },
|
||||||
|
// 可添加更多支持的字段
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取字段 getter 函数
|
||||||
|
getter, ok := fieldGetters[query.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 query.SortOrder == "desc" {
|
||||||
|
return v > valJ.(int64)
|
||||||
|
}
|
||||||
|
return v < valJ.(int64)
|
||||||
|
case string:
|
||||||
|
if query.SortOrder == "desc" {
|
||||||
|
return v > valJ.(string)
|
||||||
|
}
|
||||||
|
return v < valJ.(string)
|
||||||
|
default:
|
||||||
|
// 不支持的字段类型,使用默认排序
|
||||||
|
return rows[i].ID < rows[j].ID
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
return rows
|
return rows
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package repository
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"sort"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
dborm "be.ems/lib/core/datasource"
|
dborm "be.ems/lib/core/datasource"
|
||||||
@@ -170,29 +171,55 @@ func (r *CDREventIMS) SelectPage(querys model.CDREventIMSQuery) map[string]any {
|
|||||||
params = append(params, pageNum*pageSize)
|
params = append(params, pageNum*pageSize)
|
||||||
params = append(params, pageSize)
|
params = append(params, pageSize)
|
||||||
|
|
||||||
// 排序
|
|
||||||
orderSql := ""
|
|
||||||
if querys.SortField != "" {
|
|
||||||
sortSql := querys.SortField
|
|
||||||
if querys.SortOrder != "" {
|
|
||||||
if querys.SortOrder == "desc" {
|
|
||||||
sortSql += " desc "
|
|
||||||
} else {
|
|
||||||
sortSql += " asc "
|
|
||||||
}
|
|
||||||
}
|
|
||||||
orderSql = fmt.Sprintf(" order by %s,id desc ", sortSql)
|
|
||||||
}
|
|
||||||
|
|
||||||
// 查询数据
|
// 查询数据
|
||||||
querySql := r.selectSql + whereSql + orderSql + pageSql
|
querySql := r.selectSql + whereSql + pageSql
|
||||||
results, err := datasource.RawDB("", querySql, params)
|
results, err := datasource.RawDB("", querySql, params)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Errorf("query err => %v", err)
|
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
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
// 转换实体
|
// 转换实体
|
||||||
result["rows"] = r.convertResultRows(results)
|
result["rows"] = rows
|
||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -245,15 +272,6 @@ func (r CDREventIMS) SelectByPage(querys model.CDREventIMSQuery) ([]model.CDREve
|
|||||||
return rows, total
|
return rows, total
|
||||||
}
|
}
|
||||||
|
|
||||||
// 排序
|
|
||||||
if querys.SortField != "" {
|
|
||||||
sortField := querys.SortField
|
|
||||||
if querys.SortOrder == "desc" {
|
|
||||||
sortField = sortField + " desc"
|
|
||||||
}
|
|
||||||
tx = tx.Order(sortField)
|
|
||||||
}
|
|
||||||
|
|
||||||
// 查询数据分页
|
// 查询数据分页
|
||||||
pageNum, pageSize := datasource.PageNumSize(querys.PageNum, querys.PageSize)
|
pageNum, pageSize := datasource.PageNumSize(querys.PageNum, querys.PageSize)
|
||||||
if pageNum == 0 && pageSize > int(total) {
|
if pageNum == 0 && pageSize > int(total) {
|
||||||
@@ -265,6 +283,45 @@ func (r CDREventIMS) SelectByPage(querys model.CDREventIMSQuery) ([]model.CDREve
|
|||||||
logger.Errorf("query find err => %v", err.Error())
|
logger.Errorf("query find err => %v", err.Error())
|
||||||
return rows, total
|
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 },
|
||||||
|
// 可添加更多支持的字段
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取字段 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
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
return rows, total
|
return rows, total
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package repository
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"sort"
|
||||||
|
|
||||||
"be.ems/src/framework/datasource"
|
"be.ems/src/framework/datasource"
|
||||||
"be.ems/src/framework/logger"
|
"be.ems/src/framework/logger"
|
||||||
@@ -54,15 +55,6 @@ func (r CDREventSGWC) SelectByPage(querys model.CDREventSGWCQuery) ([]model.CDRE
|
|||||||
return rows, total
|
return rows, total
|
||||||
}
|
}
|
||||||
|
|
||||||
// 排序
|
|
||||||
if querys.SortField != "" {
|
|
||||||
sortField := querys.SortField
|
|
||||||
if querys.SortOrder == "desc" {
|
|
||||||
sortField = sortField + " desc"
|
|
||||||
}
|
|
||||||
tx = tx.Order(sortField)
|
|
||||||
}
|
|
||||||
|
|
||||||
// 查询数据分页
|
// 查询数据分页
|
||||||
pageNum, pageSize := datasource.PageNumSize(querys.PageNum, querys.PageSize)
|
pageNum, pageSize := datasource.PageNumSize(querys.PageNum, querys.PageSize)
|
||||||
if pageNum == 0 && pageSize > int(total) {
|
if pageNum == 0 && pageSize > int(total) {
|
||||||
@@ -74,6 +66,45 @@ func (r CDREventSGWC) SelectByPage(querys model.CDREventSGWCQuery) ([]model.CDRE
|
|||||||
logger.Errorf("query find err => %v", err.Error())
|
logger.Errorf("query find err => %v", err.Error())
|
||||||
return rows, total
|
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 },
|
||||||
|
// 可添加更多支持的字段
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取字段 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
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
return rows, total
|
return rows, total
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package repository
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"sort"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
dborm "be.ems/lib/core/datasource"
|
dborm "be.ems/lib/core/datasource"
|
||||||
@@ -157,29 +158,55 @@ func (r *CDREventSMF) SelectPage(querys model.CDREventSMFQuery) map[string]any {
|
|||||||
params = append(params, pageNum*pageSize)
|
params = append(params, pageNum*pageSize)
|
||||||
params = append(params, pageSize)
|
params = append(params, pageSize)
|
||||||
|
|
||||||
// 排序
|
|
||||||
orderSql := ""
|
|
||||||
if querys.SortField != "" {
|
|
||||||
sortSql := querys.SortField
|
|
||||||
if querys.SortOrder != "" {
|
|
||||||
if querys.SortOrder == "desc" {
|
|
||||||
sortSql += " desc "
|
|
||||||
} else {
|
|
||||||
sortSql += " asc "
|
|
||||||
}
|
|
||||||
}
|
|
||||||
orderSql = fmt.Sprintf(" order by %s,id desc ", sortSql)
|
|
||||||
}
|
|
||||||
|
|
||||||
// 查询数据
|
// 查询数据
|
||||||
querySql := r.selectSql + whereSql + orderSql + pageSql
|
querySql := r.selectSql + whereSql + pageSql
|
||||||
results, err := datasource.RawDB("", querySql, params)
|
results, err := datasource.RawDB("", querySql, params)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Errorf("query err => %v", err)
|
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
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
// 转换实体
|
// 转换实体
|
||||||
result["rows"] = r.convertResultRows(results)
|
result["rows"] = rows
|
||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -226,15 +253,6 @@ func (r CDREventSMF) SelectByPage(querys model.CDREventSMFQuery) ([]model.CDREve
|
|||||||
return rows, total
|
return rows, total
|
||||||
}
|
}
|
||||||
|
|
||||||
// 排序
|
|
||||||
if querys.SortField != "" {
|
|
||||||
sortField := querys.SortField
|
|
||||||
if querys.SortOrder == "desc" {
|
|
||||||
sortField = sortField + " desc"
|
|
||||||
}
|
|
||||||
tx = tx.Order(sortField)
|
|
||||||
}
|
|
||||||
|
|
||||||
// 查询数据分页
|
// 查询数据分页
|
||||||
pageNum, pageSize := datasource.PageNumSize(querys.PageNum, querys.PageSize)
|
pageNum, pageSize := datasource.PageNumSize(querys.PageNum, querys.PageSize)
|
||||||
if pageNum == 0 && pageSize > int(total) {
|
if pageNum == 0 && pageSize > int(total) {
|
||||||
@@ -246,6 +264,45 @@ func (r CDREventSMF) SelectByPage(querys model.CDREventSMFQuery) ([]model.CDREve
|
|||||||
logger.Errorf("query find err => %v", err.Error())
|
logger.Errorf("query find err => %v", err.Error())
|
||||||
return rows, total
|
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 },
|
||||||
|
// 可添加更多支持的字段
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取字段 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
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
return rows, total
|
return rows, total
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package repository
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"sort"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
dborm "be.ems/lib/core/datasource"
|
dborm "be.ems/lib/core/datasource"
|
||||||
@@ -167,33 +168,62 @@ func (r *CDREventSMSC) SelectPage(querys model.CDREventSMSCQuery) map[string]any
|
|||||||
|
|
||||||
// 分页
|
// 分页
|
||||||
pageNum, pageSize := repo.PageNumSize(querys.PageNum, querys.PageSize)
|
pageNum, pageSize := repo.PageNumSize(querys.PageNum, querys.PageSize)
|
||||||
|
if pageNum == 0 && pageSize > total {
|
||||||
|
pageSize = total
|
||||||
|
}
|
||||||
pageSql := " limit ?,? "
|
pageSql := " limit ?,? "
|
||||||
params = append(params, pageNum*pageSize)
|
params = append(params, pageNum*pageSize)
|
||||||
params = append(params, pageSize)
|
params = append(params, pageSize)
|
||||||
|
|
||||||
// 排序
|
|
||||||
orderSql := ""
|
|
||||||
if querys.SortField != "" {
|
|
||||||
sortSql := querys.SortField
|
|
||||||
if querys.SortOrder != "" {
|
|
||||||
if querys.SortOrder == "desc" {
|
|
||||||
sortSql += " desc "
|
|
||||||
} else {
|
|
||||||
sortSql += " asc "
|
|
||||||
}
|
|
||||||
}
|
|
||||||
orderSql = fmt.Sprintf(" order by %s,id desc ", sortSql)
|
|
||||||
}
|
|
||||||
|
|
||||||
// 查询数据
|
// 查询数据
|
||||||
querySql := r.selectSql + whereSql + orderSql + pageSql
|
querySql := r.selectSql + whereSql + pageSql
|
||||||
results, err := datasource.RawDB("", querySql, params)
|
results, err := datasource.RawDB("", querySql, params)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Errorf("query err => %v", err)
|
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
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
// 转换实体
|
// 转换实体
|
||||||
result["rows"] = r.convertResultRows(results)
|
result["rows"] = rows
|
||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -246,15 +276,6 @@ func (r CDREventSMSC) SelectByPage(querys model.CDREventSMSCQuery) ([]model.CDRE
|
|||||||
return rows, total
|
return rows, total
|
||||||
}
|
}
|
||||||
|
|
||||||
// 排序
|
|
||||||
if querys.SortField != "" {
|
|
||||||
sortField := querys.SortField
|
|
||||||
if querys.SortOrder == "desc" {
|
|
||||||
sortField = sortField + " desc"
|
|
||||||
}
|
|
||||||
tx = tx.Order(sortField)
|
|
||||||
}
|
|
||||||
|
|
||||||
// 查询数据分页
|
// 查询数据分页
|
||||||
pageNum, pageSize := datasource.PageNumSize(querys.PageNum, querys.PageSize)
|
pageNum, pageSize := datasource.PageNumSize(querys.PageNum, querys.PageSize)
|
||||||
if pageNum == 0 && pageSize > int(total) {
|
if pageNum == 0 && pageSize > int(total) {
|
||||||
@@ -266,6 +287,78 @@ func (r CDREventSMSC) SelectByPage(querys model.CDREventSMSCQuery) ([]model.CDRE
|
|||||||
logger.Errorf("query find err => %v", err.Error())
|
logger.Errorf("query find err => %v", err.Error())
|
||||||
return rows, total
|
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 },
|
||||||
|
// 可添加更多支持的字段
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取字段 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
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
return rows, total
|
return rows, total
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package repository
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"sort"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
dborm "be.ems/lib/core/datasource"
|
dborm "be.ems/lib/core/datasource"
|
||||||
@@ -157,29 +158,55 @@ func (r *UEEventAMF) SelectPage(querys model.UEEventAMFQuery) map[string]any {
|
|||||||
params = append(params, pageNum*pageSize)
|
params = append(params, pageNum*pageSize)
|
||||||
params = append(params, pageSize)
|
params = append(params, pageSize)
|
||||||
|
|
||||||
// 排序
|
|
||||||
orderSql := ""
|
|
||||||
if querys.SortField != "" {
|
|
||||||
sortSql := querys.SortField
|
|
||||||
if querys.SortOrder != "" {
|
|
||||||
if querys.SortOrder == "desc" {
|
|
||||||
sortSql += " desc "
|
|
||||||
} else {
|
|
||||||
sortSql += " asc "
|
|
||||||
}
|
|
||||||
}
|
|
||||||
orderSql = fmt.Sprintf(" order by %s,id desc ", sortSql)
|
|
||||||
}
|
|
||||||
|
|
||||||
// 查询数据
|
// 查询数据
|
||||||
querySql := r.selectSql + whereSql + orderSql + pageSql
|
querySql := r.selectSql + whereSql + pageSql
|
||||||
results, err := datasource.RawDB("", querySql, params)
|
results, err := datasource.RawDB("", querySql, params)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Errorf("query err => %v", err)
|
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
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
// 转换实体
|
// 转换实体
|
||||||
result["rows"] = r.convertResultRows(results)
|
result["rows"] = rows
|
||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -224,15 +251,6 @@ func (r UEEventAMF) SelectByPage(querys model.UEEventAMFQuery) ([]model.UEEventA
|
|||||||
return rows, total
|
return rows, total
|
||||||
}
|
}
|
||||||
|
|
||||||
// 排序
|
|
||||||
if querys.SortField != "" {
|
|
||||||
sortField := querys.SortField
|
|
||||||
if querys.SortOrder == "desc" {
|
|
||||||
sortField = sortField + " desc"
|
|
||||||
}
|
|
||||||
tx = tx.Order(sortField)
|
|
||||||
}
|
|
||||||
|
|
||||||
// 查询数据分页
|
// 查询数据分页
|
||||||
pageNum, pageSize := datasource.PageNumSize(querys.PageNum, querys.PageSize)
|
pageNum, pageSize := datasource.PageNumSize(querys.PageNum, querys.PageSize)
|
||||||
tx = tx.Limit(pageSize).Offset(pageSize * pageNum)
|
tx = tx.Limit(pageSize).Offset(pageSize * pageNum)
|
||||||
@@ -241,6 +259,45 @@ func (r UEEventAMF) SelectByPage(querys model.UEEventAMFQuery) ([]model.UEEventA
|
|||||||
logger.Errorf("query find err => %v", err.Error())
|
logger.Errorf("query find err => %v", err.Error())
|
||||||
return rows, total
|
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 },
|
||||||
|
// 可添加更多支持的字段
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取字段 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
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
return rows, total
|
return rows, total
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package repository
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"sort"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
dborm "be.ems/lib/core/datasource"
|
dborm "be.ems/lib/core/datasource"
|
||||||
@@ -157,29 +158,56 @@ func (r *UEEventMME) SelectPage(querys model.UEEventMMEQuery) map[string]any {
|
|||||||
params = append(params, pageNum*pageSize)
|
params = append(params, pageNum*pageSize)
|
||||||
params = append(params, pageSize)
|
params = append(params, pageSize)
|
||||||
|
|
||||||
// 排序
|
|
||||||
orderSql := ""
|
|
||||||
if querys.SortField != "" {
|
|
||||||
sortSql := querys.SortField
|
|
||||||
if querys.SortOrder != "" {
|
|
||||||
if querys.SortOrder == "desc" {
|
|
||||||
sortSql += " desc "
|
|
||||||
} else {
|
|
||||||
sortSql += " asc "
|
|
||||||
}
|
|
||||||
}
|
|
||||||
orderSql = fmt.Sprintf(" order by %s,id desc ", sortSql)
|
|
||||||
}
|
|
||||||
|
|
||||||
// 查询数据
|
// 查询数据
|
||||||
querySql := r.selectSql + whereSql + orderSql + pageSql
|
querySql := r.selectSql + whereSql + pageSql
|
||||||
results, err := datasource.RawDB("", querySql, params)
|
results, err := datasource.RawDB("", querySql, params)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Errorf("query err => %v", err)
|
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
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
// 转换实体
|
// 转换实体
|
||||||
result["rows"] = r.convertResultRows(results)
|
result["rows"] = rows
|
||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -224,15 +252,6 @@ func (r UEEventMME) SelectByPage(querys model.UEEventMMEQuery) ([]model.UEEventM
|
|||||||
return rows, total
|
return rows, total
|
||||||
}
|
}
|
||||||
|
|
||||||
// 排序
|
|
||||||
if querys.SortField != "" {
|
|
||||||
sortField := querys.SortField
|
|
||||||
if querys.SortOrder == "desc" {
|
|
||||||
sortField = sortField + " desc"
|
|
||||||
}
|
|
||||||
tx = tx.Order(sortField)
|
|
||||||
}
|
|
||||||
|
|
||||||
// 查询数据分页
|
// 查询数据分页
|
||||||
pageNum, pageSize := datasource.PageNumSize(querys.PageNum, querys.PageSize)
|
pageNum, pageSize := datasource.PageNumSize(querys.PageNum, querys.PageSize)
|
||||||
tx = tx.Limit(pageSize).Offset(pageSize * pageNum)
|
tx = tx.Limit(pageSize).Offset(pageSize * pageNum)
|
||||||
@@ -241,6 +260,45 @@ func (r UEEventMME) SelectByPage(querys model.UEEventMMEQuery) ([]model.UEEventM
|
|||||||
logger.Errorf("query find err => %v", err.Error())
|
logger.Errorf("query find err => %v", err.Error())
|
||||||
return rows, total
|
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 },
|
||||||
|
// 可添加更多支持的字段
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取字段 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
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
return rows, total
|
return rows, total
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user