85 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			85 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
package dto
 | 
						|
 | 
						|
import (
 | 
						|
	"github.com/go-admin-team/go-admin-core/tools/search"
 | 
						|
	"go-admin/common/global"
 | 
						|
	"gorm.io/gorm"
 | 
						|
)
 | 
						|
 | 
						|
type GeneralDelDto struct {
 | 
						|
	Id  int   `uri:"id" json:"id" validate:"required"`
 | 
						|
	Ids []int `json:"ids"`
 | 
						|
}
 | 
						|
 | 
						|
func (g GeneralDelDto) GetIds() []int {
 | 
						|
	ids := make([]int, 0)
 | 
						|
	if g.Id != 0 {
 | 
						|
		ids = append(ids, g.Id)
 | 
						|
	}
 | 
						|
	if len(g.Ids) > 0 {
 | 
						|
		for _, id := range g.Ids {
 | 
						|
			if id > 0 {
 | 
						|
				ids = append(ids, id)
 | 
						|
			}
 | 
						|
		}
 | 
						|
	} else {
 | 
						|
		if g.Id > 0 {
 | 
						|
			ids = append(ids, g.Id)
 | 
						|
		}
 | 
						|
	}
 | 
						|
	if len(ids) <= 0 {
 | 
						|
		//方式全部删除
 | 
						|
		ids = append(ids, 0)
 | 
						|
	}
 | 
						|
	return ids
 | 
						|
}
 | 
						|
 | 
						|
type GeneralGetDto struct {
 | 
						|
	Id int `uri:"id" json:"id" validate:"required"`
 | 
						|
}
 | 
						|
 | 
						|
func MakeCondition(q interface{}) func(db *gorm.DB) *gorm.DB {
 | 
						|
	return func(db *gorm.DB) *gorm.DB {
 | 
						|
		condition := &search.GormCondition{
 | 
						|
			GormPublic: search.GormPublic{},
 | 
						|
			Join:       make([]*search.GormJoin, 0),
 | 
						|
		}
 | 
						|
		search.ResolveSearchQuery(global.Driver, q, condition)
 | 
						|
		for _, join := range condition.Join {
 | 
						|
			if join == nil {
 | 
						|
				continue
 | 
						|
			}
 | 
						|
			db = db.Joins(join.JoinOn)
 | 
						|
			for k, v := range join.Where {
 | 
						|
				db = db.Where(k, v...)
 | 
						|
			}
 | 
						|
			for k, v := range join.Or {
 | 
						|
				db = db.Or(k, v...)
 | 
						|
			}
 | 
						|
			for _, o := range join.Order {
 | 
						|
				db = db.Order(o)
 | 
						|
			}
 | 
						|
		}
 | 
						|
		for k, v := range condition.Where {
 | 
						|
			db = db.Where(k, v...)
 | 
						|
		}
 | 
						|
		for k, v := range condition.Or {
 | 
						|
			db = db.Or(k, v...)
 | 
						|
		}
 | 
						|
		for _, o := range condition.Order {
 | 
						|
			db = db.Order(o)
 | 
						|
		}
 | 
						|
		return db
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func Paginate(pageSize, pageIndex int) func(db *gorm.DB) *gorm.DB {
 | 
						|
	return func(db *gorm.DB) *gorm.DB {
 | 
						|
		offset := (pageIndex - 1) * pageSize
 | 
						|
		if offset < 0 {
 | 
						|
			offset = 0
 | 
						|
		}
 | 
						|
		return db.Offset(offset).Limit(pageSize)
 | 
						|
	}
 | 
						|
}
 |