plan.go 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239
  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. userId := c.Params.ByName("userId")
  14. var plans []model.Plan
  15. //db.Model(&model.Plan{}).Where("plan.delete <> 1").Find(&plans)
  16. db.Model(&model.Plan{}).Joins("left join plan_groups on plan.id = plan_id ").
  17. Joins("left join group_users on plan_groups.group_id = group_users.group_id").
  18. Where("user_id = ? and plan.delete <> 1", userId).Distinct().Find(&plans)
  19. response.Success(c, gin.H{"planlists": plans}, "success")
  20. }
  21. func ShowPlan(c *gin.Context) {
  22. Id := c.Params.ByName("id")
  23. db := common.GetDB()
  24. var plan model.Plan
  25. if err := db.Model(&model.Plan{}).Where("id = ?", Id).First(&plan).Error; err != nil {
  26. response.Fail(c, nil, "结果不存在")
  27. return
  28. }
  29. if plan.Delete == 1 {
  30. response.Fail(c, nil, "当前计划已经被删除")
  31. return
  32. }
  33. var file model.File
  34. db.Model(&model.File{}).Where("id = ?", plan.StatementFile).First(&file)
  35. var user model.User
  36. db.Model(&model.User{}).Where("id = ?", plan.CreatorId).First(&user)
  37. response.Success(c, gin.H{
  38. "plan": plan,
  39. "creator": user,
  40. "file": file,
  41. }, "success")
  42. }
  43. // TakePlan 领取测试计划并生成测试任务
  44. // 方法 POST
  45. // 传入参数 测试计划ID,提测人ID
  46. func TakePlan(c *gin.Context) {
  47. planId := c.Params.ByName("planId")
  48. username := c.Params.ByName("username")
  49. // 获取测试计划信息
  50. db := common.GetDB()
  51. var plan model.Plan
  52. if err := db.Model(&model.Plan{}).Where("id = ?", planId).First(&plan).Error; err != nil {
  53. response.Fail(c, nil, "测试计划不存在")
  54. return
  55. }
  56. // 判断测试计划是否被删除
  57. if plan.Delete == 1 {
  58. response.Fail(c, nil, "测试计划已被删除")
  59. return
  60. }
  61. // 获取说明文件信息
  62. var file model.File
  63. db.Model(&model.File{}).Where("id = ?", plan.StatementFile).First(&file)
  64. // 获取提测人信息
  65. var user model.User
  66. if err := db.Model(&model.User{}).Where("username = ?", username).First(&user).Error; err != nil {
  67. response.Fail(c, nil, "提测人不存在")
  68. return
  69. }
  70. // 准备任务信息
  71. task := model.Task{
  72. ID: util.GetNextId(db, "task"),
  73. Title: plan.Title + "_" + user.Username,
  74. State: 0,
  75. Description: plan.Description,
  76. StateFile: plan.StatementFile,
  77. CaseFile: "",
  78. CaseAll: 0,
  79. CaseNotExecute: 0,
  80. CaseSuccess: 0,
  81. CaseFail: 0,
  82. CreatedAt: model.Time{},
  83. UpdatedAt: model.Time{},
  84. Delete: 0,
  85. PlanId: plan.Id,
  86. ExecutorId: user.ID,
  87. }
  88. // 判断任务是否被重复领取
  89. var dupTask model.Task
  90. db.Model(&model.Task{}).Where("title = ?", task.Title).First(&dupTask)
  91. if dupTask.Title != "" {
  92. response.Fail(c, nil, user.Name+"已领取当前测试任务,请勿重复领取")
  93. return
  94. }
  95. // 从数据库中创建task信息
  96. if err := db.Create(&task).Error; err != nil {
  97. response.Fail(c, nil, "测试任务创建失败")
  98. return
  99. }
  100. response.Success(c, gin.H{"task": task}, "success")
  101. }
  102. // AssignPlan 分配指定Plan给GroupList
  103. // 方法 POST
  104. // 传入参数 测试计划ID、GroupIdList
  105. func AssignPlan(c *gin.Context) {
  106. // 获取planId 以及 groupIdList
  107. var groupVo vo.GroupVo
  108. c.ShouldBind(&groupVo)
  109. db := common.GetDB()
  110. // 检查plan是否存在
  111. var plan model.Plan
  112. if err := db.Model(&model.Plan{}).Where("id = ?", groupVo.PlanId).First(&plan).Error; err != nil {
  113. response.Fail(c, nil, "计划不存在")
  114. return
  115. }
  116. if plan.Delete == 1 {
  117. response.Fail(c, nil, "当前计划已经被删除")
  118. return
  119. }
  120. // 检查groupList中group是否存在/被删除
  121. for _, groupId := range groupVo.GroupIdList {
  122. var group model.Group
  123. if err := db.Model(&model.Group{}).Where("id = ?", groupId).First(&group).Error; err != nil {
  124. response.Fail(c, nil, fmt.Sprintf("团队ID[%s]不存在", groupId))
  125. return
  126. }
  127. // 判断group是否被删除
  128. if group.Delete == 1 {
  129. response.Fail(c, nil, fmt.Sprintf("团队ID[%s]已被删除", groupId))
  130. return
  131. }
  132. }
  133. // 向group分配plan
  134. for _, groupId := range groupVo.GroupIdList {
  135. plan2group := model.Plan2Group{
  136. PlanId: groupVo.PlanId,
  137. GroupId: groupId,
  138. }
  139. // 重复分配校验
  140. if err := db.Model(&model.Plan2Group{}).Where("group_id = ?", groupId).
  141. First(&model.Plan2Group{}).Error; err == nil {
  142. response.Fail(c, nil, "分配失败,小组已被该计划分配")
  143. return
  144. }
  145. if err := db.Model(&model.Plan2Group{}).Create(&plan2group).Error; err != nil {
  146. response.Fail(c, nil, "分配失败")
  147. return
  148. }
  149. }
  150. response.Success(c, gin.H{"groupIdList": groupVo}, "分配成功")
  151. }
  152. // GetPlanAssignedGroups 获取指定Plan被分配的小组信息
  153. // 方法 GET
  154. // 传入参数 测试计划ID
  155. func GetPlanAssignedGroups(c *gin.Context) {
  156. db := common.GetDB()
  157. planId := c.Params.ByName("planId")
  158. var plan2groups []model.Plan2Group
  159. db.Model(&model.Plan2Group{}).Where("plan_id = ?", planId).Find(&plan2groups)
  160. var groupList []model.Group
  161. for _, group := range plan2groups {
  162. var singleGroup model.Group
  163. db.Model(&model.Group{}).Where("id = ?", group.GroupId).First(&singleGroup)
  164. groupList = append(groupList, singleGroup)
  165. }
  166. response.Success(c, gin.H{"groupList": groupList}, "success")
  167. }
  168. func Test(c *gin.Context) {
  169. response.Success(c, gin.H{"count": IsJoinedInCurrentPlan("TestLaboratory_V1_User_9", "TestLaboratory_V1_Plan_7")}, "success")
  170. }
  171. // GetPlanTotalUserAmount 获取当前计划总发包数
  172. // 需要参数planId
  173. func GetPlanTotalUserAmount(planId string) int {
  174. totalAmount := 0
  175. var plan2groups []model.Plan2Group
  176. db := common.GetDB()
  177. db.Model(&model.Plan2Group{}).Where("plan_id = ?", planId).Find(&plan2groups)
  178. for _, group := range plan2groups {
  179. totalAmount += GetGroupUserAmount(group.GroupId)
  180. }
  181. return totalAmount
  182. }
  183. // GetGroupUserAmount 获取当前组总用户数
  184. // 需要参数groupId
  185. func GetGroupUserAmount(groupId string) int {
  186. var count int64
  187. db := common.GetDB()
  188. db.Model(&model.Group2Users{}).Where("group_id = ?", groupId).Count(&count)
  189. return int(count)
  190. }
  191. // GetGroupUserAmount 获取指定计划对接包数量
  192. // 需要参数groupId
  193. func GetPlanTaskAmount(planId string) int {
  194. var count int64
  195. db := common.GetDB()
  196. db.Model(&model.Task{}).Where("plan_id = ?", planId).Count(&count)
  197. return int(count)
  198. }
  199. func IsJoinedInCurrentPlan(userId string, planId string) bool {
  200. var count int64
  201. db := common.GetDB()
  202. db.Model(&model.Task{}).Where("plan_id = ? and executor_id = ?", planId, userId).Count(&count)
  203. if count > 0 {
  204. return true
  205. } else {
  206. return false
  207. }
  208. }