You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

80 lines
2.7 KiB
Go

1 month ago
package xorm_engine
import (
"cls/pkg/util/page"
"math"
"xorm.io/builder"
"xorm.io/xorm"
)
type Engine struct {
*xorm.Engine
Cls *xorm.Engine
}
func NewEngine(engine1 *xorm.Engine, engine2 *xorm.Engine) *Engine {
return &Engine{engine1, engine2}
}
type Join struct {
JoinOperator string
Tablename interface{}
Condition string
}
func (engine *Engine) FindAll(page *page.Page, bean interface{}, cond builder.Cond, joins ...Join) error {
session0 := engine.NewSession()
defer session0.Close()
for _, join := range joins {
session0.Join(join.JoinOperator, join.Tablename, join.Condition)
}
count, err := session0.Where(cond).Count(bean)
if err != nil {
return err
}
page.TotalElements = count
page.TotalPages = int(math.Ceil(float64(count) / float64(page.PageSize)))
session := engine.NewSession()
defer session.Close()
session.Table(bean)
for _, join := range joins {
session.Join(join.JoinOperator, join.Tablename, join.Condition)
}
if len(page.Asc) > 0 && len(page.Desc) > 0 {
return session.Cols(page.Cols...).Limit(page.PageSize, page.PageNumber*page.PageSize).Where(cond).Asc(page.Asc...).Desc(page.Desc...).Omit(page.Omit...).Find(page.Content)
} else if len(page.Asc) > 0 {
return session.Cols(page.Cols...).Limit(page.PageSize, page.PageNumber*page.PageSize).Where(cond).Asc(page.Asc...).Omit(page.Omit...).Find(page.Content)
} else {
return session.Cols(page.Cols...).Limit(page.PageSize, page.PageNumber*page.PageSize).Where(cond).Desc(page.Desc...).Omit(page.Omit...).Find(page.Content)
}
}
func (engine *Engine) FindAllCls(page *page.Page, bean interface{}, cond builder.Cond, joins ...Join) error {
session0 := engine.Cls.NewSession()
defer session0.Close()
for _, join := range joins {
session0.Join(join.JoinOperator, join.Tablename, join.Condition)
}
count, err := session0.Where(cond).Count(bean)
if err != nil {
return err
}
page.TotalElements = count
page.TotalPages = int(math.Ceil(float64(count) / float64(page.PageSize)))
session := engine.Cls.NewSession()
defer session.Close()
session.Table(bean)
for _, join := range joins {
session.Join(join.JoinOperator, join.Tablename, join.Condition)
}
if len(page.Asc) > 0 && len(page.Desc) > 0 {
return session.Cols(page.Cols...).Limit(page.PageSize, page.PageNumber*page.PageSize).Where(cond).Asc(page.Asc...).Desc(page.Desc...).Omit(page.Omit...).Find(page.Content)
} else if len(page.Asc) > 0 {
return session.Cols(page.Cols...).Limit(page.PageSize, page.PageNumber*page.PageSize).Where(cond).Asc(page.Asc...).Omit(page.Omit...).Find(page.Content)
} else {
return session.Cols(page.Cols...).Limit(page.PageSize, page.PageNumber*page.PageSize).Where(cond).Desc(page.Desc...).Omit(page.Omit...).Find(page.Content)
}
}