process.go 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. package dao
  2. import (
  3. "gorm.io/gorm"
  4. "server/global"
  5. )
  6. type Process struct {
  7. global.GVA_MODEL
  8. ProcessName string `json:"processName" form:"processName" gorm:"comment:审批流程名称"`
  9. ProcessContent string `json:"processContent" form:"processContent" gorm:"审批流程内容"`
  10. ProcessType string `json:"processType" form:"processType" gorm:"审批流程类型"`
  11. IsUse bool `json:"isUse" form:"isUse" gorm:"comment:是否使用"`
  12. Nodes []Node `json:"nodes" form:"nodes" gorm:"many2many:process_nodes;"`
  13. }
  14. func (Process) TableName() string {
  15. return "process"
  16. }
  17. func QueryAllProcess() (processes []Process, err error) {
  18. err = global.GVA_DB.Model(&Process{}).Find(&processes).Error
  19. return processes, err
  20. }
  21. func QueryProcessList(limit, offset int) (processes []Process, total int64, err error) {
  22. // 创建db
  23. db := global.GVA_DB.Model(&Process{})
  24. // 如果有条件搜索 下方会自动创建搜索语句
  25. err = db.Count(&total).Error
  26. if err != nil {
  27. return
  28. }
  29. err = db.Order("id desc").Limit(limit).Offset(offset).Find(&processes).Error
  30. for i, process := range processes {
  31. var processNodes []ProcessNodes
  32. err := global.GVA_DB.Model(&ProcessNodes{}).Where("process_id = ?", process.ID).Find(&processNodes).Error
  33. if err != nil {
  34. return nil, 0, err
  35. }
  36. var nodes []Node
  37. for _, node := range processNodes {
  38. var node1 Node
  39. err := global.GVA_DB.Model(&Node{}).Where("id = ?", node.NodeId).Preload("Approver").Find(&node1).Error
  40. if err != nil {
  41. return nil, 0, err
  42. }
  43. node1.Order = node.NodeOrder
  44. nodes = append(nodes, node1)
  45. }
  46. processes[i].Nodes = nodes
  47. }
  48. return processes, total, err
  49. }
  50. // QueryProcessByType 按类型查询 已使用的流程
  51. func QueryProcessByType(genre string) (process Process, err error) {
  52. err = global.GVA_DB.Model(&Process{}).Where("process_type = ? AND is_use = 1", genre).First(&process).Error
  53. return process, err
  54. }
  55. func QueryProcessById(id int) (process Process, err error) {
  56. err = global.GVA_DB.Model(&Process{}).Where("id = ?", id).Find(&process).Error
  57. return process, err
  58. }
  59. func CreateProcess(process Process, nodes []ProcessNodes) error {
  60. return global.GVA_DB.Transaction(func(tx *gorm.DB) error {
  61. txErr := tx.Model(&Process{}).Create(&process).Error
  62. if txErr != nil {
  63. return txErr
  64. }
  65. for i, _ := range nodes {
  66. nodes[i].ProcessId = int(process.ID)
  67. }
  68. txErr = tx.Model(&ProcessNodes{}).Create(&nodes).Error
  69. if txErr != nil {
  70. return txErr
  71. }
  72. return nil
  73. })
  74. }
  75. func UpdateProcess(process Process, nodes []ProcessNodes) error {
  76. return global.GVA_DB.Transaction(func(tx *gorm.DB) error {
  77. txErr := tx.Model(&Process{}).Select("*").Omit("created_at").Where("id = ?", process.ID).Updates(&process).Error
  78. if txErr != nil {
  79. return txErr
  80. }
  81. txErr = tx.Model(&ProcessNodes{}).Unscoped().Where("process_id = ?", process.ID).Delete(&ProcessNodes{}).Error
  82. if txErr != nil {
  83. return txErr
  84. }
  85. for i, _ := range nodes {
  86. nodes[i].ProcessId = int(process.ID)
  87. }
  88. txErr = tx.Model(&ProcessNodes{}).Create(&nodes).Error
  89. if txErr != nil {
  90. return txErr
  91. }
  92. return nil
  93. })
  94. }
  95. func SwitchProcess(process Process) error {
  96. return global.GVA_DB.Transaction(func(tx *gorm.DB) error {
  97. txErr := tx.Model(&Process{}).Where("process_type = ?", process.ProcessType).Update("is_use", false).Error
  98. if txErr != nil {
  99. return txErr
  100. }
  101. txErr = tx.Model(&process).Update("is_use", process.IsUse).Error
  102. if txErr != nil {
  103. return txErr
  104. }
  105. return nil
  106. })
  107. }
  108. func (p Process) DeleteProcess() error {
  109. return global.GVA_DB.Transaction(func(tx *gorm.DB) error {
  110. txErr := tx.Unscoped().Delete(&p).Error
  111. if txErr != nil {
  112. return txErr
  113. }
  114. txErr = tx.Unscoped().Model(&ProcessNodes{}).Where("process_id = ?", p.ID).Delete(&ProcessNodes{}).Error
  115. if txErr != nil {
  116. return txErr
  117. }
  118. return nil
  119. })
  120. }