run.go 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. package work_flow_service
  2. import (
  3. "fmt"
  4. flowModel "gfast/app/model/admin/wf_flow"
  5. "gfast/app/model/admin/wf_run"
  6. "github.com/gogf/gf/database/gdb"
  7. "github.com/gogf/gf/errors/gerror"
  8. "github.com/gogf/gf/frame/g"
  9. "github.com/gogf/gf/os/gtime"
  10. "github.com/gogf/gf/util/gconv"
  11. )
  12. func AddWfRun(wfId int64, processId int, wfFid int, wfType, wfTitle, wfStatusField string, userId uint64, tx *gdb.TX) (runId int64, err error) {
  13. //删除旧的流程数据
  14. _, err = wf_run.Model.TX(tx).Delete(g.Map{
  15. "from_table": wfType,
  16. "from_id": wfFid,
  17. })
  18. if err != nil {
  19. g.Log().Error(err)
  20. return 0, gerror.New("删除旧流程信息失败")
  21. }
  22. data := &wf_run.RunAddData{
  23. Pid: 0,
  24. Uid: gconv.Uint(userId),
  25. FlowId: gconv.Uint(wfId),
  26. FromTable: wfType,
  27. FromId: wfFid,
  28. FromTitle: wfTitle,
  29. FromStatus: wfStatusField,
  30. RunName: gconv.String(wfFid),
  31. RunFlowId: gconv.Uint(wfId),
  32. RunFlowProcess: gconv.String(processId),
  33. Dateline: gconv.Uint(gtime.Timestamp()),
  34. }
  35. return wf_run.Add(data, tx)
  36. }
  37. func Up(runId uint, flowProcess string, tx *gdb.TX) (err error) {
  38. err = wf_run.UpdateRun(runId, g.Map{
  39. "run_flow_process": flowProcess,
  40. }, tx)
  41. if err != nil {
  42. g.Log().Error(err)
  43. err = gerror.New("更新流程运行信息失败")
  44. }
  45. return
  46. }
  47. func UpFlowPress(id uint, runProcess string, tx *gdb.TX) error {
  48. return Up(id, runProcess, tx)
  49. }
  50. func EndFlow(runId uint, tx *gdb.TX) error {
  51. err := wf_run.UpdateRun(runId, g.Map{
  52. "status": 1,
  53. "endtime": gtime.Timestamp(),
  54. }, tx)
  55. if err != nil {
  56. g.Log().Error(err)
  57. err = gerror.New("结束流程主状态失败")
  58. }
  59. return err
  60. }
  61. func UpFlow(runId uint, sid int64, tx *gdb.TX) error {
  62. err := wf_run.UpdateRun(runId, g.Map{
  63. "is_sing": 1,
  64. "sing_id": sid,
  65. "endtime": gtime.Timestamp(),
  66. }, tx)
  67. if err != nil {
  68. g.Log().Error(err)
  69. err = gerror.New("设置会签状态失败")
  70. }
  71. return err
  72. }
  73. func UpRun(id uint, tx *gdb.TX) error {
  74. err := wf_run.UpdateRun(id, g.Map{
  75. "is_sing": 0,
  76. }, tx)
  77. if err != nil {
  78. g.Log().Error(err)
  79. err = gerror.New("更新流程状态失败")
  80. }
  81. return err
  82. }
  83. //终止流程操作
  84. func DoSupEnd(runId uint, userId uint64, wfStatusField string) error {
  85. //获取流程运行信息
  86. runInfo, err := wf_run.GetRunById(runId)
  87. if err != nil {
  88. return err
  89. }
  90. //日志信息
  91. fm := &flowModel.SaveWfFlowReq{
  92. WfType: runInfo.FromTable,
  93. WfFid: runInfo.FromId,
  94. WfId: gconv.Int64(runInfo.FlowId),
  95. CheckCon: fmt.Sprintf("编号:%d的管理员终止了本流程!", userId),
  96. RunProcess: gconv.Uint(runInfo.RunFlowProcess),
  97. RunId: runId,
  98. Art: "",
  99. UserId: userId,
  100. }
  101. tx, err := g.DB().Begin()
  102. if err != nil {
  103. g.Log().Error(err)
  104. return gerror.New("开启事务失败")
  105. }
  106. //结束流程
  107. err = EndFlow(runId, tx)
  108. if err != nil {
  109. tx.Rollback()
  110. return err
  111. }
  112. err = EndProcess(gconv.Uint(runInfo.RunFlowProcess), fm.CheckCon, 2, tx)
  113. if err != nil {
  114. tx.Rollback()
  115. return err
  116. }
  117. //日志记录
  118. err = AddRunLog(gconv.Int64(runId), fm, "SupEnd", tx)
  119. if err != nil {
  120. tx.Rollback()
  121. return err
  122. }
  123. //更新单据状态
  124. err = UpdateBill(fm.WfFid, fm.WfType, wfStatusField, 2, tx)
  125. if err != nil {
  126. tx.Rollback()
  127. return err
  128. }
  129. tx.Commit()
  130. return nil
  131. }