idea之工作流activiti简单实战示例以及数据库表说明

首先idea安装actiBPM插件

打开file --> setting 面板
在这里插入图片描述
如果插件列表中没actiBPM,则进行 2 操作,进行浏览插件搜索 actiBPM,然后点击 “install” 按钮安装即可,然后重启idea

创建简单的流程图

在resource文件夹上右键,New–>BPMN File 新建文件,弹出窗口,然后输入文件
在这里插入图片描述
在这里插入图片描述
绘制完成后,改后缀名为xml, 然后将其导出为png
参考地址:https://blog.csdn.net/fy_java1995/article/details/99691583

使用java程序生成activiti数据库表

首先引入jar

<!--mysql-->
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>8.0.18</version>
			<scope>runtime</scope>
		</dependency>
<!-- 工作流插件 -->
		<dependency>
			<groupId>org.activiti</groupId>
			<artifactId>activiti-engine</artifactId>
			<version>7.1.0.M6</version>
		</dependency>
		<!-- https://mvnrepository.com/artifact/org.activiti/activiti-spring -->
		<dependency>
			<groupId>org.activiti</groupId>
			<artifactId>activiti-spring</artifactId>
			<version>7.1.0.M6</version>
		</dependency>
		<dependency>
			<groupId>org.activiti</groupId>
			<artifactId>activiti-bpmn-layout</artifactId>
			<version>7.1.0.M6</version>
			<!--<scope>test</scope>-->
		</dependency>

配置文件,配置数据库,这里使用的是mysql8
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.StandaloneProcessEngineConfiguration">
        <property name="jdbcDriver" value="com.mysql.cj.jdbc.Driver"></property>
        <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/activiti?serverTimezone=Asia/Shanghai&amp;useUnicode=true&amp;characterEncoding=utf-8&amp;zeroDateTimeBehavior=convertToNull&amp;useSSL=false&amp;allowPublicKeyRetrieval=true"></property>
        <property name="jdbcUsername" value="root"></property>
        <property name="jdbcPassword" value="123456"></property>
        <property name="databaseSchemaUpdate" value="true"></property>
    </bean>
</beans>

生成工作流表
两种方式

	@Test
    public void test1() {
        //1.创建ProcessEngineConfiguration对象
        ProcessEngineConfiguration configuration = ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("activiti.cfg.xml");
        //2.创建ProcessEngine对象
        ProcessEngine processEngine = configuration.buildProcessEngine();
        System.out.println(processEngine);
    }
​
    @Test
    public void test2() {
        //使用下面这种方式生成表的条件
        //1.activiti配置文件名称必须为activiti.cfg.xml
        //2.bean的id必须为"processEngineConfiguration"
        ProcessEngine defaultProcessEngine = ProcessEngines.getDefaultProcessEngine();
        System.out.println(defaultProcessEngine);
    }

使用activiti的步骤是(前提是流程图表已建立)

  1. 画工作流程图(此步可动态)
  2. 部署工作流程图
  3. 开启流程
  4. 查询任务
  5. 处理任务

部署流程对象

//1.创建ProcessEngineer对象
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        //2.获取repositoryService
        RepositoryService repositoryService = processEngine.getRepositoryService();
        //3.部署对象
        Deployment deploy = repositoryService.createDeployment()
                //添加bpmn资源
                .addClasspathResource("mytest.bpmn")
                //添加图片文件资源
                .addClasspathResource("mytest.png")
                .name("新的请假申请流程")
                .deploy();
        //4.输出部署的一些信息
        System.out.println(deploy.getId());
        System.out.println(deploy.getName());

注意我的流程图文件就在resources文件夹下,如果不是的话,要加上文件夹,如bpm/mytest.bpmn
在这里插入图片描述
开启一个流程

/**
* 背后影响的表:
 *      act_hi_actinst: 已完成的活动信息
 *      act_hi_identitylink: 参与者信息
 *      act_hi_procinst: 流程实例
 *      act_hi_taskinst: 任务实例
 *      act_ru_execution: 执行表
 *      act_ru_identitylink: 参与者信息
 *      act_ru_task: 任务
 */
RuntimeService runtimeService = processEngine.getRuntimeService();
runtimeService.startProcessInstanceByKey("holiday");

查询任务
根据接收人查询当前任务,可获取节点id以便处理时使用

//根据接收人查询当前任务
       TaskService taskService = processEngine.getTaskService();
        //根据assignee(节点接受人)查询任务
        String assignee = "张三";//
        List<Task> tasks = taskService.createTaskQuery().taskAssignee(assignee).list();

        //首次运行的时候这个没有输出,因为第一次运行的时候扫描act_ru_task的表里面是空的,但第一次运行完成之后里面会添加一条记录,之后每次运行里面都会添加一条记录
        for (Task task : tasks) {
            System.out.println("taskId=" +"流程任务节点信息ID:"+ task.getId() +
                    ",taskName:" +"流程任务节点名称ID:" +task.getName() +
                    ",assignee:" + "流程任务节点接受人:"+task.getAssignee() +
                    ",createTime:" +"流程任务节点创建时间:"+ task.getCreateTime());

        }

