zoukankan      html  css  js  c++  java
  • IDEA创建Activiti工作流开发

    一、 安装Activiti插件

    1. 首先打开FIle的setting功能,搜索Plugins: 

     

    2. 输入actiBPM,然后点击搜索:

    3. 点击安装、应用:

    安装好之后点击apply(应用),之后重启idea

    二、 创建Activiti工作流并导出流程图图片

    1. 重启IDEA之后,点击File文件中的New下的BpmnFile:

     

    2. 给这个文件起好名字后拖动右边的图标到左边:

    3. 把鼠标放到节点中心,中心会变成黑白扇形:

    4. 拖拽连线到另一个图标进行画图:

    5. 左键单击节点就会出现左边的修改按钮:

    Id命名规范: 要以字母或下划线 () 字符开头,后接 XML 规范中允许的任意字母、数字、重音字符、变音符号、句点 (.)、连字符 (-) 和下划线 () 的组合。

    否则》》》(报org.activiti.bpmn.exceptions.XMLException: cvc-datatype-valid.1.2.1: '' 不是 'NCName' 异常)

    6. 接着修改文件的后缀名为.xml:

    打开该文件可以看到,流程图以xml代码格式呈现(当然也可以在重命名改回去)

    7. 接着右键该文件:

    如果没有出现图中的按钮,可以按快捷键Ctrl+alt+Shift+U,按了以后,以后这个图标就会出现了

    8. 导出图片

    可以点击该按钮保存这图片,后缀名自己设置下.png

    三、 解决图片乱码bug

    如果图片中有中文会出现乱码,需要在这两个文件下的后面都加上

    -Dfile.encoding=UTF-8

     
     

    然后重启IDEA,把原来的PNG图片删掉,再生成一次就不会出现乱码了

    四、 测试(test)工作流开发

    1. 引入pom.xml依赖

    <!--JUnit测试-->

            <dependency>

                <groupId>junit</groupId>

                <artifactId>junit</artifactId>

                <version>4.12</version>

            </dependency>

    <!--- Activiti依赖导入 -->

            <dependency>

                <groupId>org.activiti</groupId>

                <artifactId>activiti-spring</artifactId>

                <version>5.18.0</version>

            </dependency>

            <dependency>

                <groupId>org.activiti</groupId>

                <artifactId>activiti-engine</artifactId>

                <version>5.18.0</version>

                <exclusions>

                    <exclusion>

                        <artifactId>slf4j-api</artifactId>

                        <groupId>org.slf4j</groupId>

                    </exclusion>

                    <exclusion>

                        <artifactId>spring-eans</artifactId>

                <groupId>org.springframework</groupId>

                    </exclusion>

                    <exclusion>

                        <artifactId>jackson-core-asl</artifactId>

                        <groupId>org.codehaus.jackson</groupId>

                    </exclusion>

                    <exclusion>

                        <artifactId>commons-lang3</artifactId>

                        <groupId>org.apache.commons</groupId>

                    </exclusion>

                    <exclusion>

                        <artifactId>commons-lang3</artifactId>

                        <groupId>org.apache.commons</groupId>

                    </exclusion>

                </exclusions>

            </dependency>

    2. 在src/main/resources下面新建一个BPMN文件

    (同上文操作的创建工作流)

    3. 画完流程图之后要更改对应元素的name和assignee,Id

     

    然后点击空白地方,把流程ID和名称改掉,如下图:

     

    4. 之后把数据库建好,建一个activiti.cfg.xml在resource下面

    <?xml version="1.0" encoding="UTF-8"?>

    <beans xmlns="http://www.springframework.org/schema/beans"

          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

                    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

                <bean id="processEngineConfiguration" class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">

        <property name="jdbcDriver" value="com.mysql.jdbc.Driver"></property>

                  <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/demo?useUnicode=true&amp;characterEncoding=utf8"></property>

        <property name="jdbcUsername" value="root"></property>

        <property name="jdbcPassword" value="root"></property>

        <property name="databaseSchemaUpdate" value="true"></property>

      </bean>

    </beans>

    5. 新建一个java类,用来生成表

     

    @Test

    public void crateTable(){

                  ProcessEngine processEngine = ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("activiti.cfg.xml").buildProcessEngine();

    }

    运行这个类之后数据库里面会生成24张表, 23-25张表都是有可能的,我这里是生成了24张表,多了一张act_evt_log,事件处理日志表。最主要的还是那23张表

     

    6. 之后就可以开始部署流程

     

    代码:

    ProcessEngine processEngine= ProcessEngines.getDefaultProcessEngine();

        //部署流程

        @Test

        public void deployProcess(){

            RepositoryService repositoryService=processEngine.getRepositoryService();

            DeploymentBuilder builder=repositoryService.createDeployment();

            builder.addClasspathResource("myWork.bpmn");

            builder.deploy();

    }

    部署之后就可以在act_re_procdef表中看到对相应的流程信息

    7. 启动流程

     

    代码:

    ProcessEngine processEngine= ProcessEngines.getDefaultProcessEngine();

        @Test

        public void startProcess(){

            RuntimeService runtimeService=processEngine.getRuntimeService();

            runtimeService.startProcessInstanceByKey("myProcess_1");

    }

    启动流程之后就会有相应的任务产生,存在act_ru_task表中,可以查看任务节点

     

    代码:

    ProcessEngine processEngine= ProcessEngines.getDefaultProcessEngine();

        @Test

        public void queryProcess(){

            TaskService taskService=processEngine.getTaskService();

            String assigne="student";

            List<Task> tasks=taskService.createTaskQuery().taskAssignee(assigne).list();

            int size=tasks.size();

            for(int i=0;i<size;i++){

                Task task=tasks.get(i);

            }

            for (Task task:tasks){

                System.out.println("taskId=" +"流程任务节点信息ID:"+ task.getId() +

                        ",taskName:" +"流程任务节点名称ID:" +task.getName() +

                        ",assignee:" + "流程任务节点接受人:"+task.getAssignee() +

                        ",createTime:" +"流程任务节点创建时间:"+ task.getCreateTime());

            }

        }

    首次运行的时候这个没有输出,因为第一次运行的时候扫描act_ru_task的表里面是空的,但第一次运行完成之后里面会添加一条记录,之后每次运行里面都会添加一条记录

    8. 查询流程明细定义明细

     

    代码:

    ProcessEngine processEngine= ProcessEngines.getDefaultProcessEngine();

    @Test

    public void queryProcdef(){

            RepositoryService repositoryService=processEngine.getRepositoryService();

                      ProcessDefinitionQuery query=repositoryService.createProcessDefinitionQuery();

            query.processDefinitionKey("myProcess_1");

            List<ProcessDefinition> pds=query.list();

            System.out.println(">>>>>>>>>>>>>>>>>>>>>");

            for (ProcessDefinition pd:pds){

                System.out.println("ID:"+pd.getId()+",NAME:"+pd.getName()+

                        ",KEY:"+pd.getKey()+",VERSION:"+pd.getVersion()+

                        ",RESOURCE_NAME:"+pd.getResourceName()+

                        ",DGRM_RESOURCE_NAME:"+pd.getDiagramResourceName());

            }

    }

    9. 审核过程完成任务节点审批

     

    代码:

    ProcessEngine processEngine= ProcessEngines.getDefaultProcessEngine();

        @Test

        public void startProcessApproval(){

            TaskService taskService=processEngine.getTaskService();

            //taskId 就是查询任务中的 ID

            String taskId="2504";

            //完成请假申请任务

            taskService.complete(taskId);

    }

    10. 流程详细步骤:

    部署流程》》》》》》启动流程》》》》》》查询用户id》》》》用户完成任务》》》流程结束

    五、 生成流程报表

     

    流程部署表

    SELECT * FROM `act_re_deployment`

    流程定义表

    SELECT * FROM `act_re_procdef`

    资源文件表

    SELECT * FROM `act_ge_bytearray`

    系统配置表

    SELECT * FROM `act_ge_property`

    启动流程实例涉及到的表

    流程实例运行时 执行对象表

    SELECT * FROM `act_ru_execution`

    流程实例运行时 身份联系表

    SELECT * FROM `act_ru_identitylink`

    流程实例运行时 用户任务表

    SELECT * FROM `act_ru_task`

    活动节点历史表

    SELECT * FROM `act_hi_actinst`

    身份联系表 历史

    SELECT * FROM `act_hi_identitylink`

    流程实例表 历史

    SELECT * FROM `act_hi_procinst`

    历史任务表

    SELECT * FROM `act_hi_taskinst`

     
  • 相关阅读:
    大数据学习--day10(继承-权限-super-final-多态-组合)
    大数据学习--day09(this、static)
    大数据学习--day08(hnapp 后台系统开发、面向对象)
    大数据学习--day07(冒泡排序、Arrays工具类、方法可变参数)
    大数据学习--day06(Eclipse、数组)
    大数据学习--day05(嵌套循环、方法、递归)
    大数据学习--day04(选择结构、循环结构、大数据java基础面试题)
    大数据学习--day03(运算符、流程控制语句)
    牛客多校训练营第九场 J
    二次剩余(模板)
  • 原文地址:https://www.cnblogs.com/xianshen/p/12742364.html
Copyright © 2011-2022 走看看