flow.go 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. package flow
  2. import (
  3. "errors"
  4. "hongze/hongze_mobile_admin/models/tables/admin"
  5. "hongze/hongze_mobile_admin/models/tables/approval_flow"
  6. "hongze/hongze_mobile_admin/models/tables/approval_flow_node"
  7. "hongze/hongze_mobile_admin/models/tables/contract_approval_record"
  8. "strings"
  9. )
  10. //获取审批工作流(基础)
  11. func GetApprovalFlow(flowId int) (approvalFlow *approval_flow.ApprovalFlowItem, err error) {
  12. approvalFlow, err = approval_flow.GetByFlowItemId(flowId)
  13. if err != nil {
  14. err = errors.New("查询审批流程失败:Err:" + err.Error())
  15. return
  16. }
  17. approvalFlowNodeList, err := approval_flow_node.GetListByFlowId(approvalFlow.FlowId, approvalFlow.CurrVersion)
  18. if err != nil {
  19. err = errors.New("查询审批节点失败:Err:" + err.Error())
  20. return
  21. }
  22. for _, approvalFlowNode := range approvalFlowNodeList {
  23. userList, tmpErr := getAdminListByUserType(approvalFlowNode.UserType, approvalFlowNode.User, approvalFlow.ProductId)
  24. if tmpErr != nil {
  25. err = errors.New("获取审批人失败:Err:" + tmpErr.Error())
  26. return
  27. }
  28. for _, user := range userList {
  29. userInfo := approval_flow_node.User{
  30. AdminId: user.AdminId,
  31. Name: user.RealName,
  32. RoleTypeCode: user.RoleTypeCode,
  33. Mobile: user.Mobile,
  34. }
  35. approvalFlowNode.UserList = append(approvalFlowNode.UserList, userInfo)
  36. }
  37. }
  38. approvalFlow.NodeList = approvalFlowNodeList
  39. return
  40. }
  41. //格式化数据返回
  42. func FormatApprovalFlow(approvalFlow *approval_flow.ApprovalFlowItem) (list [][]contract_approval_record.ContractApprovalRecord, err error) {
  43. for _, node := range approvalFlow.NodeList {
  44. approvalRecordList := make([]contract_approval_record.ContractApprovalRecord, 0)
  45. for _, user := range node.UserList {
  46. approvalRecord := contract_approval_record.ContractApprovalRecord{
  47. Status: "待审批",
  48. ApproveRoleTypeCode: user.RoleTypeCode,
  49. ApproveUserId: user.AdminId,
  50. ApproveUserName: user.Name,
  51. NodeId: node.NodeId,
  52. NodeType: node.NodeType,
  53. PrevNodeId: node.PrevNodeId,
  54. NextNodeId: node.NextNodeId,
  55. AuditType: node.AuditType,
  56. CreateTime: node.CreateTime,
  57. }
  58. approvalRecordList = append(approvalRecordList, approvalRecord)
  59. }
  60. list = append(list, approvalRecordList)
  61. }
  62. return
  63. }
  64. //获取审批人信息
  65. func getAdminListByUserType(userType, user string, productId int) (adminList []*admin.Admin, err error) {
  66. switch userType {
  67. case "user":
  68. adminList, err = admin.GetAdminListByIds(user)
  69. return
  70. case "manager":
  71. roleTypeCode := ``
  72. if productId == 1 {
  73. roleTypeCode = `ficc_admin`
  74. } else if productId == 1 {
  75. roleTypeCode = `rai_admin`
  76. }
  77. if roleTypeCode == `` {
  78. err = errors.New("找不到对应的主管")
  79. return
  80. }
  81. adminList, err = admin.GetAdminListByRoleCode(roleTypeCode)
  82. return
  83. case "role": //角色类型
  84. roleSlice := strings.Split(user, ",")
  85. for _, roleTypeCode := range roleSlice {
  86. list, tmpErr := admin.GetAdminListByRoleCode(roleTypeCode)
  87. if tmpErr != nil {
  88. err = tmpErr
  89. return
  90. }
  91. adminList = append(adminList, list...)
  92. }
  93. return
  94. }
  95. err = errors.New("查找审批人信息异常")
  96. return
  97. }
  98. //获取审批单的审批流程
  99. func GetNewApprovalFlow(contractApprovalId int) (flowNodeListResp [][]*contract_approval_record.ContractApprovalRecord, err error) {
  100. list, err := contract_approval_record.GetContractApprovalRecordListByContractApprovalId(contractApprovalId)
  101. nodeMap := make(map[int][]*contract_approval_record.ContractApprovalRecord)
  102. nodeIdList := make([]int, 0)
  103. for _, contractApprovalRecord := range list {
  104. if _, ok := nodeMap[contractApprovalRecord.NodeId]; ok {
  105. nodeMap[contractApprovalRecord.NodeId] = append(nodeMap[contractApprovalRecord.NodeId], contractApprovalRecord)
  106. } else {
  107. tmp := make([]*contract_approval_record.ContractApprovalRecord, 0)
  108. tmp = append(tmp, contractApprovalRecord)
  109. nodeMap[contractApprovalRecord.NodeId] = tmp
  110. nodeIdList = append(nodeIdList, contractApprovalRecord.NodeId)
  111. }
  112. }
  113. for _, nodeId := range nodeIdList {
  114. flowNodeListResp = append(flowNodeListResp, nodeMap[nodeId])
  115. }
  116. return
  117. }