Documentation ¶
Index ¶
- Variables
- func CreateTask(ProcessInstanceID int, NodeID string, PrevNodeID string, UserIDs []string) ([]int, error)
- func DBConnect() error
- func DatabaseInitialize() error
- func EndNodeHandle(ProcessInstanceID int, Status int) error
- func ExecSQL(SQL string, Result interface{}, Params ...interface{}) (interface{}, error)
- func ExpressionEvaluator(expression string) (bool, error)
- func GateWayNodeHandle(ProcessInstanceID int, CurrentNode *Node, PrevTaskNode Node) error
- func GetInstanceInfo(ProcessInstanceID int) (database.Instance, error)
- func GetInstanceNode(ProcessInstanceID int, NodeID string) (Node, error)
- func GetInstanceStartByUser(UserID string, ProcessName string, StartIndex int, MaxRows int) ([]database.Instance, error)
- func GetInstanceTaskHistory(ProcessInstanceID int) ([]database.Task, error)
- func GetProcessDefine(ProcessID int) (database.Process, error)
- func GetProcessIDByInstanceID(ProcessInstanceID int) (int, error)
- func GetProcessIDByProcessName(db *gorm.DB, ProcessName string, Source string) (int, int, error)
- func GetProcessList(Source string) ([]database.ProcDef, error)
- func GetProcessNameByInstanceID(ProcessInstanceID int) (string, error)
- func GetScheduledTaskList() map[string]*ScheduledTask
- func GetTaskFinishedList(UserID string, ProcessName string, IgnoreStartByMe bool, SortByASC bool, ...) ([]database.Task, error)
- func GetTaskInfo(TaskID int) (database.Task, error)
- func GetTaskToDoList(UserID string, ProcessName string, SortByASC bool, StartIndex int, MaxRows int) ([]database.Task, error)
- func InstanceNodeIsFinish(ProcessInstanceID int, NodeID string) (bool, error)
- func InstanceRevoke(ProcessInstanceID int, Force bool, RevokeUserID string) error
- func InstanceStart(ProcessID int, BusinessID string, Comment string, VariablesJson string) (int, error)
- func InstanceVariablesSave(ProcessInstanceID int, VariablesJson string) error
- func IsVariable(Key string) bool
- func JSONMarshal(t interface{}, escapeHtml bool) ([]byte, error)
- func Json2Struct(j string, s any) error
- func MakeUnique(List ...[]string) []string
- func ProcessNode(ProcessInstanceID int, CurrentNode *Node, PrevNode Node) error
- func ProcessParse(Resource string) (database.Process, error)
- func ProcessSave(Resource string, CreateUserID string) (int, error)
- func RegisterEvents(Struct any)
- func RemoveAllElements(slice []string, value string) []string
- func RemovePrefix(variable string) string
- func ResolveVariables(ProcessInstanceID int, Variables []string) (map[string]string, error)
- func RunNodeEvents(EventNames []string, ID int, CurrentNode *Node, PrevNode Node) error
- func RunProcEvents(EventNames []string, ProcessInstanceID int, RevokeUserID string) error
- func ScheduleTask(TaskName string, StartAt time.Time, StopAt time.Time, IntervalSecond int64, ...) error
- func SetVariable(ProcessInstanceID int, variable string) (string, bool, error)
- func StartWorkFlow(DBConnConfigurator DataBaseConfigurator, ignoreEventError bool, ...)
- func TaskFreeRejectToUpstreamNode(TaskID int, NodeID string, Comment string, VariableJson string) error
- func TaskNextNode(TaskID int) (database.Node, error)
- func TaskNodeHandle(ProcessInstanceID int, CurrentNode *Node, PrevNode Node) ([]int, error)
- func TaskNodeStatus(TaskID int) (int, int, int, error)
- func TaskPass(TaskID int, Comment string, VariableJson string, DirectlyToWhoRejectedMe bool) error
- func TaskReject(TaskID int, Comment string, VariableJson string) error
- func TaskTransfer(TaskID int, Users []string) error
- func TaskUpstreamNodeList(TaskID int) ([]database.Node, error)
- func TypeIsError(Type reflect.Type) bool
- func VerifyEvents(ProcessID int, Nodes ProcNodes) error
- func WhatCanIDo(TaskID int) (database.TaskAction, error)
- type DataBaseConfigurator
- type DataBaseConnConfigurator
- type ProcNodes
- type ScheduledTask
Constants ¶
This section is empty.
Variables ¶
var DB *gorm.DB
var DBConnConfigurator = DataBaseConnConfigurator{MaxIdleConns: 10, MaxOpenConns: 100, ConnMaxLifetime: 3600, SlowThreshold: 1, LogLevel: 3, IgnoreRecordNotFoundError: true, Colorful: true}
var EventPool = make(map[string]method)
事件池,所有的事件都会在流程引擎启动的时候注册到这里
var IgnoreEventError bool
事件出错,则可能导致流程无法运行下去,在这里添加选项,是否忽略事件出错,让流程继续
var ProcCache = make(map[int]ProcNodes)
定义流程cache其结构为 map [ProcID]ProcNodes
var ScheduledTaskPool = make(map[string]*ScheduledTask)
计划任务池 任务计划池的作用是存储任务运行中的信息,方便排查问题
Functions ¶
func CreateTask ¶
func CreateTask(ProcessInstanceID int, NodeID string, PrevNodeID string, UserIDs []string) ([]int, error)
生成任务 返回生成的任务ID数组 思考,一个节点可能分配了N位用户,所以生成节点对应的Task的时候,也需要生成N条Task 一个节点的上级节点可能不是一个,节点驳回的时候,就需要知道往哪个节点驳回,所以需要记录上一个节点是谁
func EndNodeHandle ¶
结束节点处理 结束节点只做收尾工作,将数据库中此流程实例产生的数据归档 Status 流程实例状态 1:已完成 2:撤销
func ExecSQL ¶
执行SQL语句,返回执行结果(可选) 示例: ExecSQL("CALL SP_GET(?)",&RESULT,Par1,Par2) ExecSQL("select * from test where id=? and c=?",&RESULT,1,"yes") ExecSQL("update test set c="no" where id=? and c=?",nil,1,"yes")
func ExpressionEvaluator ¶
这是一个偷懒取巧的办法:利用数据库计算网关中的条件表达式
func GateWayNodeHandle ¶
GateWay节点处理
func GetInstanceInfo ¶
获取流程实例信息
func GetInstanceNode ¶
获取流程实例中某个Node 返回 Node
func GetInstanceStartByUser ¶
func GetInstanceStartByUser(UserID string, ProcessName string, StartIndex int, MaxRows int) ([]database.Instance, error)
获取起始人为特定用户的流程实例。参数说明: UserID:用户ID 传入空则获取所有用户的流程实例 ProcessName:指定流程名称,传入""则为全部 StartIndex:分页用,开始index MaxRows:分页用,最大返回行数
func GetInstanceTaskHistory ¶
获取流程实例下任务历史记录
func GetProcessDefine ¶
获取流程定义 by 流程ID
func GetProcessIDByInstanceID ¶
获取流程ID by 流程实例ID
func GetProcessIDByProcessName ¶
获取流程ID、Version by 流程名、来源 设置传入参数db,是因为此函数可能在事务中执行。当在事务中执行时,需要传入对应的*gorm.DB 若db传参为nil,则默认使用当前默认的*gorm.DB
func GetProcessList ¶
获得某个source下所有流程信息
func GetProcessNameByInstanceID ¶
获取流程名称 by 流程实例ID
func GetTaskFinishedList ¶
func GetTaskFinishedList(UserID string, ProcessName string, IgnoreStartByMe bool, SortByASC bool, StartIndex int, MaxRows int) ([]database.Task, error)
获取特定用户已完成任务列表。参数说明: UserID:用户ID 传入空则获取所有用户的已完成任务 /*注意,当传入UserID为空时,IgnoreStartByMe参数强制为False ProcessName:指定流程名称,传入""则为全部 IgnoreStartByMe: 某些情况下只希望看到“别人提交由我审批完成的任务",而不希望看到"由我开启流程,而生成处理人是我自己的任务",则传True taps:"由我启动的流程"可使用GetInstanceStartByUser函数 SortByASC 返回数据是否按照任务完成时间升序排列。若传入false,则会按照降序排列 StartIndex:分页用,开始index MaxRows:分页用,最大返回行数
func GetTaskToDoList ¶
func GetTaskToDoList(UserID string, ProcessName string, SortByASC bool, StartIndex int, MaxRows int) ([]database.Task, error)
获取特定用户待办任务列表。参数说明: UserID:用户ID 传入空则获取所有用户的待办任务 ProcessName:指定流程名称,传入""则为全部 SortByASC 返回数据是否按照任务生成时间升序排列(实际是按照TaskID排序。TaskID是int型自增字段,用其排序与用createtime效果一致)。若传入false,则会按照降序排列 StartIndex:分页用,开始index MaxRows:分页用,最大返回行数
func InstanceNodeIsFinish ¶
判断特定实例中某一个节点是否已经完成 注意,finish只是代表节点是不是已经处理,不管处理的方式是驳回还是通过 一个流程实例中,由于驳回等原因,x节点可能出现多次。这里使用统计所有x节点的任务是否都finish来判断x节点是否finish
func InstanceRevoke ¶
撤销流程实例 参数说明: 1、InstanceID 实例ID 2、Force 是否强制撤销,若为false,则只有流程回到发起人这里才能撤销 3、撤销发起人用户ID
func InstanceStart ¶
func InstanceStart(ProcessID int, BusinessID string, Comment string, VariablesJson string) (int, error)
开始流程实例 返回流程实例ID
func InstanceVariablesSave ¶
流程实例变量存入数据库
func JSONMarshal ¶
json.Marshal()函数默认用HTMLEscape进行编码,它将替换“<”、“>”、“&”、U+2028和U+2029, 并将其转义为“\u003c”、“\u003e”、“\u0026”、“\ u2028”和“\u2029” 所以在这里做处理,判断是否开启转义
func ProcessNode ¶
处理节点,如:生成task、进行条件判断、处理结束节点等
func ProcessParse ¶
流程定义解析(json->struct)
func ProcessSave ¶
流程定义保存,返回 流程ID、error
func RegisterEvents ¶
func RegisterEvents(Struct any)
注册一个struct中的所有func 注意,此时不会验证事件方法参数是否正确,因为此时不知道事件到底是“节点事件”还是“流程事件”
func RemoveAllElements ¶
removeAllElements 删除切片中所有匹配的元素 2024.11.13 add by yujf
func ResolveVariables ¶
解析变量,获取并设置其value,返回map(注意,如果不是变量,则原样存储在map中)
func RunNodeEvents ¶
运行节点事件(1、节点开始 2、节点结束 3、任务结束)
func RunProcEvents ¶
//运行流程事件(目前只有撤销事件)
func ScheduleTask ¶
func ScheduleTask(TaskName string, StartAt time.Time, StopAt time.Time, IntervalSecond int64, Func func() error) error
登记计划任务,任务会被添加进计划任务池,并进入运行状态,可使用GetScheduledTaskList查看任务运行信息 **注意**:请使用go关键词运行此函数。因为任务运行周期可能很长,若不使用goroutine运行,则可能造成主进程堵塞 参数说明: StartAt 任务开始时间 StopAt 任务结束时间 IntervalSecond 重复执行间隔(秒),最小1秒 Func 需要执行的方法,签名必须是func() error
func SetVariable ¶
从proc_inst_variable表中查找变量,若有则返回变量值,若无则返回false
func StartWorkFlow ¶
func StartWorkFlow(DBConnConfigurator DataBaseConfigurator, ignoreEventError bool, EventStructs ...any)
传入参数 1、DBConnConfigurator:数据库连接配置方法,方法签名func() 2、ignoreEventError:是否忽略事件错误 3、EventStructs:动态参数,事件函数所关联的struct,可传多个
func TaskFreeRejectToUpstreamNode ¶
func TaskFreeRejectToUpstreamNode(TaskID int, NodeID string, Comment string, VariableJson string) error
自由驳回到任意一个上游节点
func TaskNodeHandle ¶
任务节点处理 返回生成的taskid数组
func TaskNodeStatus ¶
任务节点审批状态 返回节点总任务数量、通过数、驳回数、
func TaskReject ¶
驳回任务,在本节点处理完毕的情况下会自动处理下一个节点
func TaskTransfer ¶
将任务转交给其他用户处理 此功能由常继百同学提出,在此感谢他的建议
func TaskUpstreamNodeList ¶
根据流程定义,列出task所在节点的所有上流节点
func TypeIsError ¶
func WhatCanIDo ¶
func WhatCanIDo(TaskID int) (database.TaskAction, error)
此方法方便前端判断,某一个任务可以执行哪些操作 目前为止,除了传统的通过驳回,本项目还增加了"自由驳回"与"直接提交到上一个驳回我的节点" 而"直接提交到上一个驳回我的节点": 1、在会签节点无法使用 2、在此任务的上一节点并未做驳回时也无法使用 对于前端而言,实现无法提前知道这些信息。 难道让用户一个一个点按钮试错?此方法目的是解决这个困扰
Types ¶
type DataBaseConfigurator ¶
type DataBaseConfigurator func()
type DataBaseConnConfigurator ¶
type DataBaseConnConfigurator struct { DBConnectString string //连接字符串 MaxIdleConns int //空闲连接池中连接的最大数量 MaxOpenConns int //打开数据库连接的最大数量 ConnMaxLifetime int //连接可复用的最大时间(分钟) SlowThreshold int64 //慢SQL阈值(秒) LogLevel int //日志级别 1:Silent 2:Error 3:Warn 4:Info IgnoreRecordNotFoundError bool //忽略ErrRecordNotFound(记录未找到)错误 Colorful bool //使用彩色打印 }