生成代码,逐步进行优化

This commit is contained in:
2021-06-05 02:18:56 +08:00
parent 6aa2b74840
commit 79453d4d2a
10 changed files with 139 additions and 270 deletions
+111 -71
View File
@@ -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)
}