针对ERP,CRM,OA系统中常用的审批流程,可以使用工作流引擎来完成相关业务。
此处分享基于petri网的工作流引擎-----------------------------------------------------------------------
工作流分析
引擎设计 --->流程设计
流程设计 --->流程创建 --->流程办理
1.根据表初始化工作流
2.初始化工作流之后根据图形界面设计工作流(dos_admin_w_workflow,dos_admin_w_workflow_history),里面除了工作流ID还有工作流的图形化界面(flow)和工作流设置(workFlow_setting)
3.当设计好工作流点击保存之后可以进行发布
4.发布的时候会对工作流进行解析
* 生成库所、变迁、向弧
* 工作流生成库所、向弧规则: 遍历link,把link分成2个部分,
* 一部分是link的输入或输出有gateway的,一部分是link的输入和输出都没有gateway的。
建模节点分析(dos_admin_w_workflow_node用于存放工作流节点信息----> 节点配置信息(node_setting)、节点类型(type)、工作流id(workFlow_id))
节点类型:
start
end
link
user_transition
quote_transition
gateway_explicit
4.1解析节点信息为 以节点ID为key,节点实体(节点实体从节点单元格解析封装)为value的hashmap
4.2 根据workflowId 、节点单元格List、节点实体map、节点类型map(此几个map统一使用node_id为key)
4.3使用link集合(分为复用和不复用)封装节点信息,使用map封装网关信息
link用于再次封装节点区分出前置节点ID(sourceId)、后置节点ID(targetId)、前置节点元数据、后置节点元数据
网关类型:
ExplicitGateway(显性排他网关)
AndSplitGateway(并行拆分网关)
ImplicitGateway(隐性排他网关)
AndJoinGateway(并行合并网关)
OrJoinGateway(排他合并网关)
变迁类型:
user_transition(用户变迁)
time_transition(时间变迁)
auto_transition(自动变迁)
4.4解析之前删除对应向弧表、库所表、变迁表信息
4.5前置节点检测, 结束库所, 复用变迁不允许作为link的前置节点,根据前置节点后置节点类型设置网关上下游(下游为集合累加)
4.6遍历link生成向弧(向弧方向(in:库所到变迁, out:变迁到库所)),跟据link类型确定start到变迁和变迁到end只需要生成一条向弧,变迁 => 变迁生成一个库所两个向弧,此处有判断是否有复用的link存入复用集合后续处理
4.7处理网关,遍历网关map,上游生成一个向弧(arc)一个库所(place),下游遍历下游节点集合可能有多个。
4.8处理复用link
* 可以连接复用变迁 网关
* explicit, andsplit, orjoin
* 不可连接复用变迁 网关
* implicit andjoin
引擎表结构
token表(dos_admin_w_token)
每个位置可以包含一个或多个令牌,代表工作流中的一个或多个实例。