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
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)
|
||
|
}
|
||
|
}
|