task.go 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216
  1. //任务管理
  2. //编辑、启动、停止、测试
  3. package task
  4. import (
  5. . "jy/admin"
  6. "jy/extract"
  7. . "jy/mongodbutil"
  8. "net/http"
  9. qu "qfw/util"
  10. "strings"
  11. "time"
  12. "github.com/gin-contrib/sessions"
  13. "github.com/gin-gonic/gin"
  14. )
  15. func init() {
  16. //首页
  17. Admin.GET("/task", func(c *gin.Context) {
  18. c.HTML(200, "task_list.html", nil)
  19. })
  20. Admin.GET("/taskclear", func(c *gin.Context) {
  21. c.HTML(200, "task_clearlist.html", nil)
  22. })
  23. //获取任务列表
  24. Admin.POST("/task/list", func(c *gin.Context) {
  25. data, _ := Mgo.Find("task", ``, `{"_id":-1}`, nil, false, -1, -1)
  26. for _, v := range *data {
  27. _id := qu.BsonIdToSId(v["_id"])
  28. tmp := extract.TaskList[_id]
  29. if tmp != nil {
  30. v["runstatus"] = tmp.IsRun
  31. } else {
  32. v["runstatus"] = false
  33. }
  34. }
  35. c.JSON(200, gin.H{"data": data})
  36. })
  37. //新增任务、编辑任务
  38. Admin.POST("/task/save", func(c *gin.Context) {
  39. //判断存储配置是否完整
  40. s_mgosavecoll, _ := c.GetPostForm("s_mgosavecoll")
  41. strs := strings.Split(s_mgosavecoll, "/")
  42. if len(strs) < 3 {
  43. c.JSON(200, gin.H{"rep": false, "msg": "保存表输入地址不正确!"})
  44. return
  45. }
  46. data := GetPostForm(c)
  47. _id, _ := c.GetPostForm("_id")
  48. b := false
  49. if _id == "" {
  50. data["l_createtime"] = time.Now().Unix()
  51. data["s_username"] = sessions.Default(c).Get("username")
  52. b = Mgo.Save("task", data) != ""
  53. } else {
  54. data["l_lasttime"] = time.Now().Unix()
  55. b = Mgo.Update("task", `{"_id":"`+_id+`"}`, map[string]interface{}{
  56. "$set": data,
  57. }, false, false)
  58. }
  59. c.JSON(200, gin.H{"rep": b})
  60. })
  61. //获取版本列表
  62. Admin.POST("/task/getversion", func(c *gin.Context) {
  63. list, b := Mgo.Find("version", `{"delete":false}`, `{"_id":-1}`, `{"version":1}`, false, -1, -1)
  64. if b && list != nil {
  65. for _, v := range *list {
  66. v["_id"] = v["version"]
  67. v["s_name"] = v["version"]
  68. }
  69. }
  70. c.JSON(200, gin.H{"data": list})
  71. })
  72. //获取清理版本列表
  73. Admin.POST("/task/getclearversions", func(c *gin.Context) {
  74. list, b := Mgo.Find("clearversion", `{"delete":false}`, `{"_id":-1}`, `{"clearversion":1}`, false, -1, -1)
  75. if b && list != nil {
  76. for _, v := range *list {
  77. v["_id"] = v["clearversion"]
  78. v["s_name"] = v["clearversion"]
  79. }
  80. }
  81. c.JSON(200, gin.H{"data": list})
  82. })
  83. //获取任务名称
  84. Admin.POST("/task/gettaskname", func(c *gin.Context) {
  85. list, b := Mgo.Find("task", `{}`, `{"_id":-1}`, `{"s_taskname":1}`, false, -1, -1)
  86. if b && list != nil {
  87. for _, v := range *list {
  88. v["s_name"] = v["s_taskname"]
  89. }
  90. }
  91. c.JSON(200, gin.H{"data": list})
  92. })
  93. //任务测试
  94. Admin.POST("/task/test", func(c *gin.Context) {
  95. startid := strings.TrimSpace(c.PostForm("startid"))
  96. num := strings.TrimSpace(c.PostForm("num"))
  97. taskid := strings.TrimSpace(c.PostForm("taskid"))
  98. resultcoll := strings.TrimSpace(c.PostForm("resultcoll"))
  99. trackcoll := strings.TrimSpace(c.PostForm("trackcoll"))
  100. version, _ := Mgo.FindById("task", taskid, `{"s_version":1}`)
  101. b := extract.StartExtractTestTask(taskid, startid, num, resultcoll, trackcoll)
  102. if b { //保存结果表和日志表
  103. data := make(map[string]interface{})
  104. data["resultcoll"] = resultcoll
  105. data["trackcoll"] = trackcoll
  106. data["version"] = (*version)["s_version"]
  107. Mgo.Update("tasktestlog", `{"resultcoll":"`+resultcoll+`","trackcoll":"`+trackcoll+`"}`, map[string]interface{}{
  108. "$set": data,
  109. }, true, false)
  110. }
  111. c.JSON(200, gin.H{"rep": b, "version": (*version)["s_version"]})
  112. })
  113. //启动任务
  114. Admin.POST("/task/start", func(c *gin.Context) {
  115. _id, _ := c.GetPostForm("_id")
  116. b := extract.StartExtractTaskId(_id)
  117. c.JSON(200, gin.H{"rep": b})
  118. })
  119. //停止任务
  120. Admin.POST("/task/stop", func(c *gin.Context) {
  121. _id, _ := c.GetPostForm("_id")
  122. b := extract.StopExtractTaskId(_id)
  123. c.JSON(200, gin.H{"rep": b})
  124. })
  125. //查询任务测试的表信息
  126. Admin.POST("/task/gettasktestlog", func(c *gin.Context) {
  127. data, _ := Mgo.Find("tasktestlog", nil, `{"_id":-1}`, nil, false, -1, -1)
  128. c.JSON(200, gin.H{"data": data})
  129. })
  130. //抽取导出相关
  131. Admin.GET("/task/export", func(c *gin.Context) {
  132. list, b := Mgo.Find("version", `{"delete":false}`, `{"_id":-1}`, `{"version":1}`, false, -1, -1)
  133. if b && list != nil {
  134. for _, v := range *list {
  135. v["_id"] = qu.BsonIdToSId(v["_id"])
  136. v["s_name"] = v["version"]
  137. }
  138. }
  139. c.HTML(
  140. http.StatusOK, "task_export.html",
  141. gin.H{"vlist": list},
  142. )
  143. })
  144. Admin.POST("/task/export/data", func(c *gin.Context) {
  145. data, _ := Mgo.Find("task_export", `{}`, `{"_id":-1}`, nil, false, -1, -1)
  146. c.JSON(200, gin.H{"data": data})
  147. })
  148. Admin.POST("task/export/save", func(c *gin.Context) {
  149. _id, _ := c.GetPostForm("_id")
  150. name, _ := c.GetPostForm("name")
  151. v1id, _ := c.GetPostForm("v1")
  152. v2id, _ := c.GetPostForm("v2")
  153. v1name, _ := c.GetPostForm("v1name")
  154. v2name, _ := c.GetPostForm("v2name")
  155. dbaddr, _ := c.GetPostForm("dbaddr")
  156. dbname, _ := c.GetPostForm("dbname")
  157. query, _ := c.GetPostForm("query")
  158. table, _ := c.GetPostForm("table")
  159. limit, _ := c.GetPostForm("limit")
  160. tmpfields, _ := c.GetPostFormMap("fields")
  161. fields := []string{}
  162. for _, v := range tmpfields {
  163. fields = append(fields, v)
  164. }
  165. data := map[string]interface{}{
  166. "name": name,
  167. "v1id": v1id, "v1name": v1name, "v2id": v2id, "v2name": v2name,
  168. "dbaddr": dbaddr, "dbname": dbname, "table": table,
  169. "query": query, "limit": limit, "fields": fields,
  170. }
  171. if _id != "" {
  172. Mgo.UpdateById("task_export", _id, map[string]interface{}{"$set": data})
  173. } else {
  174. data["state"] = 0 //0待执行,1已完成
  175. data["intime"] = time.Now().Unix()
  176. Mgo.Save("task_export", data)
  177. }
  178. c.JSON(200, gin.H{"rep": true})
  179. })
  180. Admin.POST("/task/export/del", func(c *gin.Context) {
  181. _id, _ := c.GetPostForm("_id")
  182. b := Mgo.Del("task_export", `{"_id":"`+_id+`"}`)
  183. c.JSON(200, gin.H{"rep": b})
  184. })
  185. //清理任务相关
  186. //获取任务列表
  187. Admin.POST("/cleartask/list", func(c *gin.Context) {
  188. data, _ := Mgo.Find("cleartask", ``, `{"_id":-1}`, nil, false, -1, -1)
  189. c.JSON(200, gin.H{"data": data})
  190. })
  191. //新增任务、编辑任务
  192. Admin.POST("/cleartask/save", func(c *gin.Context) {
  193. //判断存储配置是否完整
  194. data := GetPostForm(c)
  195. _id, _ := c.GetPostForm("_id")
  196. b := false
  197. if _id == "" {
  198. data["l_createtime"] = time.Now().Unix()
  199. data["s_username"] = sessions.Default(c).Get("username")
  200. b = Mgo.Save("cleartask", data) != ""
  201. } else {
  202. data["l_lasttime"] = time.Now().Unix()
  203. b = Mgo.Update("cleartask", `{"_id":"`+_id+`"}`, map[string]interface{}{
  204. "$set": data,
  205. }, false, false)
  206. }
  207. c.JSON(200, gin.H{"rep": b})
  208. })
  209. }