【Activiti】公有任务认领及处理流程

较之上一篇单线流程的不同在于,在经理审批阶段,提供2个候选,分别为正经理和副经理,即在经理审批阶段,会删除assignee的内容,在main config中的Candidate选项中添加正经理,副经理,以逗号隔开
package com.tabchanj.activiti;

import java.util.List;

import org.activiti.engine.HistoryService;
import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.RepositoryService;
import org.activiti.engine.RuntimeService;
import org.activiti.engine.TaskService;
import org.activiti.engine.history.HistoricActivityInstance;
import org.activiti.engine.history.HistoricActivityInstanceQuery;
import org.activiti.engine.repository.DeploymentBuilder;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.runtime.ProcessInstanceQuery;
import org.activiti.engine.task.Task;
import org.activiti.engine.task.TaskQuery;
import org.junit.Test;

/**
 * 测试流程规则的创建和发布 Activiti整体思路:
 *  1.获取核心的ProcessEngine对象 2.根据需求,获取对应的服务对象
 * 3.使用服务对象的方法完成相应的功能 Activiti的查询思路: 1.获取需求获取对应的服务对象 2.适应服务对象创建查询对象 3.设置查询条件
 * 3.使用查询对象进行查找
 *
 * @author tab
 *
 */
public class FlowTest6 {

    private ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();

    /**
     * 创建规则:使用仓库对象,用于存储规则
     *
     * @throws Exception
     */
    @Test
    public void testDeployProcess() throws Exception {
        // 1,获取仓库服务对象
        RepositoryService rs = engine.getRepositoryService();
        // --------完成功能------------------
        DeploymentBuilder builder = rs.createDeployment();// 创建部署build对象
        // 获取流程规则图
        builder.addClasspathResource("LeaveFlow6.bpmn");
        builder.addClasspathResource("LeaveFlow6.png");
        // 部署
        builder.deploy();
    }
    /**
     * 开启一个流程
     *
     * @throws Exception
     */
    @Test
    public void testStartProcess() throws Exception {
        // 获取启动服务
        RuntimeService run = engine.getRuntimeService();
        // 开启Process
        String processDefinitionId = "LeaveFlow6:1:4";
        ProcessInstance instance = run.startProcessInstanceById(processDefinitionId);
        System.out.println("instance==" + instance);
    }
    /**
     * 私有任务查询
     * @throws Exception
     */
    @SuppressWarnings("deprecation")
    @Test
    public void testQueryTask() throws Exception {
        //获取任务服务对象
        TaskService ts = engine.getTaskService();
        //创建查询对象
        TaskQuery tq = ts.createTaskQuery();
        //设置过滤条件
        String assignee = "正经理";
        tq.taskAssignee(assignee).orderByTaskCreateTime().asc();
        //执行查询
        List<Task> tasks = tq.list();
        System.out.println("========================"+assignee+"的任务列表===================");
        for (Task task : tasks) {
            System.out.println("执行人:"+task.getAssignee()+"任务id:"+task.getId()+",任务名称:"+task.getName()+",任务建立时间:"+task.getCreateTime().toLocaleString());

        }
    }
    /**
     * 公有任务查询
     * @throws Exception
     */
    @SuppressWarnings("deprecation")
    @Test
    public void testQueryPublicTask() throws Exception {
        //获取任务服务对象
        TaskService ts = engine.getTaskService();
        //创建查询对象
        TaskQuery tq = ts.createTaskQuery();
        //设置过滤条件
        String candidate = "副经理";
//        tq.taskCandidateUser(candidate);
        //执行查询
        List<Task> tasks = tq.taskCandidateUser(candidate).list();
        System.out.println("========================"+candidate+"的公有任务列表===================");
        for (Task task : tasks) {
            System.out.println("执行人:"+task.getAssignee()+"任务id:"+task.getId()+",任务名称:"+task.getName()+",任务建立时间:"+task.getCreateTime().toLocaleString());

        }
    }

    /**
     * 公有任务认领
     * @throws Exception
     */
    @Test
    public void testClaimTask() throws Exception {
        //获取任务服务对象
        TaskService ts = engine.getTaskService();
        //认领任务
        String userId ="正经理";
        String taskId="5002";
        ts.claim(taskId, userId);
    }

    /**
     * 查询当前进行的执行到哪个节点了
     * @throws Exception
     */
    @Test
    public void testState() throws Exception {
        RuntimeService rs = engine.getRuntimeService();
        ProcessInstanceQuery pq = rs.createProcessInstanceQuery();
        String processInstanceId="2501";
        ProcessInstance  pi = pq.processInstanceId(processInstanceId).singleResult();
        if(pi!=null){
            System.out.println("当前流程在:"+pi.getActivityId());
        }else{
            System.out.println("流程已执行完毕!!");
        }
    }

    /**
     * 处理任务
     * @throws Exception
     */
    @Test
    public void testExecuteTask() throws Exception {
        //获取任务服务对象
        TaskService ts = engine.getTaskService();
        //执行任务
//        ts.complete("7502");
        ts.complete("5002");
        testQueryTask();
    }

