1.使用activiti的插件actiBPM画一个流程图
2.流程定义与部署
//创建ProcessEngine对象
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
//得到RepositoryService,用于加载流程图,部署流程图
RepositoryService repositoryService = processEngine.getRepositoryService();
//部署
Deployment deployment = repositoryService.createDeployment().addClasspathResource("process/ServiceTaskTest.bpmn").name("test").deploy();
涉及的表:
act_re_deployment 部署信息
act_re_procdef 流程定义的一些信息
act_ge_bytearray 流程定义的bpmn文件及png文件
3.执行流程实例
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
ProcessInstance processInstance = processEngine.getRuntimeService().startProcessInstanceByKey("myProcess_1");
processInstanceKey可在流程图中获取:
涉及的表:
act_ru_execution 流程实例执行表,记录当前流程的执行情况
act_ru_task 任务执行表,记录当前执行的任务
act_ru_identitylink 任务参与者,记录当前参与任务的用户或组
act_hi_taskinst:已经执行完的历史任务信息
act_hi_procinst:流程实例的历史表,存放执行完毕的流程实例信息
act_hi_actinst:历史任务表,记录所有任务
注意:act_ru_*记录正在执行的任务,执行完则删除,确保小表操作
4.获取当前任务列表
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
//执行流程时获取的processInstance
List<Task> list= taskService.createTaskQuery().processInstanceId(processInstance.getId()).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.获取指定用户当前任务列表
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
String asssignee = "admin";
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());
});
6.完成任务
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
//创建tastServervice
TaskService taskService = processEngine.getTaskService();
taskService.complete(taskId);