package controller import ( "fmt" "github.com/gin-gonic/gin" "lims-extend/common" "lims-extend/model" "lims-extend/response" "lims-extend/util" "lims-extend/vo" ) func ShowPlans(c *gin.Context) { db := common.GetDB() var plans []model.Plan db.Model(&model.Plan{}).Where("plan.delete <> 1").Find(&plans) response.Success(c, gin.H{"planlists": plans}, "success") } func ShowPlan(c *gin.Context) { Id := c.Params.ByName("id") db := common.GetDB() var plan model.Plan if err := db.Model(&model.Plan{}).Where("id = ?", Id).First(&plan).Error; err != nil { response.Fail(c, nil, "结果不存在") return } if plan.Delete == 1 { response.Fail(c, nil, "当前计划已经被删除") return } var file model.File db.Model(&model.File{}).Where("id = ?", plan.StatementFile).First(&file) var user model.User db.Model(&model.User{}).Where("id = ?", plan.CreatorId).First(&user) response.Success(c, gin.H{ "plan": plan, "creator": user, "file": file, }, "success") } // TakePlan 领取测试计划并生成测试任务 // 方法 POST // 传入参数 测试计划ID,提测人ID func TakePlan(c *gin.Context) { planId := c.Params.ByName("planId") username := c.Params.ByName("username") // 获取测试计划信息 db := common.GetDB() var plan model.Plan if err := db.Model(&model.Plan{}).Where("id = ?", planId).First(&plan).Error; err != nil { response.Fail(c, nil, "测试计划不存在") return } // 判断测试计划是否被删除 if plan.Delete == 1 { response.Fail(c, nil, "测试计划已被删除") return } // 获取说明文件信息 var file model.File db.Model(&model.File{}).Where("id = ?", plan.StatementFile).First(&file) // 获取提测人信息 var user model.User if err := db.Model(&model.User{}).Where("username = ?", username).First(&user).Error; err != nil { response.Fail(c, nil, "提测人不存在") return } // 准备任务信息 task := model.Task{ ID: util.GetNextId(db, "task"), Title: plan.Title + "_" + user.Username, State: 0, Description: plan.Description, StateFile: plan.StatementFile, CaseFile: "", CaseAll: 0, CaseNotExecute: 0, CaseSuccess: 0, CaseFail: 0, CreatedAt: model.Time{}, UpdatedAt: model.Time{}, Delete: 0, PlanId: plan.Id, ExecutorId: user.ID, } // 判断任务是否被重复领取 var dupTask model.Task db.Model(&model.Task{}).Where("title = ?", task.Title).First(&dupTask) if dupTask.Title != "" { response.Fail(c, nil, user.Name+"已领取当前测试任务,请勿重复领取") return } // 从数据库中创建task信息 if err := db.Create(&task).Error; err != nil { response.Fail(c, nil, "测试任务创建失败") return } response.Success(c, gin.H{"task": task}, "success") } func AssignPlan(c *gin.Context) { // 获取planId 以及 groupIdList var groupVo vo.GroupVo c.ShouldBind(&groupVo) db := common.GetDB() // 检查plan是否存在 var plan model.Plan if err := db.Model(&model.Plan{}).Where("id = ?", groupVo.PlanId).First(&plan).Error; err != nil { response.Fail(c, nil, "计划不存在") return } if plan.Delete == 1 { response.Fail(c, nil, "当前计划已经被删除") return } // 检查groupList中group是否存在/被删除 for _, groupId := range groupVo.GroupIdList { var group model.Group if err := db.Model(&model.Group{}).Where("id = ?", groupId).First(&group).Error; err != nil { response.Fail(c, nil, fmt.Sprintf("团队ID[%s]不存在", groupId)) return } // 判断group是否被删除 if group.Delete == 1 { response.Fail(c, nil, fmt.Sprintf("团队ID[%s]已被删除", groupId)) return } } // 向group分配plan for _, groupId := range groupVo.GroupIdList { plan2group := model.Plan2Group{ PlanId: groupVo.PlanId, GroupId: groupId, } // 重复分配校验 if err := db.Model(&model.Plan2Group{}).Where("group_id = ?", groupId). First(&model.Plan2Group{}).Error; err == nil { response.Fail(c, nil, "分配失败,小组已被该计划分配") return } if err := db.Model(&model.Plan2Group{}).Create(&plan2group).Error; err != nil { response.Fail(c, nil, "分配失败") return } } response.Success(c, gin.H{"groupIdList": groupVo}, "分配成功") } func GetPlanAssignedGroups(c *gin.Context) { db := common.GetDB() planId := c.Params.ByName("planId") var plan2groups []model.Plan2Group db.Model(&model.Plan2Group{}).Where("plan_id = ?", planId).Find(&plan2groups) var groupList []model.Group for _, group := range plan2groups { var singleGroup model.Group db.Model(&model.Group{}).Where("id = ?", group.GroupId).First(&singleGroup) groupList = append(groupList, singleGroup) } response.Success(c, gin.H{"groupList": groupList}, "success") }