Demo項(xiàng)目代碼:
https://gitee.com/AnAnXiEr/activiti6-demo
1、ACT_HI_PROCINST【HistoricProcessInstanceEntityImpl】:歷史流程實(shí)例表
- PROC_INST_ID_:流程實(shí)例ID
- BUSINESS_KEY_:業(yè)務(wù)ID
- PROC_DEF_ID_:流程定義ID
- START_TIME_:開始時(shí)間
- END_TIME_:結(jié)束時(shí)間
- DURATION:執(zhí)行時(shí)長
- START_USER_ID_:流程發(fā)起人
- START_ACT_ID_:開始節(jié)點(diǎn)ID
- END_ACT_ID_:結(jié)束節(jié)點(diǎn)ID
- SUPER_PROCESS_INSTANCE_ID_:父流程實(shí)例
- DELETE_REASON_:刪除原因
- TENANT_ID_:多租戶
2、ACT_HI_ACTINST【】:歷史節(jié)點(diǎn)實(shí)例表
3、ACT_HI_TASKINST【】:歷史任務(wù)表
4、ACT_HI_VARINST【】:歷史變量表
5、ACT_HI_IDENTITYLINK【】:歷史參與者表
6、ACT_HI_DETAIL【】:歷史變更表
7、ACT_HI_ATTACHMENT【】:附件表
8、ACT_HI_COMMENT【】:評(píng)論表
9、ACT_EVT_LOG【EventTlogEntryEntityImpl】:事件日志表(建議存到mongodb、Elasticsearch 里,便于對(duì)data的json數(shù)據(jù)進(jìn)行解析)
- LOG_NR_:自增主鍵
- TYPE_:類型
- PROC_DEF_ID_:流程定義ID
- PROC_INST_ID_:流程實(shí)例ID
- EXECUTION_ID_:流程執(zhí)行ID
- TASK_ID_:任務(wù)ID
- TIME_STAMP_:時(shí)間戳
- USER_ID_:用戶
- DATA_:內(nèi)容數(shù)據(jù)Json
- LOCK_OWNER_:鎖定節(jié)點(diǎn)
- LOCK_TIME_:鎖定時(shí)間
- IS_PROCESSED_:是否正在執(zhí)行
測試代碼
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">
<!--基于內(nèi)存的獨(dú)立的流程引擎配置-->
<bean id="processEngineConfiguration"
class="org.activiti.engine.impl.cfg.StandaloneInMemProcessEngineConfiguration">
<!--以druid數(shù)據(jù)源連接-->
<property name="dataSource" ref="dataSource"/>
<!--啟動(dòng)時(shí)自動(dòng)檢查并更新數(shù)據(jù)庫表,不存在會(huì)創(chuàng)建 (一般 dev開發(fā)項(xiàng)目 使用)-->
<property name="databaseSchemaUpdate" value="true"/>
<!--是否使用historyUsed數(shù)據(jù)表、默認(rèn)是true-->
<!--<property name="dbHistoryUsed" value="false"></property>-->
<!--是否使用Identity數(shù)據(jù)表、默認(rèn)是true-->
<!--<property name="dbIdentityUsed" value="false"></property>-->
<!--開啟歷史記錄等級(jí)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數(shù)據(jù)庫
@Rule
public ActivitiRule activitiRule = new ActivitiRule("dbentity/activiti-mysql.cfg.xml");
/**
* 部署
*/
@Test
public void testHistory() {
//會(huì)往act_ge_byteArray表插入一條資源記錄
//會(huì)往act_re_deployment表插入一條流程部署記錄表
//會(huì)往act_re_procdef表插入一條流程定義信息表
activitiRule.getRepositoryService().createDeployment().name("流程部署")
.addClasspathResource("dbentity/my-process.bpmn20.xml")
.deploy();
RuntimeService runtimeService = activitiRule.getRuntimeService();
//act_ru_execution流程實(shí)例與分支執(zhí)行信息插入2條(流程啟動(dòng)+用戶任務(wù)執(zhí)行)
//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();
//設(shè)置owner
taskService.setOwner(task.getId(), "user1");
//附件
taskService.createAttachment("url", task.getId(), process.getId()
, "attachmentName", "desc", "/url/test.png");
//評(píng)論
taskService.addComment(task.getId(),task.getProcessInstanceId(),"record note1");
taskService.addComment(task.getId(),task.getProcessInstanceId(),"record note2");
//form提交(form提交會(huì)將提交的表單保存到act_hi_detail表中,通過task提交不會(huì)報(bào)存進(jìn)去)
Map<String, String> properties = Maps.newHashMap();
properties.put("key1","value2_1");
properties.put("key3","value3");
activitiRule.getFormService().submitTaskFormData(task.getId(),properties);
}
}