go-workflow-《GO开发知识笔记》

admin 2025-11-04 01:28:40 编程 来源:ZONE.CI 全球网 0 阅读模式
  • Go-Workflow
  • 一、特点:
  • 二、go-workflow框架
  • 1.go-workflow 数据库设计
  • 1.1 流程定义表
  • 1.2 流程实例表
  • 1.3 执行流表
  • 1.4 关系表
  • 1.5 任务表
  • 1.6 历史数据表
    • 2 流程的存储
  • 2.1 添加流程资源
  • 3.流程的启动
  • 4.任务审批
  • workflow-ui 前端工作流 UI
    • 前端工作流生成器-Generator
    • 源码
      • 测试
      • 重新build
      • 重新发布

    后端:https://gitcode.net/mirrors/go-workflow/go-workflow前端:https://gitcode.net/mirrors/go-workflow/workflow-ui

    go-workflow-master.zipworkflow-ui-master.zip

    Go-Workflow

    go-workflow 是一个超轻量级的工作流引擎,基本架构同Activiti工作流有些相似,但是它更精简,更轻量,它是一个工作流微服务,具体案例详见:example.md前端流程生成工具:https://github.com/go-workflow/go-workflow-UI

    一、特点:

    1.它是一个工作流微服务2.将所有的无关流程的数据,包括用户、用户组等信息从服务中解耦出去,go-workflow只纪录流程的流转3.使用json数组替代bpmn来生成流程定义,简化流程定义的生成

    二、go-workflow框架

    1.go-workflow 数据库设计

    1.1 流程定义表

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

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

    1.2 流程实例表

    表 proc_inst 用于保存流程实例,当用户启动一个流程时,就会在这个表存入一个流程实例,主要字段有:

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

    1.3 执行流表

    表 execution 用于保存执行流,当用户启动一个流程时,就会生成一条执行流,之后的流程就会按照执行流的顺序流转,比如:开始-主管审批-财务审批-人事审批-结束 ,主要的字段有:

    1. procInstID: 流程实例id,对应表proc_inst
    2. procDefID: 流程定义id,对应表procdef
    3. nodeInfos: 是一个json数组,纪录流程实例会经过的所有节点

    1.4 关系表

    表 identitylink 用于保存任务task的候选用户组或者候选用户以及用户所参与的流程信息,主要字段有go-workflow-master.zip

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

    1.5 任务表

    表 task 用于保存任务,主要字段有:

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

    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 方法来启动流程实例,主要涉及:

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

    4.任务审批

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

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

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

    参考:https://gitcode.net

    workflow-ui 前端工作流 UI

    基于vue前端工作流UI

    前端工作流生成器-Generator

    1、首先通过npm安装: npm install workflow-ui —save(注意:新版本插件未生效的话,试试npm update命令,或者workflow-ui版本并删除node_modules重新下载)2、全局定义组件(否则会报循环引用):main.js中

    1. import Node from 'workflow-ui/src/components/Generator/node'
    2. Vue.component('Node', Node)

    3、在使用的地方:

    1. <template>
    2. <div>
    3. <workflow
    4. :data="data"
    5. @ok="ok"
    6. />
    7. </div>
    8. </template>
    9. <script>
    10. import workflow from 'workflow-ui/src/components/Generator'
    11. import 'workflow-ui/lib/workflow-ui.css'
    12. export default {
    13. components: {
    14. workflow
    15. },
    16. data () {
    17. return {
    18. data: {
    19. title: '请假',
    20. node: {
    21. name: '发起人',
    22. type: 'start',
    23. nodeId: 'sid-startevent',
    24. childNode: {}
    25. }
    26. }
    27. }
    28. },
    29. methods: {
    30. ok (data) {
    31. console.log(data)
    32. }
    33. }
    34. }
    35. </script>

    源码

    https://github.com/go-workflow/workflow-ui

    测试

    首先,打开vue.config.js,修改entry为main.js,否则页面将会是空白:

    1. entry: 'src/main.js'

    npm inpm run serve

    重新build

    npm run build

    重新发布

    1. package.json 更新版本号
    2. 打开 vue.config.js

      1. entry: 'src/index.js',
    3. 发布到npm

    npm publish

    以太坊cppgolang区别 编程

    以太坊cppgolang区别

    以太坊是一种去中心化的开源平台,它采用智能合约技术,旨在构建和运行不受干扰的分布式应用程序。作为目前最受欢迎的区块链平台之一,以太坊提供了多种编程语言的支持,其
    progolang 编程

    progolang

    Go语言(Golang)是由Google开发的一门静态类型编程语言。作为一名专业的Golang开发者,我深知这门语言的优势和特点。在本文中,我将介绍Golang
    golangn个发送者 编程

    golangn个发送者

    Golang是一种开源的编程语言,由Google团队开发,旨在提高程序的并发性和简化软件开发过程。在Go语言中,有时需要向多个接收者发送信息。本文将介绍如何在G
    golang技能图谱 编程

    golang技能图谱

    从互联网行业的快速发展到人工智能技术的日益成熟,各种编程语言也应运而生。而在这众多的编程语言中,Golang(即Go)作为一门强大且高效的开发语言备受关注。Go
    评论:0   参与:  5