239 lines
		
	
	
		
			7.2 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			239 lines
		
	
	
		
			7.2 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package tools
 | |
| 
 | |
| import (
 | |
| 	common "go-admin/common/models"
 | |
| 	"strings"
 | |
| 
 | |
| 	"gorm.io/gorm"
 | |
| 
 | |
| 	"go-admin/app/admin/models"
 | |
| )
 | |
| 
 | |
| type SysTables struct {
 | |
| 	TableId             int    `gorm:"primaryKey;autoIncrement" json:"tableId"`        //表编码
 | |
| 	TBName              string `gorm:"column:table_name;size:255;" json:"tableName"`   //表名称
 | |
| 	MLTBName            string `gorm:"-" json:"-"`                                     //表名称
 | |
| 	TableComment        string `gorm:"size:255;" json:"tableComment"`                  //表备注
 | |
| 	ClassName           string `gorm:"size:255;" json:"className"`                     //类名
 | |
| 	TplCategory         string `gorm:"size:255;" json:"tplCategory"`                   //
 | |
| 	PackageName         string `gorm:"size:255;" json:"packageName"`                   //包名
 | |
| 	ModuleName          string `gorm:"size:255;" json:"moduleName"`                    //go文件名
 | |
| 	ModuleFrontName     string `gorm:"size:255;comment:前端文件名;" json:"moduleFrontName"` //前端文件名
 | |
| 	BusinessName        string `gorm:"size:255;" json:"businessName"`                  //
 | |
| 	FunctionName        string `gorm:"size:255;" json:"functionName"`                  //功能名称
 | |
| 	FunctionAuthor      string `gorm:"size:255;" json:"functionAuthor"`                //功能作者
 | |
| 	PkColumn            string `gorm:"size:255;" json:"pkColumn"`
 | |
| 	PkGoField           string `gorm:"size:255;" json:"pkGoField"`
 | |
| 	PkJsonField         string `gorm:"size:255;" json:"pkJsonField"`
 | |
| 	Options             string `gorm:"size:255;" json:"options"`
 | |
| 	TreeCode            string `gorm:"size:255;" json:"treeCode"`
 | |
| 	TreeParentCode      string `gorm:"size:255;" json:"treeParentCode"`
 | |
| 	TreeName            string `gorm:"size:255;" json:"treeName"`
 | |
| 	Tree                bool   `gorm:"size:1;default:0;" json:"tree"`
 | |
| 	Crud                bool   `gorm:"size:1;default:1;" json:"crud"`
 | |
| 	Remark              string `gorm:"size:255;" json:"remark"`
 | |
| 	IsDataScope         int    `gorm:"size:1;" json:"isDataScope"`
 | |
| 	IsActions           int    `gorm:"size:1;" json:"isActions"`
 | |
| 	IsAuth              int    `gorm:"size:1;" json:"isAuth"`
 | |
| 	IsLogicalDelete     string `gorm:"size:1;" json:"isLogicalDelete"`
 | |
| 	LogicalDelete       bool   `gorm:"size:1;" json:"logicalDelete"`
 | |
| 	LogicalDeleteColumn string `gorm:"size:128;" json:"logicalDeleteColumn"`
 | |
| 	common.ModelTime
 | |
| 	common.ControlBy
 | |
| 	DataScope string       `gorm:"-" json:"dataScope"`
 | |
| 	Params    Params       `gorm:"-" json:"params"`
 | |
| 	Columns   []SysColumns `gorm:"-" json:"columns"`
 | |
| 
 | |
| 	models.BaseModel
 | |
| }
 | |
| 
 | |
| func (*SysTables) TableName() string {
 | |
| 	return "sys_tables"
 | |
| }
 | |
| 
 | |
| type Params struct {
 | |
| 	TreeCode       string `gorm:"-" json:"treeCode"`
 | |
| 	TreeParentCode string `gorm:"-" json:"treeParentCode"`
 | |
| 	TreeName       string `gorm:"-" json:"treeName"`
 | |
| }
 | |
| 
 | |
