wk_process.go 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. package service
  2. import (
  3. "gin-vue-admin/global"
  4. "gin-vue-admin/model"
  5. "gin-vue-admin/model/request"
  6. "gorm.io/gorm"
  7. )
  8. //@author: [piexlmax](https://github.com/piexlmax)
  9. //@function: CreateWorkflowProcess
  10. //@description: 创建工作流相关信息
  11. //@param: workflowProcess model.WorkflowProcess
  12. //@return: err error
  13. func CreateWorkflowProcess(workflowProcess model.WorkflowProcess) (err error) {
  14. err = global.GVA_DB.Create(&workflowProcess).Error
  15. return err
  16. }
  17. //@author: [piexlmax](https://github.com/piexlmax)
  18. //@function: DeleteWorkflowProcess
  19. //@description: 删除工作流相关信息
  20. //@param: workflowProcess model.WorkflowProcess
  21. //@return: err error
  22. func DeleteWorkflowProcess(workflowProcess model.WorkflowProcess) (err error) {
  23. err = global.GVA_DB.Transaction(func(tx *gorm.DB) error {
  24. var txErr error
  25. txErr = tx.Delete(workflowProcess).Error
  26. if txErr != nil {
  27. return txErr
  28. }
  29. var edges []model.WorkflowEdge
  30. txErr = tx.Delete(model.WorkflowNode{}, "workflow_process_id = ?", workflowProcess.ID).Error
  31. if txErr != nil {
  32. return txErr
  33. }
  34. txErr = tx.Find(&edges, "workflow_process_id = ?", workflowProcess.ID).Error
  35. if txErr != nil {
  36. return txErr
  37. }
  38. txErr = tx.Select("StartPoint", "EndPoint").Delete(&edges).Error
  39. if txErr != nil {
  40. return txErr
  41. }
  42. return nil
  43. })
  44. return err
  45. }
  46. //@author: [piexlmax](https://github.com/piexlmax)
  47. //@function: CreateWorkflowProcess
  48. //@description: 批量删除工作流信息(暂未启用)
  49. //@param: ids request.IdsReq
  50. //@return: err error
  51. func DeleteWorkflowProcessByIds(ids request.IdsReq) (err error) {
  52. err = global.GVA_DB.Delete(&[]model.WorkflowProcess{}, "id in ?", ids.Ids).Error
  53. return err
  54. }
  55. //@author: [piexlmax](https://github.com/piexlmax)
  56. //@function: UpdateWorkflowProcess
  57. //@description: 更新工作流相关信息
  58. //@param: workflowProcess *model.WorkflowProcess
  59. //@return: err error
  60. func UpdateWorkflowProcess(workflowProcess *model.WorkflowProcess) (err error) {
  61. return global.GVA_DB.Transaction(func(tx *gorm.DB) error {
  62. var txErr error
  63. var edges []model.WorkflowEdge
  64. var edgesIds []string
  65. txErr = tx.Unscoped().Delete(workflowProcess).Error
  66. if txErr != nil {
  67. return txErr
  68. }
  69. txErr = tx.Unscoped().Delete(model.WorkflowNode{}, "workflow_process_id = ?", workflowProcess.ID).Error
  70. if txErr != nil {
  71. return txErr
  72. }
  73. txErr = tx.Unscoped().Find(&edges, "workflow_process_id = ?", workflowProcess.ID).Error
  74. if txErr != nil {
  75. return txErr
  76. }
  77. txErr = tx.Unscoped().Delete(&edges).Error
  78. if txErr != nil {
  79. return txErr
  80. }
  81. for _, v := range edges {
  82. edgesIds = append(edgesIds, v.ID)
  83. }
  84. txErr = tx.Unscoped().Delete(model.WorkflowStartPoint{}, "workflow_edge_id in ?", edgesIds).Error
  85. if txErr != nil {
  86. return txErr
  87. }
  88. txErr = tx.Unscoped().Delete(model.WorkflowEndPoint{}, "workflow_edge_id in ?", edgesIds).Error
  89. if txErr != nil {
  90. return txErr
  91. }
  92. txErr = tx.Create(&workflowProcess).Error
  93. if txErr != nil {
  94. return txErr
  95. }
  96. return nil
  97. })
  98. }
  99. //@author: [piexlmax](https://github.com/piexlmax)
  100. //@function: GetWorkflowProcess
  101. //@description: 获取工作流相关信息
  102. //@param: id string
  103. //@return: err error,workflowProcess model.WorkflowProcess
  104. func GetWorkflowProcess(id string) (err error, workflowProcess model.WorkflowProcess) {
  105. err = global.GVA_DB.Preload("Nodes").Preload("Edges").Where("id = ?", id).First(&workflowProcess).Error
  106. return
  107. }
  108. //@author: [piexlmax](https://github.com/piexlmax)
  109. //@function: GetWorkflowCreateStep
  110. //@description: 获取工作流步骤信息
  111. //@param: id string
  112. //@return: err error, workflowNodes []model.WorkflowNode
  113. func FindWorkflowStep(id string) (err error, workflowNode model.WorkflowProcess) {
  114. err = global.GVA_DB.Preload("Nodes", "clazz = ?", model.START).Where("id = ?", id).First(&workflowNode).Error
  115. return
  116. }
  117. //@author: [piexlmax](https://github.com/piexlmax)
  118. //@function: GetWorkflowProcessInfoList
  119. //@description: 获取工作流列表
  120. //@param: info request.WorkflowProcessSearch
  121. //@return: err error, list interface{}, total int64
  122. func GetWorkflowProcessInfoList(info request.WorkflowProcessSearch) (err error, list interface{}, total int64) {
  123. limit := info.PageSize
  124. offset := info.PageSize * (info.Page - 1)
  125. // 创建db
  126. db := global.GVA_DB.Model(&model.WorkflowProcess{})
  127. var workflowProcesss []model.WorkflowProcess
  128. // 如果有条件搜索 下方会自动创建搜索语句
  129. if info.Name != "" {
  130. db = db.Where("`name` LIKE ?", "%"+info.Name+"%")
  131. }
  132. if info.Label != "" {
  133. db = db.Where("`label` LIKE ?", "%"+info.Label+"%")
  134. }
  135. err = db.Count(&total).Error
  136. err = db.Limit(limit).Offset(offset).Find(&workflowProcesss).Error
  137. return err, workflowProcesss, total
  138. }