approve_flow.go 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  1. package data_approve
  2. import (
  3. "encoding/json"
  4. DataApprove "eta_gn/eta_api/models/data_manage/data_approve"
  5. "eta_gn/eta_api/models/data_manage/data_approve/request"
  6. "eta_gn/eta_api/models/data_manage/data_approve/response"
  7. "eta_gn/eta_api/utils"
  8. "fmt"
  9. "time"
  10. )
  11. // SaveDataApproveFlow 保存审批流
  12. func SaveDataApproveFlow(flow *request.DataApproveFlowSaveReq) (ok bool, msg string, err error) {
  13. flowInfo, err := DataApprove.GetDataApproveFlowByDataType(flow.DataType)
  14. if err != nil {
  15. if !utils.IsErrNoRow(err) {
  16. msg = "保存审批流失败, 查找审批流失败"
  17. return
  18. }
  19. }
  20. if flowInfo.DataApproveFlowId <= 0 {
  21. // 之前没有过记录,所以走新增
  22. var remark string
  23. switch flow.DataType {
  24. case utils.DataApproveTypeEdb:
  25. remark = `指标审批`
  26. case utils.DataApproveTypeChart:
  27. remark = `图表审批`
  28. }
  29. t := &DataApprove.DataApproveFlow{
  30. FlowName: flow.FlowName,
  31. DataType: flow.DataType,
  32. Remark: remark,
  33. CurrVersion: 1,
  34. CreateTime: time.Now(),
  35. ModifyTime: time.Now(),
  36. }
  37. flowNodeItems := make([]*DataApprove.DataApproveNode, 0)
  38. for _, node := range flow.Nodes {
  39. flowNode := new(DataApprove.DataApproveNode)
  40. flowNode.ApproveType = node.ApproveType
  41. flowNode.CurrVersion = t.CurrVersion
  42. userBytes, er := json.Marshal(node.Users)
  43. if er != nil {
  44. err = er
  45. msg = "保存审批流失败"
  46. return
  47. }
  48. flowNode.Users = string(userBytes)
  49. flowNode.CreatedTime = time.Now()
  50. flowNodeItems = append(flowNodeItems, flowNode)
  51. }
  52. err = t.Add(flowNodeItems)
  53. if err != nil {
  54. msg = "保存审批流失败"
  55. return
  56. }
  57. ok = true
  58. } else {
  59. ok, err = CheckDeleteDataApproveFlow(flowInfo.DataApproveFlowId)
  60. if err != nil {
  61. msg = "保存审批流失败"
  62. return
  63. }
  64. if !ok {
  65. msg = "保存审批流失败, 存在还未审批的报告"
  66. return
  67. }
  68. var updateCols []string
  69. if flowInfo.FlowName != flow.FlowName {
  70. flowInfo.FlowName = flow.FlowName
  71. updateCols = append(updateCols, "flow_name")
  72. }
  73. flowInfo.CurrVersion += 1
  74. flowInfo.ModifyTime = time.Now()
  75. updateCols = append(updateCols, "modify_time", "curr_version")
  76. biFlowNodeItems := make([]*DataApprove.DataApproveNode, 0)
  77. for _, node := range flow.Nodes {
  78. flowNode := new(DataApprove.DataApproveNode)
  79. flowNode.ApproveType = node.ApproveType
  80. flowNode.CurrVersion = flowInfo.CurrVersion
  81. userBytes, er := json.Marshal(node.Users)
  82. if er != nil {
  83. err = er
  84. msg = "保存审批流失败"
  85. return
  86. }
  87. flowNode.Users = string(userBytes)
  88. flowNode.CreatedTime = time.Now()
  89. biFlowNodeItems = append(biFlowNodeItems, flowNode)
  90. }
  91. err = flowInfo.Update(updateCols, biFlowNodeItems)
  92. if err != nil {
  93. msg = "保存审批流失败"
  94. return
  95. }
  96. ok = true
  97. }
  98. return
  99. }
  100. // GetDataApproveFlowDetail 获取审批流详情
  101. func GetDataApproveFlowDetail(dataType int) (detail *response.DataApproveFlowDetailResp, msg string, err error) {
  102. flowInfo, err := DataApprove.GetDataApproveFlowByDataType(dataType)
  103. if err != nil && !utils.IsErrNoRow(err) {
  104. msg = "获取审批流详情失败"
  105. return
  106. }
  107. flowNodes := make([]*DataApprove.DataApproveNode, 0)
  108. // 如果有配置的话
  109. if flowInfo.DataApproveFlowId > 0 {
  110. flowNodes, err = DataApprove.GetDataApproveNodeByFlowIdAndVersionId(flowInfo.DataApproveFlowId, flowInfo.CurrVersion)
  111. if err != nil {
  112. msg = "获取审批流详情失败"
  113. return
  114. }
  115. }
  116. detail, err = FormatFlowAndNodesItem2Detail(flowInfo, flowNodes)
  117. if err != nil {
  118. msg = "获取审批流详情失败"
  119. return
  120. }
  121. return
  122. }
  123. // CheckDeleteDataApproveFlow 检查是否可以删除审批流
  124. func CheckDeleteDataApproveFlow(flowId int) (ok bool, err error) {
  125. flowInfo, err := DataApprove.GetDataApproveFlowById(flowId)
  126. if err != nil {
  127. return
  128. }
  129. // 检查是否存在还未审批的Bi看报
  130. approveList, err := DataApprove.GetDataApproveByFlowIdAndVersionId(flowInfo.DataApproveFlowId, flowInfo.CurrVersion)
  131. if err != nil {
  132. return
  133. }
  134. for _, v := range approveList {
  135. if v.State == DataApproveStateApproving {
  136. return false, nil
  137. }
  138. }
  139. ok = true
  140. return
  141. }
  142. func FormatFlowAndNodesItem2Detail(flowItem *DataApprove.DataApproveFlow, nodeItems []*DataApprove.DataApproveNode) (detail *response.DataApproveFlowDetailResp, err error) {
  143. if flowItem == nil {
  144. return
  145. }
  146. detail = new(response.DataApproveFlowDetailResp)
  147. detail.DataApproveFlowId = flowItem.DataApproveFlowId
  148. detail.FlowName = flowItem.FlowName
  149. detail.DataType = flowItem.DataType
  150. detail.CreateTime = utils.TimeTransferString(utils.FormatDateTime, flowItem.CreateTime)
  151. detail.ModifyTime = utils.TimeTransferString(utils.FormatDateTime, flowItem.ModifyTime)
  152. detail.Nodes = make([]*response.DataApproveNodeItem, 0)
  153. for _, v := range nodeItems {
  154. t, e := FormatDataApproveNode2Item(v)
  155. if e != nil {
  156. err = fmt.Errorf("format node err: %s", e.Error())
  157. return
  158. }
  159. detail.Nodes = append(detail.Nodes, t)
  160. }
  161. return
  162. }