unknown 6 年之前
父節點
當前提交
eedfad28c8

+ 7 - 0
src/config.json

@@ -4,9 +4,14 @@
     "dbsize": 2,
     "dbname": "extract_kf",
     "redis": "buyer=192.168.3.18:6379,winner=192.168.3.18:6379",
+	"elasticsearch": "http://192.168.3.18:9800",
+    "elasticPoolSize": 30,
+	"mergetable":"projectset",
+	"mergetablealias":"projectset_v1",
     "saveresult": true,
     "fieldscore": true,
     "qualityaudit": true,
+	"iscltlog":true,
     "udptaskid": "5be107e600746bf92debf080",
     "udpip": "127.0.0.1",
     "udpport": "1484",
@@ -23,6 +28,8 @@
             "memo": "行业分类"
         }
     ],
+	"clearudpport":"1485",
+	"cleartaskid":"5c9b2bf96984142ffcfc6099",
     "esconfig": {
         "available": false,
         "AccessID": "",

+ 12 - 1
src/jy/admin/admin.go

@@ -61,7 +61,7 @@ func init() {
 		data = append(data, *list...)
 		c.JSON(200, gin.H{"data": data})
 	})
-	//获取字段列表
+	//获取抽取版本列表
 	Admin.POST("/getversions", func(c *gin.Context) {
 		list, b := Mgo.Find("version", `{"delete":false}`, `{"_id":-1}`, `{"version":1}`, false, -1, -1)
 		if b && list != nil {
@@ -72,6 +72,17 @@ func init() {
 		}
 		c.JSON(200, gin.H{"data": list})
 	})
+	//获取清理版本列表
+	Admin.POST("/getclearversions", func(c *gin.Context) {
+		list, b := Mgo.Find("clearversion", `{"delete":false}`, `{"_id":-1}`, `{"clearversion":1}`, false, -1, -1)
+		if b && list != nil {
+			for _, v := range *list {
+				v["_id"] = qu.BsonIdToSId(v["_id"])
+				v["s_name"] = v["clearversion"]
+			}
+		}
+		c.JSON(200, gin.H{"data": list})
+	})
 }
 
 func GetPostForm(c *gin.Context) map[string]interface{} {

+ 149 - 0
src/jy/admin/clearversion.go

@@ -0,0 +1,149 @@
+package admin
+
+import (
+	. "jy/mongodbutil"
+	"net/http"
+	qu "qfw/util"
+	"time"
+
+	"github.com/gin-contrib/sessions"
+	"github.com/gin-gonic/gin"
+)
+
+func init() {
+	Admin.GET("/versionclear", func(c *gin.Context) {
+		c.HTML(
+			http.StatusOK, "clearversion.html",
+			gin.H{},
+		)
+	})
+	//清理版本
+	Admin.POST("/clearversion/data", func(c *gin.Context) {
+		data, _ := Mgo.Find("clearversion", `{"delete":false}`, `{"_id":-1}`, nil, false, -1, -1)
+		c.JSON(200, gin.H{"data": data})
+	})
+	Admin.POST("/clearversion/save", func(c *gin.Context) {
+		_id, _ := c.GetPostForm("_id")
+		data := GetPostForm(c)
+		if _id != "" {
+			Mgo.UpdateById("clearversion", _id, map[string]interface{}{"$set": data})
+			c.JSON(200, gin.H{"rep": true})
+		} else {
+			clearversion, _ := c.GetPostForm("clearversion")
+			tmp, _ := Mgo.FindOne("version", `{"clearversion":"`+clearversion+`","delete":false}`)
+			if len(*tmp) > 0 {
+				c.JSON(200, gin.H{"rep": false})
+			} else {
+				s_pversionid, _ := c.GetPostForm("s_pversionid")
+				data["l_createtime"] = time.Now().Unix()
+				s_username := sessions.Default(c).Get("username").(string)
+				data["s_username"] = s_username
+				data["delete"] = false
+				vid := Mgo.Save("clearversion", data)
+				if s_pversionid != "" { //克隆属性配置
+					list, _ := Mgo.Find("clearversioninfo", `{"vid":"`+s_pversionid+`","delete":false}`, nil, nil, false, -1, -1)
+					for _, v := range *list {
+						delete(v, "_id")
+						v["l_createtime"] = time.Now().Unix()
+						v["s_username"] = sessions.Default(c).Get("username")
+						v["l_lasttime"] = time.Now().Unix()
+						v["vid"] = vid
+						v["delete"] = false
+						pid := Mgo.Save("clearversioninfo", v)
+						s_field := qu.ObjToString(v["s_field"])
+						//克隆清理逻辑配置
+						copyClearRuleLogic(vid, pid, s_field, s_pversionid, s_username)
+					}
+				}
+				c.JSON(200, gin.H{"rep": true})
+			}
+		}
+	})
+	Admin.POST("/clearversion/use", func(c *gin.Context) {
+		_id, _ := c.GetPostForm("_id")
+		isuse, _ := c.GetPostForm("isuse")
+		if isuse == "true" { //启用确保只有一个版本
+			l, _ := Mgo.Find("clearversion", `{"isuse":true}`, nil, nil, false, -1, -1)
+			if len(*l) > 0 {
+				c.JSON(200, gin.H{"rep": false})
+				return
+			}
+		}
+		bisuse := false
+		if isuse == "true" {
+			bisuse = true
+		}
+		set := map[string]interface{}{
+			"$set": map[string]interface{}{
+				"isuse": bisuse,
+			},
+		}
+		b := Mgo.UpdateById("clearversion", _id, set)
+		c.JSON(200, gin.H{"rep": b})
+	})
+	Admin.POST("/clearversion/del", func(c *gin.Context) { //删除版本
+		_id, _ := c.GetPostForm("_id")
+		b := Mgo.UpdateById("clearversion", _id, `{"$set":{"delete":true}}`)
+		//级联删除
+		//刪除属性配置
+		//删除逻辑
+
+		//刪除属性配置
+		go DelClearVersionInfo(_id)
+		c.JSON(200, gin.H{"rep": b})
+	})
+	Admin.GET("/clearversion/info", func(c *gin.Context) {
+		vid := c.Query("vid")
+		v, _ := Mgo.Find("clearversion", `{}`, `{"_id":-1}`, `{"version":1}`, false, -1, -1)
+		c.HTML(
+			http.StatusOK, "clearversioninfo.html",
+			gin.H{"vid": vid, "clearversions": v},
+		)
+	})
+	Admin.POST("/clearversion/infodata", func(c *gin.Context) {
+		vid, _ := c.GetPostForm("vid")
+		list, _ := Mgo.Find("clearversioninfo", `{"vid":"`+vid+`","delete":false}`, `{"_id":-1}`, nil, false, -1, -1)
+		c.JSON(200, gin.H{"data": list, "vid": vid})
+	})
+	Admin.POST("/clearversion/infosave", func(c *gin.Context) {
+		_id, _ := c.GetPostForm("_id")
+		data := GetPostForm(c)
+		if _id != "" {
+			Mgo.UpdateById("clearversioninfo", _id, map[string]interface{}{"$set": data})
+			c.JSON(200, gin.H{"rep": true})
+		} else {
+			s_field, _ := c.GetPostForm("s_field")
+			vid, _ := c.GetPostForm("vid")
+			tmp, _ := Mgo.FindOne("clearversioninfo", `{"s_field":"`+s_field+`","vid":"`+vid+`","delete":false}`)
+			if len(*tmp) > 0 {
+				c.JSON(200, gin.H{"rep": false})
+			} else {
+				data["l_createtime"] = time.Now().Unix()
+				data["s_username"] = sessions.Default(c).Get("username")
+				data["l_lasttime"] = time.Now().Unix()
+				data["delete"] = false
+				//Mgo.Save("clearversioninfo", data)
+				pid := Mgo.Save("clearversioninfo", data)
+				fromvid, _ := data["s_pversionid"].(string)
+				if fromvid != "" {
+					copyClearRuleLogic(vid, pid, s_field, fromvid, sessions.Default(c).Get("username").(string))
+				}
+				c.JSON(200, gin.H{"rep": true})
+			}
+		}
+	})
+	Admin.POST("/clearversion/infouse", func(c *gin.Context) {
+		_id, _ := c.GetPostForm("_id")
+		isuse, _ := c.GetPostForm("isuse")
+		b := Mgo.UpdateById("clearversioninfo", _id, `{"$set":{"isuse":`+isuse+`}}`)
+		c.JSON(200, gin.H{"rep": b})
+	})
+	Admin.POST("/clearversion/infodel", func(c *gin.Context) {
+		_id, _ := c.GetPostForm("_id")
+		b := Mgo.UpdateById("clearversioninfo", _id, `{"$set":{"delete":true}}`)
+		v, _ := Mgo.FindById("clearversioninfo", _id, `{"vid":1}`)
+		go DelClearLogic(qu.ObjToString((*v)["vid"]), _id)
+		c.JSON(200, gin.H{"rep": b})
+	})
+
+}

+ 58 - 9
src/jy/admin/rule.go

@@ -25,6 +25,7 @@ const (
 	E_BL = "E_BL" //抽取后置脚本
 	E_CE = "E_CE" //抽取逻辑正则
 	E_CL = "E_CL" //抽取逻辑脚本
+	C_CL = "C_CL" //清理逻辑脚本
 )
 
 func init() {
@@ -130,15 +131,22 @@ func init() {
 	Admin.POST("/pkglogicback/save", PkgLogicBackSave)
 	Admin.POST("/pkglogicback/del", PkgRuleLogicBackDel)
 
-	//ruletag
-	//	Admin.GET("/ruletag", func(c *gin.Context) {
-	//		version := c.Query("version")
-	//		c.HTML(200, "rule_taglist.html", gin.H{"version": version})
-	//	})
-	//	Admin.POST("/ruletag/data", RuleTagData)
-	//	Admin.POST("/ruletag/save", RuleTagSave)
-	//	Admin.POST("/ruletag/del", RuleTagDel)
-	//	Admin.POST("/ruletag/editsave", RuleTagEditSave)
+	//clearule
+	Admin.GET("/clearulelogic", func(c *gin.Context) {
+		vid := c.Query("vid")
+		pid := c.Query("pid")
+		//查询属性字段
+		tmp, _ := Mgo.FindById("clearversioninfo", pid, `{"s_field":1}`)
+		c.HTML(200, "rule_clearlogiclist.html", gin.H{"vid": vid, "pid": pid, "field": (*tmp)["s_field"]})
+	})
+	Admin.POST("/clearulelogic/data", ClearRuleLogicData)
+	Admin.POST("/clearulelogic/save", ClearRuleLogicSave)
+	Admin.POST("/clearulelogic/use", ClearRuleLogicUse)
+	Admin.POST("/clearulelogic/del", func(c *gin.Context) {
+		_id, _ := c.GetPostForm("_id")
+		b := Mgo.UpdateById("clearulelogic", _id, `{"$set":{"delete":true}}`)
+		c.JSON(200, gin.H{"rep": b})
+	})
 }
 
 func RulePreData(c *gin.Context) {
@@ -534,3 +542,44 @@ func DelTag(s_version string) {
 func DelCleanUp(s_version string) {
 	Mgo.Update("cleanup", `{"s_version":"`+s_version+`","delete":false}`, `{"$set":{"delete":true}}`, false, true)
 }
+
+func ClearRuleLogicData(c *gin.Context) {
+	vid, _ := c.GetPostForm("vid")
+	pid, _ := c.GetPostForm("pid")
+	data, _ := Mgo.Find("clearulelogic", `{"vid":"`+vid+`","pid":"`+pid+`","delete":false}`, `{"_id":-1}`, nil, false, -1, -1)
+	c.JSON(200, gin.H{"data": data, "vid": vid, "pid": pid})
+}
+func ClearRuleLogicSave(c *gin.Context) {
+	data := GetPostForm(c)
+	_id, _ := c.GetPostForm("_id")
+	b := false
+	if _id == "" {
+		data["l_createtime"] = time.Now().Unix()
+		data["s_username"] = sessions.Default(c).Get("username")
+		data["delete"] = false
+		data["s_code"] = util.GetSyncIndex(C_CL)
+		b = Mgo.Save("clearulelogic", data) != ""
+	} else {
+		data["l_lasttime"] = time.Now().Unix()
+		b = Mgo.Update("clearulelogic", `{"_id":"`+_id+`"}`, map[string]interface{}{
+			"$set": data,
+		}, true, false)
+	}
+	c.JSON(200, gin.H{"rep": b})
+}
+func ClearRuleLogicUse(c *gin.Context) {
+	_id, _ := c.GetPostForm("_id")
+	isuse, _ := c.GetPostForm("isuse")
+	b := Mgo.UpdateById("clearulelogic", _id, `{"$set":{"isuse":`+isuse+`}}`)
+	c.JSON(200, gin.H{"rep": b})
+}
+func DelClearVersionInfo(vid string) { //刪除清理的属性配置
+	vInfo, _ := Mgo.Find("clearversioninfo", `{"vid":"`+vid+`","delete":false}`, nil, `{"_id":1}`, false, -1, -1)
+	Mgo.Update("clearversioninfo", `{"vid":"`+vid+`","delete":false}`, `{"$set":{"delete":true}}`, false, true)
+	for _, v := range *vInfo {
+		DelClearLogic(vid, qu.BsonIdToSId((v)["_id"]))
+	}
+}
+func DelClearLogic(vid, pid string) { //删除清理逻辑
+	Mgo.Update("clearulelogic", `{"vid":"`+vid+`","pid":"`+pid+`","delete":false}`, `{"$set":{"delete":true}}`, false, true)
+}

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

@@ -150,6 +150,27 @@ func init() {
 		extinfo := checkBackScript("rule_back", code, name, qu.ObjToString((*version)["version"]), infoid, luascript, true)
 		c.JSON(200, gin.H{"rep": extinfo})
 	})
+	//清理逻辑脚本验证
+	Admin.GET("/check/lua/clearlogic", func(c *gin.Context) {
+		vid := c.Query("vid")
+		pid := c.Query("pid")
+		s_code := c.Query("s_code")
+		rule, _ := Mgo.FindOne("clearulelogic", `{"s_code":"`+s_code+`"}`)
+		(*rule)["_id"] = qu.BsonIdToSId((*rule)["_id"])
+		c.HTML(200,
+			"check_luaclearlogic.html",
+			gin.H{"code": s_code, "rule": &rule, "infos": getCheckInfos(),
+				"pid": pid, "vid": vid},
+		)
+	})
+	Admin.POST("/check/lua/clearule", func(c *gin.Context) {
+		luascript, _ := c.GetPostForm("s_luascript")
+		infoid, _ := c.GetPostForm("infoid")
+		code, _ := c.GetPostForm("s_code")
+		name, _ := c.GetPostForm("s_name")
+		extinfo := checkClearScript(code, name, infoid, luascript)
+		c.JSON(200, gin.H{"rep": extinfo})
+	})
 }
 
 //获取信息
@@ -308,3 +329,14 @@ func checkCoreScript(code, name, infoid, script string) interface{} {
 	rep := lua.RunScript("core")
 	return rep
 }
+
+//lua清理脚本测试
+func checkClearScript(code, name, infoid, script string) interface{} {
+	//	doc, _ := Mgo.FindById("bidding", infoid, extract.Fields)
+	//	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
+	return nil
+}

+ 36 - 1
src/jy/admin/task/task.go

@@ -21,7 +21,7 @@ func init() {
 		c.HTML(200, "task_list.html", nil)
 	})
 	Admin.GET("/taskclear", func(c *gin.Context) {
-		c.HTML(200, "task_clear_list.html", nil)
+		c.HTML(200, "task_clearlist.html", nil)
 	})
 	//获取任务列表
 	Admin.POST("/task/list", func(c *gin.Context) {
@@ -74,6 +74,17 @@ func init() {
 		}
 		c.JSON(200, gin.H{"data": list})
 	})
+	//获取清理版本列表
+	Admin.POST("/task/getclearversions", func(c *gin.Context) {
+		list, b := Mgo.Find("clearversion", `{"delete":false}`, `{"_id":-1}`, `{"clearversion":1}`, false, -1, -1)
+		if b && list != nil {
+			for _, v := range *list {
+				v["_id"] = v["clearversion"]
+				v["s_name"] = v["clearversion"]
+			}
+		}
+		c.JSON(200, gin.H{"data": list})
+	})
 	//获取任务名称
 	Admin.POST("/task/gettaskname", func(c *gin.Context) {
 		list, b := Mgo.Find("task", `{}`, `{"_id":-1}`, `{"s_taskname":1}`, false, -1, -1)
@@ -178,4 +189,28 @@ func init() {
 		c.JSON(200, gin.H{"rep": b})
 	})
 
+	//清理任务相关
+	//获取任务列表
+	Admin.POST("/cleartask/list", func(c *gin.Context) {
+		data, _ := Mgo.Find("cleartask", ``, `{"_id":-1}`, nil, false, -1, -1)
+		c.JSON(200, gin.H{"data": data})
+	})
+	//新增任务、编辑任务
+	Admin.POST("/cleartask/save", func(c *gin.Context) {
+		//判断存储配置是否完整
+		data := GetPostForm(c)
+		_id, _ := c.GetPostForm("_id")
+		b := false
+		if _id == "" {
+			data["l_createtime"] = time.Now().Unix()
+			data["s_username"] = sessions.Default(c).Get("username")
+			b = Mgo.Save("cleartask", data) != ""
+		} else {
+			data["l_lasttime"] = time.Now().Unix()
+			b = Mgo.Update("cleartask", `{"_id":"`+_id+`"}`, map[string]interface{}{
+				"$set": data,
+			}, false, false)
+		}
+		c.JSON(200, gin.H{"rep": b})
+	})
 }

+ 18 - 171
src/jy/admin/version.go

@@ -20,12 +20,6 @@ func init() {
 			gin.H{},
 		)
 	})
