activiti从入门到绝望

activiti从入门到绝望

废话不说,直接上手

第一步画流程图

流程图需要一个插件,网上找找如何下
在片描述
点击用户请假,
在这里插入图片描述
点击经理审核
在这里插入图片描述
点击取消提交连线
在这里插入图片描述
在这里插入图片描述
提交连线
在这里插入图片描述
在这里插入图片描述
驳回连线
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
流程图差不多就这些了

保存以后把你的流程图改成.bpmn20.xml格式的文件
配置activiti.cfg.xml,默认加载activiti.cfg.xml,名字改了以后,需要手动加载

<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">
	<!-- 
		 	public static final String DB_SCHEMA_UPDATE_FALSE = "false";不能自动创建表,需要表存在
  			public static final String DB_SCHEMA_UPDATE_CREATE_DROP = "create-drop";先删除表再创建表
  			public static final String DB_SCHEMA_UPDATE_TRUE = "true";如果表不存在,自动创建表
processEngineConfiguration.setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE);
	 -->
	<bean id="processEngineConfiguration" class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">
		<!-- 连接数据的配置 -->
		<property name="jdbcDriver" value="com.mysql.jdbc.Driver"></property>
		<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/activiti?useUnicode=true&amp;characterEncoding=utf8"></property>
		<property name="jdbcUsername" value="root"></property>
		<property name="jdbcPassword" value="root"></property>
		<!-- 没有表创建表 -->
		<property name="databaseSchemaUpdate" value="true"></property>
	</bean>
</beans>

pom文件

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.bgxt</groupId>
  <artifactId>Activiti</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <name>firstdemo</name>
  <dependencies>
  <!-- BPM引刑 -->
      <dependency>
            <groupId>org.activiti</groupId>
            <artifactId>activiti-engine</artifactId>
            <version>6.0.0</version>
        </dependency>
        <!--日志记录-->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.21</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.7.21</version>
        </dependency>
        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
            <version>1.4.193</version>
        </dependency>
        <!--Mysql数据库驱动-->
        <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.34</version>
        </dependency>
        <!-- junit测试 -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
        <!-- file工具类 -->
        <!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
        <dependency>
           <groupId>commons-io</groupId>
           <artifactId>commons-io</artifactId>
           <version>2.4</version>
        </dependency>

  </dependencies>
</project>``

到这差不多环境搭好了

部署流程并进行测验

从上往下一个一个的测验,在流程中,只有当前流程走完以后,才会到下一流程中去,根据你所画的流程图去进行测试

