zoukankan      html  css  js  c++  java
  • 工作流 —activiti7组任务

    1. 组任务

      同一个任务,一组人都可以查看,其中只有一个人可以申请到该任务进行处理(其他人员看不到该任务),如果过程中不想处理了,
    可以将任务退回,这样组内其他人员可再次看到该任务,进行任务申请

      1.1 创建流程图并设置任务候选人

      1.2 部署流程

     //流程部署
        @Test
        public void deployment(){
            //获取ProcessEngine对象   默认配置文件名称:activiti.cfg.xml  并且configuration的Bean实例ID为processEngineConfiguration
            ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
            //获取RepositoryService对象进行流程部署
            RepositoryService repositoryService = processEngine.getRepositoryService();
            //进行部署,将对应的流程定义文件生成到数据库当中,作为记录进行保存
            Deployment deployment = repositoryService.createDeployment()
                    .addClasspathResource("holiday/holidaygroup.bpmn")     //加载流程文件
                    .addClasspathResource("holiday/holidaygroup.png")
                    .name("请假流程-组任务审批")       //设置流程名称
                    .deploy();              //部署
    
            //输出部署信息
            System.out.println("流程名称:"+deployment.getName());
            System.out.println("流程ID:"+deployment.getId());
            System.out.println("流程Key:"+deployment.getKey());
        }

      1.3 启动流程实例

    //启动一个流程实例
        @Test
        public void getInstance(){
            //获取ProcessEngine对象   默认配置文件名称:activiti.cfg.xml  并且configuration的Bean实例ID为processEngineConfiguration
            ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
            //获取Runtime
            RuntimeService runtimeService = processEngine.getRuntimeService();
            //设置流程变量
            Holiday  holiday=new Holiday();
            holiday.setNum(3);
            Map<String,Object>map=new HashMap<>();
            map.put("holiday",holiday);
    
            //启动一个流程实例
            ProcessInstance holidaygroup = runtimeService.startProcessInstanceByKey("holidaygroup", map);
            System.out.println("流程实例name:"+holidaygroup.getName());
    
        }

    2. 组任务代办任务流程

      2.1 查询组任务,但是不能执行  

    //提交任务
        @Test
        public void commitTask(){
            //获取ProcessEngine对象   默认配置文件名称:activiti.cfg.xml  并且configuration的Bean实例ID为processEngineConfiguration
            ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
            //获取TaskService
            TaskService taskService = processEngine.getTaskService();
            //查询到自己的任务,然后通过任务ID进行提交
            Task task = taskService.createTaskQuery().processDefinitionKey("holidaygroup").taskAssignee("tingting").singleResult();
            //处理任务
            taskService.complete(task.getId());
        }

      2.2 查看数据库

       2.3 查询组任务  

    //查询组任务 
        @Test
        public  void getGropTask(){
            //获取ProcessEngine对象   默认配置文件名称:activiti.cfg.xml  并且configuration的Bean实例ID为processEngineConfiguration
            ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
            //获取TaskService
            TaskService taskService = processEngine.getTaskService();
            //查询组任务
            List<Task> list = taskService.createTaskQuery().processDefinitionKey("holidaygroup").taskCandidateUser("mayuan").list();
            for (Task task:list){
                System.out.println("任务ID:"+task.getId());
                System.out.println("任务名称:"+task.getName());
                System.out.println("任务处理人:"+task.getAssignee());
            }
        }

      2.4  查看控制台效果 此时三个用户都可以查看到任务

      没有任务处理人为null说明当前任务 没有 人拾取

     

     

      2.5 拾取任务  当任务被拾取后其他角色是看不到任务的

    /**
         * 拾取任务
         */
        @Test
        public void claimTask() {
            //获取ProcessEngine对象
            ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
            //获取TaskService对象
            TaskService taskService = processEngine.getTaskService();
            //获取组任务
            String candidateUser="zhuyuan";
            Task task = taskService.createTaskQuery().processDefinitionKey("holidaygroup").taskCandidateUser(candidateUser).singleResult();
            //不等于Null代表能够获取到该任务
            if(task!=null){
                //拾取任务   任务ID,任务执行人
                taskService.claim(task.getId(),candidateUser);
                System.out.println("任务被:"+candidateUser+"拾取~");
            }
        }

      2.6 查看数据库 任务表

      2.7 查看任务

     /**
         * 查看任务
         */
        @Test
        public void getTask() {
            //获取ProcessEngine对象
            ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
            //获取TaskService对象
            TaskService taskService = processEngine.getTaskService();
            //查询到自己的任务,然后通过任务ID进行提交
            Task task = taskService.createTaskQuery().processDefinitionKey("holidaygroup").taskAssignee("zhuyuan").singleResult();
            //处理任务
            if(task!=null){
                taskService.complete(task.getId());
                System.out.println("任务处理完毕");
    
            }
        }

      2.8 当 一个角色拾取任务后不想处理时会进行退回任务操作  

    /**
                     * 任务退回/交接
                     */
                    @Test
                    public void taskReturn(){
                        //获取ProcessEngine对象
                        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
                        //获取TaskService对象
                        TaskService taskService = processEngine.getTaskService();
                        //查询到自己的任务,然后通过任务ID进行提交
                        Task task = taskService.createTaskQuery().processDefinitionKey("holidayGroup").taskAssignee("huaixin").singleResult();
    
                        if(task!=null){
                            //任务退回  任务ID    null代表没有处理人执行,需要后续再次拾取任务
                            //任务交接 任务ID     如果第二个参数,处理人不为空代表将该任务交给次处理人
                            taskService.setAssignee(task.getId(),"wangnan");
                            System.out.println("任务退回");
                        }
                    }

      2.9 查看数据库任务表

      

  • 相关阅读:
    三地气温的典型相关分析
    android 使用 BroadcastReceiver 总结
    发布网站问题笔记
    Android 两个Activity 实现数据的来回传递
    input 标签屏蔽谷歌浏览器高亮显示
    javascript 获取当前html 标签的位置
    c# 四舍五入
    利用SQL的charindex实现字符串数组和Split函数
    ExtJs 一些常用的控件
    C#中return、break、continue的用法
  • 原文地址:https://www.cnblogs.com/szhhhh/p/12653240.html
Copyright © 2011-2022 走看看