sys_tables.go 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233
  1. package tools
  2. import (
  3. "IotAdmin/common/models"
  4. "IotAdmin/core/tools/utils"
  5. "strings"
  6. "gorm.io/gorm"
  7. )
  8. type SysTables struct {
  9. TableId int `gorm:"primaryKey;autoIncrement" json:"tableId"` //表编码
  10. TBName string `gorm:"column:table_name;size:255;" json:"tableName"` //表名称
  11. MLTBName string `gorm:"-" json:"-"` //表名称
  12. TableComment string `gorm:"size:255;" json:"tableComment"` //表备注
  13. ClassName string `gorm:"size:255;" json:"className"` //类名
  14. TplCategory string `gorm:"size:255;" json:"tplCategory"` //
  15. PackageName string `gorm:"size:255;" json:"packageName"` //包名
  16. BPackageName string `gorm:"-" json:"-"` //包名
  17. ModuleName string `gorm:"size:255;" json:"moduleName"` //go文件名
  18. ModuleFrontName string `gorm:"size:255;comment:前端文件名;" json:"moduleFrontName"` //前端文件名
  19. BusinessName string `gorm:"size:255;" json:"businessName"` //
  20. BBusinessName string `gorm:"-" json:"-"` //
  21. FunctionName string `gorm:"size:255;" json:"functionName"` //功能名称
  22. FunctionAuthor string `gorm:"size:255;" json:"functionAuthor"` //功能作者
  23. PkColumn string `gorm:"size:255;" json:"pkColumn"`
  24. PkGoField string `gorm:"size:255;" json:"pkGoField"`
  25. PkJsonField string `gorm:"size:255;" json:"pkJsonField"`
  26. Options string `gorm:"size:255;" json:"options"`
  27. TreeCode string `gorm:"size:255;" json:"treeCode"`
  28. TreeParentCode string `gorm:"size:255;" json:"treeParentCode"`
  29. TreeName string `gorm:"size:255;" json:"treeName"`
  30. Tree bool `gorm:"size:1;default:0;" json:"tree"`
  31. Crud bool `gorm:"size:1;default:1;" json:"crud"`
  32. Remark string `gorm:"size:255;" json:"remark"`
  33. IsDataScope int `gorm:"size:1;" json:"isDataScope"`
  34. IsActions int `gorm:"size:1;" json:"isActions"`
  35. IsAuth int `gorm:"size:1;" json:"isAuth"`
  36. models.ModelTime
  37. models.ControlBy
  38. DataScope string `gorm:"-" json:"dataScope"`
  39. Params Params `gorm:"-" json:"params"`
  40. Columns []SysColumns `gorm:"-" json:"columns"`
  41. }
  42. func (*SysTables) TableName() string {
  43. return "__gen_tables"
  44. }
  45. type Params struct {
  46. TreeCode string `gorm:"-" json:"treeCode"`
  47. TreeParentCode string `gorm:"-" json:"treeParentCode"`
  48. TreeName string `gorm:"-" json:"treeName"`
  49. }
  50. func (e *SysTables) GetPage(tx *gorm.DB, pageSize int, pageIndex int) ([]SysTables, int, error) {
  51. var doc []SysTables
  52. table := tx.Table(e.TableName())
  53. if e.TBName != "" {
  54. table = table.Where("table_name = ?", e.TBName)
  55. }
  56. if e.TableComment != "" {
  57. table = table.Where("table_comment = ?", e.TableComment)
  58. }
  59. var count int64
  60. if err := table.Offset((pageIndex - 1) * pageSize).Limit(pageSize).Find(&doc).Offset(-1).Limit(-1).Count(&count).Error; err != nil {
  61. return nil, 0, err
  62. }
  63. //table.Where("`deleted_at` IS NULL").Count(&count)
  64. return doc, int(count), nil
  65. }
  66. func (e *SysTables) Get(tx *gorm.DB, exclude bool) (SysTables, error) {
  67. var doc SysTables
  68. var err error
  69. table := tx.Table(e.TableName())
  70. if e.TBName != "" {
  71. table = table.Where("table_name = ?", e.TBName)
  72. }
  73. if e.TableId != 0 {
  74. table = table.Where("table_id = ?", e.TableId)
  75. }
  76. if e.TableComment != "" {
  77. table = table.Where("table_comment = ?", e.TableComment)
  78. }
  79. if err := table.First(&doc).Error; err != nil {
  80. return doc, err
  81. }
  82. doc.BPackageName = utils.FirstUpper(doc.PackageName)
  83. doc.BBusinessName = utils.FirstUpper(doc.BusinessName)
  84. var col SysColumns
  85. col.TableId = doc.TableId
  86. if doc.Columns, err = col.GetList(tx, exclude); err != nil {
  87. return doc, err
  88. }
  89. return doc, nil
  90. }
  91. func (e *SysTables) GetTree(tx *gorm.DB) ([]SysTables, error) {
  92. var doc []SysTables
  93. var err error
  94. table := tx.Table(e.TableName())
  95. if e.TBName != "" {
  96. table = table.Where("table_name = ?", e.TBName)
  97. }
  98. if e.TableId != 0 {
  99. table = table.Where("table_id = ?", e.TableId)
  100. }
  101. if e.TableComment != "" {
  102. table = table.Where("table_comment = ?", e.TableComment)
  103. }
  104. if err := table.Find(&doc).Error; err != nil {
  105. return doc, err
  106. }
  107. for i := 0; i < len(doc); i++ {
  108. var col SysColumns
  109. //col.FkCol = append(col.FkCol, SysColumns{ColumnId: 0, ColumnName: "请选择"})
  110. col.TableId = doc[i].TableId
  111. if doc[i].Columns, err = col.GetList(tx, false); err != nil {
  112. return doc, err
  113. }
  114. }
  115. return doc, nil
  116. }
  117. func (e *SysTables) Create(tx *gorm.DB) (SysTables, error) {
  118. var doc SysTables
  119. e.CreateBy = 0
  120. result := tx.Table(e.TableName()).Create(&e)
  121. if result.Error != nil {
  122. err := result.Error
  123. return doc, err
  124. }
  125. doc = *e
  126. for i := 0; i < len(e.Columns); i++ {
  127. e.Columns[i].TableId = doc.TableId
  128. _, _ = e.Columns[i].Create(tx)
  129. }
  130. return doc, nil
  131. }
  132. func (e *SysTables) Update(tx *gorm.DB) (update SysTables, err error) {
  133. //if err = orm.Eloquent.Table(e.TableName()).First(&update, e.TableId).Error; err != nil {
  134. // return
  135. //}
  136. //参数1:是要修改的数据
  137. //参数2:是修改的数据
  138. e.UpdateBy = 0
  139. if err = tx.Table(e.TableName()).Where("table_id = ?", e.TableId).Updates(&e).Error; err != nil {
  140. return
  141. }
  142. tableNames := make([]string, 0)
  143. for i := range e.Columns {
  144. if e.Columns[i].FkTableName != "" {
  145. tableNames = append(tableNames, e.Columns[i].FkTableName)
  146. }
  147. }
  148. tables := make([]SysTables, 0)
  149. tableMap := make(map[string]*SysTables)
  150. if len(tableNames) > 0 {
  151. if err = tx.Table(e.TableName()).Where("table_name in (?)", tableNames).Find(&tables).Error; err != nil {
  152. return
  153. }
  154. for i := range tables {
  155. tableMap[tables[i].TBName] = &tables[i]
  156. }
  157. }
  158. for i := 0; i < len(e.Columns); i++ {
  159. if e.Columns[i].FkTableName != "" {
  160. t, ok := tableMap[e.Columns[i].FkTableName]
  161. if ok {
  162. e.Columns[i].FkTableNameClass = t.ClassName
  163. t.MLTBName = strings.Replace(t.TBName, "_", "-", -1)
  164. e.Columns[i].FkTableNamePackage = t.PackageName
  165. e.Columns[i].FkTableNameBusiness = t.BusinessName
  166. } else {
  167. tableNameList := strings.Split(e.Columns[i].FkTableName, "_")
  168. e.Columns[i].FkTableNameClass = ""
  169. for a := 0; a < len(tableNameList); a++ {
  170. e.Columns[i].FkTableNameClass += utils.FirstUpper(tableNameList[a])
  171. }
  172. }
  173. }
  174. _, _ = e.Columns[i].Update(tx)
  175. }
  176. return
  177. }
  178. func (e *SysTables) Delete(db *gorm.DB) (success bool, err error) {
  179. tx := db.Begin()
  180. defer func() {
  181. if err != nil {
  182. tx.Rollback()
  183. } else {
  184. tx.Commit()
  185. }
  186. }()
  187. if err = tx.Table(e.TableName()).Delete(SysTables{}, "table_id = ?", e.TableId).Error; err != nil {
  188. success = false
  189. return
  190. }
  191. if err = tx.Table((&SysColumns{}).TableName()).Delete(SysColumns{}, "table_id = ?", e.TableId).Error; err != nil {
  192. success = false
  193. return
  194. }
  195. success = true
  196. return
  197. }
  198. func (e *SysTables) BatchDelete(tx *gorm.DB, id []int) (Result bool, err error) {
  199. if err = tx.Unscoped().Table(e.TableName()).Where(" table_id in (?)", id).Delete(&SysColumns{}).Error; err != nil {
  200. return
  201. }
  202. Result = true
  203. return
  204. }