|
|
@@ -0,0 +1,414 @@
|
|
|
+// ==========================================================================
|
|
|
+// 生成日期:2020-08-24 17:13:46
|
|
|
+// 生成人:gfast
|
|
|
+// ==========================================================================
|
|
|
+package admin
|
|
|
+
|
|
|
+import (
|
|
|
+ "gfast/app/model/admin/sys_dept"
|
|
|
+ "gfast/app/model/admin/user"
|
|
|
+ flowModel "gfast/app/model/admin/wf_flow"
|
|
|
+ "gfast/app/model/admin/wf_flow_process"
|
|
|
+ "gfast/app/service/admin/dept_service"
|
|
|
+ flowService "gfast/app/service/admin/flow_service"
|
|
|
+ "gfast/app/service/admin/user_service"
|
|
|
+ "gfast/app/service/common/work_flow_service"
|
|
|
+ "gfast/library/response"
|
|
|
+ "github.com/gogf/gf/frame/g"
|
|
|
+ "github.com/gogf/gf/net/ghttp"
|
|
|
+ "github.com/gogf/gf/util/gconv"
|
|
|
+ "github.com/gogf/gf/util/gvalid"
|
|
|
+)
|
|
|
+
|
|
|
+//控制器
|
|
|
+type Flow struct{}
|
|
|
+
|
|
|
+//列表页
|
|
|
+func (c *Flow) List(r *ghttp.Request) {
|
|
|
+ // 定义一个结构体存储请求参数
|
|
|
+ var req *flowModel.SelectPageReq
|
|
|
+ // 获取参数
|
|
|
+ err := r.Parse(&req)
|
|
|
+ if err != nil {
|
|
|
+ response.FailJson(true, r, err.(*gvalid.Error).FirstString())
|
|
|
+ }
|
|
|
+ total, page, list, err := flowService.SelectListByPage(req)
|
|
|
+ if err != nil {
|
|
|
+ response.FailJson(true, r, err.Error())
|
|
|
+ }
|
|
|
+ //获取流程运行状态
|
|
|
+ listData, err := flowService.GetRunningStatus(list)
|
|
|
+ if err != nil {
|
|
|
+ response.FailJson(true, r, err.Error())
|
|
|
+ }
|
|
|
+ result := g.Map{
|
|
|
+ "currentPage": page,
|
|
|
+ "total": total,
|
|
|
+ "list": listData,
|
|
|
+ }
|
|
|
+ response.SusJson(true, r, "获取列表数据成功", result)
|
|
|
+}
|
|
|
+
|
|
|
+// 新增
|
|
|
+func (c *Flow) Add(r *ghttp.Request) {
|
|
|
+ if r.Method == "POST" {
|
|
|
+ var req *flowModel.AddReq
|
|
|
+ // 通过Parse方法解析获取参数
|
|
|
+ err := r.Parse(&req)
|
|
|
+ if err != nil {
|
|
|
+ response.FailJson(true, r, err.(*gvalid.Error).FirstString())
|
|
|
+ }
|
|
|
+ req.Uid = user_service.GetLoginID(r)
|
|
|
+ // 调用service中的添加函数添加
|
|
|
+ err = flowService.AddSave(req)
|
|
|
+ if err != nil {
|
|
|
+ response.FailJson(true, r, err.Error())
|
|
|
+ }
|
|
|
+ response.SusJson(true, r, "添加成功")
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+// 修改
|
|
|
+func (c *Flow) Edit(r *ghttp.Request) {
|
|
|
+ // 如果是post提交的请求就执行修改操作
|
|
|
+ if r.Method == "POST" {
|
|
|
+ var editReq *flowModel.EditReq
|
|
|
+ // 通过Parse方法解析获取参数
|
|
|
+ err := r.Parse(&editReq)
|
|
|
+ if err != nil {
|
|
|
+ response.FailJson(true, r, err.(*gvalid.Error).FirstString())
|
|
|
+ }
|
|
|
+ err = flowService.EditSave(editReq)
|
|
|
+ if err != nil {
|
|
|
+ response.FailJson(true, r, err.Error())
|
|
|
+ }
|
|
|
+ response.SusJson(true, r, "修改参数成功")
|
|
|
+ }
|
|
|
+ // 不是post提交的请求就到修改页面后查询出要修改的记录
|
|
|
+ id := r.GetInt("id")
|
|
|
+ params, err := flowService.GetByID(int64(id))
|
|
|
+ if err != nil {
|
|
|
+ response.FailJson(true, r, err.Error())
|
|
|
+ }
|
|
|
+ response.SusJson(true, r, "ok", params)
|
|
|
+}
|
|
|
+
|
|
|
+// 删除
|
|
|
+func (c *Flow) Delete(r *ghttp.Request) {
|
|
|
+ var req *flowModel.RemoveReq
|
|
|
+ //获取参数
|
|
|
+ if err := r.Parse(&req); err != nil {
|
|
|
+ response.FailJson(true, r, err.(*gvalid.Error).FirstString())
|
|
|
+ }
|
|
|
+ err := flowService.DeleteByIds(req.Ids)
|
|
|
+ if err != nil {
|
|
|
+ response.FailJson(true, r, "删除失败")
|
|
|
+ }
|
|
|
+ response.SusJson(true, r, "删除成功")
|
|
|
+}
|
|
|
+
|
|
|
+//设置状态
|
|
|
+func (c *Flow) StatusSetFlow(r *ghttp.Request) {
|
|
|
+ var req *flowModel.StatusReq
|
|
|
+ //获取参数
|
|
|
+ if err := r.Parse(&req); err != nil {
|
|
|
+ response.FailJson(true, r, err.(*gvalid.Error).FirstString())
|
|
|
+ }
|
|
|
+ err := flowService.SetStatus(req)
|
|
|
+ if err != nil {
|
|
|
+ response.FailJson(true, r, "状态设置失败")
|
|
|
+ }
|
|
|
+ response.SusJson(true, r, "状态设置成功")
|
|
|
+}
|
|
|
+
|
|
|
+//工作流设计页
|
|
|
+func (c *Flow) DesignFlow(r *ghttp.Request) {
|
|
|
+ id := r.GetInt64("id")
|
|
|
+ if id == 0 {
|
|
|
+ response.FailJson(true, r, "参数错误")
|
|
|
+ }
|
|
|
+ //获取工作流信息
|
|
|
+ flowInfo, err := work_flow_service.GetFlowInfoById(id)
|
|
|
+ if err != nil {
|
|
|
+ response.FailJson(true, r, err.Error())
|
|
|
+ }
|
|
|
+ if flowInfo == nil {
|
|
|
+ response.FailJson(true, r, "未找到数据,请返回重试!")
|
|
|
+ }
|
|
|
+ total, processList, err := work_flow_service.ProcessAll(id)
|
|
|
+ if err != nil {
|
|
|
+ response.FailJson(true, r, err.Error())
|
|
|
+ }
|
|
|
+ processStep := make([]*wf_flow_process.ProcessStepData, 0, 20)
|
|
|
+ for _, process := range processList {
|
|
|
+ step, err := work_flow_service.GetProcessStep(process, processList)
|
|
|
+ if err != nil {
|
|
|
+ response.FailJson(true, r, err.Error())
|
|
|
+ }
|
|
|
+ if step != nil {
|
|
|
+ processStep = append(processStep, step...)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //获取流程对应表字段信息
|
|
|
+ fields, err := work_flow_service.GetFlowTableFields(flowInfo.Type)
|
|
|
+ if err != nil {
|
|
|
+ response.FailJson(true, r, err.Error())
|
|
|
+ }
|
|
|
+ response.SusJson(true, r, "ok", g.Map{
|
|
|
+ "flowInfo": flowInfo,
|
|
|
+ "processList": processList,
|
|
|
+ "total": total,
|
|
|
+ "fields": fields,
|
|
|
+ "processStep": processStep,
|
|
|
+ })
|
|
|
+}
|
|
|
+
|
|
|
+//添加流程步骤
|
|
|
+func (c *Flow) AddProcess(r *ghttp.Request) {
|
|
|
+ id := r.GetInt64("id")
|
|
|
+ if id == 0 {
|
|
|
+ response.FailJson(true, r, "参数错误")
|
|
|
+ }
|
|
|
+ //获取工作流信息
|
|
|
+ flowInfo, err := work_flow_service.GetFlowInfoById(id)
|
|
|
+ if err != nil {
|
|
|
+ response.FailJson(true, r, err.Error())
|
|
|
+ }
|
|
|
+ if flowInfo == nil {
|
|
|
+ response.FailJson(true, r, "添加失败,未找到流程")
|
|
|
+ }
|
|
|
+ err = work_flow_service.ProcessAdd(id)
|
|
|
+ if err != nil {
|
|
|
+ response.FailJson(true, r, err.Error())
|
|
|
+ }
|
|
|
+ response.SusJson(true, r, "添加成功")
|
|
|
+}
|
|
|
+
|
|
|
+//保存设计
|
|
|
+func (c *Flow) SaveProcess(r *ghttp.Request) {
|
|
|
+ var req *wf_flow_process.SaveProcessReqBatch
|
|
|
+ //获取参数
|
|
|
+ if err := r.Parse(&req); err != nil {
|
|
|
+ response.FailJson(true, r, err.(*gvalid.Error).FirstString())
|
|
|
+ }
|
|
|
+ for _, rq := range req.Data {
|
|
|
+ // 使用结构体定义的校验规则和错误提示进行校验
|
|
|
+ if err := gvalid.CheckStruct(rq, nil); err != nil {
|
|
|
+ response.FailJson(true, r, err.FirstString())
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if err := work_flow_service.SaveProcess(req); err != nil {
|
|
|
+ response.FailJson(true, r, err.Error())
|
|
|
+ }
|
|
|
+ response.SusJson(true, r, "保存成功")
|
|
|
+}
|
|
|
+
|
|
|
+//获取办理对象(人员/部门)
|
|
|
+func (c *Flow) GetManager(r *ghttp.Request) {
|
|
|
+ manageType := r.GetString("type")
|
|
|
+ //kid := r.GetString("kid")
|
|
|
+ keyWords := r.GetString("key")
|
|
|
+ if manageType == "getUser" {
|
|
|
+ req := &user.SearchReq{
|
|
|
+ KeyWords: keyWords,
|
|
|
+ PageSize: 50,
|
|
|
+ }
|
|
|
+ _, _, userList, err := user_service.GetAdminList(req)
|
|
|
+ if err != nil {
|
|
|
+ response.FailJson(true, r, err.Error())
|
|
|
+ }
|
|
|
+ res := make(g.ListStrAny, len(userList))
|
|
|
+ for k, v := range userList {
|
|
|
+ res[k] = g.MapStrAny{
|
|
|
+ "label": v.UserNickname,
|
|
|
+ "value": v.Id,
|
|
|
+ }
|
|
|
+ }
|
|
|
+ response.SusJson(true, r, "ok", res)
|
|
|
+ } else if manageType == "getDepartment" {
|
|
|
+ req := &sys_dept.SearchParams{
|
|
|
+ DeptName: keyWords,
|
|
|
+ }
|
|
|
+ list, err := dept_service.GetList(req)
|
|
|
+ if err != nil {
|
|
|
+ response.FailJson(true, r, err.Error())
|
|
|
+ }
|
|
|
+ res := make(g.ListStrAny, len(list))
|
|
|
+ for k, v := range list {
|
|
|
+ res[k] = g.MapStrAny{
|
|
|
+ "label": v.DeptName,
|
|
|
+ "value": v.DeptID,
|
|
|
+ }
|
|
|
+ }
|
|
|
+ response.SusJson(true, r, "ok", res)
|
|
|
+ }
|
|
|
+ response.FailJson(true, r, "参数错误")
|
|
|
+}
|
|
|
+
|
|
|
+//保存节点属性
|
|
|
+func (c *Flow) SaveAttr(r *ghttp.Request) {
|
|
|
+ var req *wf_flow_process.SaveAttrReq
|
|
|
+ //获取参数
|
|
|
+ if err := r.Parse(&req); err != nil {
|
|
|
+ response.FailJson(true, r, err.(*gvalid.Error).FirstString())
|
|
|
+ }
|
|
|
+ if err := work_flow_service.SaveProcessAttr(req); err != nil {
|
|
|
+ response.FailJson(true, r, err.Error())
|
|
|
+ }
|
|
|
+ response.SusJson(true, r, "保存成功", req)
|
|
|
+}
|
|
|
+
|
|
|
+//删除节点
|
|
|
+func (c *Flow) DeleteProcess(r *ghttp.Request) {
|
|
|
+ var req *wf_flow_process.DeleteProcessReq
|
|
|
+ //获取参数
|
|
|
+ if err := r.Parse(&req); err != nil {
|
|
|
+ response.FailJson(true, r, err.(*gvalid.Error).FirstString())
|
|
|
+ }
|
|
|
+ if err := work_flow_service.ProcessDelete(req); err != nil {
|
|
|
+ response.FailJson(true, r, err.Error())
|
|
|
+ }
|
|
|
+ response.SusJson(true, r, "删除成功")
|
|
|
+}
|
|
|
+
|
|
|
+//清除流程节点
|
|
|
+func (c *Flow) DeleteProcessAll(r *ghttp.Request) {
|
|
|
+ flowId := r.GetInt("flow_id")
|
|
|
+ if flowId == 0 {
|
|
|
+ response.FailJson(true, r, "参数错误")
|
|
|
+ }
|
|
|
+ if err := work_flow_service.ProcessDeleteAll(flowId); err != nil {
|
|
|
+ response.FailJson(true, r, err.Error())
|
|
|
+ }
|
|
|
+ response.SusJson(true, r, "清除成功")
|
|
|
+}
|
|
|
+
|
|
|
+//检查流程逻辑
|
|
|
+func (c *Flow) CheckFlow(r *ghttp.Request) {
|
|
|
+ flowId := r.GetInt64("flow_id")
|
|
|
+ if flowId == 0 {
|
|
|
+ response.FailJson(true, r, "参数错误")
|
|
|
+ }
|
|
|
+ err := work_flow_service.CheckFlow(flowId)
|
|
|
+ if err != nil {
|
|
|
+ response.FailJson(true, r, err.Error())
|
|
|
+ }
|
|
|
+ response.SusJson(true, r, "简单逻辑检查通过,请自行检查转出条件!")
|
|
|
+}
|
|
|
+
|
|
|
+//发起选择工作流程
|
|
|
+func (c *Flow) WfStart(r *ghttp.Request) {
|
|
|
+ var req *flowModel.StartFlowReq
|
|
|
+ //获取参数
|
|
|
+ if err := r.Parse(&req); err != nil {
|
|
|
+ response.FailJson(true, r, err.(*gvalid.Error).FirstString())
|
|
|
+ }
|
|
|
+ flow, err := work_flow_service.GetWorkFlowByType(req.WfType)
|
|
|
+ if err != nil {
|
|
|
+ response.FailJson(true, r, err.Error())
|
|
|
+ }
|
|
|
+
|
|
|
+ response.SusJson(true, r, "ok", g.Map{
|
|
|
+ "flow": flow,
|
|
|
+ "info": req,
|
|
|
+ })
|
|
|
+}
|
|
|
+
|
|
|
+//保存业务流程信息
|
|
|
+func (c *Flow) SaveStartWf(r *ghttp.Request) {
|
|
|
+ var req *flowModel.SaveWfFlowReq
|
|
|
+ //获取参数
|
|
|
+ if err := r.Parse(&req); err != nil {
|
|
|
+ response.FailJson(true, r, err.(*gvalid.Error).FirstString())
|
|
|
+ }
|
|
|
+ req.UserId = user_service.GetLoginID(r)
|
|
|
+ err := work_flow_service.StartWorkFlow(req)
|
|
|
+ if err != nil {
|
|
|
+ response.FailJson(true, r, err.Error())
|
|
|
+ }
|
|
|
+ response.SusJson(true, r, "发起成功")
|
|
|
+}
|
|
|
+
|
|
|
+//审批
|
|
|
+func (c *Flow) WfCheck(r *ghttp.Request) {
|
|
|
+ var req *flowModel.CheckWfReq
|
|
|
+ //获取参数
|
|
|
+ if err := r.Parse(&req); err != nil {
|
|
|
+ response.FailJson(true, r, err.(*gvalid.Error).FirstString())
|
|
|
+ }
|
|
|
+ //当前用户信息
|
|
|
+ userInfo := user_service.GetLoginAdminInfo(r)
|
|
|
+ //获取流程信息
|
|
|
+ flowInfo, err := work_flow_service.WorkFlowInfo(req.WfFid, req.WfType, userInfo.Id, userInfo.DeptId)
|
|
|
+ if err != nil {
|
|
|
+ response.FailJson(true, r, err.Error())
|
|
|
+ }
|
|
|
+ //获取流程审批日志信息
|
|
|
+ flowLogs, err := work_flow_service.FlowLog("logs", req.WfFid, req.WfType)
|
|
|
+ if err != nil {
|
|
|
+ response.FailJson(true, r, err.Error())
|
|
|
+ }
|
|
|
+ //获取业务信息
|
|
|
+ table, err := work_flow_service.GetBill(gconv.Int(req.WfFid), req.WfType)
|
|
|
+ if err != nil {
|
|
|
+ response.FailJson(true, r, err.Error())
|
|
|
+ }
|
|
|
+ response.SusJson(true, r, "ok", g.Map{
|
|
|
+ "info": req,
|
|
|
+ "flowInfo": flowInfo,
|
|
|
+ "flowLogs": flowLogs,
|
|
|
+ "table": table,
|
|
|
+ })
|
|
|
+}
|
|
|
+
|
|
|
+//审批数据保存
|
|
|
+func (c *Flow) CheckSave(r *ghttp.Request) {
|
|
|
+ var req *flowModel.CheckWfSaveReq
|
|
|
+ //获取参数
|
|
|
+ if err := r.Parse(&req); err != nil {
|
|
|
+ response.FailJson(true, r, err.(*gvalid.Error).FirstString())
|
|
|
+ }
|
|
|
+ req.UserId = user_service.GetLoginID(r)
|
|
|
+ err := work_flow_service.WorkCheckAction(req)
|
|
|
+ if err != nil {
|
|
|
+ response.FailJson(true, r, err.Error())
|
|
|
+ }
|
|
|
+ response.SusJson(true, r, "ok", req)
|
|
|
+}
|
|
|
+
|
|
|
+//获取回退步骤数据
|
|
|
+func (c *Flow) GetBackTodo(r *ghttp.Request) {
|
|
|
+ var req *flowModel.BackTodoReq
|
|
|
+ //获取参数
|
|
|
+ if err := r.Parse(&req); err != nil {
|
|
|
+ response.FailJson(true, r, err.(*gvalid.Error).FirstString())
|
|
|
+ }
|
|
|
+ todo, err := work_flow_service.GetBackTodo(req)
|
|
|
+ if err != nil {
|
|
|
+ response.FailJson(true, r, err.Error())
|
|
|
+ }
|
|
|
+ response.SusJson(true, r, "ok", todo)
|
|
|
+}
|
|
|
+
|
|
|
+//流程监控
|
|
|
+func (c *Flow) Monitoring(r *ghttp.Request) {
|
|
|
+ list, err := work_flow_service.GetRunningFlow()
|
|
|
+ if err != nil {
|
|
|
+ response.FailJson(true, r, err.Error())
|
|
|
+ }
|
|
|
+ response.SusJson(true, r, "ok", list)
|
|
|
+}
|
|
|
+
|
|
|
+//终止流程
|
|
|
+func (c *Flow) StopFlow(r *ghttp.Request) {
|
|
|
+ runId := r.GetUint("id")
|
|
|
+ wfStatusField := r.GetString("WfStatusField")
|
|
|
+ if runId == 0 || wfStatusField == "" {
|
|
|
+ response.FailJson(true, r, "参数错误")
|
|
|
+ }
|
|
|
+ userId := user_service.GetLoginID(r)
|
|
|
+ if err := work_flow_service.DoSupEnd(runId, userId, wfStatusField); err != nil {
|
|
|
+ response.FailJson(true, r, err.Error())
|
|
|
+ }
|
|
|
+ response.SusJson(true, r, "终止成功")
|
|
|
+}
|