第九章:activit内置用户组设计与组任务分配和IdentityService接口的使用

package com.xiaoyexinxixn.ActivityLesson;

import static org.junit.Assert.*;

import javax.sound.midi.VoiceStatus;

import org.activiti.engine.IdentityService;
import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngineConfiguration;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.identity.User;
import org.activiti.engine.impl.persistence.entity.UserEntity;
import org.junit.Test;

public class IdentitiyTest {

	//获取流程引擎
	ProcessEngine processEngine=ProcessEngines.getDefaultProcessEngine();
	
	//添加用户测试
	@Test
	public void testSaveUser(){
		IdentityService identitiyService= processEngine.getIdentityService();
		User user=new UserEntity();
		user.setId("zhangsan");
		user.setPassword("123");
		user.setEmail("[email protected]");
		identitiyService.saveUser(user);
	}

}

运行代码:

第九章:activit内置用户组设计与组任务分配和IdentityService接口的使用_第1张图片


删除用户:

//删除用户
	@Test
	public void deleteUser(){
		IdentityService identityService=processEngine.getIdentityService();
		identityService.deleteUser("lisi");
	}


//添加组
	@Test
	public void saveGroupTest(){
		IdentityService identityService=processEngine.getIdentityService();
		Group group=new GroupEntity();
		group.setId("testGroup");
		identityService.saveGroup(group);
	}

运行结果:

第九章:activit内置用户组设计与组任务分配和IdentityService接口的使用_第2张图片


//删除组
	@Test
	public void deleteGroupTest(){
		IdentityService identityService=processEngine.getIdentityService();
		identityService.deleteGroup("testGroup");
	}
//添加用户和组的关联关系
	@Test
	public void membershipTest(){
		IdentityService identityService =processEngine.getIdentityService();
		identityService.createMembership("zhangsan", "testGroup" );
	}

添加用户和组的关联关系方法的运行结果:

第九章:activit内置用户组设计与组任务分配和IdentityService接口的使用_第3张图片

这里我们为了后面集成测试,这里多加几条数据,就算是把“zhangshan 和lisi都加到testGroup测试组这样一个业务”加后的数据库如下:

第九章:activit内置用户组设计与组任务分配和IdentityService接口的使用_第4张图片

第九章:activit内置用户组设计与组任务分配和IdentityService接口的使用_第5张图片

第九章:activit内置用户组设计与组任务分配和IdentityService接口的使用_第6张图片

 

下面测删除关系:

//删除用户和组的关联关系

//删除用户和组的关联关系
	@Test
	public void membershipDelete(){
		IdentityService identityService=processEngine.getIdentityService();
		identityService.deleteMembership("zhangsan", "testGroup");
	}


写了一大坨,那么什么用处呢?现在开发的人都用过svn代码管理工具,对某一个项目的代码的读写人的设置,管理员可以一个一个的添加,也可以一组一组的添加,对于这个组的人都可以使用这个代码。这个组对应的就是我们上面的testGroup。

下面我们使用实例,把某一人物的可执行人,以组的形式进行添加。

首先画流程图

第九章:activit内置用户组设计与组任务分配和IdentityService接口的使用_第7张图片

第九章:activit内置用户组设计与组任务分配和IdentityService接口的使用_第8张图片

代码:

package com.xiaoyexinxixn.ActivityLesson.flow;


import java.util.Date;
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.RuntimeService;
import org.activiti.engine.TaskService;
import org.activiti.engine.repository.Deployment;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;
import org.junit.Test;

import com.xiaoyexinxixn.ActivityLesson.model.Student;

public class GroupLeaveProcess {
	//获取默认流程引擎实例,会自动读取activiti.cfg.xml ,所以我们要严格定义配置文件的名称
	private ProcessEngine processEngine =ProcessEngines.getDefaultProcessEngine();
	
	/**
	 * 部署流程定义
	 */
	@Test
	public void deploy() {
		//获取部署相关service,这些都是activiti封装好的api接口,还有很多,下面也会用到很多
		Deployment deployment=processEngine.getRepositoryService()
		//创建部署
		.createDeployment()
		//加载流程图资源文件
		.addClasspathResource("diagrams/GroupLeave.bpmn")
		//加载流程图片
		.addClasspathResource("diagrams/GroupLeave.png")
		//流程名称
		.name("group")
		//部署流程
		.deploy();
		System.out.println("流程部署的ID: "+deployment.getId());
		System.out.println("流程部署的Name: "+deployment.getName());
	}
}

