package
0.0.0-20241124055655-1c8b26b22b7a
Repository: https://github.com/onlypiglet/easy-workflow.git
Documentation: pkg.go.dev
# Functions
生成任务 返回生成的任务ID数组 思考,一个节点可能分配了N位用户,所以生成节点对应的Task的时候,也需要生成N条Task 一个节点的上级节点可能不是一个,节点驳回的时候,就需要知道往哪个节点驳回,所以需要记录上一个节点是谁.
初始化数据库表.
No description provided by the author
结束节点处理 结束节点只做收尾工作,将数据库中此流程实例产生的数据归档 Status 流程实例状态 1:已完成 2:撤销.
执行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")
*/.
这是一个偷懒取巧的办法:利用数据库计算网关中的条件表达式.
GateWay节点处理.
获取流程实例信息.
获取流程实例中某个Node 返回 Node.
获取起始人为特定用户的流程实例。参数说明: UserID:用户ID 传入空则获取所有用户的流程实例 ProcessName:指定流程名称,传入""则为全部 StartIndex:分页用,开始index MaxRows:分页用,最大返回行数.
获取流程实例下任务历史记录.
从缓存中获取流程节点定义.
获取流程定义 by 流程ID.
获取流程ID by 流程实例ID.
获取流程ID、Version by 流程名、来源 设置传入参数db,是因为此函数可能在事务中执行。当在事务中执行时,需要传入对应的*gorm.DB 若db传参为nil,则默认使用当前默认的*gorm.DB.
获得某个source下所有流程信息.
获取流程名称 by 流程实例ID.
获取任务信息.
获取特定用户已完成任务列表。参数说明: UserID:用户ID 传入空则获取所有用户的已完成任务 /*注意,当传入UserID为空时,IgnoreStartByMe参数强制为False ProcessName:指定流程名称,传入""则为全部 IgnoreStartByMe: 某些情况下只希望看到“别人提交由我审批完成的任务",而不希望看到"由我开启流程,而生成处理人是我自己的任务",则传True taps:"由我启动的流程"可使用GetInstanceStartByUser函数 SortByASC 返回数据是否按照任务完成时间升序排列。若传入false,则会按照降序排列 StartIndex:分页用,开始index MaxRows:分页用,最大返回行数.
获取任务信息.
获取特定用户待办任务列表。参数说明: UserID:用户ID 传入空则获取所有用户的待办任务 ProcessName:指定流程名称,传入""则为全部 SortByASC 返回数据是否按照任务生成时间升序排列(实际是按照TaskID排序。TaskID是int型自增字段,用其排序与用createtime效果一致)。若传入false,则会按照降序排列 StartIndex:分页用,开始index MaxRows:分页用,最大返回行数.
判断特定实例中某一个节点是否已经完成 注意,finish只是代表节点是不是已经处理,不管处理的方式是驳回还是通过 一个流程实例中,由于驳回等原因,x节点可能出现多次。这里使用统计所有x节点的任务是否都finish来判断x节点是否finish.
撤销流程实例 参数说明: 1、InstanceID 实例ID 2、Force 是否强制撤销,若为false,则只有流程回到发起人这里才能撤销 3、撤销发起人用户ID.
开始流程实例 返回流程实例ID.
流程实例变量存入数据库.
判断传入字符串是否是变量(是否以$开头).
将json字符串转为struct.
json.Marshal()函数默认用HTMLEscape进行编码,它将替换“<”、“>”、“&”、U+2028和U+2029,并将其转义为“\u003c”、“\u003e”、“\u0026”、“\ u2028”和“\u2029”所以在这里做处理,判断是否开启转义.
利用Map,对数组/切片数据做去重处理.
处理节点,如:生成task、进行条件判断、处理结束节点等.
流程定义解析(json->struct).
流程定义保存,返回 流程ID、error.
注册一个struct中的所有func 注意,此时不会验证事件方法参数是否正确,因为此时不知道事件到底是“节点事件”还是“流程事件”.
removeAllElements 删除切片中所有匹配的元素 2024.11.13 add by yujf.
去掉变量前缀"$".
解析变量,获取并设置其value,返回map(注意,如果不是变量,则原样存储在map中).
运行节点事件(1、节点开始 2、节点结束 3、任务结束).
//运行流程事件(目前只有撤销事件).
登记计划任务,任务会被添加进计划任务池,并进入运行状态,可使用GetScheduledTaskList查看任务运行信息**注意**:请使用go关键词运行此函数。因为任务运行周期可能很长,若不使用goroutine运行,则可能造成主进程堵塞参数说明:StartAt 任务开始时间StopAt 任务结束时间IntervalSecond 重复执行间隔(秒),最小1秒Func 需要执行的方法,签名必须是func() error
.
从proc_inst_variable表中查找变量,若有则返回变量值,若无则返回false.
传入参数1、DBConnConfigurator:数据库连接配置方法,方法签名func()2、ignoreEventError:是否忽略事件错误3、EventStructs:动态参数,事件函数所关联的struct,可传多个.
自由驳回到任意一个上游节点.
获取任务执行完毕后下一个节点.
任务节点处理 返回生成的taskid数组.
任务节点审批状态 返回节点总任务数量、通过数、驳回数、.
完成任务,在本节点处理完毕的情况下会自动处理下一个节点.
驳回任务,在本节点处理完毕的情况下会自动处理下一个节点.
将任务转交给其他用户处理 此功能由常继百同学提出,在此感谢他的建议.
根据流程定义,列出task所在节点的所有上流节点.
No description provided by the author
检查流程: 1、是否注册 2、参数是否正确.
此方法方便前端判断,某一个任务可以执行哪些操作 目前为止,除了传统的通过驳回,本项目还增加了"自由驳回"与"直接提交到上一个驳回我的节点" 而"直接提交到上一个驳回我的节点": 1、在会签节点无法使用 2、在此任务的上一节点并未做驳回时也无法使用 对于前端而言,实现无法提前知道这些信息。 难道让用户一个一个点按钮试错?此方法目的是解决这个困扰.
# Variables
No description provided by the author
No description provided by the author
事件池,所有的事件都会在流程引擎启动的时候注册到这里.
事件出错,则可能导致流程无法运行下去,在这里添加选项,是否忽略事件出错,让流程继续.
定义流程cache其结构为 map [ProcID]ProcNodes.
计划任务池任务计划池的作用是存储任务运行中的信息,方便排查问题.