Ver código fonte

抽出验证

zhangjinkun 6 anos atrás
pai
commit
aebca25dc6

+ 0 - 22
src/jy/admin/rule.go

@@ -3,7 +3,6 @@ package admin
 
 import (
 	"fmt"
-	"jy/extract"
 	. "jy/mongodbutil"
 	"jy/util"
 	"regexp"
@@ -108,27 +107,6 @@ func init() {
 	Admin.POST("/ruletag/save", RuleTagSave)
 	Admin.POST("/ruletag/del", RuleTagDel)
 	Admin.POST("/ruletag/editsave", RuleTagEditSave)
-
-	//正则规则验证
-	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})
-	})
 }
 
 func RulePreData(c *gin.Context) {

+ 211 - 0
src/jy/admin/rulecheck.go

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

+ 3 - 3
src/jy/extract/extract.go

@@ -24,7 +24,7 @@ var (
 	TaskList  map[string]*ExtractTask                //任务列表
 	saveLimit = 200                                  //抽取日志批量保存
 
-	Fields = `{"title":1,"detail":1,"contenthtml":1,"href":1,"spidercode":1,"toptype":1,"area":1,"city":1}`
+	Fields = `{"title":1,"detail":1,"contenthtml":1,"href":1,"site":1,"spidercode":1,"toptype":1,"area":1,"city":1}`
 )
 
 //启动测试抽取
@@ -522,7 +522,7 @@ func extRegCoreToResult(extfrom, text string, j *ju.Job, v *RegLuaInfo) map[stri
 //后置过滤
 func ExtRegBack(j *ju.Job, in *RegLuaInfo, t *TaskInfo) {
 	if in.IsLua {
-		result := getResultMapForLua(j)
+		result := GetResultMapForLua(j)
 		lua := ju.LuaScript{Code: in.Code, Name: in.Name, Result: result, Script: in.RuleText}
 		if j != nil {
 			lua.Block = j.Block
@@ -593,7 +593,7 @@ func ExtRegBack(j *ju.Job, in *RegLuaInfo, t *TaskInfo) {
 }
 
 //获取抽取结果map[string][]interface{},lua脚本使用
-func getResultMapForLua(j *ju.Job) map[string][]map[string]interface{} {
+func GetResultMapForLua(j *ju.Job) map[string][]map[string]interface{} {
 	result := map[string][]map[string]interface{}{}
 	for key, val := range j.Result {
 		if result[key] == nil {

+ 1 - 0
src/jy/extract/extractInit.go

@@ -36,6 +36,7 @@ type TaskInfo struct {
 	DB                                  *db.Pool  //数据库连接池
 	IsEtxLog                            bool      //是否开启抽取日志
 	ProcessPool                         chan bool //任务进程池
+	TestLua                             bool      //检查测试用
 }
 type Tag struct {
 	Type string         //标签类型 string 字符串、regexp 正则

+ 82 - 0
src/web/templates/admin/check_luaback.html

@@ -0,0 +1,82 @@
+{{template "inc"}}
+<!-- Main Header -->
+{{template "header"}}
+<!-- Left side column. 权限菜单 -->
+{{template "memu"}}
+<!-- Content Wrapper. Contains page content -->
+<div class="content-wrapper">
+	<section class="content-header">
+		<ol class="breadcrumb">
+		  <li><a href="/admin/version"><i class="fa fa-dashboard"></i>版本管理</a></li>
+		  <li><a href="/admin/ruleback?version={{.version}}">后置过滤</a></li>
+		  <li class="active"><a href="/admin/check/lua/back?version={{.version}}&s_code={{.code}}">{{.code}}</a></li>
+		</ol>
+    </section>
+  <!-- Main content -->
+  <section class="content"><br/>
+    	<form id="dataform" class="form-horizontal">
+			<div class="form-group">
+				<div class="col-sm-12">
+					<select name="infoid" class="form-control">
+	                	<option value="">请选择测试信息</option>
+						{{if .rule.infoid}}
+							{{$ruleid := .rule.infoid}}
+							{{range .infos}}
+								<option value="{{._id}}" {{if eq ._id $ruleid}} selected {{end}}>{{.title}}</option>
+							{{end}}
+						{{else}}
+							{{range .infos}}
+								<option value="{{._id}}">{{.title}}</option>
+							{{end}}
+						{{end}}
+	              	</select>
+				</div>
+				<label for="code" class="col-sm-1 control-label">代码: {{.rule.s_code}}</label>
+			    <label for="code" class="col-sm-3 control-label">名称: {{.rule.s_name}}</label>
+			</div>
+			<fieldset class="col-sm-6" data-mode="expert">
+				<textarea id="s_luascript" name="s_luascript">{{.rule.s_luascript}}</textarea>
+			</fieldset>
+			<fieldset class="col-sm-6" data-mode="expert">
+				<textarea id="result" style="height:400px;width:100%"></textarea>
+			</fieldset>
+			<input type="hidden" name="_id" value="{{.rule._id}}">
+			<input type="hidden" name="s_code" value="{{.rule.s_code}}">
+			<input type="hidden" name="s_name" value="{{.rule.s_name}}">
+			<input type="hidden" name="s_version" value="{{.rule.s_version}}">
+		</form>
+		
+		<h1><small>
+			<button type="button" class="btn btn-primary" onclick="check()">测试</button>
+			<button type="button" class="btn btn-primary" onclick="save()">保存</button>
+		</small></h1>
+</section>
+
+</div>
+{{template "luares"}}
+{{template "footer"}}
+<script>
+com.initMirror(400)
+menuActive("version")
+function check(){
+	$.post("/admin/check/lua/backrule",
+		com.serializeArray("dataform"), 
+		function(r) {
+			if(r.rep){				
+				$("#result").html(JSON.stringify(r.rep, null, 2)) 
+			}
+		}
+	);
+}
+function save(){
+	$.post("/admin/ruleback/save",
+		com.serializeArray("dataform"),
+		function(r){
+			if(r){
+				showTip("保存成功",1000)
+			}
+		}
+	);
+}
+</script>
+

+ 83 - 0
src/web/templates/admin/check_luacore.html

@@ -0,0 +1,83 @@
+{{template "inc"}}
+<!-- Main Header -->
+{{template "header"}}
+<!-- Left side column. 权限菜单 -->
+{{template "memu"}}
+<!-- Content Wrapper. Contains page content -->
+<div class="content-wrapper">
+	<section class="content-header">
+		<ol class="breadcrumb">
+		  <li><a href="/admin/version"><i class="fa fa-dashboard"></i>版本管理</a></li>
+		  <li><a href="/admin/version/info?vid={{.vid}}&pid={{.pid}}">属性配置</a></li>
+		  <li><a href="/admin/rulelogic?vid={{.vid}}&pid={{.pid}}">抽取逻辑</a></li>
+		  <li><a href="/admin/logicore?vid={{.vid}}&pid={{.pid}}&sid={{.sid}}">抽取规则</a></li>
+		  <li class="active"><a href="/admin/check/lua/core?vid={{.vid}}&pid={{.pid}}&sid={{.sid}}&s_code={{.code}}">{{.code}}</a></li>
+		</ol>
+    </section>
+  <!-- Main content -->
+  <section class="content"><br/>
+    	<form id="dataform" class="form-horizontal">
+			<div class="form-group">
+				<div class="col-sm-12">
+					<select name="infoid" class="form-control">
+	                	<option value="">请选择测试信息</option>
+						{{if .rule.infoid}}
+							{{$ruleid := .rule.infoid}}
+							{{range .infos}}
+								<option value="{{._id}}" {{if eq ._id $ruleid}} selected {{end}}>{{.title}}</option>
+							{{end}}
+						{{else}}
+							{{range .infos}}
+								<option value="{{._id}}">{{.title}}</option>
+							{{end}}
+						{{end}}
+	              	</select>
+				</div>
+				<label for="code" class="col-sm-1 control-label">代码: {{.rule.s_code}}</label>
+			    <label for="code" class="col-sm-3 control-label">名称: {{.rule.s_name}}</label>
+			</div>
+			<fieldset class="col-sm-6" data-mode="expert">
+				<textarea id="s_luascript" name="s_luascript">{{.rule.s_luascript}}</textarea>
+			</fieldset>
+			<fieldset class="col-sm-6" data-mode="expert">
+				<textarea id="result" style="height:400px;width:100%"></textarea>
+			</fieldset>
+			<input type="hidden" name="_id" value="{{.rule._id}}">
+			<input type="hidden" name="s_code" value="{{.rule.s_code}}">
+			<input type="hidden" name="s_name" value="{{.rule.s_name}}">
+		</form>
+		
+		<h1><small>
+			<button type="button" class="btn btn-primary" onclick="check()">测试</button>
+			<button type="button" class="btn btn-primary" onclick="save()">保存</button>
+		</small></h1>
+</section>
+
+</div>
+{{template "luares"}}
+{{template "footer"}}
+<script>
+com.initMirror(400)
+menuActive("version")
+function check(){
+	$.post("/admin/check/lua/corerule",
+		com.serializeArray("dataform"), 
+		function(r) {
+			if(r.rep){				
+				$("#result").html(JSON.stringify(r.rep, null, 2)) 
+			}
+		}
+	);
+}
+function save(){
+	$.post("/admin/logicore/save",
+		com.serializeArray("dataform"),
+		function(r){
+			if(r){
+				showTip("保存成功",1000)
+			}
+		}
+	);
+}
+</script>
+

+ 84 - 0
src/web/templates/admin/check_luacoreback.html

@@ -0,0 +1,84 @@
+{{template "inc"}}
+<!-- Main Header -->
+{{template "header"}}
+<!-- Left side column. 权限菜单 -->
+{{template "memu"}}
+<!-- Content Wrapper. Contains page content -->
+<div class="content-wrapper">
+	<section class="content-header">
+		<ol class="breadcrumb">
+		 <li><a href="/admin/version"><i class="fa fa-dashboard"></i>版本管理</a></li>
+		  <li><a href="/admin/version/info?vid={{.vid}}&pid={{.pid}}">属性配置</a></li>
+		  <li><a href="/admin/rulelogic?vid={{.vid}}&pid={{.pid}}">抽取逻辑</a></li>
+		  <li><a href="/admin/logicback?vid={{.vid}}&pid={{.pid}}&sid={{.sid}}">后置规则</a></li>
+		  <li class="active"><a href="/admin/check/lua/coreback?vid={{.vid}}&pid={{.pid}}&sid={{.sid}}&s_code={{.code}}">{{.code}}</a></li>
+		</ol>
+    </section>
+  <!-- Main content -->
+  <section class="content"><br/>
+    	<form id="dataform" class="form-horizontal">
+			<div class="form-group">
+				<div class="col-sm-12">
+					<select name="infoid" class="form-control">
+	                	<option value="">请选择测试信息</option>
+						{{if .rule.infoid}}
+							{{$ruleid := .rule.infoid}}
+							{{range .infos}}
+								<option value="{{._id}}" {{if eq ._id $ruleid}} selected {{end}}>{{.title}}</option>
+							{{end}}
+						{{else}}
+							{{range .infos}}
+								<option value="{{._id}}">{{.title}}</option>
+							{{end}}
+						{{end}}
+	              	</select>
+				</div>
+				<label for="code" class="col-sm-1 control-label">代码: {{.rule.s_code}}</label>
+			    <label for="code" class="col-sm-3 control-label">名称: {{.rule.s_name}}</label>
+			</div>
+			<fieldset class="col-sm-6" data-mode="expert">
+				<textarea id="s_luascript" name="s_luascript">{{.rule.s_luascript}}</textarea>
+			</fieldset>
+			<fieldset class="col-sm-6" data-mode="expert">
+				<textarea id="result" style="height:400px;width:100%"></textarea>
+			</fieldset>
+			<input type="hidden" name="_id" value="{{.rule._id}}">
+			<input type="hidden" name="s_code" value="{{.rule.s_code}}">
+			<input type="hidden" name="s_name" value="{{.rule.s_name}}">
+			<input type="hidden" name="vid" value="{{.vid}}">
+		</form>
+		
+		<h1><small>
+			<button type="button" class="btn btn-primary" onclick="check()">测试</button>
+			<button type="button" class="btn btn-primary" onclick="save()">保存</button>
+		</small></h1>
+</section>
+
+</div>
+{{template "luares"}}
+{{template "footer"}}
+<script>
+com.initMirror(400)
+menuActive("version")
+function check(){
+	$.post("/admin/check/lua/corebackrule",
+		com.serializeArray("dataform"), 
+		function(r) {
+			if(r.rep){				
+				$("#result").html(JSON.stringify(r.rep, null, 2)) 
+			}
+		}
+	);
+}
+function save(){
+	$.post("/admin/logicback/save",
+		com.serializeArray("dataform"),
+		function(r){
+			if(r){
+				showTip("保存成功",1000)
+			}
+		}
+	);
+}
+</script>
+

+ 83 - 0
src/web/templates/admin/check_luacorepre.html

@@ -0,0 +1,83 @@
+{{template "inc"}}
+<!-- Main Header -->
+{{template "header"}}
+<!-- Left side column. 权限菜单 -->
+{{template "memu"}}
+<!-- Content Wrapper. Contains page content -->
+<div class="content-wrapper">
+	<section class="content-header">
+		<ol class="breadcrumb">
+		  <li><a href="/admin/version"><i class="fa fa-dashboard"></i>版本管理</a></li>
+		  <li><a href="/admin/version/info?vid={{.vid}}&pid={{.pid}}">属性配置</a></li>
+		  <li><a href="/admin/rulelogic?vid={{.vid}}&pid={{.pid}}">抽取逻辑</a></li>
+		  <li><a href="/admin/logicpre?vid={{.vid}}&pid={{.pid}}&sid={{.sid}}">前置规则</a></li>
+		  <li class="active"><a href="/admin/check/lua/corepre?vid={{.vid}}&pid={{.pid}}&sid={{.sid}}&s_code={{.code}}">{{.code}}</a></li>
+		</ol>
+    </section>
+  <!-- Main content -->
+  <section class="content"><br/>
+    	<form id="dataform" class="form-horizontal">
+			<div class="form-group">
+				<div class="col-sm-12">
+					<select name="infoid" class="form-control">
+	                	<option value="">请选择测试信息</option>
+						{{if .rule.infoid}}
+							{{$ruleid := .rule.infoid}}
+							{{range .infos}}
+								<option value="{{._id}}" {{if eq ._id $ruleid}} selected {{end}}>{{.title}}</option>
+							{{end}}
+						{{else}}
+							{{range .infos}}
+								<option value="{{._id}}">{{.title}}</option>
+							{{end}}
+						{{end}}
+	              	</select>
+				</div>
+				<label for="code" class="col-sm-1 control-label">代码: {{.rule.s_code}}</label>
+			    <label for="code" class="col-sm-3 control-label">名称: {{.rule.s_name}}</label>
+			</div>
+			<fieldset class="col-sm-6" data-mode="expert">
+				<textarea id="s_luascript" name="s_luascript">{{.rule.s_luascript}}</textarea>
+			</fieldset>
+			<fieldset class="col-sm-6" data-mode="expert">
+				<textarea id="result" style="height:400px;width:100%"></textarea>
+			</fieldset>
+			<input type="hidden" name="_id" value="{{.rule._id}}">
+			<input type="hidden" name="s_code" value="{{.rule.s_code}}">
+			<input type="hidden" name="s_name" value="{{.rule.s_name}}">
+		</form>
+		
+		<h1><small>
+			<button type="button" class="btn btn-primary" onclick="check()">测试</button>
+			<button type="button" class="btn btn-primary" onclick="save()">保存</button>
+		</small></h1>
+</section>
+
+</div>
+{{template "luares"}}
+{{template "footer"}}
+<script>
+com.initMirror(400)
+menuActive("version")
+function check(){
+	$.post("/admin/check/lua/coreprerule",
+		com.serializeArray("dataform"), 
+		function(r) {
+			if(r.rep){				
+				$("#result").html(JSON.stringify(r.rep, null, 2)) 
+			}
+		}
+	);
+}
+function save(){
+	$.post("/admin/logicpre/save",
+		com.serializeArray("dataform"),
+		function(r){
+			if(r){
+				showTip("保存成功",1000)
+			}
+		}
+	);
+}
+</script>
+

+ 81 - 0
src/web/templates/admin/check_luapre.html

@@ -0,0 +1,81 @@
+{{template "inc"}}
+<!-- Main Header -->
+{{template "header"}}
+<!-- Left side column. 权限菜单 -->
+{{template "memu"}}
+<!-- Content Wrapper. Contains page content -->
+<div class="content-wrapper">
+	<section class="content-header">
+		<ol class="breadcrumb">
+		  <li><a href="/admin/version"><i class="fa fa-dashboard"></i>版本管理</a></li>
+		  <li><a href="/admin/rulepre?version={{.version}}">前置逻辑</a></li>
+		  <li class="active"><a href="/admin/check/lua/pre?version={{.version}}&s_code={{.code}}">{{.code}}</a></li>
+		</ol>
+    </section>
+  <!-- Main content -->
+  <section class="content"><br/>
+    	<form id="dataform" class="form-horizontal">
+			<div class="form-group">
+				<div class="col-sm-12">
+					<select name="infoid" class="form-control">
+	                	<option value="">请选择测试信息</option>
+						{{if .rule.infoid}}
+							{{$ruleid := .rule.infoid}}
+							{{range .infos}}
+								<option value="{{._id}}" {{if eq ._id $ruleid}} selected {{end}}>{{.title}}</option>
+							{{end}}
+						{{else}}
+							{{range .infos}}
+								<option value="{{._id}}">{{.title}}</option>
+							{{end}}
+						{{end}}
+	              	</select>
+				</div>
+				<label for="code" class="col-sm-1 control-label">代码: {{.rule.s_code}}</label>
+			    <label for="code" class="col-sm-3 control-label">名称: {{.rule.s_name}}</label>
+			</div>
+			<fieldset class="col-sm-6" data-mode="expert">
+				<textarea id="s_luascript" name="s_luascript">{{.rule.s_luascript}}</textarea>
+			</fieldset>
+			<fieldset class="col-sm-6" data-mode="expert">
+				<textarea id="result" style="height:400px;width:100%"></textarea>
+			</fieldset>
+			<input type="hidden" name="_id" value="{{.rule._id}}">
+			<input type="hidden" name="s_code" value="{{.rule.s_code}}">
+			<input type="hidden" name="s_name" value="{{.rule.s_name}}">
+		</form>
+		
+		<h1><small>
+			<button type="button" class="btn btn-primary" onclick="check()">测试</button>
+			<button type="button" class="btn btn-primary" onclick="save()">保存</button>
+		</small></h1>
+</section>
+
+</div>
+{{template "luares"}}
+{{template "footer"}}
+<script>
+com.initMirror(400)
+menuActive("version")
+function check(){
+	$.post("/admin/check/lua/prerule",
+		com.serializeArray("dataform"), 
+		function(r) {
+			if(r.rep){				
+				$("#result").html(JSON.stringify(r.rep, null, 2)) 
+			}
+		}
+	);
+}
+function save(){
+	$.post("/admin/rulepre/save",
+		com.serializeArray("dataform"),
+		function(r){
+			if(r){
+				showTip("保存成功",1000)
+			}
+		}
+	);
+}
+</script>
+

+ 6 - 0
src/web/templates/admin/rule_backlist.html

@@ -176,6 +176,12 @@ $(function () {
 					islua=true
 					tag = com.pushArry(tag,luatag)
 					tag = com.pushArry(tag,hiddentag)
+					check=[{label:"测试",class:"btn-warning",
+								fun:function(){
+									window.location.href="/admin/check/lua/back?version={{.version}}&s_code="+obj.s_code
+								}
+							}]
+					bts = com.pushArry(bts,check)
 				}else{
 					_tit="新增规则"
 					if(n=="newlua"){

+ 0 - 47
src/web/templates/admin/rule_backlua.html

@@ -1,47 +0,0 @@
-{{template "inc"}}
-<!-- Main Header -->
-{{template "header"}}
-<!-- Left side column. 权限菜单 -->
-{{template "memu"}}
-<!-- Content Wrapper. Contains page content -->
-<div class="content-wrapper">
-	<section class="content-header">
-		<h1><small><button type="button" class="btn btn-primary" onclick="save()">保存</button></small></h1>
-		<ol class="breadcrumb">
-		  <li><a href="/admin/version"><i class="fa fa-dashboard"></i>版本管理</a></li>
-		  <li class="active"><a href="/admin/ruleback?version={{.version}}">后置逻辑</a></li>
-		</ol>
-    </section>
-  <!-- Main content -->
-  <section class="content">
-    	<form id="dataform" class="form-horizontal">
-			<fieldset data-mode="expert">
-				<textarea id="luastr" name="s_luastr">{{.data.s_luastr}}</textarea>
-			</fieldset>
-			<input type="hidden" name="_id" value={{.data._id}}>
-			<input type="hidden" name="s_type" value="1">
-			<input type="hidden" name="s_version" value="{{.version}}">
-		</form>
-  </section>
-</div>
-{{template "luares"}}
-{{template "footer"}}
-
-<script>
-menuActive("version")
-function save(){
-	$.post("/admin/ruleback/save",
-		com.serializeArray("dataform"), 
-		function(r) {
-			if(r.rep){
-				$("#dataform")[0].reset();
-				$("#modal-info").modal("hide");
-				showMsg("保存成功", function() {history.back();});
-			}else{
-				showTip(r.msg, 1000);
-			}
-		}
-	);
-}
-</script>
-

+ 6 - 0
src/web/templates/admin/rule_logicbacklist.html

@@ -177,6 +177,12 @@ $(function () {
 					islua=true
 					tag = com.pushArry(tag,luatag)
 					tag = com.pushArry(tag,hiddentag)
+					check=[{label:"测试",class:"btn-warning",
+								fun:function(){
+									window.location.href="/admin/check/lua/coreback?vid={{.vid}}&pid={{.pid}}&sid={{.sid}}&s_code="+obj.s_code
+								}
+							}]
+					bts = com.pushArry(bts,check)
 				}else{
 					_tit="新增规则"
 					if(n=="newlua"){

+ 6 - 0
src/web/templates/admin/rule_logicore.html

@@ -191,6 +191,12 @@ $(function () {
 					islua=true
 					tag = com.pushArry(tag,luatag)
 					tag = com.pushArry(tag,hiddentag)
+					check=[{label:"测试",class:"btn-warning",
+								fun:function(){
+									window.location.href="/admin/check/lua/core?vid={{.vid}}&pid={{.pid}}&sid={{.sid}}&s_code="+obj.s_code
+								}
+							}]
+					bts = com.pushArry(bts,check)
 				}else{
 					_tit="新增规则"
 					if(n=="newlua"){

+ 6 - 0
src/web/templates/admin/rule_logicprelist.html

@@ -177,6 +177,12 @@ $(function () {
 					islua=true
 					tag = com.pushArry(tag,luatag)
 					tag = com.pushArry(tag,hiddentag)
+					check=[{label:"测试",class:"btn-warning",
+								fun:function(){
+									window.location.href="/admin/check/lua/corepre?vid={{.vid}}&pid={{.pid}}&sid={{.sid}}&s_code="+obj.s_code
+								}
+							}]
+					bts = com.pushArry(bts,check)
 				}else{
 					_tit="新增规则"
 					if(n=="newlua"){

+ 6 - 0
src/web/templates/admin/rule_prelist.html

@@ -174,6 +174,12 @@ $(function () {
 					_tit="编辑-"+obj.s_name
 					islua=true
 					tag = com.pushArry(tag,luatag)
+					check=[{label:"测试",class:"btn-warning",
+								fun:function(){
+									window.location.href="/admin/check/lua/pre?version={{.version}}&s_code="+obj.s_code
+								}
+							}]
+					bts = com.pushArry(bts,check)
 				}else{
 					_tit="新增规则"
 					if(n=="newlua"){

+ 0 - 47
src/web/templates/admin/rule_prelua.html

@@ -1,47 +0,0 @@
-{{template "inc"}}
-<!-- Main Header -->
-{{template "header"}}
-<!-- Left side column. 权限菜单 -->
-{{template "memu"}}
-<!-- Content Wrapper. Contains page content -->
-<div class="content-wrapper">
-	<section class="content-header">
-		<h1><small><button type="button" class="btn btn-primary" onclick="save()">保存</button></small></h1>
-		<ol class="breadcrumb">
-		  <li><a href="/admin/version"><i class="fa fa-dashboard"></i>版本管理</a></li>
-		  <li class="active"><a href="/admin/rulepre?version={{.version}}">前置逻辑</a></li>
-		</ol>
-    </section>
-  <!-- Main content -->
-  <section class="content">
-    	<form id="dataform" class="form-horizontal">
-			<fieldset data-mode="expert">
-				<textarea id="luastr" name="s_luastr">{{.data.s_luastr}}</textarea>
-			</fieldset>
-			<input type="hidden" name="_id" value={{.data._id}}>
-			<input type="hidden" name="s_type" value="1">
-			<input type="hidden" name="s_version" value="{{.version}}">
-		</form>
-  </section>
-</div>
-{{template "luares"}}
-{{template "footer"}}
-
-<script>
-menuActive("version")
-function save(){
-	$.post("/admin/rulepre/save",
-		com.serializeArray("dataform"), 
-		function(r) {
-			if(r.rep){
-				$("#dataform")[0].reset();
-				$("#modal-info").modal("hide");
-				showMsg("保存成功", function() {history.back();});
-			}else{
-				showTip(r.msg, 1000);
-			}
-		}
-	);
-}
-</script>
-