Browse Source

实现了任务分配给班级的功能

bigcat 2 years ago
parent
commit
4957cff770
6 changed files with 105 additions and 1 deletions
  1. 2 1
      .gitignore
  2. 71 0
      controller/plan.go
  3. 14 0
      model/group.go
  4. 10 0
      model/plan.go
  5. 2 0
      router.go
  6. 6 0
      vo/groupVo.go

+ 2 - 1
.gitignore

@@ -1,3 +1,4 @@
 /main
 /main.exe
-/lims-extend.zip
+/lims-extend.zip
+/config/application_bak.yml

+ 71 - 0
controller/plan.go

@@ -1,11 +1,13 @@
 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) {
@@ -105,3 +107,72 @@ func TakePlan(c *gin.Context) {
 
 	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")
+
+}

+ 14 - 0
model/group.go

@@ -0,0 +1,14 @@
+package model
+
+type Group struct {
+	ID        string `json:"id" gorm:"type:varchar(128);not null"`
+	Name      string `json:"name" gorm:"type:varchar(128);not null"`
+	Code      string `json:"code" gorm:"type:varchar(12);not null"`
+	Delete    int    `gorm:"type:tinyint(1);not null" json:"delete"`
+	CreatedAt Time   `json:"created_at" gorm:"column:create_time;type:datetime default CURRENT_TIMESTAMP"`
+	UpdatedAt Time   `json:"updated_at" gorm:"column:update_time;type:datetime default CURRENT_TIMESTAMP"`
+}
+
+func (Group) TableName() string {
+	return "group"
+}

+ 10 - 0
model/plan.go

@@ -17,3 +17,13 @@ type Plan struct {
 func (Plan) TableName() string {
 	return "plan"
 }
+
+type Plan2Group struct {
+	ID      uint   `gorm:"primary_key;type:int(11) auto_increment"`
+	PlanId  string `gorm:"column:plan_id"`
+	GroupId string `gorm:"column:group_id"`
+}
+
+func (Plan2Group) TableName() string {
+	return "plan_groups"
+}

+ 2 - 0
router.go

@@ -12,6 +12,8 @@ func CollectRoute(r *gin.Engine) *gin.Engine {
 		plan.GET("lists", controller.ShowPlans)
 		plan.GET(":id", controller.ShowPlan)
 		plan.POST("take/:planId/:username", controller.TakePlan)
+		plan.POST("assign", controller.AssignPlan)
+		plan.GET("assign/:planId", controller.GetPlanAssignedGroups)
 	}
 	return r
 }

+ 6 - 0
vo/groupVo.go

@@ -0,0 +1,6 @@
+package vo
+
+type GroupVo struct {
+	PlanId      string   `json:"planId"`
+	GroupIdList []string `json:"groupIdList"`
+}