go 根据输入类型执行对应的方法_Go平台的流程引擎

Go-workflow是一个类似Activiti但更轻量级的工作流微服务,强调流程流转与数据解耦。它使用JSON数组定义流程,简化流程管理。主要组件包括流程定义表、流程实例表、执行流表、关系表和任务表,支持流程启动、任务审批和撤回操作。此外,提供了历史数据存储和API接口,便于集成与管理。
摘要由CSDN通过智能技术生成
ba658dcdb060a1c6220cc49ec3ead458.png

go-workflow 是一个超轻量级的工作流引擎,基本架构同Activiti工作流有些相似,但是它更精简,更轻量,它是一个工作流微服务

一、特点:

1.它是一个工作流微服务

2.将所有的无关流程的数据,包括用户、用户组等信息从服务中解耦出去,go-workflow只纪录流程的流转

3.使用json数组替代bpmn来生成流程定义,简化流程定义的生成

二、go-workflow框架

1.go-workflow 数据库设计

1.1 流程定义表

表 procdef 用于保存流程的配置, 主要字段有:

 name: 流程定义的名称,如:"请假流程"  version: 流程定义的版本 resource: 保存流程定义的具体配置,它是一个json格式的字符串 company: 保存该流程创建人所在公司

1.2 流程实例表

表 proc_inst 用于保存流程实例,当用户启动一个流程时,就会在这个表存入一个流程实例,

主要字段有:

procDefID: 对应表procdef的id,title: 标题,如:"张三的请假流程"department: 用户所在部门nodeID: 当前所处于节点的名称candidate: 当前审批人或者审批用户组taskID: 当前任务id

1.3 执行流表

表 execution 用于保存执行流,当用户启动一个流程时,就会生成一条执行流,之后的流程就会按照执行流的顺序流转,

比如:开始-主管审批-财务审批-人事审批-结束 ,

主要的字段有:

procInstID: 流程实例id,对应表proc_instprocDefID: 流程定义id,对应表procdefnodeInfos: 是一个json数组,纪录流程实例会经过的所有节点

1.4 关系表

表 identitylink 用于保存任务task的候选用户组或者候选用户以及用户所参与的流程信息,

主要字段有

type: 表示关系类型,有:"candidate"和"participant"两种group: 表示当前审批的用户组userID: 表示当前审批的用户taskID: 对应任务task表的idstep: 表示任务对应的执行流位置,比如:有一个执行流:开始-主管审批-财务审批-人事审批-结束,那么step=0,则处于【开始】位置,step=1则处于【主管审批】位置company: 表示公司procInstID: 对应流程实例id

1.5 任务表

表 task 用于保存任务,

主要字段有:

nodeID: 表示节点,如:"主管审批"结点step: 表示任务对应的执行流位置assignee: 任务的处理人memberCount: 表示当前任务需要多少人审批之后才能结束,默认是 1unCompleteNum: 表示还有多少人没有审批,默认是1agreeNum: 表示通过的人数actType: 表示任务类型 "or"表示或签,即一个人通过或者驳回就结束,"and"表示会签,要所有人通过就流转到下一步,如果有一个人驳回那么就跳转到上一步

1.6 历史数据表

历史数据表包括 execution_history,identitylink_history,proc_inst_history,task_history这些表字段同正常的表相同,每隔20秒,将已经结束的流程数据会自动迁移过来

2 流程的存储

2.1 添加流程资源

启动 go-workflow 微服务后,可以在浏览器中输入:http://localhost:8080/workflow/procdef/save 进行存储

具体见 example.md 说明文档

3.流程的启动

通过调用 StartProcessInstanceByID 方法来启动流程实例,

主要涉及:

获取流程定义GetResourceByNameAndCompany()->启动流程实例CreateProcInstTx()->生成执行流GenerateExec() -> 生成新任务NewTaskTx() -> 流程流转 MoveStage()

4.任务审批

调用方法 Complete()方法来执行任务的审批, 涉及方法:

更新任务 UpdateTaskWhenComplete()-> 流转MoveStageByProcInstID()

调用方法 WithDrawTask() 方法来执行任务的撤回

以上内容,请私信会发给你开源地址。

如有以下需要请私信

使用vue、element搭建后台管理界面、网站

使用vue、vant实现webapp项目

实现微信小程序、企业微信、钉钉开发

使用springboot做前端后分离项目

对用友ERP、鼎捷ERP接口二次开发、如条码系统

开发泛微OA、定制domino开发项目

提供软件开发服务、技术咨询类服务

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值