SqlLoad.go 3.7 KB

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