部署上面代码,成功后会在数据库的部署表act_re_deployment 有名为group的一条数据:

第九章:activit内置用户组设计与组任务分配和IdentityService接口的使用_第9张图片


然后启动并查看任务候选者和参与者:

/*
	 * 启动流程实例
	 */
	@Test
	public void start(){
		//运行启动流程的servicee
		ProcessInstance pi=processEngine.getRuntimeService()
		//定义流程表的KEY字段值,key值是我们前面定义好的key,可在act_re_procdef表中的key_字段中找到,
		.startProcessInstanceByKey("GroupLeaveProcess");
		System.out.println(pi.getId());
		System.out.println(pi.getProcessDefinitionId());
	}
	
	/**
	 * 查看任务
	 */
	@Test
	public void findTaskList(){
		//获取任务列表的service
		List taskList=processEngine.getTaskService()
				//创建任务查询
				.createTaskQuery()
				//指定任务的执行人
//				.taskAssignee("lisi")
				.taskCandidateUser("lisi")
				.list();
		for(Task task:taskList){
			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());
		}
	}
	
结果:
任务ID:232504
任务名称:leave001
任务创建时间:Wed Apr 25 12:56:20 CST 2018
任务委派人:null
任务流程实例Id:232501

下面我们用变量设置组。

    这里直接在上面建的流程图上做如下修改:

第九章:activit内置用户组设计与组任务分配和IdentityService接口的使用_第10张图片

package com.xiaoyexinxixn.ActivityLesson.flow;


import java.util.Date;
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.RuntimeService;
import org.activiti.engine.TaskService;
import org.activiti.engine.repository.Deployment;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;
import org.junit.Test;
import org.springframework.jca.cci.object.MappingCommAreaOperation;

import com.xiaoyexinxixn.ActivityLesson.model.Student;

public class GroupLeaveProcess {
	//获取默认流程引擎实例,会自动读取activiti.cfg.xml ,所以我们要严格定义配置文件的名称
	private ProcessEngine processEngine =ProcessEngines.getDefaultProcessEngine();
	
	/**
	 * 部署流程定义
	 */
	@Test
	public void deploy() {
		//获取部署相关service,这些都是activiti封装好的api接口,还有很多,下面也会用到很多
		Deployment deployment=processEngine.getRepositoryService()
		//创建部署
		.createDeployment()
		//加载流程图资源文件
		.addClasspathResource("diagrams/GroupLeave.bpmn")
		//加载流程图片
		.addClasspathResource("diagrams/GroupLeave.png")
		//流程名称
		.name("group")
		//部署流程
		.deploy();
		System.out.println("流程部署的ID: "+deployment.getId());
		System.out.println("流程部署的Name: "+deployment.getName());
	}
	
	/*
	 * 启动流程实例
	 */
	@Test
	public void start(){
		Map varibales=new HashMap();
		varibales.put("groupId", "testGroup");
		//运行启动流程的servicee
		ProcessInstance pi=processEngine.getRuntimeService()
		//定义流程表的KEY字段值,key值是我们前面定义好的key,可在act_re_procdef表中的key_字段中找到,
		.startProcessInstanceByKey("GroupLeaveProcess",varibales);
		System.out.println(pi.getId());
		System.out.println(pi.getProcessDefinitionId());
	}
	
	/**
	 * 查看任务
	 */
	@Test
	public void findTaskList(){
		//获取任务列表的service
		List taskList=processEngine.getTaskService()
				//创建任务查询
				.createTaskQuery()
				//指定任务的执行人
//				.taskAssignee("lisi")
				.taskCandidateUser("lisi")
				.list();
		for(Task task:taskList){
			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());
		}
	}
	
	/**
	 * 完成任务
	 */
	@Test
	public void completeTask(){
		processEngine.getTaskService().complete("232504");
	}
	
然后部署流程实例,启动,查看任务,就能够在查看任务方法中看到结果

你可能感兴趣的:(rabbitmq,/radis/,线程池,activiti工作流学习)