bi_approve_flow.go 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252
  1. package biapprove
  2. import (
  3. "encoding/json"
  4. biapprove "eta_gn/eta_api/models/bi_approve"
  5. "eta_gn/eta_api/models/bi_approve/request"
  6. "eta_gn/eta_api/models/bi_approve/response"
  7. "eta_gn/eta_api/models/bi_dashboard"
  8. "eta_gn/eta_api/utils"
  9. "fmt"
  10. "time"
  11. )
  12. func GetBiApproveFlowList(condition string, pars []interface{}, startSize, pageSize int) (items []*response.BiApproveFlowItem, total int, msg string, err error) {
  13. total, err = biapprove.GetBiApproveFlowCountByCondition(condition, pars)
  14. if err != nil {
  15. msg = "获取审批流程列表失败"
  16. return
  17. }
  18. if total == 0 {
  19. items = make([]*response.BiApproveFlowItem, 0)
  20. return
  21. }
  22. flowList, err := biapprove.GetBiApproveFlowByCondition(condition, pars, startSize, pageSize)
  23. if err != nil {
  24. msg = "获取审批流程列表失败"
  25. return
  26. }
  27. items = toBiApproveFlowItem(flowList)
  28. return
  29. }
  30. func SaveBiApproveFlow(flow *request.BiApproveFlowSaveReq) (ok bool, msg string, err error) {
  31. classifyInfo, err := bi_dashboard.GetBiDashboardClassifyById(flow.ClassifyId)
  32. if err != nil {
  33. if utils.IsErrNoRow(err) {
  34. msg = "保存审批流失败, 分类不存在"
  35. return
  36. }
  37. msg = "保存审批流失败"
  38. return
  39. }
  40. if flow.BiApproveFlowId == 0 {
  41. tmp, er := biapprove.GetBiApproveFlowByClassifyId(flow.ClassifyId)
  42. if er != nil && !utils.IsErrNoRow(er) {
  43. msg = "保存审批流失败"
  44. err = er
  45. return
  46. }
  47. if tmp != nil && tmp.BiApproveFlowId > 0 {
  48. msg = "保存审批流失败, 分类下已存在审批流"
  49. err = fmt.Errorf("分类下已存在审批流")
  50. return
  51. }
  52. t := &biapprove.BiApproveFlow{
  53. FlowName: flow.FlowName,
  54. ClassifyId: flow.ClassifyId,
  55. ClassifyName: classifyInfo.BiDashboardClassifyName,
  56. CurrVersion: 1,
  57. CreateTime: time.Now(),
  58. ModifyTime: time.Now(),
  59. }
  60. biFlowNodeItems := make([]*biapprove.BiApproveNode, 0)
  61. for _, node := range flow.Nodes {
  62. biFlowNode := new(biapprove.BiApproveNode)
  63. biFlowNode.ApproveType = node.ApproveType
  64. biFlowNode.CurrVersion = t.CurrVersion
  65. userBytes, er := json.Marshal(node.Users)
  66. if er != nil {
  67. err = er
  68. msg = "保存审批流失败"
  69. return
  70. }
  71. biFlowNode.Users = string(userBytes)
  72. biFlowNode.CreatedTime = time.Now()
  73. biFlowNodeItems = append(biFlowNodeItems, biFlowNode)
  74. }
  75. err = t.Add(biFlowNodeItems)
  76. if err != nil {
  77. msg = "保存审批流失败"
  78. return
  79. }
  80. ok = true
  81. } else {
  82. resFlow, er := biapprove.GetBiApproveFlowById(flow.BiApproveFlowId)
  83. if er != nil {
  84. msg = "保存审批流失败"
  85. err = er
  86. return
  87. }
  88. ok, err = CheckDeleteBiApproveFlow(resFlow.BiApproveFlowId)
  89. if err != nil {
  90. msg = "保存审批流失败"
  91. return
  92. }
  93. if !ok {
  94. msg = "保存审批流失败, 存在还未审批的报告"
  95. return
  96. }
  97. var updateCols []string
  98. if resFlow.FlowName != flow.FlowName {
  99. resFlow.FlowName = flow.FlowName
  100. updateCols = append(updateCols, "flow_name")
  101. }
  102. resFlow.CurrVersion += 1
  103. resFlow.ModifyTime = time.Now()
  104. updateCols = append(updateCols, "modify_time", "curr_version")
  105. biFlowNodeItems := make([]*biapprove.BiApproveNode, 0)
  106. for _, node := range flow.Nodes {
  107. biFlowNode := new(biapprove.BiApproveNode)
  108. biFlowNode.ApproveType = node.ApproveType
  109. biFlowNode.CurrVersion = resFlow.CurrVersion
  110. userBytes, er := json.Marshal(node.Users)
  111. if er != nil {
  112. err = er
  113. msg = "保存审批流失败"
  114. return
  115. }
  116. biFlowNode.Users = string(userBytes)
  117. biFlowNode.CreatedTime = time.Now()
  118. biFlowNodeItems = append(biFlowNodeItems, biFlowNode)
  119. }
  120. err = resFlow.Update(updateCols, biFlowNodeItems)
  121. if err != nil {
  122. msg = "保存审批流失败"
  123. return
  124. }
  125. ok = true
  126. }
  127. return
  128. }
  129. func GetBiApproveFlowDetail(flowId int) (detail *response.BiApproveFlowDetailResp, msg string, err error) {
  130. flowInfo, err := biapprove.GetBiApproveFlowById(flowId)
  131. if err != nil {
  132. msg = "获取审批流详情失败"
  133. return
  134. }
  135. flowNodes, err := biapprove.GetBiApproveNodeByFlowIdAndVersionId(flowId, flowInfo.CurrVersion)
  136. if err != nil {
  137. msg = "获取审批流详情失败"
  138. return
  139. }
  140. detail, err = FormatFlowAndNodesItem2Detail(flowInfo, flowNodes)
  141. if err != nil {
  142. msg = "获取审批流详情失败"
  143. return
  144. }
  145. return
  146. }
  147. func DeleteBiApproveFlow(flowId int) (ok bool, msg string, err error) {
  148. ok, err = CheckDeleteBiApproveFlow(flowId)
  149. if err != nil {
  150. if utils.IsErrNoRow(err) {
  151. msg = "删除审批流失败, 审批流不存在"
  152. return
  153. }
  154. msg = "删除审批流失败"
  155. return
  156. }
  157. if !ok {
  158. msg = "删除审批流失败, 存在还未审批的报告"
  159. return
  160. }
  161. t := &biapprove.BiApproveFlow{
  162. BiApproveFlowId: flowId,
  163. }
  164. err = t.Delete()
  165. if err != nil {
  166. msg = "删除审批流失败"
  167. return
  168. }
  169. ok = true
  170. return
  171. }
  172. func CheckDeleteBiApproveFlow(flowId int) (ok bool, err error) {
  173. flowInfo, err := biapprove.GetBiApproveFlowById(flowId)
  174. if err != nil {
  175. return
  176. }
  177. approveList, err := biapprove.GetBiApproveByFlowIdAndVersionId(flowInfo.BiApproveFlowId, flowInfo.CurrVersion)
  178. if err != nil {
  179. return
  180. }
  181. for _, v := range approveList {
  182. if v.State == BiApproveStateApproving {
  183. return false, nil
  184. }
  185. }
  186. ok = true
  187. return
  188. }
  189. func toBiApproveFlowItem(src []*biapprove.BiApproveFlow) (res []*response.BiApproveFlowItem) {
  190. res = make([]*response.BiApproveFlowItem, 0, len(src))
  191. for _, item := range src {
  192. res = append(res, &response.BiApproveFlowItem{
  193. BiApproveFlowId: item.BiApproveFlowId,
  194. FlowName: item.FlowName,
  195. ClassifyId: item.ClassifyId,
  196. ClassifyName: item.ClassifyName,
  197. CurrVersion: item.CurrVersion,
  198. CreateTime: item.CreateTime.Format(utils.FormatDateTime),
  199. ModifyTime: item.ModifyTime.Format(utils.FormatDateTime),
  200. })
  201. }
  202. return
  203. }
  204. func FormatFlowAndNodesItem2Detail(flowItem *biapprove.BiApproveFlow, nodeItems []*biapprove.BiApproveNode) (detail *response.BiApproveFlowDetailResp, err error) {
  205. if flowItem == nil {
  206. return
  207. }
  208. detail = new(response.BiApproveFlowDetailResp)
  209. detail.BiApproveFlowId = flowItem.BiApproveFlowId
  210. detail.FlowName = flowItem.FlowName
  211. detail.ClassifyId = flowItem.ClassifyId
  212. detail.CreateTime = utils.TimeTransferString(utils.FormatDateTime, flowItem.CreateTime)
  213. detail.ModifyTime = utils.TimeTransferString(utils.FormatDateTime, flowItem.ModifyTime)
  214. detail.Nodes = make([]*response.BiApproveNodeItem, 0)
  215. for _, v := range nodeItems {
  216. t, e := FormatBiApproveNode2Item(v)
  217. if e != nil {
  218. err = fmt.Errorf("format node err: %s", e.Error())
  219. return
  220. }
  221. detail.Nodes = append(detail.Nodes, t)
  222. }
  223. return
  224. }
  225. func ModifyBiApproveFlowClassify(classifyId int, classifyName string) (err error) {
  226. flow, err := biapprove.GetBiApproveFlowByClassifyId(classifyId)
  227. if err != nil && !utils.IsErrNoRow(err) {
  228. return
  229. }
  230. if utils.IsErrNoRow(err) {
  231. err = nil
  232. return
  233. }
  234. if classifyName != "" && flow.ClassifyName != classifyName {
  235. err = biapprove.UpdateFlowClassifyName(classifyId, classifyName)
  236. }
  237. return
  238. }