Activiti5.22之学习,实现TaskListener接口动态设置用户组



  
    
    
      
        
      
    
    
    
      
        
      
    
    
    
    
    
      
        
      
    
    
      
    
    
    
    
    
      
    
    
      
    
    
      
    
  
  
    
      
        
      
      
        
      
      
        
      
      
        
      
      
        
      
      
        
      
      
        
      
      
        
        
      
      
        
        
      
      
        
        
      
      
        
        
        
          
        
      
      
        
        
      
      
        
        
        
          
        
      
      
        
        
        
        
        
        
          
        
      
      
        
        
        
        
        
          
        
      
    
  
package com.ljw.h_group;

import org.activiti.engine.delegate.DelegateTask;
import org.activiti.engine.delegate.TaskListener;

public class Task1ListenerImpl implements TaskListener {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	@Override
	public void notify(DelegateTask delegateTask) {
		//个人通过类去查询数据库,将下一个任务的办理人查询获取,然后通过setAssignee()的方法指定任务办理人
//		delegateTask.setAssignee("灭绝师太");
		/**
		 * 获取执行对象id
		 * delegateTask.getExecutionId();
		 * 获得执行对象
		 * 当前执行的节点
		 * 根据节点查询对应的用户
		 * 设置当前用户组
		 * 在用户组的成员都可以查询到自己的任务
		 */
		
		delegateTask.addCandidateUser("张三");
		delegateTask.addCandidateUser("李四");
		System.out.println("张三、李四");
	}

}
package com.ljw.h_group;

import org.activiti.engine.delegate.DelegateTask;
import org.activiti.engine.delegate.TaskListener;

public class Task2ListenerImpl implements TaskListener {

	@Override
	public void notify(DelegateTask delegateTask) {
		delegateTask.addCandidateUser("王五");
		delegateTask.addCandidateUser("赵六");
		System.out.println("王五、赵六");
	}

}
package com.ljw.h_group;

import org.activiti.engine.delegate.DelegateTask;
import org.activiti.engine.delegate.TaskListener;

public class Task3ListenerImpl implements TaskListener {

	@Override
	public void notify(DelegateTask delegateTask) {
		delegateTask.addCandidateUser("胡七");
		delegateTask.addCandidateUser("罗八");
		System.out.println("胡七、罗八");
	}

}
package com.ljw.h_group;

import java.io.InputStream;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.history.HistoricTaskInstance;
import org.activiti.engine.repository.Deployment;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;
import org.junit.Test;

public class ClassTask2Test {
	ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();

	// 部署流程定义(classpath)
	@Test
	public void deploymentProcessDefinition_inputStream3() {
		InputStream bpmn = this.getClass().getResourceAsStream("classTask2.bpmn");
		InputStream png = this.getClass().getResourceAsStream("classTask2.png");
		Deployment deployment = processEngine.getRepositoryService()// 与流程定义和部署对象相关的sevices
				.createDeployment()// 创建一个部署对象
				.name("个人任务分配")// 添加部署名称
				.addInputStream("classTask2.bpmn", bpmn).addInputStream("classTask2.png", png).deploy();
		System.out.println("部署ID:" + deployment.getId());
		System.out.println("部署名称:" + deployment.getName());
	}

	// 启动流程实例
	@Test
	public void deploymentProcessInstance3() {
		// 流程定义的key
		String key = "classTask2";
		ProcessInstance pi = processEngine.getRuntimeService()// 与正在执行的流程是咧和执行对象相关的services
				.startProcessInstanceByKey(key);// 使用流程定义的key启动流程实例key对呀的helloworld.bnpm文件里的id的属性值
		System.out.println("流程实例ID:" + pi.getId());
		System.out.println("流程定义ID:" + pi.getProcessDefinitionId());
	}

	// 查询当前人的组任务
	@Test
	public void findMyPersonalTask2() {
		String candidateUser = "罗八";
		List list = processEngine.getTaskService()// 与正在执行的任务管理相关的services
				.createTaskQuery()// 创建任务查询对象
				/** 查询条件(where部分) */
				.taskCandidateUser(candidateUser)
				/** 排序 */
				.orderByTaskCreateTime().asc()// 创建时间升序排序
				/** 返回结果集 */
				.list();
		if (list != null && list.size() > 0) {
			for (Task task : list) {
				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.getProcessInstanceId());
				System.out.println("执行对象ID:" + task.getExecutionId());
				System.out.println("流程定义ID:" + task.getProcessDefinitionId());
			}
		}
	}

	/** 拾取任务,将组任务分给个人任务,指定任务办理人字段 */
	@Test
	public void cliam() {
		// 将组任务分配给个人任务
		// 任务ID
		String taskId = "340004";

		// 分配个人任务(可以是组任务中的成员,也可以是费组任务的成员)
		String userId = "罗八";
		processEngine.getTaskService().claim(taskId, userId);
	}

	// 完成我的任务
	@Test
	public void completeMyPersonalTask() {
		// 任务ID
		String taskId = "332510";
		processEngine.getTaskService()// 与正在执行的任务管理相关的services
				.complete(taskId);
		System.out.println("任务完成,任务ID:" + taskId);
	}

	// 完成我的任务(班长和班主任审批)
	@Test
	public void completeMyPersonalTask2() {
		// 任务ID
		String taskId = "340004";
		Map variables=new HashMap();
		variables.put("yn", "1");//1:通过   0:不通过
		processEngine.getTaskService()// 与正在执行的任务管理相关的services
				.complete(taskId,variables);
		System.out.println("任务完成,任务ID:" + taskId);
	}
	
	/**
	 * 查询历史任务
	 */
	@Test
	public void fingHistoryTask() {
		String processInstanceId = "332507";
		List list = processEngine.getHistoryService()// 与历史数据(历史表)相关的services
				.createHistoricTaskInstanceQuery()// 创建历史任务实例查询
				.processInstanceId(processInstanceId)
				//.taskAssignee("张三")
				.orderByTaskCreateTime().asc()
				.list();
		if (list != null && list.size() > 0) {
			for (HistoricTaskInstance historicTaskInstance : list) {
				System.out.println(historicTaskInstance.getId() + "	" + historicTaskInstance.getName() + "	"
						+ historicTaskInstance.getAssignee() + "	"
						+ historicTaskInstance.getProcessInstanceId() + "	" + historicTaskInstance.getStartTime()
						+ "	" + historicTaskInstance.getEndTime() + "	" + historicTaskInstance.getDurationInMillis());
				System.out.println("##########################################################");
			}
		}
	}

}

 

 

 

 

 

你可能感兴趣的:(activiti)