Compare commits

..

10 Commits

Author SHA1 Message Date
hoteas 60f222b011 数据库操作优化 2022-08-17 16:35:52 +08:00
hoteas 7a8b86ed12 数据库操作优化,优化系统管理后台代码生成逻辑 2022-08-17 16:02:36 +08:00
hoteas b940afa6b0 数据库操作优化 2022-08-15 05:59:06 +08:00
hoteas 8afd00ff86 修复登录bug 2022-08-11 10:41:35 +08:00
hoteas 8992fd6d3a 解决BUG 2022-08-11 10:18:48 +08:00
hoteas 524a892480 修复bug 2022-08-08 04:34:26 +08:00
hoteas c420e23edb 修复bug 2022-08-08 02:37:15 +08:00
hoteas 7419e03d67 解决bug 2022-08-04 12:14:18 +08:00
hoteas 9425544d1c 修复bug 2022-08-04 02:41:41 +08:00
hoteas a8d78832df 修复配置bug 2022-08-03 12:07:55 +08:00
8 changed files with 444 additions and 592 deletions
+11 -12
View File
@@ -7,6 +7,7 @@ import (
. "code.hoteas.com/golang/hotime/db" . "code.hoteas.com/golang/hotime/db"
. "code.hoteas.com/golang/hotime/log" . "code.hoteas.com/golang/hotime/log"
"database/sql" "database/sql"
"fmt"
"github.com/sirupsen/logrus" "github.com/sirupsen/logrus"
"io/ioutil" "io/ioutil"
"net/http" "net/http"
@@ -22,7 +23,6 @@ type Application struct {
MakeCodeRouter map[string]*code.MakeCode MakeCodeRouter map[string]*code.MakeCode
MethodRouter MethodRouter
Router Router
ContextBase
Error Error
Log *logrus.Logger Log *logrus.Logger
WebConnectLog *logrus.Logger WebConnectLog *logrus.Logger
@@ -237,10 +237,8 @@ func (that *Application) SetConfig(configPath ...string) {
} }
that.Log = GetLog(that.Config.GetString("logFile"), true) if that.Error.GetError() != nil {
that.Error = Error{Logger: that.Log} fmt.Println(that.Error.GetError().Error())
if that.Config.Get("webConnectLogShow") == nil || that.Config.GetBool("webConnectLogShow") {
that.WebConnectLog = GetLog(that.Config.GetString("webConnectLogFile"), false)
} }
//文件如果损坏则不写入配置防止配置文件数据丢失 //文件如果损坏则不写入配置防止配置文件数据丢失
@@ -267,6 +265,12 @@ func (that *Application) SetConfig(configPath ...string) {
} }
that.Log = GetLog(that.Config.GetString("logFile"), true)
that.Error = Error{Logger: that.Log}
if that.Config.Get("webConnectLogShow") == nil || that.Config.GetBool("webConnectLogShow") {
that.WebConnectLog = GetLog(that.Config.GetString("webConnectLogFile"), false)
}
} }
// SetConnectListener 连接判断,返回false继续传输至控制层,true则停止传输 // SetConnectListener 连接判断,返回false继续传输至控制层,true则停止传输
@@ -562,14 +566,9 @@ func Init(config string) *Application {
codeMake["name"] = codeMake.GetString("table") codeMake["name"] = codeMake.GetString("table")
} }
if appIns.Config.GetInt("mode") > 0 { appIns.MakeCodeRouter[codeMake.GetString("name")] = &code.MakeCode{Error: appIns.Error}
appIns.MakeCodeRouter[codeMake.GetString("name")] = &code.MakeCode{Error: appIns.Error} appIns.MakeCodeRouter[codeMake.GetString("name")].Db2JSON(&appIns.Db, codeMake)
appIns.MakeCodeRouter[codeMake.GetString("name")].Db2JSON(&appIns.Db, codeMake)
} else {
appIns.MakeCodeRouter[codeMake.GetString("name")] = &code.MakeCode{Error: appIns.Error}
appIns.MakeCodeRouter[codeMake.GetString("name")].Db2JSON(nil, codeMake)
}
//接入动态代码层 //接入动态代码层
if appIns.Router == nil { if appIns.Router == nil {
appIns.Router = Router{} appIns.Router = Router{}
+232 -501
View File
@@ -57,45 +57,6 @@ var TptProject = Proj{
} }
re[link] = that.Db.Get(column.GetString("link"), seStr, Map{"id": v}) re[link] = that.Db.Get(column.GetString("link"), seStr, Map{"id": v})
} }
//权限设置
if column["type"] == "auth" {
btes, err := ioutil.ReadFile(fileConfig.GetString("config"))
if err != nil {
that.Display(4, "找不到权限配置文件")
return
}
conf := ObjToMap(string(btes))
menus := conf.GetSlice("menus")
userAuth := re.GetMap("auth")
for k1, _ := range menus {
v1 := menus.GetMap(k1)
if userAuth[v1.GetString("name")] != nil {
v1["auth"] = userAuth[v1.GetString("name")]
}
if userAuth[v1.GetString("table")] != nil {
v1["auth"] = userAuth[v1.GetString("table")]
}
v1menus := v1.GetSlice("menus")
for k2, _ := range v1menus {
v2 := v1menus.GetMap(k2)
if userAuth[v2.GetString("name")] != nil {
v2["auth"] = userAuth[v2.GetString("name")]
}
if userAuth[v2.GetString("table")] != nil {
v2["auth"] = userAuth[v2.GetString("table")]
}
}
}
re["auth"] = menus.ToJsonString()
//that.Display(0,menus)
}
} }
//如果有table字段则代为link //如果有table字段则代为link
@@ -137,7 +98,7 @@ var TptProject = Proj{
if v.GetString("link") != "" { if v.GetString("link") != "" {
if v.GetString("link") == tableName && that.MakeCodeRouter[hotimeName].TableColumns[v.GetString("link")]["parent_id"] != nil { if v.GetString("link") == tableName && that.MakeCodeRouter[hotimeName].TableColumns[v.GetString("link")]["parent_id"] != nil {
if inData["parent_id"] == nil { if inData["parent_id"] == nil && data[v.GetString("name")] != nil {
inData["parent_id"] = data.GetCeilInt64(v.GetString("name")) inData["parent_id"] = data.GetCeilInt64(v.GetString("name"))
pre := that.Db.Get(v.GetString("link"), "parent_ids", Map{"id": data.GetCeilInt64(v.GetString("name"))}) pre := that.Db.Get(v.GetString("link"), "parent_ids", Map{"id": data.GetCeilInt64(v.GetString("name"))})
inData["parent_ids"] = pre.GetString("parent_ids") inData["parent_ids"] = pre.GetString("parent_ids")
@@ -145,220 +106,89 @@ var TptProject = Proj{
} }
} }
}
if inData["auth"] != nil { if v.GetString("link") == tableName && that.MakeCodeRouter[hotimeName].TableColumns[v.GetString("link")]["auth"] != nil {
linkAuthMap := that.Db.Get(v.GetString("link"), "auth", Map{"id": data.GetCeilInt(v.GetString("name"))})
linkAuth := linkAuthMap.GetMap("auth")
btes, err := ioutil.ReadFile(fileConfig.GetString("config")) if linkAuth == nil {
btes, err := ioutil.ReadFile(fileConfig.GetString("config"))
if err != nil { if err != nil {
that.Display(4, "找不到配置文件") that.Display(4, "找不到配置文件")
return return
}
conf := ObjToMap(string(btes))
menus := conf.GetSlice("menus")
for _, v := range that.MakeCodeRouter[hotimeName].TableColumns[fileConfig.GetString("table")] {
if v.GetString("link") != "" && that.MakeCodeRouter[hotimeName].TableColumns[v.GetString("link")]["auth"] != nil {
//linkHasAuth := that.MakeCodeRouter[hotimeName].TableColumns[v.GetString("link")]["auth"]
//if linkHasAuth != nil {
linkAuthMap := that.Db.Get(v.GetString("link"), "auth", Map{"id": data.GetCeilInt(v.GetString("name"))})
linkAuth := linkAuthMap.GetMap("auth")
myAuth := Map{}
if linkAuth != nil {
for k1, _ := range menus {
v1 := menus.GetMap(k1)
if linkAuth[v1.GetString("table")] != nil {
v1["auth"] = linkAuth[v1.GetString("table")]
}
if linkAuth[v1.GetString("name")] != nil {
v1["auth"] = linkAuth[v1.GetString("name")]
}
if v1.GetString("name") != "" && v1["auth"] == nil {
v1["auth"] = Slice{"show"}
}
if v1.GetString("table") != "" && v1["auth"] == nil {
v1["auth"] = that.MakeCodeRouter[hotimeName].TableConfig.GetMap(v1.GetString("table"))["auth"]
}
if v1.GetString("table") != "" {
myAuth[v1.GetString("table")] = v1
}
if v1.GetString("name") != "" {
myAuth[v1.GetString("name")] = v1
}
v1menus := v1.GetSlice("menus")
for k2, _ := range v1menus {
v2 := v1menus.GetMap(k2)
if linkAuth[v2.GetString("table")] != nil {
v2["auth"] = linkAuth[v2.GetString("table")]
}
if linkAuth[v2.GetString("name")] != nil {
v2["auth"] = linkAuth[v2.GetString("name")]
}
if v2.GetString("name") != "" && v2["auth"] == nil {
v2["auth"] = Slice{"show"}
}
if v2.GetString("table") != "" && v2["auth"] == nil {
v2["auth"] = that.MakeCodeRouter[hotimeName].TableConfig.GetMap(v2.GetString("table"))["auth"]
}
if v2.GetString("table") != "" {
myAuth[v2.GetString("table")] = v2
}
if v2.GetString("name") != "" {
myAuth[v2.GetString("name")] = v2
}
}
}
} }
linkAuth = Map{}
conf := ObjToMap(string(btes))
menus := conf.GetSlice("menus")
newAuth := inData.GetSlice("auth") for k1, _ := range menus {
toDB := Map{} v1 := menus.GetMap(k1)
for k1, _ := range newAuth { name := v1.GetString("name")
v1 := newAuth.GetMap(k1) if name == "" {
name = v1.GetString("table")
if myAuth.GetMap(v1.GetString("name")) == nil && myAuth.GetMap(v1.GetString("table")) == nil {
continue
} }
if v1["auth"] != nil {
linkAuth[name] = v1["auth"]
auth := Slice{}
str := v1.GetString("name")
if v1.GetString("table") != "" {
str = v1.GetString("table")
} }
if v1["auth"] == nil {
if v1.GetString("auth") == "" { table := that.MakeCodeRouter[hotimeName].TableConfig.GetMap(name)
if myAuth.GetMap(str).GetString("table") != "" { if table != nil {
auth = that.MakeCodeRouter[hotimeName].TableConfig.GetMap(str).GetSlice("auth") linkAuth[name] = that.MakeCodeRouter[hotimeName].TableConfig.GetMap(name)["auth"]
} else { } else {
auth = Slice{"show"} linkAuth[name] = Slice{"show"}
} }
} else {
if strings.Contains(myAuth.GetMap(str).GetString("auth"), `"show"`) &&
strings.Contains(v1.GetString("auth"), `"show"`) {
auth = append(auth, "show")
}
if strings.Contains(myAuth.GetMap(str).GetString("auth"), `"download"`) &&
strings.Contains(v1.GetString("auth"), `"download"`) {
auth = append(auth, "download")
}
if strings.Contains(myAuth.GetMap(str).GetString("auth"), `"add"`) &&
strings.Contains(v1.GetString("auth"), `"add"`) {
auth = append(auth, "add")
//continue
}
if strings.Contains(myAuth.GetMap(str).GetString("auth"), `"edit"`) &&
strings.Contains(v1.GetString("auth"), `"edit"`) {
auth = append(auth, "edit")
}
if strings.Contains(myAuth.GetMap(str).GetString("auth"), `"delete"`) &&
strings.Contains(v1.GetString("auth"), `"delete"`) {
auth = append(auth, "delete")
}
if strings.Contains(myAuth.GetMap(str).GetString("auth"), `"info"`) &&
strings.Contains(v1.GetString("auth"), `"info"`) {
auth = append(auth, "info")
}
} }
toDB[str] = auth
v1Menus := v1.GetSlice("menus")
for k2, _ := range v1Menus {
v2 := v1Menus.GetMap(k2)
if myAuth.GetMap(v2.GetString("name")) == nil && myAuth.GetMap(v2.GetString("table")) == nil { menusChild := v1.GetSlice("menus")
for k2, _ := range menusChild {
v2 := menusChild.GetMap(k2)
name := v2.GetString("name")
if name == "" {
name = v2.GetString("table")
}
if v2["auth"] != nil {
linkAuth[name] = v2["auth"]
continue continue
} }
if v2["auth"] == nil {
auth := Slice{} table := that.MakeCodeRouter[hotimeName].TableConfig.GetMap(name)
if table != nil {
str := v2.GetString("name") linkAuth[name] = that.MakeCodeRouter[hotimeName].TableConfig.GetMap(name)["auth"]
if v2.GetString("table") != "" {
str = v2.GetString("table")
}
if v2.GetString("auth") == "" {
if myAuth.GetMap(str).GetString("table") != "" {
auth = that.MakeCodeRouter[hotimeName].TableConfig.GetMap(str).GetSlice("auth")
} else { } else {
auth = Slice{"show"} linkAuth[name] = Slice{"show"}
} }
} else {
if strings.Contains(myAuth.GetMap(str).GetString("auth"), `"show"`) &&
strings.Contains(v2.GetString("auth"), `"show"`) {
auth = append(auth, "show")
}
if strings.Contains(myAuth.GetMap(str).GetString("auth"), `"download"`) &&
strings.Contains(v1.GetString("auth"), `"download"`) {
auth = append(auth, "download")
}
if strings.Contains(myAuth.GetMap(str).GetString("auth"), `"add"`) &&
strings.Contains(v2.GetString("auth"), `"add"`) {
auth = append(auth, "add")
//continue
}
if strings.Contains(myAuth.GetMap(str).GetString("auth"), `"edit"`) &&
strings.Contains(v2.GetString("auth"), `"edit"`) {
auth = append(auth, "edit")
}
if strings.Contains(myAuth.GetMap(str).GetString("auth"), `"delete"`) &&
strings.Contains(v2.GetString("auth"), `"delete"`) {
auth = append(auth, "delete")
}
if strings.Contains(myAuth.GetMap(str).GetString("auth"), `"info"`) &&
strings.Contains(v2.GetString("auth"), `"info"`) {
auth = append(auth, "info")
}
} }
toDB[str] = auth
} }
} }
inData["auth"] = toDB.ToJsonString()
break
} }
//}
toDB := Map{}
newAuth := inData.GetMap("auth")
if newAuth == nil {
inData["auth"] = linkAuth.ToJsonString()
continue
}
for k1, _ := range newAuth {
v1 := newAuth.GetSlice(k1)
if linkAuth.GetString(k1) == "" {
continue
}
toDbli := Slice{}
for k2, _ := range v1 {
v2 := v1.GetString(k2)
if !strings.Contains(linkAuth.GetString(k1), `"`+v2+`"`) {
continue
}
toDbli = append(toDbli, v2)
}
toDB[k1] = toDbli
}
inData["auth"] = toDB.ToJsonString()
//break
} }
} }
@@ -393,237 +223,114 @@ var TptProject = Proj{
that.Display(3, "没有找到要更新的数据") that.Display(3, "没有找到要更新的数据")
return return
} }
data := that.Db.Get(fileConfig.GetString("table"), "*", Map{"id": that.Session(fileConfig.GetString("table") + "_id").ToCeilInt()}) data := that.Db.Get(fileConfig.GetString("table"), "*", Map{"id": that.Session(fileConfig.GetString("table") + "_id").ToCeilInt()})
//树状结构不允许修改自身的属性,修改别人的可以 //树状结构不允许修改自身的属性,修改别人的可以
if fileConfig.GetString("table") == tableName && that.RouterString[2] == that.Session(fileConfig.GetString("table")+"_id").ToStr() { btes, err := ioutil.ReadFile(fileConfig.GetString("config"))
if err != nil {
that.Display(4, "找不到权限配置文件")
return
}
for _, v := range that.MakeCodeRouter[hotimeName].TableColumns[fileConfig.GetString("table")] { conf := ObjToMap(string(btes))
if v.GetString("link") == "" {
continue
}
if that.MakeCodeRouter[hotimeName].TableColumns[v.GetString("link")]["parent_id"] != nil {
delete(inData, v.GetString("name"))
}
stop := conf.GetSlice("stop")
for k, _ := range stop {
v := stop.GetString(k)
//不能改对应行数据
if tableName == v && data.GetCeilInt64(v+"_id") == ObjToCeilInt64(that.RouterString[2]) {
that.Display(4, "你没有权限修改当前数据")
return
}
//不能改自身对应的数据
if tableName == fileConfig.GetString("table") && inData[v+"_id"] != nil {
delete(inData, v+"_id")
} }
} }
if inData["auth"] != nil { if inData["auth"] != nil {
btes, err := ioutil.ReadFile(fileConfig.GetString("config"))
if err != nil {
that.Display(4, "找不到配置文件")
return
}
conf := ObjToMap(string(btes))
menus := conf.GetSlice("menus") menus := conf.GetSlice("menus")
for _, v := range that.MakeCodeRouter[hotimeName].TableColumns[fileConfig.GetString("table")] { for _, v := range that.MakeCodeRouter[hotimeName].TableColumns[fileConfig.GetString("table")] {
if v.GetString("link") != "" && that.MakeCodeRouter[hotimeName].TableColumns[v.GetString("link")]["auth"] != nil {
//linkHasAuth := that.MakeCodeRouter[hotimeName].TableColumns[v.GetString("link")]["auth"]
//if linkHasAuth != nil {
if v.GetString("link") != "" && that.MakeCodeRouter[hotimeName].TableColumns[v.GetString("link")]["auth"] != nil {
linkAuthMap := that.Db.Get(v.GetString("link"), "auth", Map{"id": data.GetCeilInt(v.GetString("name"))}) linkAuthMap := that.Db.Get(v.GetString("link"), "auth", Map{"id": data.GetCeilInt(v.GetString("name"))})
linkAuth := linkAuthMap.GetMap("auth") linkAuth := linkAuthMap.GetMap("auth")
myAuth := Map{}
if linkAuth != nil {
if linkAuth == nil {
linkAuth = Map{}
for k1, _ := range menus { for k1, _ := range menus {
v1 := menus.GetMap(k1) v1 := menus.GetMap(k1)
name := v1.GetString("name")
if linkAuth[v1.GetString("table")] != nil { if name == "" {
v1["auth"] = linkAuth[v1.GetString("table")] name = v1.GetString("table")
} }
if linkAuth[v1.GetString("name")] != nil { if v1["auth"] != nil {
v1["auth"] = linkAuth[v1.GetString("name")] linkAuth[name] = v1["auth"]
}
if v1.GetString("name") != "" && v1["auth"] == nil {
v1["auth"] = Slice{"show"}
}
if v1.GetString("table") != "" && v1["auth"] == nil {
v1["auth"] = that.MakeCodeRouter[hotimeName].TableConfig.GetMap(v1.GetString("table"))["auth"]
}
if v1.GetString("table") != "" {
myAuth[v1.GetString("table")] = v1
}
if v1.GetString("name") != "" {
myAuth[v1.GetString("name")] = v1
}
v1menus := v1.GetSlice("menus")
for k2, _ := range v1menus {
v2 := v1menus.GetMap(k2)
if linkAuth[v2.GetString("table")] != nil {
v2["auth"] = linkAuth[v2.GetString("table")]
}
if linkAuth[v2.GetString("name")] != nil {
v2["auth"] = linkAuth[v2.GetString("name")]
}
if v2.GetString("name") != "" && v2["auth"] == nil {
v2["auth"] = Slice{"show"}
}
if v2.GetString("table") != "" && v2["auth"] == nil {
v2["auth"] = that.MakeCodeRouter[hotimeName].TableConfig.GetMap(v2.GetString("table"))["auth"]
}
if v2.GetString("table") != "" {
myAuth[v2.GetString("table")] = v2
}
if v2.GetString("name") != "" {
myAuth[v2.GetString("name")] = v2
}
}
}
}
newAuth := inData.GetSlice("auth")
toDB := Map{}
for k1, _ := range newAuth {
v1 := newAuth.GetMap(k1)
if myAuth.GetMap(v1.GetString("name")) == nil && myAuth.GetMap(v1.GetString("table")) == nil {
continue
}
auth := Slice{}
str := v1.GetString("name")
if v1.GetString("table") != "" {
str = v1.GetString("table")
}
if v1.GetString("auth") == "" {
if myAuth.GetMap(str).GetString("table") != "" {
auth = that.MakeCodeRouter[hotimeName].TableConfig.GetMap(str).GetSlice("auth")
} else {
auth = Slice{"show"}
}
} else {
if strings.Contains(myAuth.GetMap(str).GetString("auth"), `"show"`) &&
strings.Contains(v1.GetString("auth"), `"show"`) {
auth = append(auth, "show")
}
if strings.Contains(myAuth.GetMap(str).GetString("auth"), `"download"`) &&
strings.Contains(v1.GetString("auth"), `"download"`) {
auth = append(auth, "download")
}
if strings.Contains(myAuth.GetMap(str).GetString("auth"), `"add"`) &&
strings.Contains(v1.GetString("auth"), `"add"`) {
auth = append(auth, "add")
//continue
}
if strings.Contains(myAuth.GetMap(str).GetString("auth"), `"edit"`) &&
strings.Contains(v1.GetString("auth"), `"edit"`) {
auth = append(auth, "edit")
}
if strings.Contains(myAuth.GetMap(str).GetString("auth"), `"delete"`) &&
strings.Contains(v1.GetString("auth"), `"delete"`) {
auth = append(auth, "delete")
}
if strings.Contains(myAuth.GetMap(str).GetString("auth"), `"info"`) &&
strings.Contains(v1.GetString("auth"), `"info"`) {
auth = append(auth, "info")
}
}
toDB[str] = auth
v1Menus := v1.GetSlice("menus")
for k2, _ := range v1Menus {
v2 := v1Menus.GetMap(k2)
if myAuth.GetMap(v2.GetString("name")) == nil && myAuth.GetMap(v2.GetString("table")) == nil {
continue continue
} }
if v1["auth"] == nil {
auth := Slice{} table := that.MakeCodeRouter[hotimeName].TableConfig.GetMap(name)
if table != nil {
str := v2.GetString("name") linkAuth[name] = that.MakeCodeRouter[hotimeName].TableConfig.GetMap(name)["auth"]
if v2.GetString("table") != "" {
str = v2.GetString("table")
}
if v2.GetString("auth") == "" {
if myAuth.GetMap(str).GetString("table") != "" {
auth = that.MakeCodeRouter[hotimeName].TableConfig.GetMap(str).GetSlice("auth")
} else { } else {
auth = Slice{"show"} linkAuth[name] = Slice{"show"}
}
}
menusChild := v1.GetSlice("menus")
for k2, _ := range menusChild {
v2 := menusChild.GetMap(k2)
name := v2.GetString("name")
if name == "" {
name = v2.GetString("table")
}
if v2["auth"] != nil {
linkAuth[name] = v2["auth"]
continue
}
if v2["auth"] == nil {
table := that.MakeCodeRouter[hotimeName].TableConfig.GetMap(name)
if table != nil {
linkAuth[name] = that.MakeCodeRouter[hotimeName].TableConfig.GetMap(name)["auth"]
} else {
linkAuth[name] = Slice{"show"}
}
} }
} else {
if strings.Contains(myAuth.GetMap(str).GetString("auth"), `"show"`) &&
strings.Contains(v2.GetString("auth"), `"show"`) {
auth = append(auth, "show")
}
if strings.Contains(myAuth.GetMap(str).GetString("auth"), `"download"`) &&
strings.Contains(v1.GetString("auth"), `"download"`) {
auth = append(auth, "download")
}
if strings.Contains(myAuth.GetMap(str).GetString("auth"), `"add"`) &&
strings.Contains(v2.GetString("auth"), `"add"`) {
auth = append(auth, "add")
//continue
}
if strings.Contains(myAuth.GetMap(str).GetString("auth"), `"edit"`) &&
strings.Contains(v2.GetString("auth"), `"edit"`) {
auth = append(auth, "edit")
}
if strings.Contains(myAuth.GetMap(str).GetString("auth"), `"delete"`) &&
strings.Contains(v2.GetString("auth"), `"delete"`) {
auth = append(auth, "delete")
}
if strings.Contains(myAuth.GetMap(str).GetString("auth"), `"info"`) &&
strings.Contains(v2.GetString("auth"), `"info"`) {
auth = append(auth, "info")
}
} }
toDB[str] = auth
} }
} }
toDB := Map{}
newAuth := inData.GetMap("auth")
if newAuth == nil || len(newAuth) == 0 {
inData["auth"] = linkAuth.ToJsonString()
break
}
//不可超出用户权限
for k1, _ := range newAuth {
v1 := newAuth.GetSlice(k1)
if linkAuth.GetString(k1) == "" {
continue
}
toDbli := Slice{}
for k2, _ := range v1 {
v2 := v1.GetString(k2)
if !strings.Contains(linkAuth.GetString(k1), `"`+v2+`"`) {
continue
}
toDbli = append(toDbli, v2)
}
toDB[k1] = toDbli
}
inData["auth"] = toDB.ToJsonString() inData["auth"] = toDB.ToJsonString()
break break
} }
//}
} }
} }
//索引管理,便于检索以及权限 //索引管理,便于检索以及权限
@@ -931,47 +638,7 @@ var TptProject = Proj{
} }
re[link] = that.Db.Get(column.GetString("link"), seStr, Map{"id": v}) re[link] = that.Db.Get(column.GetString("link"), seStr, Map{"id": v})
} }
//权限设置
if column["type"] == "auth" {
btes, err := ioutil.ReadFile(fileConfig.GetString("config"))
if err != nil {
that.Display(4, "找不到权限配置文件")
return
}
conf := ObjToMap(string(btes))
menus := conf.GetSlice("menus")
userAuth := re.GetMap("auth")
for k1, _ := range menus {
v1 := menus.GetMap(k1)
if userAuth[v1.GetString("name")] != nil {
v1["auth"] = userAuth[v1.GetString("name")]
}
if userAuth[v1.GetString("table")] != nil {
v1["auth"] = userAuth[v1.GetString("table")]
}
v1menus := v1.GetSlice("menus")
for k2, _ := range v1menus {
v2 := v1menus.GetMap(k2)
if userAuth[v2.GetString("name")] != nil {
v2["auth"] = userAuth[v2.GetString("name")]
}
if userAuth[v2.GetString("table")] != nil {
v2["auth"] = userAuth[v2.GetString("table")]
}
}
}
re["auth"] = menus.ToJsonString()
//that.Display(0,menus)
}
} }
//如果有table字段则代为link //如果有table字段则代为link
if re["table"] != nil && re["table_id"] != nil { if re["table"] != nil && re["table_id"] != nil {
@@ -1008,11 +675,15 @@ var TptProject = Proj{
where := Map{"name": name} where := Map{"name": name}
if that.MakeCodeRouter[hotimeName].TableColumns[fileConfig.GetString("table")]["phone"] != nil { if that.MakeCodeRouter[hotimeName].TableColumns[fileConfig.GetString("table")]["phone"] != nil {
where["phone"] = name where["phone"] = name
where = Map{"AND": Map{"OR": where, "password": Md5(password)}} where = Map{"OR": where, "password": Md5(password)}
} else { } else {
where["password"] = Md5(password) where["password"] = Md5(password)
} }
if len(where) > 1 {
where = Map{"AND": where}
}
user := that.Db.Get(fileConfig.GetString("table"), "*", where) user := that.Db.Get(fileConfig.GetString("table"), "*", where)
if user == nil { if user == nil {
@@ -1073,58 +744,118 @@ var TptProject = Proj{
linkAuthMap := that.Db.Get(v.GetString("link"), "auth", Map{"id": user.GetCeilInt(v.GetString("name"))}) linkAuthMap := that.Db.Get(v.GetString("link"), "auth", Map{"id": user.GetCeilInt(v.GetString("name"))})
linkAuth := linkAuthMap.GetMap("auth") linkAuth := linkAuthMap.GetMap("auth")
//conf := ObjToMap(string(btes))
//menus := conf.GetSlice("menus")
if linkAuth == nil {
linkAuth = Map{}
}
for k1, _ := range menus { for k1, _ := range menus {
v1 := menus.GetMap(k1) v1 := menus.GetMap(k1)
if linkAuth[v1.GetString("name")] != nil { name := v1.GetString("name")
v1["auth"] = linkAuth[v1.GetString("name")] if name == "" {
name = v1.GetString("table")
} }
if linkAuth[v1.GetString("table")] != nil { if v1["auth"] != nil {
v1["auth"] = linkAuth[v1.GetString("table")]
if linkAuth[name] == nil {
linkAuth[name] = v1["auth"]
} else {
newAuth := Slice{}
for k2, _ := range linkAuth.GetSlice(name) {
v2 := linkAuth.GetSlice(name).GetString(k2)
if strings.Contains(v1.GetString("auth"), v2) {
newAuth = append(newAuth, v2)
}
}
linkAuth[name] = newAuth
}
} }
menusChild := v1.GetSlice("menus")
for k2, _ := range menusChild {
v2 := menusChild.GetMap(k2)
name := v2.GetString("name")
if name == "" {
name = v2.GetString("table")
}
if v2["auth"] != nil {
if linkAuth[name] == nil {
linkAuth[name] = v2["auth"]
} else {
newAuth := Slice{}
for k3, _ := range linkAuth.GetSlice(name) {
v3 := linkAuth.GetSlice(name).GetString(k3)
if strings.Contains(v2.GetString("auth"), v3) {
newAuth = append(newAuth, v3)
}
}
linkAuth[name] = newAuth
continue
}
}
}
}
for k1, _ := range menus {
v1 := menus.GetMap(k1)
//保证个人权限可用
if fileConfig.GetString("table") == v1.GetString("table") {
v1["auth"] = Slice{"info", "edit"}
}
name := v1.GetString("name")
if name == "" {
name = v1.GetString("table")
}
if linkAuth[name] != nil {
v1["auth"] = linkAuth[name]
}
v1menus := v1.GetSlice("menus") v1menus := v1.GetSlice("menus")
for k2, _ := range v1menus { for k2, _ := range v1menus {
v2 := v1menus.GetMap(k2) v2 := v1menus.GetMap(k2)
if linkAuth[v2.GetString("name")] != nil { //保证个人权限可用
v2["auth"] = linkAuth[v2.GetString("name")] if fileConfig.GetString("table") == v2.GetString("table") {
v2["auth"] = Slice{"info", "edit"}
} }
if linkAuth[v2.GetString("table")] != nil { name := v2.GetString("name")
v2["auth"] = linkAuth[v2.GetString("table")] if name == "" {
name = v2.GetString("table")
} }
if linkAuth[name] != nil {
v2["auth"] = linkAuth[name]
}
} }
} }
break
} }
} }
userAuth := user.GetMap("auth")
for k1, _ := range menus {
v1 := menus.GetMap(k1)
if userAuth[v1.GetString("table")] != nil {
v1["auth"] = userAuth[v1.GetString("table")]
}
v1menus := v1.GetSlice("menus")
for k2, _ := range v1menus {
v2 := v1menus.GetMap(k2)
if userAuth[v2.GetString("table")] != nil {
v2["auth"] = userAuth[v2.GetString("table")]
}
}
}
//不可读写数据 //不可读写数据
config := DeepCopyMap(that.MakeCodeRouter[hotimeName].Config).(Map) config := DeepCopyMap(that.MakeCodeRouter[hotimeName].Config).(Map)
config["menus"] = menus config["menus"] = menus
newTables := Map{} newTables := Map{}
newTables[fileConfig.GetString("table")] = config.GetMap("tables").GetMap(fileConfig.GetString("table"))
for k1, _ := range menus { for k1, _ := range menus {
v1 := menus.GetMap(k1) v1 := menus.GetMap(k1)
if config.GetMap("tables").GetMap(v1.GetString("table")) != nil { if config.GetMap("tables").GetMap(v1.GetString("table")) != nil && len(v1.GetSlice("auth")) != 0 {
config.GetMap("tables").GetMap(v1.GetString("table"))["auth"] = Slice{}
newTables[v1.GetString("name")] = config.GetMap("tables").GetMap(v1.GetString("table")) newTables[v1.GetString("name")] = config.GetMap("tables").GetMap(v1.GetString("table"))
} }
v1menus := v1.GetSlice("menus") v1menus := v1.GetSlice("menus")
for k2, _ := range v1.GetSlice("menus") { for k2, _ := range v1.GetSlice("menus") {
v2 := v1menus.GetMap(k2) v2 := v1menus.GetMap(k2)
if config.GetMap("tables").GetMap(v2.GetString("table")) != nil { if config.GetMap("tables").GetMap(v2.GetString("table")) != nil && len(v2.GetSlice("auth")) != 0 {
//有自定义配置文件 //有自定义配置文件
if conf.GetMap("tables") != nil && conf.GetMap("tables").GetMap(v2.GetString("table")) != nil { if conf.GetMap("tables") != nil && conf.GetMap("tables").GetMap(v2.GetString("table")) != nil {
@@ -1143,7 +874,7 @@ var TptProject = Proj{
} }
} }
config.GetMap("tables").GetMap(v2.GetString("table"))["auth"] = Slice{}
newTables[v2.GetString("table")] = config.GetMap("tables").GetMap(v2.GetString("table")) newTables[v2.GetString("table")] = config.GetMap("tables").GetMap(v2.GetString("table"))
} }
+9
View File
@@ -8,6 +8,15 @@ var Config = Map{
"name": "HoTimeDashBoard", "name": "HoTimeDashBoard",
//"id": "2f92h3herh23rh2y8", //"id": "2f92h3herh23rh2y8",
"label": "HoTime管理平台", "label": "HoTime管理平台",
"stop": Slice{"role", "org"}, //不更新的,同时不允许修改用户自身对应的表数据
"labelConfig": Map{
"show": "开启",
"add": "添加",
"delete": "删除",
"edit": "编辑",
"info": "查看详情",
"download": "下载清单",
},
"menus": []Map{ "menus": []Map{
//{"label": "平台首页", "name": "HelloWorld", "icon": "el-icon-s-home"}, //{"label": "平台首页", "name": "HelloWorld", "icon": "el-icon-s-home"},
//{"label": "测试表格", "table": "table", "icon": "el-icon-suitcase"}, //{"label": "测试表格", "table": "table", "icon": "el-icon-suitcase"},
+50 -49
View File
@@ -84,38 +84,6 @@ func (that *MakeCode) Db2JSON(db *db.HoTimeDB, config Map) {
} }
that.IndexMenus = Map{} that.IndexMenus = Map{}
//menusConfig := that.Config.GetSlice("menus")
////将配置写入到内存中仅作为判断用
//if menusConfig != nil {
// for kmenu, _ := range menusConfig {
// menu := menusConfig.GetMap(kmenu)
// if menu != nil {
// mname := menu.GetString("table")
// if mname == "" { //如果为空则不是表格
// mname = menu.GetString("name")
// }
// that.IndexMenus[mname] = menu
// childMenus := menu.GetSlice("menus")
// if childMenus != nil {
// for ckmenu, _ := range childMenus {
// cmenu := childMenus.GetMap(ckmenu)
// if cmenu != nil {
// cname := cmenu.GetString("table")
// if cmenu.GetString("table") == "" {
// continue
// }
// that.IndexMenus[mname+"/"+cname] = cmenu
// }
//
// }
//
// }
//
// }
//
// }
//}
that.TableConfig = that.Config.GetMap("tables") that.TableConfig = that.Config.GetMap("tables")
if that.TableConfig == nil { if that.TableConfig == nil {
that.TableConfig = Map{} that.TableConfig = Map{}
@@ -321,13 +289,6 @@ func (that *MakeCode) Db2JSON(db *db.HoTimeDB, config Map) {
//} //}
} }
//else {
//
// //if !(coloum.GetString("label") != "备注" && info.GetString("label") == "备注") {
// // coloum["label"] = info.GetString("label")
// //}
// //coloum["type"] = info.GetString("type")
//}
//暂时不关闭参数,保证表数据完全读取到 //暂时不关闭参数,保证表数据完全读取到
that.TableColumns[v.GetString("name")][info.GetString("name")] = coloum that.TableColumns[v.GetString("name")][info.GetString("name")] = coloum
@@ -410,14 +371,14 @@ func (that *MakeCode) Db2JSON(db *db.HoTimeDB, config Map) {
prefixName = DefaultMenuParentName + ":" + prefixName prefixName = DefaultMenuParentName + ":" + prefixName
menuIns := Map{"label": that.TableConfig.GetMap(fk).GetString("label"), "table": fk} menuIns := Map{"label": that.TableConfig.GetMap(fk).GetString("label"), "table": fk, "auth": that.TableConfig.GetMap(fk).GetSlice("auth")}
//多耗费一点内存 //多耗费一点内存
mMenu := Map{"menus": Slice{menuIns}, "label": that.TableConfig.GetMap(fk).GetString("label"), "name": prefixName, "icon": "el-icon-setting"} mMenu := Map{"menus": Slice{menuIns}, "auth": Slice{"show"}, "label": that.TableConfig.GetMap(fk).GetString("label"), "name": prefixName, "icon": "el-icon-setting"}
//表名有前缀 //表名有前缀
if !isNewPrefix { if !isNewPrefix {
//是否已有对应前缀,已经有对应的menu只需要push进去即可 //是否已有对应前缀,已经有对应的menu只需要push进去即可
prefixName = DefaultMenuParentName prefixName = DefaultMenuParentName
mMenu = Map{"menus": Slice{menuIns}, "label": "系统管理", "name": prefixName, "icon": "el-icon-setting"} mMenu = Map{"menus": Slice{menuIns}, "auth": Slice{"show"}, "label": "系统管理", "name": prefixName, "icon": "el-icon-setting"}
} }
//没有新前缀 //没有新前缀
if that.IndexMenus[prefixName] != nil { if that.IndexMenus[prefixName] != nil {
@@ -550,9 +511,12 @@ func (that *MakeCode) Db2JSON(db *db.HoTimeDB, config Map) {
search := that.TableConfig.GetMap(fk).GetSlice("search") search := that.TableConfig.GetMap(fk).GetSlice("search")
sv := Map{"type": "tree", "label": v["label"], "name": v["name"], "value": v["value"], "link": v["link"]} sv := Map{"type": "tree", "label": v["label"], "name": v["name"], "value": v["value"], "link": v["link"]}
that.TableConfig.GetMap(fk)["search"] = append(search, sv) that.TableConfig.GetMap(fk)["search"] = append(search, sv)
that.SearchColumns[fk][k] = sv that.SearchColumns[fk][k] = sv
} }
if fk == that.FileConfig.GetString("table") && v["link"] != nil && that.TableColumns[v.GetString("link")]["parent_id"] != nil {
that.Config["stop"] = append(that.Config.GetSlice("stop"), v.GetString("link"))
}
} }
} }
@@ -839,6 +803,7 @@ func (that *MakeCode) Search(table string, userData Map, req *http.Request, db *
continue continue
} }
if v["list"] != false { if v["list"] != false {
if v.GetString("link") != "" && if v.GetString("link") != "" &&
@@ -871,9 +836,17 @@ func (that *MakeCode) Search(table string, userData Map, req *http.Request, db *
} }
} else { } else {
reStr += table + "." + v.GetString("name") + "," reStr += table + "." + v.GetString("name") + ","
} }
if v["name"] == "parent_id" && v.GetString("link") != "" {
leftJoin["[>]"+v.GetString("link")+" selfParent"] =
"selfParent.id=" +
v.GetString("link") + "." + v.GetString("name")
reStr += "selfParent." + v.GetString("value") + " AS " + v.GetString("link") + "_" + v.GetString("name") + "_" + v.GetString("value") + ","
}
//准备加入索引权限 //准备加入索引权限
if v.GetString("link") != "" && if v.GetString("link") != "" &&
userData != nil && userData != nil &&
@@ -917,6 +890,38 @@ func (that *MakeCode) Search(table string, userData Map, req *http.Request, db *
} }
if v.GetString("type") == "text" {
reqValue := req.FormValue(v.GetString("name"))
if reqValue != "" {
data[table+"."+v.GetString("name")+"[~]"] = reqValue
}
}
if v.GetString("type") == "unixtime" {
//fmt.Println(req.Form["daterange"])
if len(req.Form[v.GetString("name")]) == 1 {
daterange[table+"."+v.GetString("name")+"[>]"] = req.FormValue("daterange")
} else if len(req.Form[v.GetString("name")]) == 2 {
daterange[table+"."+v.GetString("name")+"[<>]"] = ObjToSlice(req.Form["daterange"])
}
}
if v.GetString("type") == "time" {
//fmt.Println(req.Form["daterange"])
if len(req.Form[v.GetString("name")]) == 1 {
t := time.Unix(ObjToCeilInt64(req.FormValue(v.GetString("name"))), 0).Format("2006-01-02 15:04:05")
daterange[table+"."+v.GetString("name")+"[>]"] = t
} else if len(req.Form[v.GetString("name")]) == 2 {
t1 := time.Unix(ObjToCeilInt64(req.Form[v.GetString("name")][0]), 0).Format("2006-01-02 15:04:05")
t2 := time.Unix(ObjToCeilInt64(req.Form[v.GetString("name")][1]), 0).Format("2006-01-02 15:04:05")
daterange[table+"."+v.GetString("name")+"[<>]"] = Slice{t1, t2}
}
}
if keywordStr != "" { if keywordStr != "" {
if v.GetString("type") == "text" { if v.GetString("type") == "text" {
keyword[table+"."+v.GetString("name")+"[~]"] = keywordStr keyword[table+"."+v.GetString("name")+"[~]"] = keywordStr
@@ -990,7 +995,7 @@ func (that *MakeCode) Search(table string, userData Map, req *http.Request, db *
if v.GetString("type") == "unixtime" { if v.GetString("type") == "unixtime" {
//fmt.Println(req.Form["daterange"]) //fmt.Println(req.Form["daterange"])
if len(req.Form["daterange"]) == 1 { if len(req.Form["daterange"]) == 1 {
daterange[table+"."+v.GetString("name")+"[<]"] = req.FormValue("daterange") daterange[table+"."+v.GetString("name")+"[>]"] = req.FormValue("daterange")
} else if len(req.Form["daterange"]) == 2 { } else if len(req.Form["daterange"]) == 2 {
daterange[table+"."+v.GetString("name")+"[<>]"] = ObjToSlice(req.Form["daterange"]) daterange[table+"."+v.GetString("name")+"[<>]"] = ObjToSlice(req.Form["daterange"])
@@ -1002,7 +1007,7 @@ func (that *MakeCode) Search(table string, userData Map, req *http.Request, db *
if len(req.Form["daterange"]) == 1 { if len(req.Form["daterange"]) == 1 {
t := time.Unix(ObjToCeilInt64(req.FormValue("daterange")), 0).Format("2006-01-02 15:04:05") t := time.Unix(ObjToCeilInt64(req.FormValue("daterange")), 0).Format("2006-01-02 15:04:05")
daterange[table+"."+v.GetString("name")+"[<]"] = t daterange[table+"."+v.GetString("name")+"[>]"] = t
} else if len(req.Form["daterange"]) == 2 { } else if len(req.Form["daterange"]) == 2 {
t1 := time.Unix(ObjToCeilInt64(req.Form["daterange"][0]), 0).Format("2006-01-02 15:04:05") t1 := time.Unix(ObjToCeilInt64(req.Form["daterange"][0]), 0).Format("2006-01-02 15:04:05")
@@ -1139,7 +1144,3 @@ func (that *MakeCode) Search(table string, userData Map, req *http.Request, db *
return reStr, leftJoin, where return reStr, leftJoin, where
} }
func setListener() {
}
+1 -2
View File
@@ -1,7 +1,6 @@
package hotime package hotime
import ( import (
. "code.hoteas.com/golang/hotime/cache"
. "code.hoteas.com/golang/hotime/common" . "code.hoteas.com/golang/hotime/common"
. "code.hoteas.com/golang/hotime/db" . "code.hoteas.com/golang/hotime/db"
"encoding/json" "encoding/json"
@@ -19,7 +18,7 @@ type Context struct {
Db *HoTimeDB Db *HoTimeDB
RespData Map RespData Map
RespFunc func() RespFunc func()
CacheIns //CacheIns
SessionIns SessionIns
DataSize int DataSize int
HandlerStr string //复写请求url HandlerStr string //复写请求url
+134 -25
View File
@@ -13,6 +13,7 @@ import (
"reflect" "reflect"
"sort" "sort"
"strings" "strings"
"time"
) )
type HoTimeDB struct { type HoTimeDB struct {
@@ -34,7 +35,7 @@ type HoTimeDB struct {
} }
type HotimeDBBuilder struct { type HotimeDBBuilder struct {
*HoTimeDB HoTimeDB *HoTimeDB
table string table string
selects []interface{} selects []interface{}
join Slice join Slice
@@ -70,7 +71,21 @@ func (that *HotimeDBBuilder) Select(qu ...interface{}) []Map {
return that.HoTimeDB.Select(that.table, that.join, qu, that.where) return that.HoTimeDB.Select(that.table, that.join, qu, that.where)
} }
func (that *HotimeDBBuilder) Update(data Map) int64 { func (that *HotimeDBBuilder) Update(qu ...interface{}) int64 {
lth := len(qu)
if lth == 0 {
return 0
}
data := Map{}
if lth == 1 {
data = ObjToMap(qu[0])
}
if lth > 1 {
for k := 1; k < lth; k++ {
data[ObjToStr(k-1)] = qu[k]
k++
}
}
return that.HoTimeDB.Update(that.table, data, that.where) return that.HoTimeDB.Update(that.table, data, that.where)
} }
@@ -101,19 +116,51 @@ func (that *HotimeDBBuilder) FullJoin(table, joinStr string) *HotimeDBBuilder {
return that return that
} }
func (that *HotimeDBBuilder) Join(join Map) *HotimeDBBuilder { func (that *HotimeDBBuilder) Join(qu ...interface{}) *HotimeDBBuilder {
lth := len(qu)
if lth == 0 {
return that
}
data := Map{}
if lth == 1 {
data = ObjToMap(qu[0])
}
if lth > 1 {
for k := 1; k < lth; k++ {
data[ObjToStr(k-1)] = qu[k]
k++
}
}
if that.join == nil { if that.join == nil {
that.join = Slice{} that.join = Slice{}
} }
if join == nil { if data == nil {
return that return that
} }
that.join = append(that.join, join) that.join = append(that.join, data)
return that return that
} }
func (that *HotimeDBBuilder) And(where Map) *HotimeDBBuilder { func (that *HotimeDBBuilder) And(qu ...interface{}) *HotimeDBBuilder {
lth := len(qu)
if lth == 0 {
return that
}
var where Map
if lth == 1 {
where = ObjToMap(qu[0])
}
if lth > 1 {
where = Map{}
for k := 1; k < lth; k++ {
where[ObjToStr(k-1)] = qu[k]
k++
}
}
if where == nil { if where == nil {
return that return that
} }
@@ -129,7 +176,22 @@ func (that *HotimeDBBuilder) And(where Map) *HotimeDBBuilder {
return that return that
} }
func (that *HotimeDBBuilder) Or(where Map) *HotimeDBBuilder { func (that *HotimeDBBuilder) Or(qu ...interface{}) *HotimeDBBuilder {
lth := len(qu)
if lth == 0 {
return that
}
var where Map
if lth == 1 {
where = ObjToMap(qu[0])
}
if lth > 1 {
where = Map{}
for k := 1; k < lth; k++ {
where[ObjToStr(k-1)] = qu[k]
k++
}
}
if where == nil { if where == nil {
return that return that
} }
@@ -144,7 +206,24 @@ func (that *HotimeDBBuilder) Or(where Map) *HotimeDBBuilder {
return that return that
} }
func (that *HotimeDBBuilder) Where(where Map) *HotimeDBBuilder { func (that *HotimeDBBuilder) Where(qu ...interface{}) *HotimeDBBuilder {
lth := len(qu)
if lth == 0 {
return that
}
var where Map
if lth == 1 {
where = ObjToMap(qu[0])
}
if lth > 1 {
where = Map{}
for k := 1; k < lth; k++ {
where[ObjToStr(k-1)] = qu[k]
k++
}
}
if where == nil { if where == nil {
return that return that
} }
@@ -236,7 +315,7 @@ func (that *HoTimeDB) InitDb(err ...*Error) *Error {
e := that.SlaveDB.Ping() e := that.SlaveDB.Ping()
that.LastErr.SetError(e) that.LastErr.SetError(e)
} }
that.DB.SetConnMaxLifetime(time.Second)
return that.LastErr return that.LastErr
} }
@@ -486,13 +565,15 @@ func (that *HoTimeDB) Query(query string, args ...interface{}) []Map {
that.LastErr.SetError(err) that.LastErr.SetError(err)
if err != nil { if err != nil {
if err = db.Ping(); err != nil { if err = db.Ping(); err == nil {
that.LastErr.SetError(err)
_ = that.InitDb()
if that.LastErr.GetError() != nil {
return nil
}
return that.Query(query, args...) return that.Query(query, args...)
} else {
err = that.InitDb()
that.LastErr.SetError(err)
if err == nil {
return that.Query(query, args...)
}
} }
return nil return nil
} }
@@ -528,13 +609,14 @@ func (that *HoTimeDB) Exec(query string, args ...interface{}) (sql.Result, *Erro
//判断是否连接断开了 //判断是否连接断开了
if e != nil { if e != nil {
if e = that.DB.Ping(); e != nil { if e = that.DB.Ping(); e == nil {
that.LastErr.SetError(e)
_ = that.InitDb()
if that.LastErr.GetError() != nil {
return resl, that.LastErr
}
return that.Exec(query, args...) return that.Exec(query, args...)
} else {
e = that.InitDb()
that.LastErr.SetError(e)
if e == nil {
return that.Exec(query, args...)
}
} }
return resl, that.LastErr return resl, that.LastErr
} }
@@ -634,15 +716,42 @@ func (that *HoTimeDB) Select(table string, qu ...interface{}) []Map {
v := testQuData[k] v := testQuData[k]
switch Substr(k, 0, 3) { switch Substr(k, 0, 3) {
case "[>]": case "[>]":
query += " LEFT JOIN `" + Substr(k, 3, len(k)-3) + "` ON " + v.(string) + " " func() {
table := Substr(k, 3, len(k)-3)
if !strings.Contains(table, " ") {
table = "`" + table + "`"
}
query += " LEFT JOIN " + table + " ON " + v.(string) + " "
}()
case "[<]": case "[<]":
query += " RIGHT JOIN `" + Substr(k, 3, len(k)-3) + "` ON " + v.(string) + " " func() {
table := Substr(k, 3, len(k)-3)
if !strings.Contains(table, " ") {
table = "`" + table + "`"
}
query += " RIGHT JOIN " + table + " ON " + v.(string) + " "
}()
} }
switch Substr(k, 0, 4) { switch Substr(k, 0, 4) {
case "[<>]": case "[<>]":
query += " FULL JOIN `" + Substr(k, 4, len(k)-4) + "` ON " + v.(string) + " " func() {
table := Substr(k, 4, len(k)-4)
if !strings.Contains(table, " ") {
table = "`" + table + "`"
}
query += " FULL JOIN " + table + " ON " + v.(string) + " "
}()
case "[><]": case "[><]":
query += " INNER JOIN `" + Substr(k, 4, len(k)-4) + "` ON " + v.(string) + " " func() {
table := Substr(k, 4, len(k)-4)
if !strings.Contains(table, " ") {
table = "`" + table + "`"
}
query += " INNER JOIN " + table + " ON " + v.(string) + " "
}()
} }
} }
} }
+4 -3
View File
@@ -23,10 +23,11 @@
], ],
"db": { "db": {
"mysql": { "mysql": {
"host": "192.168.6.253", "host": "192.168.2.20",
"name": "dgs-cms", "name": "gov_crawler",
"password": "dasda8454456", "password": "fh22y8b882d",
"port": "3306", "port": "3306",
"prefix": "",
"user": "root" "user": "root"
} }
}, },
+3
View File
@@ -94,6 +94,9 @@ func findCaller(skip int) string {
if file == "code/makecode.go" { if file == "code/makecode.go" {
file, line = getCaller(skip + i + j) file, line = getCaller(skip + i + j)
} }
if strings.Index(file, "common/") == 0 {
file, line = getCaller(skip + i + j)
}
if strings.Contains(file, "application.go") { if strings.Contains(file, "application.go") {
file, line = getCaller(skip + i + j) file, line = getCaller(skip + i + j)
} }