|
@@ -0,0 +1,211 @@
|
|
|
|
+// checkrule
|
|
|
|
+package admin
|
|
|
|
+
|
|
|
|
+import (
|
|
|
|
+ "jy/extract"
|
|
|
|
+ . "jy/mongodbutil"
|
|
|
|
+ ju "jy/util"
|
|
|
|
+ qu "qfw/util"
|
|
|
|
+
|
|
|
|
+ "github.com/gin-gonic/gin"
|
|
|
|
+)
|
|
|
|
+
|
|
|
|
+func init() {
|
|
|
|
+ //正则规则验证
|
|
|
|
+ Admin.POST("/check/prerule", func(c *gin.Context) {
|
|
|
|
+ rule, _ := c.GetPostForm("s_rule")
|
|
|
|
+ con, _ := c.GetPostForm("s_testcon")
|
|
|
|
+ str := extract.PreRulesCheckReg(con, rule)
|
|
|
|
+ c.JSON(200, gin.H{"rep": str})
|
|
|
|
+ })
|
|
|
|
+ Admin.POST("/check/extrule", func(c *gin.Context) {
|
|
|
|
+ rule, _ := c.GetPostForm("s_rule")
|
|
|
|
+ con, _ := c.GetPostForm("s_testcon")
|
|
|
|
+ field, _ := c.GetPostForm("s_field")
|
|
|
|
+ tmp := extract.ExtRulesCheckReg(field, con, rule)
|
|
|
|
+ c.JSON(200, gin.H{"rep": tmp})
|
|
|
|
+ })
|
|
|
|
+ Admin.POST("/check/backrule", func(c *gin.Context) {
|
|
|
|
+ rule, _ := c.GetPostForm("s_rule")
|
|
|
|
+ con, _ := c.GetPostForm("s_testcon")
|
|
|
|
+ str := extract.BackRulesCheckReg(con, rule)
|
|
|
|
+ c.JSON(200, gin.H{"rep": str})
|
|
|
|
+ })
|
|
|
|
+
|
|
|
|
+ //lua脚本验证
|
|
|
|
+ //通用前置验证
|
|
|
|
+ Admin.GET("/check/lua/pre", func(c *gin.Context) {
|
|
|
|
+ version := c.Query("version")
|
|
|
|
+ s_code := c.Query("s_code")
|
|
|
|
+ rule, _ := Mgo.FindOne("rule_pre", `{"s_code":"`+s_code+`"}`)
|
|
|
|
+ (*rule)["_id"] = qu.BsonIdToSId((*rule)["_id"])
|
|
|
|
+ c.HTML(200, "check_luapre.html", gin.H{"version": version, "code": s_code, "rule": &rule, "infos": getCheckInfos()})
|
|
|
|
+ })
|
|
|
|
+ Admin.POST("/check/lua/prerule", func(c *gin.Context) {
|
|
|
|
+ luascript, _ := c.GetPostForm("s_luascript")
|
|
|
|
+ infoid, _ := c.GetPostForm("infoid")
|
|
|
|
+ code, _ := c.GetPostForm("s_code")
|
|
|
|
+ name, _ := c.GetPostForm("s_name")
|
|
|
|
+ extinfo := checkPreScript(code, name, infoid, luascript)
|
|
|
|
+ c.JSON(200, gin.H{"rep": extinfo})
|
|
|
|
+ })
|
|
|
|
+ //通用后置验证
|
|
|
|
+ Admin.GET("/check/lua/back", func(c *gin.Context) {
|
|
|
|
+ version := c.Query("version")
|
|
|
|
+ s_code := c.Query("s_code")
|
|
|
|
+ rule, _ := Mgo.FindOne("rule_back", `{"s_code":"`+s_code+`"}`)
|
|
|
|
+ (*rule)["_id"] = qu.BsonIdToSId((*rule)["_id"])
|
|
|
|
+ c.HTML(200, "check_luaback.html", gin.H{"version": version, "code": s_code, "rule": &rule, "infos": getCheckInfos()})
|
|
|
|
+ })
|
|
|
|
+ Admin.POST("/check/lua/backrule", func(c *gin.Context) {
|
|
|
|
+ luascript, _ := c.GetPostForm("s_luascript")
|
|
|
|
+ infoid, _ := c.GetPostForm("infoid")
|
|
|
|
+ version, _ := c.GetPostForm("s_version")
|
|
|
|
+ code, _ := c.GetPostForm("s_code")
|
|
|
|
+ name, _ := c.GetPostForm("s_name")
|
|
|
|
+ extinfo := checkBackScript(code, name, version, infoid, luascript)
|
|
|
|
+ c.JSON(200, gin.H{"rep": extinfo})
|
|
|
|
+ })
|
|
|
|
+ //抽取前置验证
|
|
|
|
+ Admin.GET("/check/lua/corepre", func(c *gin.Context) {
|
|
|
|
+ vid := c.Query("vid")
|
|
|
|
+ pid := c.Query("pid")
|
|
|
|
+ sid := c.Query("sid")
|
|
|
|
+ s_code := c.Query("s_code")
|
|
|
|
+ rule, _ := Mgo.FindOne("rule_logicpre", `{"s_code":"`+s_code+`"}`)
|
|
|
|
+ (*rule)["_id"] = qu.BsonIdToSId((*rule)["_id"])
|
|
|
|
+ c.HTML(200,
|
|
|
|
+ "check_luacorepre.html",
|
|
|
|
+ gin.H{"code": s_code, "rule": &rule, "infos": getCheckInfos(),
|
|
|
|
+ "pid": pid, "vid": vid, "sid": sid},
|
|
|
|
+ )
|
|
|
|
+ })
|
|
|
|
+ Admin.POST("/check/lua/coreprerule", func(c *gin.Context) {
|
|
|
|
+ luascript, _ := c.GetPostForm("s_luascript")
|
|
|
|
+ infoid, _ := c.GetPostForm("infoid")
|
|
|
|
+ code, _ := c.GetPostForm("s_code")
|
|
|
|
+ name, _ := c.GetPostForm("s_name")
|
|
|
|
+ extinfo := checkPreScript(code, name, infoid, luascript)
|
|
|
|
+ c.JSON(200, gin.H{"rep": extinfo})
|
|
|
|
+ })
|
|
|
|
+ //抽取验证
|
|
|
|
+ Admin.GET("/check/lua/core", func(c *gin.Context) {
|
|
|
|
+ vid := c.Query("vid")
|
|
|
|
+ pid := c.Query("pid")
|
|
|
|
+ sid := c.Query("sid")
|
|
|
|
+ s_code := c.Query("s_code")
|
|
|
|
+ rule, _ := Mgo.FindOne("rule_logicore", `{"s_code":"`+s_code+`"}`)
|
|
|
|
+ (*rule)["_id"] = qu.BsonIdToSId((*rule)["_id"])
|
|
|
|
+ c.HTML(200,
|
|
|
|
+ "check_luacore.html",
|
|
|
|
+ gin.H{"code": s_code, "rule": &rule, "infos": getCheckInfos(),
|
|
|
|
+ "pid": pid, "vid": vid, "sid": sid},
|
|
|
|
+ )
|
|
|
|
+ })
|
|
|
|
+ Admin.POST("/check/lua/corerule", func(c *gin.Context) {
|
|
|
|
+ luascript, _ := c.GetPostForm("s_luascript")
|
|
|
|
+ infoid, _ := c.GetPostForm("infoid")
|
|
|
|
+ code, _ := c.GetPostForm("s_code")
|
|
|
|
+ name, _ := c.GetPostForm("s_name")
|
|
|
|
+ extinfo := checkCoreScript(code, name, infoid, luascript)
|
|
|
|
+ c.JSON(200, gin.H{"rep": extinfo})
|
|
|
|
+ })
|
|
|
|
+ //抽取后置验证
|
|
|
|
+ Admin.GET("/check/lua/coreback", func(c *gin.Context) {
|
|
|
|
+ vid := c.Query("vid")
|
|
|
|
+ pid := c.Query("pid")
|
|
|
|
+ sid := c.Query("sid")
|
|
|
|
+ s_code := c.Query("s_code")
|
|
|
|
+ rule, _ := Mgo.FindOne("rule_logicback", `{"s_code":"`+s_code+`"}`)
|
|
|
|
+ (*rule)["_id"] = qu.BsonIdToSId((*rule)["_id"])
|
|
|
|
+ c.HTML(200,
|
|
|
|
+ "check_luacoreback.html",
|
|
|
|
+ gin.H{"code": s_code, "rule": &rule, "infos": getCheckInfos(),
|
|
|
|
+ "pid": pid, "vid": vid, "sid": sid},
|
|
|
|
+ )
|
|
|
|
+ })
|
|
|
|
+ Admin.POST("/check/lua/corebackrule", func(c *gin.Context) {
|
|
|
|
+ luascript, _ := c.GetPostForm("s_luascript")
|
|
|
|
+ infoid, _ := c.GetPostForm("infoid")
|
|
|
|
+ code, _ := c.GetPostForm("s_code")
|
|
|
|
+ name, _ := c.GetPostForm("s_name")
|
|
|
|
+ vid, _ := c.GetPostForm("vid")
|
|
|
|
+ version, _ := Mgo.FindById("version", vid, `{"version":1}`)
|
|
|
|
+ extinfo := checkBackScript(code, name, qu.ObjToString((*version)["version"]), infoid, luascript)
|
|
|
|
+ c.JSON(200, gin.H{"rep": extinfo})
|
|
|
|
+ })
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+//获取信息
|
|
|
|
+func getCheckInfos() *[]map[string]interface{} {
|
|
|
|
+ infos, _ := Mgo.Find("bidding", `{}`, `{"_id":-1}`, `{"title":1}`, false, 0, 100)
|
|
|
|
+ for _, v := range *infos {
|
|
|
|
+ v["_id"] = qu.BsonIdToSId(v["_id"])
|
|
|
|
+ }
|
|
|
|
+ return infos
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+//前置过滤验证
|
|
|
|
+func checkPreScript(code, name, infoid, script string) map[string]interface{} {
|
|
|
|
+ doc, _ := Mgo.FindById("bidding", infoid, extract.Fields)
|
|
|
|
+ j := extract.PreInfo(*doc)
|
|
|
|
+ delete(*j.Data, "contenthtml")
|
|
|
|
+ lua := ju.LuaScript{Code: code, Name: name, Doc: *j.Data, Script: script}
|
|
|
|
+ lua.Block = j.Block
|
|
|
|
+ rep := lua.RunScript("pre")
|
|
|
|
+ return rep
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+//通用后置过滤验证
|
|
|
|
+func checkBackScript(code, name, version, infoid, script string) map[string]interface{} {
|
|
|
|
+ defer qu.Catch()
|
|
|
|
+ vsion, _ := Mgo.FindOne("version", `{"version":"`+version+`"}`)
|
|
|
|
+ e := &extract.ExtractTask{}
|
|
|
|
+ e.IsRun = true
|
|
|
|
+ e.TaskInfo = &extract.TaskInfo{Version: qu.ObjToString((*vsion)["s_version"]), VersionId: qu.BsonIdToSId((*vsion)["_id"]), TestLua: true}
|
|
|
|
+ e.InitRulePres()
|
|
|
|
+ e.InitRuleBacks()
|
|
|
|
+ e.InitRuleCore()
|
|
|
|
+ e.InitTag()
|
|
|
|
+ tmp, _ := Mgo.FindById("bidding", infoid, extract.Fields)
|
|
|
|
+ j := extract.PreInfo(*tmp)
|
|
|
|
+ doc := *j.Data
|
|
|
|
+ //全局前置规则,结果覆盖doc属性
|
|
|
|
+ for _, v := range e.RulePres {
|
|
|
|
+ doc = extract.ExtRegPre(doc, j, v, e.TaskInfo)
|
|
|
|
+ }
|
|
|
|
+ //抽取规则
|
|
|
|
+ for _, vc := range e.RuleCores {
|
|
|
|
+ tmp := ju.DeepCopy(doc).(map[string]interface{})
|
|
|
|
+ //是否进入逻辑
|
|
|
|
+ if !ju.Logic(vc.LuaLogic, tmp) {
|
|
|
|
+ continue
|
|
|
|
+ }
|
|
|
|
+ //抽取-前置规则
|
|
|
|
+ for _, v := range vc.RulePres {
|
|
|
|
+ tmp = extract.ExtRegPre(tmp, j, v, e.TaskInfo)
|
|
|
|
+ }
|
|
|
|
+ //抽取-规则
|
|
|
|
+ for _, v := range vc.RuleCores {
|
|
|
|
+ extract.ExtRegCore(vc.ExtFrom, tmp, j, v, e)
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ result := extract.GetResultMapForLua(j)
|
|
|
|
+ lua := ju.LuaScript{Code: code, Name: name, Result: result, Script: script}
|
|
|
|
+ lua.Block = j.Block
|
|
|
|
+ extinfo := lua.RunScript("back")
|
|
|
|
+ return extinfo
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+//抽取验证
|
|
|
|
+func checkCoreScript(code, name, infoid, script string) map[string]interface{} {
|
|
|
|
+ doc, _ := Mgo.FindById("bidding", infoid, extract.Fields)
|
|
|
|
+ j := extract.PreInfo(*doc)
|
|
|
|
+ delete(*j.Data, "contenthtml")
|
|
|
|
+ lua := ju.LuaScript{Code: code, Name: name, Doc: *j.Data, Script: script}
|
|
|
|
+ lua.Block = j.Block
|
|
|
|
+ rep := lua.RunScript("core")
|
|
|
|
+ return rep
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+//抽取过滤验证
|