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