package xorm_engine import ( "cls-server/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) } }