| func (e *SysTables) GetPage(tx *gorm.DB, pageSize int, pageIndex int) ([]SysTables, int, error) {
 | |
| 	var doc []SysTables
 | |
| 
 | |
| 	table := tx.Table("sys_tables")
 | |
| 
 | |
| 	if e.TBName != "" {
 | |
| 		table = table.Where("table_name = ?", e.TBName)
 | |
| 	}
 | |
| 	if e.TableComment != "" {
 | |
| 		table = table.Where("table_comment = ?", e.TableComment)
 | |
| 	}
 | |
| 
 | |
| 	var count int64
 | |
| 
 | |
| 	if err := table.Offset((pageIndex - 1) * pageSize).Limit(pageSize).Find(&doc).Offset(-1).Limit(-1).Count(&count).Error; err != nil {
 | |
| 		return nil, 0, err
 | |
| 	}
 | |
| 	//table.Where("`deleted_at` IS NULL").Count(&count)
 | |
| 	return doc, int(count), nil
 | |
| }
 | |
| 
 | |
| func (e *SysTables) Get(tx *gorm.DB, exclude bool) (SysTables, error) {
 | |
| 	var doc SysTables
 | |
| 	var err error
 | |
| 	table := tx.Table("sys_tables")
 | |
| 
 | |
| 	if e.TBName != "" {
 | |
| 		table = table.Where("table_name = ?", e.TBName)
 | |
| 	}
 | |
| 	if e.TableId != 0 {
 | |
| 		table = table.Where("table_id = ?", e.TableId)
 | |
| 	}
 | |
| 	if e.TableComment != "" {
 | |
| 		table = table.Where("table_comment = ?", e.TableComment)
 | |
| 	}
 | |
| 
 | |
| 	if err := table.First(&doc).Error; err != nil {
 | |
| 		return doc, err
 | |
| 	}
 | |
| 	var col SysColumns
 | |
| 	col.TableId = doc.TableId
 | |
| 	if doc.Columns, err = col.GetList(tx, exclude); err != nil {
 | |
| 		return doc, err
 | |
| 	}
 | |
| 
 | |
| 	return doc, nil
 | |
| }
 | |
| 
 | |
| func (e *SysTables) GetTree(tx *gorm.DB) ([]SysTables, error) {
 | |
| 	var doc []SysTables
 | |
| 	var err error
 | |
| 	table := tx.Table("sys_tables")
 | |
| 
 | |
| 	if e.TBName != "" {
 | |
| 		table = table.Where("table_name = ?", e.TBName)
 | |
| 	}
 | |
| 	if e.TableId != 0 {
 | |
| 		table = table.Where("table_id = ?", e.TableId)
 | |
| 	}
 | |
| 	if e.TableComment != "" {
 | |
| 		table = table.Where("table_comment = ?", e.TableComment)
 | |
| 	}
 | |
| 
 | |
| 	if err := table.Find(&doc).Error; err != nil {
 | |
| 		return doc, err
 | |
| 	}
 | |
| 	for i := 0; i < len(doc); i++ {
 | |
| 		var col SysColumns
 | |
| 		//col.FkCol = append(col.FkCol, SysColumns{ColumnId: 0, ColumnName: "请选择"})
 | |
| 		col.TableId = doc[i].TableId
 | |
| 		if doc[i].Columns, err = col.GetList(tx, false); err != nil {
 | |
| 			return doc, err
 | |
| 		}
 | |
| 
 | |
| 	}
 | |
| 
 | |
| 	return doc, nil
 | |
| }
 | |
| 
 | |
| func (e *SysTables) Create(tx *gorm.DB) (SysTables, error) {
 | |
| 	var doc SysTables
 | |
| 	e.CreateBy = 0
 | |
| 	result := tx.Table("sys_tables").Create(&e)
 | |
| 	if result.Error != nil {
 | |
| 		err := result.Error
 | |
| 		return doc, err
 | |
| 	}
 | |
| 	doc = *e
 | |
| 	for i := 0; i < len(e.Columns); i++ {
 | |
| 		e.Columns[i].TableId = doc.TableId
 | |
| 
 | |
| 		_, _ = e.Columns[i].Create(tx)
 | |
| 	}
 | |
| 
 | |
| 	return doc, nil
 | |
| }
 | |
