Compare commits
21 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| f7dfd4ec77 | |||
| 2276aa12ef | |||
| 6505594fd0 | |||
| c55e26021b | |||
| 78420a692f | |||
| 6d9af149ad | |||
| 253cad35ef | |||
| 47c8736f34 | |||
| dcce8ace9e | |||
| 125ccc5c3b | |||
| 432d59d483 | |||
| 60f222b011 | |||
| 7a8b86ed12 | |||
| b940afa6b0 | |||
| 8afd00ff86 | |||
| 8992fd6d3a | |||
| 524a892480 | |||
| c420e23edb | |||
| 7419e03d67 | |||
| 9425544d1c | |||
| a8d78832df |
+12
-13
@@ -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则停止传输
|
||||||
@@ -372,7 +376,7 @@ func (that *Application) handler(w http.ResponseWriter, req *http.Request) {
|
|||||||
//访问拦截true继续false暂停
|
//访问拦截true继续false暂停
|
||||||
connectListenerLen := len(that.connectListener)
|
connectListenerLen := len(that.connectListener)
|
||||||
|
|
||||||
for i := connectListenerLen - 1; i >= 0; i-- {
|
for i := 0; i < connectListenerLen; i++ {
|
||||||
|
|
||||||
if that.connectListener[i](&context) {
|
if that.connectListener[i](&context) {
|
||||||
|
|
||||||
@@ -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{}
|
||||||
|
|||||||
@@ -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"))
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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"},
|
||||||
|
|||||||
+191
-161
@@ -43,20 +43,6 @@ func (that *MakeCode) Db2JSON(db *db.HoTimeDB, config Map) {
|
|||||||
that.Config = DeepCopyMap(Config).(Map)
|
that.Config = DeepCopyMap(Config).(Map)
|
||||||
|
|
||||||
that.Config["name"] = config.GetString("table")
|
that.Config["name"] = config.GetString("table")
|
||||||
//if err == nil {
|
|
||||||
// cmap := Map{}
|
|
||||||
// //文件是否损坏
|
|
||||||
// cmap.JsonToMap(string(btes), &that.Error)
|
|
||||||
// for k, v := range cmap {
|
|
||||||
// that.Config[k] = v //程序配置
|
|
||||||
// //Config[k] = v //系统配置
|
|
||||||
// }
|
|
||||||
// hasConfigFile = true
|
|
||||||
//} else {
|
|
||||||
//
|
|
||||||
// that.Error.SetError(errors.New("config配置文件不存在,或者配置出错,使用缺省默认配置"))
|
|
||||||
//
|
|
||||||
//}
|
|
||||||
//加载规则文件
|
//加载规则文件
|
||||||
btesRule, errRule := ioutil.ReadFile(config.GetString("rule"))
|
btesRule, errRule := ioutil.ReadFile(config.GetString("rule"))
|
||||||
that.RuleConfig = []Map{}
|
that.RuleConfig = []Map{}
|
||||||
@@ -84,38 +70,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{}
|
||||||
@@ -179,7 +133,8 @@ func (that *MakeCode) Db2JSON(db *db.HoTimeDB, config Map) {
|
|||||||
"auth": []string{"show", "add", "delete", "edit", "info", "download"},
|
"auth": []string{"show", "add", "delete", "edit", "info", "download"},
|
||||||
"columns": []Map{},
|
"columns": []Map{},
|
||||||
"search": []Map{
|
"search": []Map{
|
||||||
|
{"type": "search", "name": "keywordtable", "label": "筛选", "options": Slice{Map{"name": "无", "value": nil}}, "value": nil},
|
||||||
|
{"type": "search", "name": "daterangetable", "label": "筛选", "options": Slice{Map{"name": "无", "value": nil}}, "value": nil},
|
||||||
{"type": "search", "name": "keyword", "label": "请输入关键词", "value": nil},
|
{"type": "search", "name": "keyword", "label": "请输入关键词", "value": nil},
|
||||||
{"type": "search", "name": "daterange", "label": "时间段", "value": nil},
|
{"type": "search", "name": "daterange", "label": "时间段", "value": nil},
|
||||||
{"type": "search", "name": "sort", "label": "排序", "value": nil},
|
{"type": "search", "name": "sort", "label": "排序", "value": nil},
|
||||||
@@ -321,13 +276,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
|
||||||
@@ -371,21 +319,6 @@ func (that *MakeCode) Db2JSON(db *db.HoTimeDB, config Map) {
|
|||||||
//数据生成完后进一步解析
|
//数据生成完后进一步解析
|
||||||
for fk, fv := range that.TableColumns {
|
for fk, fv := range that.TableColumns {
|
||||||
|
|
||||||
//判断是否将表写入menu中
|
|
||||||
//isMenusGet := false //判断是否被目录收录
|
|
||||||
//for indexKey, _ := range that.IndexMenus {
|
|
||||||
// indexCode := strings.Index(indexKey, fk)
|
|
||||||
// if indexCode == 0 || indexCode == 4 {
|
|
||||||
// isMenusGet = false
|
|
||||||
// continue
|
|
||||||
// }
|
|
||||||
// //如果相等或者表名在目录中已经设置(主要前一位是/并且他是最后一个字符串)
|
|
||||||
// if indexKey == fk || (indexCode != -1 && indexKey[indexCode-1] == '/' && indexKey[indexCode:] == fk) {
|
|
||||||
// isMenusGet = true
|
|
||||||
// break
|
|
||||||
// }
|
|
||||||
//}
|
|
||||||
|
|
||||||
//目录没有收录
|
//目录没有收录
|
||||||
//if !isMenusGet {
|
//if !isMenusGet {
|
||||||
//if !hasConfigFile {
|
//if !hasConfigFile {
|
||||||
@@ -410,14 +343,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": "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": "Setting"}
|
||||||
}
|
}
|
||||||
//没有新前缀
|
//没有新前缀
|
||||||
if that.IndexMenus[prefixName] != nil {
|
if that.IndexMenus[prefixName] != nil {
|
||||||
@@ -438,103 +371,129 @@ func (that *MakeCode) Db2JSON(db *db.HoTimeDB, config Map) {
|
|||||||
that.IndexMenus[prefixName+"/"+fk] = menuIns
|
that.IndexMenus[prefixName+"/"+fk] = menuIns
|
||||||
}
|
}
|
||||||
//}
|
//}
|
||||||
|
search := that.TableConfig.GetMap(fk).GetSlice("search")
|
||||||
for k, v := range fv {
|
for k, v := range fv {
|
||||||
|
|
||||||
|
//虚招后缀是_id结尾的表字段 假设org_id
|
||||||
|
if !(len(k) <= 3 || strings.LastIndex(k, "_id") != len(k)-3) {
|
||||||
|
//普通表匹配 org_id匹配为org
|
||||||
|
oldTableName := k[:len(k)-3]
|
||||||
|
//上级ID匹配
|
||||||
|
if oldTableName == "parent" {
|
||||||
|
oldTableName = fk
|
||||||
|
}
|
||||||
|
//如果本身匹配则不再继续精简匹配
|
||||||
|
if that.TableConfig[oldTableName] == nil {
|
||||||
|
|
||||||
|
//如果依然找不到则查询system_org是否存在
|
||||||
|
if that.TableConfig[DefaultMenuParentName+"_"+oldTableName] != nil {
|
||||||
|
oldTableName = DefaultMenuParentName + "_" + oldTableName
|
||||||
|
}
|
||||||
|
|
||||||
|
//字段有动词前缀,自动进行解析
|
||||||
|
prefixColumn := strings.Index(oldTableName, "_")
|
||||||
|
|
||||||
|
//sys_org_id oldTableName即为sys此处判断为org表存在
|
||||||
|
|
||||||
|
if prefixColumn > -1 && that.TableConfig[oldTableName[prefixColumn+1:]] != nil {
|
||||||
|
oldTableName = oldTableName[prefixColumn+1:]
|
||||||
|
}
|
||||||
|
if prefixColumn >= len(oldTableName) {
|
||||||
|
prefixColumn = -1
|
||||||
|
}
|
||||||
|
//如果依然找不到则查询system_org是否存在
|
||||||
|
if prefixColumn > -1 && that.TableConfig[DefaultMenuParentName+"_"+oldTableName[prefixColumn+1:]] != nil {
|
||||||
|
oldTableName = DefaultMenuParentName + "_" + oldTableName[prefixColumn+1:]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//普通方式查询不到,则转换为大型项目模块划分,暂时只支持一级模块划分,
|
||||||
|
//比如表sys_user 字段org_id,查询不到sys_org表则查询org表,org表查询不到则查询默认前缀system_org表
|
||||||
|
//都查询不到则找不到,
|
||||||
|
prefix := strings.Index(fk, "_")
|
||||||
|
tableName := oldTableName
|
||||||
|
if prefix > 0 {
|
||||||
|
//表模块前缀sys_user sys即为前缀 sys_org
|
||||||
|
tableName = fk[:prefix+1] + oldTableName
|
||||||
|
if that.TableConfig[tableName] == nil || that.TableConfig[oldTableName] != nil {
|
||||||
|
//不存在则改为org
|
||||||
|
tableName = oldTableName
|
||||||
|
}
|
||||||
|
//表前缀+去除字段前缀
|
||||||
|
prefixColumn := strings.Index(oldTableName, "_")
|
||||||
|
if prefixColumn > -1 {
|
||||||
|
tableName = fk[:prefix+1] + oldTableName[prefixColumn+1:]
|
||||||
|
if that.TableConfig[tableName] == nil {
|
||||||
|
tableName = oldTableName
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//如果数据匹配则写入到配置中
|
||||||
|
if that.TableConfig[tableName] != nil {
|
||||||
|
v["link"] = tableName
|
||||||
|
//一般查询name字段或者label字段,如果没有name字段则默认第二个地段
|
||||||
|
if that.TableColumns[tableName]["name"] != nil {
|
||||||
|
v["value"] = "name"
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
if that.TableColumns[tableName]["label"] != nil {
|
||||||
|
v["value"] = "label"
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
tempC := that.TableConfig.GetMap(tableName).GetSlice("columns")
|
||||||
|
isGet := true
|
||||||
|
for k2, _ := range tempC {
|
||||||
|
if strings.Contains(tempC.GetMap(k2).GetString("name"), "name") || strings.Contains(tempC.GetMap(k2).GetString("name"), "title") {
|
||||||
|
v["value"] = tempC.GetMap(k2).GetString("name")
|
||||||
|
isGet = false
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if isGet && len(that.TableConfig.GetMap(tableName).GetSlice("columns")) > 2 {
|
||||||
|
v["value"] = that.TableConfig.GetMap(tableName).GetSlice("columns").GetMap(1).GetString("name")
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
//搜索服务
|
//搜索服务
|
||||||
if that.SearchColumns[fk][v.GetString("name")] == nil &&
|
if that.SearchColumns[fk][v.GetString("name")] == nil &&
|
||||||
v.GetString("type") == "select" {
|
v.GetString("type") == "select" {
|
||||||
search := that.TableConfig.GetMap(fk).GetSlice("search")
|
//search := that.TableConfig.GetMap(fk).GetSlice("search")
|
||||||
sv := DeepCopyMap(v).(Map)
|
sv := DeepCopyMap(v).(Map)
|
||||||
sv["value"] = nil
|
sv["value"] = nil
|
||||||
sv["options"] = append(sv.GetSlice("options"), Map{"name": "全部", "value": nil})
|
sv["options"] = append(sv.GetSlice("options"), Map{"name": "全部", "value": nil})
|
||||||
that.TableConfig.GetMap(fk)["search"] = append(search, sv)
|
search = append(search, sv)
|
||||||
|
that.TableConfig.GetMap(fk)["search"] = search
|
||||||
that.SearchColumns[fk][k] = sv
|
that.SearchColumns[fk][k] = sv
|
||||||
}
|
}
|
||||||
|
|
||||||
//虚招后缀是_id结尾的表字段 假设org_id
|
//搜索关键字
|
||||||
if len(k) <= 3 || strings.LastIndex(k, "_id") != len(k)-3 {
|
if strings.Contains(v.GetString("type"), "text") || v.GetString("name") == "id" {
|
||||||
continue
|
keyWordSearchData := search.GetMap(0)
|
||||||
|
|
||||||
|
keyWordSearchData["options"] = append(keyWordSearchData.GetSlice("options"), Map{"name": v.GetString("label"), "value": v.GetString("name")})
|
||||||
|
search[0] = keyWordSearchData
|
||||||
}
|
}
|
||||||
//普通表匹配 org_id匹配为org
|
if v.GetString("link") != "" &&
|
||||||
oldTableName := k[:len(k)-3]
|
v.GetString("name") != "parent_id" {
|
||||||
//上级ID匹配
|
|
||||||
if oldTableName == "parent" {
|
|
||||||
oldTableName = fk
|
|
||||||
}
|
|
||||||
//如果本身匹配则不再继续精简匹配
|
|
||||||
if that.TableConfig[oldTableName] == nil {
|
|
||||||
|
|
||||||
//如果依然找不到则查询system_org是否存在
|
keyWordSearchData := search.GetMap(0)
|
||||||
if that.TableConfig[DefaultMenuParentName+"_"+oldTableName] != nil {
|
name := strings.Replace(that.TableConfig.GetMap(v.GetString("link")).GetString("label"), "管理", "", -1)
|
||||||
oldTableName = DefaultMenuParentName + "_" + oldTableName
|
keyWordSearchData["options"] = append(keyWordSearchData.GetSlice("options"), Map{"name": name, "value": v.GetString("name")})
|
||||||
}
|
search[0] = keyWordSearchData
|
||||||
|
|
||||||
//字段有动词前缀,自动进行解析
|
|
||||||
prefixColumn := strings.Index(oldTableName, "_")
|
|
||||||
|
|
||||||
//sys_org_id oldTableName即为sys此处判断为org表存在
|
|
||||||
|
|
||||||
if prefixColumn > -1 && that.TableConfig[oldTableName[prefixColumn+1:]] != nil {
|
|
||||||
oldTableName = oldTableName[prefixColumn+1:]
|
|
||||||
}
|
|
||||||
if prefixColumn >= len(oldTableName) {
|
|
||||||
prefixColumn = -1
|
|
||||||
}
|
|
||||||
//如果依然找不到则查询system_org是否存在
|
|
||||||
if prefixColumn > -1 && that.TableConfig[DefaultMenuParentName+"_"+oldTableName[prefixColumn+1:]] != nil {
|
|
||||||
oldTableName = DefaultMenuParentName + "_" + oldTableName[prefixColumn+1:]
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//普通方式查询不到,则转换为大型项目模块划分,暂时只支持一级模块划分,
|
//搜索时间
|
||||||
//比如表sys_user 字段org_id,查询不到sys_org表则查询org表,org表查询不到则查询默认前缀system_org表
|
if strings.Contains(v.GetString("type"), "time") {
|
||||||
//都查询不到则找不到,
|
daterangeData := search.GetMap(1)
|
||||||
prefix := strings.Index(fk, "_")
|
|
||||||
tableName := oldTableName
|
|
||||||
if prefix > 0 {
|
|
||||||
//表模块前缀sys_user sys即为前缀 sys_org
|
|
||||||
tableName = fk[:prefix+1] + oldTableName
|
|
||||||
if that.TableConfig[tableName] == nil || that.TableConfig[oldTableName] != nil {
|
|
||||||
//不存在则改为org
|
|
||||||
tableName = oldTableName
|
|
||||||
}
|
|
||||||
//表前缀+去除字段前缀
|
|
||||||
prefixColumn := strings.Index(oldTableName, "_")
|
|
||||||
if prefixColumn > -1 {
|
|
||||||
tableName = fk[:prefix+1] + oldTableName[prefixColumn+1:]
|
|
||||||
if that.TableConfig[tableName] == nil {
|
|
||||||
tableName = oldTableName
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//如果数据匹配则写入到配置中
|
daterangeData["options"] = append(daterangeData.GetSlice("options"), Map{"name": v.GetString("label"), "value": v.GetString("name")})
|
||||||
if that.TableConfig[tableName] != nil {
|
search[1] = daterangeData
|
||||||
v["link"] = tableName
|
|
||||||
//一般查询name字段或者label字段,如果没有name字段则默认第二个地段
|
|
||||||
if that.TableColumns[tableName]["name"] != nil {
|
|
||||||
v["value"] = "name"
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
if that.TableColumns[tableName]["label"] != nil {
|
|
||||||
v["value"] = "label"
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
tempC := that.TableConfig.GetMap(tableName).GetSlice("columns")
|
|
||||||
isGet := true
|
|
||||||
for k2, _ := range tempC {
|
|
||||||
if strings.Contains(tempC.GetMap(k2).GetString("name"), "name") || strings.Contains(tempC.GetMap(k2).GetString("name"), "title") {
|
|
||||||
v["value"] = tempC.GetMap(k2).GetString("name")
|
|
||||||
isGet = false
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if isGet && len(that.TableConfig.GetMap(tableName).GetSlice("columns")) > 2 {
|
|
||||||
v["value"] = that.TableConfig.GetMap(tableName).GetSlice("columns").GetMap(1).GetString("name")
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -550,9 +509,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"))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -823,6 +785,8 @@ func (that *MakeCode) Search(table string, userData Map, req *http.Request, db *
|
|||||||
hasUser := false
|
hasUser := false
|
||||||
|
|
||||||
keywordStr := req.FormValue("keyword")
|
keywordStr := req.FormValue("keyword")
|
||||||
|
keywordTableStr := req.FormValue("keywordtable")
|
||||||
|
daterangeTableStr := req.FormValue("daterangetable")
|
||||||
|
|
||||||
testQu := []string{}
|
testQu := []string{}
|
||||||
testQuData := that.TableColumns[table]
|
testQuData := that.TableColumns[table]
|
||||||
@@ -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,7 +890,66 @@ 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" {
|
||||||
|
|
||||||
|
if daterangeTableStr == "" || v.GetString("name") == daterangeTableStr {
|
||||||
|
|
||||||
|
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"])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//fmt.Println(req.Form["daterange"])
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if v.GetString("type") == "time" {
|
||||||
|
//fmt.Println(req.Form["daterange"])
|
||||||
|
if daterangeTableStr == "" || v.GetString("name") == daterangeTableStr {
|
||||||
|
|
||||||
|
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 keywordTableStr == v.GetString("name") {
|
||||||
|
keyword[table+"."+keywordTableStr+"[~]"] = keywordStr
|
||||||
|
}
|
||||||
|
|
||||||
|
if keywordTableStr == v.GetString("value") {
|
||||||
|
childs := db.Select(v.GetString("link"), "id", Map{v.GetString("value") + "[~]": keywordStr})
|
||||||
|
childIds := Slice{}
|
||||||
|
for _, cv := range childs {
|
||||||
|
childIds = append(childIds, cv.GetString("id"))
|
||||||
|
}
|
||||||
|
if len(childIds) != 0 {
|
||||||
|
keyword[v.GetString("link")+".id"] = childIds
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if keywordTableStr != "" {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
if v.GetString("type") == "text" {
|
if v.GetString("type") == "text" {
|
||||||
keyword[table+"."+v.GetString("name")+"[~]"] = keywordStr
|
keyword[table+"."+v.GetString("name")+"[~]"] = keywordStr
|
||||||
|
|
||||||
@@ -990,7 +1022,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 +1034,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")
|
||||||
@@ -1049,7 +1081,9 @@ func (that *MakeCode) Search(table string, userData Map, req *http.Request, db *
|
|||||||
parentID = userData.GetCeilInt(table + "_id")
|
parentID = userData.GetCeilInt(table + "_id")
|
||||||
data["OR"] = Map{table + ".id": parentID, table + ".parent_id": nil}
|
data["OR"] = Map{table + ".id": parentID, table + ".parent_id": nil}
|
||||||
} else {
|
} else {
|
||||||
data[table+".parent_id"] = reqValue
|
|
||||||
|
data["OR"] = Map{table + ".parent_id": reqValue, table + ".id": reqValue}
|
||||||
|
|
||||||
}
|
}
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
@@ -1139,7 +1173,3 @@ func (that *MakeCode) Search(table string, userData Map, req *http.Request, db *
|
|||||||
|
|
||||||
return reStr, leftJoin, where
|
return reStr, leftJoin, where
|
||||||
}
|
}
|
||||||
|
|
||||||
func setListener() {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|||||||
+12
-2
@@ -1,11 +1,11 @@
|
|||||||
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"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -19,7 +19,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
|
||||||
@@ -75,6 +75,16 @@ func (that *Context) View() {
|
|||||||
if that.Session("user_id").Data != nil {
|
if that.Session("user_id").Data != nil {
|
||||||
that.Log["user_id"] = that.Session("user_id").ToCeilInt()
|
that.Log["user_id"] = that.Session("user_id").ToCeilInt()
|
||||||
}
|
}
|
||||||
|
ipStr := Substr(that.Req.RemoteAddr, 0, strings.Index(that.Req.RemoteAddr, ":"))
|
||||||
|
//负载均衡优化
|
||||||
|
if ipStr == "127.0.0.1" {
|
||||||
|
if that.Req.Header.Get("X-Forwarded-For") != "" {
|
||||||
|
ipStr = that.Req.Header.Get("X-Forwarded-For")
|
||||||
|
} else if that.Req.Header.Get("X-Real-IP") != "" {
|
||||||
|
ipStr = that.Req.Header.Get("X-Real-IP")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
that.Log["ip"] = ipStr
|
||||||
that.Db.Insert("logs", that.Log)
|
that.Db.Insert("logs", that.Log)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+145
-33
@@ -34,7 +34,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 +70,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(qu[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 +115,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(qu[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(qu[k-1])] = qu[k]
|
||||||
|
k++
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if where == nil {
|
if where == nil {
|
||||||
return that
|
return that
|
||||||
}
|
}
|
||||||
@@ -129,7 +175,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(qu[k-1])] = qu[k]
|
||||||
|
k++
|
||||||
|
}
|
||||||
|
}
|
||||||
if where == nil {
|
if where == nil {
|
||||||
return that
|
return that
|
||||||
}
|
}
|
||||||
@@ -144,7 +205,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(qu[k-1])] = qu[k]
|
||||||
|
k++
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if where == nil {
|
if where == nil {
|
||||||
return that
|
return that
|
||||||
}
|
}
|
||||||
@@ -193,7 +271,11 @@ func (that *HoTimeDB) GetType() string {
|
|||||||
|
|
||||||
// Action 事务,如果action返回true则执行成功;false则回滚
|
// Action 事务,如果action返回true则执行成功;false则回滚
|
||||||
func (that *HoTimeDB) Action(action func(db HoTimeDB) (isSuccess bool)) (isSuccess bool) {
|
func (that *HoTimeDB) Action(action func(db HoTimeDB) (isSuccess bool)) (isSuccess bool) {
|
||||||
db := HoTimeDB{DB: that.DB, HoTimeCache: that.HoTimeCache, Prefix: that.Prefix}
|
db := HoTimeDB{that.DB, that.ContextBase, that.DBName,
|
||||||
|
that.HoTimeCache, that.Log, that.Type,
|
||||||
|
that.Prefix, that.LastQuery, that.LastData,
|
||||||
|
that.ConnectFunc, that.LastErr, that.limit, that.Tx,
|
||||||
|
that.SlaveDB, that.Mode}
|
||||||
tx, err := db.Begin()
|
tx, err := db.Begin()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
that.LastErr.SetError(err)
|
that.LastErr.SetError(err)
|
||||||
@@ -236,7 +318,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
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -456,7 +538,7 @@ func (that *HoTimeDB) md5(query string, args ...interface{}) string {
|
|||||||
|
|
||||||
func (that *HoTimeDB) Query(query string, args ...interface{}) []Map {
|
func (that *HoTimeDB) Query(query string, args ...interface{}) []Map {
|
||||||
defer func() {
|
defer func() {
|
||||||
if that.Mode == 2 {
|
if that.Mode != 0 {
|
||||||
that.Log.Info("SQL:"+that.LastQuery, " DATA:", that.LastData, " ERROR:", that.LastErr.GetError())
|
that.Log.Info("SQL:"+that.LastQuery, " DATA:", that.LastData, " ERROR:", that.LastErr.GetError())
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
@@ -484,16 +566,18 @@ func (that *HoTimeDB) Query(query string, args ...interface{}) []Map {
|
|||||||
resl, err = db.Query(query, args...)
|
resl, err = db.Query(query, args...)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if err != nil && that.LastErr.GetError() != nil &&
|
||||||
|
that.LastErr.GetError().Error() == err.Error() {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
that.LastErr.SetError(err)
|
that.LastErr.SetError(err)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if err = db.Ping(); err != nil {
|
|
||||||
that.LastErr.SetError(err)
|
if err = db.Ping(); err == nil {
|
||||||
_ = that.InitDb()
|
|
||||||
if that.LastErr.GetError() != nil {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
return that.Query(query, args...)
|
return that.Query(query, args...)
|
||||||
}
|
}
|
||||||
|
that.LastErr.SetError(err)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -502,7 +586,7 @@ func (that *HoTimeDB) Query(query string, args ...interface{}) []Map {
|
|||||||
|
|
||||||
func (that *HoTimeDB) Exec(query string, args ...interface{}) (sql.Result, *Error) {
|
func (that *HoTimeDB) Exec(query string, args ...interface{}) (sql.Result, *Error) {
|
||||||
defer func() {
|
defer func() {
|
||||||
if that.Mode == 2 {
|
if that.Mode != 0 {
|
||||||
that.Log.Info("SQL: "+that.LastQuery, " DATA: ", that.LastData, " ERROR: ", that.LastErr.GetError())
|
that.Log.Info("SQL: "+that.LastQuery, " DATA: ", that.LastData, " ERROR: ", that.LastErr.GetError())
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
@@ -523,19 +607,18 @@ func (that *HoTimeDB) Exec(query string, args ...interface{}) (sql.Result, *Erro
|
|||||||
resl, e = that.DB.Exec(query, args...)
|
resl, e = that.DB.Exec(query, args...)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if e != nil && that.LastErr.GetError() != nil &&
|
||||||
|
that.LastErr.GetError().Error() == e.Error() {
|
||||||
|
return resl, that.LastErr
|
||||||
|
}
|
||||||
that.LastErr.SetError(e)
|
that.LastErr.SetError(e)
|
||||||
|
|
||||||
//判断是否连接断开了
|
//判断是否连接断开了
|
||||||
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...)
|
||||||
}
|
}
|
||||||
|
that.LastErr.SetError(e)
|
||||||
return resl, that.LastErr
|
return resl, that.LastErr
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -582,11 +665,13 @@ func (that *HoTimeDB) Select(table string, qu ...interface{}) []Map {
|
|||||||
data := ObjToSlice(qu[intQs])
|
data := ObjToSlice(qu[intQs])
|
||||||
for i := 0; i < len(data); i++ {
|
for i := 0; i < len(data); i++ {
|
||||||
k := data.GetString(i)
|
k := data.GetString(i)
|
||||||
if strings.Contains(k, " AS ") {
|
if strings.Contains(k, " AS ") ||
|
||||||
|
strings.Contains(k, ".") {
|
||||||
|
|
||||||
query += " " + k + " "
|
query += " " + k + " "
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
query += " `" + k + "` "
|
query += " `" + k + "` "
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -618,9 +703,9 @@ func (that *HoTimeDB) Select(table string, qu ...interface{}) []Map {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if reflect.ValueOf(qu[0]).Type().String() == "common.Slice" {
|
if reflect.ValueOf(qu[0]).Type().String() == "common.Slice" {
|
||||||
|
qu0 := ObjToSlice(qu[0])
|
||||||
for key, _ := range testQuData {
|
for key, _ := range qu0 {
|
||||||
v := testQuData.GetMap(key)
|
v := qu0.GetMap(key)
|
||||||
for k1, v1 := range v {
|
for k1, v1 := range v {
|
||||||
testQu = append(testQu, k1)
|
testQu = append(testQu, k1)
|
||||||
testQuData[k1] = v1
|
testQuData[k1] = v1
|
||||||
@@ -634,15 +719,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) + " "
|
||||||
|
}()
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-2
@@ -2,7 +2,6 @@ package main
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
. "code.hoteas.com/golang/hotime"
|
. "code.hoteas.com/golang/hotime"
|
||||||
"code.hoteas.com/golang/hotime/example/app"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
@@ -13,6 +12,6 @@ func main() {
|
|||||||
return isFinished
|
return isFinished
|
||||||
})
|
})
|
||||||
|
|
||||||
appIns.Run(Router{"app": app.AppProj})
|
appIns.Run(Router{})
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user