博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
activiti入门列子一个简单的activiti请假流程
阅读量:2215 次
发布时间:2019-05-07

本文共 7085 字,大约阅读时间需要 23 分钟。

整个项目的目录结构:

pom.xml:

4.0.0
cn.zto
myActiviti
0.0.1-SNAPSHOT
jar
myActiviti
http://maven.apache.org
UTF-8
org.activiti
activiti-engine
5.15.1
org.activiti
activiti-spring
5.15.1
org.activiti
activiti-explorer
5.15.1
commons-dbcp
commons-dbcp
1.4
mysql
mysql-connector-java
5.1.29
org.springframework
spring-core
4.0.6.RELEASE
org.springframework
spring-beans
4.0.6.RELEASE
org.springframework
spring-test
4.0.6.RELEASE
org.springframework
spring-context
4.0.6.RELEASE
org.springframework
spring-context-support
4.0.6.RELEASE
org.springframework
spring-tx
4.0.6.RELEASE
org.springframework
spring-orm
4.0.6.RELEASE
org.mybatis
mybatis
3.2.5
org.mybatis
mybatis-spring
1.2.2
junit
junit
4.11
log4j
log4j
1.2.4
org.slf4j
slf4j-api
1.7.6
org.slf4j
jcl-over-slf4j
1.7.6
org.slf4j
slf4j-log4j12
1.7.6
org.apache.commons
commons-lang3
3.1
commons-io
commons-io
2.4
commons-fileupload
commons-fileupload
1.2.2
javax.annotation
javax.annotation-api
1.2
joda-time
joda-time
2.1

activiti.cfg.xml:

在 resource 下新建Activiti Diagram

可以通过这个地址安装插件  《Activiti BPMN 2.0 designer -  》

将UserTask分别修改成入下图所示

修改好ID 和 NAME然后在修改Main config中的Assignee,员工请假修改为张三,老板审批修改为老板

点击Window--->Preferences--->Activiti--->Save Actions:将Create process definition image when saving the diagram勾选

然后保存bpmn文件的时候会自动帮你截图

通过ProcessEngines.getDefaultProcessEngine获取流程引擎

//通过activiti.cfg.xml获取流程引擎	ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
 

通过源码可以看到  getDefaultProcessEngine方法会通过默认的activiti.cfg.xml文件名或者是activiti-context.xml文件名读取xml文件

当获取到的processEngine对象不为空时   就会在数据库创建关于activiti的23张表

具体作用如下:

跟详细的情况可以去下面这个地址了解:

此时你可以在数据库中看到act_ge_property表中插入了3条数据

将MyLeave.bpmn和MyLeave.png打包成myleave.zip文件(一定要是zip别压缩成rar)

执行以下方法,发布请假流程:

