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

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

IDEA创建Activiti工作流开发第一篇(Maven项目)_第1张图片

输入actiBPM,然后点击搜索:

IDEA创建Activiti工作流开发第一篇(Maven项目)_第2张图片

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

IDEA创建Activiti工作流开发第一篇(Maven项目)_第3张图片

安装好后点击应用:

IDEA创建Activiti工作流开发第一篇(Maven项目)_第4张图片

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

IDEA创建Activiti工作流开发第一篇(Maven项目)_第5张图片

给这个文件起好名字后拖动右边的图标到左边:
IDEA创建Activiti工作流开发第一篇(Maven项目)_第6张图片

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

IDEA创建Activiti工作流开发第一篇(Maven项目)_第7张图片

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

IDEA创建Activiti工作流开发第一篇(Maven项目)_第8张图片

全部连线后:

IDEA创建Activiti工作流开发第一篇(Maven项目)_第9张图片

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

IDEA创建Activiti工作流开发第一篇(Maven项目)_第10张图片

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

IDEA创建Activiti工作流开发第一篇(Maven项目)_第11张图片

接着:

IDEA创建Activiti工作流开发第一篇(Maven项目)_第12张图片

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

IDEA创建Activiti工作流开发第一篇(Maven项目)_第13张图片

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

IDEA创建Activiti工作流开发第一篇(Maven项目)_第14张图片

然后发现产生了图片:

IDEA创建Activiti工作流开发第一篇(Maven项目)_第15张图片

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

IDEA创建Activiti工作流开发第一篇(Maven项目)_第16张图片

 

 

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

 

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

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

IDEA创建Activiti工作流开发第一篇(Maven项目)_第17张图片

 

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




  4.0.0

  com.lvzh
  WorkNewTest
  1.0-SNAPSHOT
  war

  WorkNewTest Maven Webapp
  
  http://www.example.com

  
    UTF-8
    1.7
    1.7
  

  
    
      junit
      junit
      4.12
      
    

    
    
      org.activiti
      activiti-spring
      5.18.0
    
    
      org.activiti
      activiti-engine
      5.18.0
      
        
          slf4j-api
          org.slf4j
        
        
          spring-beans
          org.springframework
        
        
          jackson-core-asl
          org.codehaus.jackson
        
        
          commons-lang3
          org.apache.commons
        
        
          commons-lang3
          org.apache.commons
        
      
    
    
    
      
      
      
    

    
    
      com.oracle
      ojdbc6
      11.2.0.1.0
    

    
      
      
      
    

  




  
    WorkNewTest
    
      
        
          maven-clean-plugin
          3.0.0
        
        
        
          maven-resources-plugin
          3.0.2
        
        
          maven-compiler-plugin
          3.7.0
        
        
          maven-surefire-plugin
          2.20.1
        
        
          maven-war-plugin
          3.2.0
        
        
          maven-install-plugin
          2.5.2
        
        
          maven-deploy-plugin
          2.8.2
        
      
    
  

 

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

IDEA创建Activiti工作流开发第一篇(Maven项目)_第18张图片

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

IDEA创建Activiti工作流开发第一篇(Maven项目)_第19张图片

新建一个生成流程报表的类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文件,连接数据库,代码如下:




    
        
        
        
        
        
    


    
        
        
        
        
        
        
    




记得resource文件要改成这样:

IDEA创建Activiti工作流开发第一篇(Maven项目)_第20张图片

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

IDEA创建Activiti工作流开发第一篇(Maven项目)_第21张图片

生成流程报表24张:

IDEA创建Activiti工作流开发第一篇(Maven项目)_第22张图片

流程部署表
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 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 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 运行时任务节点表 中,可以查看任务节点:

IDEA创建Activiti工作流开发第一篇(Maven项目)_第23张图片

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

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

 

 

你可能感兴趣的:(java,java中级开发,activitiv5)