| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208 |
- package work_flow_service
- import (
- "gfast/app/model/admin/user"
- flowModel "gfast/app/model/admin/wf_flow"
- "gfast/app/model/admin/wf_flow_process"
- "gfast/app/model/admin/wf_run_log"
- "gfast/app/model/admin/wf_run_process"
- "gfast/app/model/admin/wf_workinfo"
- "github.com/gogf/gf/database/gdb"
- "github.com/gogf/gf/errors/gerror"
- "github.com/gogf/gf/frame/g"
- "github.com/gogf/gf/os/gtime"
- "github.com/gogf/gf/text/gstr"
- "github.com/gogf/gf/util/gconv"
- )
- //工作流审批日志记录
- func AddRunLog(runId int64, req *flowModel.SaveWfFlowReq, btn string, tx *gdb.TX) error {
- workReturn := ""
- if btn != "Send" && btn != "SupEnd" {
- //workReturn =
- //在日志记录前加载节点钩子
- var err error
- workReturn, err = WorkApi(req, tx)
- if err != nil {
- return err
- }
- }
- err := wf_run_log.Add(&wf_run_log.AddData{
- Uid: gconv.Uint(req.UserId),
- FromId: req.WfFid,
- FromTable: req.WfType,
- RunId: gconv.Uint(runId),
- Content: req.CheckCon,
- WorkInfo: workReturn,
- Art: req.Art,
- Btn: btn,
- Dateline: gconv.Uint(gtime.Timestamp()),
- }, tx)
- return err
- }
- func WorkApi(req *flowModel.SaveWfFlowReq, tx *gdb.TX) (string, error) {
- sqlReturn := "null"
- msgReturn := "null"
- //去除当前运行的步骤ID
- runProcess, err := wf_run_process.GetProcessById(req.RunProcess)
- if err != nil {
- return "", err
- }
- runFlowProcess := runProcess.RunFlowProcess
- //获取当前步骤版本ID,对应的所有信息
- flowProcessInfo, err := wf_flow_process.GetProcessInfoById(runFlowProcess)
- if err != nil {
- return "", err
- }
- if flowProcessInfo == nil {
- return "flow_process_info err!", nil
- }
- if flowProcessInfo.WorkSql != "" {
- workInfoId, err := workSql(req, flowProcessInfo, tx)
- if err != nil {
- return "", err
- }
- sqlReturn = gconv.String(workInfoId)
- if flowProcessInfo.WorkMsg != "" {
- workInfoId, err := workMsg(req, flowProcessInfo, tx)
- if err != nil {
- return "", err
- }
- msgReturn = gconv.String(workInfoId)
- }
- }
- return "work_sql:" + sqlReturn + "|work_msg:" + msgReturn, nil
- }
- func workMsg(req *flowModel.SaveWfFlowReq, flowProcessInfo *wf_flow_process.Entity, tx *gdb.TX) (int64, error) {
- newWorkMsg := gstr.ReplaceIByArray(flowProcessInfo.WorkMsg, []string{
- "@from_id", gconv.String(req.WfFid),
- "@run_id", gconv.String(req.RunId),
- "@check_con", req.CheckCon,
- })
- workInfoId, err := wf_workinfo.Add(&wf_workinfo.AddData{
- Datetime: gtime.Now(),
- Type: "work_msg",
- BillInfo: gconv.String(req),
- Data: newWorkMsg,
- Info: "success",
- }, tx)
- if err != nil {
- return -1, err
- }
- return workInfoId, nil
- }
- func workSql(req *flowModel.SaveWfFlowReq, flowProcessInfo *wf_flow_process.Entity, tx *gdb.TX) (int64, error) {
- newWorkSql := gstr.ReplaceIByArray(flowProcessInfo.WorkSql, []string{
- "@from_id", gconv.String(req.WfFid),
- "@run_id", gconv.String(req.RunId),
- "@check_con", req.CheckCon,
- })
- workReturn := ""
- _, err := g.DB().Query(newWorkSql)
- if err != nil {
- g.Log().Error()
- workReturn = "SQL_Err:" + newWorkSql
- }
- workInfoId, err := wf_workinfo.Add(&wf_workinfo.AddData{
- Datetime: gtime.Now(),
- Type: "work_sql",
- BillInfo: gconv.String(req),
- Data: newWorkSql,
- Info: workReturn,
- }, tx)
- if err != nil {
- return -1, err
- }
- return workInfoId, nil
- }
- type RunLogInfo struct {
- *wf_run_log.Entity
- User string `json:"user"`
- }
- //获取审批日志
- func RunLog(wfFid uint, wfType string) ([]*RunLogInfo, error) {
- types := g.MapStrStr{
- "Send": "流程发起",
- "ok": "同意提交",
- "Back": "退回修改",
- "SupEnd": "终止流程",
- "Sing": "会签提交",
- "sok": "会签同意",
- "SingBack": "会签退回",
- "SingSing": "会签再会签",
- }
- runLog, err := wf_run_log.GetRunLog(g.Map{
- "from_id": wfFid,
- "from_table": wfType,
- })
- if err != nil {
- return nil, err
- }
- logs := make([]*RunLogInfo, len(runLog))
- for k, v := range runLog {
- logs[k] = &RunLogInfo{
- Entity: v,
- }
- logs[k].Btn = types[v.Btn]
- userInfo, err := user.GetUserById(gconv.Uint64(v.Uid))
- if err != nil {
- return nil, err
- }
- logs[k].User = userInfo.UserNickname
- }
- return logs, nil
- }
- //运行记录
- func Run(req *flowModel.CheckWfSaveReq, btn string, tx *gdb.TX) error {
- if req.Npid != "" && req.Npid != "0" {
- nexPid := gstr.Split(req.Npid, ",")
- var wps []*wf_flow_process.Entity
- for _, v := range nexPid {
- wfProcess, err := GetProcessInfo(gconv.Uint(v), req.RunId)
- if err != nil {
- return err
- }
- //添加流程步骤日志
- wp := new(wf_flow_process.Entity)
- err = gconv.Struct(wfProcess.Entity, wp)
- if err != nil {
- g.Log().Error(err)
- return gerror.New("转换流程步骤数据失败")
- }
- err = AddWorkflowProcess(req.FlowId, wp, gconv.Int64(req.RunId), req.UserId, req.Todo, tx)
- if err != nil {
- return err
- }
- wps = append(wps, wp)
- }
- if wps != nil {
- //设置下一步审批人员/部门信息
- err := SetBusinessCheckers(gconv.Int(req.WfFid), req.WfType, gconv.Int64(req.RunId), wps, req.Todo, tx)
- if err != nil {
- return err
- }
- }
- }
- //日志记录
- fm := &flowModel.SaveWfFlowReq{
- WfType: req.WfType,
- WfFid: gconv.Int(req.WfFid),
- WfId: req.FlowId,
- CheckCon: req.CheckCon,
- RunProcess: req.RunProcess,
- RunId: req.RunId,
- Art: req.Art,
- UserId: req.UserId,
- }
- err := AddRunLog(gconv.Int64(req.RunId), fm, btn, tx)
- if err != nil {
- return err
- }
- return nil
- }
|