Spring Boot入门样例-800-activiti整合activiti工作流业务流程管理
日常员工申请请假,有些公司需要经理和老板审批,有些公司需要经理/总监/HR/总经理审批,Activiti将这样业务流程变成可设计,从而无需开发千变万化的流程。本demo演示整合activiti实现工作流业务流程管理。
前言
本Spring Boot入门样例准备工作参考:
idea中需要安装actibpm插件,bpmn才能正确显示 插件参考Spring Boot入门样例-003-idea 安装配置和插件
pox.xml
必要的依赖如下,具体参见该项目的pox.xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<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.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
配置文件
resources/application.yml配置内容
spring:
datasource:
driver-class-name: com.mysql.jdbc.Driver
type: com.zaxxer.hikari.HikariDataSource
url: jdbc:mysql://localhost:3306/springbootdemo?useUnicode=true&characterEncoding=utf-8&useSSL=false&useAffectedRows=true
username: root
password: root
hikari:
minimum-idle: 5
maximum-pool-size: 15
auto-commit: true
idle-timeout: 30000
pool-name: DatebookHikariCP
max-lifetime: 1800000
connection-timeout: 30000
connection-test-query: SELECT 1
activiti:
check-process-definitions: true # activti是否自动部署
db-identity-used: true #是否使用activti自带的用户体系
database-schema-update: true #是否每次都更新数据库
代码解析
ActivitiService.java 如下
public interface ActivitiService {
/**
* 启动流程
*
* @param processDefinitionKey 流程定义id
* @param paramsMap 参数
* @return
*/
ProcessInstance startProcess(String processDefinitionKey, Map<String, Object>
paramsMap) throws Exception;
/**
* 完成任务
*
* @param taskId 任务id
* @param paramsMap 任务携带变量
*/
void complete(String taskId, Map<String, Object> paramsMap);
/**
* 完成任务
*
* @param taskId
*/
public void complete(String taskId);
/**
* 通过流程id 查询任务
*
* @param processInstanceId
* @return
*/
Task queryTaskByProcessId(String processInstanceId);
/**
* 通过任务id,查询任务信息
*
* @param taskId
* @return
*/
Task queryTaskById(String taskId);
/**
* 设置任务认领组
*
* @param taskId
* @param groupId
*/
void addCandidateGroup(String taskId, String groupId);
/**
* 认领任务
*
* @param taskId 任务id
* @param userId 认领人id
*/
void claim(String taskId, String userId);
/**
* 设置认证用户,用于定义流程启动人
*
* @param userId
*/
void setAuthUser(String userId);
/**
* 查看定义的流程图
*
* @param processDefinitionId
* @return
*/
byte[] definitionImage(String processDefinitionId) throws IOException;
/**
* 查看流程进度图
*
* @param pProcessInstanceId
* @return
* @throws Exception
*/
byte[] getProcessImage(String pProcessInstanceId) throws Exception;
/**
* 通过任务和变量名称获取变量
*
* @param taskId
* @param varName
* @return
*/
public Object queryVariables(String taskId, String varName);
/**
* 通过流程id 查询流程
*
* @param processId
* @return
*/
HistoricProcessInstanceEntity queryProcessInstance(String processId);
// **************** 流程管理 interface **************
/**
* 删除流程
*
* @param processInstanceId
* @param deleteReason
* @return
* @throws Exception
*/
void deleteProcessInstance(String processInstanceId, String deleteReason) throws Exception;
/**
* 流程部署
* 此方法为手动部署,传入/resource/processes目录下的流程问卷名称即可
*
* @param fileName 文件名
* @param category 流程分类
*/