| 
 | |
| func (e *SysTables) Update(tx *gorm.DB) (update SysTables, err error) {
 | |
| 	//if err = orm.Eloquent.Table("sys_tables").First(&update, e.TableId).Error; err != nil {
 | |
| 	//	return
 | |
| 	//}
 | |
| 
 | |
| 	//参数1:是要修改的数据
 | |
| 	//参数2:是修改的数据
 | |
| 	e.UpdateBy = 0
 | |
| 	if err = tx.Table("sys_tables").Where("table_id = ?", e.TableId).Updates(&e).Error; err != nil {
 | |
| 		return
 | |
| 	}
 | |
| 
 | |
| 	tableNames := make([]string, 0)
 | |
| 	for i := range e.Columns {
 | |
| 		if e.Columns[i].FkTableName != "" {
 | |
| 			tableNames = append(tableNames, e.Columns[i].FkTableName)
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	tables := make([]SysTables, 0)
 | |
| 	tableMap := make(map[string]*SysTables)
 | |
| 	if len(tableNames) > 0 {
 | |
| 		if err = tx.Table("sys_tables").Where("table_name in (?)", tableNames).Find(&tables).Error; err != nil {
 | |
| 			return
 | |
| 		}
 | |
| 		for i := range tables {
 | |
| 			tableMap[tables[i].TBName] = &tables[i]
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	for i := 0; i < len(e.Columns); i++ {
 | |
| 		if e.Columns[i].FkTableName != "" {
 | |
| 			t, ok := tableMap[e.Columns[i].FkTableName]
 | |
| 			if ok {
 | |
| 				e.Columns[i].FkTableNameClass = t.ClassName
 | |
| 				t.MLTBName = strings.Replace(t.TBName, "_", "-", -1)
 | |
| 				e.Columns[i].FkTableNamePackage = t.MLTBName
 | |
| 			} else {
 | |
| 				tableNameList := strings.Split(e.Columns[i].FkTableName, "_")
 | |
| 				e.Columns[i].FkTableNameClass = ""
 | |
| 				//e.Columns[i].FkTableNamePackage = ""
 | |
| 				for a := 0; a < len(tableNameList); a++ {
 | |
| 					strStart := string([]byte(tableNameList[a])[:1])
 | |
| 					strEnd := string([]byte(tableNameList[a])[1:])
 | |
| 					e.Columns[i].FkTableNameClass += strings.ToUpper(strStart) + strEnd
 | |
| 					//e.Columns[i].FkTableNamePackage += strings.ToLower(strStart) + strings.ToLower(strEnd)
 | |
| 				}
 | |
| 			}
 | |
| 		}
 | |
| 		_, _ = e.Columns[i].Update(tx)
 | |
| 	}
 | |
| 	return
 | |
| }
 | |
| 
 | |
| func (e *SysTables) Delete(db *gorm.DB) (success bool, err error) {
 | |
| 	tx := db.Begin()
 | |
| 	defer func() {
 | |
| 		if err != nil {
 | |
| 			tx.Rollback()
 | |
| 		} else {
 | |
| 			tx.Commit()
 | |
| 		}
 | |
| 	}()
 | |
| 	if err = tx.Table("sys_tables").Delete(SysTables{}, "table_id = ?", e.TableId).Error; err != nil {
 | |
| 		success = false
 | |
| 		return
 | |
| 	}
 | |
| 	if err = tx.Table("sys_columns").Delete(SysColumns{}, "table_id = ?", e.TableId).Error; err != nil {
 | |
| 		success = false
 | |
| 		return
 | |
| 	}
 | |
| 	success = true
 | |
| 	return
 | |
| }
 | |
| 
 | |
| func (e *SysTables) BatchDelete(tx *gorm.DB, id []int) (Result bool, err error) {
 | |
| 	if err = tx.Unscoped().Table(e.TableName()).Where(" table_id in (?)", id).Delete(&SysColumns{}).Error; err != nil {
 | |
| 		return
 | |
| 	}
 | |
| 	Result = true
 | |
| 	return
 | |
| }
 |