/**加载配置文件创建数据库表*/
		ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
      
	
	
	/**部署流程(classpath部署)*/
		@Test
	public  void deploymentProcessDefinition_classpath() {
		
		//获取流程引
		ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
		Deployment deployment = processEngine.getRepositoryService()
		.createDeployment()
		.name("测试流程")//给流程取名
		.addClasspathResource("Process2.bpmn20.xml")
		.deploy();
		System.out.println("部署ID"+deployment.getId());//2501
		System.out.println("部署名称"+deployment.getName());
	}
	
	/**启动流程实例*/
	@Test
	public void startProcessInstance(){
		String processDefinitionKey="Process";
		//流程启动前设置流程变量
		Map<String,Object> variables=new HashMap<String,Object>();
		variables.put("userid", "张三");//这里userid user就是我们在流程图中的${userid},${user}
		variables.put("user", "李四");
		ProcessInstance pi = processEngine.getRuntimeService()
		.startProcessInstanceByKey(processDefinitionKey, variables);
		System.out.println("流程实例ID"+pi.getId());//5001
		System.out.println("流程定义ID"+pi.getProcessDefinitionId());//Process:1:2504
	}
	/**查询当前人的任务*/
	@Test
	public void findPenroleTest(){
		String assignee="李四";
		List<Task> list = processEngine.getTaskService()
		.createTaskQuery()
		//查询条件
		.taskAssignee(assignee)
//		.taskCandidateUser(candidateUser)//组任务的办理人查询
//		.processDefinitionId(processDefinitionId)//使用流程定义ID查询
//		.processInstanceId(processInstanceId)//使用流程实例ID查询
//		.executionId(executionId)//使用执行对象ID查询
		//排序
		.orderByTaskCreateTime().desc()//使用创建时间排序降序
		//返回结果集
		.list();
//		.singleResult()//返回惟一结果集
//		.count()//返回结果集的数量
//		.listPage(firstResult, maxResults);//分页查询
		if(list!=null && list.size()>0){
			for (Task task : list) {
				System.out.println("任务id"+task.getId());//5007
				System.out.println("任务名称"+task.getName());
				System.out.println("任务的创建时间"+task.getCreateTime());
				System.out.println("任务的办理人"+task.getAssignee());
				System.out.println("流程实例id"+task.getProcessInstanceId());//5001
				System.out.println("执行对象ID:" + task.getExecutionId());//5004
				System.out.println("流程定义ID:" + task.getProcessDefinitionId());//Process:1:2504
			}	
		}
	}
    /**完成任务*/
	@Test
	public void completePersonalTask(){
		String taskId="30003";
		Map<String, Object> variables=new HashMap<String, Object>();
		variables.put("miss","通过");//这里miss就是我们在连线上设置的${miss=="通过"}
		processEngine.getTaskService()
		.complete(taskId, variables);
		System.out.println("任务完成:任务id"+taskId);
	}
	/**删除流程部署*/
	@Test
	public void deldeployment(){
		//获取流程id
		String deploymentId="2501";
		//获取流程仓库
		RepositoryService repositoryService = processEngine.getRepositoryService();
		repositoryService.deleteDeployment(deploymentId, true);
	}
	/**查看流程部署*/
	@Test
	public void querydeploymentProcess(){
		//获取仓库服务对象
		List<ProcessDefinition> list = processEngine.getRepositoryService()
		.createProcessDefinitionQuery()//定义流程查询对象
		.orderByProcessDefinitionVersion().asc()//设置查询条件
		.list();//返回结果集
		if(list!=null&&list.size()>0){
	     for (ProcessDefinition pd : list) {
	    	System.out.println("流程实例id:"+pd.getDeploymentId());
			System.out.println("流程定义id:"+pd.getId());//流程定义id
			System.out.println("name:"+pd.getName());//流程名称
			System.out.println("Key:"+pd.getKey());
			System.out.println("Version:"+pd.getVersion());//版本
			System.out.println("ResourceName:"+pd.getResourceName());//加载的流程文件
		}
	}else{
		System.out.println("没有流程");
	}
	}
	/**查询历史流程实例*/
	@Test
	public void queryHistoric(){
		String processDefinitionKey="Process";//部署流程时的key
		List<HistoricProcessInstance> list = processEngine.getHistoryService()
		.createHistoricProcessInstanceQuery()//创建历史流程实例查询
		.processDefinitionKey(processDefinitionKey)
		//查询条件
		.orderByProcessInstanceStartTime().desc()//按照流程开始时间
		.list();
		for (HistoricProcessInstance hpi : list) {
			System.out.println(hpi.getId());
			System.out.println(hpi.getName());
			System.out.println(hpi.getProcessDefinitionKey());
			System.out.println(hpi.getDeploymentId());
			System.out.println(hpi.getStartTime());
			System.out.println(hpi.getEndTime());
		}
	}
	/**展示流程图片
	 * @throws IOException */
	@Test
	public void selview() throws IOException{
		String deploymentId="15001";//部署ID
		RepositoryService repositoryService = processEngine.getRepositoryService();
		List<String> namesImg = repositoryService.getDeploymentResourceNames(deploymentId);
		String nameimg=null;
		for (String name : namesImg) {
			if(name.indexOf(".png")>0){
				nameimg=name;
			}
		}
		if(nameimg!=null){
			System.out.println(nameimg);
			//通过部署id和文件名得到文件输入流
			InputStream in = processEngine.getRepositoryService()
			.getResourceAsStream(deploymentId, nameimg);	
			File file=new File("e:/"+nameimg);
			FileUtils.copyInputStreamToFile(in, file);
		}
		
	}
发布了5 篇原创文章 · 获赞 1 · 访问量 250

猜你喜欢

转载自blog.csdn.net/fanshou123/article/details/90711135
今日推荐