knowledge_approve_flow.go 8.3 KB

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