maxiaoshan 3 лет назад
Родитель
Сommit
c298e5180c

+ 1 - 0
src/front/front.go

@@ -121,6 +121,7 @@ func (f *Front) Login() error {
 		f.SetSession("loginuser", user["s_name"])
 		f.SetSession("email", user["s_email"])
 		f.SetSession("auth", user["i_auth"])
+		f.SetSession("paltform", user["s_platform"])
 		comeintime := time.Unix(user["l_comeintime"].(int64), 0).Format("2006-01-02")
 		f.SetSession("comeintime", comeintime)
 		if qu.IntAll(user["i_auth"]) > role_admin {

+ 247 - 235
src/front/spider.go

@@ -5,20 +5,16 @@ import (
 	"errors"
 	"fmt"
 	"log"
+	"mongodb"
 	"sort"
 	"spider"
 
-	//	"math/rand"
 	mu "mfw/util"
 	qu "qfw/util"
-	mgdb "qfw/util/mongodb"
-	mgu "qfw/util/mongodbutil"
 	util "spiderutil"
 	"strings"
 	"time"
 	u "util"
-
-	"gopkg.in/mgo.v2/bson"
 )
 
 type Base struct {
@@ -98,59 +94,58 @@ func (f *Front) LoadSpider(codeTaskIdReState string) error {
 	if f.Method() == "GET" {
 		code := util.Se.Decode4Hex(code)
 		f.T["actiontext"] = "编辑"
-		lua := *mgdb.FindOne("luaconfig", bson.M{"code": code})
+		lua, _ := u.MgoE.FindOne("luaconfig", map[string]interface{}{"code": code})
 		auth := qu.IntAll(f.GetSession("auth"))
-		if lua["createuserid"].(string) == f.GetSession("userid").(string) || auth >= 1 {
-			if len(lua) > 0 {
-				luacopy := map[string]interface{}{}
+		if qu.ObjToString((*lua)["createuserid"]) == f.GetSession("userid").(string) || auth >= 1 {
+			if len(*lua) > 0 {
 				if copy != "" {
-					luacopy = *mgdb.FindOne("luaconfig", bson.M{"code": copy})
-					if len(luacopy) > 0 {
-						lua["model"] = luacopy["model"]
-						common_copy := luacopy["param_common"].([]interface{})
-						common := lua["param_common"].([]interface{})
+					luacopy, _ := u.MgoE.FindOne("luaconfig", map[string]interface{}{"code": copy})
+					if len(*luacopy) > 0 {
+						(*lua)["model"] = (*luacopy)["model"]
+						common_copy := (*luacopy)["param_common"].([]interface{})
+						common := (*lua)["param_common"].([]interface{})
 						common_copy[0] = common[0]
 						common_copy[1] = common[1]
 						common_copy[2] = common[2]
 						common_copy[11] = common[11]
-						lua["param_common"] = luacopy["param_common"]
-						lua["param_time"] = luacopy["param_time"]
-						lua["param_list"] = luacopy["param_list"]
-						lua["param_content"] = luacopy["param_content"]
-						lua["str_list"] = luacopy["str_list"]
-						lua["str_time"] = luacopy["str_time"]
-						lua["str_content"] = luacopy["str_content"]
-						lua["Thref"] = luacopy["Thref"]
-						lua["Tpublishtime"] = luacopy["Tpublishtime"]
-						lua["Ttitle"] = luacopy["Ttitle"]
-						lua["Tdate"] = luacopy["Tdate"]
-						lua["type_content"] = luacopy["type_content"]
-						lua["type_list"] = luacopy["type_list"]
-						lua["type_time"] = luacopy["type_time"]
+						(*lua)["param_common"] = (*luacopy)["param_common"]
+						(*lua)["param_time"] = (*luacopy)["param_time"]
+						(*lua)["param_list"] = (*luacopy)["param_list"]
+						(*lua)["param_content"] = (*luacopy)["param_content"]
+						(*lua)["str_list"] = (*luacopy)["str_list"]
+						(*lua)["str_time"] = (*luacopy)["str_time"]
+						(*lua)["str_content"] = (*luacopy)["str_content"]
+						(*lua)["Thref"] = (*luacopy)["Thref"]
+						(*lua)["Tpublishtime"] = (*luacopy)["Tpublishtime"]
+						(*lua)["Ttitle"] = (*luacopy)["Ttitle"]
+						(*lua)["Tdate"] = (*luacopy)["Tdate"]
+						(*lua)["type_content"] = (*luacopy)["type_content"]
+						(*lua)["type_list"] = (*luacopy)["type_list"]
+						(*lua)["type_time"] = (*luacopy)["type_time"]
 					}
 				}
-				if lua["listcheck"] != nil {
-					listcheck := lua["listcheck"].(string)
+				if (*lua)["listcheck"] != nil {
+					listcheck := (*lua)["listcheck"].(string)
 					listcheck = strings.Replace(listcheck, "\\n", "\n", -1)
 					listcheck = strings.Replace(listcheck, "\\", "", -1)
-					lua["listcheck"] = listcheck
+					(*lua)["listcheck"] = listcheck
 				}
-				if lua["contentcheck"] != nil {
-					contentcheck := lua["contentcheck"].(string)
+				if (*lua)["contentcheck"] != nil {
+					contentcheck := (*lua)["contentcheck"].(string)
 					contentcheck = strings.Replace(contentcheck, "\\n", "\n", -1)
 					contentcheck = strings.Replace(contentcheck, "\\", "", -1)
-					lua["contentcheck"] = contentcheck
+					(*lua)["contentcheck"] = contentcheck
 				}
-				js, _ := json.MarshalIndent(lua["model"], "", "  ")
-				lua["js"] = string(js)
+				js, _ := json.MarshalIndent((*lua)["model"], "", "  ")
+				(*lua)["js"] = string(js)
 				f.T["lua"] = lua
 				f.T["taskId"] = taskId
 				f.T["restate"] = restate
-				f.T["isflow"] = lua["isflow"]
-				f.T["spidertype"] = lua["spidertype"]
-				f.T["spidermovevent"] = lua["spidermovevent"]
-				f.T["spiderhistorymaxpage"] = lua["spiderhistorymaxpage"]
-				if lua["oldlua"] != nil {
+				f.T["isflow"] = (*lua)["isflow"]
+				f.T["spidertype"] = (*lua)["spidertype"]
+				f.T["spidermovevent"] = (*lua)["spidermovevent"]
+				f.T["spiderhistorymaxpage"] = (*lua)["spiderhistorymaxpage"]
+				if (*lua)["oldlua"] != nil {
 					return f.Render("oldedit.html", &f.T)
 				}
 				return f.Render("spideredit.html", &f.T)
@@ -169,28 +164,28 @@ func (f *Front) ViewSpider(id string) error {
 		if f.Method() == "GET" {
 			code := util.Se.Decode4Hex(id)
 			f.T["actiontext"] = "编辑"
-			lua := *mgdb.FindOne("luaconfig", bson.M{"code": code})
-			if len(lua) > 0 {
-				if lua["listcheck"] != nil {
-					listcheck := lua["listcheck"].(string)
+			lua, _ := u.MgoE.FindOne("luaconfig", map[string]interface{}{"code": code})
+			if len(*lua) > 0 {
+				if (*lua)["listcheck"] != nil {
+					listcheck := (*lua)["listcheck"].(string)
 					listcheck = strings.Replace(listcheck, "\\n", "\n", -1)
 					listcheck = strings.Replace(listcheck, "\\", "", -1)
-					lua["listcheck"] = listcheck
+					(*lua)["listcheck"] = listcheck
 				}
-				if lua["contentcheck"] != nil {
-					contentcheck := lua["contentcheck"].(string)
+				if (*lua)["contentcheck"] != nil {
+					contentcheck := (*lua)["contentcheck"].(string)
 					contentcheck = strings.Replace(contentcheck, "\\n", "\n", -1)
 					contentcheck = strings.Replace(contentcheck, "\\", "", -1)
-					lua["contentcheck"] = contentcheck
+					(*lua)["contentcheck"] = contentcheck
 				}
-				js, _ := json.MarshalIndent(lua["model"], "", "  ")
-				lua["js"] = string(js)
+				js, _ := json.MarshalIndent((*lua)["model"], "", "  ")
+				(*lua)["js"] = string(js)
 				f.T["lua"] = lua
-				f.T["isflow"] = lua["isflow"]
-				f.T["spidertype"] = lua["spidertype"]
-				f.T["spidermovevent"] = lua["spidermovevent"]
-				f.T["spiderhistorymaxpage"] = lua["spiderhistorymaxpage"]
-				if lua["oldlua"] != nil {
+				f.T["isflow"] = (*lua)["isflow"]
+				f.T["spidertype"] = (*lua)["spidertype"]
+				f.T["spidermovevent"] = (*lua)["spidermovevent"]
+				f.T["spiderhistorymaxpage"] = (*lua)["spiderhistorymaxpage"]
+				if (*lua)["oldlua"] != nil {
 					return f.Render("oldedit.html", &f.T)
 				}
 				return f.Render("spiderview.html", &f.T)
@@ -208,9 +203,9 @@ func (f *Front) ViewSpider(id string) error {
 
 func (f *Front) LoadModel(id string) error {
 	if f.Method() == "GET" {
-		lua := *mgdb.Find("luaconfig", bson.M{"code": id}, nil, bson.M{"model": 1}, true, -1, -1)
-		if len(lua) > 0 {
-			f.ServeJson(lua[0])
+		lua, _ := u.MgoE.Find("luaconfig", map[string]interface{}{"code": id}, nil, map[string]interface{}{"model": 1}, true, -1, -1)
+		if len(*lua) > 0 {
+			f.ServeJson((*lua)[0])
 		}
 	}
 	return f.Redirect("/center")
@@ -222,17 +217,17 @@ func (f *Front) SaveStep() {
 	rep := map[string]interface{}{}
 	if f.GetString("oldlua") != "" {
 		id := f.GetString("code")
-		one := *mgdb.FindOne("luaconfig", bson.M{"code": id})
-		id = one["code"].(string)
+		one, _ := u.MgoE.FindOne("luaconfig", map[string]interface{}{"code": id})
+		id = (*one)["code"].(string)
 		script := f.GetStringComm("script")
 		if strings.Index(script, id) == -1 {
 			rep["msg"] = "code/名称都不能更改"
 			f.ServeJson(rep)
 			return
 		} else {
-			upset := bson.M{"luacontent": script}
+			upset := map[string]interface{}{"luacontent": script}
 			upset["modifytime"] = time.Now().Unix()
-			b := mgdb.Update("luaconfig", bson.M{"code": id}, bson.M{"$set": upset}, true, false)
+			b := u.MgoE.Update("luaconfig", map[string]interface{}{"code": id}, map[string]interface{}{"$set": upset}, true, false)
 			if b {
 				rep["msg"] = "保存成功"
 				rep["code"] = util.Se.Encode2Hex(id)
@@ -243,20 +238,20 @@ func (f *Front) SaveStep() {
 	} else {
 		if f.Base.SpiderName != "" && f.Base.SpiderCode != "" {
 			code := f.Base.SpiderCode
-			one := *mgdb.FindOne("luaconfig", bson.M{"code": f.Base.SpiderCode})
-			state := qu.IntAllDef(one["state"], 0)
-			restate := qu.IntAll(one["restate"])
+			one, _ := u.MgoE.FindOne("luaconfig", map[string]interface{}{"code": f.Base.SpiderCode})
+			state := qu.IntAllDef((*one)["state"], 0)
+			restate := qu.IntAll((*one)["restate"])
 			comeintime := time.Now().Unix()
-			if len(one) > 0 {
-				comeintime = qu.Int64All(one["comeintime"])
-				ouserid := one["createuserid"].(string)
+			if len((*one)) > 0 {
+				comeintime = qu.Int64All((*one)["comeintime"])
+				ouserid := (*one)["createuserid"].(string)
 				if ouserid != userid && auth == role_dev {
 					f.Write("权限不够,不能修改他人脚本")
 					return
 				} else {
-					code = one["code"].(string)
-					f.Base.SpiderCode = one["code"].(string)
-					f.Base.SpiderName = (one["param_common"].([]interface{}))[1].(string)
+					code = (*one)["code"].(string)
+					f.Base.SpiderCode = (*one)["code"].(string)
+					f.Base.SpiderName = ((*one)["param_common"].([]interface{}))[1].(string)
 				}
 			} else {
 				if auth != role_admin {
@@ -333,12 +328,12 @@ func (f *Front) SaveStep() {
 			model["model"] = s_model
 			param["code"] = f.Base.SpiderCode
 			param["model"] = model
-			if len(one) > 0 {
-				param["createuser"] = one["createuser"]
-				param["createuserid"] = one["createuserid"]
-				param["code"] = one["code"]
+			if len((*one)) > 0 {
+				param["createuser"] = (*one)["createuser"]
+				param["createuserid"] = (*one)["createuserid"]
+				param["code"] = (*one)["code"]
 				//开发员关联任务修改爬虫状态
-				state = qu.IntAll(one["state"])
+				state = qu.IntAll((*one)["state"])
 				if auth == role_dev && state >= Sp_state_3 && restate != 1 { //开发员修改,已经审核通过(不包含已上架),状态重置为待完成(restate!=1判断,重采修改保存爬虫时不修改爬虫状态)
 					param["state"] = 0
 				} else {
@@ -352,7 +347,7 @@ func (f *Front) SaveStep() {
 				param["next"] = f.GetSession("email")
 				param["state"] = 0
 			}
-			if qu.ObjToString(one["modifyuser"]) == "" {
+			if qu.ObjToString((*one)["modifyuser"]) == "" {
 				param["modifyuser"] = param["createuser"]
 				param["modifyuserid"] = param["createuserid"]
 			}
@@ -367,7 +362,7 @@ func (f *Front) SaveStep() {
 			param["spiderhistorymaxpage"] = f.OtherBase.SpiderHistoryMaxPage
 			if f.OtherBase.SpiderType == "history" { //爬虫类型是history的放到7000节点,并记录历史节点
 				param["event"] = 7000
-				if event := qu.IntAll(one["event"]); event != 7000 {
+				if event := qu.IntAll((*one)["event"]); event != 7000 {
 					param["historyevent"] = event
 				}
 			}
@@ -383,7 +378,7 @@ func (f *Front) SaveStep() {
 			if !matchLua {
 				issave := spider.SaveSpider(code, param) //保存脚本
 				if issave {
-					for k, v := range one {
+					for k, v := range *one {
 						if k != "_id" && param[k] == nil {
 							param[k] = v
 						}
@@ -411,36 +406,36 @@ func LuaTextCheck(list, detail string) bool {
 func (f *Front) Assort() {
 	state, _ := f.GetInteger("state")
 	code := f.GetString("code")
-	sql := bson.M{
-		"$set": bson.M{
+	sql := map[string]interface{}{
+		"$set": map[string]interface{}{
 			"state":      state,
 			"modifytime": time.Now().Unix(),
 		},
 	}
-	queryT := bson.M{
+	queryT := map[string]interface{}{
 		"code": code,
 	}
 	//下架爬虫
-	lua := *mgdb.FindOne("luaconfig", queryT)
-	upresult, err := spider.UpdateSpiderByCodeState(code, "6", qu.IntAll(lua["event"]))
+	lua, _ := u.MgoE.FindOne("luaconfig", queryT)
+	upresult, err := spider.UpdateSpiderByCodeState(code, "6", qu.IntAll((*lua)["event"]))
 	qu.Debug("下架爬虫:", code, upresult, err)
 	if upresult && err == nil {
 		//更新爬虫
-		mgdb.Update("luaconfig", queryT, sql, false, false)
+		u.MgoE.Update("luaconfig", queryT, sql, false, false)
 		//关闭任务
-		query := bson.M{
+		query := map[string]interface{}{
 			"s_code": code,
 		}
-		sql = bson.M{
-			"$set": bson.M{
+		sql = map[string]interface{}{
+			"$set": map[string]interface{}{
 				"i_state": 6,
 			},
 		}
-		mgdb.Update("task", query, sql, false, true)
+		u.MgoE.Update("task", query, sql, false, true)
 		//删除心跳
-		mgu.Update("spider_heart", "spider", "spider", map[string]interface{}{"code": code}, map[string]interface{}{"$set": map[string]interface{}{"del": true}}, false, true)
+		DelSpiderHeart(code)
 	}
-	f.ServeJson(bson.M{"upresult": upresult})
+	f.ServeJson(map[string]interface{}{"upresult": upresult})
 }
 
 //方法测试
@@ -570,6 +565,7 @@ func (f *Front) GetJson() {
 	data, _ := f.GetSession("dataInfo").(map[string]interface{})
 	descript := f.GetSession("task_descript")
 	remark := f.GetSession("task_remark")
+	rateremark := f.GetSession("task_rateremark")
 	reason := f.GetSession("reason")
 	username := f.GetSession("username").(string)
 	msg := f.GetSession(username + "_msg")
@@ -584,6 +580,7 @@ func (f *Front) GetJson() {
 	f.T["data"] = data
 	f.T["descript"] = descript
 	f.T["remark"] = remark
+	f.T["rateremark"] = rateremark
 	f.T["reason"] = reason
 	f.T["msg"] = msg
 
@@ -591,6 +588,7 @@ func (f *Front) GetJson() {
 	f.DelSession("dataInfo")
 	f.DelSession("task_descript")
 	f.DelSession("task_remark")
+	f.DelSession("task_rateremark")
 	f.DelSession("reason")
 
 	f.Render("jsonInfo.html", &f.T)
@@ -598,6 +596,7 @@ func (f *Front) GetJson() {
 
 //整体测试
 func (f *Front) SpiderPass() {
+	qu.Debug("111111111111")
 	defer mu.Catch()
 	list := []map[string]interface{}{}
 	data := map[string]interface{}{}
@@ -605,22 +604,25 @@ func (f *Front) SpiderPass() {
 	code := f.GetString("code")
 	downloadnode := f.GetString("node")
 	//根据code查询待确认任务
-	query := bson.M{
+	query := map[string]interface{}{
 		"s_code":  code,
 		"i_state": 3,
 	}
-	task := *mgdb.FindOne("task", query)
+	task, _ := u.MgoE.FindOne("task", query)
 	descript := "null"
 	remark := "null"
 	remarktmp := []string{}
-	if len(task) > 0 {
-		descript = task["s_descript"].(string)
-		if mrecord, ok := task["a_mrecord"].([]interface{}); ok {
+	rateremarktmp := []string{}
+	if len(*task) > 0 {
+		descript = (*task)["s_descript"].(string)
+		if mrecord, ok := (*task)["a_mrecord"].([]interface{}); ok {
 			for _, m := range mrecord {
 				remarkInfo := m.(map[string]interface{})
-				r := remarkInfo["s_mrecord_remark"].(string)
-				if r != "" {
-					remarktmp = append(remarktmp, r+";")
+				if remark := qu.ObjToString(remarkInfo["s_mrecord_remark"]); remark != "" {
+					remarktmp = append(remarktmp, remark+";")
+				}
+				if rateremark := qu.ObjToString(remarkInfo["s_mrecord_rateremark"]); rateremark != "" {
+					rateremarktmp = append(rateremarktmp, rateremark+";")
 				}
 			}
 		}
@@ -631,14 +633,15 @@ func (f *Front) SpiderPass() {
 	}
 
 	f.SetSession("task_remark", remark)
+	f.SetSession("task_rateremark", rateremarktmp)
 	f.SetSession("task_descript", descript)
 	//基本信息、方法一、方法二、方法三、总请求次数、go方法一、go方法二、go方法三、列表页条数
 	steps := []interface{}{false, false, false, false, 0, 0, 0, 0, 0}
-	one := *mgdb.FindOne("luaconfig", bson.M{"code": code})
-	reason, _ := one["reason"].(string)
+	one, _ := u.MgoE.FindOne("luaconfig", map[string]interface{}{"code": code})
+	reason, _ := (*one)["reason"].(string)
 	f.SetSession("reason", reason)
-	if len(one) > 0 && one["oldlua"] == nil {
-		common := one["param_common"].([]interface{})
+	if len(*one) > 0 && (*one)["oldlua"] == nil {
+		common := (*one)["param_common"].([]interface{})
 		if len(common) < 13 {
 			f.ServeJson(steps)
 			return
@@ -649,13 +652,13 @@ func (f *Front) SpiderPass() {
 		steps[0] = true
 	}
 	script, liststr, contentstr := "", "", ""
-	if one["oldlua"] == nil {
+	if (*one)["oldlua"] == nil {
 		script, liststr, contentstr = spider.GetScript(code)
 	} else {
-		script = one["luacontent"].(string)
+		script = (*one)["luacontent"].(string)
 	}
 	if liststr != "" && contentstr != "" {
-		msg1 = u.SpiderPassCheckLua(liststr, contentstr, one)
+		msg1 = u.SpiderPassCheckLua(liststr, contentstr, (*one))
 	}
 	s := spider.CreateSpider(downloadnode, script)
 	s.SpiderMaxPage = 1
@@ -714,7 +717,7 @@ func (f *Front) SpiderPass() {
 	//校验
 	msg := u.SpiderPassCheckListAndDetail(list, data)
 	if msg1 != "" {
-		msg = msg1 + "," + msg
+		msg = msg1 + "" + msg
 	}
 	username := f.GetSession("username").(string)
 	f.SetSession(username+"_msg", msg)
@@ -724,18 +727,19 @@ func (f *Front) SpiderPass() {
 func (f *Front) DownSpider(id string) {
 	//auth := qu.IntAll(f.GetSession("auth"))
 	//if auth > role_dev {
-	one := *mgdb.FindOne("luaconfig", bson.M{"code": id})
+	one, _ := u.MgoE.FindOne("luaconfig", map[string]interface{}{"code": id})
+	createuserid := qu.ObjToString((*one)["createuserid"])
 	script := ""
 	filename := id + ".lua"
-	if len(one) > 0 {
-		if one["oldlua"] != nil {
-			if one["luacontent"] != nil {
-				script = one["luacontent"].(string)
+	if len(*one) > 0 {
+		if (*one)["oldlua"] != nil {
+			if (*one)["luacontent"] != nil {
+				script = (*one)["luacontent"].(string)
 			}
 		} else {
-			user := *mgdb.FindOne("user", bson.M{"_id": bson.ObjectIdHex(one["createuserid"].(string))})
-			name := one["createuser"]
-			email := user["s_email"]
+			user, _ := u.MgoE.FindById("user", createuserid, nil)
+			name := (*one)["createuser"]
+			email := (*user)["s_email"]
 			upload := time.Now().Format("2006-01-02 15:04:05")
 			script, _, _ = spider.GetScript(id, name, email, upload)
 		}
@@ -801,8 +805,8 @@ func (f *Front) UpState() error {
 				SaveRemark(taskid, "", username)
 			}
 		} else if b && state == Sp_state_6 { //下架
-			//下架成功删除download数据
-			flag := delDownloadData(code)
+			//下架成功删除心跳数据
+			flag := DelSpiderHeart(code)
 			log.Println(code, "---下架删除download数据:", flag)
 		} else if b && state == Sp_state_7 { //反馈
 			taskid = checkTask(codeArr, 7)
@@ -824,18 +828,23 @@ func (f *Front) UpState() error {
 	return nil
 }
 
-//下架删除download数据
-func delDownloadData(code string) bool {
-	return mgu.Del("download", "spider", "spider", `{"code":"`+code+`"}`)
+//下架删除心跳
+func DelSpiderHeart(code string) bool {
+	return u.MgoS.Update("spider_heart", map[string]interface{}{"code": code}, map[string]interface{}{"$set": map[string]interface{}{"del": true}}, false, true)
 }
 
+//下架删除download数据
+//func delDownloadData(code string) bool {
+//	return mgu.Del("download", "spider", "spider", `{"code":"`+code+`"}`)
+//}
+
 //批量作废删除download数据
-func disableDelDownloadData(code []string) {
-	for _, v := range code {
-		flag := delDownloadData(v)
-		log.Println(code, "---批量删除download数据:", flag)
-	}
-}
+//func disableDelDownloadData(code []string) {
+//	for _, v := range code {
+//		flag := delDownloadData(v)
+//		log.Println(code, "---批量删除download数据:", flag)
+//	}
+//}
 
 //爬虫核对
 func (f *Front) Checktime() {
@@ -844,7 +853,9 @@ func (f *Front) Checktime() {
 	if auth != role_admin {
 		f.ServeJson(false)
 	} else {
-		b := mgdb.Update("luaconfig", `{"code":"`+code+`"}`, `{"$set":{"l_checktime":`+fmt.Sprint(time.Now().Unix())+`}}`, true, false)
+		b := u.MgoE.Update("luaconfig", map[string]interface{}{"code": code}, map[string]interface{}{"$set": map[string]interface{}{
+			"l_checktime": time.Now().Unix(),
+		}}, true, false)
 		f.ServeJson(b)
 	}
 }
@@ -900,17 +911,16 @@ func (f *Front) BatchShelves() {
 		} else { //批量下架
 			for _, code := range codes {
 				b, err = UpStateAndUpSpider(code, "", "", "", Sp_state_6)
-				if err != nil {
+				if !b || err != nil {
 					errCode = append(errCode, code)
 				}
 				//下架删除download数据
-				if b {
-					flag := delDownloadData(code)
-					log.Println(code, "---删除download数据:", flag)
-				}
+				//if b {
+				//	flag := delDownloadData(code)
+				//	log.Println(code, "---删除download数据:", flag)
+				//}
 			}
 		}
-
 	} else {
 		errCode = append(errCode, "没有权限")
 	}
@@ -921,17 +931,17 @@ func (f *Front) BatchShelves() {
 func UpStateAndUpSpider(code, id, reason, username string, state int) (bool, error) {
 	upresult := false
 	var err error
-	one := map[string]interface{}{}
+	one := &map[string]interface{}{}
 	if code != "" {
-		one = *mgdb.FindOne("luaconfig", bson.M{"code": code})
+		one, _ = u.MgoE.FindOne("luaconfig", map[string]interface{}{"code": code})
 	} else {
-		one = *mgdb.FindOne("luaconfig", bson.M{"_id": bson.ObjectIdHex(id)})
-		code = one["code"].(string)
+		one, _ = u.MgoE.FindById("luaconfig", id, nil)
+		code = qu.ObjToString((*one)["code"])
 	}
-	if len(one) > 0 {
+	if len(*one) > 0 {
 		var event int
-		if one["event"] != nil {
-			event = qu.IntAll(one["event"])
+		if (*one)["event"] != nil {
+			event = qu.IntAll((*one)["event"])
 		} else {
 			for k, _ := range util.Config.Uploadevents { //?
 				event = qu.IntAll(k)
@@ -968,18 +978,19 @@ func UpStateAndUpSpider(code, id, reason, username string, state int) (bool, err
 		}
 
 		if upresult && err == nil {
-			upset := bson.M{"state": state} //修改状态
-			if one["oldlua"] != nil {       //老脚本上传
-				upresult = mgdb.Update("luaconfig", bson.M{"code": code}, bson.M{"$set": upset}, true, false)
+			upset := map[string]interface{}{"state": state} //修改状态
+			if (*one)["oldlua"] != nil {                    //老脚本上传
+				upresult = u.MgoE.Update("luaconfig", map[string]interface{}{"code": code}, map[string]interface{}{"$set": upset}, true, false)
 			} else {
 				if state == Sp_state_1 { //提交审核
 					upset["l_complete"] = time.Now().Unix()
 					upset["report"] = ""
-				} else if state == Sp_state_3 { //发布
-					if one["event"] == nil {
+				} else if state == Sp_state_3 { //审核通过
+					if (*one)["event"] == nil {
 						upset["event"] = event
 						upset["modifytime"] = time.Now().Unix()
 					}
+					upset["frequencyerrtimes"] = 0 //爬虫审核通过,重置采集频率异常次数
 					upset["l_uploadtime"] = time.Now().Unix()
 				} else if state == Sp_state_2 { //打回原因
 					upset["reason"] = reason
@@ -992,37 +1003,23 @@ func UpStateAndUpSpider(code, id, reason, username string, state int) (bool, err
 					upset["disablereason"] = reason
 					upset["modifytime"] = time.Now().Unix()
 				}
-				qu.Debug("set:", upset)
 				upresult = u.MgoE.Update("luaconfig", map[string]interface{}{"code": code}, map[string]interface{}{"$set": upset}, false, false)
-				//upresult = mgdb.Update("luaconfig", map[string]interface{}{"code": code}, map[string]interface{}{"$set": upset}, false, false)
-				// if state == Sp_state_1 { //提交审核,验证是否提交成功
-				// 	for i := 1; i <= 5; i++ { //解决提交不上,重试5次
-				// 		lua := *mgdb.FindOne("luaconfig", map[string]interface{}{"code": code})
-				// 		tmpState := qu.IntAll(lua["state"])
-				// 		if state == tmpState {
-				// 			break
-				// 		} else {
-				// 			upresult = mgdb.Update("luaconfig", map[string]interface{}{"code": code}, map[string]interface{}{"$set": upset}, false, false)
-				// 			upresult = false
-				// 		}
-				// 	}
-				// }
 				qu.Debug("提交日志:", code, upset, upresult)
 				if upresult && (state == Sp_state_2 || state == Sp_state_3) { //打回、审核记录日志
 					types := "打回"
 					if state == Sp_state_3 {
 						types = "审核"
 					}
-					obj := bson.M{
+					obj := map[string]interface{}{
 						"code":       code,
 						"auditor":    username,
 						"types":      types,
 						"comeintime": time.Now().Unix(),
 						"reason":     reason,
-						"spideruser": one["createuser"],
-						"modifytime": one["modifytime"],
+						"spideruser": (*one)["createuser"],
+						"modifytime": (*one)["modifytime"],
 					}
-					mgdb.Save("lua_logs_auditor", obj)
+					u.MgoE.Save("lua_logs_auditor", obj)
 				}
 			}
 		}
@@ -1037,12 +1034,9 @@ func SaveRemark(taskid []string, reason, username string) {
 		reason = "审核通过"
 	}
 	for _, id := range taskid {
-		query := bson.M{
-			"_id": bson.ObjectIdHex(string(id)),
-		}
-		task := *mgdb.FindOne("task", query)
-		if task != nil {
-			checkData := task["a_check"]
+		task, _ := u.MgoE.FindById("task", id, nil)
+		if task != nil && len(*task) > 0 {
+			checkData := (*task)["a_check"]
 			var checkArr []map[string]interface{}
 			newData := make(map[string]interface{})
 
@@ -1058,51 +1052,48 @@ func SaveRemark(taskid []string, reason, username string) {
 				}
 			}
 			checkArr = append(checkArr, newData)
-			task["a_check"] = checkArr
-
-			mgdb.Update("task", query, map[string]interface{}{
-				"$set": task,
-			}, false, false)
+			(*task)["a_check"] = checkArr
+			u.MgoE.UpdateById("task", id, map[string]interface{}{"$set": &task})
 		}
 	}
 }
 
 //修改任务状态
 func UpTaskState(code []string, num int, reason string, startTime int64) {
-	query := bson.M{}
-	update := bson.M{}
+	query := map[string]interface{}{}
+	update := map[string]interface{}{}
 	for _, v := range code {
-		if num == 1 || num == 2 || num == 3 || num == 7 {
-			query = bson.M{
-				"_id": bson.ObjectIdHex(v),
+		if num == 1 || num == 2 || num == 3 || num == 7 { //id
+			query = map[string]interface{}{
+				"_id": mongodb.StringTOBsonId(v),
 			}
 		} else {
-			query = bson.M{
+			query = map[string]interface{}{ //code
 				"s_code": v,
 			}
 		}
 
 		if num == 1 { //提交审核
-			update = bson.M{
-				"$set": bson.M{
+			update = map[string]interface{}{
+				"$set": map[string]interface{}{
 					"i_state": 3,
 				},
 			}
 		} else if num == 2 { //打回  -->未通过
-			update = bson.M{
-				"$set": bson.M{
+			update = map[string]interface{}{
+				"$set": map[string]interface{}{
 					"i_state": 5,
 				},
 			}
 		} else if num == 3 { //发布(审核通过)  -->审核通过
-			update = bson.M{
-				"$set": bson.M{
+			update = map[string]interface{}{
+				"$set": map[string]interface{}{
 					"i_state": 4,
 				},
 			}
 		} else if num == 4 { //批量作废  -->关闭
-			update = bson.M{
-				"$set": bson.M{
+			update = map[string]interface{}{
+				"$set": map[string]interface{}{
 					"i_state":    6,
 					"l_complete": time.Now().Unix(),
 				},
@@ -1115,15 +1106,15 @@ func UpTaskState(code []string, num int, reason string, startTime int64) {
 			}
 			mrecord := []interface{}{}
 			mrecord = append(mrecord, newData)
-			update = bson.M{
-				"$set": bson.M{
+			update = map[string]interface{}{
+				"$set": map[string]interface{}{
 					"i_state":    3,
 					"l_complete": time.Now().Unix(),
 					"a_mrecord":  mrecord,
 				},
 			}
 		}
-		flag := mgdb.Update("task", query, update, false, true)
+		flag := u.MgoE.Update("task", query, update, false, true)
 		log.Println("codeOrId:", query, "	修改任务状态:", flag)
 	}
 }
@@ -1147,10 +1138,10 @@ func (f *Front) ChangeEvent() {
 		f.ServeJson("没有对应节点")
 		return
 	}
-	info := *mgdb.FindOne("luaconfig", `{"code":"`+code+`"}`)
-	if len(info) > 0 {
-		oldevent := qu.IntAll(info["event"])
-		if qu.IntAll(info["state"]) == Sp_state_5 {
+	info, _ := u.MgoE.FindOne("luaconfig", map[string]interface{}{"code": code})
+	if len(*info) > 0 {
+		oldevent := qu.IntAll((*info)["event"])
+		if qu.IntAll((*info)["state"]) == Sp_state_5 {
 			//源节点下架
 			_, err := spider.UpdateSpiderByCodeState(code, fmt.Sprint(Sp_state_6), oldevent)
 			set := map[string]interface{}{
@@ -1159,7 +1150,7 @@ func (f *Front) ChangeEvent() {
 					"state": Sp_state_6,
 				},
 			}
-			mgdb.Update("luaconfig", `{"code":"`+code+`"}`, set, true, false)
+			u.MgoE.Update("luaconfig", map[string]interface{}{"code": code}, set, true, false)
 			if err != nil && strings.Contains(err.Error(), "timeout") {
 				f.ServeJson("连接节点" + fmt.Sprint(oldevent) + "超时")
 			} else {
@@ -1171,7 +1162,7 @@ func (f *Front) ChangeEvent() {
 					"event": qu.IntAll(event),
 				},
 			}
-			mgdb.Update("luaconfig", `{"code":"`+code+`"}`, set, true, false)
+			u.MgoE.Update("luaconfig", map[string]interface{}{"code": code}, set, true, false)
 		}
 	} else {
 		f.ServeJson("没有对应记录")
@@ -1215,32 +1206,37 @@ func (f *Front) LuaList() {
 		searchStr := f.GetString("search[value]")
 		//search := strings.Replace(searchStr, " ", "", -1)
 		search := strings.TrimSpace(searchStr)
-		query := bson.M{}
+		platform := f.GetString("platform")
+		query := map[string]interface{}{}
 
-		q1 := bson.M{}
+		q1 := map[string]interface{}{}
 		q1["$or"] = []interface{}{
-			bson.M{"code": bson.M{"$regex": search}},
-			bson.M{"createuser": bson.M{"$regex": search}},
-			bson.M{"param_common.1": bson.M{"$regex": search}},
+			map[string]interface{}{"code": map[string]interface{}{"$regex": search}},
+			map[string]interface{}{"createuser": map[string]interface{}{"$regex": search}},
+			map[string]interface{}{"param_common.1": map[string]interface{}{"$regex": search}},
 		}
-		q2 := bson.M{}
+		q2 := map[string]interface{}{}
 		if state > -1 {
-			q2 = bson.M{"state": state}
+			q2 = map[string]interface{}{"state": state}
 		} else {
 			q2["$or"] = []interface{}{
-				bson.M{"state": Sp_state_3},
-				bson.M{"state": Sp_state_5},
-				bson.M{"state": Sp_state_6},
+				map[string]interface{}{"state": Sp_state_3},
+				map[string]interface{}{"state": Sp_state_5},
+				map[string]interface{}{"state": Sp_state_6},
 			}
 		}
-		q3 := bson.M{}
+		q3 := map[string]interface{}{}
 		if event > -1 {
-			q3 = bson.M{"event": event}
+			q3 = map[string]interface{}{"event": event}
+		}
+		q4 := map[string]interface{}{}
+		if platform != "-1" {
+			q4 = map[string]interface{}{"platform": platform}
 		}
 		if search != "" {
-			query["$and"] = []interface{}{q1, q2, q3}
+			query["$and"] = []interface{}{q1, q2, q3, q4}
 		} else {
-			query["$and"] = []interface{}{q2, q3}
+			query["$and"] = []interface{}{q2, q3, q4}
 		}
 		sort := `{"%s":%d}`
 		orderIndex := f.GetString("order[0][column]")
@@ -1251,9 +1247,10 @@ func (f *Front) LuaList() {
 		}
 		sort = fmt.Sprintf(sort, orderName, orderType)
 		page := start / 10
-		luas := *mgdb.Find("luaconfig", query, sort, list_fields, false, start, limit)
-		count := mgdb.Count("luaconfig", query)
-		for k, v := range luas {
+		qu.Debug("query:", query)
+		luas, _ := u.MgoE.Find("luaconfig", query, sort, list_fields, false, start, limit)
+		count := u.MgoE.Count("luaconfig", query)
+		for k, v := range *luas {
 			v["num"] = k + 1 + page*10
 			l_uploadtime := qu.Int64All(v["l_uploadtime"])
 			v["l_uploadtime"] = qu.FormatDateByInt64(&l_uploadtime, qu.Date_Full_Layout)
@@ -1301,7 +1298,7 @@ func (f *Front) Heart() {
 		searchStr := f.GetString("search[value]")
 		search := strings.TrimSpace(searchStr) //只能搜索code
 		//qu.Debug("search:", search, "start:", start, "limit:", limit, "draw:", draw)
-		query := bson.M{
+		query := map[string]interface{}{
 			"del": false,
 		}
 		if event > -1 {
@@ -1319,24 +1316,41 @@ func (f *Front) Heart() {
 		}
 		sort = fmt.Sprintf(sort, orderName, orderType)
 		qu.Debug("query:", query, "sort:", sort)
-		list := *mgu.Find("spider_heart", "spider", "spider", query, sort, nil, false, start, limit)
-		count := mgu.Count("spider_heart", "spider", "spider", query)
-		for _, l := range list {
+		list, _ := u.MgoS.Find("spider_heart", query, sort, nil, false, start, limit)
+		count := u.MgoS.Count("spider_heart", query)
+		for _, l := range *list {
 			code := qu.ObjToString(l["code"])
-			d := *mgdb.FindOneByField("luaconfig", map[string]interface{}{"code": code}, map[string]interface{}{"state": 1, "param_common": 1})
-			l["state"] = d["state"]
-			l["param_common"] = d["param_common"]
+			d, _ := u.MgoE.FindOneByField("luaconfig", map[string]interface{}{"code": code}, map[string]interface{}{"state": 1, "param_common": 1, "str_list": 1, "type_list": 1})
+			l["state"] = (*d)["state"]
+			l["param_common"] = (*d)["param_common"]
 			if lt := qu.Int64All(l["list"]); lt != 0 {
 				l["list"] = qu.FormatDateByInt64(&lt, qu.Date_Full_Layout)
+			} else {
+				l["list"] = 0
 			}
 			if dt := qu.Int64All(l["detail"]); dt != 0 {
 				l["detail"] = qu.FormatDateByInt64(&dt, qu.Date_Full_Layout)
+			} else {
+				l["detail"] = 0
 			}
 			if det := qu.Int64All(l["detailexecute"]); det != 0 {
 				l["detailexecute"] = qu.FormatDateByInt64(&det, qu.Date_Full_Layout)
+			} else {
+				l["detailexecute"] = 0
+			}
+			if ft := qu.Int64All(l["findlist"]); ft != 0 {
+				l["findlist"] = qu.FormatDateByInt64(&ft, qu.Date_Full_Layout)
+			} else {
+				l["findlist"] = 0
 			}
 			ut := qu.Int64All(l["updatetime"])
 			l["updatetime"] = qu.FormatDateByInt64(&ut, qu.Date_Full_Layout)
+			l["isfindlist"] = "否"
+			typeList := qu.IntAll((*d)["type_list"])
+			strList := qu.ObjToString((*d)["str_list"])
+			if typeList == 1 && strings.Contains(strList, "findListHtml") {
+				l["isfindlist"] = "是"
+			}
 		}
 
 		f.ServeJson(map[string]interface{}{"draw": draw, "data": list, "recordsFiltered": count, "recordsTotal": count})
@@ -1409,43 +1423,41 @@ func SpiderModifyTask(data string) {
 //查看是否有该任务
 func checkTask(codes []string, num int) []string {
 	//	var id string = ""
-	query := bson.M{}
+	query := map[string]interface{}{}
 	var idArr []string
 	if len(codes) > 0 {
 		for _, v := range codes {
 			if num == 1 {
-				query = bson.M{
+				query = map[string]interface{}{
 					"s_code": v,
-					"i_state": bson.M{
+					"i_state": map[string]interface{}{
 						"$in": []int{1, 2, 5},
 					},
 				}
 			} else if num == 2 { //打回时查询待审核的任务
-				query = bson.M{
+				query = map[string]interface{}{
 					"s_code":  v,
 					"i_state": 3,
 				}
 			} else if num == 3 { //审核通过时查询待处理、处理中、待审核、未通过的任务
-				query = bson.M{
+				query = map[string]interface{}{
 					"s_code": v,
-					"i_state": bson.M{
+					"i_state": map[string]interface{}{
 						"$in": []int{1, 2, 3, 5},
 					},
 				}
 			} else if num == 7 {
-				query = bson.M{
+				query = map[string]interface{}{
 					"s_code": v,
-					"i_state": bson.M{
+					"i_state": map[string]interface{}{
 						"$in": []int{2, 5},
 					},
 				}
 			}
-			//task := *mgdb.FindOne("task", query)
-			task := *mgdb.Find("task", query, nil, nil, false, -1, -1)
+			task, _ := u.MgoE.Find("task", query, nil, nil, false, -1, -1)
 			if task != nil {
-				for _, v := range task {
-					//id = v["_id"].(bson.ObjectId).Hex()
-					idArr = append(idArr, v["_id"].(bson.ObjectId).Hex())
+				for _, t := range *task {
+					idArr = append(idArr, mongodb.BsonIdToSId(t["_id"]))
 				}
 			}
 			return idArr

+ 8 - 0
src/spider/script.go

@@ -12,6 +12,7 @@ import (
 	"crypto/aes"
 	"encoding/base64"
 	"encoding/json"
+	"github.com/shopspring/decimal"
 	"io/ioutil"
 	mu "mfw/util"
 	"net/http"
@@ -516,6 +517,13 @@ func (s *Script) LoadScript(downloadnode, script string, isfile ...string) {
 		return 1
 	}))
 
+	//interface转string
+	s.L.SetGlobal("formatToString", s.L.NewFunction(func(S *lua.LState) int {
+		strNum := S.ToString(-1)
+		decimalNum, _ := decimal.NewFromString(strNum)
+		S.Push(lua.LString(decimalNum.String()))
+		return 1
+	}))
 }
 
 //

+ 26 - 53
src/taskManager/taskManager.go

@@ -3,7 +3,6 @@ package taskManager
 import (
 	ft "finishtime"
 	"fmt"
-	sp "front"
 	"io/ioutil"
 	"log"
 	qu "qfw/util"
@@ -40,8 +39,7 @@ type TaskM struct {
 	batchClose            xweb.Mapper `xweb:"/center/task/batchClose"`            //批量关闭任务
 	batchDeal             xweb.Mapper `xweb:"/center/task/batchDeal"`             //批量处理任务
 	getJumpMark           xweb.Mapper `xweb:"/center/task/getJumpMark"`           //跳转标记
-	searchErrLog          xweb.Mapper `xweb:"/center/task/searchErrLog"`          //搜索错误日志
-	searchDataInfo        xweb.Mapper `xweb:"/center/task/searchDataInfo"`        //搜索数据的标题和发布时间
+	searchDataInfo        xweb.Mapper `xweb:"/center/task/searchDataInfo"`        //搜索信息详情
 	//del                 xweb.Mapper `xweb:"/center/task/del"`                   //删除任务
 	//searchTask      	  xweb.Mapper `xweb:"/center/task/searchTask"`      	  //查询任务
 
@@ -563,11 +561,11 @@ func (t *TaskM) EditTask(ids string) error {
 				t.T["xgTime"] = qu.ObjToString(t.GetSession(id))
 			}
 			t.DelSession(id)
-			if auth == 3 {
+			if auth == role_admin {
 				return t.Render("taskedit.html", &t.T)
-			} else if auth == 1 {
+			} else if auth == role_dev {
 				return t.Render("mytaskedit.html", &t.T)
-			} else if auth == 2 {
+			} else if auth == role_examine {
 				return t.Render("auditedit.html", &t.T)
 			}
 		}
@@ -724,49 +722,32 @@ func (t *TaskM) SaveRecord() {
 		t.ServeJson("没有权限")
 		return
 	}
-	state := "no"
 	id := t.GetString("id")
 	startTime := t.GetString("startTime")
 	endTime := t.GetString("endTime")
 	remark := t.GetString("remark")
-	query := bson.M{
-		"_id": bson.ObjectIdHex(id),
-	}
-	task := *mgdb.FindOne("task", query)
-	mrecordData := task["a_mrecord"]
-	var mreArr []map[string]interface{}
-	newData := make(map[string]interface{})
-
-	comeintime, _ := time.ParseInLocation("2006-01-02  15:04:05", startTime, time.Local)
+	rateremark := t.GetString("rateremark")
+	comeintime, _ := time.ParseInLocation(qu.Date_Full_Layout, startTime, time.Local)
 	l_comeintime := comeintime.Unix()
-	completeTime, _ := time.ParseInLocation("2006-01-02  15:04:05", endTime, time.Local)
+	completeTime, _ := time.ParseInLocation(qu.Date_Full_Layout, endTime, time.Local)
 	l_complete := completeTime.Unix()
-
-	newData["l_mrecord_comeintime"] = l_comeintime
-	newData["l_mrecord_complete"] = l_complete
-	newData["s_mrecord_remark"] = remark
-	if mrecordData != nil {
-		myArr := qu.ObjArrToMapArr(mrecordData.([]interface{}))
-		if myArr != nil && len(myArr) > 0 {
-			for _, v := range myArr {
-				mreArr = append(mreArr, v)
-			}
-		}
+	tmp := map[string]interface{}{
+		"l_mrecord_comeintime": l_comeintime,
+		"l_mrecord_complete":   l_complete,
+		"s_mrecord_remark":     remark,
+		"s_mrecord_rateremark": rateremark,
 	}
-	mreArr = append(mreArr, newData)
-	task["a_mrecord"] = mreArr
-	//保存记录
-	ok := mgdb.Update("task", query, map[string]interface{}{
-		"$set": task,
-	}, false, false)
-	var codeArr = []string{id}
-	if ok {
-		//修改状态
-		sp.UpTaskState(codeArr, 1, "", int64(0))
-		state = "yes"
+	set := map[string]interface{}{
+		"$addToSet": map[string]interface{}{ //任务记录
+			"a_mrecord": tmp,
+		},
+		"$set": map[string]interface{}{ //任务状态
+			"i_state": 3,
+		},
 	}
+	ok := u.MgoE.UpdateById("task", id, set)
 	t.ServeJson(map[string]interface{}{
-		"state": state,
+		"state": ok,
 	})
 }
 
@@ -1153,21 +1134,13 @@ func queryCriteria(userid string, urgency, taskState, event, stype int) (query b
 	return
 }
 
-func (t *TaskM) SearchErrLog() {
-	href := t.GetString("href")
-	data := *mgu.FindOne("regatherdata", "spider", "spider", map[string]interface{}{"href": href})
-	if data != nil && len(data) > 0 {
-		t.ServeJson("日志:" + qu.ObjToString(data["error"]))
-	} else {
-		t.ServeJson("无信息")
-	}
-}
-
 func (t *TaskM) SearchDataInfo() {
 	href := t.GetString("href")
-	data := *mgu.FindOne("spider_highlistdata", "spider", "spider", map[string]interface{}{"href": href})
-	if data != nil && len(data) > 0 {
-		t.ServeJson("标题:" + qu.ObjToString(data["title"]) + "\n" + "发布时间:" + qu.ObjToString(data["publishtime"]))
+	data, _ := u.MgoS.FindOne("spider_warn", map[string]interface{}{"href": href})
+	if data != nil && len(*data) > 0 {
+		info := (*data)["data"].(map[string]interface{})
+		str := "publishtime:" + fmt.Sprint(info["publishtime"]) + "\ntitle:" + qu.ObjToString((*data)["title"]) + ";\ndetail:" + qu.ObjToString(info["detail"])
+		t.ServeJson(str)
 	} else {
 		t.ServeJson("无信息")
 	}

+ 7 - 2
src/util/util.go

@@ -77,6 +77,7 @@ var (
 		"toptype":            true,
 		"subtype":            true,
 		"winnerorder":        true,
+		"bidopendate":        true,
 	}
 )
 
@@ -85,13 +86,13 @@ func InitMgo() {
 	MgoE = &mgo.MongodbSim{
 		MongodbAddr: sp.Config.Dbaddr,
 		DbName:      sp.Config.Dbname,
-		Size:        5,
+		Size:        10,
 	}
 	MgoE.InitPool()
 	MgoS = &mgo.MongodbSim{
 		MongodbAddr: sp.Config.Dbaddr,
 		DbName:      sp.Config.Dbname2,
-		Size:        5,
+		Size:        10,
 	}
 	MgoS.InitPool()
 }
@@ -110,6 +111,10 @@ func InitAreaCity() {
 //爬虫整体测试时校验爬虫代码
 func SpiderPassCheckLua(liststr, contentstr string, lua map[string]interface{}) string {
 	msg := []string{}
+	//校验含过滤方法stringFind但没有过滤注释“--关键词过滤”
+	if strings.Contains(liststr, "stringFind") && !strings.Contains(liststr, "--关键词过滤") {
+		msg = append(msg, "列表页代码有过滤方法stringFind但缺少注释:--关键词过滤")
+	}
 	//1.检测spidercode、site、channel
 	if param, ok := lua["param_common"].([]interface{}); ok && len(param) >= 3 {
 		spidercode := qu.ObjToString(param[0])

+ 12 - 22
src/web/templates/head.html

@@ -305,16 +305,15 @@
 						      <input type="text" class="form-control" id="datahref" placeholder="请输入连接地址">
 						    </div>
 						  </div>
-              <div class="form-group hide" id="datainfoarea">
-                <label for="code" class="col-sm-2 control-label">信息详情:</label>
+              			<div class="form-group hide" id="datainfoarea">
+                			<label for="code" class="col-sm-2 control-label">信息详情:</label>
 						    <div class="col-sm-10">
 						      <textarea class="form-control" id="datainfo" style="height:200px"></textarea>
 						    </div>
 						  </div>
 						  <div class="form-group">
 						    <div class="col-sm-offset-2 col-sm-10 operateStyle">
-						      <input type="button" onclick="searcherrlog()" class="btn btn-success" value="搜索错误日志">
-								  <input type="button" onclick="searchdatainfo()" class="btn btn-success" value="搜索标题时间">
+						      <input type="button" onclick="searchdatainfo()" class="btn btn-success" value="信息详情">
 						    </div>
 						  </div> 
 						</form>
@@ -576,9 +575,9 @@
 			<li data="index"><a href="/center"><i class="glyphicon glyphicon-eye-open"></i> <span>脚本列表</span></a></li>
 			<li data="index_rwgl"><a href="/center/managerTask"><i class="glyphicon glyphicon glyphicon-tasks"></i> <span>任务管理</span></a></li>
 			<li data="index_fbgl"><a href="/center/lualist.html"><i class="glyphicon glyphicon-credit-card"></i> <span>运行监控中心</span></a></li>
-      <li data="index_pcdr"><a href="/center/importdata"><i class="glyphicon glyphicon-import"></i> <span>爬虫导入</span></a></li>
-      <li data="index_site"><a href="/center/site/sitelist"><i class="glyphicon glyphicon-home"></i> <span>站点列表</span></a></li>
-      <li data="index_pcqy"><a href="/center/luamove"><i class="glyphicon glyphicon-move"></i> <span>爬虫迁移管理</span></a></li>
+		    <li data="index_pcdr"><a href="/center/importdata"><i class="glyphicon glyphicon-import"></i> <span>爬虫导入</span></a></li>
+		    <li data="index_site"><a href="/center/site/sitelist"><i class="glyphicon glyphicon-home"></i> <span>站点列表</span></a></li>
+		    <li data="index_pcqy"><a href="/center/luamove"><i class="glyphicon glyphicon-move"></i> <span>爬虫迁移管理</span></a></li>
 		{{else if eq (session "auth") 2}}
 			<li data="index"><a href="/center"><i class="glyphicon glyphicon-eye-open"></i> <span>爬虫审核</span></a></li>
 			<li data="index_rwsh"><a href="/center/task/audit"><i class="glyphicon glyphicon glyphicon-tasks"></i> <span>任务审核</span></a></li>
@@ -586,10 +585,12 @@
 			<li data="index"><a href="/center"><i class="glyphicon glyphicon-eye-open"></i> <span>爬虫列表</span></a></li>
 			<li data="index_rwlb"><a href="/center/mytask"><i class="glyphicon glyphicon-tasks"></i> <span>任务列表</span></a></li>
 		{{end}}
-     <li data="index_heart"><a href="/center/heart"><i class="fa fa-heartbeat"></i> <span>心跳监控</span></a></li>
-    <li data="index_errlua"><a href="/center/errorLua"><i class="fa fa-warning"></i> <span>错误爬虫管理</span></a></li>
-    <li data="index_errdata"><a href="/center/errorData"><i class="glyphicon glyphicon-exclamation-sign"></i> <span>错误信息管理</span></a></li>
-		<li data="index_wtgl"><a href="/center/managerQues"><i class="glyphicon glyphicon-question-sign"></i> <span>问题管理</span></a></li>
+		{{if eq (session "paltform") "lua"}}
+     	<li data="index_heart"><a href="/center/heart"><i class="fa fa-heartbeat"></i> <span>心跳监控</span></a></li>
+    	<li data="index_errlua"><a href="/center/errorLua"><i class="fa fa-warning"></i> <span>错误爬虫管理</span></a></li>
+    	<li data="index_errdata"><a href="/center/errorData"><i class="glyphicon glyphicon-exclamation-sign"></i> <span>错误信息管理</span></a></li>
+<!--		<li data="index_wtgl"><a href="/center/managerQues"><i class="glyphicon glyphicon-question-sign"></i> <span>问题管理</span></a></li>-->
+		{{end}}
 		<li ><a href="/center/logout" target="_self"><i class="fa fa-sign-out"></i> <span>退出</span></a></li>
 		<li style="color:#fff;padding:35px 20px;" class="hide">
 			<div class="form-group">
@@ -623,17 +624,6 @@
     $("#searchbyhref").modal("show");
   }
   //搜索错误日志
-  function searcherrlog(){
-    var href = $("#datahref").val();
-    if(href==""){
-      return
-    }
-    $.post("/center/task/searchErrLog",{"href":href},function(r){
-      $("#datainfo").val(r);
-      $("#datainfoarea").removeClass("hide");
-    })
-  }
-  //搜索标题和发布时间
   function searchdatainfo(){
     var href = $("#datahref").val();
     if(href==""){

+ 34 - 43
src/web/templates/heart.html

@@ -23,12 +23,14 @@
                  <th>栏目</th>
                   <th>爬虫</th>
                   <th>节点</th>
-          				<th>维护人</th>
-          				<th>列表页心跳</th>
+          		  <th>维护人</th>
+          		  <th>列表页心跳</th>
                   <th>详情页心跳</th>
                   <th>采集心跳</th>
+                  <th>采集量心跳</th>
+                  <th>IsFindList</th>
                   <th>更新时间</th>
-                  <th class="hidden-xs">操作</th>
+<!--                  <th class="hidden-xs">操作</th>-->
                 </tr>
                 </thead>
               </table>
@@ -44,7 +46,7 @@
               "url": "/js/dataTables.chinese.lang"
           },
 		"columnDefs": [
-		  { "orderable": false, "targets": [0,1,2,3,4,9] } //设置列不可排序 
+		  { "orderable": false, "targets": [0,1,2,3,4,9] } //设置列不可排序
 		],
     "order": [[5,"asc"]], //默认排序列
 		"processing":true,
@@ -61,45 +63,34 @@
 			"type": "POST"
 		 },
 		"columns": [
-     { "data": "param_common",render:function(val,a,row){
-				vals=val[1];
-				if(vals.length>15){
-					vals=vals.substr(0,15)+"...";
-				}
-				return  vals
-			}},
-			{ "data": "param_common",render:function(val){
-				if(val.length<3){
-					val="暂无";
-				}else{
-					var href="#"
-					if(val[11]){
-						href=val[11]
-					}
-					val="<a href='"+href+"' title='"+val[2]+"' target='_blank'>"+val[2]+"</a>"
-				}
-				return val
-			}},
-			{ "data": "code"},
-      { "data": "event"},
-			{ "data": "modifyuser"},
-      { "data": "list"},
-      { "data": "detail"},
-      { "data": "detailexecute"},
-      { "data": "updatetime"},
-			{ "data": "state",render:function(val,a,row){
-				var div=$("<div><div class=\"btn-group\"></div></div>")
-				if(val==5){
-					var dbutton=$('<button class="btn btn-sm btn-danger" onclick="myconfirm(this,\'下架\');">下架</button>');
-					dbutton.attr("hrefs","/center/spider/upstate?code="+row["code"]+"&state=6");
-					div.find(".btn-group").append(dbutton);
-				}else if(val==6){
-					var dbutton=$('<button class="btn btn-sm btn-warning" onclick="myconfirm(this,\'上架\');">上架</button>');
-					dbutton.attr("hrefs","/center/spider/upstate?code="+row["code"]+"&state=5");
-					div.find(".btn-group").append(dbutton);
-				}
-				return div.html()
-			}}
+         { "data": "param_common",render:function(val,a,row){
+            vals=val[1];
+            if(vals.length>15){
+                vals=vals.substr(0,15)+"...";
+            }
+            return  vals
+        }},
+        { "data": "param_common",render:function(val,a,row){
+            if(val.length<3){
+                val="暂无";
+            }else{
+                var href="#"
+                if(val[11]){
+                    href=val[11]
+                }
+                val="<a href='"+href+"' title='"+val[2]+"' target='_blank'>"+val[2]+"</a>"
+            }
+            return val
+        }},
+        { "data": "code"},
+        { "data": "event"},
+		{ "data": "modifyuser"},
+        { "data": "list"},
+        { "data": "detail"},
+        { "data": "detailexecute"},
+        { "data": "findlist"},
+        { "data": "isfindlist"},
+        { "data": "updatetime"}
     ],
     "fnServerParams": function (e) {  
 				var event = $("#heart_event").val();

+ 1 - 1
src/web/templates/index.html

@@ -266,7 +266,7 @@ $(function(){
 		"searching": true,
 		"ordering": true,
 		"info": true,
-		"autoWidth": true,
+		"autoWidth": false,
 		"ajax": {
 			"url": "/center",
 			"type": "POST"

+ 14 - 3
src/web/templates/jsonInfo.html

@@ -58,6 +58,11 @@
 							<h3 class="box-title">任务备注:</h3> &nbsp&nbsp&nbsp
 							<input type="text" id="remarkJson" readonly style="width:1000px" ></input>
 						</div>
+						<div class="box-header with-border" id="reateerr">
+							<i class="fa fa-tag"></i>
+							<h3 class="box-title">频率备注:</h3> &nbsp&nbsp&nbsp
+							<input type="text" id="rateremarkJson" readonly style="width:1000px" ></input>
+						</div>
 					</div>
 				</form>		
 			</div>
@@ -78,6 +83,7 @@
   }
 	var descript = {{.T.descript}};
 	var remark = {{.T.remark}};
+	var rateremark = {{.T.rateremark}};
 	var reason = {{.T.reason}}
 	$(function(){
 		if(list != null){
@@ -94,9 +100,14 @@
 		$("#descriptJson").val(descript);
 		$("#remarkJson").val(remark);
 		$("#reason").val(reason);
-    if({{.T.msg}}!=""){
-      showMsg({{.T.msg}},function(){});
-    } 
+		if({{.T.msg}}!=""){
+		  showMsg({{.T.msg}},function(){});
+		}
+		if(rateremark!=""){
+			$("#rateremarkJson").val(rateremark);
+		}else{
+			$("#reateerr").css("display","none")
+		}
 	})
 		
 </script>

+ 412 - 390
src/web/templates/lualist.html

@@ -1,401 +1,423 @@
 {{include "head.html"}}
 <link rel="stylesheet"  href="/css/otherStyle.css">
 <div class="content-wrapper">
-<section class="content-header">
-   <h1>
-    爬虫列表
-	 <small>
-			<a class="btn btn-default btn-sm" id="batchShelves" onclick="batchShelves()">批量上架</a>
-			<a class="btn btn-default btn-sm" id="batches" onclick="batches()">批量下架</a>
-			<!--<a class="btn btn-default btn-sm" id="delRedis" onclick="delRedis()">清理Redis</a>-->
-	 </small>
-   </h1>
-   <ol class="breadcrumb">
-     <li><a href="#"><i class="fa fa-dashboard"></i> 首页</a></li>
-     <li class="active">列表</li>
-   </ol>
- </section>
- <section class="content">
-	<div class="box">
+    <section class="content-header">
+        <h1>
+            爬虫列表
+            <small>
+                <a class="btn btn-default btn-sm" id="batchShelves" onclick="batchShelves()">批量上架</a>
+                <a class="btn btn-default btn-sm" id="batches" onclick="batches()">批量下架</a>
+                <!--<a class="btn btn-default btn-sm" id="delRedis" onclick="delRedis()">清理Redis</a>-->
+            </small>
+        </h1>
+        <ol class="breadcrumb">
+            <li><a href="#"><i class="fa fa-dashboard"></i> 首页</a></li>
+            <li class="active">列表</li>
+        </ol>
+    </section>
+    <section class="content">
+        <div class="box">
             <!-- /.box-header -->
             <div class="box-body">
-              <table id="spider" class="table table-bordered table-striped">
-                <thead>
-                <tr>
-				<th><input type="checkbox" id="selrow" onclick="selectrow(this)"/></th>
-				<th>编号</th>
-				<th>网站/栏目名称</th> 
-				<th>爬虫代码</th>
-				<th>作者</th>
-				<th>审核时间</th>
-				<th>心跳时间</th>
-				<th>节点</th>
-				<th>昨日</th>
-				<th>今日</th>
-				<th>末量</th>
-				<th>状态</th>
-                <th class="hidden-xs">操作</th>
-                </tr>
-                </thead>
-              </table>
+                <table id="spider" class="table table-bordered table-striped">
+                    <thead>
+                    <tr>
+                        <th><input type="checkbox" id="selrow" onclick="selectrow(this)"/></th>
+                        <th>编号</th>
+                        <th>网站/栏目名称</th>
+                        <th>爬虫代码</th>
+                        <th>作者</th>
+                        <th>审核时间</th>
+                        <th>心跳时间</th>
+                        <th>节点</th>
+                        <th>昨日</th>
+                        <th>今日</th>
+                        <th>末量</th>
+                        <th>状态</th>
+                        <th>平台</th>
+                        <th class="hidden-xs">操作</th>
+                    </tr>
+                    </thead>
+                </table>
             </div>
             <!-- /.box-body -->
-          </div>
-</section>
+        </div>
+    </section>
 
-<script>
-	var first=1;
-	$(function(){
-		taskConst=false;
-		ttable=$('#spider').DataTable({
-		"language": {
-              "url": "/js/dataTables.chinese.lang"
-          },
-		"columnDefs": [
-		    { "orderable": false, "targets": [0,1,2,3,4,6,7,8,9,10,11,12] },
-		],
-		"order": [[5,"desc"]],
-		"processing":true,
-		"serverSide": true,
-		"searching": true,
-		"ordering": true,
-		"info": true,
-		"autoWidth": true,
-		"ajax": {
-			"url": "/center/lualist.html",
-			"type": "POST"
-		 },
-		"columns": [
-			{ "data": "_id",render:function(val,a,row){
-				var href = "javascript:void(0)";
-				var len = row.param_common.length;
-				if (len > 11){
-					href = row.param_common[11];
-				}	
-				return "<input type='checkbox' href='"+href+"' value='"+val+"' name='"+row.param_common[1]+"_"+row.param_common[2]+"' code='"+row.param_common[0]+"'/>"
-			}},
-			{ "data": "_id",render:function(val,a,row){
-				return row.num
-			}},
-			{ "data": "param_common",render:function(val,a,row){
-				var site="",chanel=""
-				var siteshort="",chanelshort=""
-				if(val.length>2){
-					site=val[1]
-					chanel=val[2]
-				}else{
-					site=val[1]
-				}
-				if(site.length>8){
-					siteshort=site.substr(0,8);
-				}else{
-					siteshort=site
-				}
-				if(chanel.length>6){
-					chanelshort=chanel.substr(0,6)+"...";
-				}else{
-					chanelshort=chanel
-				}
-				vals=siteshort+"-"+chanelshort;
-				var href="javascript:void(0)"
-				if(val.length>10){
-					if(val[11]){
-						href=val[11]
-					}
-				}
-				vals="<a href='"+href+"' title='"+site+"-"+chanel+"' target='_blank'>"+vals+"</a>"
-				return  vals
-			}},
-			{ "data": "param_common",render:function(val,a,row){
-				var site="",chanel="",code="",href="";
-				if(val.length>2){
-					code=val[0]
-					site=val[1]
-					chanel=val[2]
-					href="http://test.qmx.top:3000/dashboard/db/pa-chong-cai-ji-fen-jiao-ben-30ri-zou-shi-fen-xi?orgId=5&amp;var-spidercode="+code+"&amp;var-site="+site+"&amp;=var-channel="+chanel;	
-				}else{
-					code=row.code
-					site=val[1]
-					href="/center/spider/edit/"+code+"__";//老爬虫
-				}
-				var codeshort=""
-				if(code.length>33){
-					codeshort=code.substr(0,33)+"...";
-				}else{
-					codeshort=code
-				}
-				return "<a href='"+href+"' target='_blank' title='"+code+"'>"+codeshort+"</a>"
-			}},
-			{ "data": "createuser"},
-			{ "data": "l_uploadtime",render:function(val,a,row){
-				sval=val;
-				if(sval.length>11){
-					sval=sval.substr(0,10);
-				}
-				return "<a href='javascript:void(0)' title='审核时间:"+val+",核对时间:"+row.l_checktime+"'>"+sval+"</a>"
-			}},
-			{ "data": "modifytime",render:function(val,a,row){
-				sval=val;
-				if(sval.length>11){
-					sval=sval.substr(11,sval.length);
-				}
-				return "<a href='javascript:void(0)' title='"+val+","+row.lstate+"'>"+sval+"</a>"
-			}},
-			{ "data": "event",render:function(val,a,row){
-				if(val) {
-					return "<a href='javascript:void(0)' onclick='changeEvent(\""+row.code+"\")' title='点击修改节点'>"+val+"</a>"
-				}else{
-					return "<a href='javascript:void(0)' onclick='changeEvent(\""+row.code+"\")' title='点击修改节点'>-</a>"
-				}
-			}},
-			{ "data": "yesterday"},
-			{ "data": "terday"},
-			{ "data": "lastdowncount"},
-			{ "data": "state",render:function(val,a,row){
-				var state=row.state;
-				if(state==0){
-					val="<span class='text-info'>待完成</span>"
-				}else if(state==1){
-					val="<span class='text-primary'>待审核</span>"
-				}else if(state==2){
-					val="<span class='text-danger text-bold'>未通过</span>"
-				}else if(state==3){
-					val="<span class='text-success text-bold'>已通过</span>"
-				}else if(state==4){
-					val="<span class='text-danger text-bold'>已作废</span>"
-				}else if(state==5){
-					val="<span class='text-success text-bold'>已上架</span>"
-				}else if(state==6){
-					val="<span class='text-danger text-bold'>已下架</span>"
-				}else{
-					val="其他";
-				}
-				return val
-			}},
-			{ "data": "state",render:function(val,a,row){
-				var div=$("<div><div class=\"btn-group\"></div></div>")
-				if(val==5){
-					var dbutton=$('<button class="btn btn-sm btn-danger" onclick="myconfirm(this,\'下架\');">下架</button>');
-					dbutton.attr("hrefs","/center/spider/upstate?code="+row["code"]+"&state=6");
-					div.find(".btn-group").append(dbutton);
-				}else if(val==3 || val==6){
-					var dbutton=$('<button class="btn btn-sm btn-warning" onclick="myconfirm(this,\'上架\');">上架</button>');
-					dbutton.attr("hrefs","/center/spider/upstate?code="+row["code"]+"&state=5");
-					div.find(".btn-group").append(dbutton);
-				}
-				if(row["is_check"]){
-					var dbutton1=$('<button class="btn btn-sm btn-success" onclick="common.spider.checkTime(\''+row.code+'\')">核对</button>');
-					dbutton1.attr("hrefs","");
-					div.find(".btn-group").append(dbutton1);
-				}else{
-					var dbutton1=$('<button class="btn btn-sm btn-danger" onclick="common.spider.checkTime(\''+row.code+'\')">核对</button>');
-					dbutton1.attr("hrefs","");
-					div.find(".btn-group").append(dbutton1);
-				}
-				var createTask=$('<a type="button" class="btn btn-sm btn-primary">新建</a>');
-				createTask.attr("onclick","createTask('"+row['code']+"')");
-				div.find(".btn-group").append(createTask);
-				return div.html()
-			}}
-       	  ],
-		"fnDrawCallback": function(table) {
-		 	$("ul.pagination").prepend("&nbsp;&nbsp;&nbsp;转到第 <input type='text' id='changePage'   style='width:20px;'> 页    <a type='text' href='javascript:void(0);' id='dataTable-btn' style='text-align:center'>GO</a>");
-		 	$('#dataTable-btn').click(function(e) {    
-			    var redirectpage=0
-				if($("#changePage").val() && $("#changePage").val() > 0) {    
-			        var redirectpage = $("#changePage").val() - 1;    
-			    }  
-				ttable.page(redirectpage).draw(false);      
-		    });    
-		},	
-		"fnServerParams": function (e) {  
-			var state=$("#type_state").val()
-          	if(state){
-				e.state=state
-			}else{
-				e.state="-1"
-			}
-			var event=$("#eventid").val()
-			if(event){
-				e.event=event
-			}else{
-				e.event="-1"
-			}
+    <script>
+        var first=1;
+        $(function(){
+            taskConst=false;
+            ttable=$('#spider').DataTable({
+                "language": {
+                    "url": "/js/dataTables.chinese.lang"
+                },
+                "columnDefs": [
+                    { "orderable": false, "targets": [0,1,2,3,4,6,7,8,9,10,11,12] },
+                ],
+                "order": [[5,"desc"]],
+                "processing":true,
+                "serverSide": true,
+                "searching": true,
+                "ordering": true,
+                "info": true,
+                "autoWidth": true,
+                "ajax": {
+                    "url": "/center/lualist.html",
+                    "type": "POST"
+                },
+                "columns": [
+                    { "data": "_id",render:function(val,a,row){
+                            var href = "javascript:void(0)";
+                            var len = row.param_common.length;
+                            if (len > 11){
+                                href = row.param_common[11];
+                            }
+                            return "<input type='checkbox' href='"+href+"' value='"+val+"' name='"+row.param_common[1]+"_"+row.param_common[2]+"' code='"+row.param_common[0]+"'/>"
+                        }},
+                    { "data": "_id",render:function(val,a,row){
+                            return row.num
+                        }},
+                    { "data": "param_common",render:function(val,a,row){
+                            var site="",chanel=""
+                            var siteshort="",chanelshort=""
+                            if(val.length>2){
+                                site=val[1]
+                                chanel=val[2]
+                            }else{
+                                site=val[1]
+                            }
+                            if(site.length>8){
+                                siteshort=site.substr(0,8);
+                            }else{
+                                siteshort=site
+                            }
+                            if(chanel.length>6){
+                                chanelshort=chanel.substr(0,6)+"...";
+                            }else{
+                                chanelshort=chanel
+                            }
+                            vals=siteshort+"-"+chanelshort;
+                            var href="javascript:void(0)"
+                            if(val.length>10){
+                                if(val[11]){
+                                    href=val[11]
+                                }
+                            }
+                            vals="<a href='"+href+"' title='"+site+"-"+chanel+"' target='_blank'>"+vals+"</a>"
+                            return  vals
+                        }},
+                    { "data": "param_common",render:function(val,a,row){
+                            var site="",chanel="",code="",href="";
+                            if(val.length>2){
+                                code=val[0]
+                                site=val[1]
+                                chanel=val[2]
+                                href="http://test.qmx.top:3000/dashboard/db/pa-chong-cai-ji-fen-jiao-ben-30ri-zou-shi-fen-xi?orgId=5&amp;var-spidercode="+code+"&amp;var-site="+site+"&amp;=var-channel="+chanel;
+                            }else{
+                                code=row.code
+                                site=val[1]
+                                href="/center/spider/edit/"+code+"__";//老爬虫
+                            }
+                            var codeshort=""
+                            if(code.length>33){
+                                codeshort=code.substr(0,33)+"...";
+                            }else{
+                                codeshort=code
+                            }
+                            return "<a href='"+href+"' target='_blank' title='"+code+"'>"+codeshort+"</a>"
+                        }},
+                    { "data": "createuser"},
+                    { "data": "l_uploadtime",render:function(val,a,row){
+                            sval=val;
+                            if(sval.length>11){
+                                sval=sval.substr(0,10);
+                            }
+                            return "<a href='javascript:void(0)' title='审核时间:"+val+",核对时间:"+row.l_checktime+"'>"+sval+"</a>"
+                        }},
+                    { "data": "modifytime",render:function(val,a,row){
+                            sval=val;
+                            if(sval.length>11){
+                                sval=sval.substr(11,sval.length);
+                            }
+                            return "<a href='javascript:void(0)' title='"+val+","+row.lstate+"'>"+sval+"</a>"
+                        }},
+                    { "data": "event",render:function(val,a,row){
+                            if(val) {
+                                return "<a href='javascript:void(0)' onclick='changeEvent(\""+row.code+"\")' title='点击修改节点'>"+val+"</a>"
+                            }else{
+                                return "<a href='javascript:void(0)' onclick='changeEvent(\""+row.code+"\")' title='点击修改节点'>-</a>"
+                            }
+                        }},
+                    { "data": "yesterday"},
+                    { "data": "terday"},
+                    { "data": "lastdowncount"},
+                    { "data": "state",render:function(val,a,row){
+                            var state=row.state;
+                            if(state==0){
+                                val="<span class='text-info'>待完成</span>"
+                            }else if(state==1){
+                                val="<span class='text-primary'>待审核</span>"
+                            }else if(state==2){
+                                val="<span class='text-danger text-bold'>未通过</span>"
+                            }else if(state==3){
+                                val="<span class='text-success text-bold'>已通过</span>"
+                            }else if(state==4){
+                                val="<span class='text-danger text-bold'>已作废</span>"
+                            }else if(state==5){
+                                val="<span class='text-success text-bold'>已上架</span>"
+                            }else if(state==6){
+                                val="<span class='text-danger text-bold'>已下架</span>"
+                            }else{
+                                val="其他";
+                            }
+                            return val
+                        }},
+                    { "data": "platform"},
+                    { "data": "state",render:function(val,a,row){
+                            var div=$("<div><div class=\"btn-group\"></div></div>")
+                            if(val==5){
+                                var dbutton=$('<button class="btn btn-sm btn-danger" onclick="myconfirm(this,\'下架\');">下架</button>');
+                                dbutton.attr("hrefs","/center/spider/upstate?code="+row["code"]+"&state=6");
+                                div.find(".btn-group").append(dbutton);
+                            }else if(val==3 || val==6){
+                                var dbutton=$('<button class="btn btn-sm btn-warning" onclick="myconfirm(this,\'上架\');">上架</button>');
+                                dbutton.attr("hrefs","/center/spider/upstate?code="+row["code"]+"&state=5");
+                                div.find(".btn-group").append(dbutton);
+                            }
+                            if(row["is_check"]){
+                                var dbutton1=$('<button class="btn btn-sm btn-success" onclick="common.spider.checkTime(\''+row.code+'\')">核对</button>');
+                                dbutton1.attr("hrefs","");
+                                div.find(".btn-group").append(dbutton1);
+                            }else{
+                                var dbutton1=$('<button class="btn btn-sm btn-danger" onclick="common.spider.checkTime(\''+row.code+'\')">核对</button>');
+                                dbutton1.attr("hrefs","");
+                                div.find(".btn-group").append(dbutton1);
+                            }
+                            var createTask=$('<a type="button" class="btn btn-sm btn-primary">新建</a>');
+                            createTask.attr("onclick","createTask('"+row['code']+"')");
+                            div.find(".btn-group").append(createTask);
+                            return div.html()
+                        }}
+                ],
+                "fnDrawCallback": function(table) {
+                    $("ul.pagination").prepend("&nbsp;&nbsp;&nbsp;转到第 <input type='text' id='changePage'   style='width:20px;'> 页    <a type='text' href='javascript:void(0);' id='dataTable-btn' style='text-align:center'>GO</a>");
+                    $('#dataTable-btn').click(function(e) {
+                        var redirectpage=0
+                        if($("#changePage").val() && $("#changePage").val() > 0) {
+                            var redirectpage = $("#changePage").val() - 1;
+                        }
+                        ttable.page(redirectpage).draw(false);
+                    });
+                },
+                "fnServerParams": function (e) {
+                    var state=$("#type_state").val()
+                    if(state){
+                        e.state=state
+                    }else{
+                        e.state="-1"
+                    }
+                    var event=$("#eventid").val()
+                    if(event){
+                        e.event=event
+                    }else{
+                        e.event="-1"
+                    }
+                    //平台
+                    var platform = $("#platform").val();
+                    console.log(platform)
+                    if(platform){
+                        e.platform=platform
+                    }else{
+                        e.platform="-1"
+                    }
+                }
+            });
+            common.setActive("index_fbgl");
+            ttable.on( 'init.dt', function () {
+                var search=getCookie("input");
+                if(search){
+                    $("[type=search]").val(search);
+                }
+                var opt="<option value='-1'>全部</option>"+
+                    "<option value='3'>已通过</option>"+
+                    "<option value='5'>已上架</option>"+
+                    "<option value='6'>已下架</option>";
+                var select="<div class='form-group'><label for='name'>状态:</label>"+
+                    "<select id='type_state' onchange='checkclick(this.value)' class='form-control input-sm'>"+
+                    opt+
+                    "</select></div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"
+                var opt2="<option value='-1'>全部</option>"
+                var events={{.T.events}}
+                for(k in events){
+                    opt2+="<option value='"+events[k]+"'>"+events[k]+"</option>"
+                }
+                var select2="<div class='form-group'><label for='name'>节点:</label>"+
+                    "<select id='eventid' onchange='checkclick(this.value)' class='form-control input-sm'>"+
+                    opt2+
+                    "</select></div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"
+                $("#spider_filter").prepend(select);
+                $("#spider_filter").prepend(select2);
+                //平台
+                var platform="<div class='form-group'><label for='name'>平台:</label>"+
+                    "<select id='platform' onchange='checkclick(this.value)' class='form-control input-sm'>"+
+                    "<option value='-1'>全部</option>"+
+                    "<option value='golua平台'>golua平台</option>"+
+                    "<option value='python'>python</option>"+
+                    "<option value='通用爬虫'>通用爬虫</option>"+
+                    "<option value='chrome插件'>chrome插件</option>"+
+                    "</select></div>"
+                $("#spider_filter").prepend("&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;");
+                $("#spider_filter").prepend(platform);
+                $("#spider_wrapper .col-sm-6").css({width:"100%"})//样式
+            });
+        })
+        function changeEvent(code){
+            var event=window.prompt("==============请输入更新后的节点==============\n","");
+            if(event && event!=""){
+                common.maskShow("正在切换节点...");
+                $.ajax({
+                    url:"/center/changeEvent",
+                    type:"post",
+                    data:{"event":event,"code":code},
+                    success:function(r){
+                        common.maskHide();
+                        if(r==""){
+                            showTip("更新成功", 500, function() {});
+                        }else{
+                            showMsg("更新失败,"+r, function() {});
+                        }
+                        ttable.ajax.reload(null,false);
+                    }
+                })
+            }
         }
-	    });
-		common.setActive("index_fbgl");
-		ttable.on( 'init.dt', function () {
-			var search=getCookie("input");
-			if(search){
-				$("[type=search]").val(search);
-			}
-			var opt="<option value='-1'>全部</option>"+
-				"<option value='3'>已通过</option>"+
-				"<option value='5'>已上架</option>"+
-				"<option value='6'>已下架</option>";
-			var select="<div class='form-group'><label for='name'>状态:</label>"+
-				"<select id='type_state' onchange='checkclick(this.value)' class='form-control input-sm'>"+
-				opt+
-				"</select></div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"
-			var opt2="<option value='-1'>全部</option>"
-			var events={{.T.events}}
-			for(k in events){
-				opt2+="<option value='"+events[k]+"'>"+events[k]+"</option>"
-			}
-			var select2="<div class='form-group'><label for='name'>节点:</label>"+
-				"<select id='eventid' onchange='checkclick(this.value)' class='form-control input-sm'>"+
-				opt2+
-				"</select></div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"
-			$("#spider_filter").prepend(select);
-			$("#spider_filter").prepend(select2);
-		});
-	})
-	function changeEvent(code){
-		var event=window.prompt("==============请输入更新后的节点==============\n","");
-		if(event && event!=""){
-			common.maskShow("正在切换节点...");
-			$.ajax({
-				url:"/center/changeEvent",
-				type:"post",
-				data:{"event":event,"code":code},
-				success:function(r){
-					common.maskHide();
-					if(r==""){
-						showTip("更新成功", 500, function() {});
-					}else{
-						showMsg("更新失败,"+r, function() {});
-					}
-					ttable.ajax.reload(null,false);
-				}
-			})
-		}
-	}
-	function checkclick(me){
-		ttable.search($(me).text().trim());
-		ttable.ajax.reload();
-	}
-	function selectrow(me){
-		var sel=$(me);
-		var isSelected=sel.prop('checked');
-		if(isSelected){
-			$("#spider td input[type=checkbox]").prop("checked",true);
-		}else{
-			$("#spider td input[type=checkbox]").prop("checked",false);
-		}
-	}
-	function myconfirm(me,content){
-		showConfirm("确定"+content+"?", function() {
-			common.maskShow("正在"+content+"...");
-			$.ajax({
-				url:$(me).attr("hrefs"),
-				type:"post",
-				success:function(r){
-					common.maskHide();
-					if(r["err"]==""){
-						showTip(content+"成功", 500, function() {});
-						ttable.ajax.reload(null,false);
-					}else{
-						showMsg(r["err"], function() {});
-					}
-				}
-			})
-		});
-    }
-	
-	//批量上架
-	function batchShelves(){
-		var names=[];
-		var codes=[];
-		$("#spider_wrapper td input[type=checkbox]").each(function(){
-			if($(this).prop("checked")){
-				names.push($(this).attr("name"));
-				codes.push($(this).attr("code"));
-			}
-		});
-		if(codes.length >0){
-			showConfirm("确定批量上架?", function() {
-				//common.maskShow("正在处理...");
-				$.post("/center/spider/batchShelves",{"codes":codes.join(","),"state":5},function(r){
-					if(r.length == 1 && r[0] == "没有权限"){ //没有权限
-						showTip("没有权限",3000);
-					}else if((r.length == 1 && r[0] != "没有权限") || r.length >= 2){ //错误code
-						//showConfirm(r+";上架失败",1000);
-						showTip(r+";上架失败",3000);
-					}else{ //上架成功
-						//showConfirm("上架成功",1000);
-						showTip("上架成功",3000);
-					}
-					$("#selrow").prop('checked',false);
-					$('#com-alert').on('hidden.bs.modal', function () {
-						ttable.ajax.reload();
-					})	
-				})
-			});
-		}else{
-			showTip("没有选择项", 3000);
-		}
-	}
-	//批量下架
-	function batches(){
-		var names=[];
-		var codes=[];
-		$("#spider_wrapper td input[type=checkbox]").each(function(){
-			if($(this).prop("checked")){
-				names.push($(this).attr("name"));
-				codes.push($(this).attr("code"));
-			}
-		});
-		if(codes.length >0){
-			showConfirm("确定批量下架?", function() {
-				//common.maskShow("正在处理...");
-				$.post("/center/spider/batchShelves",{"codes":codes.join(","),"state":6},function(r){
-					if(r.length == 1 && r[0] == "没有权限"){ //没有权限
-						showTip("没有权限",3000);
-					}else if((r.length == 1 && r[0] != "没有权限") || r.length >= 2){ //错误code
-						showTip(r+";下架失败",3000);
-					}else{ //上架成功
-						showTip("下架成功",3000);
-					}
-					$("#selrow").prop('checked',false);
-					$('#com-alert').on('hidden.bs.modal', function () {
-						ttable.ajax.reload();
-					})	
-				})
-			});
-		}else{
-			showTip("没有选择项", 3000);
-		}
-	}
-  /*
-	//清除爬虫redis
-	function delRedis(){
-		var h=[];
-		$("#spider_wrapper td input[type=checkbox]").each(function(){
-			if($(this).prop("checked")){
-				h.push($(this).attr("href"));
-			}
-		});
-		if(h.length >0){
-			showConfirm("确定批量清理Redis?", function() {
-				$.post("/center/spider/delRedis",{"href":h.join(",")},function(r){
-				if(r.length == 1 && r[0] == "没有权限"){ //没有权限
-					showTip("没有权限",3000);
-				}else if((r.length == 1 && r[0] != "没有权限") || r.length >= 2){ //错误code
-					showTip(r+"清理失败",3000);
-				}else{ //清理成功
-					showTip("清理成功",3000);
-				}
-				$("#selrow").prop('checked',false);
-				$('#com-alert').on('hidden.bs.modal', function () {
-					ttable.ajax.reload();
-					})	
-				})
-			});
-		}else{
-			showTip("没有选择项", 3000);
-		}
-	}
-  */
-</script>
+        function checkclick(me){
+            ttable.search($(me).text().trim());
+            ttable.ajax.reload();
+        }
+        function selectrow(me){
+            var sel=$(me);
+            var isSelected=sel.prop('checked');
+            if(isSelected){
+                $("#spider td input[type=checkbox]").prop("checked",true);
+            }else{
+                $("#spider td input[type=checkbox]").prop("checked",false);
+            }
+        }
+        function myconfirm(me,content){
+            showConfirm("确定"+content+"?", function() {
+                common.maskShow("正在"+content+"...");
+                $.ajax({
+                    url:$(me).attr("hrefs"),
+                    type:"post",
+                    success:function(r){
+                        common.maskHide();
+                        if(r["err"]==""){
+                            showTip(content+"成功", 500, function() {});
+                            ttable.ajax.reload(null,false);
+                        }else{
+                            showMsg(r["err"], function() {});
+                        }
+                    }
+                })
+            });
+        }
+
+        //批量上架
+        function batchShelves(){
+            var names=[];
+            var codes=[];
+            $("#spider_wrapper td input[type=checkbox]").each(function(){
+                if($(this).prop("checked")){
+                    names.push($(this).attr("name"));
+                    codes.push($(this).attr("code"));
+                }
+            });
+            if(codes.length >0){
+                showConfirm("确定批量上架?", function() {
+                    //common.maskShow("正在处理...");
+                    $.post("/center/spider/batchShelves",{"codes":codes.join(","),"state":5},function(r){
+                        if(r.length == 1 && r[0] == "没有权限"){ //没有权限
+                            showTip("没有权限",3000);
+                        }else if((r.length == 1 && r[0] != "没有权限") || r.length >= 2){ //错误code
+                            //showConfirm(r+";上架失败",1000);
+                            showTip(r+";上架失败",3000);
+                        }else{ //上架成功
+                            //showConfirm("上架成功",1000);
+                            showTip("上架成功",3000);
+                        }
+                        $("#selrow").prop('checked',false);
+                        $('#com-alert').on('hidden.bs.modal', function () {
+                            ttable.ajax.reload();
+                        })
+                    })
+                });
+            }else{
+                showTip("没有选择项", 3000);
+            }
+        }
+        //批量下架
+        function batches(){
+            var names=[];
+            var codes=[];
+            $("#spider_wrapper td input[type=checkbox]").each(function(){
+                if($(this).prop("checked")){
+                    names.push($(this).attr("name"));
+                    codes.push($(this).attr("code"));
+                }
+            });
+            if(codes.length >0){
+                showConfirm("确定批量下架?", function() {
+                    //common.maskShow("正在处理...");
+                    $.post("/center/spider/batchShelves",{"codes":codes.join(","),"state":6},function(r){
+                        if(r.length == 1 && r[0] == "没有权限"){ //没有权限
+                            showTip("没有权限",3000);
+                        }else if((r.length == 1 && r[0] != "没有权限") || r.length >= 2){ //错误code
+                            showTip(r+";下架失败",3000);
+                        }else{ //上架成功
+                            showTip("下架成功",3000);
+                        }
+                        $("#selrow").prop('checked',false);
+                        $('#com-alert').on('hidden.bs.modal', function () {
+                            ttable.ajax.reload();
+                        })
+                    })
+                });
+            }else{
+                showTip("没有选择项", 3000);
+            }
+        }
+        /*
+          //清除爬虫redis
+          function delRedis(){
+              var h=[];
+              $("#spider_wrapper td input[type=checkbox]").each(function(){
+                  if($(this).prop("checked")){
+                      h.push($(this).attr("href"));
+                  }
+              });
+              if(h.length >0){
+                  showConfirm("确定批量清理Redis?", function() {
+                      $.post("/center/spider/delRedis",{"href":h.join(",")},function(r){
+                      if(r.length == 1 && r[0] == "没有权限"){ //没有权限
+                          showTip("没有权限",3000);
+                      }else if((r.length == 1 && r[0] != "没有权限") || r.length >= 2){ //错误code
+                          showTip(r+"清理失败",3000);
+                      }else{ //清理成功
+                          showTip("清理成功",3000);
+                      }
+                      $("#selrow").prop('checked',false);
+                      $('#com-alert').on('hidden.bs.modal', function () {
+                          ttable.ajax.reload();
+                          })
+                      })
+                  });
+              }else{
+                  showTip("没有选择项", 3000);
+              }
+          }
+        */
+    </script>
 </div>
 {{include "bottom.html"}}

+ 12 - 3
src/web/templates/mytask.html

@@ -23,6 +23,8 @@
 								<td>任务状态</td>
                 				<td>类型</td>
 								<td>紧急度</td>
+								<td>次数</td>
+								<td>频率次数</td>
 								<td>来源</td>
 								<td>最迟完成时间</td>
 								<th class="hidden-xs">操作</th>
@@ -46,15 +48,15 @@
 				
        		 },
 			"columnDefs": [
-			    { "orderable": false, "targets": 9 }
+			    { "orderable": false, "targets": [0,1,2,3,4,5,11] }
 			],	
-      		"order": [[8,"desc"]], //默认排序列
+      		"order": [[10,"desc"]], //默认排序列
 			"lengthChange":false,
 			"serverSide": true,
 			"searching": true,
 			"ordering": true,
 			"info": true,
-			"autoWidth": true,
+			"autoWidth": false,
 			"columns": [
 				{"data":"s_code"},
 	      		{"data": "s_site"},
@@ -88,6 +90,13 @@
 				  return val
 				}},
 				{"data": "s_urgency"},
+				{"data": "i_times"},
+				{"data": "i_frequencyerrtimes","width":"28px",render:function(val,a,row){
+					if(val == undefined){
+						return 0;
+					}
+					return val;
+				}},
 				{"data": "s_source"},
 				{"data":"l_complete"},
 				{"data":"_id",render:function(val,a,row){

+ 177 - 155
src/web/templates/mytaskedit.html

@@ -4,15 +4,15 @@
 	<section class="content-header">
 		<h1>
 			任务编辑
-		<small>
-			<button class="btn btn-success btn-sm hide btn-saveTask" onclick="reviseReptile()">修改爬虫</button>
-		  <button class="btn btn-success btn-sm" onclick="searchbyhref()">搜索</button>
-    </small>	
-  		 </h1>
-  		<ol class="breadcrumb">
-     		<li><a href="#"><i class="fa fa-dashboard"></i> 任务</a></li>
-     		<li class="active">编辑</li>
-  	 	</ol>
+			<small>
+				<button class="btn btn-success btn-sm hide btn-saveTask" onclick="reviseReptile()">修改爬虫</button>
+				<button class="btn btn-success btn-sm" onclick="searchbyhref()">搜索</button>
+			</small>
+		</h1>
+		<ol class="breadcrumb">
+			<li><a href="#"><i class="fa fa-dashboard"></i> 任务</a></li>
+			<li class="active">编辑</li>
+		</ol>
 	</section>
 	<section class="content">
 		<div class="row">
@@ -24,22 +24,22 @@
 							<h3 class="box-title">任务信息</h3>
 						</div>
 						<div class="box-body">
-				        	<div class="form-group">
+							<div class="form-group">
 								<label for="site" class="col-sm-4 control-label nameStyle">网站名称:</label>
 								<div class="col-sm-8">
-				           			<input type="text" class="form-control" readonly=true name="site" value="{{.T.task.s_site}}" id="site">
+									<input type="text" class="form-control" readonly=true name="site" value="{{.T.task.s_site}}" id="site">
 								</div>
 							</div>
 							<div class="form-group">
 								<label for="channel" class="col-sm-4 control-label nameStyle">站点名称:</label>
 								<div class="col-sm-8">
-				           			<input type="text" class="form-control" readonly=true name="channel" value="{{.T.task.s_channel}}" id="channel">
+									<input type="text" class="form-control" readonly=true name="channel" value="{{.T.task.s_channel}}" id="channel">
 								</div>
 							</div>
 							<div class="form-group">
 								<label for="code" class="col-sm-4 control-label nameStyle">爬虫代码:</label>
 								<div class="col-sm-8">
-				           			<input type="text" class="form-control" readonly=true name="code" value="{{.T.task.s_code}}" id="code">
+									<input type="text" class="form-control" readonly=true name="code" value="{{.T.task.s_code}}" id="code">
 								</div>
 							</div>
 							<div class="form-group">
@@ -51,13 +51,13 @@
 							<div class="form-group">
 								<label for="comeintime" class="col-sm-4 control-label nameStyle">创建时间:</label>
 								<div class="col-sm-8">
-				           			<input type="text" class="form-control" readonly=true name="comeintime" value="{{.T.task.l_comeintime}}" id="comeintime">
+									<input type="text" class="form-control" readonly=true name="comeintime" value="{{.T.task.l_comeintime}}" id="comeintime">
 								</div>
 							</div>
 							<div class="form-group">
 								<label for="complete" class="col-sm-4 control-label nameStyle">最迟完成时间:</label>
 								<div class="col-sm-8">
-				           			<input type="text" class="form-control" readonly=true name="complete" value="{{.T.task.l_complete}}" id="complete" placeholder="备注:格式(2012-12-12)">
+									<input type="text" class="form-control" readonly=true name="complete" value="{{.T.task.l_complete}}" id="complete" placeholder="备注:格式(2012-12-12)">
 								</div>
 								<span class="completeCheck hide check">格式错误</span>
 							</div>
@@ -70,8 +70,8 @@
 									<input type="radio" name="urgency" disabled=true id="tbjj" value="特别紧急">特别紧急</input>
 								</div>
 							</div>
-							
-							
+
+
 							<div class="form-group">
 								<label for="state" class="col-sm-4 control-label nameStyle">任务状态:</label>
 								<div class="col-sm-8 checkbox-style">
@@ -88,17 +88,17 @@
 							<div class="form-group">
 								<label for="descript" class="col-sm-4 control-label nameStyle">问题描述:</label>
 								<div class="col-sm-8">
-				           			<textarea class="form-control" readonly=true name="descript" id="descript"></textarea>
+									<textarea class="form-control" readonly=true name="descript" id="descript"></textarea>
 								</div>
 							</div>
-							
+
 						</div>
 					</div>
-				</form>		
+				</form>
 			</div>
 			<div class="col-md-6">
 				<div class="record">
-				<!--<form class="form-horizontal">-->
+					<!--<form class="form-horizontal">-->
 					<div class="box box-primary ">
 						<!-- box-header -->
 						<div class="box-header with-border">
@@ -116,11 +116,11 @@
 												<h3 class="box-title">处理记录:</h3>
 												<span class="record-style">(请先修改爬虫,再提交记录)</span>
 											</div>
-										
+
 											<div class="form-group">
 												<label for="modify" class="col-sm-3 control-label nameStyle">维护人:</label>
 												<div class="col-sm-8">
-								           			<input type="text" class="form-control" name="site" readonly=true value="{{.T.task.s_modify}}" id="record-modify">
+													<input type="text" class="form-control" name="site" readonly=true value="{{.T.task.s_modify}}" id="record-modify">
 												</div>
 											</div>
 											<div class="form-group">
@@ -129,14 +129,14 @@
 								           			<input type="text" class="form-control" name="comeintime" id="record-comeintime" placeholder="备注:格式(2012-12-12 12:12:12)">
 												</div>
 												<span class="comeintimeCheck hide check">格式错误</span>-->
-												
+
 												<div class="col-sm-8 input-group date" id="MyComeintimeStyle" data-date="" data-date-format="hh:ii" data-link-field="dtp_input3" data-link-format="hh:ii">
-											   	  	<input class="form-control" type="text" name="comeintime" id="record-comeintime" readonly />
+													<input class="form-control" type="text" name="comeintime" id="record-comeintime" readonly />
 													<span class="input-group-addon pull-left timeStyle "><span class="glyphicon glyphicon-remove"></span></span>
-													<span class="input-group-addon pull-left timeStyle"><span class="glyphicon glyphicon-time"></span></span>	
+													<span class="input-group-addon pull-left timeStyle"><span class="glyphicon glyphicon-time"></span></span>
 												</div>
-												
-												
+
+
 											</div>
 											<div class="form-group">
 												<label for="complete" class="col-sm-3 control-label nameStyle">完成时间:</label>
@@ -144,30 +144,37 @@
 								           			<input type="text" class="form-control" name="complete" id="record-complete" placeholder="备注:格式(2012-12-12 12:12:12)">
 												</div>
 												<span class="completeCheck hide check">格式错误</span>-->
-												
+
 												<div class="col-sm-8 input-group date" id="MyCompleteStyle" data-date="" data-date-format="hh:ii" data-link-field="dtp_input3" data-link-format="hh:ii">
-											   	  	<input class="form-control" type="text" name="complete" id="record-complete" readonly />
+													<input class="form-control" type="text" name="complete" id="record-complete" readonly />
 													<span class="input-group-addon pull-left timeStyle "><span class="glyphicon glyphicon-remove"></span></span>
-													<span class="input-group-addon pull-left timeStyle"><span class="glyphicon glyphicon-time"></span></span>	
+													<span class="input-group-addon pull-left timeStyle"><span class="glyphicon glyphicon-time"></span></span>
 												</div>
-												
-												
+
+
 											</div>
 											<div class="form-group">
 												<label for="remark" class="col-sm-3 control-label nameStyle">备注:</label>
 												<div class="col-sm-8">
-								           			<textarea type="text" class="form-control" name="remark" id="record-remark"></textarea>
+													<textarea type="text" class="form-control" name="remark" id="record-remark"></textarea>
 												</div>
 												<span class="remark-info hide">请填写备注后提交审核</span>
 											</div>
+											<div class="form-group rateerr" id="rateerr">
+												<label for="rateerr" class="col-sm-3 control-label nameStyle">采集频率备注:</label>
+												<div class="col-sm-8">
+													<textarea type="text" class="form-control" name="remark" id="rateerr-remark"></textarea>
+												</div>
+												<span class="remark-info hide">请填写采集频率修改内容</span>
+											</div>
 											<div>
 												<small>
 													&nbsp;&nbsp;&nbsp;
-													<input type="button" disabled=true class="btn btn-primary sm-record" onclick="saveRecord({{.T.id}})" value="提交"></input>
+													<input type="button" class="btn btn-primary sm-record" onclick="saveRecord({{.T.id}})" value="提交"></input>
 												</small>
 											</div>
-										</div>	
-										
+										</div>
+
 										<div class="question hide">
 											<div class="box-header">
 												<h3 class="box-title title-style">问题验证记录:</h3>
@@ -175,34 +182,34 @@
 											<div class="form-group">
 												<label for="site" class="col-sm-3 control-label nameStyle">验证人:</label>
 												<div class="col-sm-8">
-								           			<input type="text" class="form-control" name="site" id="" >
+													<input type="text" class="form-control" name="site" >
 												</div>
 											</div>
 											<div class="form-group">
 												<label for="site" class="col-sm-3 control-label nameStyle">验证时间:</label>
 												<div class="col-sm-8">
-								           			<input type="text" class="form-control" name="site" id="" placeholder="备注:请输入验证通过时间或未通过时间">
+													<input type="text" class="form-control" name="site"  placeholder="备注:请输入验证通过时间或未通过时间">
 												</div>
 											</div>
 											<div class="form-group">
 												<label for="site" class="col-sm-3 control-label nameStyle">备注:</label>
 												<div class="col-sm-8">
-								           			<textarea type="text" class="form-control" name="site" id=""></textarea>
+													<textarea type="text" class="form-control" name="site" ></textarea>
 												</div>
 											</div>
 										</div>
 									</div>
-									
+
 								</div>
 							</form>
 							<div class="startFormAfter">
-							</div>	
-						<!-- box-body -->
+							</div>
+							<!-- box-body -->
 						</div>
-				<!--</form>	-->
+						<!--</form>	-->
+					</div>
 				</div>
 			</div>
-		</div>
 	</section>
 </div>
 
@@ -227,19 +234,20 @@
 	var modifyid = task["s_modifyid"];
 	var $val = "";
 	common.setActive("index_rwlb");
+	var index = descript.indexOf("采集频率异常");//描述中是否包含采集频率异常
 	$(function(){
 		$("#MyComeintimeStyle").datetimepicker({
 			format: "dd MM yyyy - hh:ii:ss",
-	        linkField: "record-comeintime",
-	        linkFormat: "yyyy-mm-dd hh:ii:ss"
+			linkField: "record-comeintime",
+			linkFormat: "yyyy-mm-dd hh:ii:ss"
 		})
 		$("#MyCompleteStyle").datetimepicker({
 			format: "dd MM yyyy - hh:ii:ss",
-	        linkField: "record-complete",
-	        linkFormat: "yyyy-mm-dd hh:ii:ss"
+			linkField: "record-complete",
+			linkFormat: "yyyy-mm-dd hh:ii:ss"
 		})
-		
-		
+
+
 		sessionStorage.setItem("comeintimeSession","false");
 		sessionStorage.setItem("completeSession","false");
 		sessionStorage.setItem("remarkSession","false");
@@ -283,7 +291,7 @@
 		}else if(6 == state){
 			$(".mytask-edit #gb").prop("checked",true);
 		}
-		
+
 		if(state == 1 || state == 2 || state == 5){
 			$(".btn-saveTask").removeClass("hide");
 		}
@@ -303,6 +311,7 @@
 		var formHtml = "";
 		for(var k in mrecord){
 			var mreRemark = mrecord[k]["s_mrecord_remark"];
+			var rateremark = mrecord[k]["s_mrecord_rateremark"];
 			var mreStartTime = mrecord[k]["l_mrecord_comeintime"];
 			var mreEndTime = mrecord[k]["l_mrecord_complete"];
 			var cheRemark = mrecord[k]["s_check_checkRemark"];
@@ -326,9 +335,9 @@
 			if(typeof(cheTime) == "undefined"){
 				cheTime = "";
 			}
-			formHtmlStyle(mreRemark,mreStartTime,mreEndTime,cheRemark,cheUser,cheTime);
+			formHtmlStyle(mreRemark,rateremark,mreStartTime,mreEndTime,cheRemark,cheUser,cheTime);
 		}
-		
+
 		if(param == 2 ){ //提交审核进入页面
 			$(".btn-saveTask").addClass("hide");
 			//$(".parent-body-style .form-horizontal").addClass("hide");
@@ -342,102 +351,115 @@
 			//$("#record-comeintime").prop("disabled",true);
 			//$("#record-complete").prop("disabled",true);
 		}
+		if(index == -1){
+			$(".rateerr").css("display","none")
+		}
 	})
-	
-	function formHtmlStyle(mreRemark,mreStartTime,mreEndTime,cheRemark,cheUser,cheTime){
+
+	function formHtmlStyle(mreRemark,rateremark,mreStartTime,mreEndTime,cheRemark,cheUser,cheTime){
 		formHtml = '<form class="form-horizontal">'
 				+'<div class="box box-primary box-color">'
-					+'<div class="box-header">'
-						+'<h3 class="box-title">处理记录:</h3>'
-					+'</div>'
-					+'<div class="box-body child-body-style">'
-						+'<div class="form-group">'
-							+'<label for="modify" class="col-sm-3 control-label nameStyle">维护人:</label>'
-							+'<div class="col-sm-8">'
-			           			+'<input type="text" class="form-control" readonly=true value="'+modify+'" name="site" id="record-modify">'
-							+'</div>'
-						+'</div>'
-						+'<div class="form-group">'
-							+'<label for="comeintime" class="col-sm-3 control-label nameStyle">开始时间:</label>'
-							+'<div class="col-sm-8">'
-			           			+'<input type="text" class="form-control" readonly=true value="'+mreStartTime+'" name="comeintime" id="record-comeintime">'
-							+'</div>'
-						+'</div>'
-						+'<div class="form-group">'
-							+'<label for="complete" class="col-sm-3 control-label nameStyle">完成时间:</label>'
-							+'<div class="col-sm-8">'
-			           			+'<input type="text" class="form-control" readonly=true value="'+mreEndTime+'" name="complete" id="record-complete">'
-							+'</div>'
-						+'</div>'
-						+'<div class="form-group">'
-							+'<label for="remark" class="col-sm-3 control-label nameStyle">备注:</label>'
-							+'<div class="col-sm-8">'
-			           			+'<textarea type="text" class="form-control" readonly=true name="remark" id="record-remark">'+mreRemark+'</textarea>'
-							+'</div>'
-						+'</div>'
-						
-						+'<div class="box-header">'
-							+'<h3 class="box-title title-style">问题验证记录:</h3>'
-						+'</div>'
-						+'<div class="form-group">'
-							+'<label for="checkUser" class="col-sm-3 control-label nameStyle">验证人:</label>'
-							+'<div class="col-sm-8">'
-			           			+'<input type="text" class="form-control" readonly=true value="'+cheUser+'" name="checkUser" id="" >'
-							+'</div>'
-						+'</div>'
-						+'<div class="form-group">'
-							+'<label for="checkTime" class="col-sm-3 control-label nameStyle">验证时间:</label>'
-							+'<div class="col-sm-8">'
-			           			+'<input type="text" class="form-control" readonly=true value="'+cheTime+'" name="checkTime" id="">'
-							+'</div>'
-						+'</div>'
-						+'<div class="form-group">'
-							+'<label for="checkRemark" class="col-sm-3 control-label nameStyle">备注:</label>'
-							+'<div class="col-sm-8">'
-			           			+'<textarea type="text" class="form-control" readonly=true name="checkRemark" id="">'+cheRemark+'</textarea>'
-							+'</div>'
-						+'</div>'
-					+'</div>'
+				+'<div class="box-header">'
+				+'<h3 class="box-title">处理记录:</h3>'
+				+'</div>'
+				+'<div class="box-body child-body-style">'
+				+'<div class="form-group">'
+				+'<label for="modify" class="col-sm-3 control-label nameStyle">维护人:</label>'
+				+'<div class="col-sm-8">'
+				+'<input type="text" class="form-control" readonly=true value="'+modify+'" name="site" id="record-modify">'
+				+'</div>'
+				+'</div>'
+				+'<div class="form-group">'
+				+'<label for="comeintime" class="col-sm-3 control-label nameStyle">开始时间:</label>'
+				+'<div class="col-sm-8">'
+				+'<input type="text" class="form-control" readonly=true value="'+mreStartTime+'" name="comeintime" id="record-comeintime">'
+				+'</div>'
+				+'</div>'
+				+'<div class="form-group">'
+				+'<label for="complete" class="col-sm-3 control-label nameStyle">完成时间:</label>'
+				+'<div class="col-sm-8">'
+				+'<input type="text" class="form-control" readonly=true value="'+mreEndTime+'" name="complete" id="record-complete">'
+				+'</div>'
+				+'</div>'
+				+'<div class="form-group">'
+				+'<label for="remark" class="col-sm-3 control-label nameStyle">备注:</label>'
+				+'<div class="col-sm-8">'
+				+'<textarea type="text" class="form-control" readonly=true name="remark" id="record-remark">'+mreRemark+'</textarea>'
+				+'</div>'
+				+'</div>'
+				+'<div class="form-group rateerr">'
+				+'<label for="rateerr" class="col-sm-3 control-label nameStyle">采集频率备注:</label>'
+				+'<div class="col-sm-8">'
+				+'<textarea type="text" class="form-control" readonly=true name="remark" id="rateerr-remark">'+rateremark+'</textarea>'
 				+'</div>'
-			+'<form>'	
-			$(".startFormAfter").prepend(formHtml);
+				+'</div>'
+				+'<div class="box-header">'
+				+'<h3 class="box-title title-style">问题验证记录:</h3>'
+				+'</div>'
+				+'<div class="form-group">'
+				+'<label for="checkUser" class="col-sm-3 control-label nameStyle">验证人:</label>'
+				+'<div class="col-sm-8">'
+				+'<input type="text" class="form-control" readonly=true value="'+cheUser+'" name="checkUser" id="" >'
+				+'</div>'
+				+'</div>'
+				+'<div class="form-group">'
+				+'<label for="checkTime" class="col-sm-3 control-label nameStyle">验证时间:</label>'
+				+'<div class="col-sm-8">'
+				+'<input type="text" class="form-control" readonly=true value="'+cheTime+'" name="checkTime" id="">'
+				+'</div>'
+				+'</div>'
+				+'<div class="form-group">'
+				+'<label for="checkRemark" class="col-sm-3 control-label nameStyle">备注:</label>'
+				+'<div class="col-sm-8">'
+				+'<textarea type="text" class="form-control" readonly=true name="checkRemark" id="">'+cheRemark+'</textarea>'
+				+'</div>'
+				+'</div>'
+				+'</div>'
+				+'</div>'
+				+'<form>'
+		$(".startFormAfter").prepend(formHtml);
 	}
-	
+
 	$("#record-remark").focus(function(){
 		$(".remark-info").addClass("hide");
 	})
-	
+
 	$("#record-remark").blur(function(){
 		$val = $(this).val().trim().replace(/\s/g,"");
 		if($val == ""){
 			$(".remark-info").removeClass("hide");
 		}
 	})
-	
+
 	//备注校验
-	$("#record-remark").keyup(function(){
-		$val = $(this).val().trim().replace(/\s/g,"");
-		if($val != ""){
-			$(".sm-record").prop("disabled",false);
-			$(".remark-info").addClass("hide");
-			sessionStorage.setItem("remarkSession","true");
-			if(sessionStorage.getItem("completeSession") == "true" && sessionStorage.getItem("comeintimeSession","true") && sessionStorage.getItem("remarkSession") == "true"){
-				$(".sm-record").prop("disabled",false);
-			}
-		}else{
-			sessionStorage.setItem("remarkSession","false");
-			$(".sm-record").prop("disabled",true);
-			$(".remark-info").removeClass("hide");
-		}
-		
-	})
+	// $("#record-remark").keyup(function(){
+	// 	var remark = $(this).val().trim().replace(/\s/g,"");
+	// 	if(remark != ""){
+	// 		$(".sm-record").prop("disabled",false);
+	// 		$(".remark-info").addClass("hide");
+	// 		sessionStorage.setItem("remarkSession","true");
+	// 		if(sessionStorage.getItem("completeSession") == "true" && sessionStorage.getItem("comeintimeSession","true") && sessionStorage.getItem("remarkSession") == "true"){
+	// 			$(".sm-record").prop("disabled",false);
+	// 		}
+	// 	}else{
+	// 		sessionStorage.setItem("remarkSession","false");
+	// 		$(".sm-record").prop("disabled",true);
+	// 		$(".remark-info").removeClass("hide");
+	// 	}
+	//
+	// })
 	//保存记录信息
 	function saveRecord(id){
-		var $startTime = $("#record-comeintime").val();
-		var $endTime = $("#record-complete").val();
-		$val = $("#record-remark").val().trim().replace(/\s/g,"");
-		$.post("/center/task/saveRecord",{"id":id,"startTime":$startTime,"endTime":$endTime,"remark":$val},function(r){	
-			if(r.state == "yes"){
+		var startTime = $("#record-comeintime").val();
+		var endTime = $("#record-complete").val();
+		var remark = $("#record-remark").val().trim().replace(/\s/g,"");
+		var rateremark  = $("#rateerr-remark").val().trim().replace(/\s/g,"");
+		if(remark == "" || (rateremark == "" && index != -1)){
+			alert("备注不能为空!")
+			return
+		}
+		$.post("/center/task/saveRecord",{"id":id,"startTime":startTime,"endTime":endTime,"remark":remark,"rateremark":rateremark},function(r){
+			if(r && r.state){
 				showTip("保存成功", 1000);
 				$('#com-alert').on('hidden.bs.modal', function () {
 					window.location.href = "/center/mytask";
@@ -453,9 +475,9 @@
 		if($recordComeintime != ""){ //非空 校验格式
 			var r = $recordComeintime.match(/^(\d{4})\-(\d{2})\-(\d{2}) (\d{2}):(\d{2}):(\d{2})$/);
 			if(r != null){
-				var d = new Date(r[1],r[2]-1,r[3]); 
-				var num = (d.getFullYear()==r[1]&&(d.getMonth()+1)==r[2]&&d.getDate()==r[3]); 
-	
+				var d = new Date(r[1],r[2]-1,r[3]);
+				var num = (d.getFullYear()==r[1]&&(d.getMonth()+1)==r[2]&&d.getDate()==r[3]);
+
 				if(num != 0){
 					//格式正确
 					$(".child-body-style .comeintimeCheck").addClass("hide");
@@ -475,7 +497,7 @@
 				$(".sm-record").prop("disabled",true);
 				$(".child-body-style .comeintimeCheck").text("格式错误");
 				$(".child-body-style .comeintimeCheck").removeClass("hide");
-			}	
+			}
 		}else{
 			sessionStorage.setItem("comeintimeSession","false");
 			$(".sm-record").prop("disabled",true);
@@ -490,7 +512,7 @@
 			var r = $recordComplete.match(/^(\d{4})\-(\d{2})\-(\d{2}) (\d{2}):(\d{2}):(\d{2})$/);
 			if(r != null){
 				var d = new Date(r[1],r[2]-1,r[3]);
-				var num = (d.getFullYear() == r[1]&&(d.getMonth()+1) == r[2]&&d.getDate() == r[3]); 
+				var num = (d.getFullYear() == r[1]&&(d.getMonth()+1) == r[2]&&d.getDate() == r[3]);
 				if(num != 0){
 					//格式正确
 					$(".child-body-style .completeCheck").addClass("hide");
@@ -510,7 +532,7 @@
 				$(".sm-record").prop("disabled",true);
 				$(".child-body-style .completeCheck").text("格式错误");
 				$(".child-body-style .completeCheck").removeClass("hide");
-			}	
+			}
 		}else{ //为空
 			sessionStorage.setItem("completeSession","false");
 			$(".sm-record").prop("disabled",true);
@@ -518,15 +540,15 @@
 			$(".child-body-style .completeCheck").removeClass("hide");
 		}
 	})
-	
+
 	//complete
 	$(".mytask-edit #complete").keyup(function(){
 		var $complete = $(".mytask-edit #complete").val();
 		if($complete != ""){ //不为空校验格式
 			var r = $complete.match(/^(\d{4})(-|\/)(\d{2})\2(\d{2})$/);
 			if(r != null){
-				var d = new Date(r[1],r[3]-1,r[4]);  
-				var num = (d.getFullYear()==r[1]&&(d.getMonth()+1)==r[3]&&d.getDate()==r[4]); 
+				var d = new Date(r[1],r[3]-1,r[4]);
+				var num = (d.getFullYear()==r[1]&&(d.getMonth()+1)==r[3]&&d.getDate()==r[4]);
 				if(num != 0){
 					//格式正确
 					$(".mytask-edit .completeCheck").addClass("hide");
@@ -539,13 +561,13 @@
 				$(".mytask-edit .completeCheck").removeClass("hide");
 			}
 			if($complete == complete){
-				$(".mytask-edit .completeCheck").addClass("hide");	
-			}	
+				$(".mytask-edit .completeCheck").addClass("hide");
+			}
 		}else{
 			$(".mytask-edit .completeCheck").addClass("hide");
-		}	
+		}
 	})
-	
+
 	function reviseReptile(){
 		//设置开始时间
 		//if(sessionStorage.getItem("startTime") == null){
@@ -554,14 +576,14 @@
 		//}
 		//修改任务状态为处理中
 		$.post("/center/task/updateTaskState",{"id":editId},function(r){
-      if(r&&r.state){
-        window.location.href = "/center/spider/edit/"+encode+"__"+editId;
-      }else{
-        showTip("后台爬虫下架错误!", 2000, function() {});
-      }
-    })
+			if(r&&r.state){
+				window.location.href = "/center/spider/edit/"+encode+"__"+editId;
+			}else{
+				showTip("后台爬虫下架错误!", 2000, function() {});
+			}
+		})
 	}
-	
+
 	function getNowTime(){
 		var date = new Date();
 		var year = date.getFullYear();
@@ -593,6 +615,6 @@
 		startTime += second;
 		return startTime;
 	}
-  
+
 </script>
-{{include "bottom.html"}}
+{{include "bottom.html"}}

+ 54 - 86
src/web/templates/task.html

@@ -76,10 +76,7 @@
 								<td>紧急度</td>
 								<td>节点</td>
 								<td>次数</td>
-								<td>下限/下载</td>
-								<td>下限</td>
-								<td>下载</td>
-                				<td>下载时间</td>
+								<td>频率次数</td>
                 				<td>来源</td>
 								<td>最迟完成时间</td>
 								<th class="hidden-xs">操作</th>
@@ -117,17 +114,15 @@
        		 },
 			"columnDefs": [
 				{ "targets": 0 ,"bVisible": false}, //隐藏列
-				{ "targets": 13 ,"bVisible": false},
-				{ "targets": 14 ,"bVisible": false},
-			    { "orderable": false, "targets": [0,1,2,4,6,8,9,10,14,15,18] } //设置列不可排序
+				{ "orderable": false, "targets": [0,1,2,3,4,5,6,7,8,15] } //设置列不可排序
 			],	
-			"order": [[17,"desc"]], //默认排序列
+			"order": [[14,"desc"]], //默认排序列
 			"lengthChange":false,
 			"serverSide": true,
 			"searching": true,
 			"ordering": true,
 			"info": true,
-			"autoWidth": true,
+			"autoWidth": false,
 			"columns": [
 				{"data": "href"},
 				{"data": "_id",render:function(val,a,row){
@@ -136,8 +131,8 @@
 				{"data": "_id",render:function(val,a,row){
 					return row.num
 				}},
-	      {"data": "s_site","width":"13%"},
-				{"data": "s_channel","width":"13%",render:function(val,a,row){
+	      		{"data": "s_site","width":"10%"},
+				{"data": "s_channel","width":"10%",render:function(val,a,row){
 					var href ="javascript:void(0)" ;
 					if(row["href"] != ""){
 						href = row["href"];
@@ -151,33 +146,33 @@
 					var	href = "http://test.qmx.top:3000/dashboard/db/pa-chong-cai-ji-fen-jiao-ben-30ri-zou-shi-fen-xi?orgId=5&amp;var-spidercode="+val+"&amp;var-site="+site+"&amp;=var-channel="+chanel;	
 					return "<a href='"+href+"' target='_blank' title='"+val+"'>"+val+"</a>"
 				}},
-				{"data": "i_state"},
-        {"data": "s_type",render:function(val,a,row){
-          if(val== "8"){
-            val="采集频率异常"
-          }else if(val=="7"){
-            val="列表页异常"
-          }else if(val=="6"){
-            val="404 异常"
-          }else if(val=="5"){
-            val="下载异常"
-          }else if(val=="4"){
-            val="运行异常"
-          }else if(val=="3"){
-            val="时间异常"
-          }else if(val=="2"){
-            val="数据异常"
-          }else if(val=="1"){
-            val="数量异常"
-          }else if (val=="10"){
-            val="抽查任务"
-          }else if(val=="0"){
-            val="常规任务"
-          }else{
-            val="历史任务"
-          }
-          return val
-        }},
+				{"data": "i_state","width":"5%"},
+				{"data": "s_type","width":"7%",render:function(val,a,row){
+				  if(val== "8"){
+					val="采集频率异常"
+				  }else if(val=="7"){
+					val="列表页异常"
+				  }else if(val=="6"){
+					val="404 异常"
+				  }else if(val=="5"){
+					val="下载异常"
+				  }else if(val=="4"){
+					val="运行异常"
+				  }else if(val=="3"){
+					val="时间异常"
+				  }else if(val=="2"){
+					val="数据异常"
+				  }else if(val=="1"){
+					val="数量异常"
+				  }else if (val=="10"){
+					val="抽查任务"
+				  }else if(val=="0"){
+					val="常规任务"
+				  }else{
+					val="历史任务"
+				  }
+				  return val
+				}},
 				{"data": "s_modify"},
 				{"data": "s_urgency",render:function(val,a,row){
 					if(val){
@@ -188,40 +183,17 @@
 				}},
 				{"data": "i_event"},
 				{"data": "i_times"},
-				{"data": "i_minNum","width":"6%",render:function(val,a,row){
-					var min = row["i_min"];
-					var num = row["i_num"];
-          if(min==undefined){
-            min=0
-          }
-          if(num==undefined){
-            num=0
-          }
-					return min+"/"+num
+				{"data": "i_frequencyerrtimes","width":"6%",render:function(val,a,row){
+				  if(val == undefined){
+					return 0;
+				  }
+				  return val;
 				}},
-				{"data": "i_min",render:function(val,a,row){
-          if(val == undefined){
-            return 0;
-          }
-          return val;
-        }},
-				{"data": "i_num",render:function(val,a,row){
-          if(val == undefined){
-            return 0;
-          }
-          return val;
-        }},
-        {"data": "s_downloadtime",render:function(val,a,row){
-          if(val == undefined){
-            return "";
-          }
-          return val;
-        }},
 				{"data": "s_source"},
-        {"data": "l_complete","width":"8%",render:function(val,a,row){
-					return val;
-				}},
-        {"data": "_id",render:function(val,a,row){
+				{"data": "l_complete","width":"8%",render:function(val,a,row){
+							return val;
+						}},
+				{"data": "_id","width":"91px",render:function(val,a,row){
 					var div=$("<div><div class=\"btn-group\"></div></div>")
 					var buttonWatch=$('<a type="button" target="_blank" class="btn btn-sm btn-default">编辑</a>');
 					var buttonClose=$('<a type="button" class="btn btn-sm btn-default">关闭</a>');
@@ -229,15 +201,14 @@
 					buttonWatch.attr("href","/center/task/edit/"+row['_id']+"__0");
 					buttonClose.attr("onclick","closeTask('"+row['s_code']+"','"+row['i_state']+"','"+row['_id']+"')");
 					div.find(".btn-group").append(buttonWatch);
-          div.find(".btn-group").append(buttonClose);
+				    div.find(".btn-group").append(buttonClose);
 					if(row['i_state'] == "待确认"){
-            var buttonAssign=$('<a type="button" class="btn btn-sm btn-default">分发</a>');
-            buttonAssign.attr("onclick","assignTask('"+row['s_code']+"','"+row['i_state']+"','"+row['_id']+"')");
-					  div.find(".btn-group").append(buttonAssign);
-          }
+						var buttonAssign=$('<a type="button" class="btn btn-sm btn-default">分发</a>');
+						buttonAssign.attr("onclick","assignTask('"+row['s_code']+"','"+row['i_state']+"','"+row['_id']+"')");
+						div.find(".btn-group").append(buttonAssign);
+				 	}
 					return div.html();
 				}}
-				
 			],
 			"fnDrawCallback": function(table) {
 			 	$("ul.pagination").prepend("&nbsp;&nbsp;&nbsp;转到第 <input type='text' id='changePage'   style='width:20px;'> 页    <a type='text' href='javascript:void(0);' id='dataTable-btn' style='text-align:center'>GO</a>");
@@ -253,8 +224,8 @@
 				var state=$("#task_urgency").val();
 				var taskState = $("#task_state").val();
 				var taskEvent = $("#task_event").val();
-        var taskStype = $("#task_stype").val();
-        var userid = $("#modifyuser").val();
+				var taskStype = $("#task_stype").val();
+				var userid = $("#modifyuser").val();
 				//紧急程度
 				if(state){
 					e.state=state;
@@ -289,10 +260,7 @@
 	  });
 		common.setActive("index_rwgl");
 		ttabletask.on('init.dt', function () {
-			var search=getCookie("task");
-			if(search){
-				$("[type=search]").val(search);
-			}
+
 			var opt="<option value='-1'>全部</option>"+
 				"<option value='1'>普通</option>"+
 				"<option value='2'>紧急</option>"+
@@ -304,7 +272,7 @@
 				"</select></div>"
 			$("#task_filter").prepend("&nbsp;&nbsp;");
 			$("#task_filter").prepend(select);
-			
+
 			var taskState="<option value='-1'>全部</option>"+
 				"<option value='0'>待确认</option>"+
 				"<option value='1'>待处理</option>"+
@@ -319,7 +287,7 @@
 				"</select></div>"
 				$("#task_filter").prepend("&nbsp;&nbsp;");
 				$("#task_filter").prepend(selectState);
-        
+
 			var taskStype="<option value='-1'>全部</option>"+
         "<option value='8'>采集频率异常</option>"+
         "<option value='7'>列表页异常</option>"+
@@ -337,7 +305,7 @@
 				"</select></div>"
 				$("#task_filter").prepend("&nbsp;&nbsp;");
 				$("#task_filter").prepend(selectStype);
-      	
+
 			var taskEvent="<option value='-1'>全部</option>"
 			var events={{.T.events}}
 			for(k in events){
@@ -349,7 +317,7 @@
 			"</select></div>"
 			$("#task_filter").prepend("&nbsp;&nbsp;");
       $("#task_filter").prepend(selectEvent);
-      
+
       var modifyuser="<option value='-1'>全部</option>"
 			var modifyusers={{.T.modifyusers}}
 			for(k in modifyusers){

+ 12 - 4
src/web/templates/taskedit.html

@@ -8,7 +8,9 @@
 			<button class="btn btn-primary btn-sm hide" id="save" onclick="updateTask({{.T.id}})">保存</button>
 			<button class="btn btn-primary btn-sm hide" id="assign" onclick="assignTaskRe({{.T.id}})">分发</button>
 			<button class="btn btn-primary btn-sm" id="closeT" onclick="closeTaskRe({{.T.id}},{{.T.task.s_code}})">关闭</button>
-     <button class="btn btn-success btn-sm" onclick="searchbyhref()">搜索</button>
+			{{if or (eq .T.task.s_type "3")  (eq .T.task.s_type "2")}}
+			<button class="btn btn-success btn-sm" onclick="searchbyhref()">搜索</button>
+			{{end}}
 		</small>
   		 </h1>
   		<ol class="breadcrumb">
@@ -245,6 +247,7 @@
 		var formHtml = "";
 		for(var k in mrecord){
 			var mreRemark = mrecord[k]["s_mrecord_remark"];
+			var rateremark = mrecord[k]["s_mrecord_rateremark"];
 			var mreStartTime = mrecord[k]["l_mrecord_comeintime"];
 			var mreEndTime = mrecord[k]["l_mrecord_complete"];
 			var cheRemark = mrecord[k]["s_check_checkRemark"];
@@ -268,10 +271,10 @@
 			if(typeof(cheTime) == "undefined"){
 				cheTime = "";
 			}
-			formHtmlStyle(mreRemark,mreStartTime,mreEndTime,cheRemark,cheUser,cheTime);
+			formHtmlStyle(mreRemark,rateremark,mreStartTime,mreEndTime,cheRemark,cheUser,cheTime);
 		}
 	})
-	function formHtmlStyle(mreRemark,mreStartTime,mreEndTime,cheRemark,cheUser,cheTime){
+	function formHtmlStyle(mreRemark,rateremark,mreStartTime,mreEndTime,cheRemark,cheUser,cheTime){
 		formHtml = '<form class="form-horizontal">'
 				+'<div class="box box-primary box-color">'
 					+'<div class="box-header">'
@@ -302,7 +305,12 @@
 			           			+'<textarea type="text" class="form-control" readonly=true name="remark" id="record-remark">'+mreRemark+'</textarea>'
 							+'</div>'
 						+'</div>'
-						
+						+'<div class="form-group">'
+							+'<label for="rateerr" class="col-sm-3 control-label nameStyle">采集频率备注:</label>'
+							+'<div class="col-sm-8">'
+								+'<textarea type="text" class="form-control" readonly=true name="remark" id="rateerr-remark">'+rateremark+'</textarea>'
+							+'</div>'
+				        +'</div>'
 						+'<div class="box-header">'
 							+'<h3 class="box-title title-style">问题验证记录:</h3>'
 						+'</div>'