-	Admin.GET("/clearversion", func(c *gin.Context) {
-		c.HTML(
-			http.StatusOK, "clearversion.html",
-			gin.H{},
-		)
-	})
 	//任务版本
 	Admin.POST("/version/data", func(c *gin.Context) {
 		data, _ := Mgo.Find("version", `{"delete":false}`, `{"_id":-1}`, nil, false, -1, -1)
@@ -241,171 +235,6 @@ func init() {
 		//b := Mgo.Del("versioninfo", `{"_id":"`+_id+`"}`)
 		c.JSON(200, gin.H{"rep": b})
 	})
-
-	//清理版本
-	Admin.POST("/clearversion/data", func(c *gin.Context) {
-		data, _ := Mgo.Find("clearversion", `{"delete":false}`, `{"_id":-1}`, nil, false, -1, -1)
-		c.JSON(200, gin.H{"data": data})
-	})
-	Admin.POST("/clearversion/save", func(c *gin.Context) {
-		_id, _ := c.GetPostForm("_id")
-		data := GetPostForm(c)
-		if _id != "" {
-			Mgo.UpdateById("clearversion", _id, map[string]interface{}{"$set": data})
-			c.JSON(200, gin.H{"rep": true})
-		} else {
-			clearversion, _ := c.GetPostForm("clearversion")
-			tmp, _ := Mgo.FindOne("version", `{"clearversion":"`+clearversion+`","delete":false}`)
-			if len(*tmp) > 0 {
-				c.JSON(200, gin.H{"rep": false})
-			} else {
-				//				s_pversionid, _ := c.GetPostForm("s_pversionid")
-				//				iscopyfiled, _ := data["iscopyfiled"].(bool)
-				data["l_createtime"] = time.Now().Unix()
-				s_username := sessions.Default(c).Get("username").(string)
-				data["s_username"] = s_username
-				data["delete"] = false
-				Mgo.Save("clearversion", data)
-				//				vid := Mgo.Save("clearversion", data)
-				//				if s_pversionid != "" {
-				//					copyComRules(version, s_pversionid, s_username)
-				//				}
-				//				if iscopyfiled {
-				//					list, _ := Mgo.Find("versioninfo", `{"vid":"`+s_pversionid+`","delete":false}`, nil, nil, false, -1, -1)
-				//					for _, v := range *list {
-				//						delete(v, "_id")
-				//						v["l_createtime"] = time.Now().Unix()
-				//						v["s_username"] = sessions.Default(c).Get("username")
-				//						v["l_lasttime"] = time.Now().Unix()
-				//						v["vid"] = vid
-				//						v["delete"] = false
-				//						pid := Mgo.Save("versioninfo", v)
-				//						s_field := qu.ObjToString(v["s_field"])
-				//						//克隆属性配置
-				//						copyFieldRules(vid, pid, s_field, s_pversionid, s_username)
-				//					}
-				//					//克隆分包属性
-				//					list2, _ := Mgo.Find("pkg_info", `{"vid":"`+s_pversionid+`","delete":false}`, nil, nil, false, -1, -1)
-				//					for _, v := range *list2 {
-				//						delete(v, "_id")
-				//						v["l_createtime"] = time.Now().Unix()
-				//						v["s_username"] = sessions.Default(c).Get("username")
-				//						v["l_lasttime"] = time.Now().Unix()
-				//						v["vid"] = vid
-				//						v["delete"] = false
-				//						pid := Mgo.Save("pkg_info", v)
-				//						s_field := qu.ObjToString(v["s_field"])
-				//						//克隆属性配置
-				//						copyPkgRules(vid, pid, s_field, s_pversionid, s_username)
-				//					}
-				//				}
-				c.JSON(200, gin.H{"rep": true})
-			}
-		}
-	})
-	Admin.POST("/clearversion/use", func(c *gin.Context) {
-		_id, _ := c.GetPostForm("_id")
-		isuse, _ := c.GetPostForm("isuse")
-		if isuse == "true" { //启用确保只有一个版本
-			l, _ := Mgo.Find("clearversion", `{"isuse":true}`, nil, nil, false, -1, -1)
-			if len(*l) > 0 {
-				c.JSON(200, gin.H{"rep": false})
-				return
-			}
-		}
-		bisuse := false
-		if isuse == "true" {
-			bisuse = true
-		}
-		set := map[string]interface{}{
-			"$set": map[string]interface{}{
-				"isuse": bisuse,
-			},
-		}
-		b := Mgo.UpdateById("clearversion", _id, set)
-		c.JSON(200, gin.H{"rep": b})
-	})
-	Admin.POST("/clearversion/del", func(c *gin.Context) { //删除版本
-		_id, _ := c.GetPostForm("_id")
-		//s_version, _ := c.GetPostForm("clearversion")
-		b := Mgo.UpdateById("clearversion", _id, `{"$set":{"delete":true}}`)
-		//b := Mgo.Del("version", `{"_id":"`+_id+`"}`)
-		//级联删除
-		//刪除属性配置
-		//删除分包配置
-		//删除逻辑
-		//删除属性配置中的前置规则
-		//删除属性配置中的抽取规则
-		//删除属性配置中的后置规则
-
-		//刪除属性配置
-		//go DelVersionInfo(_id)
-		//删除分包配置
-		//go DelPkgInfo(_id)
-		//删除版本的通用前置规则
-		//go DelRulePre(s_version)
-		//删除版本的通用后置规则
-		//go DelRuleBack(s_version)
-		//删除标签库
-		//go DelTag(s_version)
-		//删除版本的通用前置规则
-		//go DelCleanUp(s_version)
-		c.JSON(200, gin.H{"rep": b})
-	})
-	Admin.GET("/clearversion/info", func(c *gin.Context) {
-		vid := c.Query("vid")
-		v, _ := Mgo.Find("clearversion", `{}`, `{"_id":-1}`, `{"version":1}`, false, -1, -1)
-		c.HTML(
-			http.StatusOK, "clearversioninfo.html",
-			gin.H{"vid": vid, "clearversions": v},
-		)
-	})
-	Admin.POST("/clearversion/infodata", func(c *gin.Context) {
-		vid, _ := c.GetPostForm("vid")
-		list, _ := Mgo.Find("clearversioninfo", `{"vid":"`+vid+`","delete":false}`, `{"_id":-1}`, nil, false, -1, -1)
-		c.JSON(200, gin.H{"data": list, "vid": vid})
-	})
-	Admin.POST("/clearversion/infosave", func(c *gin.Context) {
-		_id, _ := c.GetPostForm("_id")
-		data := GetPostForm(c)
-		if _id != "" {
-			Mgo.UpdateById("clearversioninfo", _id, map[string]interface{}{"$set": data})
-			c.JSON(200, gin.H{"rep": true})
-		} else {
-			s_field, _ := c.GetPostForm("s_field")
-			vid, _ := c.GetPostForm("vid")
-			tmp, _ := Mgo.FindOne("clearversioninfo", `{"s_field":"`+s_field+`","vid":"`+vid+`","delete":false}`)
-			if len(*tmp) > 0 {
-				c.JSON(200, gin.H{"rep": false})
-			} else {
-				data["l_createtime"] = time.Now().Unix()
-				data["s_username"] = sessions.Default(c).Get("username")
-				data["l_lasttime"] = time.Now().Unix()
-				data["delete"] = false
-				Mgo.Save("clearversioninfo", data)
-				//				pid := Mgo.Save("clearversioninfo", data)
-				fromvid, _ := data["s_pversionid"].(string)
-				if fromvid != "" {
-					//					copyFieldRules(vid, pid, s_field, fromvid, sessions.Default(c).Get("username").(string))
-				}
-				c.JSON(200, gin.H{"rep": true})
-			}
-		}
-	})
-	Admin.POST("/clearversion/infouse", func(c *gin.Context) {
-		_id, _ := c.GetPostForm("_id")
-		isuse, _ := c.GetPostForm("isuse")
-		b := Mgo.UpdateById("clearversioninfo", _id, `{"$set":{"isuse":`+isuse+`}}`)
-		c.JSON(200, gin.H{"rep": b})
-	})
-	Admin.POST("/clearversion/infodel", func(c *gin.Context) {
-		_id, _ := c.GetPostForm("_id")
-		b := Mgo.UpdateById("clearversioninfo", _id, `{"$set":{"delete":true}}`)
-		//		v, _ := Mgo.FindById("clearversioninfo", _id, `{"vid":1}`)
-		//		go DelLogic(qu.ObjToString((*v)["vid"]), _id)
-		c.JSON(200, gin.H{"rep": b})
-	})
-
 }
 
 //克隆版本通用属性
