activiti工作流引擎学习(三)

5、接收任务活动(receiveTask,即等待活动)不是一个任务节点
接收任务是一个简单任务,他会等待回应消息的到达,当前,官方只实现了这个任务的java语义,当流程达到接受任务,流程状态会保存到数据库中;
在任务创建后,意味着流程会进入等待状态,知道引擎接收了一个特定的消息,这会触发流程穿过接收任务继续执行;

当前任务(一般指机器自动完成,但需要小号一定时间的工作)完成后,向后推移流程,可以调用runtimeService.signal(executionId)传递接收执行对象的id.

6、个人任务(userTask,即用户操作的任务)Assignee
6.1、之前的做法是直接把办理人放在了xml中,不够灵活
6.2、分配个人任务方式二(使用流程变量)
6.3、分配个人任务方式三(使用类动态指定,实现TaskListener接口)
6.4、分配个人任务从一个人指定到另一个人(任务认领,比如这个人请假了,可以指派给另一个人处理)

/**
	 * 启动流程实例,使用流程变量指定审批人
	 * @return
	 */
	@RequestMapping("sequence/starttaskOne")
	public String startSequenceFlow(){
		
		String processDefinitionKey = "taskOne";
		
		Map<String, Object> map = new HashMap<String, Object>();
		map.put("userId", "xxx");
		
		//正在执行的流程实例和执行对象相关的service
		RuntimeService runtimeService = processEngine.getRuntimeService();
		
		//使用流程定义的key启动流程实例,key对应的是bpmn文件中的id,默认是最新版本的流程启动
		ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(processDefinitionKey,map);
		
		System.out.println(processInstance.getId() + processInstance.getProcessDefinitionId());
		
		return processInstance.getProcessDefinitionId();
	}

7、组任务分配 Condidate users

act_ru_identitylink : 任务办理人表(个人任务,组任务);个人任务会有一条数据,组任务会有两条数据,type不一样(参与者,候选者)
act_ru_identitylink : 历史任务办理人表(个人任务,组任务)

7.1、拾取组任务分配为个人任务,指定任务人员可以是非组内成员
还可以将个人任务回退为组任务,前提之前必须是一个组任务,将assignee设置为null即可

7.2、向组任务中添加成员 / 删除成员

7.3、分配任务的三种方式: 写在xml中、使用流程变量、使用类

package com.controller;
/**
*使用类分配任务
*/
import org.activiti.engine.delegate.DelegateTask;
import org.activiti.engine.delegate.TaskListener;

public class TaskListenerImpl implements TaskListener {

	@Override
	public void notify(DelegateTask task) {
		//设置个人任务
		//task.setAssignee("");
		
		//设置组任务
		task.addCandidateUser("小A");
		task.addCandidateUser("小B");
		task.addCandidateUser("小C");
		
	}

}

  

/**
	 * 查询当前人的个人任务
	 * @return
	 */
	@RequestMapping("sequence/findGroupOne")
	public String findGateWayTask(){
		
		String assignee = "daF";
		
		List<Task> list = processEngine.getTaskService()
		.createTaskQuery()
		.taskAssignee(assignee).list();
		
		if(!CollectionUtils.isEmpty(list)){
			for (Task task : list) {
				System.out.println(task.getAssignee());
				System.out.println(task.getId());
				System.out.println(task.getName());
				System.out.println(task.getExecutionId());
			}
		}
		
		System.out.println("****************");
		
		return list.toString();
	}
	
	/**
	 * 查询正在执行的的任务办理人表
	 */
	@GetMapping("group/findP")
	public String findPersonal(){
		
		String taskId = "57509";
		
		List<IdentityLink> links = processEngine.getTaskService()
						.getIdentityLinksForTask(taskId);
		
		for (int i = 0; i < links.size(); i++) {
			System.err.println(links.get(i).getUserId());
		}
		
		return String.valueOf(links.size());
	}
	/**
	 * 查询历史任务办理人表
	 */
	@GetMapping("group/findHisP")
	public String findHisPersonal(){
		
		String taskId = "57509";
		
		List<HistoricIdentityLink> links = processEngine.getHistoryService()
						.getHistoricIdentityLinksForTask(taskId);
		
		for (int i = 0; i < links.size(); i++) {
			System.err.println(links.get(i).getUserId());
		}
		
		return String.valueOf(links.size());
	}
	
	/**
	 * 拾取任务,将组任务分给个人任务,指定任务的办理人
	 * @return
	 */
	@GetMapping("group/claim")
	public String claim(){
		
		String taskId = "57509";
		String userId = "daF";
		
		processEngine.getTaskService()
				.claim(taskId, userId);
		
		return "success!";
	}
	
	/**
	 * 将个人任务回退回组任务
	 * @return
	 */
	@GetMapping("group/returnClaim")
	public String returnClaim(){
		
		String taskId = "57509";
		
		processEngine.getTaskService()
				.claim(taskId, null);
		
		return "success!";
	}
	
	/**
	 * 向组任务中添加人
	 * @return
	 */
	@GetMapping("group/addUser")
	public String addGroupUser(){
		
		String taskId = "57509";
		
		processEngine.getTaskService()
					.addCandidateUser(taskId, "大s");
		
		
		return "success!";
	}
	
	/**
	 * 向组任务添删除人
	 * @return
	 */
	@GetMapping("group/delUser")
	public String delGroupUser(){
		
		String taskId = "57509";
		
		String userId = "大s";
		
		processEngine.getTaskService()
			.deleteCandidateUser(taskId, userId);
		
		return "success!";
	}

  

7.4、工作流定义的角色组 IdentityService(组织机构管理)

act_id_group: 角色表
act_id_user :用户表
act_id_membership :用户角色关系表

/**
	 * 部署
	 * @return
	 */
	@GetMapping("sequence/deployCandidateGroup")
	public String deploySequenceFlow(){
		
		InputStream bpmn = this.getClass().getResourceAsStream("/diagrams/cadinerGroup.bpmn");
		InputStream png = this.getClass().getResourceAsStream("/diagrams/cadinerGroup.png");
		
		Deployment deployment = processEngine.getRepositoryService().createDeployment().name("组任务")
			.addInputStream("cadinerGroup.bpmn", bpmn)//与资源文件名称要一致
			.addInputStream("cadinerGroup.png", png)
			.deploy();
		
		System.err.println(deployment.getKey() + "---" + deployment.getName());
		
		//添加用户角色组
		IdentityService identityService = processEngine.getIdentityService();
		
		//创建角色
		//identityService.saveGroup(Group);;
		
		//创建用户
		//identityService.saveUser(user);
		
		//创建角色用户的关联关系
		//identityService.createMembership(userId, groupId);
		
		System.out.println("添加组织机构成功!");
		
		return deployment.getId();
	}

  

posted @ 2019-07-18 14:38  丿少女梦丶  阅读(434)  评论(0编辑  收藏  举报