// 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 } //抽取过滤验证