Files
ppgo_job/dao/common.go
T
2026-07-10 11:28:16 +08:00

100 lines
2.4 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package dao
import (
"context"
"strings"
"github.com/gogf/gf/v2/database/gdb"
"github.com/gogf/gf/v2/frame/g"
)
// ParsePage 解析分页参数
func ParsePage(pageNum, pageSize int) (offset, limit int) {
if pageNum < 1 {
pageNum = 1
}
if pageSize < 1 {
pageSize = 20
}
if pageSize > 1000 {
pageSize = 1000
}
offset = (pageNum - 1) * pageSize
limit = pageSize
return
}
// InsertAndGetId 插入并返回自增ID(排除 id 字段让 SQLite 自增)
func InsertAndGetId(ctx context.Context, table string, data interface{}) (id int64, err error) {
r, err := g.DB().Model(table).Ctx(ctx).FieldsEx("id").Data(data).Insert()
if err != nil {
return 0, err
}
return r.LastInsertId()
}
// Update 更新数据
func Update(ctx context.Context, table string, data interface{}, where interface{}) (err error) {
_, err = g.DB().Model(table).Ctx(ctx).Data(data).Where(where).Update()
return
}
// Delete 删除数据
func Delete(ctx context.Context, table string, where interface{}) (err error) {
_, err = g.DB().Model(table).Ctx(ctx).Where(where).Delete()
return
}
// GetById 根据主键查询
func GetById(ctx context.Context, table string, id int, result interface{}) error {
r, err := g.DB().Model(table).Ctx(ctx).Where("id", id).One()
if err != nil {
return err
}
if r == nil {
return nil
}
return r.Struct(result)
}
// Count 计数
func Count(ctx context.Context, table string, where interface{}) (int, error) {
return g.DB().Model(table).Ctx(ctx).Where(where).Count()
}
// buildFilters 构建过滤条件, 跳过 @order 特殊键
// 注意: "field like" 键使用 WhereLikeGoFrame v2 原生支持),value 不需要包裹 %
func buildFilters(m *gdb.Model, filters []interface{}) *gdb.Model {
if len(filters) > 0 {
for k := 0; k < len(filters); k += 2 {
if k+1 < len(filters) {
if key, ok := filters[k].(string); ok && key != "@order" {
if strings.HasSuffix(key, " like") {
field := strings.TrimSuffix(key, " like")
if val, ok := filters[k+1].(string); ok {
m = m.WhereLike(field, val)
}
} else {
m = m.Where(key, filters[k+1])
}
}
}
}
}
return m
}
// extractOrder 从 filters 中提取 @order 排序参数
func extractOrder(filters []interface{}) string {
for k := 0; k < len(filters); k += 2 {
if k+1 < len(filters) {
if key, ok := filters[k].(string); ok && key == "@order" {
if s, ok := filters[k+1].(string); ok {
return s
}
}
}
}
return ""
}