1.工作流的定义

  工作流是将一组任务组织起来以完成某个有序的过程:定义了任务的触发顺序和触发条件,而且每个任务可以由一个或多个软件系统完成,也可以由一个或一组人完成,

  还可以由一个或多个人与软件系统协作完.

  工作流就是业务流程的计算机化或自动化。许多公司采用纸张表单,手工传递的方式,一级一级审批签字,工作效率非常低下,对于统计报表功能则不能实现。

  而采用工作流软件,使用者只需在电脑上填写有关表单,会按照定义好的流程自动往下跑,下一级审批者将会收到相关资料,

  并可以根据需要修改、跟踪、管理、查询、统计、打印等,大大提高了效率,实现了知识管理,提升了公司的核心竞争力  

  以请假为例,现在大多数公司的请假流程是这样的

  员工打电话(或网聊)向上级提出请假申请——上级口头同意——上级将请假记录下来——月底将请假记录上交公司——公司将请假录入电脑

  采用工作流技术的公司的请假流程是这样的

  员工使用账户登录系统——点击请假——上级登录系统点击允许

  就这样,一个请假流程就结束了

  有人会问,那上级不用向公司提交请假记录?公司不用将记录录入电脑?答案是,用的。但是这一切的工作都会在上级点击允许后自动运行!

  这就是工作流技术


2.activity简介

  Activiti是由Alfresco软件在2010年5月17日发布的业务流程管理(BPM)框架,它是覆盖了业务流程管理、工作流、服务协作等领域的一个开源的、灵活的、易扩展的可执行流程语言框架。

  Activiti基于Apache许可的开源BPM平台,创始人Tom Baeyens是JBoss jBPM的项目架构师,它特色是提供了eclipse插件,开发人员可以通过插件直接绘画出业务流程图。

  Activiti框架底层有数据库提供支持,根据版本不同,表的数量不一致。底层使用mybatis操作数据库,开发人员不需要自己编写sql

 

3.IDEA安装avtivity插件

3.1打开IDEA中File列表下的Settings

 

 

3.2输入actiBPM,然后点击下面的Search...搜索

 

 

3.3点击Install 下载

 

 

3.4下载结束后应用保存,然后重启IDEA

  在resources目录下创建BPMN文件,有该选项,表示安装成功

 

 

