一、流程绘制和部署
创建流程图
绘制如下流程图
给人事审批添加候选人
给经理审批添加两个候选人
保存导出流程图
部署流程定义
@Test
void contextLoads() {
DeploymentBuilder deployment = repositoryService.createDeployment();
deployment.addClasspathResource("process01/HolidayDemo1.bpmn20.xml");
deployment.name("候选人案例");
Deployment deploy = deployment.deploy();
System.out.println("deploy.getId() = " + deploy.getId());
}
二、拾取操作
发起流程
/**
* 发起流程
*/
@Test
public void startProcess() {
String id = "HolidayDemo1:1:93caf684-2af9-11ef-910c-644ed7087863";
// 给人事审批候选人进行赋值
Map<String, Object> variables = new HashMap<>();
variables.put("candidate1", "zhangsan");
variables.put("candidate2", "lisi");
variables.put("candidate3", "wangwu");
// 根据流程定义ID启动流程
ProcessInstance processInstance = runtimeService.startProcessInstanceById(id, variables);
}
查看act_ru_task表发现assignee字段中审批人是空的。
根据候选人查询待办信息,并将候选人变更为审批人,进行审批。
/**
* 根据用户查询待办信息
*/
@Test
public void findFlow() {
List<Task> list = taskService.createTaskQuery().taskCandidateUser("zhangsan").list();
// 根据id进行审批
for (Task task : list) {
// 把zhangsan由候选人变更为审批人
taskService.claim(task.getId(), "zhangsan");
completeTask(task.getId());
}
}
/**
* 根据Id审批任务
*/
public void completeTask(String taskId) {
// 定义经理审批候选人
Map<String, Object> variables = new HashMap<>();
variables.put("candidate4", "youwangzi1");
variables.put("candidate5", "youwangzi2");
taskService.complete(taskId, variables);
}
查看运行时用户关系信息表。
三、归还与指派
归还操作:审批人 -> 候选人
/**
* 根据用户查询待办信息
*/
@Test
public void findFlow() {
List<Task> list = taskService.createTaskQuery().taskCandidateUser("zhangsan").list();
// 根据id进行审批
for (Task task : list) {
// 把zhangsan由候选人变更为审批人
taskService.claim(task.getId(), "zhangsan");
// 可以通过unclaim()方法将审批人归还回候选人。
taskService.unclaim(task.getId());
// completeTask(task.getId());
}
}
指派新的审批人
/**
* 根据用户查询待办信息
*/
@Test
public void findFlow() {
List<Task> list = taskService.createTaskQuery().taskCandidateUser("zhangsan").list();
// 根据id进行审批
for (Task task : list) {
// 将当前任务指派给youwangzi用户进行审批
task.setAssignee("youwangzi");
}
}