235 lines
		
	
	
		
			7.2 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			235 lines
		
	
	
		
			7.2 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
package tools
 | 
						|
 | 
						|
import (
 | 
						|
	common "go-admin/common/models"
 | 
						|
	"strings"
 | 
						|
 | 
						|
	"gorm.io/gorm"
 | 
						|
)
 | 
						|
 | 
						|
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"`
 | 
						|
}
 | 
						|
 | 
						|
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
 | 
						|
}
 |