4.idea安装activiti插件ActiBPM时找不到这个插件(https://blog.csdn.net/qq_38423256/article/details/116096404)

 

4.1第一步:官网搜索

idea官网地址:https://plugins.jetbrains.com/,搜索 actiBPM

 
4.2官网下载

 
点击GEet下载


4.3引入下载的jar包

File -> Settings -> Plugins -> Install Plugin from Disk,选择已经下载的jar,导入。

 
4.4重启测试

在项目菜单栏中右键new --->BPMN file
 

 
5.画图

5.1环境准备

5.1.1修改idea配置

 idea按照目录bin文件夹下,idea.exe.vmoptions和idea64.exe.vmoptions加入配置-Dfile.encoding=UTF-8,设置编码

 

 5.1.2配置setting

  file-setting-Editor-file Encoding,设置编码为utf-8

  

 

 

5.2画图基本介绍

5.2.1文件目录

  创建的bpmn文件需要在资源目录下,也就是resources目录下

5.2.2创建文件

 

创建文件后,双击,出现画图界面

 

5.2.3画图

 

 这里画了一个简单的流程,开始-请假申请(usertask)-审批(usertask)-介绍

UserTask:name名称   Assignee 针对的用户,更具体的后面再介绍

 

注意,画图画好后,出去再进来可能会出一些问题,所以最好一次画好,画好后转成xml文件,才保险

5.2.4加bpmn转换成xml文件

复制bpmn文件,后缀名改为xml,会自动完成转换,转换完成后要注意有没有乱码问题。最好文字采用英文

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:activiti="http://activiti.org/bpmn" 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" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
expressionLanguage="http://www.w3.org/1999/XPath" id="m1622529833429" name="" targetNamespace="http://www.activiti.org/testm1622529833429" typeLanguage="http://www.w3.org/2001/XMLSchema"> <process id="myProcess_1" isClosed="false" isExecutable="true" processType="None"> <startEvent id="_2" name="StartEvent"/> <userTask activiti:assignee="请假申请人" activiti:exclusive="true" id="_3" name="请假申请"/> <userTask activiti:assignee="审批人" activiti:exclusive="true" id="_4" name="审批"/> <endEvent id="_5" name="EndEvent"/> <sequenceFlow id="_6" sourceRef="_2" targetRef="_3"/> <sequenceFlow id="_7" sourceRef="_3" targetRef="_4"/> <sequenceFlow id="_8" sourceRef="_4" targetRef="_5"/> </process> <bpmndi:BPMNDiagram documentation="background=#FFFFFF;count=1;horizontalcount=1;orientation=0;width=842.4;height=1195.2;imageableWidth=832.4;imageableHeight=1185.2;imageableX=5.0;imageableY=5.0"
id="Diagram-_1" name="New Diagram"> <bpmndi:BPMNPlane bpmnElement="myProcess_1"> <bpmndi:BPMNShape bpmnElement="_2" id="Shape-_2"> <dc:Bounds height="32.0" width="32.0" x="645.0" y="15.0"/> <bpmndi:BPMNLabel> <dc:Bounds height="32.0" width="32.0" x="0.0" y="0.0"/> </bpmndi:BPMNLabel> </bpmndi:BPMNShape> <bpmndi:BPMNShape bpmnElement="_3" id="Shape-_3"> <dc:Bounds height="55.0" width="85.0" x="625.0" y="100.0"/> <bpmndi:BPMNLabel> <dc:Bounds height="55.0" width="85.0" x="0.0" y="0.0"/> </bpmndi:BPMNLabel> </bpmndi:BPMNShape> <bpmndi:BPMNShape bpmnElement="_4" id="Shape-_4"> <dc:Bounds height="55.0" width="85.0" x="630.0" y="190.0"/> <bpmndi:BPMNLabel> <dc:Bounds height="55.0" width="85.0" x="0.0" y="0.0"/> </bpmndi:BPMNLabel> </bpmndi:BPMNShape> <bpmndi:BPMNShape bpmnElement="_5" id="Shape-_5"> <dc:Bounds height="32.0" width="32.0" x="650.0" y="285.0"/> <bpmndi:BPMNLabel> <dc:Bounds height="32.0" width="32.0" x="0.0" y="0.0"/> </bpmndi:BPMNLabel> </bpmndi:BPMNShape> <bpmndi:BPMNEdge bpmnElement="_6" id="BPMNEdge__6" sourceElement="_2" targetElement="_3"> <di:waypoint x="661.0" y="47.0"/> <di:waypoint x="661.0" y="100.0"/> <bpmndi:BPMNLabel> <dc:Bounds height="0.0" width="0.0" x="0.0" y="0.0"/> </bpmndi:BPMNLabel> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge bpmnElement="_7" id="BPMNEdge__7" sourceElement="_3" targetElement="_4"> <di:waypoint x="670.0" y="155.0"/> <di:waypoint x="670.0" y="190.0"/> <bpmndi:BPMNLabel> <dc:Bounds height="0.0" width="0.0" x="0.0" y="0.0"/> </bpmndi:BPMNLabel> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge bpmnElement="_8" id="BPMNEdge__8" sourceElement="_4" targetElement="_5"> <di:waypoint x="666.0" y="245.0"/> <di:waypoint x="666.0" y="285.0"/> <bpmndi:BPMNLabel> <dc:Bounds height="0.0" width="0.0" x="0.0" y="0.0"/> </bpmndi:BPMNLabel> </bpmndi:BPMNEdge> </bpmndi:BPMNPlane> </bpmndi:BPMNDiagram> </definitions>

主要的信息在<process>标签里面。包含了图形的主要信息,开始、结束、任务、箭头流程等。

 

对于xml文件,还可以生成图片

 

 点击Designer,出现下入界面

 

 

 

 

6.生成activity的表格

6.1添加依赖

注意,添加的activity版本不同,生成的表的数量不同,这里生成的是25张表

        <!--activity依赖-->
        <dependency>
            <groupId>org.activiti</groupId>
            <artifactId>activiti-engine</artifactId>
            <version>7.0.0.Beta1</version>
        </dependency>

        <dependency>
            <groupId>org.activiti</groupId>
            <artifactId>activiti-bpmn-model</artifactId>
            <version>7.0.0.Beta1</version>
        </dependency>

        <dependency>
            <groupId>org.activiti</groupId>
            <artifactId>activiti-bpmn-converter</artifactId>
            <version>7.0.0.Beta1</version>
        </dependency>

        <dependency>
            <groupId>org.activiti</groupId>
            <artifactId>activiti-json-converter</artifactId>
            <version>7.0.0.Beta1</version>
        </dependency>

        <dependency>
            <groupId>org.activiti</groupId>
            <artifactId>activiti-bpmn-layout</artifactId>
            <version>7.0.0.Beta1</version>
        </dependency>


        <!--activiti和Spring整合依赖-->
        <dependency>
            <groupId>org.activiti</groupId>
            <artifactId>activiti-spring</artifactId>
            <version>7.0.0.Beta1</version>
        </dependency>

activity自带spring的包,注意可能依赖冲突

6.2编码生成表格

package com.jinsenianhua.activity.base;

import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngineConfiguration;
import org.junit.jupiter.api.Test;

/**
 * @Classname Te
 * @Description TODO
 * @Date 2021/6/1 0001 下午 1:55
 * @Created by jcc
 */
public class Te {



    @Test
    public void initProcessEngine(){
        //创建引擎配置对象
        ProcessEngineConfiguration configration = ProcessEngineConfiguration.createStandaloneInMemProcessEngineConfiguration();

        //创建流程引擎对象
        //目标生成数据库表
        configration.setJdbcUrl("jdbc:mysql://localhost:3306/jsnh?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai");
        configration.setJdbcDriver("com.mysql.jdbc.Driver");
        configration.setJdbcUsername("root");
        configration.setJdbcPassword("573875306");
        //设置表的生成策略
        configration.setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE);

        ProcessEngine processEngine = configration.buildProcessEngine();

        System.out.println(processEngine.getName());
    }


    /**
     * 数据源的配置在activiti.cfg.xml 中
     */
    @Test
    public void initProcessEngine2(){
        ProcessEngineConfiguration configration = ProcessEngineConfiguration.createProcessEngineConfigurationFromResourceDefault();
        ProcessEngine engine = configration.buildProcessEngine();
        System.out.println("初始化流引擎对象成功"+engine.getName());

    }

}

 

activiti.cfg.xml  注意名字要是这个

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="processEngineConfiguration"
          class="org.activiti.engine.impl.cfg.StandaloneInMemProcessEngineConfiguration">
        <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/jsnh?serverTimezone=Asia/Shanghai"></property>
        <property name="jdbcDriver" value="com.mysql.jdbc.Driver"></property>
        <property name="jdbcUsername" value="root"></property>
        <property name="jdbcPassword" value="573875306"></property>
        <property name="databaseSchemaUpdate" value="true"></property>
    </bean>


</beans>

上面介绍了两种生成表格的方法

方法1,纯编码

  方法initProcessEngine,该方法中指定数据源,表的生成策略,运行该方法,即可生成表格

方法2:编码+配置文件

  方法initProcessEngine2()+activiti.cfg.xml,数据源等相关配置在activiti.cfg.xml文件中,运行initProcessEngine2()方法会自动读取activiti.cfg.xml配置生成表格

  

 

7.表的介绍

  https://blog.csdn.net/hqbootstrap1/article/details/82977107

   名称中间是RU的表,是运行中用到的表,临时记录表,流程结束时会删除这些记录