开发环境:JDK1.8+idea工具+maven
首先idea下载插件File->settings->plugins->Marketplace 直接搜索actiBPM下载,之后重启idea。
流程图中中文乱码问题:
找到idea安装目录bin目录下如下图所示两个文件,用编辑器打开,在文件末尾添加 -Dfile.encoding=UTF-8 ,然后重启idea,再打开流程图就会发现中文已经可以正常显示了。
创建springboot项目:
引入pom文件包
需要的mysql已经mybatis
启动类是增加:
-
/**
-
* 去除springboot默认的basic验证,否则访问项目需要提供用户名和密码
-
*/
-
-
org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration.class,
-
SecurityAutoConfiguration.class})
-
public class LambdaApplication {
-
-
public static void main(String[] args) {
-
SpringApplication.run(LambdaApplication.class, args);
-
}
-
-
}
数据源直接使用yml或者properties配置,activiti会自动读取配置。但需要进行配置,加载数据源
-
/**
-
*这个yml配置绝对不能少,否则启动会失败
-
* 意思是每次启动对自动创建的表进行检验
-
*/
-
spring:
-
activiti:
-
history-level: full
-
check-process-definitions: false
然后直接appliction直接启动项目,会发现数据库中自动创建了28张表
大致介绍一下这些表:
- ACT_GE 通用类
- ACT_HI 历史记录类
- ACT_ID 用户信息类
- ACT_RE 流程实例类
- ACT_RU 运行时类
详细的介绍
表名 | 说明 |
---|---|
ACT_EVT_LOG | 事件日志表(实验性质) |
ACT_GE_BYTEARRAY | 通用的流程定义和流程资源 |
ACT_GE_PROPERTY | 系统相关属性 |
ACT_HI_ACTINST | 历史的流程实例 |
ACT_HI_ATTACHMENT | 历史的流程附件 |
ACT_HI_COMMENT | 历史的批注信息 |
ACT_HI_DETAIL | 历史的流程运行中的细节信息 |
ACT_HI_IDENTITYLINK | 历史的流程运行过程中用户关系 |
ACT_HI_PROCINST | 历史的流程实例 |
ACT_HI_TASKINST | 历史的任务实例 |
ACT_HI_VARINST | 历史的流程运行中的变量信息 |
ACT_ID_GROUP | 组 |
ACT_ID_INFO | 用户详细信息 |
ACT_ID_MEMBERSHIP | 用户和组关系的中间表 |
ACT_ID_USER | 用户表 |
ACT_RE_DEPLOYMENT | 部署的流程信息 |
ACT_RE_MODEL | 流程模型信息 |
ACT_RE_PROCDEF | 流程定义信息 |
ACT_RU_DEADLETTER_JOB | 存储执行失败的任务表(异步) |
ACT_RU_EVENT_SUBSCR | 运行时事件 |
ACT_RU_EXECUTION | 运行时流程执行实例 |
ACT_RU_IDENTITYLINK | 运行时用户关系信息 |
ACT_RU_JOB | 运行时作业(异步) |
ACT_RU_SUSPENDED_JOB | 暂停运行的任务(异步) |
ACT_RU_TASK | 运行时任务 |
ACT_RU_TIMER_JOB | 任务定时器表(异步) |
ACT_RU_VARIABLE | 运行时变量表 |
ACT_PROCDEF_INFO | 流程定义信息表 |
-
-
private RuntimeService runtimeService;
-
-
-
private TaskService taskService;
-
-
-
private IdentityService identityService;
-
-
-
private RepositoryService repositoryService;
-
-
-
private ProcessEngine processEngine;
-
-
-
private HistoryService historyService;
springboot直接使用这些service管理操作这些表。就不再需要 processEngine.get***service();
Service | 管理的表 |
---|---|
RepositoryService | 通用类的表 |
FormService | 通过表单提交的任务的服务类 |
HistoryService | 历史记录表 |
IdentityService | 用户信息表 |
ManagementService | 自定义查询的服务类 managementService.executeCustomSql |
RuntimeService | 运行时相关表 |
TaskService | 任务表, 可以查询 ACT_RU_ ACT_HI_ |
在resources下创建一个:processes文件夹,放流程文件。之后右键点击文件夹:创建流程文件
这是我创建的一个流程文件,直接保存即可。无需和eclipse一样需要去生成一个png文件。在使用repositoryService部署流程对象时他会在数据库的ACT_GE_BYTEARRAY 通用的流程定义和流程资源表中创建保存相应的png以及bpmn文件
这我就不详细截图了:分别对应的是name名称,assignee以及委托人:组长是group,经理是manager,老板是boss
使用方法:
发布流程:
-
/**
-
* 发布流程
-
*
-
* @throws IOException
-
*/
-
@Test
-
public void deploymentProcesses_zip() throws IOException {
-
-
Deployment deploy = repositoryService.createDeployment()//创建一个部署的对象
-
.name("请假流程定义")//创建流程名称
-
.addClasspathResource("processes/activiti_demo.bpmn")//指定zip完成部署
-
.deploy();
-
// long count = repositoryService.createProcessDefinitionQuery().count();
-
System.out.println("部署id" + deploy.getId());
-
System.out.println("部署名称" + deploy.getName());
-
// System.out.println("部署名称"+count);
-
-
}
启动流程:
-
/**
-
* 启动流程
-
* RuntimeService
-
*/
-
@Test
-
public void startProcess() {
-
//可根据id、key、message启动流程
-
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("myProcess_1");
-
System.out.println(processInstance.getName());
-
System.out.println(processInstance.getProcessDefinitionId());
-
System.out.println(processInstance.getId());
-
}
查看任务:
-
-
/**
-
* 查看任务
-
* TaskService
-
*/
-
@Test
-
public void queryTask() {
-
//根据assignee(代理人)查询任务
-
String assignee = "manager";
-
List<Task> tasks = taskService.createTaskQuery().taskAssignee(assignee).list();
-
-
int size = tasks.size();
-
for (int i = 0; i < size; i++) {
-
Task task = tasks.get(i);
-
-
}
-
//获取最新一条
-
for (Task task : tasks) {
-
System.out.println("taskId:" + task.getId() +
-
",taskName:" + task.getName() +
-
",assignee:" + task.getAssignee() +
-
",createTime:" + task.getCreateTime());
-
}
-
}
办理任务:
-
/**
-
* 办理任务
-
*/
-
-
public void handleTask() {
-
//根据上一步生成的taskId执行任务
-
String taskId = "12505";
-
taskService.complete(taskId);
-
}
这就是一套简单的业务流程代码了。
所有的数据可以根据相应的表进行查看,特别注意的是。这只是测试:在相应的项目中如果需要使用,需要根据具体的用户user以及功能权限进行逻辑处理
- 源码地址:github源码 https://github.com/superqinchao/activiti-demo/tree/feature/activiti_demo 分支feature/activiti_demo
参考:https://blog.csdn.net/qinchao_mei/article/details/100661212