zoukankan      html  css  js  c++  java
  • 工作流——Activiti案例

    1. 流程定义

      如何新建流程图和如何保存流程图

      1.1 在IDEA有activiti插件的基础上新建BpmnFile

            1.2 完成流程图

      

       1.3 并将每个流程编写不同名字区分 

      

       1.4 将Bpmn文件修改后缀名改为xml文件并从新打开

       1.5 右键此xml文件将他改为图

       1.6 生成一张流程图

       1.7 保存至当前Resources路径

      

     2. 流程部署 

      2.1 编写activiti.cfg.xml配置文件

    复制代码
     <!--数据源-->
        <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
            <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
            <property name="url" value="jdbc:mysql://localhost:3306/activiti-y2170"/>
            <property name="username" value="root"/>
            <property name="password" value="123"/>
        </bean>
    
        <!--配置Activiti使用的processEngine对象   默认命名为processEngineConfiguration-->
        <bean id="processEngineConfiguration" class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">
            <!--注入数据源-->
            <property name="dataSource" ref="dataSource"/>
            <!--配置数据源方式二:-->
            <!--<property name="jdbcDriver" value="com.mysql.jdbc.Driver"/>-->
    
            <!--指定数据库生成策略-->
            <property name="databaseSchemaUpdate" value="true"/>
        </bean>
    复制代码

      2.2 编写日志配置文件

    复制代码
    # Set root category priority to INFO and its only appender to CONSOLE.
    #log4j.rootCategory=INFO, CONSOLE            debug   info   warn error fatal
    log4j.rootCategory=debug, CONSOLE, LOGFILE
    
    # Set the enterprise logger category to FATAL and its only appender to CONSOLE.
    log4j.logger.org.apache.axis.enterprise=FATAL, CONSOLE
    
    # CONSOLE is set to be a ConsoleAppender using a PatternLayout.
    log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
    log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
    log4j.appender.CONSOLE.layout.ConversionPattern=%d{ISO8601} %-6r [%15.15t] %-5p %30.30c %x - %m
    
    
    # LOGFILE is set to be a File appender using a PatternLayout.
    log4j.appender.LOGFILE=org.apache.log4j.FileAppender
    log4j.appender.LOGFILE.File=d:axis.log
    log4j.appender.LOGFILE.Append=true
    log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout
    log4j.appender.LOGFILE.layout.ConversionPattern=%d{ISO8601} %-6r [%15.15t] %-5p %30.30c %x - %m
    
    复制代码

       2.3 编写测试代码进行部署 

    复制代码
     @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("bpmnfile/holiday.bpmn")     //加载流程文件
                    .addClasspathResource("bpmnfile/holiday.png")
                    .name("请假流程")       //设置流程名称
                    .key("holidayKey")
                    .deploy();              //部署
    
            //输出部署信息
            System.out.println("流程名称:"+deployment.getName());
            System.out.println("流程ID:"+deployment.getId());
            System.out.println("流程Key:"+deployment.getKey());
        }
    复制代码

      2.4 控制台效果

       2.5  数据库改变的表

     

    3. 创建流程实例

      Service总览

      

      编写测试代码 

    复制代码
    @Test
        public void startInstance(){
            //获取ProcessEngine对象   默认配置文件名称:activiti.cfg.xml  并且configuration的Bean实例ID为processEngineConfiguration
            ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
            //获取到RunimeService对象
            RuntimeService runtimeService=processEngine.getRuntimeService() ;
            //创建流程实例
            ProcessInstance holiday=runtimeService.startProcessInstanceByKey("holiday");
            //输出实例信息
            System.out.println("流程部署ID:"+holiday.getDeploymentId());
            System.out.println("流程实例ID:"+holiday.getId());
            System.out.println("活动 ID:"+holiday.getActivityId());
        }
    复制代码

       控制台效果

     4. 用户查询代办任务

      代码测试

    复制代码
     //查看代办任务
        @Test
        public void getTask(){
            //获取ProcessEngine对象   默认配置文件名称:activiti.cfg.xml  并且configuration的Bean实例ID为processEngineConfiguration
            ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
            //获取一个TaskService对象
            TaskService taskService=processEngine.getTaskService();
            //查询代办业务 createTaskQuery查询任务   taskCandidateOrAssigned查询任务执行者   processDefinitionKey:查询流程
            /**
             * taskCandidateOrAssigned匹配规则:1.Assigned   2.配置bpmn文件中定义的值
             * taskAssignee匹配规则:1.Assigned
             */
            List<Task> list=taskService.createTaskQuery().taskCandidateOrAssigned("lisi").processDefinitionKey("holiday").list();
            for (Task task:list){
                System.out.println("任务名称:"+task.getName());
                System.out.println("任务执行人:"+task.getAssignee());
                System.out.println("任务ID:"+task.getId());
                System.out.println("流程实例ID:"+task.getProcessInstanceId());
    
            }
        }
    复制代码

      控制台效果

     5. 用户进行任务处理

    复制代码
     @Test
        public void completeTask(){
            //获取ProcessEngine对象   默认配置文件名称:activiti.cfg.xml  并且configuration的Bean实例ID为processEngineConfiguration
            ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
            //获取一个TaskService对象
            TaskService taskService=processEngine.getTaskService();
            //任务处理
            taskService.complete("2505");
        }
    复制代码

    6. 在查询zhangsan代办任务时就已经没有

    7. 当业务流程结束后通过历史可以查看到已经走完的流程

      编写测试代码

    复制代码
     //当业务流程结束后通过历史可以查看到已经走完的流程
        @Test
        public void getHistory(){
            //获取ProcessEngine对象   默认配置文件名称:activiti.cfg.xml  并且configuration的Bean实例ID为processEngineConfiguration
            ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
            //获取HistoryService接口
            HistoryService historyService = processEngine.getHistoryService();
            //获取历史任务
            HistoricActivityInstanceQuery historicActivityInstanceQuery = historyService.createHistoricActivityInstanceQuery();
            //获取指定流程实例的任务
            historicActivityInstanceQuery.processInstanceId("2501");
            //获取任务列表
            List<HistoricActivityInstance> list = historicActivityInstanceQuery.list();
            for (HistoricActivityInstance ai : list) {
                System.out.println("任务节点ID:"+ai.getActivityId());
                System.out.println("任务节点名称:"+ai.getActivityName());
                System.out.println("流程实例ID信息:"+ai.getProcessDefinitionId());
                System.out.println("流程实例ID信息:"+ai.getProcessInstanceId());
                System.out.println("==============================");
            }
        }
    复制代码

      控制台效果

  • 相关阅读:
    Nginx负载均衡+代理+ssl+压力测试
    Nginx配置文件详解
    HDU ACM 1690 Bus System (SPFA)
    HDU ACM 1224 Free DIY Tour (SPFA)
    HDU ACM 1869 六度分离(Floyd)
    HDU ACM 2066 一个人的旅行
    HDU ACM 3790 最短路径问题
    HDU ACM 1879 继续畅通工程
    HDU ACM 1856 More is better(并查集)
    HDU ACM 1325 / POJ 1308 Is It A Tree?
  • 原文地址:https://www.cnblogs.com/tinghao/p/12614440.html
Copyright © 2011-2022 走看看