package task import ( "fmt" "github.com/go-xweb/xweb" "mongodb" qu "qfw/util" "sort" sp "spiderutil" "strconv" "strings" "time" "util" ) type Task struct { *xweb.Action taskList xweb.Mapper `xweb:"/center/newtask/tasklist"` //任务管理 taskEdit xweb.Mapper `xweb:"/center/newtask/edit/(.*)"` //编辑任务 taskTagCode xweb.Mapper `xweb:"/center/newtask/tagcode"` //标记爬虫 } func (t *Task) TaskList() { auth := qu.IntAll(t.GetSession("auth")) taskState, _ := t.GetInteger("taskState") //任务状态 event, _ := t.GetInteger("taskEvent") //节点 stype, _ := t.GetInteger("taskStype") //任务类型 platform := t.GetString("platform") //平台 userid := t.GetString("userid") searchStr := t.GetString("search[value]") //search := strings.Replace(searchStr, " ", "", -1) search := strings.TrimSpace(searchStr) draw, _ := t.GetInteger("draw") start, _ := t.GetInteger("start") limit, _ := t.GetInteger("length") if auth == util.Role_Admin { if t.Method() == "GET" { events := []string{} for k, _ := range sp.Config.Uploadevents { events = append(events, k) } sort.Strings(events) t.T["events"] = events t.T["modifyusers"] = getModifyUsers() t.Render("newtasklist.html", &t.T) } else { query := queryCriteria(userid, platform, taskState, event, stype) if search != "" { query["$or"] = []interface{}{ map[string]interface{}{"s_code": map[string]interface{}{"$regex": search}}, map[string]interface{}{"s_modify": map[string]interface{}{"$regex": search}}, map[string]interface{}{"s_site": map[string]interface{}{"$regex": search}}, map[string]interface{}{"s_channel": map[string]interface{}{"$regex": search}}, } } sort := `{"%s":%d}` orderIndex := t.GetString("order[0][column]") orderName := t.GetString(fmt.Sprintf("columns[%s][data]", orderIndex)) orderType := 1 if t.GetString("order[0][dir]") != "asc" { orderType = -1 } sort = fmt.Sprintf(sort, orderName, orderType) if orderIndex == "9" { //按下载/下限排序时 先按完成时间排序 sorta := strings.Replace(sort, "{", "", -1) sortb := strings.Replace(sorta, "}", "", -1) //sort = `{"l_complete":1,` + sortb + `}` sort = `{` + sortb + `,"l_complete":1}` } qu.Debug("query:", query, sort) task, _ := util.MgoEB.Find("newtask", query, sort, nil, false, start, limit) count := util.MgoEB.Count("newtask", query) page := start / 10 if len(*task) > 0 { for k, v := range *task { v["num"] = k + 1 + page*10 v["encode"] = sp.Se.Encode2Hex(fmt.Sprint(v["s_code"])) //根据code查询luaconfig lua, _ := util.MgoEB.FindOneByField("luaconfig", map[string]interface{}{"code": qu.ObjToString(v["s_code"])}, `{"href":1}`) if len(*lua) > 0 { v["href"] = (*lua)["href"] } else { v["href"] = "javascript:void(0)" } } } t.ServeJson(map[string]interface{}{"draw": draw, "data": task, "recordsFiltered": count, "recordsTotal": count}) } } else { t.Write("您没有导入任务的权限") } } // 编辑 查看任务 func (t *Task) TaskEdit(ids string) error { auth := qu.IntAll(t.GetSession("auth")) id := strings.Split(ids, "__")[0] param := strings.Split(ids, "__")[1] if t.Method() == "GET" { query := map[string]interface{}{ "_id": mongodb.StringTOBsonId(id), } task, _ := util.MgoEB.FindOne("newtask", query) if task != nil && len(*task) > 0 { (*task)["l_comeintime"] = time.Unix((*task)["l_comeintime"].(int64), 0).Format("2006-01-02 15:04:05") (*task)["l_complete"] = time.Unix((*task)["l_complete"].(int64), 0).Format("2006-01-02 15:04:05") if (*task)["a_mrecord"] != nil { mrecord := qu.ObjArrToMapArr((*task)["a_mrecord"].([]interface{})) if mrecord != nil && len(mrecord) > 0 { for _, v := range mrecord { v["l_mrecord_comeintime"] = time.Unix(qu.Int64All(v["l_mrecord_comeintime"]), 0).Format("2006-01-02 15:04:05") v["l_mrecord_complete"] = time.Unix(qu.Int64All(v["l_mrecord_complete"]), 0).Format("2006-01-02 15:04:05") } } } if (*task)["a_check"] != nil { check := qu.ObjArrToMapArr((*task)["a_check"].([]interface{})) if check != nil && len(check) > 0 { for _, v := range check { v["l_check_checkTime"] = time.Unix(qu.Int64All(v["l_check_checkTime"]), 0).Format("2006-01-02 15:04:05") } } } t.T["encode"] = sp.Se.Encode2Hex(fmt.Sprint((*task)["s_code"])) t.T["id"] = id t.T["task"] = *task t.T["param"] = param if t.GetSession(id) == "" || t.GetSession(id) == nil { t.T["xgTime"] = time.Unix(time.Now().Unix(), 0).Format("2006-01-02 15:04:05") } else { t.T["xgTime"] = qu.ObjToString(t.GetSession(id)) } t.DelSession(id) if auth == util.Role_Admin { return t.Render("taskedit.html", &t.T) } else if auth == util.Role_Dev { return t.Render("mytaskedit.html", &t.T) } else if auth == util.Role_Examine { return t.Render("auditedit.html", &t.T) } } } return nil } func (t *Task) TaskTagCode() { defer qu.Catch() taskId := t.GetString("id") code := t.GetString("code") stype := t.GetString("stype") qu.Debug(taskId, code, stype) //关闭任务 update := map[string]interface{}{ "$set": map[string]interface{}{ "i_state": 6, "l_checktime": time.Now().Unix(), }, } util.MgoEB.UpdateById("newtask", taskId, update) //标记爬虫 /* tags:{任务类型:标记时间} */ update = map[string]interface{}{ "$set": map[string]interface{}{ "codetags." + stype: time.Now().Unix(), }, } util.MgoEB.Update("luaconfig", map[string]interface{}{"code": code}, update, false, false) t.Write("y") } func getModifyUsers() []map[string]interface{} { query := map[string]interface{}{ "i_auth": 1, "i_delete": 0, } user, _ := util.MgoEB.Find("user", query, nil, nil, false, -1, -1) return *user } func queryCriteria(userid, platform string, taskState, event, stype int) (query map[string]interface{}) { query = map[string]interface{}{} if userid != "" && userid != "-1" { query["s_modifyid"] = userid } if platform != "" && platform != "-1" { query["s_platform"] = platform } if taskState >= 0 { query["i_state"] = taskState } if event >= 0 { query["i_event"] = event } if stype >= 0 { query["s_type"] = strconv.Itoa(stype) } return }