plan.go 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178
  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. "lims-extend/util"
  9. "lims-extend/vo"
  10. )
  11. func ShowPlans(c *gin.Context) {
  12. db := common.GetDB()
  13. var plans []model.Plan
  14. db.Model(&model.Plan{}).Where("plan.delete <> 1").Find(&plans)
  15. response.Success(c, gin.H{"planlists": plans}, "success")
  16. }
  17. func ShowPlan(c *gin.Context) {
  18. Id := c.Params.ByName("id")
  19. db := common.GetDB()
  20. var plan model.Plan
  21. if err := db.Model(&model.Plan{}).Where("id = ?", Id).First(&plan).Error; err != nil {
  22. response.Fail(c, nil, "结果不存在")
  23. return
  24. }
  25. if plan.Delete == 1 {
  26. response.Fail(c, nil, "当前计划已经被删除")
  27. return
  28. }
  29. var file model.File
  30. db.Model(&model.File{}).Where("id = ?", plan.StatementFile).First(&file)
  31. var user model.User
  32. db.Model(&model.User{}).Where("id = ?", plan.CreatorId).First(&user)
  33. response.Success(c, gin.H{
  34. "plan": plan,
  35. "creator": user,
  36. "file": file,
  37. }, "success")
  38. }
  39. // TakePlan 领取测试计划并生成测试任务
  40. // 方法 POST
  41. // 传入参数 测试计划ID,提测人ID
  42. func TakePlan(c *gin.Context) {
  43. planId := c.Params.ByName("planId")
  44. username := c.Params.ByName("username")
  45. // 获取测试计划信息
  46. db := common.GetDB()
  47. var plan model.Plan
  48. if err := db.Model(&model.Plan{}).Where("id = ?", planId).First(&plan).Error; err != nil {
  49. response.Fail(c, nil, "测试计划不存在")
  50. return
  51. }
  52. // 判断测试计划是否被删除
  53. if plan.Delete == 1 {
  54. response.Fail(c, nil, "测试计划已被删除")
  55. return
  56. }
  57. // 获取说明文件信息
  58. var file model.File
  59. db.Model(&model.File{}).Where("id = ?", plan.StatementFile).First(&file)
  60. // 获取提测人信息
  61. var user model.User
  62. if err := db.Model(&model.User{}).Where("username = ?", username).First(&user).Error; err != nil {
  63. response.Fail(c, nil, "提测人不存在")
  64. return
  65. }
  66. // 准备任务信息
  67. task := model.Task{
  68. ID: util.GetNextId(db, "task"),
  69. Title: plan.Title + "_" + user.Username,
  70. State: 0,
  71. Description: plan.Description,
  72. StateFile: plan.StatementFile,
  73. CaseFile: "",
  74. CaseAll: 0,
  75. CaseNotExecute: 0,
  76. CaseSuccess: 0,
  77. CaseFail: 0,
  78. CreatedAt: model.Time{},
  79. UpdatedAt: model.Time{},
  80. Delete: 0,
  81. PlanId: plan.Id,
  82. ExecutorId: user.ID,
  83. }
  84. // 判断任务是否被重复领取
  85. var dupTask model.Task
  86. db.Model(&model.Task{}).Where("title = ?", task.Title).First(&dupTask)
  87. if dupTask.Title != "" {
  88. response.Fail(c, nil, user.Name+"已领取当前测试任务,请勿重复领取")
  89. return
  90. }
  91. // 从数据库中创建task信息
  92. if err := db.Create(&task).Error; err != nil {
  93. response.Fail(c, nil, "测试任务创建失败")
  94. return
  95. }
  96. response.Success(c, gin.H{"task": task}, "success")
  97. }
  98. func AssignPlan(c *gin.Context) {
  99. // 获取planId 以及 groupIdList
  100. var groupVo vo.GroupVo
  101. c.ShouldBind(&groupVo)
  102. db := common.GetDB()
  103. // 检查plan是否存在
  104. var plan model.Plan
  105. if err := db.Model(&model.Plan{}).Where("id = ?", groupVo.PlanId).First(&plan).Error; err != nil {
  106. response.Fail(c, nil, "计划不存在")
  107. return
  108. }
  109. if plan.Delete == 1 {
  110. response.Fail(c, nil, "当前计划已经被删除")
  111. return
  112. }
  113. // 检查groupList中group是否存在/被删除
  114. for _, groupId := range groupVo.GroupIdList {
  115. var group model.Group
  116. if err := db.Model(&model.Group{}).Where("id = ?", groupId).First(&group).Error; err != nil {
  117. response.Fail(c, nil, fmt.Sprintf("团队ID[%s]不存在", groupId))
  118. return
  119. }
  120. // 判断group是否被删除
  121. if group.Delete == 1 {
  122. response.Fail(c, nil, fmt.Sprintf("团队ID[%s]已被删除", groupId))
  123. return
  124. }
  125. }
  126. // 向group分配plan
  127. for _, groupId := range groupVo.GroupIdList {
  128. plan2group := model.Plan2Group{
  129. PlanId: groupVo.PlanId,
  130. GroupId: groupId,
  131. }
  132. // 重复分配校验
  133. if err := db.Model(&model.Plan2Group{}).Where("group_id = ?", groupId).
  134. First(&model.Plan2Group{}).Error; err == nil {
  135. response.Fail(c, nil, "分配失败,小组已被该计划分配")
  136. return
  137. }
  138. if err := db.Model(&model.Plan2Group{}).Create(&plan2group).Error; err != nil {
  139. response.Fail(c, nil, "分配失败")
  140. return
  141. }
  142. }
  143. response.Success(c, gin.H{"groupIdList": groupVo}, "分配成功")
  144. }
  145. func GetPlanAssignedGroups(c *gin.Context) {
  146. db := common.GetDB()
  147. planId := c.Params.ByName("planId")
  148. var plan2groups []model.Plan2Group
  149. db.Model(&model.Plan2Group{}).Where("plan_id = ?", planId).Find(&plan2groups)
  150. var groupList []model.Group
  151. for _, group := range plan2groups {
  152. var singleGroup model.Group
  153. db.Model(&model.Group{}).Where("id = ?", group.GroupId).First(&singleGroup)
  154. groupList = append(groupList, singleGroup)
  155. }
  156. response.Success(c, gin.H{"groupList": groupList}, "success")
  157. }