ソースを参照

Merge remote-tracking branch 'origin/dev' into dev

2545307760@qq.com 1 年間 前
コミット
fe40304746

+ 17 - 0
server/api/v1/workflow/description.go

@@ -27,6 +27,23 @@ func (da *DescriptionApi) QueryDescriptionByProjectProcessId(c *gin.Context) {
 	response.OkWithData(description, c)
 	response.OkWithData(description, c)
 }
 }
 
 
+func (da *DescriptionApi) QueryDescriptionById(c *gin.Context) {
+	id := c.Query("descriptionId")
+	descriptionId, err := strconv.Atoi(id)
+	if err != nil {
+		response.FailWithMessage("参数错误", c)
+		global.GVA_LOG.Error("QueryDescriptionById ====== " + err.Error())
+		return
+	}
+	description, err := descriptionService.QueryDescriptionById(descriptionId)
+	if err != nil {
+		response.FailWithMessage("查询失败", c)
+		global.GVA_LOG.Error("QueryDescriptionById ====== " + err.Error())
+		return
+	}
+	response.OkWithData(description, c)
+}
+
 func (da *DescriptionApi) CreateDescription(c *gin.Context) {
 func (da *DescriptionApi) CreateDescription(c *gin.Context) {
 	var description dao.Description
 	var description dao.Description
 	err := c.ShouldBindJSON(&description)
 	err := c.ShouldBindJSON(&description)

+ 117 - 6
server/dao/description.go

@@ -1,6 +1,8 @@
 package dao
 package dao
 
 
-import "server/global"
+import (
+	"server/global"
+)
 
 
 type Description struct {
 type Description struct {
 	global.GVA_MODEL
 	global.GVA_MODEL
@@ -17,16 +19,17 @@ func (Description) TableName() string {
 }
 }
 
 
 func QueryDescriptionByProjectProcessId(projectProcessId int) (descriptions []Description, err error) {
 func QueryDescriptionByProjectProcessId(projectProcessId int) (descriptions []Description, err error) {
-	err = global.GVA_DB.Model(&Description{}).Where("projectProcessId=?", projectProcessId).Find(&descriptions).Error
+	err = global.GVA_DB.Model(&Description{}).Where("project_process_id=?", projectProcessId).Find(&descriptions).Error
 	return descriptions, err
 	return descriptions, err
 }
 }
 
 
-func (d Description) CreateDescription() error {
-	return global.GVA_DB.Create(&d).Error
+func QueryDescriptionById(id int) (description Description, err error) {
+	err = global.GVA_DB.Model(&Description{}).Where("id =?", id).First(&description).Error
+	return description, err
 }
 }
 
 
-func (d Description) Correcting() {
-
+func (d Description) CreateDescription() error {
+	return global.GVA_DB.Create(&d).Error
 }
 }
 
 
 func (d Description) UpdateDescription() error {
 func (d Description) UpdateDescription() error {
@@ -36,3 +39,111 @@ func (d Description) UpdateDescription() error {
 func (d Description) DeleteDescription() error {
 func (d Description) DeleteDescription() error {
 	return global.GVA_DB.Unscoped().Delete(&d).Error
 	return global.GVA_DB.Unscoped().Delete(&d).Error
 }
 }
+
+func ProcessOperate(projectProcess ProjectProcess, description Description) (err error) {
+	//当前节点
+	var currentNode Node
+	//下个节点
+	var lastNode Node
+	for _, node := range projectProcess.Process.Nodes {
+		if node.ID == projectProcess.Node.ID {
+			currentNode = node
+		}
+		if node.Order == currentNode.Order+1 {
+			lastNode = node
+		}
+
+	}
+	// 当是最后一步时进行通过的操作
+	if lastNode.Order == len(projectProcess.Process.Nodes) && description.ApprovalOpinion == "通过" {
+
+		// 审批通过后,修改所属项目流程的状态
+		err = global.GVA_DB.Model(&projectProcess).Update("state", 1).Error
+		if err != nil {
+			return err
+		}
+
+		// 审批通过后,修改所属项目的状态
+		err = global.GVA_DB.Model(&Project{}).Where("id = ?", projectProcess.ProjectId).Update("is_approve", 1).Error
+		if err != nil {
+			return err
+		}
+
+		//流程记录保存
+		err = description.CreateDescription()
+		if err != nil {
+			return err
+		}
+
+		return err
+	}
+
+	// 当是最后一步时进行打回的操作
+	if lastNode.Order == len(projectProcess.Process.Nodes) && description.ApprovalOpinion == "打回" {
+
+		//流程记录保存
+		err = description.CreateDescription()
+		if err != nil {
+			return err
+		}
+
+		return err
+	}
+
+	// 当是最后一步时进行拒绝的操作
+	if lastNode.Order == len(projectProcess.Process.Nodes) && description.ApprovalOpinion == "拒绝" {
+
+		// 审批通过后,修改所属项目流程的状态
+		err = global.GVA_DB.Model(&projectProcess).Update("state", 2).Error
+		if err != nil {
+			return err
+		}
+
+		//流程记录保存
+		err = description.CreateDescription()
+		if err != nil {
+			return err
+		}
+
+		return err
+	}
+
+	if currentNode.Order == lastNode.Order+1 && description.ApprovalOpinion == "通过" {
+		// 节点通过后,修改所属项目流程的当前节点为下个节点
+		err = global.GVA_DB.Model(&projectProcess).Update("current_node_order", currentNode.ID).Error
+		if err != nil {
+			return err
+		}
+
+		//流程记录保存
+		err = description.CreateDescription()
+		if err != nil {
+			return err
+		}
+
+		return err
+	}
+
+	if currentNode.Order == lastNode.Order && description.ApprovalOpinion == "拒绝" {
+		// 审批通过后,修改所属项目流程的状态
+		err = global.GVA_DB.Model(&projectProcess).Update("state", 2).Error
+		if err != nil {
+			return err
+		}
+
+		// 审批通过后,修改所属项目的状态
+		err = global.GVA_DB.Model(&Project{}).Where("id = ?", projectProcess.ProjectId).Update("is_approve", 1).Error
+		if err != nil {
+			return err
+		}
+
+		//流程记录保存
+		err = description.CreateDescription()
+		if err != nil {
+			return err
+		}
+
+		return err
+	}
+	return err
+}

+ 89 - 3
server/dao/project_process.go

@@ -14,6 +14,7 @@ type ProjectProcess struct {
 	Process            Process       `json:"process" form:"process" gorm:"foreignKey:ProcessApprovalId;references:id"`
 	Process            Process       `json:"process" form:"process" gorm:"foreignKey:ProcessApprovalId;references:id"`
 	ProjectType        string        `json:"projectType" form:"projectType" gorm:"comment:项目类型"`
 	ProjectType        string        `json:"projectType" form:"projectType" gorm:"comment:项目类型"`
 	Descriptions       []Description `json:"descriptions" form:"descriptions" gorm:"foreignKey:ProjectProcessId;"`
 	Descriptions       []Description `json:"descriptions" form:"descriptions" gorm:"foreignKey:ProjectProcessId;"`
+	State              int           `json:"isOver" form:"isOver" gorm:"comment:状态;default:0;"`
 }
 }
 
 
 func (ProjectProcess) TableName() string {
 func (ProjectProcess) TableName() string {
@@ -33,6 +34,27 @@ func QueryProjectApplicantList(limit, offset, applicant int) (projectProcesses [
 	}
 	}
 	err = db.Order("id desc").Limit(limit).Offset(offset).Preload("User").Preload("Node").Preload("Process").Preload("Descriptions").Find(&projectProcesses).Error
 	err = db.Order("id desc").Limit(limit).Offset(offset).Preload("User").Preload("Node").Preload("Process").Preload("Descriptions").Find(&projectProcesses).Error
 
 
+	for i, projectProcess := range projectProcesses {
+
+		var processNodes []ProcessNodes
+		err = global.GVA_DB.Model(&ProcessNodes{}).Where("process_id = ?", projectProcess.Process.ID).Find(&processNodes).Error
+		if err != nil {
+			return nil, 0, err
+		}
+		var nodes []Node
+		for _, node := range processNodes {
+			var node1 Node
+			err := global.GVA_DB.Model(&Node{}).Where("id = ?", node.NodeId).Preload("Approver").Find(&node1).Error
+			if err != nil {
+				return nil, 0, err
+			}
+			node1.Order = node.NodeOrder
+			nodes = append(nodes, node1)
+		}
+		projectProcesses[i].Process.Nodes = nodes
+
+	}
+
 	return projectProcesses, total, err
 	return projectProcesses, total, err
 }
 }
 
 
@@ -45,15 +67,79 @@ func QueryProjectProcessList(limit, offset, applicant int) (projectProcesses []P
 		return
 		return
 	}
 	}
 	err = db.Order("id desc").Limit(limit).Offset(offset).Preload("User").Preload("Node").Preload("Process").Preload("Descriptions").Find(&projectProcesses).Error
 	err = db.Order("id desc").Limit(limit).Offset(offset).Preload("User").Preload("Node").Preload("Process").Preload("Descriptions").Find(&projectProcesses).Error
+
+	for i, projectProcess := range projectProcesses {
+
+		var processNodes []ProcessNodes
+		err = global.GVA_DB.Model(&ProcessNodes{}).Where("process_id = ?", projectProcess.Process.ID).Find(&processNodes).Error
+		if err != nil {
+			return nil, 0, err
+		}
+		var nodes []Node
+		for _, node := range processNodes {
+			var node1 Node
+			err := global.GVA_DB.Model(&Node{}).Where("id = ?", node.NodeId).Preload("Approver").Find(&node1).Error
+			if err != nil {
+				return nil, 0, err
+			}
+			node1.Order = node.NodeOrder
+			nodes = append(nodes, node1)
+		}
+		projectProcesses[i].Process.Nodes = nodes
+
+	}
+
 	return projectProcesses, total, err
 	return projectProcesses, total, err
 }
 }
 
 
 func QueryProjectProcessById(id int) (projectProcess ProjectProcess, err error) {
 func QueryProjectProcessById(id int) (projectProcess ProjectProcess, err error) {
-	return projectProcess, global.GVA_DB.Where("id =?", id).Preload("User").Preload("Node").Preload("Process").Preload("Descriptions").First(&projectProcess).Error
+	err = global.GVA_DB.Where("id =?", id).Preload("User").Preload("Node").Preload("Process").Preload("Descriptions").First(&projectProcess).Error
+
+	var processNodes []ProcessNodes
+	err = global.GVA_DB.Model(&ProcessNodes{}).Where("process_id = ?", projectProcess.Process.ID).Find(&processNodes).Error
+	if err != nil {
+		return projectProcess, err
+	}
+	var nodes []Node
+	for _, node := range processNodes {
+		var node1 Node
+		err := global.GVA_DB.Model(&Node{}).Where("id = ?", node.NodeId).Preload("Approver").Find(&node1).Error
+		if err != nil {
+			return projectProcess, err
+		}
+		node1.Order = node.NodeOrder
+		nodes = append(nodes, node1)
+	}
+	projectProcess.Process.Nodes = nodes
+
+	return projectProcess, err
 }
 }
 
 
-func QueryProjectProcessByProcessApprovalId(id int) (projectProcess []ProjectProcess, err error) {
-	return projectProcess, global.GVA_DB.Where("process_approval_id =?", id).Preload("User").Preload("Node").Preload("Process").Preload("Descriptions").Find(&projectProcess).Error
+func QueryProjectProcessByProcessApprovalId(id int) (projectProcesses []ProjectProcess, err error) {
+	err = global.GVA_DB.Where("process_approval_id =?", id).Preload("User").Preload("Node").Preload("Process").Preload("Descriptions").Find(&projectProcesses).Error
+
+	for i, projectProcess := range projectProcesses {
+
+		var processNodes []ProcessNodes
+		err = global.GVA_DB.Model(&ProcessNodes{}).Where("process_id = ?", projectProcess.Process.ID).Find(&processNodes).Error
+		if err != nil {
+			return projectProcesses, err
+		}
+		var nodes []Node
+		for _, node := range processNodes {
+			var node1 Node
+			err := global.GVA_DB.Model(&Node{}).Where("id = ?", node.NodeId).Preload("Approver").Find(&node1).Error
+			if err != nil {
+				return projectProcesses, err
+			}
+			node1.Order = node.NodeOrder
+			nodes = append(nodes, node1)
+		}
+		projectProcesses[i].Process.Nodes = nodes
+
+	}
+
+	return projectProcesses, err
 }
 }
 
 
 func (pp ProjectProcess) CreateProjectProcess() error {
 func (pp ProjectProcess) CreateProjectProcess() error {

+ 1 - 0
server/router/workflow/description.go

@@ -20,5 +20,6 @@ func (s *DescriptionRouter) InitDescriptionRouter(Router *gin.RouterGroup) {
 	}
 	}
 	{
 	{
 		descriptionRouterWithoutRecord.GET("queryDescriptionByProjectProcessId", descriptionApi.QueryDescriptionByProjectProcessId)
 		descriptionRouterWithoutRecord.GET("queryDescriptionByProjectProcessId", descriptionApi.QueryDescriptionByProjectProcessId)
+		descriptionRouterWithoutRecord.GET("queryDescriptionById", descriptionApi.QueryDescriptionById)
 	}
 	}
 }
 }

+ 4 - 0
server/service/workflow/description.go

@@ -8,6 +8,10 @@ func (ds *DescriptionService) QueryDescriptionByProjectProcessId(projectProcessI
 	return dao.QueryDescriptionByProjectProcessId(projectProcessId)
 	return dao.QueryDescriptionByProjectProcessId(projectProcessId)
 }
 }
 
 
+func (ds *DescriptionService) QueryDescriptionById(id int) (dao.Description, error) {
+	return dao.QueryDescriptionById(id)
+}
+
 func (ds *DescriptionService) CreateDescription(description dao.Description) error {
 func (ds *DescriptionService) CreateDescription(description dao.Description) error {
 	return description.CreateDescription()
 	return description.CreateDescription()
 }
 }