SqlLoad.go 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  1. package sqlload
  2. import (
  3. "fmt"
  4. "go-create-template/configs"
  5. "go-create-template/util"
  6. "strings"
  7. )
  8. var CTables []CTable
  9. var CGans []Gen
  10. // Load 加载数据库参数
  11. func Load() {
  12. metas, err := configs.Engine.DBMetas()
  13. if err != nil {
  14. panic(err)
  15. }
  16. CTables = make([]CTable, len(metas))
  17. for i := range metas {
  18. table := CTable{
  19. Name: metas[i].Name,
  20. Comment: metas[i].Comment,
  21. Key: CTableColumn{},
  22. CTableColumns: make([]CTableColumn, len(metas[i].Columns())),
  23. }
  24. for j := range metas[i].Columns() {
  25. column := CTableColumn{}
  26. column.Name = metas[i].Columns()[j].Name
  27. column.IsPrimaryKey = metas[i].Columns()[j].IsPrimaryKey
  28. column.IsAutoIncrement = metas[i].Columns()[j].IsAutoIncrement
  29. column.Comment = metas[i].Columns()[j].Comment
  30. column.SQLType = CSQLType{
  31. Name: metas[i].Columns()[j].SQLType.Name,
  32. DefaultLength: metas[i].Columns()[j].SQLType.DefaultLength,
  33. DefaultLength2: metas[i].Columns()[j].SQLType.DefaultLength2,
  34. }
  35. column.Nullable = metas[i].Columns()[j].Nullable
  36. if column.IsPrimaryKey {
  37. table.Key = column
  38. }
  39. table.CTableColumns[j] = column
  40. }
  41. CTables[i] = table
  42. }
  43. LoadGenTableAndGenTableColumn()
  44. LoadGenTableData()
  45. }
  46. // LoadGenTableAndGenTableColumn 加载数据库中的表格和列字段生成
  47. func LoadGenTableAndGenTableColumn() {
  48. var tables = make([]GenTable, 0)
  49. err := configs.Engine.Table("gen_table").Asc("id").Find(&tables)
  50. if err != nil {
  51. panic(err)
  52. }
  53. var genTableColumns []GenTableColumn
  54. err = configs.Engine.Table("gen_table_column").Asc("id").Find(&genTableColumns)
  55. if err != nil {
  56. panic(err)
  57. }
  58. gens := make([]Gen, len(tables))
  59. m := make(map[int64]int)
  60. for i := range tables {
  61. gen := Gen{Table: tables[i], TableColumns: make([]GenTableColumn, 0)}
  62. gens[i] = gen
  63. m[tables[i].Id] = i
  64. }
  65. for i := range genTableColumns {
  66. gen, ok := m[genTableColumns[i].TableId]
  67. if ok {
  68. gens[gen].TableColumns = append(gens[gen].TableColumns, genTableColumns[i])
  69. }
  70. }
  71. CGans = gens
  72. }
  73. // LoadGenTableData 去重补漏
  74. func LoadGenTableData() {
  75. //查询表格是否重复
  76. ct := make(map[string]CTable)
  77. cg := make(map[string]Gen)
  78. for i := range CTables {
  79. ct[CTables[i].Name] = CTables[i]
  80. }
  81. for i := range CGans {
  82. cg[CGans[i].Table.TableName] = CGans[i]
  83. }
  84. notAddedCG := make(map[string]Gen)
  85. addedCG := make(map[string]CTable)
  86. for s := range cg {
  87. _, ok := ct[s]
  88. if ok {
  89. addedCG[s] = ct[s]
  90. } else {
  91. fmt.Println(cg[s])
  92. notAddedCG[s] = cg[s]
  93. }
  94. }
  95. for s := range notAddedCG {
  96. configs.Engine.Insert(GenTable{
  97. TableName: notAddedCG[s].Table.TableName,
  98. TableComment: notAddedCG[s].Table.TableComment,
  99. Name: util.BigHump(notAddedCG[s].Table.TableName),
  100. RouterName: util.SmallHump(notAddedCG[s].Table.TableName),
  101. Remark: notAddedCG[s].Table.TableComment})
  102. }
  103. //删除多余表格
  104. for s := range ct {
  105. _, ok := cg[s]
  106. if !ok {
  107. configs.Engine.Table("gen_table").Where("id = ?", cg[s].Table.Id).Delete(ct[s])
  108. }
  109. }
  110. LoadGenTableAndGenTableColumn()
  111. for i := range CTables {
  112. ct[CTables[i].Name] = CTables[i]
  113. }
  114. for i := range CGans {
  115. cg[CGans[i].Table.TableName] = CGans[i]
  116. }
  117. //添加未添加字段
  118. for i := range CTables {
  119. //获取表格
  120. var table GenTable
  121. configs.Engine.Table("gen_table").Where("table_name = ?", CTables[i].Name).Get(&table)
  122. for j := range CTables[i].CTableColumns {
  123. //获取列字段
  124. var tableColumn GenTableColumn
  125. configs.Engine.Table("gen_table_column").
  126. Where("table_id = ? and column_name = ?", table.Id, CTables[i].CTableColumns[j].Name).Get(&tableColumn)
  127. if tableColumn.Id == 0 {
  128. fmt.Println(table.Id, CTables[i].CTableColumns[j].Name)
  129. column := GenTableColumn{
  130. TableId: table.Id,
  131. Sort: 0,
  132. ColumnName: CTables[i].CTableColumns[j].Name,
  133. ColumnComment: CTables[i].CTableColumns[j].Comment,
  134. ColumnType: strings.ToLower(CTables[i].CTableColumns[j].SQLType.Name),
  135. GoType: util.ToGoType(CTables[i].CTableColumns[j].SQLType.Name),
  136. GoField: util.BigHump(CTables[i].CTableColumns[j].Name),
  137. VueShowType: "",
  138. IsRequired: "",
  139. IsKey: "",
  140. DictType: "",
  141. }
  142. fmt.Println(column)
  143. configs.Engine.Table("gen_table_column").Insert(&column)
  144. }
  145. }
  146. }
  147. //移除多余字段
  148. for i := range CGans {
  149. sign := 0
  150. for j := range CTables {
  151. if CTables[j].Name == CGans[i].Table.Name {
  152. sign = j
  153. break
  154. }
  155. }
  156. for k := range CGans[i].TableColumns {
  157. ex := false
  158. for j := 0; j < len(CTables[sign].CTableColumns); j++ {
  159. if CGans[i].TableColumns[k].ColumnName == CTables[sign].CTableColumns[j].Name {
  160. ex = true
  161. break
  162. }
  163. }
  164. //删除
  165. if !ex {
  166. configs.Engine.Table("gen_table_column").Where("table_id = ? and column_name = ?",
  167. CGans[i].TableColumns[k].Id, CGans[i].TableColumns[k].ColumnName).Limit(1).Delete(CGans[i].TableColumns[k])
  168. fmt.Println("delete column:", CGans[i].TableColumns[k].ColumnName)
  169. }
  170. }
  171. }
  172. }