JBPM实现请假流程

来源:互联网 发布:mac os x 10.11升级包 编辑:程序博客网 时间:2024/04/30 02:38

一个简单的JBPM4.4实现的一个请假流程:

package com.leweiyou.main;
import static org.junit.Assert.assertNotNull;import static org.junit.Assert.assertTrue;import java.util.HashMap;import java.util.List;import java.util.Map;import java.util.Set;import org.jbpm.api.Configuration;import org.jbpm.api.Deployment;import org.jbpm.api.ExecutionService;import org.jbpm.api.ProcessEngine;import org.jbpm.api.ProcessInstance;import org.jbpm.api.RepositoryService;import org.junit.Before;import org.junit.Test;public class HellowordTest {private ProcessEngine engine;@Beforepublic void setUp() throws Exception {engine = Configuration.getProcessEngine();}/** * 发布流程 */@Testpublic void testDeploy(){RepositoryService rs = engine.getRepositoryService();String id = rs.createDeployment().addResourceFromClasspath("jpdl/helloword.jpdl.xml").deploy();assertNotNull(id);}@Testpublic void testPrintDeploy(){RepositoryService repositoryService = engine.getRepositoryService();List<Deployment> list = repositoryService.createDeploymentQuery().list();assertTrue(list.size() != 0);for(Deployment d : list){assertNotNull(d);System.out.println("Deployment:" + d.getId() + " " + d.getName());}}/** * 测试 1天,经理,同意,结束 */@Testpublic void testWrite_1_leader(){//开始ExecutionService es = engine.getExecutionService();ProcessInstance pi = es.startProcessInstanceByKey("Helloword");Set<String> ans = pi.findActiveActivityNames();String pid = pi.getId();assertTrue(ans != null && ans.contains("填写申请"));//填写请假单Map<String,Object> map = new HashMap<String,Object>();map.put("day", 1);map.put("reason", "请假");pi = es.signalExecutionById(pid, map);ans = pi.findActiveActivityNames();assertTrue(ans != null && ans.contains("经理审批"));//经理审批pi = es.signalExecutionById(pid,"同意");assertTrue(pi.isEnded());}/** * 测试 1天,经理,不同意 */@Testpublic void testWrite_1_$(){//开始ExecutionService es = engine.getExecutionService();ProcessInstance pi = es.startProcessInstanceByKey("Helloword");Set<String> ans = pi.findActiveActivityNames();String pid = pi.getId();assertTrue(ans != null && ans.contains("填写申请"));//填写请假单Map<String,Object> map = new HashMap<String,Object>();map.put("day", 1);map.put("reason", "请假");pi = es.signalExecutionById(pid, map);ans = pi.findActiveActivityNames();assertTrue(ans != null && ans.contains("经理审批"));//经理审批Map<String,Object> map1 = new HashMap<String,Object>();map1.put("reason", "经理不同意:请假次数太多,已经超过了月量");pi = es.signalExecutionById(pid,"驳回",map1);ans = pi.findActiveActivityNames();assertTrue(ans != null && ans.contains("填写申请"));assertTrue(!pi.isEnded());}/** * 测试 10天,经理,同意,老板不同意 */@Testpublic void testWrite_10_$(){//开始ExecutionService es = engine.getExecutionService();ProcessInstance pi = es.startProcessInstanceByKey("Helloword");Set<String> ans = pi.findActiveActivityNames();String pid = pi.getId();assertTrue(ans != null && ans.contains("填写申请"));//填写请假单Map<String,Object> map = new HashMap<String,Object>();map.put("day", 10);map.put("reason", "请假");pi = es.signalExecutionById(pid, map);ans = pi.findActiveActivityNames();assertTrue(ans != null && ans.contains("经理审批"));//经理审批pi = es.signalExecutionById(pid,"同意");ans = pi.findActiveActivityNames();assertTrue(ans != null && ans.contains("老板审批"));//老板审批Map<String,Object> map1 = new HashMap<String,Object>();map1.put("reason", "老板不同意:项目太紧,过两天请假吧");pi = es.signalExecutionById(pid,"驳回",map1);ans = pi.findActiveActivityNames();assertTrue(ans != null && ans.contains("填写申请"));assertTrue(!pi.isEnded());}/** * 测试 10天,经理,同意,老板同意,结束 */@Testpublic void testWrite_10_leader(){//开始ExecutionService es = engine.getExecutionService();ProcessInstance pi = es.startProcessInstanceByKey("Helloword");Set<String> ans = pi.findActiveActivityNames();String pid = pi.getId();assertTrue(ans != null && ans.contains("填写申请"));//填写请假单Map<String,Object> map = new HashMap<String,Object>();map.put("day", 10);map.put("reason", "请假");pi = es.signalExecutionById(pid, map);ans = pi.findActiveActivityNames();assertTrue(ans != null && ans.contains("经理审批"));//经理审批pi = es.signalExecutionById(pid,"同意");ans = pi.findActiveActivityNames();assertTrue(ans != null && ans.contains("老板审批"));//老板审批pi = es.signalExecutionById(pid,"同意");assertTrue(pi.isEnded());}}

定义的JPDL文件:

<?xml version="1.0" encoding="UTF-8"?><process name="Helloword" xmlns="http://jbpm.org/4.4/jpdl" version="1">   <start g="338,30,48,48" name="start">      <transition g="-49,-18" name="to state" to="填写申请"/>   </start>   <state g="319,119,92,52" name="填写申请">      <transition to="经理审批"/>   </state>   <state g="322,300,92,52" name="经理审批">      <transition g="-68,-18" name="同意" to="exclusive"/>      <transition g="243,328;240,148:-49,-18" name="驳回" to="填写申请"/>   </state>   <state g="535,447,92,52" name="老板审批">      <transition g="-42,-18" name="同意" to="end"/>      <transition name="驳回" to="填写申请" g="587,146:-66,-18"/>   </state>   <decision expr="${day > 5 ? '天数大于5天' : '天数小于5天'}" g="343,422,48,48" name="exclusive">      <transition g="-49,-18" name="天数大于5天" to="老板审批"/>      <transition g="-42,-18" name="天数小于5天" to="end"/>   </decision>   <end g="347,592,48,48" name="end"/></process>

JBPM的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.leweiyou</groupId><artifactId>jbpm-test</artifactId><version>1.0.0-SNAPSHOT</version><properties><jbpm.version>4.4</jbpm.version></properties><dependencies><!-- JBPM 4 -->       <dependency>           <groupId>org.jbpm.jbpm4</groupId>           <artifactId>jbpm-api</artifactId>           <version>${jbpm.version}</version>       </dependency>       <dependency>           <groupId>org.jbpm.jbpm4</groupId>           <artifactId>jbpm-jpdl</artifactId>           <version>${jbpm.version}</version>       </dependency>       <dependency>           <groupId>org.jbpm.jbpm4</groupId>           <artifactId>jbpm-pvm</artifactId>           <version>${jbpm.version}</version>       </dependency>       <dependency>           <groupId>org.jbpm.jbpm4</groupId>           <artifactId>jbpm-bpmn</artifactId>           <version>${jbpm.version}</version>       </dependency>       <dependency>           <groupId>org.jbpm.jbpm4</groupId>           <artifactId>jbpm-log</artifactId>           <version>${jbpm.version}</version>       </dependency>       <dependency>           <groupId>org.jbpm.jbpm4</groupId>           <artifactId>jbpm-db</artifactId>           <version>${jbpm.version}</version>           <exclusions>              <exclusion>                  <groupId>hsqldb</groupId>                  <artifactId>hsqldb</artifactId>              </exclusion>              <exclusion>                  <groupId>mysql</groupId>                  <artifactId>mysql-connector-java</artifactId>              </exclusion>              <exclusion>                  <groupId>postgresql</groupId>                  <artifactId>postgresql</artifactId>              </exclusion>           </exclusions>       </dependency><dependency><groupId>org.jbpm.jbpm4</groupId><artifactId>jbpm-test-base</artifactId><version>${jbpm.version}</version></dependency>              <!-- Spring Framework -->       <dependency>           <groupId>org.springframework</groupId>           <artifactId>spring</artifactId>           <version>2.5.6</version>       </dependency>       <dependency>           <groupId>org.springframework</groupId>           <artifactId>spring-webmvc</artifactId>           <version>2.5.6</version>       </dependency>       <dependency>           <groupId>org.springframework</groupId>           <artifactId>spring-test</artifactId>           <version>2.5.6</version>       </dependency>        <!-- MySQL JDBC -->       <dependency>           <groupId>mysql</groupId>           <artifactId>mysql-connector-java</artifactId>           <version>5.1.2</version>       </dependency>  <!-- Hibernate --><dependency><groupId>org.hibernate</groupId><artifactId>hibernate-core</artifactId><version>3.6.10.Final</version></dependency>  <!-- java mail --><dependency><groupId>javax.mail</groupId><artifactId>mail</artifactId><version>1.4</version></dependency>        <!-- Logging -->       <dependency>           <groupId>log4j</groupId>           <artifactId>log4j</artifactId>           <version>1.2.14</version>       </dependency>        <!-- Commons API -->       <dependency>           <groupId>commons-lang</groupId>           <artifactId>commons-lang</artifactId>           <version>2.5</version>       </dependency>       <dependency>           <groupId>commons-collections</groupId>           <artifactId>commons-collections</artifactId>           <version>3.1</version>       </dependency>       <dependency>           <groupId>commons-io</groupId>           <artifactId>commons-io</artifactId>           <version>1.2</version>       </dependency>       <dependency>           <groupId>commons-pool</groupId>           <artifactId>commons-pool</artifactId>           <version>1.3</version>       </dependency>       <dependency>           <groupId>commons-dbcp</groupId>           <artifactId>commons-dbcp</artifactId>           <version>1.2.1</version>       </dependency>       <dependency>           <groupId>org.apache.ibatis</groupId>           <artifactId>ibatis-sqlmap</artifactId>           <version>2.3.4.726</version>       </dependency>        <dependency>           <groupId>xerces</groupId>           <artifactId>xercesImpl</artifactId>           <version>2.9.1</version>       </dependency>   <dependency>   <groupId>juel</groupId>   <artifactId>juel-impl</artifactId>   <version>2.2.1</version>   </dependency>   <dependency>   <groupId>juel</groupId>   <artifactId>juel-api</artifactId>   <version>2.2.1</version>   </dependency>   <dependency>   <groupId>juel</groupId>   <artifactId>juel-engine</artifactId>   <version>2.1.0</version>   </dependency>       <!-- Velocity -->       <dependency>           <groupId>org.apache.velocity</groupId>           <artifactId>velocity</artifactId>           <version>1.6.3</version>       </dependency>       <dependency>           <groupId>org.apache.velocity.tools</groupId>           <artifactId>velocity-tools</artifactId>           <version>2.0-alpha1</version>       </dependency>        <!-- Servlet API -->       <dependency>           <groupId>javax.servlet</groupId>           <artifactId>servlet-api</artifactId>           <version>2.5</version>           <scope>test</scope>       </dependency>       <dependency>           <groupId>javax.servlet</groupId>           <artifactId>jsp-api</artifactId>           <version>2.0</version>           <scope>test</scope>       </dependency>        <!-- test -->       <dependency>           <groupId>junit</groupId>           <artifactId>junit</artifactId>           <version>4.4</version>           <scope>test</scope>       </dependency></dependencies></project>


0 0
原创粉丝点击