migu_music_server/app/other/models/tools/sys_tables.go
2025-03-28 14:07:20 +08:00

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
}