123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246 |
- 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
- }
|