Demo项目代码:
https://gitee.com/AnAnXiEr/activiti6-demo
1、ACT_HI_PROCINST【HistoricProcessInstanceEntityImpl】:历史流程实例表
- PROC_INST_ID_:流程实例ID
- BUSINESS_KEY_:业务ID
- PROC_DEF_ID_:流程定义ID
- START_TIME_:开始时间
- END_TIME_:结束时间
- DURATION:执行时长
- START_USER_ID_:流程发起人
- START_ACT_ID_:开始节点ID
- END_ACT_ID_:结束节点ID
- SUPER_PROCESS_INSTANCE_ID_:父流程实例
- DELETE_REASON_:删除原因
- TENANT_ID_:多租户
2、ACT_HI_ACTINST【】:历史节点实例表
3、ACT_HI_TASKINST【】:历史任务表
4、ACT_HI_VARINST【】:历史变量表
5、ACT_HI_IDENTITYLINK【】:历史参与者表
6、ACT_HI_DETAIL【】:历史变更表
7、ACT_HI_ATTACHMENT【】:附件表
8、ACT_HI_COMMENT【】:评论表
9、ACT_EVT_LOG【EventTlogEntryEntityImpl】:事件日志表(建议存到mongodb、Elasticsearch 里,便于对data的json数据进行解析)
- LOG_NR_:自增主键
- TYPE_:类型
- PROC_DEF_ID_:流程定义ID
- PROC_INST_ID_:流程实例ID
- EXECUTION_ID_:流程执行ID
- TASK_ID_:任务ID
- TIME_STAMP_:时间戳
- USER_ID_:用户
- DATA_:内容数据Json
- LOCK_OWNER_:锁定节点
- LOCK_TIME_:锁定时间
- IS_PROCESSED_:是否正在执行
测试代码
cfg文件
<?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">
<!--以druid数据源连接-->
<property name="dataSource" ref="dataSource"/>
<!--启动时自动检查并更新数据库表,不存在会创建 (一般 dev开发项目 使用)-->
<property name="databaseSchemaUpdate" value="true"/>
<!--是否使用historyUsed数据表、默认是true-->
<!--<property name="dbHistoryUsed" value="false"></property>-->
<!--是否使用Identity数据表、默认是true-->
<!--<property name="dbIdentityUsed" value="false"></property>-->
<!--开启历史记录等级full-->
<property name="historyLevel" value="FULL"></property>
<!--开启日志-->
<property name="enableDatabaseEventLogging" value="true"/>
</bean>
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
<property name="url"
value="jdbc:mysql://10.10.1.17:3306/activiti6?useUnicode=true&characterEncoding=utf8&nullCatalogMeansCurrent=true&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8"/>
<property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>
<property name="username" value="root001"/>
<property name="password" value="Mysql_2019"/>
<property name="initialSize" value="1"/>
<property name="maxActive" value="20"/>
<property name="filters" value="stat,slf4j"/>
</bean>
</beans>
package com.imooc.activiti.activitidemo.dbentity;
import com.google.common.collect.Maps;
import org.activiti.engine.RuntimeService;
import org.activiti.engine.TaskService;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;
import org.activiti.engine.test.ActivitiRule;
import org.junit.Rule;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.Map;
/**
* @Description Hi配置测试
* @Author 胡浩
* @Date 2019/8/26
**/
public class DbHistoryTest {
private static final Logger LOGGER = LoggerFactory.getLogger(DbHistoryTest.class);
//测试、改为自己的mysql数据库
@Rule
public ActivitiRule activitiRule = new ActivitiRule("dbentity/activiti-mysql.cfg.xml");
/**
* 部署
*/
@Test
public void testHistory() {
//会往act_ge_byteArray表插入一条资源记录
//会往act_re_deployment表插入一条流程部署记录表
//会往act_re_procdef表插入一条流程定义信息表
activitiRule.getRepositoryService().createDeployment().name("流程部署")
.addClasspathResource("dbentity/my-process.bpmn20.xml")
.deploy();
RuntimeService runtimeService = activitiRule.getRuntimeService();
//act_ru_execution流程实例与分支执行信息插入2条(流程启动+用户任务执行)
//act_ru_task插入1条记录
Map<String, Object> variables = Maps.newHashMap();
//act_ru_variable 插入1条变量记录
variables.put("key0", "value0");
variables.put("key1", "value1");
variables.put("key2", "value2");
ProcessInstance process = runtimeService.startProcessInstanceByKey("my-process", variables);
//修改变量值
runtimeService.setVariable(process.getId(), "key1", "vaule1_1");
//获取task
TaskService taskService = activitiRule.getTaskService();
Task task = taskService.createTaskQuery().processInstanceId(process.getId()).singleResult();
//设置owner
taskService.setOwner(task.getId(), "user1");
//附件
taskService.createAttachment("url", task.getId(), process.getId()
, "attachmentName", "desc", "/url/test.png");
//评论
taskService.addComment(task.getId(),task.getProcessInstanceId(),"record note1");
taskService.addComment(task.getId(),task.getProcessInstanceId(),"record note2");
//form提交(form提交会将提交的表单保存到act_hi_detail表中,通过task提交不会报存进去)
Map<String, String> properties = Maps.newHashMap();
properties.put("key1","value2_1");
properties.put("key3","value3");
activitiRule.getFormService().submitTaskFormData(task.getId(),properties);
}
}
网友评论