2021-03-18

一、Activiti

  Activiti项目是一项新的基于Apache许可的开源BPM平台,Activiti 是一个工作流引擎, activiti 可以将业务系统中复杂的业务流程抽取出来,使用专门的建模语言(BPMN2.0)进行定义,业务系统按照预先定义的流程进行执行,实现了业务系统的业务流程由 activiti 进行管理,减少业务系统由于流程变更进行系统升级改造的工作量,从而提高系统的健壮性,同时也减少了系统开发维护成本。

二、Activiti7核心机制

  • 1️⃣业务流程图要规范化,需要遵守一套标准。
  • 2️⃣业务流程图本质上就是一个XML文件,而XML可以存放所要的数据。
  • 3️⃣读取业务流程图的过程就是解析XML文件的过程。
  • 4️⃣读取一个业务流程图的结点就相当于解析一个XML的结点,进一步将数据插入到MySQL表中,形成一条记录。
  • 5️⃣将一个业务流程图的所有节点都读取并存入到MySQL表中。
  • 6️⃣后面只要读取MySQL表中的记录就相当于读取业务流程图的一个节点。
  • 7️⃣业务​流程的推进,后面就转换为读取表中的数据,并且处理数据,结束的时候这一行数据就可以删除了。

三、BPMB

  BPMN(Business Process Model And Notation),业务流程模型和符号,是由BPMI(Business Process Management Initiative)开发的一套的业务流程建模符号,使用BPMN提供的符号可以创建业务流程。2004年5月发布了BPMN1.0规范。BPMI于2005年9月并入OMG(The Object Management Group,对象管理组织)组织。OMG于2011年1月发布BPMN2.0的最终版本。

  BPMN是目前被各BPM厂商广泛接受的BPM标准。Activit就是使用BPMN2.0进行流程建模、流程执行管理,它包括很多的建模符号。

BPMN其实是用XML表示业务流程的,上面的.bpmn文件使用文本编辑器打开:

<?xml version="1.0" encoding="utf-8"?>
<bpmn2:definitions xmlns:bpmn2="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" id="sample-diagram" targetNamespace="http://bpmn.io/schema/bpmn" xsi:schemaLocation="http://www.omg.org/spec/BPMN/20100524/MODEL BPMN20.xsd">
  <bpmn2:process id="process1596086637078" name="流程1596086637078">
    <bpmn2:startEvent id="StartEvent_01ydzqe" name="开始">
      <bpmn2:outgoing>SequenceFlow_13g4uaz</bpmn2:outgoing>
    </bpmn2:startEvent>
    <bpmn2:userTask id="UserTask_1lf9x0v" name="填写请假单">
      <bpmn2:incoming>SequenceFlow_13g4uaz</bpmn2:incoming>
      <bpmn2:outgoing>SequenceFlow_0yljdna</bpmn2:outgoing>
    </bpmn2:userTask>
    <bpmn2:sequenceFlow id="SequenceFlow_13g4uaz" sourceRef="StartEvent_01ydzqe" targetRef="UserTask_1lf9x0v"/>
    <bpmn2:userTask id="UserTask_0xa95fp" name="部门经理审批">
      <bpmn2:incoming>SequenceFlow_0yljdna</bpmn2:incoming>
      <bpmn2:outgoing>SequenceFlow_0wc7wvy</bpmn2:outgoing>
    </bpmn2:userTask>
    <bpmn2:sequenceFlow id="SequenceFlow_0yljdna" sourceRef="UserTask_1lf9x0v" targetRef="UserTask_0xa95fp"/>
    <bpmn2:userTask id="UserTask_1p57lka" name="人事复核">
      <bpmn2:incoming>SequenceFlow_0wc7wvy</bpmn2:incoming>
      <bpmn2:outgoing>SequenceFlow_0o4nsg1</bpmn2:outgoing>
    </bpmn2:userTask>
    <bpmn2:sequenceFlow id="SequenceFlow_0wc7wvy" sourceRef="UserTask_0xa95fp" targetRef="UserTask_1p57lka"/>
    <bpmn2:endEvent id="EndEvent_05yb7io" name="结束">
    <bpmn2:incoming>SequenceFlow_0o4nsg1</bpmn2:incoming>
    </bpmn2:endEvent>
    <bpmn2:sequenceFlow id="SequenceFlow_0o4nsg1" sourceRef="UserTask_1p57lka" targetRef="EndEvent_05yb7io"/>
  </bpmn2:process>
  <bpmndi:BPMNDiagram id="BPMNDiagram_1">
    <bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="process1596086637078">
      <bpmndi:BPMNShape id="StartEvent_01ydzqe_di" bpmnElement="StartEvent_01ydzqe">
        <dc:Bounds x="382" y="82" width="36" height="36"/>
        <bpmndi:BPMNLabel>
          <dc:Bounds x="389" y="58" width="22" height="14"/>
        </bpmndi:BPMNLabel>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="UserTask_1lf9x0v_di" bpmnElement="UserTask_1lf9x0v">
        <dc:Bounds x="490" y="60" width="100" height="80"/>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNEdge id="SequenceFlow_13g4uaz_di" bpmnElement="SequenceFlow_13g4uaz">
        <di:waypoint x="418" y="100"/>
        <di:waypoint x="490" y="100"/>
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNShape id="UserTask_0xa95fp_di" bpmnElement="UserTask_0xa95fp">
        <dc:Bounds x="700" y="60" width="100" height="80"/>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNEdge id="SequenceFlow_0yljdna_di" bpmnElement="SequenceFlow_0yljdna">
        <di:waypoint x="590" y="100"/>
        <di:waypoint x="700" y="100"/>
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNShape id="UserTask_1p57lka_di" bpmnElement="UserTask_1p57lka">
        <dc:Bounds x="910" y="60" width="100" height="80"/>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNEdge id="SequenceFlow_0wc7wvy_di" bpmnElement="SequenceFlow_0wc7wvy">
        <di:waypoint x="800" y="100"/>
        <di:waypoint x="910" y="100"/>
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNShape id="EndEvent_05yb7io_di" bpmnElement="EndEvent_05yb7io">
        <dc:Bounds x="1152" y="82" width="36" height="36"/>
        <bpmndi:BPMNLabel>
          <dc:Bounds x="1159" y="125" width="22" height="14"/>
        </bpmndi:BPMNLabel>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNEdge id="SequenceFlow_0o4nsg1_di" bpmnElement="SequenceFlow_0o4nsg1">
        <di:waypoint x="1010" y="100"/>
        <di:waypoint x="1152" y="100"/>
      </bpmndi:BPMNEdge>
    </bpmndi:BPMNPlane>
  </bpmndi:BPMNDiagram>
