Browse Source

根据11月6号日之后的讨论做了一系列变更

bigcat 2 years ago
parent
commit
d29bda9832
5 changed files with 135 additions and 4 deletions
  1. 49 2
      controller/plan.go
  2. 20 0
      controller/software.go
  3. 42 0
      controller/task.go
  4. 12 0
      model/software.go
  5. 12 2
      router.go

+ 49 - 2
controller/plan.go

@@ -158,8 +158,11 @@ func AssignPlan(c *gin.Context) {
 			return
 		}
 	}
-	// 向group分配plan
 
+	// 错误信息列表
+	var errorTaskLists []string
+
+	// 向group分配plan
 	for _, groupId := range groupVo.GroupIdList {
 		plan2group := model.Plan2Group{
 			PlanId:  groupVo.PlanId,
@@ -177,8 +180,52 @@ func AssignPlan(c *gin.Context) {
 			response.Fail(c, nil, "分配失败")
 			return
 		}
+
+		// 向组内的人员分配Task实体
+		// 获取组内人员ID列表
+		var group2users []model.Group2Users
+		db.Model(&model.Group2Users{}).Where("group_id = ?", groupId).Find(&group2users)
+		for _, item := range group2users {
+			// 准备任务信息
+			task := model.Task{
+				ID:             util.GetNextId(db, "task"),
+				Title:          plan.Title,
+				State:          3, //待领取状态
+				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:     item.UserId,
+			}
+
+			// 判断任务是否被重复分配, 同时生成分配失败的Task的错误列表及其错误信息
+			var dupTask model.Task
+
+			db.Model(&model.Task{}).Where("plan_id = ? and executor_id = ?", plan.Id, item.UserId).First(&dupTask)
+			if dupTask.Title != "" {
+				errorTaskLists = append(errorTaskLists, fmt.Sprintf("用户ID[%s]已被分配当前测试任务", item.UserId))
+				continue
+			}
+
+			// 正式开始从数据库中创建Task表项, 并记录错误信息
+			if err := db.Create(&task).Error; err != nil {
+				errorTaskLists = append(errorTaskLists, fmt.Sprintf("用户ID为[%s]的测试任务创建失败,未知数据库错误", item.UserId))
+				continue
+			}
+		}
+
 	}
-	response.Success(c, gin.H{"groupIdList": groupVo}, "分配成功")
+	response.Success(c, gin.H{
+		"groupIdList": groupVo,
+		"errorList":   errorTaskLists,
+	}, "分配成功")
 }
 
 // GetPlanAssignedGroups 获取指定Plan被分配的小组信息

+ 20 - 0
controller/software.go

@@ -0,0 +1,20 @@
+package controller
+
+import (
+	"github.com/gin-gonic/gin"
+	"lims-extend/common"
+	"lims-extend/model"
+	"lims-extend/response"
+)
+
+func ShowRelatedSoftwares(c *gin.Context) {
+	db := common.GetDB()
+	userId := c.Params.ByName("userId")
+	var softwares []model.Software
+	db.Raw("SELECT DISTINCT software.`id`,software.`name`,software.`type`,software.`report_file`,"+
+		"software.`create_time`,software.`update_time`,software.`delete`,software.`creator_id` FROM task,plan,software"+
+		" WHERE task.plan_id = plan.id and plan.software_id = software.id and "+
+		"task.executor_id = ? and task.`delete` <> 1 and software.`delete` <> 1 order by software.`create_time` desc", userId).Find(&softwares)
+
+	response.Success(c, gin.H{"softwares": softwares}, "success")
+}

+ 42 - 0
controller/task.go

@@ -0,0 +1,42 @@
+package controller
+
+import (
+	"github.com/gin-gonic/gin"
+	"lims-extend/common"
+	"lims-extend/model"
+	"lims-extend/response"
+)
+
+// TakeTask 领取任务
+// 传入参数 taskId
+
+func TakeTask(c *gin.Context) {
+	db := common.GetDB()
+	// 获取taskId
+	taskId := c.Params.ByName("taskId")
+	// 查看task是否存在
+	var task model.Task
+	if err := db.Model(&model.Task{}).Where("id = ?", taskId).First(&task).Error; err != nil {
+		response.Fail(c, nil, "Task不存在,请检查")
+		return
+	}
+
+	// 查看task是否被重复领取
+	if task.State != 3 {
+		response.Fail(c, nil, "任务已被领取,请勿重新领取")
+		return
+	}
+
+	// 更新task的修改时间以及状态从 未领取 -> 未执行
+	task.UpdatedAt = model.Time{}
+	task.State = 0
+
+	// 提交修改至数据库
+	if err := db.Model(&model.Task{}).Select("UpdateAt", "State").
+		Where("id = ?", taskId).Updates(task).Error; err != nil {
+		response.Fail(c, nil, "任务领取失败")
+		return
+	}
+	response.Success(c, gin.H{"task": task}, "任务领取成功")
+
+}

+ 12 - 0
model/software.go

@@ -0,0 +1,12 @@
+package model
+
+type Software struct {
+	ID         string `json:"id" gorm:"type:varchar(128);not null"`
+	Name       string `json:"name" gorm:"type:varchar(128);not null"`
+	Type       string `json:"type" gorm:"type:varchar(20);not null"`
+	ReportFile string `json:"report_file" gorm:"column:report_file;type:longtext;not null"`
+	CreatorId  string `json:"creator_id" gorm:"column:creator_id;type:varchar(128);not null"`
+	Delete     int    `json:"delete" gorm:"type:tinyint(1);not null"`
+	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"`
+}

+ 12 - 2
router.go

@@ -3,13 +3,12 @@ package main
 import (
 	"github.com/gin-gonic/gin"
 	"lims-extend/controller"
-	"lims-extend/middleware"
 )
 
 func CollectRoute(r *gin.Engine) *gin.Engine {
 
 	plan := r.Group("/api/v-go/plan")
-	plan.Use(middleware.AuthMiddleware())
+	//plan.Use(middleware.AuthMiddleware())
 	{
 		plan.GET("lists/:userId", controller.ShowPlans)
 		plan.GET(":planId/:userId", controller.ShowPlan)
@@ -18,5 +17,16 @@ func CollectRoute(r *gin.Engine) *gin.Engine {
 		plan.GET("assign/:planId", controller.GetPlanAssignedGroups)
 		plan.GET("test", controller.Test)
 	}
+
+	task := r.Group("/api/v-go/task")
+	{
+		task.POST("take/:taskId", controller.TakeTask)
+	}
+
+	software := r.Group("/api/v-go/software")
+	{
+		software.GET("lists/:userId", controller.ShowRelatedSoftwares)
+
+	}
 	return r
 }