task.go 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. package controller
  2. import (
  3. "strconv"
  4. "github.com/QuantumNous/new-api/common"
  5. "github.com/QuantumNous/new-api/constant"
  6. "github.com/QuantumNous/new-api/dto"
  7. "github.com/QuantumNous/new-api/model"
  8. "github.com/QuantumNous/new-api/relay"
  9. "github.com/QuantumNous/new-api/service"
  10. "github.com/QuantumNous/new-api/types"
  11. "github.com/gin-gonic/gin"
  12. )
  13. // UpdateTaskBulk 薄入口,实际轮询逻辑在 service 层
  14. func UpdateTaskBulk() {
  15. service.TaskPollingLoop()
  16. }
  17. func GetAllTask(c *gin.Context) {
  18. pageInfo := common.GetPageQuery(c)
  19. startTimestamp, _ := strconv.ParseInt(c.Query("start_timestamp"), 10, 64)
  20. endTimestamp, _ := strconv.ParseInt(c.Query("end_timestamp"), 10, 64)
  21. // 解析其他查询参数
  22. queryParams := model.SyncTaskQueryParams{
  23. Platform: constant.TaskPlatform(c.Query("platform")),
  24. TaskID: c.Query("task_id"),
  25. Status: c.Query("status"),
  26. Action: c.Query("action"),
  27. StartTimestamp: startTimestamp,
  28. EndTimestamp: endTimestamp,
  29. ChannelID: c.Query("channel_id"),
  30. }
  31. items := model.TaskGetAllTasks(pageInfo.GetStartIdx(), pageInfo.GetPageSize(), queryParams)
  32. total := model.TaskCountAllTasks(queryParams)
  33. pageInfo.SetTotal(int(total))
  34. pageInfo.SetItems(tasksToDto(items, true))
  35. common.ApiSuccess(c, pageInfo)
  36. }
  37. func GetUserTask(c *gin.Context) {
  38. pageInfo := common.GetPageQuery(c)
  39. userId := c.GetInt("id")
  40. startTimestamp, _ := strconv.ParseInt(c.Query("start_timestamp"), 10, 64)
  41. endTimestamp, _ := strconv.ParseInt(c.Query("end_timestamp"), 10, 64)
  42. queryParams := model.SyncTaskQueryParams{
  43. Platform: constant.TaskPlatform(c.Query("platform")),
  44. TaskID: c.Query("task_id"),
  45. Status: c.Query("status"),
  46. Action: c.Query("action"),
  47. StartTimestamp: startTimestamp,
  48. EndTimestamp: endTimestamp,
  49. }
  50. items := model.TaskGetAllUserTask(userId, pageInfo.GetStartIdx(), pageInfo.GetPageSize(), queryParams)
  51. total := model.TaskCountAllUserTask(userId, queryParams)
  52. pageInfo.SetTotal(int(total))
  53. pageInfo.SetItems(tasksToDto(items, false))
  54. common.ApiSuccess(c, pageInfo)
  55. }
  56. func tasksToDto(tasks []*model.Task, fillUser bool) []*dto.TaskDto {
  57. var userIdMap map[int]*model.UserBase
  58. if fillUser {
  59. userIdMap = make(map[int]*model.UserBase)
  60. userIds := types.NewSet[int]()
  61. for _, task := range tasks {
  62. userIds.Add(task.UserId)
  63. }
  64. for _, userId := range userIds.Items() {
  65. cacheUser, err := model.GetUserCache(userId)
  66. if err == nil {
  67. userIdMap[userId] = cacheUser
  68. }
  69. }
  70. }
  71. result := make([]*dto.TaskDto, len(tasks))
  72. for i, task := range tasks {
  73. if fillUser {
  74. if user, ok := userIdMap[task.UserId]; ok {
  75. task.Username = user.Username
  76. }
  77. }
  78. result[i] = relay.TaskModel2Dto(task)
  79. }
  80. return result
  81. }