/**	 * 发布流程	 * 发布流程后,流程文件会保存到数据库中	 */	@Test	public void deployFlow(){		RepositoryService repositoryService = processEngine.getRepositoryService();				//获取在classpath下的流程文件		InputStream in = this.getClass().getClassLoader().getResourceAsStream("myleave.zip");		ZipInputStream zipInputStream = new ZipInputStream(in);		//使用deploy方法发布流程		repositoryService.createDeployment()						 .addZipInputStream(zipInputStream)						 .name("Myleave")						 .deploy();	}

查看数据库  发布的流程文件信息会保存在下面的三张表中:

 

我们可以通过RepositoryService获取详细的流程定义信息

@Test	public void queryProcdef(){		RepositoryService repositoryService = processEngine.getRepositoryService();		//创建查询对象		ProcessDefinitionQuery query = repositoryService.createProcessDefinitionQuery();		//添加查询条件		query.processDefinitionKey("myProcess");//通过key获取			// .processDefinitionName("My process")//通过name获取			// .orderByProcessDefinitionId()//根据ID排序		//执行查询获取流程定义明细		List
pds = query.list(); for (ProcessDefinition pd : pds) { System.out.println("ID:"+pd.getId()+",NAME:"+pd.getName()+",KEY:"+pd.getKey()+",VERSION:"+pd.getVersion()+",RESOURCE_NAME:"+pd.getResourceName()+",DGRM_RESOURCE_NAME:"+pd.getDiagramResourceName()); } }

key 和 name 就是我们原先画bpmn时候声明的:

 

使用流程定义的Key发布一个请假流程:

/**	 * 发布流程	 */	@Test	public void startFlow(){				RuntimeService runtimeService = processEngine.getRuntimeService();		/**		 * 启动请假单流程  并获取流程实例		 * 因为该请假单流程可以会启动多个所以每启动一个请假单流程都会在数据库中插入一条新版本的流程数据		 * 通过key启动的流程就是当前key下最新版本的流程		 * 		 */		ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("myProcess");		System.out.println("id:"+processInstance.getId()+",activitiId:"+processInstance.getActivityId());	}

当流程发布后在  act_ru_task ,act_ru_execution, act_ru_identitylink 表中插入流程数据

接下来就可以通过用户ID去查看该用户的任务了

/**	 * 查看任务	 */	@Test	public void queryTask(){		//获取任务服务对象		TaskService taskService = processEngine.getTaskService();		//根据接受人获取该用户的任务		List
tasks = taskService.createTaskQuery() .taskAssignee("张三") .list(); for (Task task : tasks) { System.out.println("ID:"+task.getId()+",姓名:"+task.getName()+",接收人:"+task.getAssignee()+",开始时间:"+task.getCreateTime()); } }

提出请假申请,启动流程

@Test	public void startTask(){		TaskService taskService = processEngine.getTaskService();		//taskId 就是查询任务中的 ID		String taskId = "204";		//完成请假申请任务		taskService.complete(taskId );	}

查看数据库变化 可以看到 表中的数据已经变成了老板审批相关数据

老板查看任务 ,并审批请假

/**	 * 查看任务	 */	@Test	public void queryTask(){		//获取任务服务对象		TaskService taskService = processEngine.getTaskService();		//根据接受人获取该用户的任务		List
tasks = taskService.createTaskQuery() .taskAssignee("老板") .list(); for (Task task : tasks) { System.out.println("ID:"+task.getId()+",姓名:"+task.getName()+",接收人:"+task.getAssignee()+",开始时间:"+task.getCreateTime()); } }
@Test	public void startTask(){		TaskService taskService = processEngine.getTaskService();		//taskId 就是查询任务中的 ID		String taskId = "302";		//完成请假申请任务		taskService.complete(taskId );	}

流程完毕,可以再act_hi_actinst表中看到整个请假流程

 

整个流程的过程是  1.发布流程 --->2.启动流程--->3.相关人查看任务完成并完成

数据都是存放在数据库中

具体详情可以查看Activiti 用户手册

#

activiti的视频资料
    里面有
你可能感兴趣的文章
REDIS缓存穿透,缓存击穿,缓存雪崩原因+解决方案
查看>>
动态代理实现AOP
查看>>
23种常见的java设计模式
查看>>
关于被final修饰的基本数据类型一些注意事项
查看>>
java Thread中,run方法和start方法的区别
查看>>
在 XML 中有 5 个预定义的实体引用
查看>>
XML 元素是可扩展的
查看>>
避免 XML 属性?针对元数据的 XML 属性
查看>>
XML DOM nodeType 属性值代表的意思
查看>>
JSP相关知识
查看>>
JDBC的基本知识
查看>>
《Head first设计模式》学习笔记 - 适配器模式
查看>>
《Head first设计模式》学习笔记 - 单件模式
查看>>
《Head first设计模式》学习笔记 - 工厂方法模式
查看>>
《Head first设计模式》学习笔记 - 装饰者模式
查看>>
《Head first设计模式》学习笔记 - 模板方法模式
查看>>
《Head first设计模式》学习笔记 - 外观模式
查看>>
《Head first设计模式》学习笔记 - 命令模式
查看>>
《Head first设计模式》学习笔记 - 抽象工厂模式
查看>>
《Head first设计模式》学习笔记 - 观察者模式
查看>>