123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133 |
- package dao
- import (
- "gorm.io/gorm"
- "server/global"
- )
- type Process struct {
- global.GVA_MODEL
- ProcessName string `json:"processName" form:"processName" gorm:"comment:审批流程名称"`
- ProcessContent string `json:"processContent" form:"processContent" gorm:"审批流程内容"`
- ProcessType string `json:"processType" form:"processType" gorm:"审批流程类型"`
- IsUse bool `json:"isUse" form:"isUse" gorm:"comment:是否使用"`
- Nodes []Node `json:"nodes" form:"nodes" gorm:"many2many:process_nodes;"`
- }
- func (Process) TableName() string {
- return "process"
- }
- func QueryAllProcess() (processes []Process, err error) {
- err = global.GVA_DB.Model(&Process{}).Find(&processes).Error
- return processes, err
- }
- func QueryProcessList(limit, offset int) (processes []Process, total int64, err error) {
- // 创建db
- db := global.GVA_DB.Model(&Process{})
- // 如果有条件搜索 下方会自动创建搜索语句
- err = db.Count(&total).Error
- if err != nil {
- return
- }
- err = db.Order("id desc").Limit(limit).Offset(offset).Find(&processes).Error
- for i, process := range processes {
- var processNodes []ProcessNodes
- err := global.GVA_DB.Model(&ProcessNodes{}).Where("process_id = ?", 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)
- }
- processes[i].Nodes = nodes
- }
- return processes, total, err
- }
- // QueryProcessByType 按类型查询 已使用的流程
- func QueryProcessByType(genre string) (process Process, err error) {
- err = global.GVA_DB.Model(&Process{}).Where("process_type = ? AND is_use = 1", genre).First(&process).Error
- return process, err
- }
- func QueryProcessById(id int) (process Process, err error) {
- err = global.GVA_DB.Model(&Process{}).Where("id = ?", id).Find(&process).Error
- return process, err
- }
- func CreateProcess(process Process, nodes []ProcessNodes) error {
- return global.GVA_DB.Transaction(func(tx *gorm.DB) error {
- txErr := tx.Model(&Process{}).Create(&process).Error
- if txErr != nil {
- return txErr
- }
- for i, _ := range nodes {
- nodes[i].ProcessId = int(process.ID)
- }
- txErr = tx.Model(&ProcessNodes{}).Create(&nodes).Error
- if txErr != nil {
- return txErr
- }
- return nil
- })
- }
- func UpdateProcess(process Process, nodes []ProcessNodes) error {
- return global.GVA_DB.Transaction(func(tx *gorm.DB) error {
- txErr := tx.Model(&Process{}).Select("*").Omit("created_at").Where("id = ?", process.ID).Updates(&process).Error
- if txErr != nil {
- return txErr
- }
- txErr = tx.Model(&ProcessNodes{}).Unscoped().Where("process_id = ?", process.ID).Delete(&ProcessNodes{}).Error
- if txErr != nil {
- return txErr
- }
- for i, _ := range nodes {
- nodes[i].ProcessId = int(process.ID)
- }
- txErr = tx.Model(&ProcessNodes{}).Create(&nodes).Error
- if txErr != nil {
- return txErr
- }
- return nil
- })
- }
- func SwitchProcess(process Process) error {
- return global.GVA_DB.Transaction(func(tx *gorm.DB) error {
- txErr := tx.Model(&Process{}).Where("process_type = ?", process.ProcessType).Update("is_use", false).Error
- if txErr != nil {
- return txErr
- }
- txErr = tx.Model(&process).Update("is_use", process.IsUse).Error
- if txErr != nil {
- return txErr
- }
- return nil
- })
- }
- func (p Process) DeleteProcess() error {
- return global.GVA_DB.Transaction(func(tx *gorm.DB) error {
- txErr := tx.Unscoped().Delete(&p).Error
- if txErr != nil {
- return txErr
- }
- txErr = tx.Unscoped().Model(&ProcessNodes{}).Where("process_id = ?", p.ID).Delete(&ProcessNodes{}).Error
- if txErr != nil {
- return txErr
- }
- return nil
- })
- }
|