task.go 5.3 KB

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