diff --git a/code/config.go b/code/config.go index 28d8c3b..5bb1bac 100644 --- a/code/config.go +++ b/code/config.go @@ -6,7 +6,7 @@ import ( var Config = Map{ "name": "HoTimeDashBoard", - "ID": "2f92h3herh23rh2y8", + "id": "2f92h3herh23rh2y8", "label": "HoTime管理平台", "menu": []Map{ {"label": "平台首页", "name": "HelloWorld", "icon": "el-icon-s-home"}, diff --git a/code/makecode.go b/code/makecode.go index 00e2bf4..726af96 100644 --- a/code/makecode.go +++ b/code/makecode.go @@ -6,10 +6,12 @@ import ( "bytes" "encoding/json" "errors" + "fmt" "io/ioutil" "net/http" "os" "path/filepath" + "strings" ) type MakeCode struct { @@ -56,6 +58,8 @@ 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") @@ -104,7 +108,23 @@ func (that *MakeCode) Db2JSON(name string, path string, db db.HoTimeDB) { } + //创建模块文件 + //判断文件是否存在 + _, 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,` + } + newTables := []Map{} for k, _ := range that.TableConfig { newTable := that.TableConfig.GetMap(k) @@ -116,21 +136,32 @@ func (that *MakeCode) Db2JSON(name string, path string, db db.HoTimeDB) { newTable["columns"] = columns } that.Config["tables"] = newTables + + } + id := Md5(ObjToStr(that.Config["tables"])) + if id == that.Config.GetString("id") { + return + } + 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) + if err != nil { + that.Error.SetError(err) } //写入配置文件 var configByte bytes.Buffer err = json.Indent(&configByte, []byte(that.Config.ToJsonString()), "", "\t") - //判断配置文件是否序列有变化,有则修改配置,无则不变 - //fmt.Println(len(btes)) - if len(btes) != 0 && configByte.String() == string(btes) { - return - } _ = os.MkdirAll(filepath.Dir(path), os.ModeDir) err = ioutil.WriteFile(path, configByte.Bytes(), os.ModeAppend) if err != nil { that.Error.SetError(err) } + fmt.Println("有新的代码生成,请重新运行") + os.Exit(-1) } func (that *MakeCode) Info(table string) string { reStr := "" diff --git a/code/template.go b/code/template.go new file mode 100644 index 0000000..a35d826 --- /dev/null +++ b/code/template.go @@ -0,0 +1,77 @@ +package code + +var InitTpt = `package {{name}} + +import ( + . "../../../hotime" +) + +var ID = "{{id}}" + +// Project 管理端项目 +var Project = Proj{ + //"user": UserCtr, + {{tablesCtr}} +} +` +var CtrTpt = `package {{name}} + +import ( + . "../../../hotime" + . "../../../hotime/common" +) + +var {{table}}Ctr = Ctr{ + "info": func(that *Context) { + re := that.Db.Get(that.RouterString[1], that.MakeCode.Info(that.RouterString[1]), Map{"id": that.RouterString[2]}) + that.Display(0, re) + }, + "add": func(that *Context) { + inData := that.MakeCode.Add(that.RouterString[1], that.Req) + if inData == nil { + that.Display(3, "请求参数不足") + return + } + re := that.Db.Insert(that.RouterString[1], inData) + + if re == 0 { + that.Display(4, "无法插入对应数据") + return + } + + that.Display(0, re) + }, + "update": func(that *Context) { + inData := that.MakeCode.Edit(that.RouterString[1], that.Req) + if inData == nil { + that.Display(3, "没有找到要更新的数据") + return + } + re := that.Db.Update(that.RouterString[1], inData, Map{"id": that.RouterString[2]}) + + if re == 0 { + that.Display(4, "更新数据失败") + return + } + + that.Display(0, re) + }, + "remove": func(that *Context) { + re := that.Db.Delete(that.RouterString[1], Map{"id": that.RouterString[2]}) + + if re == 0 { + that.Display(4, "删除数据失败") + return + } + that.Display(0, re) + }, + "search": func(that *Context) { + + columnStr, where := that.MakeCode.Search(that.RouterString[1], that.Req) + reData := that.Db.Page(ObjToInt(that.Req.FormValue("page")), ObjToInt(that.Req.FormValue("pageRow"))). + Select(that.RouterString[1], columnStr, where) + + that.Display(0, reData) + }, +} +` diff --git a/example/config/config.json b/example/config/config.json index 4e1bd16..011efd8 100644 --- a/example/config/config.json +++ b/example/config/config.json @@ -7,11 +7,11 @@ } }, "codeConfig": { - "admin": "example/config/app.json" + "admin": "config/app.json" }, "db": { "sqlite": { - "path": "example/config/data.db" + "path": "config/data.db" } }, "defFile": [ diff --git a/example/main.go b/example/main.go index ed3473d..885be50 100644 --- a/example/main.go +++ b/example/main.go @@ -11,7 +11,7 @@ import ( func main() { - appIns := hotime.Init("example/config/config.json") + appIns := hotime.Init("config/config.json") //RESTfull接口适配 appIns.SetConnectListener(func(context *hotime.Context) bool { if len(context.RouterString) < 2 || len(context.RouterString) > 3 ||