IDEA创建Activiti工作流开发第一篇(Maven项目)

首先创建一个新的Maven项目,创建完成后我们要安装Activiti的插件,首先打开FIle的setting功能,搜索Plugins:

输入actiBPM,然后点击搜索:

如图点击安装,它就会下载安装

安装好后点击应用:

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

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

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

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

全部连线后:

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

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

接着:

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

接着选择我们放这个文件的文件夹:

然后发现产生了图片:

不过如果有中文会出现乱码,需要在这两个文件下的后面都加上-Dfile.encoding=UTF-8

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

参考至:https://blog.csdn.net/qq_41728540/article/details/79506463

还有修改接受人 和流程名称:

第二步配置依赖,pom.xml文件修改如下:

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

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.lvzh</groupId>
  <artifactId>WorkNewTest</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>war</packaging>

  <name>WorkNewTest Maven Webapp</name>
  <!-- FIXME change it to the project's website -->
  <url>http://www.example.com</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.7</maven.compiler.source>
    <maven.compiler.target>1.7</maven.compiler.target>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
      <!--<scope>test</scope>-->
    </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-beans</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>
    <!--MySQL 驱动包,如果是其他库的话需要换驱动包-->
    <!--<dependency>-->
      <!--<groupId>mysql</groupId>-->
      <!--<artifactId>mysql-connector-java</artifactId>-->
      <!--<version>5.1.35</version>-->
    <!--</dependency>-->

    <!-- 添加oracle驱动依赖 -->
    <dependency>
      <groupId>com.oracle</groupId>
      <artifactId>ojdbc6</artifactId>
      <version>11.2.0.1.0</version>
    </dependency>

    <!--<dependency>-->
      <!--<groupId>org.junit.jupiter</groupId>-->
      <!--<artifactId>junit-jupiter-api</artifactId>-->
      <!--<version>RELEASE</version>-->
    <!--</dependency>-->

  </dependencies>




  <build>
    <finalName>WorkNewTest</finalName>
    <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
      <plugins>
        <plugin>
          <artifactId>maven-clean-plugin</artifactId>
          <version>3.0.0</version>
        </plugin>
        <!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
        <plugin>
          <artifactId>maven-resources-plugin</artifactId>
          <version>3.0.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>3.7.0</version>
        </plugin>
        <plugin>
          <artifactId>maven-surefire-plugin</artifactId>
          <version>2.20.1</version>
        </plugin>
        <plugin>
          <artifactId>maven-war-plugin</artifactId>
          <version>3.2.0</version>
        </plugin>
        <plugin>
          <artifactId>maven-install-plugin</artifactId>
          <version>2.5.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-deploy-plugin</artifactId>
          <version>2.8.2</version>
        </plugin>
      </plugins>
    </pluginManagement>
  </build>
</project>

接着发现不能新建类和包的问题,用如下解决:

然后发现就可以新建包和类:

新建一个生成流程报表的类MyWorkTable,代码如下:

package com.lzh;
import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngineConfiguration;
import org.junit.Test;


public class MyWorkTable {
    @Test
    public void creatTable(){
        ProcessEngine processEngine = ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("activiti.cfg.xml").buildProcessEngine();
    }

}

在resource文件下新建一个activiti.cfg.xml文件,连接数据库,代码如下:

<?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/activiti?useUnicode=true&amp;characterEncoding=utf8"></property>-->
        <!--<property name="jdbcUsername" value="username"></property>-->
        <!--<property name="jdbcPassword" value="password"></property>-->
        <!--<property name="databaseSchemaUpdate" value="true"></property>-->
    <!--</bean>-->


    <bean id="processEngineConfiguration" class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">
        <property name="jdbcDriver" value="oracle.jdbc.OracleDriver"></property>
        <property name="jdbcUrl" value="jdbc:oracle:thin:@localhost:1521:orcl"></property>
        <!--<property name="jdbcUrl" value="jdbc:oracle:thin:@(description=(address_list= (address=(host=localhost) (protocol=tcp)(port=1521))(address=(host=localhost)(protocol=tcp) (port=1521)) (load_balance=yes)(failover=yes))(connect_data=(service_name= orcl.genomics.cn)))"></property>-->
        <property name="jdbcUsername" value="用户名"></property>
        <property name="jdbcPassword" value="密码"></property>
        <property name="databaseSchemaUpdate" value="true"></property>
    </bean>



</beans>

记得resource文件要改成这样:

否则会文件找不到的错误,再接着运行生成报表的类:

生成流程报表24张:

