【Activity学习五】--基于SSM整合Activiti之请假流程实现(二)
1、部署流程资源
2、查询流程定义信息
3、发布请假流程
4、查询用户任务
5、提出请假
6、老板查看请假任务
7、老板批准请假
8、查看整个请假流程
1、部署流程资源
部署流程资源有很多中方式,一次加载一个流程资源:
/**
* ClassName: ActivitiTest
* @Description: TODO
* @author chisj chisj@foxmail.com
* @date 2018年4月8日
*/
public class ActivitiTest {
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
/**
* 发布流程
*/
@Test
public void deloy() {
RepositoryService repositoryService = processEngine.getRepositoryService();
Deployment deployment = repositoryService.createDeployment()
.addClasspathResource("activiti/leave.bpmn")
.addClasspathResource("activiti/leave.png")
.deploy();
System.out.println("部署Id:" + deployment.getId());
System.out.println("部署时间:" + deployment.getDeploymentTime());
}
}
运行结果:
数据库变化:
act_ge_bytearray:通用的流程定义和流程资源
act_re_deployment:部署单元信息
act_re_procdef:已部署的流程定义
2、查询流程定义信息
/**
* 查询流程定义信息
*/
@Test
public void queryProcdef(){
RepositoryService repositoryService = processEngine.getRepositoryService();
//创建查询对象
ProcessDefinitionQuery query = repositoryService.createProcessDefinitionQuery();
//添加查询条件
query.processDefinitionKey("leave");//通过key获取
// .processDefinitionName("My process")//通过name获取
// .orderByProcessDefinitionId()//根据ID排序
//执行查询获取流程定义明细
List<ProcessDefinition> 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是画流程图时在流程属性里面定义的:
3、发布请假流程
/**
* 启动流程
*/
@Test
public void startFlow() {
RuntimeService runtimeService = processEngine.getRuntimeService();
/**
* 启动请假单流程 并获取流程实例
* 因为该请假单流程可以会启动多个所以每启动一个请假单流程都会在数据库中插入一条新版本的流程数据
* 通过key启动的流程就是当前key下最新版本的流程
*
*/
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("leave");
System.out.println("id:"+processInstance.getId()
+",activitiId:"+processInstance.getActivityId());
}
运行结果:
数据库变化:
act_ru_task:运行时变量表
act_ru_execution:运行时流程执行实例
act_hi_identitylink:运行时用户关系实例
4、查询用户任务
/**
* 查看任务
*/
@Test
public void quertTask() {
//获取任务服务对象
TaskService taskService = processEngine.getTaskService();
//根据接受人获取该用户的任务
List<Task> tasks = taskService.createTaskQuery()
.taskAssignee("emp")
.list();
for (Task task : tasks) {
System.out.println("ID:"+task.getId()
+",姓名:"+task.getName()
+",接收人:"+task.getAssignee()
+",开始时间:"+task.getCreateTime());
}
}
运行结果:
5、提出请假
/**
* 提出请假,启动流程
*/
@Test
public void startTask() {
TaskService taskService = processEngine.getTaskService();
//taskId 就是查询任务中的 ID
String taskId = "2504";
//完成请假申请任务
taskService.complete(taskId );
}
6、老板查看请假任务
查询结果:
7、老板批准请假
8、查看整个请假流程
在act_hi_actinst中查看: