run_process.go 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  1. package work_flow_service
  2. import (
  3. "gfast/app/model/admin/user"
  4. "gfast/app/model/admin/wf_flow"
  5. "gfast/app/model/admin/wf_flow_process"
  6. "gfast/app/model/admin/wf_run"
  7. "gfast/app/model/admin/wf_run_process"
  8. "github.com/gogf/gf/database/gdb"
  9. "github.com/gogf/gf/errors/gerror"
  10. "github.com/gogf/gf/frame/g"
  11. "github.com/gogf/gf/os/gtime"
  12. "github.com/gogf/gf/text/gstr"
  13. "github.com/gogf/gf/util/gconv"
  14. )
  15. //添加流程步骤日志
  16. func AddWorkflowProcess(wfId int64, process *wf_flow_process.Entity, runId int64, userId uint64, todo string, tx *gdb.TX) error {
  17. processData := &ProcessData{
  18. Entity: process,
  19. }
  20. if process.AutoPerson == 6 && process.ProcessType == "is_one" {
  21. //事务处理人员
  22. wf, err := wf_run.GetRunById(gconv.Uint(runId))
  23. if err != nil {
  24. return err
  25. }
  26. userIdBil, err := GetBilValue(wf.FromTable, wf.FromId, process.WorkText)
  27. if err != nil {
  28. return err
  29. }
  30. userInfo, err := user.GetUserById(gconv.Uint64(userIdBil))
  31. if err != nil {
  32. return err
  33. }
  34. processData.UserInfo = userInfo
  35. processData.Todo = g.MapStrAny{"text": userInfo.UserNickname}
  36. }
  37. sponsorIds := ""
  38. sponsorText := ""
  39. //非自由选择
  40. if todo == "" {
  41. if process.AutoPerson == 3 {
  42. //办理人员
  43. sponsorIds = process.RangeUserIds
  44. sponsorText = process.RangeUserText
  45. } else if process.AutoPerson == 4 {
  46. //办理人员
  47. sponsorIds = process.AutoSponsorIds
  48. sponsorText = process.AutoSponsorText
  49. } else if process.AutoPerson == 5 {
  50. //办理部门
  51. sponsorIds = process.AutoRoleIds
  52. sponsorText = process.AutoRoleText
  53. } else if process.AutoPerson == 6 {
  54. sponsorText = processData.UserInfo.UserNickname
  55. sponsorIds = gconv.String(processData.UserInfo.Id)
  56. }
  57. } else {
  58. todoArr := gstr.Split(todo, "*%*")
  59. sponsorText = todoArr[1]
  60. sponsorIds = todoArr[0]
  61. }
  62. timeNow := gconv.Uint(gtime.Timestamp())
  63. //判断如果运行步骤已经存在则置为转交状态
  64. err := UpdateRunProcess(g.Map{
  65. "run_id": runId,
  66. "run_flow": wfId,
  67. "run_flow_process": processData.Id,
  68. }, g.Map{"status": 2}, tx)
  69. if err != nil {
  70. tx.Rollback()
  71. return err
  72. }
  73. //添加新的运行状态
  74. data := &wf_run_process.SaveRunProcessData{
  75. Uid: gconv.Uint(userId),
  76. RunId: gconv.Uint(runId),
  77. RunFlow: gconv.Uint(wfId),
  78. RunFlowProcess: gconv.Uint(processData.Id),
  79. ParentFlow: 0,
  80. ParentFlowProcess: 0,
  81. RunChild: 0, //未处理,第一步不能进入子流程
  82. Remark: "",
  83. IsSponsor: 0,
  84. Status: 0,
  85. SponsorIds: sponsorIds, //办理者id
  86. SponsorText: sponsorText, //办理者信息
  87. AutoPerson: gconv.Int(processData.AutoPerson), //办理类别
  88. JsTime: timeNow,
  89. Dateline: timeNow,
  90. WfMode: gconv.Int(processData.WfMode),
  91. WfAction: processData.WfAction,
  92. }
  93. return wf_run_process.Add(data, tx)
  94. }
  95. func RunCheck(process uint) (status uint, err error) {
  96. var entity *wf_run_process.Entity
  97. entity, err = wf_run_process.GetProcessById(process)
  98. if err != nil {
  99. return
  100. }
  101. status = entity.Status
  102. return
  103. }
  104. func EndProcess(runProcess uint, con string, status int, tx *gdb.TX) (err error) {
  105. _, err = wf_run_process.Model.TX(tx).Where("id", runProcess).Update(g.Map{"status": status, "remark": con, "bl_time": gtime.Timestamp()})
  106. if err != nil {
  107. g.Log().Error(err)
  108. err = gerror.New("结束流程错误")
  109. }
  110. return
  111. }
  112. func UpdateRunProcess(where g.Map, data g.Map, tx *gdb.TX) (err error) {
  113. _, err = wf_run_process.Model.TX(tx).Where(where).Update(data)
  114. if err != nil {
  115. g.Log().Error(err)
  116. err = gerror.New("设置运行流程信息失败")
  117. }
  118. return
  119. }
  120. func GetBackTodo(req *wf_flow.BackTodoReq) (string, error) {
  121. where := &wf_run_process.SearchRunProcess{
  122. RunId: req.RunId,
  123. RunFlowProcess: req.Pid,
  124. }
  125. runProcess, err := wf_run_process.GetProcess(where)
  126. if err != nil {
  127. return "", err
  128. }
  129. todo := ""
  130. if runProcess == nil {
  131. return todo, nil
  132. }
  133. if runProcess.AutoPerson == 3 {
  134. todo = runProcess.SponsorIds + "*%*" + runProcess.SponsorText
  135. }
  136. return todo, nil
  137. }
  138. func GetAllRunProcessByRunId(runId int) (runProcess []*wf_run_process.Entity, err error) {
  139. runProcess, err = wf_run_process.GetProcessByMap(g.Map{
  140. "run_id": runId,
  141. "status": 2,
  142. })
  143. return
  144. }