@@ -557,6 +386,24 @@ func copyFieldRules(vid, pid, s_field, oldvid, s_username string) {
 
 }
 
+//克隆清理版本Field
+func copyClearRuleLogic(vid, pid, s_field, oldvid, s_username string) {
+	tmp, _ := Mgo.FindOne("clearversioninfo", `{"vid":"`+oldvid+`","s_field":"`+s_field+`","delete":false}`)
+	oldpid := qu.BsonIdToSId((*tmp)["_id"])
+	elist, _ := Mgo.Find("clearulelogic", `{"vid":"`+oldvid+`","pid":"`+oldpid+`","delete":false}`, nil, nil, false, -1, -1)
+	for _, v := range *elist {
+		delete(v, "_id")
+		v["vid"] = vid
+		v["pid"] = pid
+		v["s_code"] = util.GetSyncIndex(getCode(v["s_code"].(string)))
+		v["s_username"] = s_username
+		v["l_createtime"] = time.Now().Unix()
+		v["l_lasttime"] = time.Now().Unix()
+		Mgo.Save("clearulelogic", v)
+	}
+
+}
+
 //获取代码
 func getCode(code string) string {
 	tmps := strings.Split(code, "_")

+ 136 - 0
src/jy/extract/clearesult.go

@@ -0,0 +1,136 @@
+package extract
+
+import (
+	db "jy/mongodbutil"
+	ju "jy/util"
+	"log"
+	qu "qfw/util"
+	"qfw/util/elastic"
+	"time"
+)
+
+var CltLogs []map[string]interface{}        //清理日志
+var UpdateResult [][]map[string]interface{} //更新抽取结果
+
+func (c *ClearTask) ClearProcess(doc *map[string]interface{}) {
+	qu.Try(func() {
+		//data := elastic.Get(qu.ObjToString(ju.Config["mergetablealias"]), qu.ObjToString(ju.Config["mergetable"]), `{"query":{"term":{"list.infoid":"59925222e138231f45d7bb4f"}}}`)
+		_id := qu.BsonIdToSId((*doc)["_id"])
+		data := elastic.Get(qu.ObjToString(ju.Config["mergetablealias"]), qu.ObjToString(ju.Config["mergetable"]), `{"query":{"term":{"list.infoid":"`+qu.BsonIdToSId((*doc)["_id"])+`"}}}`)
+		kvMap := make(map[string][]map[string]interface{})
+		tmparr := []map[string]interface{}{}
+		tmpmaparr := make(map[string]interface{})
+		if len(*data) > 0 {
+			list := (*data)[0]["list"].([]interface{})
+			listArr := qu.ObjArrToMapArr(list)
+			kvMap["list"] = listArr
+		}
+		field := ""
+		for _, l := range c.ClearLuas {
+			beforeval := (*doc)[l.Field]
+			if field == "" {
+				field = l.Field
+			}
+			lua := ju.LuaScript{Code: l.Code, Name: l.Name, Doc: *doc, Script: l.LuaText, KvMap: kvMap}
+			clearResult := lua.ClearRunScript()
+			(*doc)[l.Field] = clearResult[l.Field]                //覆盖原来要清理的字段的值
+			if len(clearResult) > 0 && c.ClearTaskInfo.IsCltLog { //封装清理日志
+				logdata := map[string]interface{}{
+					"code":    l.Code,
+					"name":    l.Name,
+					"field":   l.Field,
+					"type":    "clear",
+					"luatext": l.LuaText,
+					"before":  beforeval,
+					"value":   clearResult[l.Field],
+				}
+				tmparr = append(tmparr, logdata)
+			}
+		}
+		//封装日志信息
+		tmpmaparr[field] = tmparr
+		tmpmaparr["resultid"] = _id
+		lock.Lock()
+		CltLogs = append(CltLogs, tmpmaparr)
+		lock.Unlock()
+		//封装更新信息
+		updatearr := []map[string]interface{}{
+			map[string]interface{}{
+				"_id": _id,
+			},
+			map[string]interface{}{
+				"$set": map[string]interface{}{
+					field: (*doc)[field],
+				},
+			},
+		}
+		lock.Lock()
+		UpdateResult = append(UpdateResult, updatearr)
+		lock.Unlock()
+	}, func(err interface{}) {
+		log.Println((*doc)["_id"], err)
+		<-c.ClearTaskInfo.ProcessPool
+	})
+	<-c.ClearTaskInfo.ProcessPool
+}
+
+//保存清理日志
+func SaveCltLog() {
+	tmpLogs := []map[string]interface{}{}
+	lock.Lock()
+	tmpLogs = CltLogs
+	CltLogs = []map[string]interface{}{}
+	lock.Unlock()
+	if len(tmpLogs) < saveLimit {
+		db.Mgo.SaveBulk("clearlogs", tmpLogs...)
+	} else {
+		for {
+			if len(tmpLogs) > saveLimit {
+				tmp := tmpLogs[:saveLimit]
+				db.Mgo.SaveBulk("clearlogs", tmp...)
+				tmpLogs = tmpLogs[saveLimit:]
+			} else {
+				db.Mgo.SaveBulk("clearlogs", tmpLogs...)
+				break
+			}
+		}
+	}
+	time.AfterFunc(10*time.Second, SaveCltLog)
+}
+
+//批量更新抽取结果的值
+//func (c *ClearTask) UpdateResultVal() {
+//	defer qu.Catch()
+//	e.ResultChanel = make(chan bool, 5)
+//	e.ResultArr = [][]map[string]interface{}{}
+//	for {
+//		if len(e.ResultArr) > 500 {
+//			e.ResultChanel <- true
+//			arr := e.ResultArr[:500]
+//			go func(tmp *[][]map[string]interface{}) {
+//				qu.Try(func() {
+//					db.Mgo.UpSertBulk("extract_result", *tmp...)
+//					<-e.ResultChanel
+//				}, func(err interface{}) {
+//					log.Println(err)
+//					<-e.ResultChanel
+//				})
+//			}(&arr)
+//			e.ResultArr = e.ResultArr[500:]
+//		} else {
+//			e.ResultChanel <- true
+//			arr := e.ResultArr
+//			go func(tmp *[][]map[string]interface{}) {
+//				qu.Try(func() {
+//					db.Mgo.UpSertBulk("extract_result", *tmp...)
+//					<-e.ResultChanel
+//				}, func(err interface{}) {
+//					log.Println(err)
+//					<-e.ResultChanel
+//				})
+//			}(&arr)
+//			e.ResultArr = [][]map[string]interface{}{}
+//			time.Sleep(10 * time.Second)
+//		}
+//	}
+//}

+ 88 - 0
src/jy/extract/clearudp.go

@@ -0,0 +1,88 @@
+package extract
+
+import (
+	"encoding/json"
+	db "jy/mongodbutil"
+	ju "jy/util"
+	"log"
+	mu "mfw/util"
+	"net"
+	qu "qfw/util"
+	"qfw/util/elastic"
+
+	"gopkg.in/mgo.v2/bson"
+)
+
+var ClearUdpclient mu.UdpClient //清理udp对象
+//udp通知清理
+func ClearUdp() {
+	//初始化elastic连接
+	elastic.InitElasticSize(qu.ObjToString(ju.Config["elasticsearch"]), qu.IntAllDef(ju.Config["elasticPoolSize"], 30))
+	//nextNodes = qu.ObjArrToMapArr(ju.Config["nextNode"].([]interface{}))
+	ClearUdpclient = mu.UdpClient{Local: ":" + qu.ObjToString(ju.Config["clearudpport"]), BufSize: 1024}
+	ClearUdpclient.Listen(clearProcessUdpMsg)
+}
+
+func clearProcessUdpMsg(act byte, data []byte, ra *net.UDPAddr) {
+	switch act {
+	case mu.OP_TYPE_DATA:
+		var rep map[string]interface{}
+		err := json.Unmarshal(data, &rep)
+		if err != nil {
+			log.Println(err)
+		} else {
+			sid, _ := rep["gtid"].(string)
+			eid, _ := rep["lteid"].(string)
+			//stype, _ := rep["stype"].(string)
+			log.Println("======", sid, eid)
+			Udpclient.WriteUdp([]byte("ok"), mu.OP_NOOP, ra) //回应上一个节点
+			ClearByUdp(sid, eid)
+			log.Println("udp通知清理完成,eid=", eid)
+		}
+	case mu.OP_NOOP: //下个节点回应
+		var rep map[string]interface{}
+		err := json.Unmarshal(data, &rep)
+		if err != nil {
+			log.Println(err)
+		} else {
+			log.Println(rep)
+		}
+	}
+}
+
+//根据id区间清理
+func ClearByUdp(sid, eid string) {
+	clt := &ClearTask{}
+	clt.Id = qu.ObjToString(ju.Config["cleartaskid"])
+	//加载任务信息
+	clt.InitClearTaskInfo()
+	clt.ClearTaskInfo.FDB = db.MgoFactory(2, 3, 120, clt.ClearTaskInfo.FromDbAddr, clt.ClearTaskInfo.FromDB)
+	//初始化脚本信息
+	clt.InitClearLuas()
+
+	go clt.UpdateResultVal()
+
+	query := bson.M{"_id": bson.M{"$gte": bson.ObjectIdHex(sid), "$lte": bson.ObjectIdHex(eid)}}
+	log.Println("query---", query, clt.ClearTaskInfo.FromColl)
+	count := clt.ClearTaskInfo.FDB.Count(clt.ClearTaskInfo.FromColl, query)
+	log.Println("count---", count)
+	pageNum := (count + PageSize - 1) / PageSize
+	limit := PageSize
+	if count < PageSize {
+		limit = count
+	}
+	log.Println("pageNum---", pageNum)
+	//一次查询5000条数据进行清理
+	for i := 0; i < pageNum; i++ {
+		query = bson.M{"_id": bson.M{"$gte": bson.ObjectIdHex(sid)}}
+		log.Printf("page=%d,query=%v", i+1, query)
+		list, _ := clt.ClearTaskInfo.FDB.Find(clt.ClearTaskInfo.FromColl, query, nil, Fields2, false, 0, limit)
+		for _, v := range *list {
+			clt.ClearTaskInfo.ProcessPool <- true
+			go func(val map[string]interface{}) {
+				clt.ClearProcess(&val)
+			}(v)
+			sid = qu.BsonIdToSId(v["_id"])
+		}
+	}
+}

+ 9 - 7
src/jy/extract/extract.go

@@ -20,13 +20,15 @@ import (
 )
 
 var (
-	lock      sync.RWMutex
-	cut       = ju.NewCut()                          //获取正文并清理
-	ExtLogs   map[*TaskInfo][]map[string]interface{} //抽取日志
-	TaskList  map[string]*ExtractTask                //任务列表
-	saveLimit = 200                                  //抽取日志批量保存
-	PageSize  = 5000                                 //查询分页
-	Fields    = `{"title":1,"detail":1,"contenthtml":1,"site":1,"spidercode":1,"toptype":1,"subtype":1,"area":1,"city":1,"comeintime":1,"publishtime":1,"sensitive":1}`
+	lock          sync.RWMutex
+	cut           = ju.NewCut()                          //获取正文并清理
+	ExtLogs       map[*TaskInfo][]map[string]interface{} //抽取日志
+	TaskList      map[string]*ExtractTask                //任务列表
+	ClearTaskList map[string]*ClearTask                  //清理任务列表
+	saveLimit     = 200                                  //抽取日志批量保存
+	PageSize      = 5000                                 //查询分页
+	Fields        = `{"title":1,"detail":1,"contenthtml":1,"site":1,"spidercode":1,"toptype":1,"subtype":1,"area":1,"city":1,"comeintime":1,"publishtime":1,"sensitive":1}`
+	Fields2       = `{"budget":1,"bidamount":1,"title":1,"projectname":1,"winner":1}`
 )
 
 //启动测试抽取

+ 82 - 7
src/jy/extract/extractInit.go

@@ -34,6 +34,12 @@ type RuleCore struct {
 	RuleBacks []*RegLuaInfo //抽取后置规则
 	RuleCores []*RegLuaInfo //抽取规则
 }
+
+type Tag struct {
+	Type string         //标签类型 string 字符串、regexp 正则
+	Key  string         //
+	Reg  *regexp.Regexp //
+}
 type TaskInfo struct {
 	Name, Version, VersionId, TrackColl string    //名称、版本、版本id、追踪记录表
 	FromDbAddr, FromDB, FromColl        string    //抽取数据库地址、库名、表名
@@ -45,12 +51,6 @@ type TaskInfo struct {
 	ProcessPool                         chan bool //任务进程池
 	TestLua                             bool      //检查测试用
 }
-type Tag struct {
-	Type string         //标签类型 string 字符串、regexp 正则
-	Key  string         //
-	Reg  *regexp.Regexp //
-}
-
 type ExtractTask struct {
 	Id            string              //任务id
 	IsRun         bool                //是否启动
@@ -87,9 +87,36 @@ type ExtractTask struct {
 	AreaStreet        DFA //街道
 }
 
+type ClearTaskInfo struct {
+	Name, Version, VersionId     string    //名称、版本、版本id
+	FromDbAddr, FromDB, FromColl string    //清理数据库地址、库名、表名
+	FDB                          *db.Pool  //数据库连接池
+	TDB                          *db.Pool  //数据库连接池
+	IsCltLog                     bool      //是否开启清理日志
+	ProcessPool                  chan bool //任务进程池
+}
+type ClearLua struct {
+	Field   string //字段字段
+	Code    string //代码
+	Name    string //名称
+	LuaText string
+	//LuaLogic string            //进入逻辑
+	//ExtFrom string            //从哪个字段抽取
+	LFields map[string]string //lua抽取字段属性组
+}
+
+type ClearTask struct {
+	Id            string         //任务id
+	Content       string         //信息内容
+	ClearTaskInfo *ClearTaskInfo //任务信息
+	ClearLuas     []*ClearLua    //清理脚本
+}
+
 func init() {
 	TaskList = make(map[string]*ExtractTask)
+	ClearTaskList = make(map[string]*ClearTask)
 	go SaveExtLog()
+	go SaveCltLog() //保存清理日志
 }
 
 //加载任务信息
@@ -441,7 +468,6 @@ func (e *ExtractTask) InitTag() {
 
 //获取fields
 func getALLFields() map[string]string {
-
 	fields := map[string]string{}
 	list, _ := db.Mgo.Find("fields", `{}`, nil, `{"s_field":1,"s_name"}`, false, -1, -1)
 	for _, v := range *list {
@@ -833,3 +859,52 @@ func (e *ExtractTask) InitAuditFields() {
 		}
 	}
 }
+
+//加载清理任务信息
+func (c *ClearTask) InitClearTaskInfo() {
+	cleartask, _ := db.Mgo.FindById("cleartask", c.Id, nil)
+	if len(*cleartask) > 1 {
+		v, _ := db.Mgo.FindOne("clearversion", `{"clearversion":"`+(*cleartask)["s_version"].(string)+`","delete":false}`)
+		c.ClearTaskInfo = &ClearTaskInfo{
+			Name:        (*cleartask)["s_taskname"].(string),
+			Version:     (*cleartask)["s_version"].(string),
+			VersionId:   qu.BsonIdToSId((*v)["_id"]),
+			FromDbAddr:  (*cleartask)["s_mgoaddr"].(string),
+			FromDB:      (*cleartask)["s_mgodb"].(string),
+			FromColl:    (*cleartask)["s_mgocoll"].(string),
+			IsCltLog:    ju.Config["iscltlog"].(bool),
+			ProcessPool: make(chan bool, qu.IntAllDef((*cleartask)["i_process"], 1)),
+		}
+		log.Println(c.ClearTaskInfo.Name, "thread:", qu.IntAllDef((*cleartask)["i_process"], 1))
+	} else {
+		return
+	}
+}
+
+//加载清理脚本
+func (c *ClearTask) InitClearLuas() {
+	defer qu.Catch()
+	c.ClearLuas = []*ClearLua{}
+	list, _ := db.Mgo.Find("clearversioninfo", `{"vid":"`+c.ClearTaskInfo.VersionId+`","delete":false}`, nil, nil, false, -1, -1)
+	for _, l := range *list {
+		if b, _ := l["isuse"].(bool); !b { //仅使用启用的属性
+			continue
+		}
+		s_field := qu.ObjToString(l["s_field"])
+		pid := qu.BsonIdToSId(l["_id"])
+		luas, _ := db.Mgo.Find("clearulelogic", `{"pid":"`+pid+`","delete":false}`, nil, nil, false, -1, -1)
+		for _, vv := range *luas {
+			if b, _ := vv["isuse"].(bool); !b {
+				continue
+			}
+			clearLua := &ClearLua{
+				Field:   s_field,
+				Code:    vv["s_code"].(string),
+				Name:    vv["s_name"].(string),
+				LuaText: vv["s_luascript"].(string),
+				LFields: getALLFields(),
+			}
+			c.ClearLuas = append(c.ClearLuas, clearLua)
+		}
+	}
+}

+ 36 - 0
src/jy/util/script.go

@@ -20,6 +20,40 @@ type LuaScript struct {
 	L                  *lua.LState
 }
 
+func (s *LuaScript) ClearRunScript() map[string]interface{} {
+	data := map[string]interface{}{}
+	qu.Try(func() {
+		s.L = lua.NewState() //创建lua虚拟机
+		s.L.PreloadModule("json", ljson.Loader)
+		defer s.L.Close()
+		if err := s.L.DoString(s.Script); err != nil {
+			data["err"] = err.Error()
+		} else {
+			//doc:每条结果数据
+			//KvMap:合并数据的list
+			tab := MapToLuaTable(s.L, s.Doc)
+			kvMap := MapToLuaTable2(s.L, s.KvMap)
+			if err := s.L.CallByParam(lua.P{
+				Fn:      s.L.GetGlobal("main"),
+				NRet:    1,
+				Protect: true,
+			}, lua.LString(s.Code), tab, kvMap); err != nil {
+				data["err"] = err.Error()
+			}
+			ret := s.L.Get(-1)
+			s.L.Pop(1)
+			if tmp, ok := ret.(*lua.LTable); ok {
+				data = LuaTableToMap(tmp)
+			} else {
+				data["rep"] = ret
+			}
+		}
+	}, func(err interface{}) {
+		log.Println("lua err:", data["err"])
+	})
+	return data
+}
+
 //stype per:前置,core:抽取,back:后置
 func (s *LuaScript) RunScript(stype string) map[string]interface{} {
 	data := map[string]interface{}{}
@@ -176,6 +210,8 @@ func LuaTableToMap(param *lua.LTable) map[string]interface{} {
 			tmp[kk] = qu.Int64All(val.String())
 		} else if v, ok := val.(*lua.LNumber); ok {
 			tmp[kk] = qu.Float64All(v.String())
+		} else if v, ok := val.(lua.LNumber); ok {
+			tmp[kk] = qu.Float64All(v.String())
 		} else {
 			tmp[kk] = val
 		}

+ 1 - 0
src/main.go

@@ -22,6 +22,7 @@ func init() {
 
 func main() {
 	extract.ExtractUdp() //udp通知抽取
+	extract.ClearUdp()   //udp通知清理
 	go extract.Export()
 	go Router.Run(":" + qu.ObjToString(util.Config["port"]))
 	go log.Println("启动..", qu.ObjToString(util.Config["port"]))

+ 82 - 0
src/web/templates/admin/check_luaclearlogic.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/versionclear"><i class="fa fa-dashboard"></i>清理版本</a></li>
+		  <li><a href="/admin/clearversion/info?vid={{.vid}}">属性配置</a></li>
+		  <li><a href="/admin/clearulelogic?vid={{.vid}}&pid={{.pid}}">清理逻辑</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><div class="btn-center">
+			<button type="button" class="btn btn-success" onclick="check()">测试</button>
+			<button type="button" class="btn btn-primary" onclick="save()">保存</button>
+		</div></h1>
+</section>
+
+</div>
+{{template "luares"}}
+{{template "footer"}}
+<script>
+com.initMirror(400)
+menuActive("versionclear")
+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>
+

+ 1 - 2
src/web/templates/admin/clear.html

@@ -12,8 +12,7 @@
 			<small><button type="button" class="btn btn-primary" data-toggle="modal" onclick='createOneClear("")'>新增函数清理</button></small>
 		</h1>
 		<ol class="breadcrumb">
-		  <li><a href="/admin/version"><i class="fa fa-dashboard"></i> 版本控制</a></li>
-		  <li><a href="/admin/version">版本管理</a></li>
+		  <li><a href="/admin/version"><i class="fa fa-dashboard"></i> 抽取版本</a></li>
 		  <li class="active"><a href="#">函数清理</a></li>
 		</ol>
     </section>

+ 6 - 6
src/web/templates/admin/clearversion.html

@@ -11,7 +11,7 @@
 			<small><a class="btn btn-primary opr" opr="new">新增清理版本</a></small>
 		</h1>
 		<ol class="breadcrumb">
-		  <li><a href="/admin/version"><i class="fa fa-dashboard"></i>版本管理</a></li>
+		  <li class="active"><a href="/admin/versionclear"><i class="fa fa-dashboard"></i>清理版本</a></li>
 		</ol>
     </section>
   <!-- Main content -->
@@ -46,7 +46,7 @@
 {{template "footer"}}
 
 <script>
-menuActive("clearversion")
+menuActive("versionclear")
 $(function () {
 	ttable=$('#dataTable').DataTable({
 		"paging"      : false,
@@ -103,8 +103,8 @@ $(function () {
 					{label:"版本名称",s_label:"clearversion",placeholder:"版本名称",must:true},
 					{label:"描述",s_label:"s_descript",placeholder:"描述信息",must:true},
 					//{label:"城市抽取",s_label:"isextractcity",type:"tpl_list_local",list:[{"s_name":"是","_id":true},{"s_name":"否","_id":false}],default:false},
-					{label:"克隆版本",s_label:"s_pversionid",type:"tpl_list_local"},//url:"/admin/getversions"},
-					{label:"克隆属性",s_label:"iscopyfiled",type:"tpl_list_local",list:[{"s_name":"是","_id":true},{"s_name":"否","_id":false}],default:false},
+					{label:"克隆版本",s_label:"s_pversionid",type:"tpl_list_local",url:"/admin/getclearversions"},
+					//{label:"克隆属性",s_label:"iscopyfiled",type:"tpl_list_local",list:[{"s_name":"是","_id":true},{"s_name":"否","_id":false}],default:false},
 					{s_label:"isuse",type:"tpl_hidden"},
 					{s_label:"_id",type:"tpl_hidden"}
 				]
@@ -136,7 +136,7 @@ $(function () {
 									}
 									$.post("/admin/clearversion/save",obj,function(data){
 										if(data&&data.rep){
-											window.location.href="/admin/clearversion"			
+											window.location.href="/admin/versionclear"			
 										}else{
 											showTip("已存在!",1000)
 										}
@@ -184,7 +184,7 @@ function del(_id,clearversion){
 			data:{"_id":_id,"clearversion":clearversion},
 			success:function(r){
 				if(r.rep){				
-					window.location.href="/admin/clearversion"
+					window.location.href="/admin/versionclear"
 				}else{
 					showTip("删除失败", 1000, function() {});
 				}

+ 6 - 6
src/web/templates/admin/clearversioninfo.html

@@ -11,8 +11,8 @@
 			<small><a class="btn btn-primary opr" opr="new">新增清理字段</a></small>
 		</h1>
 		<ol class="breadcrumb">
-		  <li><a href="/admin/version"><i class="fa fa-dashboard"></i>版本管理</a></li>
-		  <li class="active"><a href="/admin/version/info?vid={{.vid}}">属性配置</a></li>
+		  <li><a href="/admin/versionclear"><i class="fa fa-dashboard"></i>清理版本</a></li>
+		  <li class="active"><a href="/admin/clearversion/info?vid={{.vid}}">属性配置</a></li>
 		</ol>
     </section>
   <!-- Main content -->
@@ -47,7 +47,7 @@
 {{template "footer"}}
 
 <script>
-menuActive("clearversion");
+menuActive("versionclear");
 $(function () {
 	ttable=$('#dataTable').DataTable({
 		"paging"      : false,
@@ -78,7 +78,7 @@ $(function () {
 				return tmp
 			}},
 			{"data":"_id",render:function(val,a,row){
-				return '<a class="btn btn-sm btn-success" href="/admin/rulelogic?vid={{.vid}}&pid='+val+'">配置逻辑</a>'
+				return '<a class="btn btn-sm btn-success" href="/admin/clearulelogic?vid={{.vid}}&pid='+val+'">配置逻辑</a>'
 			}},
 			{"data":"_id",render:function(val,a,row){
 				return '<a class="btn btn-sm btn-primary opr" opr="edit">编辑</a>&nbsp;<a class="btn btn-sm btn-danger" href="#" onclick="del(\''+val+'\')">删除</a>'
@@ -97,7 +97,7 @@ $(function () {
 						{label:"属性名称",s_label:"s_field",type:"tpl_list_local",url:"/admin/getfields",must:true},
 						{label:"描述",s_label:"s_descrip",placeholder:"描述信息"},
 						//{label:"是否审核",s_label:"isaudit",type:"tpl_list_local",list:[{"s_name":"是","_id":true},{"s_name":"否","_id":false}],default:false},
-						{label:"克隆版本",s_label:"s_pversionid",type:"tpl_list_local",url:"/admin/getversions"},
+						{label:"克隆版本",s_label:"s_pversionid",type:"tpl_list_local",url:"/admin/getclearversions"},
                         {s_label:"_id",type:"tpl_hidden"},
 						{s_label:"vid",type:"tpl_hidden"},
 						{s_label:"isuse",type:"tpl_hidden"},
@@ -105,7 +105,7 @@ $(function () {
 				if(n=="edit"){
 					_tit="编辑-"+obj.s_field
                     tag[0]={label:"属性名称",s_label:"s_field",type:"tpl_list_local",url:"/admin/getfields",must:true,disabled:true}
-                    tag[2]={label:"克隆版本",s_label:"s_pversionid",type:"tpl_list_local",url:"/admin/getversions",disabled:true}
+                    tag[2]={label:"克隆版本",s_label:"s_pversionid",type:"tpl_list_local",url:"/admin/getclearversions",disabled:true}
 				}else{
 					_tit="新增清理字段"
 					obj={"vid":"{{.vid}}","isuse":false}

+ 1 - 1
src/web/templates/admin/com_memu.html

@@ -24,7 +24,7 @@
           	</a>
           	<ul class="treeview-menu">
 	            <li><a href="/admin/version"><i class="fa fa-link"></i>抽取版本</a></li>
-				<li><a href="/admin/clearversion"><i class="fa fa-link"></i>清理版本</a></li>
+				<li><a href="/admin/versionclear"><i class="fa fa-link"></i>清理版本</a></li>
 			</ul>
         </li>
 		<!--<li><a href="/admin/version"><i class="fa fa-navicon"></i><span>版本管理</span></a></li>-->

+ 1 - 1
src/web/templates/admin/rule_backlist.html

@@ -12,7 +12,7 @@
 			<small><a class="btn btn-primary opr" opr="newlua">新增脚本</a></small>
 		</h1>
 		<ol class="breadcrumb">
-		  <li><a href="/admin/version"><i class="fa fa-dashboard"></i>版本管理</a></li>
+		  <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>

+ 205 - 0
src/web/templates/admin/rule_clearlogiclist.html

@@ -0,0 +1,205 @@
+{{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><a class="btn btn-primary opr" opr="newlua">新增清理脚本</a></small>
+		</h1>
+		<ol class="breadcrumb">
+		  <li><a href="/admin/versionclear"><i class="fa fa-dashboard"></i>清理版本</a></li>
+		  <li><a href="/admin/clearversion/info?vid={{.vid}}">属性配置</a></li>
+		  <li class="active"><a href="/admin/clearulelogic?vid={{.vid}}&pid={{.pid}}">清理逻辑</a></li>
+		</ol>
+    </section>
+  <!-- Main content -->
+  <section class="content">
+      <div class="row">
+	      <div class="col-xs-12">
+	        <div class="box">
+		        <div class="box-body">
+		            <table id="dataTable" class="table table-bordered table-hover">
+		              <thead>
+		              <tr>
+						<th>代码</th>
+		                <th>名称</th>
+						<th>创建人</th>
+						<th>描述</th>
+						<th>类型</th>
+						<th>是否启用</th>
+						<th>操作</th>
+		              </tr>
+		              </thead>
+		            </table>
+		        </div>
+	          <!-- /.box-body -->
+	        </div>
+        <!-- /.box -->
+		</div>
+	</div>
+  </section>
+</div>
+{{template "luares"}}
+{{template "dialog"}}
+{{template "footer"}}
+
+<script>
+menuActive("versionclear")
+$(function () {
+	ttable=$('#dataTable').DataTable({
+		"paging"      : false,
+		"lengthChange": false,
+		"searching"   : true,
+		"ordering"    : false,
+		"info"        : true,
+		"autoWidth"   : false,
+		"ajax": {
+			"url": "/admin/clearulelogic/data",
+			"type": "post",
+			"data":{"vid":{{.vid}},"pid":{{.pid}}}
+		 },
+		"language": {
+            "url": "/res/dist/js/dataTables.chinese.lang"
+        },
+		"columns": [
+			{ "data": "s_code"},
+            { "data": "s_name"},
+			{ "data": "s_username"},
+			{ "data": "s_descript"},
+			{ "data": "s_type",render:function(val,a,row){
+				return "lua脚本"
+			}},
+			{ "data": "isuse",render:function(val,a,row){
+				tmp=""
+				if(val){
+					tmp="<a href='#' title='停用' onclick='use(\""+row._id+"\",false)'><i class='fa fa-fw fa-circle text-green'></i></a>已启用"
+				}else{
+					tmp="<a href='#' title='启用' onclick='use(\""+row._id+"\",true)'><i class='fa fa-fw fa-circle text-red'></i></a>未启用"
+				}
+				return tmp
+			}},
+			{ "data": "_id",render:function(val,a,row,pos){
+				return '<div>'+
+					'<a class="btn btn-sm btn-primary opr" opr="editlua" row="'+pos.row+'" >编辑</a> '+
+					'<a class="btn btn-sm btn-warning" onclick="del(\''+val+'\')">删除</a> '+
+					'</div>';
+			}}
+       	]
+	});
+	ttable.on('init.dt', function () {
+		$(".opr").click(function(){
+			var n=$(this).attr("opr")
+			var htmlObj={},obj,tag=[]
+			var bts=[{label:"保存",class:"btn-primary",
+							fun:function(){
+								var obj={}
+								var bcon=true
+								$("#_con").find("input[id!=s_show],textarea").each(function(i,el){
+									var val=$(el).val();
+									if(el.id=="s_luascript"){
+										val=editor_1.getValue()
+										obj[el.id]=val
+									}else{
+										obj[el.id]=$(el).val()
+									}
+									if(el.id!="_id"&&$(el).attr("must")&&!val){
+										bcon=false
+										return false
+									}
+								})
+								if (bcon){								
+									$.post("/admin/clearulelogic/save",obj,function(data){
+										if(data&&data.rep){
+											window.location.href="/admin/clearulelogic?vid={{.vid}}&pid={{.pid}}"								
+										}else{
+											showTip(data.msg,1000)
+										}
+									},'json')
+								}else{
+									alert("红色标签的表单不能为空!")
+								}
+							}
+						}
+					]
+			var _tit="" 
+			switch(n){
+			case "editlua":			
+				obj=ttable.row($(this).closest("tr")).data();
+			case "newlua":
+				comtag=[{label:"名称",s_label:"s_name",placeholder:"",must:true},{label:"描述",s_label:"s_descript",type:"tpl_text"},{label:"启用",s_label:"isuse",type:"tpl_list_local",list:[{"s_name":"是","_id":true},{"s_name":"否","_id":false}],default:true}]
+				luatag=[{label:"字段",s_label:"s_field",type:"tpl_list_local",url:"/admin/getfields",default:{{.field}}},{label:"脚本",s_label:"s_luascript",type:"tpl_text",must:true}]
+				testcon=[{label:"测试内容",s_label:"s_testcon",type:"tpl_text",must:true}]
+				hiddentag=[{s_label:"_id",type:"tpl_hidden"},{s_label:"vid",type:"tpl_hidden"},{s_label:"pid",type:"tpl_hidden"},{s_label:"s_type",type:"tpl_hidden"}]
+				tag = com.pushArry(tag,comtag)
+				 if(n=="editlua"){
+					_tit="编辑-"+obj.s_name
+					tag = com.pushArry(tag,luatag)
+					tag = com.pushArry(tag,hiddentag)
+					check=[{label:"测试",class:"btn-warning",
+								fun:function(){
+									window.location.href="/admin/check/lua/clearlogic?vid={{.vid}}&pid={{.pid}}&s_code="+obj.s_code
+								}
+							}]
+					bts = com.pushArry(bts,check)
+				}else if(n=="newlua"){
+					_tit="新增清理脚本"
+					obj={"s_luascript":"--code脚本代码,doc数据源,过滤后返回doc对象\nfunction main(code,doc,kvs)\n\t--过滤操作\n\treturn doc\nend","vid":"{{.vid}}","pid":"{{.pid}}","s_type":"1"}
+					tag = com.pushArry(tag,luatag)
+					tag = com.pushArry(tag,hiddentag)
+				}
+				htmlObj={
+					title:_tit,
+					tag:tag,
+					lua:true,
+					bts:bts
+				}
+			OpenDialog(htmlObj,obj)
+			break;
+			}
+		});
+	})
+})
+
+function del(_id){
+	showConfirm("确定删除?", function() {
+		$.ajax({
+			url:"/admin/clearulelogic/del",
+			type:"post",
+			data:{"_id":_id},
+			success:function(r){
+				if(r.rep){				
+					window.location.href="/admin/clearulelogic?vid={{.vid}}&pid={{.pid}}"
+				}else{
+					showTip("删除失败", 1000);
+				}
+			}
+		})
+	});
+}
+function use(_id,utype){
+	smg=""
+	if(utype){
+		smg="确定启用?"
+	}else{
+		smg="确定停用?"
+	}
+	showConfirm(smg, function() {
+		$.ajax({
+			url:"/admin/clearulelogic/use",
+			type:"post",
+			data:{"_id":_id,"isuse":utype},
+			success:function(r){
+				if(r.rep){				
+					window.location.reload()
+				}else{
+					showTip("启用失败", 1000, function() {});
+				}
+			}
+		})
+	});
+}
+</script>

+ 1 - 1
src/web/templates/admin/rule_logicbacklist.html

@@ -12,7 +12,7 @@
 			<small><a class="btn btn-primary opr" opr="newlua">新增脚本</a></small>
 		</h1>
 		<ol class="breadcrumb">
-		  <li><a href="/admin/version"><i class="fa fa-dashboard"></i>版本管理</a></li>
+		  <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 class="active"><a href="/admin/logicback?vid={{.vid}}&pid={{.pid}}&sid={{.sid}}">后置规则</a></li>

+ 1 - 1
src/web/templates/admin/rule_logiclist.html

@@ -11,7 +11,7 @@
 			<small><a class="btn btn-primary opr" opr="new">新增逻辑</a></small>
 		</h1>
 		<ol class="breadcrumb">
-		  <li><a href="/admin/version"><i class="fa fa-dashboard"></i>版本管理</a></li>
+		  <li><a href="/admin/version"><i class="fa fa-dashboard"></i>抽取版本</a></li>
 		  <li class="active"><a href="/admin/version/info?vid={{.vid}}">属性配置</a></li>
 		  <li class="active"><a href="/admin/rulelogic?vid={{.vid}}&pid={{.pid}}">抽取逻辑</a></li>
 		</ol>

+ 1 - 1
src/web/templates/admin/rule_logicore.html

@@ -12,7 +12,7 @@
 			<small><a class="btn btn-primary opr" opr="newlua">新增脚本</a></small>
 		</h1>
 		<ol class="breadcrumb">
-		  <li><a href="/admin/version"><i class="fa fa-dashboard"></i>版本管理</a></li>
+		  <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 class="active"><a href="/admin/logicore?vid={{.vid}}&pid={{.pid}}&sid={{.sid}}">抽取规则</a></li>

+ 1 - 1
src/web/templates/admin/rule_logicprelist.html

@@ -12,7 +12,7 @@
 			<small><a class="btn btn-primary opr" opr="newlua">新增脚本</a></small>
 		</h1>
 		<ol class="breadcrumb">
-		  <li><a href="/admin/version"><i class="fa fa-dashboard"></i>版本管理</a></li>
+		  <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 class="active"><a href="/admin/logicpre?vid={{.vid}}&pid={{.pid}}&sid={{.sid}}">前置规则</a></li>

+ 1 - 1
src/web/templates/admin/rule_prelist.html

@@ -12,7 +12,7 @@
 			<small><a class="btn btn-primary opr" opr="newlua">新增脚本</a></small>
 		</h1>
 		<ol class="breadcrumb">
-		  <li><a href="/admin/version"><i class="fa fa-dashboard"></i>版本管理</a></li>
+		  <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>

+ 1 - 2
src/web/templates/admin/taglist.html

@@ -11,8 +11,7 @@
 			<small><button type="button" class="btn btn-primary" data-toggle="modal" data-target="#modal-info-addtag">新增标签</button></small>
 		</h1>
 		<ol class="breadcrumb">
-		  <li><a href="/admin/version"><i class="fa fa-dashboard"></i> 版本控制</a></li>
-		  <li><a href="/admin/version">版本管理</a></li>
+		  <li><a href="/admin/version"><i class="fa fa-dashboard"></i> 抽取版本</a></li>
 		  <li class="active"><a href="#">标签库</a></li>
 		</ol>
     </section>

+ 9 - 105
src/web/templates/admin/task_clear_list.html → src/web/templates/admin/task_clearlist.html

@@ -22,7 +22,7 @@
 		            <table id="dataTable" class="table table-bordered table-hover">
 		              <thead>
 		              <tr>
-		                <th>任务名称</th> <th>创建时间</th> <th>创建人</th> <th>描述</th><th>运行状态</th> <th>操作</th>
+		                <th>任务名称</th> <th>创建时间</th> <th>创建人</th> <th>描述</th><th>操作</th>
 		              </tr>
 		              </thead>
 		            </table>
@@ -47,7 +47,7 @@ $(function () {
 		"info"        : true,
 		"autoWidth"   : false,
 		"ajax": {
-			"url": "/admin/task/list",
+			"url": "/admin/cleartask/list",
 			"type": "post",
 			"data":{}
 		 },
@@ -63,19 +63,9 @@ $(function () {
 			}},
 			{ "data": "s_username"},
 			{ "data": "s_descript","width":"25%"},
-			{ "data": "runstatus",render:function(val){
-				if(val){
-					return "<i class='fa fa-fw fa-circle text-green'></i>运行中"
-				}else{
-					return "<i class='fa fa-fw fa-circle text-danger'></i>未启动"
-				}
-			}},
 			{ "data":"_id","width":"25%",render:function(val,a,row,pos){
 				tmp = '<div>'+
 					'<a class="btn btn-sm btn-primary opr" opr="edit" row="'+pos.row+'" >编辑</a> '+
-					'<a class="btn btn-sm btn-success opr" opr="start" onclick="start(\''+row._id+'\')">启动</a> '+
-					'<a class="btn btn-sm btn-info opr" opr="stop" onclick="stop(\''+row._id+'\')">停止</a> '+
-					//'<a class="btn btn-sm btn-warning opr" opr="test" taskid="'+val+'">测试</a>'+
 					'</div>';
 				return  tmp
 			}}
@@ -95,35 +85,15 @@ $(function () {
 			case "new":
 				/*表单*/
 				addtask=[
-					{label:"任务名称",s_label:"s_taskname",placeholder:"剑鱼抽取",must:true},
+					{label:"任务名称",s_label:"s_taskname",placeholder:"结果清理",must:true},
 					{label:"源库连接",s_label:"s_mgoaddr",must:true},
 					{label:"源数据库",s_label:"s_mgodb",must:true},
-					{label:"源表",s_label:"s_mgocoll",must:true},
-					{label:"保存表",s_label:"s_mgosavecoll",placeholder:"127.0.0.1:27080/extract/bidding(数据库地址/数据库/表)",must:true},
+					{label:"结果表",s_label:"s_mgocoll",must:true},
 					{label:"描述",s_label:"s_descript",type:"tpl_text"},
-					/*
-					{label:"是否追踪",s_label:"i_track",type:"tpl_list_local",must:true,list:[{"s_name":"是","_id":1},{"s_name":"否","_id":0}],default:0,fun:function(){
-						var to=$("#i_track")					
-						to.val($(this).attr("_id"))
-						$("#s_show",to.closest("div")).val($(this).text())
-						//追踪表样式
-						$("#s_trackcoll").attr("must",$(this).attr("_id")==1)
-						$("#s_trackcoll").closest("div.row").find("label").css("color",$(this).attr("_id")==1?"red":"")
-					}},
-					{label:"追踪记录表",s_label:"s_trackcoll",must:function(){
-						return  obj&&obj.i_track
-					}()},
-					{label:"是否统计",s_label:"i_count",type:"tpl_list_local",must:true,list:[{"s_name":"是","_id":1},{"s_name":"否","_id":0}],default:0},
-					*/
-					{label:"使用版本",s_label:"s_version",type:"tpl_list_local",must:true,url:"/admin/task/getversion"},
+					{label:"使用版本",s_label:"s_version",type:"tpl_list_local",must:true,url:"/admin/task/getclearversions"},
 					{label:"并发数量",s_label:"i_process",placeholder:"5",must:true},
 					{s_label:"_id",type:"tpl_hidden"},
-					{label:"起始id",s_label:"s_extlastid",must:true}
 				];
-				/*testtask=[
-					{label:"起始id",s_label:"s_startid",must:true},
-					{label:"数据数量",s_label:"s_datanum",placeholder:"5",must:true}
-				];*/
 				/*按钮*/
 				//新增保存按钮
 				addtaskbtn=[
@@ -140,9 +110,9 @@ $(function () {
 								obj[el.id]=$(el).val()
 							})
 							if (bcon){								
-								$.post("/admin/task/save",obj,function(data){
+								$.post("/admin/cleartask/save",obj,function(data){
 									if(data&&data.rep){
-										window.location.href="/admin/task"								
+										window.location.href="/admin/taskclear"								
 									}else{
 										alert(data.msg)
 									}
@@ -153,53 +123,10 @@ $(function () {
 						}
 					}
 				];
-				//测试启动按钮
-				/*testtaskbtn=[
-					{label:"Run",class:"btn-danger",
-						fun:function(){
-							var reg = /^[0-9]*$/;
-							var id = $("#s_startid").val();
-							var num = $("#s_datanum").val();
-							var bcon = true;
-							if(id == ""){
-								bcon = false;
-								alert("红色标签的表单不能为空!");
-								return
-							}
-							if(num != ""){//验证数字
-								if(!reg.test(num)){
-									bcon = false;
-									alert("数据数量填写错误!");
-									return
-								}
-							}else{
-								num = "5";
-							}
-							if(bcon){								
-								$.post("/admin/task/test",{"startid":id,"num":num,"taskid":taskid},function(data){
-									if(data&&data.rep){
-										$("#myModal").modal("hide");
-										alert("测试完成!");								
-									}else{
-										alert("起始id输入错误!");	
-									}
-								},'json')
-								
-							}else{
-								alert("红色标签的表单不能为空!")
-							}
-						}
-					}
-				];*/
-				
 				if(n == "new"){
-					_tit="新增抽取任务";
+					_tit="新增清理任务";
 					tag = com.pushArry(tag,addtask);
 					bts = com.pushArry(bts,addtaskbtn);
-				//}else if(n == "test"){
-				//	_tit="测试任务";
-				//	tag = com.pushArry(tag,testtask);
-				//	bts = com.pushArry(bts,testtaskbtn);
 				}else if(n == "edit"){
 					_tit="编辑-"+obj.s_taskname;
 					tag = com.pushArry(tag,addtask);
@@ -217,28 +144,5 @@ $(function () {
 	})
 	
 })
-function start(_id){
-	showConfirm("确定启动?", function() {
-		$.ajax({
-			url:"/admin/task/start",
-			type:"post",
-			data:{"_id":_id},
-			success:function(r){
-				window.location.reload()
-			}
-		})
-	});
-}
-function stop(_id){
-	showConfirm("确定启动?", function() {
-		$.ajax({
-			url:"/admin/task/stop",
-			type:"post",
-			data:{"_id":_id},
-			success:function(r){
-				window.location.reload()
-			}
-		})
-	});
-}
+
 </script>

+ 1 - 1
src/web/templates/admin/task_list.html

@@ -230,7 +230,7 @@ function start(_id){
 	});
 }
 function stop(_id){
-	showConfirm("确定启动?", function() {
+	showConfirm("确定停止?", function() {
 		$.ajax({
 			url:"/admin/task/stop",
 			type:"post",

+ 1 - 1
src/web/templates/admin/version.html

@@ -11,7 +11,7 @@
 			<small><a class="btn btn-primary opr" opr="new">新增版本</a></small>
 		</h1>
 		<ol class="breadcrumb">
-		  <li><a href="/admin/version"><i class="fa fa-dashboard"></i>版本管理</a></li>
+		  <li><a href="/admin/version"><i class="fa fa-dashboard"></i>抽取版本</a></li>
 		</ol>
     </section>
   <!-- Main content -->

+ 1 - 1
src/web/templates/admin/versioninfo.html

@@ -11,7 +11,7 @@
 			<small><a class="btn btn-primary opr" opr="new">新增字段</a></small>
 		</h1>
 		<ol class="breadcrumb">
-		  <li><a href="/admin/version"><i class="fa fa-dashboard"></i>版本管理</a></li>
+		  <li><a href="/admin/version"><i class="fa fa-dashboard"></i>抽取版本</a></li>
 		  <li class="active"><a href="/admin/version/info?vid={{.vid}}">属性配置</a></li>
 		</ol>
     </section>