Activiti工作流
1.创建流程生成23张表
public void initProcessEngine1() {
//创建流程引擎对象
ProcessEngineConfiguration processengine = ProcessEngineConfiguration.createStandaloneInMemProcessEngineConfiguration();
//设置数据库连接四大属性
processengine.setJdbcUrl("jdbc:mysql://127.0.0.1:3306/activiti");
processengine.setJdbcDriver("com.mysql.jdbc.Driver");
processengine.setJdbcUsername("root");
processengine.setJdbcPassword("root");
//设置生成策列(是否drop重新创建表)
processengine.setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE);
//执行创建流程引擎
ProcessEngine processEngine = processengine.buildProcessEngine();
System.out.println("初始化引擎成功!");
System.out.println(processEngine.getName());
}
1.1整合spring
public void initProcessEngine2() {
//读取配置文件activiti.cfg.xml
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
System.out.println("初始化引擎成功!");
System.out.println(processEngine.getName());
}
1.2xml文件
<?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="jdbcUrl" value="jdbc:mysql://127.0.0.1:3306/activiti"></property>
<property name="jdbcDriver" value="com.mysql.jdbc.Driver"></property>
<property name="jdbcUsername" value="root"></property>
<property name="jdbcPassword" value="root"></property>
</bean>
</beans>
2.流程部署
public void deployProcess(){
//获取流程引擎对象
ProcessEngine processEngine = init();
//获取RepositoryService流程部署对象
RepositoryService repositoryService = processEngine.getRepositoryService();
//部署流程
DeploymentBuilder deployment = repositoryService.createDeployment();
Deployment deploy = deployment.name("申请请假")
//流程图文件process.bpmn20.xml放在Resources文件夹下
.addClasspathResource("process.bpmn20.xml")
.deploy();
//打印流程部署对象信息
System.out.println("流程部署成功");
System.out.println("流程部署ID:"+deploy.getId());
System.out.println("流程部署名称:"+deploy.getName());
}
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jHyyyX5F-1603875120042)(D:\开发资料\wangyunshi\工作流笔记\小Demo\typora-user-images\1601980636664.png)]
2.1流程部署的基本信息表
SELECT * FROM act_re_deployment
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-t6om24er-1603875120045)(D:\开发资料\wangyunshi\工作流笔记\小Demo\typora-user-images\1601980783245.png)]
2.2流程部署定义表和流程部署信息表是一对一
SELECT * FROM act_re_procdef
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Lqy73dZ2-1603875120046)(D:\开发资料\wangyunshi\工作流笔记\小Demo\typora-user-images\1601981073793.png)]
2.3流程部署的流程图信息表(也就是xml和png文件以二进制存储表)
SELECT * FROM act_ge_bytearray
![外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nlyKL1C5-1603875120048)(D:\开发资料\wangyunshi\工作流笔记\小Demo\typora-user-images\1601981348388.png)]
3.流程启动
public void startProcess(){
ProcessEngine processEngine = init();
//得到runtimeService
RuntimeService runtimeService = processEngine.getRuntimeService();
//这里通过流程key来启动流程process
ProcessInstance process = runtimeService.startProcessInstanceByKey("process");
//启动完成
System.out.println("流程实例ID:"+process.getId());
System.out.println("流程对象ID:"+process.getProcessDefinitionId());
}
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RPvgs6fv-1603875120049)(D:\开发资料\wangyunshi\工作流笔记\小Demo\typora-user-images\1601982306722.png)]
3.1动态设置任接收人
public void startProcess(){
ProcessEngine processEngine = init();
//得到runtimeService
RuntimeService runtimeService = processEngine.getRuntimeService();
Map<String, Object> map = new HashMap<>();
map.put("user1","张三");
map.put("user2","李四");
map.put("user3","王五");
//这里通过流程key来启动流程process
ProcessInstance process = runtimeService.startProcessInstanceByKey("process",map);
//启动完成
System.out.println("流程实例ID:"+process.getId());
System.out.println("流程对象ID:"+process.getProcessDefinitionId());
}
3.2流程实例相关的表(流程实例基本信息)
SELECT * FROM act_ru_execution
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jM5n9aN4-1603875120051)(D:\开发资料\wangyunshi\工作流笔记\小Demo\typora-user-images\1601982473510.png)]
3.3流程实例任务节点表(也就是记录当前任务走到了哪个节点)
SELECT * FROM act_ru_task[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XMwO0Gm0-1603875120051)(D:\开发资料\wangyunshi\工作流笔记\小Demo\typora-user-images\1601982527526.png)]
3.4查询任务处理人信息
SELECT * FROM act_hi_identitylink
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XphbIhEE-1603875120052)(D:\开发资料\wangyunshi\工作流笔记\小Demo\typora-user-images\1601988915438.png)]
4.任务查询
public void taskQuery(){
ProcessEngine processEngine = init();
//获取任务查询对象
TaskService taskService = processEngine.getTaskService();
//查询所有任务
List<Task> list = taskService.createTaskQuery().list();
for (Task task : list) {
System.out.println("任务id:"+task.getId());
System.out.println("任务名称:"+task.getName());
System.out.println("任务处理人:"+task.getAssignee());
System.out.println("流程实例ID:"+task.getProcessInstanceId());
System.out.println("流程定义ID:"+task.getProcessDefinitionId());
}
System.out.println("--------------------------------------------------------");
//根据任务接收人查询
List<Task> tasks = taskService.createTaskQuery().taskAssignee("zhangsan").list();
for (Task task : tasks) {
System.out.println("任务id:"+task.getId());
System.out.println("任务名称:"+task.getName());
System.out.println("任务处理人:"+task.getAssignee());
System.out.println("流程实例ID:"+task.getProcessInstanceId());
System.out.println("流程定义ID:"+task.getProcessDefinitionId());
}
}
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jv01SxlS-1603875120052)(D:\开发资料\wangyunshi\工作流笔记\小Demo\typora-user-images\1601984117390.png)]
5.任务处理
public void taskComplete(){
ProcessEngine processEngine = init();
//获取taskservice对象
TaskService taskService = processEngine.getTaskService();
//构造同意驳回条件
Map<String, Object> map = new HashMap<>();
map.put("flag",true);
//任务执行,这里填写任务id
taskService.complete("5004",map);
System.out.println("当前任务5004执行完成,请执行下一个节点");
}
6.流程历史记录
SELECT * FROM act_hi_actinst
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BjGGmLOo-1603875120053)(D:\开发资料\wangyunshi\工作流笔记\小Demo\typora-user-images\1601986839526.png)]
7流程图
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DXquedxY-1603875120053)(D:\开发资料\wangyunshi\工作流笔记\小Demo\typora-user-images\1601986375070.png)]
8.补充pom
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>5.1.9.RELEASE</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13-beta-3</version>
</dependency>
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-engine</artifactId>
<version>5.22.0</version>
</dependency>
</dependencies>
</version>
</dependency>
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-engine</artifactId>
<version>5.22.0</version>
</dependency>
</dependencies>