1. 组任务
同一个任务,一组人都可以查看,其中只有一个人可以申请到该任务进行处理(其他人员看不到该任务),如果过程中不想处理了,
可以将任务退回,这样组内其他人员可再次看到该任务,进行任务申请
1.1 创建流程图并设置任务候选人
1.2 部署流程
//流程部署 @Test public void deployment(){ //获取ProcessEngine对象 默认配置文件名称:activiti.cfg.xml 并且configuration的Bean实例ID为processEngineConfiguration ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); //获取RepositoryService对象进行流程部署 RepositoryService repositoryService = processEngine.getRepositoryService(); //进行部署,将对应的流程定义文件生成到数据库当中,作为记录进行保存 Deployment deployment = repositoryService.createDeployment() .addClasspathResource("holiday/holidaygroup.bpmn") //加载流程文件 .addClasspathResource("holiday/holidaygroup.png") .name("请假流程-组任务审批") //设置流程名称 .deploy(); //部署 //输出部署信息 System.out.println("流程名称:"+deployment.getName()); System.out.println("流程ID:"+deployment.getId()); System.out.println("流程Key:"+deployment.getKey()); }
1.3 启动流程实例
//启动一个流程实例 @Test public void getInstance(){ //获取ProcessEngine对象 默认配置文件名称:activiti.cfg.xml 并且configuration的Bean实例ID为processEngineConfiguration ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); //获取Runtime RuntimeService runtimeService = processEngine.getRuntimeService(); //设置流程变量 Holiday holiday=new Holiday(); holiday.setNum(3); Map<String,Object>map=new HashMap<>(); map.put("holiday",holiday); //启动一个流程实例 ProcessInstance holidaygroup = runtimeService.startProcessInstanceByKey("holidaygroup", map); System.out.println("流程实例name:"+holidaygroup.getName()); }
2. 组任务代办任务流程
2.1 查询组任务,但是不能执行
//提交任务 @Test public void commitTask(){ //获取ProcessEngine对象 默认配置文件名称:activiti.cfg.xml 并且configuration的Bean实例ID为processEngineConfiguration ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); //获取TaskService TaskService taskService = processEngine.getTaskService(); //查询到自己的任务,然后通过任务ID进行提交 Task task = taskService.createTaskQuery().processDefinitionKey("holidaygroup").taskAssignee("tingting").singleResult(); //处理任务 taskService.complete(task.getId()); }
2.2 查看数据库
2.3 查询组任务
//查询组任务 @Test public void getGropTask(){ //获取ProcessEngine对象 默认配置文件名称:activiti.cfg.xml 并且configuration的Bean实例ID为processEngineConfiguration ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); //获取TaskService TaskService taskService = processEngine.getTaskService(); //查询组任务 List<Task> list = taskService.createTaskQuery().processDefinitionKey("holidaygroup").taskCandidateUser("mayuan").list(); for (Task task:list){ System.out.println("任务ID:"+task.getId()); System.out.println("任务名称:"+task.getName()); System.out.println("任务处理人:"+task.getAssignee()); } }
2.4 查看控制台效果 此时三个用户都可以查看到任务
没有任务处理人为null说明当前任务 没有 人拾取
2.5 拾取任务 当任务被拾取后其他角色是看不到任务的
/** * 拾取任务 */ @Test public void claimTask() { //获取ProcessEngine对象 ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); //获取TaskService对象 TaskService taskService = processEngine.getTaskService(); //获取组任务 String candidateUser="zhuyuan"; Task task = taskService.createTaskQuery().processDefinitionKey("holidaygroup").taskCandidateUser(candidateUser).singleResult(); //不等于Null代表能够获取到该任务 if(task!=null){ //拾取任务 任务ID,任务执行人 taskService.claim(task.getId(),candidateUser); System.out.println("任务被:"+candidateUser+"拾取~"); } }
2.6 查看数据库 任务表
2.7 查看任务
/** * 查看任务 */ @Test public void getTask() { //获取ProcessEngine对象 ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); //获取TaskService对象 TaskService taskService = processEngine.getTaskService(); //查询到自己的任务,然后通过任务ID进行提交 Task task = taskService.createTaskQuery().processDefinitionKey("holidaygroup").taskAssignee("zhuyuan").singleResult(); //处理任务 if(task!=null){ taskService.complete(task.getId()); System.out.println("任务处理完毕"); } }
2.8 当 一个角色拾取任务后不想处理时会进行退回任务操作
/** * 任务退回/交接 */ @Test public void taskReturn(){ //获取ProcessEngine对象 ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); //获取TaskService对象 TaskService taskService = processEngine.getTaskService(); //查询到自己的任务,然后通过任务ID进行提交 Task task = taskService.createTaskQuery().processDefinitionKey("holidayGroup").taskAssignee("huaixin").singleResult(); if(task!=null){ //任务退回 任务ID null代表没有处理人执行,需要后续再次拾取任务 //任务交接 任务ID 如果第二个参数,处理人不为空代表将该任务交给次处理人 taskService.setAssignee(task.getId(),"wangnan"); System.out.println("任务退回"); } }
2.9 查看数据库任务表