前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >组件分享之后端组件——超轻量级的工作流引擎go-workflow

组件分享之后端组件——超轻量级的工作流引擎go-workflow

作者头像
cn華少
发布2022-06-08 17:18:44
1.1K0
发布2022-06-08 17:18:44
举报
文章被收录于专栏:IT综合技术分享IT综合技术分享

背景

近期正在探索前端、后端、系统端各类常用组件与工具,对其一些常见的组件进行再次整理一下,形成标准化组件专题,后续该专题将包含各类语言中的一些常用组件。欢迎大家进行持续关注。

组件基本信息

内容

本节我们分享一个超轻量级的工作流引擎go-workflow,基本架构同Activiti工作流有些相似,但是它更精简,更轻量,它是一个工作流微服务。它将所有的无关流程的数据,包括用户、用户组等信息从服务中解耦出去,go-workflow只纪录流程的流转,同时使用json数组替代bpmn来生成流程定义,简化流程定义的生成。

1.go-workflow 数据库设计

1.1 流程定义表

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

代码语言:javascript
复制
 name: 流程定义的名称,如:"请假流程"
 
 version: 流程定义的版本

 resource: 保存流程定义的具体配置,它是一个json格式的字符串

 company: 保存该流程创建人所在公司
1.2 流程实例表

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

主要字段有:

代码语言:javascript
复制
procDefID: 对应表procdef的id,

title: 标题,如:"张三的请假流程"

department: 用户所在部门

nodeID: 当前所处于节点的名称

candidate: 当前审批人或者审批用户组

taskID: 当前任务id
1.3 执行流表

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

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

主要的字段有:

代码语言:javascript
复制
procInstID: 流程实例id,对应表proc_inst

procDefID: 流程定义id,对应表procdef

nodeInfos: 是一个json数组,纪录流程实例会经过的所有节点
1.4 关系表

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

主要字段有

代码语言:javascript
复制
type: 表示关系类型,有:"candidate"和"participant"两种

group: 表示当前审批的用户组

userID: 表示当前审批的用户

taskID: 对应任务task表的id

step: 表示任务对应的执行流位置,比如:有一个执行流:开始-主管审批-财务审批-人事审批-结束,那么
step=0,则处于【开始】位置,step=1则处于【主管审批】位置

company: 表示公司

procInstID: 对应流程实例id
1.5 任务表

表 task 用于保存任务,

主要字段有:

代码语言:javascript
复制
nodeID: 表示节点,如:"主管审批"结点

step: 表示任务对应的执行流位置

assignee: 任务的处理人

memberCount: 表示当前任务需要多少人审批之后才能结束,默认是 1

unCompleteNum: 表示还有多少人没有审批,默认是1

agreeNum: 表示通过的人数

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 方法来启动流程实例,

主要涉及:

代码语言:javascript
复制
获取流程定义

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

4.任务审批

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

代码语言:javascript
复制
更新任务 UpdateTaskWhenComplete()-> 流转MoveStageByProcInstID()

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

更多内容可以参考其官方README

本作品由 cn華少 采用 知识共享署名-非商业性使用 4.0 国际许可协议 进行许可。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-06-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 背景
  • 组件基本信息
  • 内容
    • 1.go-workflow 数据库设计
      • 1.1 流程定义表
      • 1.2 流程实例表
      • 1.3 执行流表
      • 1.4 关系表
      • 1.5 任务表
      • 1.6 历史数据表
    • 2 流程的存储
      • 2.1 添加流程资源
    • 3.流程的启动
      • 4.任务审批
      相关产品与服务
      访问管理
      访问管理(Cloud Access Management,CAM)可以帮助您安全、便捷地管理对腾讯云服务和资源的访问。您可以使用CAM创建子用户、用户组和角色,并通过策略控制其访问范围。CAM支持用户和角色SSO能力,您可以根据具体管理场景针对性设置企业内用户和腾讯云的互通能力。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档