今天给亲们带来一波福利,java 工作流 activiti 的集成 附源码
本章讲解一下
activiti的安装,
自动建表,部署流程定义,
启动流程实例,
查询当前人的个人任务,
完成我的任务,
查询流程定义,
删除流程定义,
查看流程图,
查询最新版本的流程定义,
删除流程定义,
查询流程状态,
查询历史任务,
查询历史流程实例 ,
等等
我用的eclipse 做了一个demo
首先先讲讲 eclipse怎么安装activiti
由于在线安装比较慢,所以我直接离线安装,稍微快一丢丢
项目源码,和离线文件在此 activiti.rar-Java代码类资源-CSDN下载
第一步:将四个jar包放在安装eclipse的features目录中
第二步:help ==》 install new software ==》 add
Name:Activiti BPMN 2.0 designer
Location:activiti-designer-5.18.0.zip
第三步:一直点next,同意,重启eclipse有效,安装完成
其次,代码部分
一:创建表
方法一:
/**
* 使用代码创建工作流的23张表
*/
@Test
public void createTable() {
ProcessEngineConfiguration processEngineConfiguration = ProcessEngineConfiguration.createStandaloneProcessEngineConfiguration();
//连接数据库配置
processEngineConfiguration.setJdbcDriver("com.mysql.jdbc.Driver");
processEngineConfiguration.setJdbcUrl("jdbc:mysql://localhost:3306/activiti?useUnicode=true&characterEncoding=utf-8");
processEngineConfiguration.setJdbcUsername("root");
processEngineConfiguration.setJdbcPassword("123456");
/*
public static final String DB_SCHEMA_UPDATE_FALSE = "false"; 不能自动创建表,需要表存在 地址 C:\Users\A556\Downloads\activiti-5.15.1\database\create
public static final String DB_SCHEMA_UPDATE_CREATE_DROP = "create-drop"; 先删除表再创建表
public static final String DB_SCHEMA_UPDATE_TRUE = "true"; 如果表不存在 ,自动创建表
*/
processEngineConfiguration.setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE);
//工作流的核心对象,ProcessEngine对象
ProcessEngine processEngine = processEngineConfiguration.buildProcessEngine();
System.out.println("processEngine==="+processEngine);
}
方法2
/**
* 使用配置文件 创建工作流的23张表
*/
@Test
public void createTable2() {
ProcessEngine processEngine= ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("activiti.cfg.xml").buildProcessEngine();
System.out.println("processEngine==="+processEngine);
}
二:绘画流程图
三:部署流程定义
public void deploymentProcessDefinition() {
Deployment deployment = processEngine.getRepositoryService()//与流程定义和部署对象相关的service
.createDeployment()//创建一个部署对象
.name("helloworld入门程序")//添加部署名称
.addClasspathResource("diagrams/helloworld.bpmn")//从classpath的资源加载,一次只能加载一个文件
.addClasspathResource("diagrams/helloworld.png")//从classpath的资源加载,一次只能加载一个文件
.deploy();//完成部署
System.out.println("部署ID:"+deployment.getId());//1
System.out.println("部署名称:"+deployment.getName());//helloworld入门程序
}
四:启动流程实例
public void startProcessInstance() {
String processDefinitionKey = "helloworld";
ProcessInstance pi = processEngine.getRuntimeService()//与正在执行的流程实例和执行对象相关的service
.startProcessInstanceByKey(processDefinitionKey);//使用流程邓毅的key启动流程实例, key对应 helloworld.bpmn文件中id属性值,使用key值启动,默认是按照最新版的流程定义启动
System.out.println("流程实例ID:"+pi.getId());//流程实例ID 101
System.out.println("流程定义ID:"+pi.getProcessDefinitionId());//流程定义ID helloworld:1:4
}
五:查询当前人的个人任务
public void findMyPersonalTask() {
String assignee = "张三";
List<Task> list = processEngine.getTaskService()//与正在执行的任务管理的相关serveice
.createTaskQuery()//创建任务查询对象
.taskAssignee(assignee)//指定个人任务查询,指定班里人
// .taskCandidateUser(candidateUser)//组任务的班里人查询
// .processDefinitionId(processDefinitionId)//使用更流程定义id查询
// .processInstanceId(processInstanceId)//使用流程实例id查询
// .executionId(executionId)//使用执行对象id查询
/**排序*/
// .orderByTaskCreateTime().asc()//使用创建时间的升序排列
// .singleResult()//返回唯一结果集
// .count()//返回结果集数量
// .listPage(firstResult, maxResults)//分页
.list();
if(list!=null && list.size()>0) {
for(Task task:list) {
System.out.println("任务ID:"+task.getId());
System.out.println("任务名称:"+task.getName());
System.out.println("任务任务的创建时间:"+task.getCreateTime());
System.out.println("任务的办理人:"+task.getAssignee());
System.out.println("流程实例ID:"+task.getProcessInstanceId());
System.out.println("执行对象ID:"+task.getExecutionId());
System.out.println("流程定义ID:"+task.getProcessDefinitionId());
System.out.println("###################################################################");
}
}else {
System.out.println("没有数据");
}
}
六:完成我的任务
public void completeMyPersonalTask() {
String taskId = "104";//张三id
processEngine.getTaskService()//与正在执行的任务管理相关的service
.complete(taskId);
System.out.println("完成任务:任务ID:"+taskId);
}
七:查看流程图
public void viewPic() throws IOException {
String deploymentId = "1001";
List<String> list = processEngine.getRepositoryService()//
.getDeploymentResourceNames(deploymentId);
//将生成图片放到文件夹下
//获取图片资源名称
String resourceName = "";
if(list!=null && list.size()>0) {
for(String name:list) {
if(name.indexOf(".png")>0) {
resourceName = name;
}
}
}
//获取图片输入流
InputStream in = processEngine.getRepositoryService()//与流程定义和部署对象相关的service
.getResourceAsStream(deploymentId, resourceName);
//将图片生成到D盘的目录下
File file = new File("D:/"+resourceName);
//将输入流的图片写到d盘下
FileUtils.copyInputStreamToFile(in, file);
}
八:查询历史任务
public void findHistoryTask() {
String taskAssignee = "张三";
List<HistoricTaskInstance> list = processEngine.getHistoryService()//与历史数据(历史表) 相关的service
.createHistoricTaskInstanceQuery()//创建历史任务实例查询
.taskAssignee(taskAssignee)//指定历史任务的办理人
.list();
if(list!=null && list.size()>0) {
for(HistoricTaskInstance hti:list) {
System.out.println("任务id:"+hti.getId());
System.out.println("名称:"+hti.getName());
System.out.println("流程实例id:"+hti.getProcessInstanceId());
System.out.println("开始时间:"+hti.getStartTime());
System.out.println("结束时间:"+hti.getEndTime());
System.out.println("毫秒:"+hti.getDurationInMillis());
System.out.println("###################################################################");
}
}else {
System.out.println("没有");
}
}
等等,
最后
好,代码到这里就结束了,如果亲们有什么疑问,欢迎下面评论。欢迎指正。如还有什么不懂的加我 QQ:517861659