task.go 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201
  1. package task
  2. import (
  3. "fmt"
  4. "github.com/go-xweb/xweb"
  5. "mongodb"
  6. qu "qfw/util"
  7. "sort"
  8. sp "spiderutil"
  9. "strconv"
  10. "strings"
  11. "time"
  12. "util"
  13. )
  14. type Task struct {
  15. *xweb.Action
  16. taskList xweb.Mapper `xweb:"/center/newtask/tasklist"` //任务管理
  17. taskEdit xweb.Mapper `xweb:"/center/newtask/edit/(.*)"` //编辑任务
  18. taskTagCode xweb.Mapper `xweb:"/center/newtask/tagcode"` //标记爬虫
  19. }
  20. func (t *Task) TaskList() {
  21. auth := qu.IntAll(t.GetSession("auth"))
  22. taskState, _ := t.GetInteger("taskState") //任务状态
  23. event, _ := t.GetInteger("taskEvent") //节点
  24. stype, _ := t.GetInteger("taskStype") //任务类型
  25. platform := t.GetString("platform") //平台
  26. userid := t.GetString("userid")
  27. searchStr := t.GetString("search[value]")
  28. //search := strings.Replace(searchStr, " ", "", -1)
  29. search := strings.TrimSpace(searchStr)
  30. draw, _ := t.GetInteger("draw")
  31. start, _ := t.GetInteger("start")
  32. limit, _ := t.GetInteger("length")
  33. if auth == util.Role_Admin {
  34. if t.Method() == "GET" {
  35. events := []string{}
  36. for k, _ := range sp.Config.Uploadevents {
  37. events = append(events, k)
  38. }
  39. sort.Strings(events)
  40. t.T["events"] = events
  41. t.T["modifyusers"] = getModifyUsers()
  42. t.Render("newtasklist.html", &t.T)
  43. } else {
  44. query := queryCriteria(userid, platform, taskState, event, stype)
  45. if search != "" {
  46. query["$or"] = []interface{}{
  47. map[string]interface{}{"s_code": map[string]interface{}{"$regex": search}},
  48. map[string]interface{}{"s_modify": map[string]interface{}{"$regex": search}},
  49. map[string]interface{}{"s_site": map[string]interface{}{"$regex": search}},
  50. map[string]interface{}{"s_channel": map[string]interface{}{"$regex": search}},
  51. }
  52. }
  53. sort := `{"%s":%d}`
  54. orderIndex := t.GetString("order[0][column]")
  55. orderName := t.GetString(fmt.Sprintf("columns[%s][data]", orderIndex))
  56. orderType := 1
  57. if t.GetString("order[0][dir]") != "asc" {
  58. orderType = -1
  59. }
  60. sort = fmt.Sprintf(sort, orderName, orderType)
  61. if orderIndex == "9" { //按下载/下限排序时 先按完成时间排序
  62. sorta := strings.Replace(sort, "{", "", -1)
  63. sortb := strings.Replace(sorta, "}", "", -1)
  64. //sort = `{"l_complete":1,` + sortb + `}`
  65. sort = `{` + sortb + `,"l_complete":1}`
  66. }
  67. qu.Debug("query:", query, sort)
  68. task, _ := util.MgoEB.Find("newtask", query, sort, nil, false, start, limit)
  69. count := util.MgoEB.Count("newtask", query)
  70. page := start / 10
  71. if len(*task) > 0 {
  72. for k, v := range *task {
  73. v["num"] = k + 1 + page*10
  74. v["encode"] = sp.Se.Encode2Hex(fmt.Sprint(v["s_code"]))
  75. //根据code查询luaconfig
  76. lua, _ := util.MgoEB.FindOneByField("luaconfig", map[string]interface{}{"code": qu.ObjToString(v["s_code"])}, `{"href":1}`)
  77. if len(*lua) > 0 {
  78. v["href"] = (*lua)["href"]
  79. } else {
  80. v["href"] = "javascript:void(0)"
  81. }
  82. }
  83. }
  84. t.ServeJson(map[string]interface{}{"draw": draw, "data": task, "recordsFiltered": count, "recordsTotal": count})
  85. }
  86. } else {
  87. t.Write("您没有导入任务的权限")
  88. }
  89. }
  90. // 编辑 查看任务
  91. func (t *Task) TaskEdit(ids string) error {
  92. auth := qu.IntAll(t.GetSession("auth"))
  93. id := strings.Split(ids, "__")[0]
  94. param := strings.Split(ids, "__")[1]
  95. if t.Method() == "GET" {
  96. query := map[string]interface{}{
  97. "_id": mongodb.StringTOBsonId(id),
  98. }
  99. task, _ := util.MgoEB.FindOne("newtask", query)
  100. if task != nil && len(*task) > 0 {
  101. (*task)["l_comeintime"] = time.Unix((*task)["l_comeintime"].(int64), 0).Format("2006-01-02 15:04:05")
  102. (*task)["l_complete"] = time.Unix((*task)["l_complete"].(int64), 0).Format("2006-01-02 15:04:05")
  103. if (*task)["a_mrecord"] != nil {
  104. mrecord := qu.ObjArrToMapArr((*task)["a_mrecord"].([]interface{}))
  105. if mrecord != nil && len(mrecord) > 0 {
  106. for _, v := range mrecord {
  107. v["l_mrecord_comeintime"] = time.Unix(qu.Int64All(v["l_mrecord_comeintime"]), 0).Format("2006-01-02 15:04:05")
  108. v["l_mrecord_complete"] = time.Unix(qu.Int64All(v["l_mrecord_complete"]), 0).Format("2006-01-02 15:04:05")
  109. }
  110. }
  111. }
  112. if (*task)["a_check"] != nil {
  113. check := qu.ObjArrToMapArr((*task)["a_check"].([]interface{}))
  114. if check != nil && len(check) > 0 {
  115. for _, v := range check {
  116. v["l_check_checkTime"] = time.Unix(qu.Int64All(v["l_check_checkTime"]), 0).Format("2006-01-02 15:04:05")
  117. }
  118. }
  119. }
  120. t.T["encode"] = sp.Se.Encode2Hex(fmt.Sprint((*task)["s_code"]))
  121. t.T["id"] = id
  122. t.T["task"] = *task
  123. t.T["param"] = param
  124. if t.GetSession(id) == "" || t.GetSession(id) == nil {
  125. t.T["xgTime"] = time.Unix(time.Now().Unix(), 0).Format("2006-01-02 15:04:05")
  126. } else {
  127. t.T["xgTime"] = qu.ObjToString(t.GetSession(id))
  128. }
  129. t.DelSession(id)
  130. if auth == util.Role_Admin {
  131. return t.Render("taskedit.html", &t.T)
  132. } else if auth == util.Role_Dev {
  133. return t.Render("mytaskedit.html", &t.T)
  134. } else if auth == util.Role_Examine {
  135. return t.Render("auditedit.html", &t.T)
  136. }
  137. }
  138. }
  139. return nil
  140. }
  141. func (t *Task) TaskTagCode() {
  142. defer qu.Catch()
  143. taskId := t.GetString("id")
  144. code := t.GetString("code")
  145. stype := t.GetString("stype")
  146. qu.Debug(taskId, code, stype)
  147. //关闭任务
  148. update := map[string]interface{}{
  149. "$set": map[string]interface{}{
  150. "i_state": 6,
  151. "l_checktime": time.Now().Unix(),
  152. },
  153. }
  154. util.MgoEB.UpdateById("newtask", taskId, update)
  155. //标记爬虫
  156. /*
  157. tags:{任务类型:标记时间}
  158. */
  159. update = map[string]interface{}{
  160. "$set": map[string]interface{}{
  161. "codetags." + stype: time.Now().Unix(),
  162. },
  163. }
  164. util.MgoEB.Update("luaconfig", map[string]interface{}{"code": code}, update, false, false)
  165. t.Write("y")
  166. }
  167. func getModifyUsers() []map[string]interface{} {
  168. query := map[string]interface{}{
  169. "i_auth": 1,
  170. "i_delete": 0,
  171. }
  172. user, _ := util.MgoEB.Find("user", query, nil, nil, false, -1, -1)
  173. return *user
  174. }
  175. func queryCriteria(userid, platform string, taskState, event, stype int) (query map[string]interface{}) {
  176. query = map[string]interface{}{}
  177. if userid != "" && userid != "-1" {
  178. query["s_modifyid"] = userid
  179. }
  180. if platform != "" && platform != "-1" {
  181. query["s_platform"] = platform
  182. }
  183. if taskState >= 0 {
  184. query["i_state"] = taskState
  185. }
  186. if event >= 0 {
  187. query["i_event"] = event
  188. }
  189. if stype >= 0 {
  190. query["s_type"] = strconv.Itoa(stype)
  191. }
  192. return
  193. }