执行任务
任务完成审批流程

TaskService taskService = processEngine.getTaskService();
        //taskId 就是查询任务中的 ID
        String taskId = "27502";
        //完成请假申请任务
        taskService.complete(taskId);

其他
查询流程定义明细

RepositoryService repositoryService = processEngine.getRepositoryService();
        //创建查询对象
        ProcessDefinitionQuery query = repositoryService.createProcessDefinitionQuery();
        //添加查询条件
        query.processDefinitionKey("holiday");//通过key获取
        // .processDefinitionName("My process")//通过name获取
        // .orderByProcessDefinitionId()//根据ID排序
        //执行查询获取流程定义明细
        List<ProcessDefinition> pds = query.list();
        for (ProcessDefinition pd : pds) {
            System.out.println("ID:"+pd.getId()+",NAME:"+pd.getName()+",KEY:"+pd.getKey()+",VERSION:"+pd.getVersion()+",RESOURCE_NAME:"+pd.getResourceName()+",DGRM_RESOURCE_NAME:"+pd.getDiagramResourceName());
        }

可获取到该流程的各个发布信息,版本号

ID:holiday:1:4,NAME:null,KEY:holiday,VERSION:1,RESOURCE_NAME:mytest.bpmn,DGRM_RESOURCE_NAME:mytest.png
ID:holiday:2:2504,NAME:null,KEY:holiday,VERSION:2,RESOURCE_NAME:mytest.bpmn,DGRM_RESOURCE_NAME:mytest.png
ID:holiday:3:5004,NAME:null,KEY:holiday,VERSION:3,RESOURCE_NAME:mytest.bpmn,DGRM_RESOURCE_NAME:mytest.png
ID:holiday:4:7504,NAME:null,KEY:holiday,VERSION:4,RESOURCE_NAME:mytest.bpmn,DGRM_RESOURCE_NAME:mytest.png

流程定义删除

 //1.得到ProcessEngine对象
 ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
 //2.创建RepositoryService对象
 RepositoryService repositoryService = processEngine.getRepositoryService();
 //3.执行删除流程定义  参数代表流程部署的id
 repositoryService.deleteDeployment("1");

流程历史信息的查看

 //1.得到ProcessEngine对象
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        //2.得到HistoryService
        HistoryService historyService = processEngine.getHistoryService();
        //3.得到HistoricActivitiInstanceQuery对象
        HistoricActivityInstanceQuery historicActivityInstanceQuery = historyService.createHistoricActivityInstanceQuery();
        historicActivityInstanceQuery.processInstanceId("2501");//设置流程实例的id
        //4.执行查询
        List<HistoricActivityInstance> list = historicActivityInstanceQuery
                .orderByHistoricActivityInstanceStartTime().asc().list();//排序StartTime
        //5.遍历查询结果
        System.out.println("=============================");
        for (HistoricActivityInstance instance : list) {
            System.out.println(instance.getActivityId());
            System.out.println(instance.getActivityName());
            System.out.println(instance.getProcessDefinitionId());
            System.out.println(instance.getProcessInstanceId());
            System.out.println("=============================");
        }

流程实例参考地址:https://blog.csdn.net/fy_java1995/article/details/99691583

数据库表说明

数据库表的命名规则:

Activiti 的表都以 ACT_开头。 第二部分是表示表的用途的两个字母标识。 用途也和服务的 API 对应。

ACT_RE_*: 'RE’表示 repository。 这个前缀的表包含了流程定义和流程静态资源 (图片, 规则,等等)。

ACT_RU_*: 'RU’表示 runtime。 这些运行时的表,包含流程实例,任务,变量,异步任务, 等运行中的数据。 Activiti 只在流程实例执行过程中保存这些数据, 在流程结束时就会删除这些记录。 这样运行时表可以一直很小速度很快。

ACT_HI_*: 'HI’表示 history。 这些表包含历史数据,比如历史流程实例, 变量,任务等。

ACT_GE_*: GE 表示 general。通用数据, 用于不同场景下。
主要使用以下表:
流程部署表
SELECT * FROM act_re_deployment

流程定义表
SELECT * FROM act_re_procdef

资源文件表
SELECT * FROM act_ge_bytearray

系统配置表
SELECT * FROM act_ge_property

启动流程实例涉及到的表

流程实例运行时 执行对象表
SELECT * FROM act_ru_execution

流程实例运行时 身份联系表
SELECT * FROM act_ru_identitylink

流程实例运行时 用户任务表
SELECT * FROM act_ru_task

活动节点历史表
SELECT * FROM act_hi_actinst

身份联系表 历史
SELECT * FROM act_hi_identitylink

流程实例表 历史
SELECT * FROM act_hi_procinst

历史任务表
SELECT * FROM act_hi_taskinst

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值