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