123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126 |
- package system
- import (
- "github.com/beego/beego/v2/client/orm"
- "time"
- )
- type ApprovalFlowNode struct {
- NodeId int `orm:"column(node_id);pk";json:"node_id"`
- FlowId int `orm:"column(flow_id);";json:"flow_id"`
- NodeName string `orm:"column(node_name);" json:"node_name"`
- PrevNodeId int `orm:"column(prev_node_id);" json:"prev_node_id"`
- NextNodeId int `orm:"column(next_node_id);" json:"next_node_id"`
- NodeType string `orm:"column(node_type);" json:"node_type"`
- AuditType int `orm:"column(audit_type);" json:"audit_type"`
- User string `orm:"column(user);" json:"user"`
- Version int `orm:"column(version);" json:"version"`
- CreateTime time.Time `orm:"column(create_time);" json:"create_time"`
- }
- type ApprovalFlowNodeList struct {
- NodeId int `description:"流程节点id"`
- FlowId int `description:"流程id"`
- NodeName string `description:"流程节点名称"`
- PrevNodeId int `description:"上级节点id,为0代表是开始节点"`
- NextNodeId int `description:"下级节点id,为0代表是结束节点"`
- NodeType string `description:"节点类型,审批人:check;抄送人:cc(Carbon Copy),默认是:check"`
- AuditType int `description:"多人审批时,1:或签(一名审批人同意即可),2:会签(需所有审批人同意)"`
- User string `description:"用户列表"`
- UserArr []NodeUser `json:"User";description:"节点用户"`
- Version int `description:"所属流程版本"`
- CreateTime time.Time `description:"创建时间"`
- UserList []User `description:"审批人、抄送人列表信息"`
- }
- type User struct {
- AdminId int `description:"人员id(审批人、抄送人)"`
- RoleId int `description:"人员角色id(审批人、抄送人)"`
- Name string `description:"人员名称(审批人、抄送人)"`
- RoleName string `description:"人员角色名称(审批人、抄送人)"`
- RoleTypeCode string `description:"人员角色类型(审批人、抄送人)"`
- Mobile string `description:"手机号(审批人、抄送人)"`
- }
- func GetListByFlowId(flowId, version int) (items []*ApprovalFlowNodeList, err error) {
- sql := `SELECT * FROM approval_flow_node WHERE flow_id=? AND version=? order by node_id asc `
- o := orm.NewOrm()
- _, err = o.Raw(sql, flowId, version).QueryRows(&items)
- return
- }
- func GetByNodeId(nodeId int) (item *ApprovalFlowNode, err error) {
- sql := `SELECT * FROM approval_flow_node WHERE node_id=? LIMIT 1 `
- o := orm.NewOrm()
- err = o.Raw(sql, nodeId).QueryRow(&item)
- return
- }
- func UpdateFlow(flowId int, flowNodeList []*ApprovalFlowNode) (err error) {
- o := orm.NewOrm()
- to, err := o.Begin()
- if err != nil {
- return
- }
- defer func() {
- if err != nil {
- _ = to.Rollback()
- } else {
- _ = to.Commit()
- }
- }()
- var item ApprovalFlow
- sql := `SELECT * FROM approval_flow WHERE flow_id=? FOR UPDATE `
- err = to.Raw(sql, flowId).QueryRow(&item)
- if err != nil {
- return
- }
-
- newVer := item.CurrVersion + 1
- item.CurrVersion = newVer
- _, err = to.Update(&item, "CurrVersion")
- if err != nil {
- return
- }
-
- prevNodeId := 0
- for _, node := range flowNodeList {
- node.Version = newVer
- node.PrevNodeId = prevNodeId
- nodeId, tmpErr := to.Insert(node)
- if tmpErr != nil {
- err = tmpErr
- return
- }
-
- node.NodeId = int(nodeId)
-
- prevNodeId = int(nodeId)
- }
-
- nextNodeId := 0
- lenNodeList := len(flowNodeList) - 1
- for i := lenNodeList; i >= 0; i-- {
- node := flowNodeList[i]
- node.NextNodeId = nextNodeId
- _, tmpErr := to.Update(node, "NextNodeId")
- if tmpErr != nil {
- err = tmpErr
- return
- }
- nextNodeId = node.NodeId
- }
- return
- }
|