fix version 1

This commit is contained in:
2026-09-22 21:15:34 +08:00
parent 9f86366638
commit d63d7e8b3a
277 changed files with 9959 additions and 1514 deletions

View File

@@ -13,6 +13,7 @@ import (
var (
DefaultPage = 1
DefaultSize = 50
MaxSize = 200
)
func LogFetch(c *gin.Context) {
@@ -30,26 +31,27 @@ func LogFetch(c *gin.Context) {
tx = impl.DBService.Model(&models.LogData{})
)
var size int
var page int
if request["op_name"] != "" {
tx.Where("op_name like ?", "%"+request["op_name"].(string)+"%")
}
if request["service"] != "" {
tx.Where("service like ?", "%"+request["service"].(string)+"%")
}
if request["op_ip"] != "" {
tx.Where("op_ip = ?", "%"+request["ip"].(string)+"%")
}
if request["level"] != "" {
tx.Where("level = ?", request["level"].(int))
// 分页参数归一化page 至少为 1size 默认 50 且不超过上限
page := normalizePage(getInt(request, "page"))
sizeInput := getInt(request, "size")
if sizeInput <= 0 {
// 兼容 page_size 写法
sizeInput = getInt(request, "page_size")
}
size := normalizeSize(sizeInput)
if page <= 0 {
page = DefaultPage
// 过滤条件统一用安全类型断言取值,键名与查询列保持一致
if opName := getString(request, "op_name"); opName != "" {
tx = tx.Where("op_name like ?", "%"+opName+"%")
}
if size <= 0 {
size = DefaultSize
if service := getString(request, "service"); service != "" {
tx = tx.Where("service like ?", "%"+service+"%")
}
if opIP := getString(request, "op_ip"); opIP != "" {
tx = tx.Where("op_ip = ?", opIP)
}
if level := getInt(request, "level"); level > 0 {
tx = tx.Where("level = ?", level)
}
if err := tx.Count(&count).Limit(size).Offset((page - 1) * size).Find(&data).Error; err != nil {
@@ -63,3 +65,43 @@ func LogFetch(c *gin.Context) {
"total": count,
})
}
// getString 安全读取字符串参数,缺失或类型不符时返回空串
func getString(m map[string]any, key string) string {
if v, ok := m[key].(string); ok {
return v
}
return ""
}
// getInt 安全读取整型参数,兼容 JSON 反序列化产生的 float64
func getInt(m map[string]any, key string) int {
switch v := m[key].(type) {
case int:
return v
case int64:
return int(v)
case float64:
return int(v)
}
return 0
}
// normalizePage 归一化页码,最小为 DefaultPage
func normalizePage(page int) int {
if page < DefaultPage {
return DefaultPage
}
return page
}
// normalizeSize 归一化每页条数:默认 DefaultSize并限制不超过 MaxSize
func normalizeSize(size int) int {
if size <= 0 {
return DefaultSize
}
if size > MaxSize {
return MaxSize
}
return size
}