zoukankan      html  css  js  c++  java
  • Activiti5工作流笔记三

    组任务

    直接指定办理人

    流程图如下:

    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    import org.activiti.engine.ProcessEngine;
    import org.activiti.engine.ProcessEngines;
    import org.activiti.engine.task.IdentityLink;
    import org.activiti.engine.task.Task;
    import org.junit.Test;
    
    public class Task3Test {
        @Test
        public void testDeploy(){
            ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
            processEngine.getRepositoryService()
            .createDeployment()
            .addClasspathResource("com/itheima10/activiti/task/task3.bpmn")
            .deploy();
        }
        
        
        /*
         * 当启动完流程实例以后,进入了电脑维修的任务
         *         <userTask id="电脑维修" name="电脑维修" activiti:candidateUsers="工程师1,工程师2,工程师3"></userTask>
         *    所以在
         *        act_ru_identitylink
         *           当当前任务结束以后,任务的候选人就从这里删除了
         *        act_hi_identitylink
         *            这两张表中分别对应的数据工程师1有两个
         *                taskId:工程师1
         *                piid:工程师1
         */
        @Test
        public void testStartPI(){
            ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
            processEngine.getRuntimeService()
            .startProcessInstanceById("task3:1:1704");
        }
        
        /**
         *  根据候选人查询组任务
         */
        @Test
        public void testQueryTaskByCandidate(){
            ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
            List<Task> tasks = processEngine.getTaskService()
            .createTaskQuery()
            .taskCandidateUser("工程师1")
            .list();
            for (Task task : tasks) {
                System.out.println(task.getName());
            }
        }
        
        /**
         * 根据组任务查看任务的候选人
         */
        @Test
        public void testQueryCandidateByTask(){
            ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
            List<IdentityLink> identityLinks = processEngine.getTaskService()
            .getIdentityLinksForTask("1804");
            for (IdentityLink identityLink : identityLinks) {
                System.out.println(identityLink.getUserId());
            }
        }
        
        /**
         * 候选人认领任务
         */
        @Test
        public void testClaimTask(){
            ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
            processEngine.getTaskService()
            .claim("1804","工程师1");
        }
        
        @Test
        public void testFinishTask(){
            ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
            processEngine.getTaskService()
            .complete("1804");
        }
    }

    使用类

    流程图:

    package com.itheima10.activiti.task;
    
    import org.activiti.engine.delegate.DelegateTask;
    import org.activiti.engine.delegate.TaskListener;
    
    public class MyTask4Listener implements TaskListener{
        @Override
        public void notify(DelegateTask delegateTask) {
            // TODO Auto-generated method stub
            /**
             *  组任务的候选人应该来自于数据库的某一张表
             */
            delegateTask.addCandidateUser("张三");
            delegateTask.addCandidateUser("王五");
            
            /**
             * 直接把一个组赋值给一个任务的候选人
             */
            delegateTask.addCandidateGroup("2201");// 参数为groupid
        }
    }
    package com.itheima10.activiti.identity;
    
    import org.activiti.engine.ProcessEngine;
    import org.activiti.engine.ProcessEngines;
    import org.activiti.engine.identity.Group;
    import org.activiti.engine.identity.User;
    import org.activiti.engine.impl.persistence.entity.GroupEntity;
    import org.activiti.engine.impl.persistence.entity.UserEntity;
    import org.junit.Test;
    
    public class IdentityTest {
        @Test
        public void testIdentity(){
            //创建组
            Group group = new GroupEntity();
            group.setName("咨询组");
            ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
            processEngine.getIdentityService()
            .saveGroup(group);
            
            //创建组员
            User user1 = new UserEntity();
            user1.setId("咨询员1");
            
            User user2 = new UserEntity();
            user2.setId("咨询员2");
            processEngine.getIdentityService().saveUser(user1);
            processEngine.getIdentityService().saveUser(user2);
            //建立组员与组的关系
            processEngine.getIdentityService().createMembership(user1.getId(), group.getId());
            processEngine.getIdentityService().createMembership(user2.getId(), group.getId());
        }
        
        @Test
        //根据组ID删除组
        public void testDeleteGroup(){
            ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
            processEngine.getIdentityService()
            .deleteGroup("2201");
        }
    }
    package com.itheima10.activiti.task;
    
    import java.util.List;
    
    import org.activiti.engine.ProcessEngine;
    import org.activiti.engine.ProcessEngines;
    import org.activiti.engine.task.IdentityLink;
    import org.activiti.engine.task.Task;
    import org.junit.Test;
    
    public class Task4Test {
        @Test
        public void testDeploy(){
            ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
            processEngine.getRepositoryService()
            .createDeployment()
            .addClasspathResource("com/itheima10/activiti/task/task4.bpmn")
            .deploy();
        }
        
        
        @Test
        public void testStartPI(){
            ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
            processEngine.getRuntimeService()
            .startProcessInstanceById("task4:1:2004");
        }
    
    }

    相关表:

    act_id_group  组

    act_id_membership  组员

    连线

    之前的流程图都是错的,只是为了演示如何快速使用,下面通过连线学习如何画一个正确的流程图

    例子1:

    package com.itheima10.activiti.sequenceFlow;
    
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    import org.activiti.engine.ProcessEngine;
    import org.activiti.engine.ProcessEngines;
    import org.activiti.engine.impl.persistence.entity.ProcessDefinitionEntity;
    import org.activiti.engine.impl.pvm.PvmTransition;
    import org.activiti.engine.impl.pvm.process.ActivityImpl;
    import org.junit.Test;
    
    public class SequenceFlowTest {
        @Test
        public void testDeploy(){
            ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
            processEngine.getRepositoryService()
            .createDeployment()
            .addClasspathResource("com/itheima10/activiti/sequenceFlow/sequenceflow.bpmn")
            .deploy();
        }
        
        @Test
        public void testStartPi(){
            ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
            processEngine.getRuntimeService()
            .startProcessInstanceById("sequenceflow:2:3604");
        }
        
        /*
         * 完成请假申请的任务
         */
        @Test
        public void testFinisTask(){
            Map<String, Object> variables = new HashMap<String, Object>();
            variables.put("day", 2);
            ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
            processEngine.getTaskService()
            .complete("3704",variables);
        }
        
        /**
         * 完成部门经理审批的任务
         */
        @Test
        public void testFinisTask2(){
            ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
            processEngine.getTaskService()
            .complete("3803");//请假天数2天,直接审批通过
        }
        
        
        /**
         * 获取部门经理审批节点的出处有几个,每一个的名称
         */
        @Test
        public void testGetOutGoing(){
            ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
            /**
             * ProcessDefinitionEntity  流程定义对象
             */
            ProcessDefinitionEntity processDefinitionEntity = (ProcessDefinitionEntity)processEngine.getRepositoryService()
            .getProcessDefinition("sequenceflow:2:3604");
            /**
             *  根据流程定义对象中的某一个节点的id的值,就可以得到该节点的ActitityImpl(节点对象)
             */
            ActivityImpl activityImpl = processDefinitionEntity.findActivity("部门经理审批");
            /**
             * 该节点对象有多少sequenceFlow
             */
            List<PvmTransition> pvmTransitions = activityImpl.getOutgoingTransitions();
            for (PvmTransition pvmTransition : pvmTransitions) {
                System.out.println(pvmTransition.getId());//输出sequenceFlow的id的值
                System.out.println(pvmTransition.getDestination());//输出sequenceFlow的目标节点
            }
        }
    }

    例子2:

    package com.itheima10.activiti.sequenceFlow;
    
    import java.util.HashMap;
    import java.util.Map;
    
    import org.activiti.engine.ProcessEngine;
    import org.activiti.engine.ProcessEngines;
    import org.junit.Test;
    
    public class SequenceFlow2Test {
        @Test
        public void testDeploy(){
            ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
            processEngine.getRepositoryService()
            .createDeployment()
            .addClasspathResource("com/itheima10/activiti/sequenceFlow/sequenceflow2.bpmn")
            .deploy();
        }
        
        @Test
        public void testStartPi(){
            ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
            processEngine.getRuntimeService()
            .startProcessInstanceById("sequence2:1:4004");
        }
        
        
        @Test
        public void testFinishTask(){
            Person person = new Person();
            person.setDay(2);
            Map<String, Object> variables = new HashMap<String, Object>();
            variables.put("person", person);
            variables.put("day", 1);
            ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
            processEngine.getTaskService()
            .complete("4104", variables);
        }
    }

    接收活动(receiveTask,即等待活动)

    不需要审批的流程,例如审批后的归档操作

     例子:

    package com.itheima10.activiti.receivetask;
    
    import org.activiti.engine.ProcessEngine;
    import org.activiti.engine.ProcessEngines;
    import org.junit.Test;
    
    /**
     * receiveTask不需要人工干预,不需要审批,直接把当前的事情做完以后,流向下一个节点即可
     * @author zd
     *
     */
    public class ReceiveTaskTest {
        @Test
        public void testDeploy(){
            ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
            processEngine.getRepositoryService()
            .createDeployment()
            .addClasspathResource("com/itheima10/activiti/receivetask/receivetask.bpmn")
            .deploy();
        }
        
        @Test
        /**
         * act_ru_task表中不会有新的记录,因为不需要人审批此流程
         * 在act_ru_execution表中可以看到当前流程实例
         */
        public void testStartPI(){
            ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
            processEngine.getRuntimeService()
            .startProcessInstanceById("receive:1:4304");
        }
        
        @Test
        public void testNextNode(){
            ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
            processEngine.getRuntimeService()
            /**
             * 给当前的流程实例发一个信号:往下一个节点走
             */
            .signal("4401");
        }
    }
  • 相关阅读:
    关于Eclipse中Jsp页面打不开并且显示Failed to create the part's controls的解决办法
    FileOutputStream()找不到指定路径
    视频还没剪完室友就喊我去撸串,我直接用python写了个自动关机程序!
    ORM是什么?如何理解ORM
    jquery获取多个相同name的input的value值
    Windows安装OpenSSH的注意点
    小功能~调用QQ进行客服对话功能
    Furion分表分库我也要happy coding
    .Net下你不得不看的分表分库解决方案多字段分片
    分库分表的框架如何设计自动路由
  • 原文地址:https://www.cnblogs.com/lm970585581/p/9311826.html
Copyright © 2011-2022 走看看