123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201 |
- 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
- }
|