activiti工作流

1.安装activiti插件

自行百度

2.画流程图

创建一个activiti design来画流程图

3.导入jar包

<!-- activiti-engine -->
<dependency>
    <groupId>org.activiti</groupId>
    <artifactId>activiti-engine</artifactId>
    <version>5.15.1</version>
</dependency>
<dependency>
    <groupId>org.activiti</groupId>
    <artifactId>activiti-bpmn-model</artifactId>
    <version>5.15.1</version>
</dependency>
<dependency>
    <groupId>org.activiti</groupId>
    <artifactId>activiti-bpmn-converter</artifactId>
    <version>5.15.1</version>
</dependency>
<dependency>
    <groupId>org.activiti</groupId>
    <artifactId>activiti-process-validation</artifactId>
    <version>5.15.1</version>
</dependency>
<dependency>
    <groupId>org.activiti</groupId>
    <artifactId>activiti-spring</artifactId>
    <version>5.15.1</version>
</dependency>

4.配置activiti.cfg.xml

<bean id="processEngineConfiguration"
        class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">
        <property name="jdbcDriver" value="oracle.jdbc.OracleDriver"/>
        <property name="jdbcUrl" value="jdbc:oracle:thin:127.0.0.1:1521:orcl"/>
        <property name="jdbcUsername" value="scott"/>
        <property name="jdbcPassword" value="tiger"/>
        <property name="databaseSchemaUpdate" value="true"/>
    </bean>

5.创建23张表

@Test
    public void mainTest(){
        ProcessEngine processEngine = ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("activiti.cfg.xml").buildProcessEngine();
    }

6.activiti流的基本操作

部署流程,只需要把我们之前的流程图放进去即可,以请假条为例子,可以理解为现在前台有请假条这种东西了。

@Test
    public void demo1(){
        ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();
        engine.getRepositoryService().createDeployment()
        .addClasspathResource("leave.bpmn").addClasspathResource("leave.png").deploy();
    }
/**
     * 通过 inputstream完成部署
     */
    @Test
    public void testDeployFromInputStream(){
        InputStream bpmnStream = this.getClass().getClassLoader().getResourceAsStream("qingjia.bpmn");
        //得到流程引擎
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        processEngine.getRepositoryService()
        .createDeployment()
        .addInputStream("qingjia.bpmn", bpmnStream)
        .deploy();
    }
/**
     * 通过zipinputstream完成部署
     */
    @Test
    public void testDeployFromZipinputStream(){
        InputStream in = this.getClass().getClassLoader().getResourceAsStream("qingjia.zip");
        ZipInputStream zipInputStream = new ZipInputStream(in);
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        processEngine.getRepositoryService()
        .createDeployment()
        .addZipInputStream(zipInputStream)
        .deploy();
    }

实例化请假条,可以理解为现在张三找前台拿了一张请假条了,三种不同部署方式

@Test
    public void demo2(){
        ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();
        engine.getRuntimeService().startProcessInstanceById("myProcess:2:1004");
    }

提交流程,可以理解为张三把请假条写好了提交给他的领导,

@Test
    public void demo3(){
        ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();
        engine.getTaskService().complete("1104");
    }

张三提交之后,流程就到了张三的组长任务表里面,上级可以看自己有哪些需要处理的任务

@Test
    public void demo4(){
        ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();
        List<Task> list = engine.getTaskService().createTaskQuery().taskAssignee("组长").list();
        System.out.println(list.size());
        for (Task task : list) {
            System.out.println(task.getName());
        }
    }

组长看完任务之后,处理完任务可以提交上去,这样流程就到boss任务列表中

@Test
    public void demo5(){
        ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();
        engine.getTaskService().complete("702");
    }

当组长把流程提交了之后,老板就可以在任务里面看到该流程。老板选择提交流程,流程结束

@Test
    public void demo6(){
        ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();
        engine.getTaskService().complete("802");
    }

每一个人写一张申请表都是实例化一张表。

7.分配个人任务——流程变量

//第一,在流程图的assignee设置为#{userid}
//第二,在实例化的时候设置流程变量
HashMap<String,Object> variables = new HashMap<String, Object>();
variables.put("userid", "很重要");
ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();
//myProcess是流程图的名字
ProcessInstance instance = engine.getRuntimeService().startProcessInstanceByKey("myProcess", variables);
System.out.println(instance.getId()+","+instance.getActivityId()+","+instance.getBusinessKey()+","+instance.getParentId()+","+instance.getProcessInstanceId());

//所以,第一个人是‘很重要’ 也就是请假表的申请人,我们可以获得该task.getid()
List<Task> list = engine.getTaskService().createTaskQuery().taskAssignee("很重要").list();
for (Task task : list) {
    System.out.println(task.getName());
    System.out.println(task.getParentTaskId());
    System.out.println(task.getExecutionId());
    System.out.println(task.getId());
}
//根据当前任务id获得根据流程变量名获得值
System.out.println(engine.getTaskService().getVariable("2003", "123"));


//很重要提交请假表
HashMap<String,Object> map = new HashMap<String, Object>();
map.put("userid", "胡智阳");
map.put("123", "zzz");
//提交当前任务并且设置下一个任务人是胡智阳
engine.getTaskService().complete("1905", map);

8.组任务分配

1.把下面设置为#{userids}
这里写图片描述

2在实例化的时候设置流程变量

//现在很重要和有点重要都是下一个任务人
HashMap<String,Object> variables = new HashMap<String, Object>();
variables.put("userid", "很重要,有点重要");
ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();
//myProcess是流程图的名字
ProcessInstance instance = engine.getRuntimeService().startProcessInstanceByKey("myProcess", variables);
System.out.println(instance.getId()+","+instance.getActivityId()+","+instance.getBusinessKey()+","+instance.getParentId()+","+instance.getProcessInstanceId());

//所以,‘很重要’,‘有点重要’ 也就是请假表的申请人,我们可以获得该task.getid()
List<Task> list = engine.getTaskService().createTaskQuery().taskAssignee("很重要/有点重要").list();
for (Task task : list) {
    System.out.println(task.getName());
    System.out.println(task.getParentTaskId());
    System.out.println(task.getExecutionId());
    System.out.println(task.getId());
}
//根据当前任务id获得根据流程变量名获得值
System.out.println(engine.getTaskService().getVariable("2003", "123"));

//很重要和有点重要都要提交任务
//很重要提交请假表
HashMap<String,Object> map = new HashMap<String, Object>();
map.put("userid", "胡智阳");
map.put("123", "zzz");
//提交当前任务并且设置下一个任务人是胡智阳
engine.getTaskService().complete("1905", map);

9.核心API

流程引擎ProcessEngine

//使用方式
ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();

管理流程定义RepositoryService

//使用方式
engine.getRepositoryService()

执行管理,包括流程的启动,删除操作RuntimeService

//使用方式
engine.getRuntimeService()

任务管理TaskService

//使用方式
engine.getTaskService()

历史管理HistoryService

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值