</bpmn2:definitions>

四、Activit使用流程

1,实现业务流程建模,使用BPMN实现业务流程图,使用Activiti流程建模工具(例如Activity-designer)定义业务流程(.bpmn文件)。

2,部署业务流程到Activiti,使用Activiti提供的API向Activiti中部署.bpmn文件。

3,启动流程实例(ProcessInstance),启动一个流程实例表示开始一次业务流程的运行,类似实例化两个Java对象一样,部署的流程就好比Java类,启动一个流程实例就好比new一个Java对象。

4,查询待办任务(Task),因为现在系统的业务流程已经交给Activiti管理,通过Activiti就可以查询当前流程执行到哪里了,当前用户需要办理什么任务了,这些Activiti帮我们管理了,而不像传统方式中需要我们在SQL语句中的WHERE条件中指定当前查询的状态值是多少。

5,处理待办任务,用户查询待办任务后,就可以办理某个任务,如果这任务办理完成还需要其他用户办理,比如采购单创建后由部门经理审核,这个过程也是由Activiti帮我们完成了,不需要我们在代码中硬编码指定下一个任务办理人了。当任务办理完成没有下一个任务/结点了,这个流程实例就完成了。

五、开发步骤

 1,添加库引用

<dependency>
    <groupId>org.activiti</groupId>
    <artifactId>activiti-spring-boot-starter</artifactId>
    <version>7.1.0.M6</version>
    <exclusions>
        <exclusion>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
        </exclusion>
        <exclusion>
            <groupId>de.odysseus.juel</groupId>
            <artifactId>juel-spi</artifactId>
        </exclusion>
    </exclusions>
</dependency>

2,数据库表含义

  当启动activiti项目时,会自动生成activit的数据表结构:

  • Activiti的表都是以ACT_开头。第二部分是表示表的用途的两个字母标识。用途也和服务的API对应。
  • ACT_RE_*:'RE'表示Repository。这个前缀的表包含了流程定义和流程静态资源(图片、规则等等)。
  • ACT_RU_*:'RU'表示Runtime。这些运行时的表,包含流程实例,任务、变量,异步任务等运行中的数据。Activiti只在流程实例执行过程中保存这些数据,在流程结束时就会删除这些记录。这些运行时表可以一直很小并且速度很快。
  • ACT_HI_*:'HI'表示History。这些表包含历史数据,比如历史流程实例,变量,任务等等。
  • ACT_GE_*:'GE'表示General。通用数据,用于不同场景下。

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值