流程部署表
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`

参考来至:https://blog.csdn.net/artaganan8/article/details/77838019

接着部署流程,部署之后就可以在act_re_procdef 流程定义表 中看到对相应的流程信息,首先先建一个部署类MyWorkDeploy:

package com.lzh;

import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.RepositoryService;
import org.activiti.engine.repository.DeploymentBuilder;
import org.junit.Test;

public class MyWorkDeploy {
    ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();

    //部署流程
    @Test
    public void deployProcess(){
        RepositoryService repositoryService = processEngine.getRepositoryService();
        DeploymentBuilder builder = repositoryService.createDeployment();
        builder.addClasspathResource("WorkTestNew.bpmn");//bpmn文件的名称
        builder.deploy();
    }

}

我们得把原来的WorkTestNew.xml重新改为WorkTestNew.Bpmn,接着我们新建一个启动流程类MyWorkStart:

package com.lzh;

import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.RuntimeService;
import org.junit.Test;

public class MyWorkStart {
    ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();

    //启动流程
    @Test
    public void startProcess(){
        RuntimeService runtimeService = processEngine.getRuntimeService();
        runtimeService.startProcessInstanceByKey("myProcess_1");//流程的名称,对应流程定义表的key字段,也可以使用ByID来启动流程
    }

}

启动流程之后就会有相应的任务产生,存在act_ru_task  运行时任务节点表 中,可以查看任务节点,再接着我们新建一个查询流程类MyWorkQuery:

package com.lzh;

import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngines;

import org.activiti.engine.TaskService;

import org.activiti.engine.task.Task;
import org.junit.Test;

import java.util.List;

public class MyWorkQuery {
    ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
//查询流程
@Test
    public void queryTask(){
        TaskService taskService = processEngine.getTaskService();
        //根据assignee(节点接受人)查询任务
        String assignee = "张三";//
        List<Task> tasks = taskService.createTaskQuery().taskAssignee(assignee).list();

        int size = tasks.size();
        for (int i = 0; i < size; i++) {
            Task task = tasks.get(i);

        }
        //首次运行的时候这个没有输出,因为第一次运行的时候扫描act_ru_task的表里面是空的,但第一次运行完成之后里面会添加一条记录,之后每次运行里面都会添加一条记录
        for (Task task : tasks) {
            System.out.println("taskId=" +"流程任务节点信息ID:"+ task.getId() +
                    ",taskName:" +"流程任务节点名称ID:" +task.getName() +
                    ",assignee:" + "流程任务节点接受人:"+task.getAssignee() +
                    ",createTime:" +"流程任务节点创建时间:"+ task.getCreateTime());
        }
    }




}

新建一个类MyWorkQueryProcess,用来查询流程明细定义明细:

package com.lzh;

import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.RepositoryService;
import org.activiti.engine.repository.ProcessDefinition;
import org.activiti.engine.repository.ProcessDefinitionQuery;
import org.junit.Test;

import java.util.List;

public class MyWorkQueryProcess {
    ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
    //查询流程定义明细
    @Test
    public void queryProcdef(){
        RepositoryService repositoryService = processEngine.getRepositoryService();
        //创建查询对象
        ProcessDefinitionQuery query = repositoryService.createProcessDefinitionQuery();
        //添加查询条件
        query.processDefinitionKey("myProcess_1");//通过key获取
        // .processDefinitionName("My process")//通过name获取
        // .orderByProcessDefinitionId()//根据ID排序
        //执行查询获取流程定义明细
        List<ProcessDefinition> pds = query.list();
        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());
        }
    }
}

新建一个审核过程完成任务节点审批的类MyWorkProcessApproval:

package com.lzh;

import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.TaskService;
import org.junit.Test;

//审核过程
public class MyWorkProcessApproval {
    ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();

    @Test
    public void startProcessApproval(){

        TaskService taskService = processEngine.getTaskService();
        //taskId 就是查询任务中的 ID
        String taskId = "12502";
        //完成请假申请任务
        taskService.complete(taskId);
    }
}

参考来至https://blog.csdn.net/c1225992531/article/details/81181017

https://blog.csdn.net/a67474506/article/details/38266129

运行部署流程MyWorkDeploy类的deployProcess方法后,我们可以看到act_re_procdef 流程定义表产生相应的流程信息:

再接着我们启动流程类MyWorkStart 的方法startProcess后   ,act_ru_task 运行时任务节点表 中,可以查看任务节点:

到了第一个任务节点审核,接下来由第一个任务节点的用户审批完成节点任务,先查询节点id,再启动审核流程方法,先是运行MyWorkQuery类的queryTask方法,再启动MyWorkProcessApproval的startProcessApproval方法,然后你就会看到流程走到下一个节点,所以整个 流程的运行

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

猜你喜欢

转载自blog.csdn.net/qq_38000902/article/details/82735686