plan.go 7.2 KB

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