task.go 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. package work_flow_service
  2. import (
  3. flowModel "gfast/app/model/admin/wf_flow"
  4. "gfast/app/model/admin/wf_run_process"
  5. "github.com/gogf/gf/errors/gerror"
  6. "github.com/gogf/gf/frame/g"
  7. "github.com/gogf/gf/text/gstr"
  8. "github.com/gogf/gf/util/gconv"
  9. )
  10. func DoTask(req *flowModel.CheckWfSaveReq) error {
  11. npid := req.Npid //下一步骤流程id
  12. runId := req.RunId //运行中的id
  13. runProcess := req.RunProcess //运行中的process
  14. if req.Sup == 1 {
  15. req.CheckCon = "[管理员代办]" + req.CheckCon
  16. }
  17. var runProcessList []*wf_run_process.Entity
  18. if req.WfMode == 2 {
  19. var err error
  20. runProcessList, err = wf_run_process.GetProcessByMap(g.Map{
  21. "run_id": req.RunId,
  22. "status": 0,
  23. "id <> ": req.RunProcess,
  24. })
  25. if err != nil {
  26. return err
  27. }
  28. if runProcessList != nil {
  29. npids := make([]uint, len(runProcessList))
  30. for k, v := range runProcessList {
  31. npids[k] = v.RunFlowProcess
  32. }
  33. npid = gstr.JoinAny(npids, ",")
  34. }
  35. }
  36. tx, err := g.DB().Begin()
  37. if err != nil {
  38. g.Log().Error()
  39. return gerror.New("开启事务失败")
  40. }
  41. if npid != "0" && npid != "" { //判断是否为最后一步
  42. //不是最后一步
  43. //结束流程
  44. err = EndProcess(runProcess, req.CheckCon, 2, tx)
  45. if err != nil {
  46. tx.Rollback()
  47. return err
  48. }
  49. //同步模式下只写入记录
  50. if req.WfMode != 2 { //非同步模式
  51. //更新单据信息
  52. err = Up(runId, npid, tx)
  53. if err != nil {
  54. tx.Rollback()
  55. return err
  56. }
  57. //记录下一个流程(消息记录)
  58. err = Run(req, "ok", tx)
  59. if err != nil {
  60. tx.Rollback()
  61. return err
  62. }
  63. } else {
  64. fm := &flowModel.SaveWfFlowReq{
  65. WfType: req.WfType,
  66. WfFid: gconv.Int(req.WfFid),
  67. WfId: req.FlowId,
  68. CheckCon: req.CheckCon,
  69. RunProcess: req.RunProcess,
  70. RunId: req.RunId,
  71. Art: req.Art,
  72. UserId: req.UserId,
  73. }
  74. err = AddRunLog(gconv.Int64(req.RunId), fm, "ok", tx)
  75. if err != nil {
  76. tx.Rollback()
  77. return err
  78. }
  79. }
  80. } else {
  81. //是最后一步
  82. //结束流程
  83. err = EndFlow(runId, tx)
  84. if err != nil {
  85. tx.Rollback()
  86. return err
  87. }
  88. err = EndProcess(runProcess, req.CheckCon, 2, tx)
  89. if err != nil {
  90. tx.Rollback()
  91. return err
  92. }
  93. //删除审批表中的用户/部门信息
  94. err = DeleteBusinessChecker(req.WfFid, req.WfType, tx)
  95. if err != nil {
  96. tx.Rollback()
  97. return err
  98. }
  99. fm := &flowModel.SaveWfFlowReq{
  100. WfType: req.WfType,
  101. WfFid: gconv.Int(req.WfFid),
  102. WfId: req.FlowId,
  103. CheckCon: req.CheckCon,
  104. RunProcess: req.RunProcess,
  105. RunId: req.RunId,
  106. Art: req.Art,
  107. UserId: req.UserId,
  108. }
  109. err = AddRunLog(gconv.Int64(runId), fm, "ok", tx)
  110. if err != nil {
  111. tx.Rollback()
  112. return err
  113. }
  114. //更新单据状态
  115. err = UpdateBill(gconv.Int(req.WfFid), req.WfType, req.WfStatusField, 2, tx)
  116. if err != nil {
  117. tx.Rollback()
  118. return err
  119. }
  120. }
  121. tx.Commit()
  122. return nil
  123. }