rulecheck.go 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211
  1. // checkrule
  2. package admin
  3. import (
  4. "jy/extract"
  5. . "jy/mongodbutil"
  6. ju "jy/util"
  7. qu "qfw/util"
  8. "github.com/gin-gonic/gin"
  9. )
  10. func init() {
  11. //正则规则验证
  12. Admin.POST("/check/prerule", func(c *gin.Context) {
  13. rule, _ := c.GetPostForm("s_rule")
  14. con, _ := c.GetPostForm("s_testcon")
  15. str := extract.PreRulesCheckReg(con, rule)
  16. c.JSON(200, gin.H{"rep": str})
  17. })
  18. Admin.POST("/check/extrule", func(c *gin.Context) {
  19. rule, _ := c.GetPostForm("s_rule")
  20. con, _ := c.GetPostForm("s_testcon")
  21. field, _ := c.GetPostForm("s_field")
  22. tmp := extract.ExtRulesCheckReg(field, con, rule)
  23. c.JSON(200, gin.H{"rep": tmp})
  24. })
  25. Admin.POST("/check/backrule", func(c *gin.Context) {
  26. rule, _ := c.GetPostForm("s_rule")
  27. con, _ := c.GetPostForm("s_testcon")
  28. str := extract.BackRulesCheckReg(con, rule)
  29. c.JSON(200, gin.H{"rep": str})
  30. })
  31. //lua脚本验证
  32. //通用前置验证
  33. Admin.GET("/check/lua/pre", func(c *gin.Context) {
  34. version := c.Query("version")
  35. s_code := c.Query("s_code")
  36. rule, _ := Mgo.FindOne("rule_pre", `{"s_code":"`+s_code+`"}`)
  37. (*rule)["_id"] = qu.BsonIdToSId((*rule)["_id"])
  38. c.HTML(200, "check_luapre.html", gin.H{"version": version, "code": s_code, "rule": &rule, "infos": getCheckInfos()})
  39. })
  40. Admin.POST("/check/lua/prerule", func(c *gin.Context) {
  41. luascript, _ := c.GetPostForm("s_luascript")
  42. infoid, _ := c.GetPostForm("infoid")
  43. code, _ := c.GetPostForm("s_code")
  44. name, _ := c.GetPostForm("s_name")
  45. extinfo := checkPreScript(code, name, infoid, luascript)
  46. c.JSON(200, gin.H{"rep": extinfo})
  47. })
  48. //通用后置验证
  49. Admin.GET("/check/lua/back", func(c *gin.Context) {
  50. version := c.Query("version")
  51. s_code := c.Query("s_code")
  52. rule, _ := Mgo.FindOne("rule_back", `{"s_code":"`+s_code+`"}`)
  53. (*rule)["_id"] = qu.BsonIdToSId((*rule)["_id"])
  54. c.HTML(200, "check_luaback.html", gin.H{"version": version, "code": s_code, "rule": &rule, "infos": getCheckInfos()})
  55. })
  56. Admin.POST("/check/lua/backrule", func(c *gin.Context) {
  57. luascript, _ := c.GetPostForm("s_luascript")
  58. infoid, _ := c.GetPostForm("infoid")
  59. version, _ := c.GetPostForm("s_version")
  60. code, _ := c.GetPostForm("s_code")
  61. name, _ := c.GetPostForm("s_name")
  62. extinfo := checkBackScript(code, name, version, infoid, luascript)
  63. c.JSON(200, gin.H{"rep": extinfo})
  64. })
  65. //抽取前置验证
  66. Admin.GET("/check/lua/corepre", func(c *gin.Context) {
  67. vid := c.Query("vid")
  68. pid := c.Query("pid")
  69. sid := c.Query("sid")
  70. s_code := c.Query("s_code")
  71. rule, _ := Mgo.FindOne("rule_logicpre", `{"s_code":"`+s_code+`"}`)
  72. (*rule)["_id"] = qu.BsonIdToSId((*rule)["_id"])
  73. c.HTML(200,
  74. "check_luacorepre.html",
  75. gin.H{"code": s_code, "rule": &rule, "infos": getCheckInfos(),
  76. "pid": pid, "vid": vid, "sid": sid},
  77. )
  78. })
  79. Admin.POST("/check/lua/coreprerule", func(c *gin.Context) {
  80. luascript, _ := c.GetPostForm("s_luascript")
  81. infoid, _ := c.GetPostForm("infoid")
  82. code, _ := c.GetPostForm("s_code")
  83. name, _ := c.GetPostForm("s_name")
  84. extinfo := checkPreScript(code, name, infoid, luascript)
  85. c.JSON(200, gin.H{"rep": extinfo})
  86. })
  87. //抽取验证
  88. Admin.GET("/check/lua/core", func(c *gin.Context) {
  89. vid := c.Query("vid")
  90. pid := c.Query("pid")
  91. sid := c.Query("sid")
  92. s_code := c.Query("s_code")
  93. rule, _ := Mgo.FindOne("rule_logicore", `{"s_code":"`+s_code+`"}`)
  94. (*rule)["_id"] = qu.BsonIdToSId((*rule)["_id"])
  95. c.HTML(200,
  96. "check_luacore.html",
  97. gin.H{"code": s_code, "rule": &rule, "infos": getCheckInfos(),
  98. "pid": pid, "vid": vid, "sid": sid},
  99. )
  100. })
  101. Admin.POST("/check/lua/corerule", func(c *gin.Context) {
  102. luascript, _ := c.GetPostForm("s_luascript")
  103. infoid, _ := c.GetPostForm("infoid")
  104. code, _ := c.GetPostForm("s_code")
  105. name, _ := c.GetPostForm("s_name")
  106. extinfo := checkCoreScript(code, name, infoid, luascript)
  107. c.JSON(200, gin.H{"rep": extinfo})
  108. })
  109. //抽取后置验证
  110. Admin.GET("/check/lua/coreback", func(c *gin.Context) {
  111. vid := c.Query("vid")
  112. pid := c.Query("pid")
  113. sid := c.Query("sid")
  114. s_code := c.Query("s_code")
  115. rule, _ := Mgo.FindOne("rule_logicback", `{"s_code":"`+s_code+`"}`)
  116. (*rule)["_id"] = qu.BsonIdToSId((*rule)["_id"])
  117. c.HTML(200,
  118. "check_luacoreback.html",
  119. gin.H{"code": s_code, "rule": &rule, "infos": getCheckInfos(),
  120. "pid": pid, "vid": vid, "sid": sid},
  121. )
  122. })
  123. Admin.POST("/check/lua/corebackrule", func(c *gin.Context) {
  124. luascript, _ := c.GetPostForm("s_luascript")
  125. infoid, _ := c.GetPostForm("infoid")
  126. code, _ := c.GetPostForm("s_code")
  127. name, _ := c.GetPostForm("s_name")
  128. vid, _ := c.GetPostForm("vid")
  129. version, _ := Mgo.FindById("version", vid, `{"version":1}`)
  130. extinfo := checkBackScript(code, name, qu.ObjToString((*version)["version"]), infoid, luascript)
  131. c.JSON(200, gin.H{"rep": extinfo})
  132. })
  133. }
  134. //获取信息
  135. func getCheckInfos() *[]map[string]interface{} {
  136. infos, _ := Mgo.Find("bidding", `{}`, `{"_id":-1}`, `{"title":1}`, false, 0, 100)
  137. for _, v := range *infos {
  138. v["_id"] = qu.BsonIdToSId(v["_id"])
  139. }
  140. return infos
  141. }
  142. //前置过滤验证
  143. func checkPreScript(code, name, infoid, script string) map[string]interface{} {
  144. doc, _ := Mgo.FindById("bidding", infoid, extract.Fields)
  145. j := extract.PreInfo(*doc)
  146. delete(*j.Data, "contenthtml")
  147. lua := ju.LuaScript{Code: code, Name: name, Doc: *j.Data, Script: script}
  148. lua.Block = j.Block
  149. rep := lua.RunScript("pre")
  150. return rep
  151. }
  152. //通用后置过滤验证
  153. func checkBackScript(code, name, version, infoid, script string) map[string]interface{} {
  154. defer qu.Catch()
  155. vsion, _ := Mgo.FindOne("version", `{"version":"`+version+`"}`)
  156. e := &extract.ExtractTask{}
  157. e.IsRun = true
  158. e.TaskInfo = &extract.TaskInfo{Version: qu.ObjToString((*vsion)["s_version"]), VersionId: qu.BsonIdToSId((*vsion)["_id"]), TestLua: true}
  159. e.InitRulePres()
  160. e.InitRuleBacks()
  161. e.InitRuleCore()
  162. e.InitTag()
  163. tmp, _ := Mgo.FindById("bidding", infoid, extract.Fields)
  164. j := extract.PreInfo(*tmp)
  165. doc := *j.Data
  166. //全局前置规则,结果覆盖doc属性
  167. for _, v := range e.RulePres {
  168. doc = extract.ExtRegPre(doc, j, v, e.TaskInfo)
  169. }
  170. //抽取规则
  171. for _, vc := range e.RuleCores {
  172. tmp := ju.DeepCopy(doc).(map[string]interface{})
  173. //是否进入逻辑
  174. if !ju.Logic(vc.LuaLogic, tmp) {
  175. continue
  176. }
  177. //抽取-前置规则
  178. for _, v := range vc.RulePres {
  179. tmp = extract.ExtRegPre(tmp, j, v, e.TaskInfo)
  180. }
  181. //抽取-规则
  182. for _, v := range vc.RuleCores {
  183. extract.ExtRegCore(vc.ExtFrom, tmp, j, v, e)
  184. }
  185. }
  186. result := extract.GetResultMapForLua(j)
  187. lua := ju.LuaScript{Code: code, Name: name, Result: result, Script: script}
  188. lua.Block = j.Block
  189. extinfo := lua.RunScript("back")
  190. return extinfo
  191. }
  192. //抽取验证
  193. func checkCoreScript(code, name, infoid, script string) map[string]interface{} {
  194. doc, _ := Mgo.FindById("bidding", infoid, extract.Fields)
  195. j := extract.PreInfo(*doc)
  196. delete(*j.Data, "contenthtml")
  197. lua := ju.LuaScript{Code: code, Name: name, Doc: *j.Data, Script: script}
  198. lua.Block = j.Block
  199. rep := lua.RunScript("core")
  200. return rep
  201. }
  202. //抽取过滤验证