| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327 |
- // ============================================================================
- // This is auto-generated by gf cli tool only once. Fill this file as you wish.
- // ============================================================================
- package wf_flow_process
- import (
- "github.com/gogf/gf/container/garray"
- "github.com/gogf/gf/database/gdb"
- "github.com/gogf/gf/encoding/gjson"
- "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"
- )
- type ProcessData struct {
- Id int `json:"id"`
- Mode string `json:"mode"`
- Name string `json:"name"`
- FlowId uint `json:"flow_id"`
- ProcessName string `json:"process_name"`
- ProcessTo string `json:"process_to"`
- Style string `json:"style"`
- Process *Entity `json:"process"`
- }
- //流程转出信息
- type ProcessStepData struct {
- PrevId int `json:"prev_id"`
- Id int `json:"id"`
- ProcessName string `json:"process_name"`
- ProcessType string `json:"process_type"`
- Condition []string `json:"condition"`
- }
- type SaveProcessReq struct {
- Id int `p:"id" v:"required#流程ID不能为空"`
- Left string `p:"left" v:"required#流程坐标left不能为空"`
- Top string `p:"top" v:"required#流程坐标top不能为空"`
- ProcessTo string `p:"process_to" `
- }
- type SaveProcessReqBatch struct {
- Data []*SaveProcessReq `p:"data" v:"required#数据不能为空"`
- }
- type SaveAttrReq struct {
- FlowId int `p:"flow_id" v:"required#工作流id不能为空"`
- ProcessId int `p:"process_id" v:required#流程id不能为空`
- ProcessName string `p:"process_name" v:required#流程名称不能为空`
- StyleWidth string `p:"style_width"`
- StyleHeight string `p:"style_height"`
- ProcessType string `p:"process_type"`
- WfAction string `p:"wf_action"`
- IsSing string `p:"is_sing"`
- IsBack string `p:"is_back"`
- AutoPerson string `p:"auto_person"`
- RangeUserIds string `p:"range_user_ids"`
- RangeUserText string `p:"range_user_text"`
- AutoSponsorIds string `p:"auto_sponsor_ids"`
- AutoSponsorText string `p:"auto_sponsor_text"`
- AutoRoleIds string `p:"auto_role_ids"`
- AutoRoleText string `p:"auto_role_text"`
- WorkText string `p:"work_text"`
- WorkIds string `p:"work_ids"`
- WfMode string `p:"wf_mode"`
- ProcessInSet []ProcessInSetReq `p:"process_in_set"`
- WorkSql string `p:"work_sql"`
- WorkMsg string `p:"work_msg"`
- ProcessCondition string `p:"process_condition"`
- }
- type ProcessInSetReq struct {
- Id int `p:"id"`
- Condition []string `p:"condition"`
- }
- //流程管理表字段信息
- type FlowTableField struct {
- FieldName string `json:"field_name"`
- FieldText string `json:"field_text"`
- }
- type DeleteProcessReq struct {
- ProcessId int `p:"process_id" v:"required#流程ID不能为空" json:"process_id"`
- FlowId int `p:"flow_id" v:"required#工作流Id不能为空" json:"flow_id"`
- }
- //获取流程下所有步骤信息
- func ProcessAll(flowId int64) (total int64, processData []*ProcessData, err error) {
- var list []*Entity
- list, err = Model.Where("flow_id", flowId).Where("is_del", 0).Order("id asc").FindAll()
- if err != nil {
- g.Log().Error(err)
- err = gerror.New("获取流程数据失败")
- return
- }
- processData = make([]*ProcessData, len(list))
- for k, entity := range list {
- total += 1
- style := gjson.New(entity.Style)
- model := `<span style="color:red">未设置</span>`
- name := `<span style="color:red">未设置</span>`
- var work map[string]string
- if entity.AutoPerson == 3 {
- model = "办理人员"
- name = entity.RangeUserText
- }
- if entity.AutoPerson == 4 {
- model = "办理人员"
- name = entity.AutoSponsorText
- }
- if entity.AutoPerson == 5 {
- model = "办理角色"
- name = entity.AutoRoleText
- }
- if entity.AutoPerson == 6 {
- work = map[string]string{
- "1": "制单人员",
- "2": "制单人员领导",
- }
- model = `<span style="color:blue">事务处理</span>`
- name = work[entity.WorkIds]
- }
- nameAttr := ""
- if entity.ProcessType == "is_one" {
- nameAttr = `<span style="color:blue">[开始]</span>`
- } else {
- if entity.WfMode == 0 {
- nameAttr = "[直线]"
- } else if entity.WfMode == 1 {
- nameAttr = `<span style="color:lightgreen">[转出]</span>`
- } else {
- nameAttr = `<span style="color:red">[同步]</span>`
- }
- }
- heightUnit := "px"
- if style.GetString("height") == "auto" {
- heightUnit = ""
- }
- processData[k] = &ProcessData{
- Id: entity.Id,
- Mode: model,
- Name: name,
- FlowId: entity.FlowId,
- ProcessName: nameAttr + entity.ProcessName,
- ProcessTo: entity.ProcessTo,
- Style: "width:" + style.GetString("width") + "px;height:" + style.GetString("height") +
- heightUnit + ";line-height:30px;color:#0e76a8;left:" + gconv.String(entity.Setleft) + "px;top:" + gconv.String(entity.Settop) + "px;",
- Process: entity,
- }
- }
- return
- }
- //保存流程步骤
- func ProcessAdd(flowId int64) error {
- processList, err := Model.Order("id desc").FindAll("flow_id", flowId)
- if err != nil {
- g.Log().Error(err)
- return gerror.New("获取流程数据失败")
- }
- processCount := len(processList)
- processType := "is_step"
- var processSetLeft uint = 100
- var processSetTop uint = 100
- if processCount == 0 {
- processType = "is_one"
- processSetLeft = 100
- processSetTop = 100
- } else {
- //新建步骤显示在上一个步骤下方
- processType = "is_step"
- processSetLeft = processList[0].Setleft + 30
- processSetTop = processList[0].Settop + 30
- }
- style := gjson.New(nil)
- style.Set("width", "120")
- style.Set("height", "auto")
- style.Set("color", "#0e76a8")
- entity := &Entity{
- FlowId: gconv.Uint(flowId),
- Setleft: processSetLeft,
- Settop: processSetTop,
- ProcessType: processType,
- Style: style.MustToJsonString(),
- AutoPerson: 4,
- ProcessName: "步骤",
- IsSing: 1,
- IsBack: 1,
- WfAction: "view",
- }
- _, err = Model.Save(entity)
- if err != nil {
- g.Log().Error(err)
- return gerror.New("保存流程步骤失败")
- }
- return nil
- }
- //保存设计
- func SaveProcess(req *SaveProcessReqBatch) error {
- if req != nil && req.Data != nil {
- tx, err := g.DB().Begin()
- if err != nil {
- g.Log().Error(err)
- return gerror.New("保存失败")
- }
- entities := make([]*Entity, len(req.Data))
- for k, rq := range req.Data {
- entity, err := Model.FindOne(rq.Id)
- if err != nil || entity == nil {
- if err != nil {
- g.Log().Error(err)
- }
- tx.Rollback()
- return gerror.New("不存在的流程信息,请刷新重试。")
- }
- entity.Setleft = gconv.Uint(rq.Left)
- entity.Settop = gconv.Uint(rq.Top)
- entity.ProcessTo = rq.ProcessTo
- entities[k] = entity
- }
- _, err = Model.TX(tx).Data(entities).Save()
- if err != nil {
- g.Log().Error(err)
- tx.Rollback()
- return gerror.New("保存数据失败")
- }
- tx.Commit()
- }
- return nil
- }
- //获取流程管理表字段信息
- func GetFlowTableFields(dbPrefix, database, tableName string) (fields []*FlowTableField, err error) {
- sql := "SELECT COLUMN_NAME as field_name,column_comment as field_text FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = ? " +
- "AND table_schema = ? "
- var result gdb.Result
- result, err = g.DB().GetAll(sql, dbPrefix+tableName, database)
- if err != nil {
- g.Log().Error(err)
- err = gerror.New("查询表字段数据失败")
- }
- result.Structs(&fields)
- return
- }
- //删除流程节点
- func ProcessDelete(req *DeleteProcessReq) error {
- tx, err := g.DB().Begin()
- if err != nil {
- g.Log().Error(err)
- return gerror.New("开启处理事务失败")
- }
- _, err = Model.TX(tx).Delete(g.Map{
- Columns.Id: req.ProcessId,
- Columns.FlowId: req.FlowId,
- Columns.IsDel: 0,
- })
- if err != nil {
- g.Log().Error(err)
- tx.Rollback()
- return gerror.New("删除失败")
- }
- list, err := Model.Where(Columns.FlowId, req.FlowId).Where(Columns.IsDel, 0).
- Where("FIND_IN_SET(?,process_to)", gconv.String(req.ProcessId)).FindAll()
- if err != nil {
- g.Log().Error(err)
- return gerror.New("获取节点连接失败")
- }
- if list != nil {
- for _, value := range list {
- s := gstr.Split(value.ProcessTo, ",")
- arr := garray.NewStrArrayFrom(s)
- key := arr.Search(gconv.String(req.ProcessId))
- arr.Remove(key)
- processTo := ""
- if arr.Len() > 0 {
- processTo = arr.Join(",")
- }
- value.Updatetime = gconv.Uint(gtime.Timestamp())
- value.ProcessTo = processTo
- _, err := Model.TX(tx).Save(value)
- if err != nil {
- g.Log().Error(err)
- tx.Rollback()
- return gerror.New("删除节点连线失败")
- }
- }
- }
- tx.Commit()
- return nil
- }
- //通过ID获取流程步骤信息
- func GetProcessInfoById(id uint) (entity *Entity, err error) {
- entity, err = Model.FindOne(id)
- if err != nil {
- g.Log().Error(err)
- err = gerror.New("查询流程信息失败")
- }
- return
- }
- //查询流程信息
- func GetProcessesByMap(where g.Map) (entities []*Entity, err error) {
- entities, err = Model.Where(where).FindAll()
- if err != nil {
- g.Log().Error(err)
- err = gerror.New("查询流程信息失败")
- }
- return
- }
- //通过ids获取多条流程步骤信息
- func GetProcessInfosByIds(ids []uint) (entities []*Entity, err error) {
- entities, err = Model.Where("id in (?)", ids).FindAll()
- if err != nil {
- g.Log().Error(err)
- err = gerror.New("查询流程信息失败")
- }
- return
- }
|