1.用户任务的创建
用户任务一般需要指定责任人,即执行任务的人。可以以流程变量的方式传入。
2.流程定义的部署
/**
* 流程定义的部署
*/
@Test
public void activitiDeployment() {
//创建ProcessEngine对象
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
//得到RepositoryService,用于加载流程图,部署流程图
RepositoryService repositoryService = processEngine.getRepositoryService();
//部署
Deployment deployment = repositoryService.createDeployment().addClasspathResource("leave.bpmn").name("leave").deploy();
//输出部署信息
System.out.println(deployment.getName());
System.out.println(deployment.getId());
}
3.执行流程实例
/**
* 执行流程实例
*/
@Test
public void startProcessInstance() {
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
Map<String, Object> variables = new HashMap<>();
variables.put("assignee1", "张一");
//第一个传入值对应bpmn中的id
//businesskey对应具体的业务表的主键,例如请假详情中的请假天数,请假起始时间,请假原因等等。
ProcessInstance processInstance = processEngine.getRuntimeService().startProcessInstanceByKey("_leave2","businesskey",variables);
}
4.查询用户当前任务
/**
* 查询当前任务
*/
@Test
public void findMyCurrentTask() {
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
String asssignee1 = "dog";
List<Task> list = processEngine.getTaskService().createTaskQuery().taskAssignee(asssignee).list();
list.forEach(task -> {
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.getProcessDefinitionId());
System.out.println("执行对象的ID:" + task.getExecutionId());
System.out.println("任务的班里人:" + task.getAssignee());
System.out.println("流程定义ID:" + task.getProcessInstanceId());
});
}
5.执行任务
/**
* 处理任务
*/
@Test
public void completeTask() {
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
String taskId = "47504";
String asssignee1 = "a";
//定义并设置流程变量
Map<String, Object> variables = new HashMap<>();
variables.put("assignee1", "张三");
//创建tastServervice
TaskService taskService = processEngine.getTaskService();
//设置为当前任务可用变量
//taskService.setVariables(taskId, variables);
//校验是否有权限,根据任务id和assignee查得到任务,说明有权限
Task task = taskService.createTaskQuery().taskId(taskId).taskAssignee(asssignee).singleResult();
if (task != null) {
//完成任务 在该任务完成后其它结点才可使用该变量
taskService.complete(taskId, variables);
System.out.println("完成任务id=" + taskId);
}
}