bi_approve_flow.go 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. package biapprove
  2. import (
  3. "eta_gn/eta_api/global"
  4. "fmt"
  5. "time"
  6. )
  7. type BiApproveFlow struct {
  8. BiApproveFlowId int `gorm:"column:bi_approve_flow_id;primaryKey"`
  9. FlowName string `gorm:"column:flow_name"`
  10. ClassifyId int `gorm:"column:classify_id"`
  11. ClassifyName string `gorm:"column:classify_name"`
  12. CurrVersion int `gorm:"column:curr_version"`
  13. CreateTime time.Time `gorm:"column:create_time"`
  14. ModifyTime time.Time `gorm:"column:modify_time"`
  15. }
  16. func (b *BiApproveFlow) TableName() string {
  17. return "bi_approve_flow"
  18. }
  19. func (b *BiApproveFlow) Add(node []*BiApproveNode) (err error) {
  20. prevNodes := make([]*BiApproveNode, 0)
  21. o := global.DmSQL["rddp"].Begin()
  22. defer func() {
  23. if err != nil {
  24. o.Rollback()
  25. } else {
  26. o.Commit()
  27. }
  28. // 更新每个节点的下一个节点信息, 放在事务中会更新失败
  29. if e := UpdateNextNodes(prevNodes); e != nil {
  30. err = fmt.Errorf("UpdatePrevNodes err: %s", e.Error())
  31. return
  32. }
  33. }()
  34. err = o.Create(b).Error
  35. if err != nil {
  36. err = fmt.Errorf("insert approve err: %v", err)
  37. return
  38. }
  39. nodesLen := len(node)
  40. if nodesLen == 0 {
  41. return
  42. }
  43. prevId := 0
  44. prevNode := new(BiApproveNode)
  45. for k, v := range node {
  46. v.BiApproveFlowId = b.BiApproveFlowId
  47. v.PrevNodeId = prevId
  48. err = o.Create(v).Error
  49. if err != nil {
  50. err = fmt.Errorf("insert node err: %v", err)
  51. return
  52. }
  53. prevId = v.BiApproveNodeId
  54. // 下一个节点
  55. if prevNode != nil && k > 0 && k < nodesLen {
  56. prevNode.NextNodeId = v.BiApproveNodeId
  57. prevNodes = append(prevNodes, prevNode)
  58. }
  59. prevNode = v
  60. }
  61. return
  62. }
  63. func (b *BiApproveFlow) Update(cols []string, node []*BiApproveNode) (err error) {
  64. prevNodes := make([]*BiApproveNode, 0)
  65. o := global.DmSQL["rddp"].Begin()
  66. defer func() {
  67. if err != nil {
  68. o.Rollback()
  69. } else {
  70. o.Commit()
  71. }
  72. // 更新每个节点的下一个节点信息, 放在事务中会更新失败
  73. if e := UpdateNextNodes(prevNodes); e != nil {
  74. err = fmt.Errorf("UpdatePrevNodes err: %s", e.Error())
  75. return
  76. }
  77. }()
  78. err = o.Model(b).Select(cols).Updates(b).Error
  79. if err != nil {
  80. return
  81. }
  82. nodesLen := len(node)
  83. if nodesLen == 0 {
  84. return
  85. }
  86. prevId := 0
  87. prevNode := new(BiApproveNode)
  88. for k, v := range node {
  89. v.BiApproveFlowId = b.BiApproveFlowId
  90. v.PrevNodeId = prevId
  91. err = o.Create(v).Error
  92. if err != nil {
  93. err = fmt.Errorf("insert node err: %v", err)
  94. return
  95. }
  96. prevId = v.BiApproveNodeId
  97. // 下一个节点
  98. if prevNode != nil && k > 0 && k < nodesLen {
  99. prevNode.NextNodeId = v.BiApproveNodeId
  100. prevNodes = append(prevNodes, prevNode)
  101. }
  102. prevNode = v
  103. }
  104. return
  105. }
  106. func (b *BiApproveFlow) Delete() error {
  107. return global.DmSQL["rddp"].Delete(b).Error
  108. }
  109. func GetBiApproveFlowById(biApproveFlowId int) (item *BiApproveFlow, err error) {
  110. err = global.DmSQL["rddp"].Where("bi_approve_flow_id = ?", biApproveFlowId).First(&item).Error
  111. return
  112. }
  113. func GetBiApproveFlowByCondition(condition string, pars []interface{}, startSize, pageSize int) (items []*BiApproveFlow, err error) {
  114. o := global.DmSQL["rddp"]
  115. sql := "SELECT * FROM bi_approve_flow WHERE 1=1 "
  116. if condition != "" {
  117. sql += condition
  118. }
  119. sql += " LIMIT ?,?"
  120. pars = append(pars, startSize, pageSize)
  121. err = o.Raw(sql, pars...).Scan(&items).Error
  122. return
  123. }
  124. func GetBiApproveFlowCountByCondition(condition string, pars []interface{}) (count int, err error) {
  125. o := global.DmSQL["rddp"]
  126. sql := "SELECT COUNT(*) AS count FROM bi_approve_flow WHERE 1=1 "
  127. if condition != "" {
  128. sql += condition
  129. }
  130. err = o.Raw(sql, pars...).Scan(&count).Error
  131. return
  132. }