package dao import ( "server/dao/system" "server/global" ) type ProjectProcess struct { global.GVA_MODEL ProjectProcessName string `json:"projectProcessName" form:"projectProcessName" gorm:"comment:项目审批名称"` Applicant int `json:"applicant" form:"applicant" gorm:"comment:申请人"` User system.SysUser `json:"user" form:"user" gorm:"foreignKey:Applicant;references:id;"` ProjectId int `json:"projectId" form:"projectId" gorm:"comment:项目id"` CurrentNodeOrder int `json:"currentNodeOrder" form:"currentNodeOrder" gorm:"comment:当前审批节点id"` Node Node `json:"node" form:"node" gorm:"foreignKey:CurrentNodeOrder;references:id;"` ProcessApprovalId int `json:"processApprovalId" form:"processApprovalId" gorm:"comment:当前审批流程id"` Process Process `json:"process" form:"process" gorm:"foreignKey:ProcessApprovalId;references:id"` ProjectType string `json:"projectType" form:"projectType" gorm:"comment:项目类型"` Descriptions []Description `json:"descriptions" form:"descriptions" gorm:"foreignKey:ProjectProcessId;"` State int `json:"state" form:"state" gorm:"comment:状态;default:0;"` Code string `json:"code" form:"code" gorm:"-"` IsBack bool `json:"isBack" form:"isBack" gorm:"default:false;comment:是否打回"` } func (ProjectProcess) TableName() string { return "project_process" } func QueryProjectApplicantList(limit, offset, applicant int) (projectProcesses []ProjectProcess, total int64, err error) { // 创建db db := global.GVA_DB.Model(&ProjectProcess{}) // 如果有条件搜索 下方会自动创建搜索语句 if applicant != 0 { db = db.Where("applicant = ?", applicant) } err = db.Count(&total).Error if err != nil { return } 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 //获取当前节点所有信息 var node Node err = global.GVA_DB.Model(&Node{}).Where("id = ?", projectProcess.CurrentNodeOrder).Preload("Approver").First(&node).Error projectProcesses[i].Node = node var processNode ProcessNodes err = global.GVA_DB.Model(&ProcessNodes{}).Where("process_id = ? and node_id = ?", projectProcess.Process.ID, node.ID).First(&processNode).Error projectProcesses[i].Node.Order = processNode.NodeOrder } return projectProcesses, total, err } func QueryProjectProcessList(limit, offset, applicant int) (projectProcesses []ProjectProcess, total int64, err error) { // 创建db db := global.GVA_DB.Model(&ProjectProcess{}).Joins("JOIN node ON project_process.current_node_order = node.id").Where("node.approver_id = ? AND project_process.is_back = ? AND project_process.state = ?", applicant, false, 0) // 如果有条件搜索 下方会自动创建搜索语句 err = db.Count(&total).Error if err != nil { return } 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 //获取当前节点所有信息 var node Node err = global.GVA_DB.Model(&Node{}).Where("id = ?", projectProcess.CurrentNodeOrder).Preload("Approver").First(&node).Error projectProcesses[i].Node = node var processNode ProcessNodes err = global.GVA_DB.Model(&ProcessNodes{}).Where("process_id = ? and node_id = ?", projectProcess.Process.ID, node.ID).First(&processNode).Error projectProcesses[i].Node.Order = processNode.NodeOrder } return projectProcesses, total, err } func QueryProjectProcessById(id int) (projectProcess ProjectProcess, err 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 //获取当前节点所有信息 var node Node err = global.GVA_DB.Model(&Node{}).Where("id = ?", projectProcess.CurrentNodeOrder).Preload("Approver").First(&node).Error projectProcess.Node = node var processNode ProcessNodes err = global.GVA_DB.Model(&ProcessNodes{}).Where("process_id = ? and node_id = ?", projectProcess.Process.ID, node.ID).First(&processNode).Error projectProcess.Node.Order = processNode.NodeOrder //当项目类型为立项时 if projectProcess.ProjectType == "立项" { var project Project err = global.GVA_DB.Model(&Project{}).Where("id = ?", projectProcess.ProjectId).First(&project).Error if err != nil { return projectProcess, err } projectProcess.Code = project.Code } return projectProcess, err } // QueryProjectProcessByProcessApprovalId 按流程审批 ID 查询项目流程 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 { return global.GVA_DB.Create(&pp).Error } func (pp ProjectProcess) UpdateProjectProcess() error { return global.GVA_DB.Where("id = ?", pp.ID).Updates(&pp).Error } // Replenished 补充完毕 func Replenished(id int) error { process, err := QueryProjectProcessById(id) if err != nil { return err } err = Notice{ Title: "审批补充", Content: process.ProjectProcessName + "已完成文件补充", UserId: process.Node.ApproverId, Type: process.ProjectType, }.CreateNotice() if err != nil { return err } return global.GVA_DB.Model(&ProjectProcess{}).Where("id = ?", id).Update("is_back", false).Error } func (pp ProjectProcess) DeleteProjectProcess() error { return global.GVA_DB.Unscoped().Delete(&pp).Error }