package dao import ( "fmt" "server/global" ) type Description struct { global.GVA_MODEL ProjectProcessId int `json:"projectProcessId" form:"projectProcessId" gorm:"comment:项目审批id"` ApprovalOpinion string `json:"approvalOpinion" form:"approvalOpinion" gorm:"comment:审批意见"` NodeId int `json:"nodeId" form:"nodeId" gorm:"comment:节点id"` Node Node `json:"node" form:"node" gorm:"foreignKey:NodeId;references:id;"` ApprovalTime string `json:"approvalTime" form:"approvalTime" gorm:"comment:审批时间"` OptionResult string `json:"optionResult" form:"optionResult" gorm:"comment:操作结果"` } func (Description) TableName() string { return "description" } func QueryDescriptionByProjectProcessId(projectProcessId int) (descriptions []Description, err error) { err = global.GVA_DB.Model(&Description{}).Where("project_process_id=?", projectProcessId).Find(&descriptions).Error return descriptions, err } 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) CreateDescription() error { return global.GVA_DB.Create(&d).Error } func (d Description) UpdateDescription() error { return global.GVA_DB.Where("id = ?", d.ID).Updates(&d).Error } func (d Description) DeleteDescription() 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 currentNode.Order == len(projectProcess.Process.Nodes) && description.OptionResult == "通过" { // 审批通过后,修改所属项目流程的状态 err = global.GVA_DB.Model(&ProjectProcess{}).Where("id = ?", projectProcess.ID).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 } //通知 notice := Notice{ Title: "审批结果", Content: fmt.Sprintf("您的申请已通过审批"), Type: projectProcess.ProjectType, UserId: projectProcess.Applicant, } err = notice.CreateNotice() if err != nil { return err } return err } // 当是最后一步时进行打回的操作 if currentNode.Order == len(projectProcess.Process.Nodes) && description.OptionResult == "打回" { //流程记录保存 err = description.CreateDescription() if err != nil { return err } //通知 notice := Notice{ Title: "审批结果", Content: "您的申请未通过,请补充文件." + description.ApprovalOpinion, Type: projectProcess.ProjectType, UserId: projectProcess.Applicant, } err = notice.CreateNotice() if err != nil { return err } // 设置为打回状态 err = global.GVA_DB.Model(&ProjectProcess{}).Where("id = ?", projectProcess.ID).Update("is_back", true).Error if err != nil { return err } return err } // 当是最后一步时进行拒绝的操作 if currentNode.Order == len(projectProcess.Process.Nodes) && description.OptionResult == "拒绝" { // 审批通过后,修改所属项目流程的状态 err = global.GVA_DB.Model(&ProjectProcess{}).Where("id = ?", projectProcess.ID).Update("state", 2).Error if err != nil { return err } //流程记录保存 err = description.CreateDescription() if err != nil { return err } //通知 notice := Notice{ Title: "审批结果", Content: fmt.Sprintf("您的申请未通过"), Type: projectProcess.ProjectType, UserId: projectProcess.Applicant, } err = notice.CreateNotice() if err != nil { return err } return err } // 最后之前才会到达 如果为最后在上面完成后会return出去 if description.OptionResult == "通过" { // 节点通过后,修改所属项目流程的当前节点为下个节点 err = global.GVA_DB.Model(&ProjectProcess{}).Where("id = ?", projectProcess.ID).Update("current_node_order", lastNode.ID).Error if err != nil { return err } //流程记录保存 err = description.CreateDescription() if err != nil { return err } //通知 notice := Notice{ Title: "审批结果", Content: fmt.Sprintf("您的申请已通过审批"), Type: projectProcess.ProjectType, UserId: projectProcess.Applicant, } err = notice.CreateNotice() if err != nil { return err } return err } // 最后之前才会到达 如果为最后在上面完成后会return出去 if description.OptionResult == "打回" { //流程记录保存 err = description.CreateDescription() if err != nil { return err } //通知 notice := Notice{ Title: "审批结果", Content: "您的申请未通过,请补充文件." + description.ApprovalOpinion, Type: projectProcess.ProjectType, UserId: projectProcess.Applicant, } err = notice.CreateNotice() if err != nil { return err } // 设置为打回状态 err = global.GVA_DB.Model(&ProjectProcess{}).Where("id = ?", projectProcess.ID).Update("is_back", true).Error if err != nil { return err } return err } // if description.OptionResult == "拒绝" { // 审批通过后,修改所属项目流程的状态 err = global.GVA_DB.Model(&ProjectProcess{}).Where("id = ?", projectProcess.ID).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 } //通知 notice := Notice{ Title: "审批结果", Content: fmt.Sprintf("您的申请未通过"), Type: projectProcess.ProjectType, UserId: projectProcess.Applicant, } err = notice.CreateNotice() if err != nil { return err } return err } return err }