| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180 |
- package sqlload
- import (
- "fmt"
- "go-create-template/configs"
- "go-create-template/util"
- "strings"
- )
- var CTables []CTable
- var CGans []Gen
- // Load 加载数据库参数
- func Load() {
- metas, err := configs.Engine.DBMetas()
- if err != nil {
- panic(err)
- }
- CTables = make([]CTable, len(metas))
- for i := range metas {
- table := CTable{
- Name: metas[i].Name,
- Comment: metas[i].Comment,
- Key: CTableColumn{},
- CTableColumns: make([]CTableColumn, len(metas[i].Columns())),
- }
- for j := range metas[i].Columns() {
- column := CTableColumn{}
- column.Name = metas[i].Columns()[j].Name
- column.IsPrimaryKey = metas[i].Columns()[j].IsPrimaryKey
- column.IsAutoIncrement = metas[i].Columns()[j].IsAutoIncrement
- column.Comment = metas[i].Columns()[j].Comment
- column.SQLType = CSQLType{
- Name: metas[i].Columns()[j].SQLType.Name,
- DefaultLength: metas[i].Columns()[j].SQLType.DefaultLength,
- DefaultLength2: metas[i].Columns()[j].SQLType.DefaultLength2,
- }
- column.Nullable = metas[i].Columns()[j].Nullable
- if column.IsPrimaryKey {
- table.Key = column
- }
- table.CTableColumns[j] = column
- }
- CTables[i] = table
- }
- LoadGenTableAndGenTableColumn()
- LoadGenTableData()
- }
- // LoadGenTableAndGenTableColumn 加载数据库中的表格和列字段生成
- func LoadGenTableAndGenTableColumn() {
- var tables = make([]GenTable, 0)
- err := configs.Engine.Table("gen_table").Asc("id").Find(&tables)
- if err != nil {
- panic(err)
- }
- var genTableColumns []GenTableColumn
- err = configs.Engine.Table("gen_table_column").Asc("id").Find(&genTableColumns)
- if err != nil {
- panic(err)
- }
- gens := make([]Gen, len(tables))
- m := make(map[int64]int)
- for i := range tables {
- gen := Gen{Table: tables[i], TableColumns: make([]GenTableColumn, 0)}
- gens[i] = gen
- m[tables[i].Id] = i
- }
- for i := range genTableColumns {
- gen, ok := m[genTableColumns[i].TableId]
- if ok {
- gens[gen].TableColumns = append(gens[gen].TableColumns, genTableColumns[i])
- }
- }
- CGans = gens
- }
- // LoadGenTableData 去重补漏
- func LoadGenTableData() {
- //查询表格是否重复
- ct := make(map[string]CTable)
- cg := make(map[string]Gen)
- for i := range CTables {
- ct[CTables[i].Name] = CTables[i]
- }
- for i := range CGans {
- cg[CGans[i].Table.TableName] = CGans[i]
- }
- notAddedCG := make(map[string]Gen)
- addedCG := make(map[string]CTable)
- for s := range cg {
- _, ok := ct[s]
- if ok {
- addedCG[s] = ct[s]
- } else {
- fmt.Println(cg[s])
- notAddedCG[s] = cg[s]
- }
- }
- for s := range notAddedCG {
- configs.Engine.Insert(GenTable{
- TableName: notAddedCG[s].Table.TableName,
- TableComment: notAddedCG[s].Table.TableComment,
- Name: util.BigHump(notAddedCG[s].Table.TableName),
- RouterName: util.SmallHump(notAddedCG[s].Table.TableName),
- Remark: notAddedCG[s].Table.TableComment})
- }
- //删除多余表格
- for s := range ct {
- _, ok := cg[s]
- if !ok {
- configs.Engine.Table("gen_table").Where("id = ?", cg[s].Table.Id).Delete(ct[s])
- }
- }
- LoadGenTableAndGenTableColumn()
- for i := range CTables {
- ct[CTables[i].Name] = CTables[i]
- }
- for i := range CGans {
- cg[CGans[i].Table.TableName] = CGans[i]
- }
- //添加未添加字段
- for i := range CTables {
- //获取表格
- var table GenTable
- configs.Engine.Table("gen_table").Where("table_name = ?", CTables[i].Name).Get(&table)
- for j := range CTables[i].CTableColumns {
- //获取列字段
- var tableColumn GenTableColumn
- configs.Engine.Table("gen_table_column").
- Where("table_id = ? and column_name = ?", table.Id, CTables[i].CTableColumns[j].Name).Get(&tableColumn)
- if tableColumn.Id == 0 {
- fmt.Println(table.Id, CTables[i].CTableColumns[j].Name)
- column := GenTableColumn{
- TableId: table.Id,
- Sort: 0,
- ColumnName: CTables[i].CTableColumns[j].Name,
- ColumnComment: CTables[i].CTableColumns[j].Comment,
- ColumnType: strings.ToLower(CTables[i].CTableColumns[j].SQLType.Name),
- GoType: util.ToGoType(CTables[i].CTableColumns[j].SQLType.Name),
- GoField: util.BigHump(CTables[i].CTableColumns[j].Name),
- VueShowType: "",
- IsRequired: "",
- IsKey: "",
- DictType: "",
- }
- fmt.Println(column)
- configs.Engine.Table("gen_table_column").Insert(&column)
- }
- }
- }
- //移除多余字段
- for i := range CGans {
- sign := 0
- for j := range CTables {
- if CTables[j].Name == CGans[i].Table.Name {
- sign = j
- break
- }
- }
- for k := range CGans[i].TableColumns {
- ex := false
- for j := 0; j < len(CTables[sign].CTableColumns); j++ {
- if CGans[i].TableColumns[k].ColumnName == CTables[sign].CTableColumns[j].Name {
- ex = true
- break
- }
- }
- //删除
- if !ex {
- configs.Engine.Table("gen_table_column").Where("table_id = ? and column_name = ?",
- CGans[i].TableColumns[k].Id, CGans[i].TableColumns[k].ColumnName).Limit(1).Delete(CGans[i].TableColumns[k])
- fmt.Println("delete column:", CGans[i].TableColumns[k].ColumnName)
- }
- }
- }
- }
|