    /**
     * 查询历史任务
     * @throws Exception
     */
    @Test
    public void testHistory() throws Exception {
        //获取历史服务对象
        HistoryService hs = engine.getHistoryService();
        //创建历史查询对象
        HistoricActivityInstanceQuery ha = hs.createHistoricActivityInstanceQuery();
        //设置过滤
        String processInstanceId= "2501";
        List<HistoricActivityInstance> hiss =  ha.processInstanceId(processInstanceId).orderByHistoricActivityInstanceEndTime().desc().list();
        System.out.println(hiss.size());
        for (HistoricActivityInstance historicActivityInstance : hiss) {
            System.out.println(historicActivityInstance);
        }
    }
}

 
时间: 2024-10-04 03:39:31

【Activiti】公有任务认领及处理流程的相关文章

【Activiti】带节点判断的流程执行

1.部署规则 2.开启流程 3.获取第一个excution执行对象 4.根据条件判断,下一个执行的Excution执行对象,并完成相应逻辑                                                                                                                              注:共3种情况,其中默认情况需要在判断节点的default flow选项中选择指向默认节点的sequence

BOS项目 第11天(activiti工作流第三天,流程实例管理、项目中的用户和角色同步到activiti的用户和组表、设计物流配送流程、启动物流配送流程、组任务操作(查询、拾取)、个人任务操作(查询、办理))

BOS项目笔记 第11天 今天内容安排: 1.流程实例管理(查询.查看运行状态) 2.将bos系统中的用户和角色同步到activiti的用户和组表 3.设计物流配送流程 4.启动物流配送流程 5.组任务操作(查询.拾取) 6.个人任务操作(查询.办理) 1. 流程实例管理 1.1 查询流程实例列表 第一步:创建一个流程实例管理Action,提供list方法,查询流程实例列表数据 第二步:配置struts.xml 第三步:提供processinstance.jsp页面,展示列表数据 <s:iter

Activiti工作流学习(二)流程实例、执行对象、任务

一.前言 前面说明了基本的流程部署.定义,启动流程实例等基本操作,下面我们继续来学习流程实例.执行对象.任务. 二.流程实例.执行对象说明 整个Activiti的生命周期经过了如下的几个步骤: 1.流程部署 --->  2.启动流程实例 --- > 3.执行流程对象(一个流程实例包含多执行对象) ---> 4.完成整个流程 说明: 三.例子演示   1.完成我的任务     2.查询流程状态(判断流程正在执行,还是结束) 3.查询历史任务  4.流程实例.执行对象.任务  四.对应数据库

【Activiti】一个简单的单线流程的规则部署,流程启动,流程执行,任务查询,任务处理全过程

package com.tabchanj.activiti; import java.util.List; import org.activiti.engine.HistoryService; import org.activiti.engine.ProcessEngine; import org.activiti.engine.ProcessEngines; import org.activiti.engine.RepositoryService; import org.activiti.en

activiti入门2流程引擎的API和服务基础

RepositoryService : 管理和控制发布包和流程定义(包含了一个流程每个环节的结构和行为)的操作 除此之外,服务可以 查询引擎中的发布包和流程定义. 暂停或激活发布包,对应全部和特定流程定义. 暂停意味着它们不能再执行任何操作了,激活是对应的反向操作. 获得多种资源,像是包含在发布包里的文件, 或引擎自动生成的流程图. 获得流程定义的pojo版本, 可以用来通过java解析流程,而不必通过xml. RuntimeService :负责启动一个流程定义的新实例,获取和保存流程变量,查

工作流学习——Activiti流程定义管理三步曲

一.前言 在上一篇文章我们通过一个小demo对Activiti进行了宏观的介绍,让大家对Activiti有了整体的认识,这篇文章我们来学习具体的流程定义管理的CRUD. 二.正文 流程定义是什么 ProcessDefinition(流程定义)就是一个流程的步骤说明,比如我们接下来要说的这个流程,申请人王三发起提交申请,李四作为部门经理进行审批,审批完成后,此申请到达下一级总经理王五,进行审批.就这么整个流程说明其实就是流程定义,不过在Activiti中整个流程定义是以helloworld.bpm

工作流学习——Activiti流程定义管理三步曲 (zhuan)

http://blog.csdn.net/zwk626542417/article/details/46602419 **************************************************************** 一.前言 在上一篇文章我们通过一个小demo对Activiti进行了宏观的介绍,让大家对Activiti有了整体的认识,这篇文章我们来学习具体的流程定义管理的CRUD. 二.正文 流程定义是什么 ProcessDefinition(流程定义)就是一个流

activiti获取流程图片

一,使用普通方法:activti自动发布流程图片,通过流程ID找到流程,查出图片 //通过流程ID(XML上写的)找到流程 processDefinition = repositoryService.createProcessDefinitionQuery()                   .processDefinitionKey("flow_3")                   .singleResult();   String diagramResourceName 

activiti学习3:流程引擎对象和流程引擎配置对象

目录 activiti学习3:流程引擎对象和流程引擎配置对象 一.activiti的简单使用流程 二.流程引擎配置对象ProcessEngineConfiguration的介绍 三.activiti配置文件的介绍 四.获取流程引擎配置对象 4.1 读取默认名称的配置文件来创建配置对象 4.2 读取自定义名称的配置文件来创建流程引擎配置对象 五.流程引擎对象 5.1 buildProcessEngine方法创建 5.2 用ProcessEngines类来获取 六.总结 activiti学习3:流程