diff --git a/src/modules/network_data/repository/all_alarm.go b/src/modules/network_data/repository/all_alarm.go index ff9a99d6..ffd675d7 100644 --- a/src/modules/network_data/repository/all_alarm.go +++ b/src/modules/network_data/repository/all_alarm.go @@ -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) } - // 查询数据分页 - 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 } diff --git a/src/modules/network_data/repository/cdr_event_ims.go b/src/modules/network_data/repository/cdr_event_ims.go index 9a52106e..f28d532c 100644 --- a/src/modules/network_data/repository/cdr_event_ims.go +++ b/src/modules/network_data/repository/cdr_event_ims.go @@ -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 } diff --git a/src/modules/network_data/repository/cdr_event_sgwc.go b/src/modules/network_data/repository/cdr_event_sgwc.go index e22f3605..0044cece 100644 --- a/src/modules/network_data/repository/cdr_event_sgwc.go +++ b/src/modules/network_data/repository/cdr_event_sgwc.go @@ -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 } diff --git a/src/modules/network_data/repository/cdr_event_smf.go b/src/modules/network_data/repository/cdr_event_smf.go index c84f5eb1..03b26ac7 100644 --- a/src/modules/network_data/repository/cdr_event_smf.go +++ b/src/modules/network_data/repository/cdr_event_smf.go @@ -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 } diff --git a/src/modules/network_data/repository/cdr_event_smsc.go b/src/modules/network_data/repository/cdr_event_smsc.go index 36ae318d..91961803 100644 --- a/src/modules/network_data/repository/cdr_event_smsc.go +++ b/src/modules/network_data/repository/cdr_event_smsc.go @@ -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 } diff --git a/src/modules/network_data/repository/ue_event_amf.go b/src/modules/network_data/repository/ue_event_amf.go index e1dc61cd..f687fef6 100644 --- a/src/modules/network_data/repository/ue_event_amf.go +++ b/src/modules/network_data/repository/ue_event_amf.go @@ -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 } // 查询数据分页 - 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.PageNum != 0 && querys.PageSize != 0 { + pageNum, pageSize := datasource.PageNumSize(querys.PageNum, querys.PageSize) + tx = tx.Limit(pageSize).Offset(pageSize * pageNum) } // 排序 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 } diff --git a/src/modules/network_data/repository/ue_event_mme.go b/src/modules/network_data/repository/ue_event_mme.go index 9f746ab4..d212b3e3 100644 --- a/src/modules/network_data/repository/ue_event_mme.go +++ b/src/modules/network_data/repository/ue_event_mme.go @@ -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 } // 查询数据分页 - 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.PageNum != 0 && querys.PageSize != 0 { + pageNum, pageSize := datasource.PageNumSize(querys.PageNum, querys.PageSize) + tx = tx.Limit(pageSize).Offset(pageSize * pageNum) } // 排序 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 }