生成代码,逐步进行优化
This commit is contained in:
+111
-71
@@ -3,8 +3,6 @@ package code
|
||||
import (
|
||||
. "../common"
|
||||
"../db"
|
||||
"bytes"
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
@@ -22,6 +20,9 @@ type MakeCode struct {
|
||||
}
|
||||
|
||||
func (that *MakeCode) Db2JSON(name string, path string, db db.HoTimeDB) {
|
||||
isMake := false
|
||||
idSlice := Slice{}
|
||||
|
||||
if that.TableColumns == nil {
|
||||
that.TableColumns = make(map[string]map[string]Map)
|
||||
}
|
||||
@@ -60,103 +61,142 @@ func (that *MakeCode) Db2JSON(name string, path string, db db.HoTimeDB) {
|
||||
|
||||
myInit := strings.Replace(InitTpt, "{{name}}", name, -1)
|
||||
ctrList := ""
|
||||
if db.Type == "sqlite" {
|
||||
tables := db.Select("sqlite_sequence", "name")
|
||||
|
||||
for _, v := range tables {
|
||||
if that.TableConfig.GetMap(v.GetString("name")) == nil {
|
||||
that.TableConfig[v.GetString("name")] = Map{
|
||||
"label": "备注",
|
||||
"table": v.GetString("name"),
|
||||
"auth": []string{"add", "delete", "edit", "info"},
|
||||
"columns": []Map{},
|
||||
"search": []Map{
|
||||
//{"type": "tree", "name": "oid", "label": "组织", "table": "organization", "showName": "label", "children": "children"},
|
||||
{"type": "text", "name": "keyword", "label": "请输入关键词", "value": nil},
|
||||
{"type": "date", "name": "date", "label": "时间段", "value": nil},
|
||||
{"type": "select", "name": "state", "label": "状态", "value": nil,
|
||||
"option": []Map{
|
||||
{"name": "正常", "value": 0},
|
||||
{"name": "异常", "value": 1},
|
||||
{"name": "全部", "value": nil},
|
||||
},
|
||||
nowTables := make([]Map, 0)
|
||||
if db.Type == "mysql" {
|
||||
nowTables = db.Select("INFORMATION_SCHEMA.TABLES", "TABLE_NAME as name,TABLE_COMMENT as label", Map{"TABLE_SCHEMA": db.DBName})
|
||||
}
|
||||
if db.Type == "sqlite" {
|
||||
nowTables = db.Select("sqlite_sequence", "name")
|
||||
}
|
||||
//idSlice=append(idSlice,nowTables)
|
||||
for _, v := range nowTables {
|
||||
if that.TableConfig.GetMap(v.GetString("name")) == nil {
|
||||
if v.GetString("label") == "" {
|
||||
v["label"] = "备注"
|
||||
}
|
||||
that.TableConfig[v.GetString("name")] = Map{
|
||||
"label": v.GetString("label"),
|
||||
"table": v.GetString("name"),
|
||||
"auth": []string{"add", "delete", "edit", "info"},
|
||||
"columns": []Map{},
|
||||
"search": []Map{
|
||||
//{"type": "tree", "name": "oid", "label": "组织", "table": "organization", "showName": "label", "children": "children"},
|
||||
{"type": "text", "name": "keyword", "label": "请输入关键词", "value": nil},
|
||||
{"type": "date", "name": "date", "label": "时间段", "value": nil},
|
||||
{"type": "select", "name": "state", "label": "状态", "value": nil,
|
||||
"option": []Map{
|
||||
{"name": "正常", "value": 0},
|
||||
{"name": "异常", "value": 1},
|
||||
{"name": "全部", "value": nil},
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
} else {
|
||||
if !(that.TableConfig.GetMap(v.GetString("name")).GetString("label") != "备注" &&
|
||||
v.GetString("label") == "备注") {
|
||||
that.TableConfig.GetMap(v.GetString("name"))["label"] = v.GetString("label")
|
||||
}
|
||||
|
||||
}
|
||||
//初始化
|
||||
if that.TableColumns[v.GetString("name")] == nil {
|
||||
that.TableColumns[v.GetString("name")] = make(map[string]Map)
|
||||
}
|
||||
tableInfo := make([]Map, 0)
|
||||
if db.Type == "mysql" {
|
||||
tableInfo = db.Select("INFORMATION_SCHEMA.COLUMNS", "COLUMN_NAME AS name,COLUMN_TYPE AS type,COLUMN_COMMENT AS label", Map{"AND": Map{"TABLE_SCHEMA": db.DBName, "TABLE_NAME": v.GetString("name")}})
|
||||
}
|
||||
if db.Type == "sqlite" {
|
||||
tableInfo = db.Query("pragma table_info([" + v.GetString("name") + "]);")
|
||||
}
|
||||
|
||||
idSlice = append(idSlice, tableInfo)
|
||||
for _, info := range tableInfo {
|
||||
if info.GetString("label") == "" {
|
||||
info["label"] = "备注"
|
||||
}
|
||||
coloums := that.TableColumns[v.GetString("name")][info.GetString("name")]
|
||||
|
||||
if coloums == nil {
|
||||
coloums = Map{
|
||||
"name": info.GetString("name"),
|
||||
"type": info.GetString("type"),
|
||||
"label": info.GetString("label"),
|
||||
//"add": false, "info": false, "edit": false, "list": true,
|
||||
"must": false,
|
||||
}
|
||||
}
|
||||
//初始化
|
||||
if that.TableColumns[v.GetString("name")] == nil {
|
||||
that.TableColumns[v.GetString("name")] = make(map[string]Map)
|
||||
}
|
||||
tableInfo := db.Query("pragma table_info([" + v.GetString("name") + "]);")
|
||||
for _, info := range tableInfo {
|
||||
coloums := that.TableColumns[v.GetString("name")][info.GetString("name")]
|
||||
if coloums == nil {
|
||||
coloums = Map{
|
||||
"name": info.GetString("name"),
|
||||
"type": info.GetString("type"),
|
||||
"label": "备注",
|
||||
//"add": false, "info": false, "edit": false, "list": true,
|
||||
"must": false,
|
||||
}
|
||||
} else {
|
||||
//coloums["name"]=info.GetString("name")
|
||||
coloums["type"] = info.GetString("type")
|
||||
} else {
|
||||
|
||||
if !(coloums.GetString("label") != "备注" && info.GetString("label") == "备注") {
|
||||
coloums["label"] = info.GetString("label")
|
||||
}
|
||||
|
||||
that.TableColumns[v.GetString("name")][info.GetString("name")] = coloums
|
||||
|
||||
coloums["type"] = info.GetString("type")
|
||||
}
|
||||
|
||||
//创建模块文件
|
||||
//判断文件是否存在
|
||||
_, err := os.OpenFile(name+"/"+v.GetString("name"), os.O_RDONLY, os.ModePerm)
|
||||
if err != nil { //文件不存在,则根据模板创建
|
||||
myCtr := strings.Replace(CtrTpt, "{{name}}", name, -1)
|
||||
myCtr = strings.Replace(myCtr, "{{table}}", v.GetString("name"), -1)
|
||||
_ = os.MkdirAll(name, os.ModeDir)
|
||||
err = ioutil.WriteFile(name+"/"+v.GetString("name")+".go", []byte(myCtr), os.ModeAppend)
|
||||
if err != nil {
|
||||
that.Error.SetError(err)
|
||||
}
|
||||
}
|
||||
|
||||
ctrList = ctrList + `"` + v.GetString("name") + `":` + v.GetString("name") + `Ctr,`
|
||||
that.TableColumns[v.GetString("name")][info.GetString("name")] = coloums
|
||||
|
||||
}
|
||||
|
||||
newTables := []Map{}
|
||||
for k, _ := range that.TableConfig {
|
||||
newTable := that.TableConfig.GetMap(k)
|
||||
newTables = append(newTables, newTable)
|
||||
columns := []Map{}
|
||||
for _, v := range that.TableColumns[newTable.GetString("table")] {
|
||||
columns = append(columns, v)
|
||||
//创建模块文件
|
||||
//判断文件是否存在
|
||||
//_, err := os.OpenFile(name+"/"+v.GetString("name"), os.O_RDONLY, os.ModePerm)
|
||||
_, err := os.Stat(name + "/" + v.GetString("name") + ".go")
|
||||
if err != nil { //文件不存在,则根据模板创建
|
||||
myCtr := strings.Replace(CtrTpt, "{{name}}", name, -1)
|
||||
myCtr = strings.Replace(myCtr, "{{table}}", v.GetString("name"), -1)
|
||||
_ = os.MkdirAll(name, os.ModeDir)
|
||||
err = ioutil.WriteFile(name+"/"+v.GetString("name")+".go", []byte(myCtr), os.ModePerm)
|
||||
if err != nil {
|
||||
that.Error.SetError(err)
|
||||
}
|
||||
newTable["columns"] = columns
|
||||
isMake = true
|
||||
}
|
||||
that.Config["tables"] = newTables
|
||||
|
||||
ctrList = ctrList + `"` + v.GetString("name") + `":` + v.GetString("name") + "Ctr,\r\n "
|
||||
|
||||
}
|
||||
id := Md5(ObjToStr(that.Config["tables"]))
|
||||
|
||||
newTables := []Map{}
|
||||
for k, _ := range that.TableConfig {
|
||||
newTable := that.TableConfig.GetMap(k)
|
||||
newTables = append(newTables, newTable)
|
||||
columns := []Map{}
|
||||
for _, v := range that.TableColumns[newTable.GetString("table")] {
|
||||
columns = append(columns, v)
|
||||
}
|
||||
newTable["columns"] = columns
|
||||
}
|
||||
that.Config["tables"] = newTables
|
||||
|
||||
//}
|
||||
//fmt.Println(ObjToStr(idSlice))
|
||||
id := Md5(ObjToStr(idSlice))
|
||||
|
||||
if id == that.Config.GetString("id") {
|
||||
if isMake { //有生成包文件
|
||||
fmt.Println("有新的业务代码生成,请重新运行")
|
||||
os.Exit(-1)
|
||||
}
|
||||
return
|
||||
}
|
||||
fmt.Println(id, "---", that.Config.GetString("id"))
|
||||
that.Config["id"] = id
|
||||
//init文件初始化
|
||||
myInit = strings.Replace(myInit, "{{id}}", id, -1)
|
||||
myInit = strings.Replace(myInit, "{{tablesCtr}}", ctrList, -1)
|
||||
_ = os.MkdirAll(name, os.ModeDir)
|
||||
err = ioutil.WriteFile(name+"/init.go", []byte(myInit), os.ModeAppend)
|
||||
err = ioutil.WriteFile(name+"/init.go", []byte(myInit), os.ModePerm)
|
||||
if err != nil {
|
||||
that.Error.SetError(err)
|
||||
}
|
||||
//写入配置文件
|
||||
var configByte bytes.Buffer
|
||||
//var configByte bytes.Buffer
|
||||
|
||||
err = json.Indent(&configByte, []byte(that.Config.ToJsonString()), "", "\t")
|
||||
//err = json.Indent(&configByte, []byte(that.Config.ToJsonString()), "", "\t")
|
||||
_ = os.MkdirAll(filepath.Dir(path), os.ModeDir)
|
||||
err = ioutil.WriteFile(path, configByte.Bytes(), os.ModeAppend)
|
||||
err = ioutil.WriteFile(path, []byte(that.Config.ToJsonString()), os.ModePerm)
|
||||
if err != nil {
|
||||
that.Error.SetError(err)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user