SpringBoot+Acyiviti

1.IDEA画BPMN图后转成XML,文字乱码修改文字生成PNG图片,XML改回BPMN格式,进行部署

public void deploy() {
repositoryService.createDeployment().name("myProcess_1").addClasspathResource("processes/activiti_1.bpmn").deploy();
}
 报错:Activiti MalformedByteSequenceException: 3 字节的 UTF-8 序列的字节 3 无效。
 解决:将BPMN复制出来用notepad++转码UTF-8保存放回。

2.发起流程:

public void startProcess(){
String processDefiKey="myProcess_1";//bpmn 的 process标签的id属性
processEngine.getIdentityService().setAuthenticatedUserId("initiator_1");
ProcessInstance pi = processEngine.getRuntimeService().startProcessInstanceByKey(processDefiKey);

System.out.println("流程实例的id:"+pi.getProcessInstanceId());//ProcessInstance 对象
System.out.println("流程定义的id:"+pi.getProcessDefinitionId());//默认执行的是最新版本的流程定义
}
报错: Error creating bean with name 'org.activiti.spring.boot.SecurityAutoConfiguration': Initialization of bean failed; nested exception is java.lang.ArrayStoreException: sun.reflect.annotation.TypeNotPresentExceptionProxy
解决:SpringBoot启动类加上@SpringBootApplication(exclude = SecurityAutoConfiguration.class) ,activiti-spring-boot-starter-basic.jar包含spring-boot-starter-security

3.查询正在运行的任务

public void queryTask(){
//任务的办理人
String assignee="长颈鹿";
//创建一个任务查询对象
TaskQuery taskQuery = processEngine.getTaskService().createTaskQuery();
List<Task> list = taskQuery.taskAssignee(assignee).list();
//遍历任务列表
if(list!=null&&list.size()>0){
for(Task task:list){
System.out.println("任务的办理人:"+task.getAssignee());
System.out.println("任务的id:"+task.getId());
System.out.println("任务的名称:"+task.getName());
}
}
}
4.完成任务

public void compileTask(){
String taskId="2506";//act_ru_task表id列
processEngine.getTaskService().complete(taskId);
}

5.历史流程查询
//历史流程实例
public void queryHistoryProcInst(){
List<HistoricProcessInstance> list = processEngine.getHistoryService()
.createHistoricProcessInstanceQuery().processInstanceId("2501").list();
if(list!=null&&list.size()>0){
for(HistoricProcessInstance temp:list){
System.out.println("历史流程实例id:"+temp.getId());
System.out.println("历史流程定义的id:"+temp.getProcessDefinitionId());
System.out.println("历史流程实例开始时间--结束时间:"+temp.getStartTime()+"-->"+temp.getEndTime());
}
}
}
//历史任务实例
public void queryHistoryProcInst(){
String processInstanceId="2501";
List<HistoricTaskInstance> list = processEngine.getHistoryService()
.createHistoricTaskInstanceQuery().processInstanceId(processInstanceId).list();
if(list!=null&&list.size()>0){
for(HistoricTaskInstance temp:list){
System.out.print("历史流程实例任务id:"+temp.getId());
System.out.print("历史流程定义的id:"+temp.getProcessDefinitionId());
System.out.print("历史流程实例任务名称:"+temp.getName());
System.out.println("历史流程实例任务处理人:"+temp.getAssignee());
}
}
}

6.删除流程
public void deleteProcessDefi(){
String deploymentId="faefcc49-c3bf-11e9-ad7f-7c2a31635b29";
processEngine.getRepositoryService().deleteDeployment(deploymentId);
}

依赖
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.5.RELEASE</version>
<relativePath /> <!-- lookup parent from repository -->
</parent>

<dependencies>
<!-- https://mvnrepository.com/artifact/org.activiti/activiti-spring-boot-starter-basic -->
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-spring-boot-starter-basic</artifactId>
<version>6.0.0</version>
</dependency>

<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>

<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.0.0</version>
</dependency>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>

配置
spring:
jpa:
hibernate:
ddl-auto: update
database: MYSQL
show-sql: true
datasource:
url: jdbc:mysql://localhost:3306/demo?serverTimezone=GMT%2B8
username: ***
password: ***
driver-class-name: com.mysql.cj.jdbc.Driver
activiti:
check-process-definitions: false

mybatis:
typeAliasesPackage: demo.entity
mapperLocations: classpath:mappers/*.xml

表功能解释

日志表:
1. act_evt_log                        存储事件处理日志,方便管理员跟踪处理。
通用数据表
2. act_ge_bytearray               二进制数据表,一些文件存在这个表。
3. act_ge_property                属性数据表存储整个流程引擎级别的数据,初始化表结构时,会默认插入三条记录
历史数据表
4. act_hi_actinst                    历史节点表
5. act_hi_attachment             历史附件表
6. act_hi_comment                历史意见表
7. act_hi_detail                      历史详情表,提供历史变量的查询
8. act_hi_identitylink              历史流程人员表
9. act_hi_procinst                  历史流程实例表
10.act_hi_taskinst                 历史任务实例表
11.act_hi_varinst                   历史变量表
用户组织表
12.act_id_group                    用户组信息表
13.act_id_info                       用户扩展信息表
14.act_id_membership         用户与用户组对应信息表
15.act_id_user                      用户信息表
资源流程规则表
16.act_procdef_info              流程定义信息
17.act_re_deployment          部署信息表
18.act_re_model                   流程设计模型部署表
19.act_re_procdef                 流程定义数据表  
运行时数据库表
20.act_ru_event_subscr       监听表
21.act_ru_execution             运行时流程执行实例表
22.act_ru_identitylink           运行时流程人员表,主要存储任务节点与参与者的相关信息
23.act_ru_job                       运行时定时任务数据表
24.act_ru_task                     运行时任务节点表
25.act_ru_variable               运行时流程变量数据表

BPMN流程图相关:
1.候选人/候选组(candidate):可以执行任务的一类人或者多个组,候选人/候选组中都可以去签收任务,一旦某人签收,就成为受理人,其他人就不能再签收受理此任务;usertask流程图中,candidate标示候选;候选人涉及的表ACT_RU_IDENTITYLINK;
2.受理人(assignee):有两种情况,一种是候选人/组中有人签收任务后成为受理人,另外一种是流程图中直接指定受理人,但是可以指定一个动态受理人;受理人涉及的表ACT_RU_TASK;
3.持有人(owner):持有人设置主要是存入历史表中,用于历史任务的查询,涉及的表ACT_HI_TASKINST

posted @ 2019-08-21 17:10  袋子里的袋鼠  阅读(336)  评论(0编辑  收藏  举报