package sqlload import ( "fmt" "go-create-template/configs" "go-create-template/util" ) 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").Find(&tables) if err != nil { panic(err) } var genTableColumns []GenTableColumn err = configs.Engine.Table("gen_table_column").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 s := range cg { for i := 0; i < len(cg[s].TableColumns); i++ { //字段添加 //addColumn := GenTableColumn{ // TableId: cg[s].Table.Id, // ColumnName: cg[s].TableColumns[i].ColumnName, // ColumnComment: cg[s].TableColumns[i]., // ColumnType: cg[s].TableColumns[i].SQLType.Name, // GoField: util.BigHump(cg[s].TableColumns[i].ColumnName), // GoType: util.ToGoType(cg[s].TableColumns[i].SQLType.Name), //} //字段对比 for j := 0; j < len(ct[s].CTableColumns); j++ { if cg[s].TableColumns[i].ColumnName == ct[s].CTableColumns[j].Name { continue } else { } } } } }