task.go 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. package controller
  2. import (
  3. "fmt"
  4. "github.com/gin-gonic/gin"
  5. "lims-extend/common"
  6. "lims-extend/model"
  7. "lims-extend/response"
  8. )
  9. // TakeTask 领取任务
  10. // 传入参数 taskId
  11. func TakeTask(c *gin.Context) {
  12. db := common.GetDB()
  13. // 获取taskId
  14. taskId := c.Params.ByName("taskId")
  15. // 查看task是否存在
  16. var task model.Task
  17. if err := db.Model(&model.Task{}).Where("id = ?", taskId).First(&task).Error; err != nil {
  18. response.Fail(c, nil, "Task不存在,请检查")
  19. return
  20. }
  21. // 查看task是否被重复领取
  22. if task.State != 3 {
  23. response.Fail(c, nil, "任务已被领取,请勿重新领取")
  24. return
  25. }
  26. // 更新task的修改时间以及状态从 未领取 -> 未执行
  27. task.UpdatedAt = model.Time{}
  28. task.State = 0
  29. // 提交修改至数据库
  30. if err := db.Model(&model.Task{}).Select("UpdateAt", "State").
  31. Where("id = ?", taskId).Updates(task).Error; err != nil {
  32. response.Fail(c, nil, "任务领取失败")
  33. return
  34. }
  35. response.Success(c, gin.H{"task": task}, "任务领取成功")
  36. }
  37. func ShowTasks(c *gin.Context) {
  38. softwareId := c.Query("software_id")
  39. executorId := c.Query("worker_id")
  40. isJoined := c.Query("is_joined")
  41. db := common.GetDB()
  42. type result struct {
  43. ID string `json:"id"`
  44. CreatTime model.Time `json:"create_time" gorm:"column:create_time"`
  45. Creator string `json:"creator"`
  46. CreatorId string `json:"creator_id" gorm:"column:creator_id"`
  47. WorkerId string `json:"executor_id" gorm:"column:executor_id"`
  48. Worker string `json:"worker"`
  49. Description string `json:"description"`
  50. SoftwareName string `json:"software_name"`
  51. SoftwareId string `json:"software_id" gorm:"column:software_id"`
  52. State int `json:"state"`
  53. Title string `json:"title"`
  54. UpdateTime model.Time `json:"update_time" gorm:"column:update_time"`
  55. Version string `json:"version"`
  56. Type string `json:"type"`
  57. IsJoined bool `json:"is_joined"`
  58. }
  59. var res []result
  60. sql := "SELECT task.id, task.create_time,plan.creator_id,task.executor_id," +
  61. "plan.description,software_id,task.state,plan.title,task.update_time," +
  62. "plan.version,plan.type from task,plan WHERE task.plan_id = plan.id and" +
  63. " executor_id = ? %s %s"
  64. if isJoined == "true" {
  65. sql = fmt.Sprintf(sql, "and task.state <> 3", "%s")
  66. } else if isJoined == "false" {
  67. sql = fmt.Sprintf(sql, "and task.state = 3", "%s")
  68. } else if isJoined == "" {
  69. sql = fmt.Sprintf(sql, "%s", "")
  70. }
  71. if softwareId != "" {
  72. sql = fmt.Sprintf(sql, "and software_id = ?")
  73. db.Raw(sql, executorId, softwareId).Find(&res)
  74. } else {
  75. sql = fmt.Sprintf(sql, "")
  76. db.Raw(sql, executorId).Find(&res)
  77. }
  78. type UserResult struct {
  79. UserName string `gorm:"column:username"`
  80. }
  81. for i, v := range res {
  82. var creator UserResult
  83. var worker UserResult
  84. db.Model(&model.User{}).Where("id = ?", v.CreatorId).First(&creator)
  85. res[i].Creator = creator.UserName
  86. db.Model(&model.User{}).Where("id = ?", v.WorkerId).First(&worker)
  87. res[i].Worker = worker.UserName
  88. if v.State != 3 {
  89. res[i].IsJoined = true
  90. }
  91. var software model.Software
  92. db.Model(&model.Software{}).Where("id = ?", v.SoftwareId).First(&software)
  93. res[i].SoftwareName = software.Name
  94. }
  95. response.Success(c, gin.H{"taskList": res}, "success")
  96. }