activiti实验

声明: 本人 java 菜鸟

 

实验目标:

 

使用 activit 6 实现流程

 

使用工具: IntelliJ IDEA 2018.3.3   , mysql  

 

基础环境搭建:

 

新建 springboot项目

 

 

一直下一步即可

bpmn 新建: 

官方下载的 bpmn 文件夹中 war 文件, 复制到 tomcat 的目录下, 启动 tomcat。

 

输入账号 admin 密码 test

绘制完成后, 下载文件

上传  bpmn 文件放在文件夹路径下

 

 

POM 文件中 添加相关依赖

 

<dependency>

    <groupId>org.activiti</groupId>

    <artifactId>activiti-engine</artifactId>

    <version>5.22.0</version>

</dependency>

<dependency>

    <groupId>junit</groupId>

    <artifactId>junit</artifactId>

    <version>4.12</version>

    <!--<scope>test</scope>-->

</dependency>

 

添加打包工具

<plugin>     <groupId>org.springframework.boot</groupId>     <artifactId>spring-boot-maven-plugin</artifactId>     <version>1.5.3.RELEASE</version>     <executions>         <execution>             <goals>                 <goal>repackage</goal>             </goals>         </execution>     </executions> </plugin> <plugin>     <groupId>org.springframework.boot</groupId>     <artifactId>spring-boot-maven-plugin</artifactId> </plugin>

 

 

代码

 

新建 类ProcessInstanceTest

 

package com.example.springactive;

import
org.activiti.engine.ProcessEngine;
import
org.activiti.engine.ProcessEngineConfiguration;
import
org.activiti.engine.RepositoryService;
import
org.activiti.engine.history.HistoricProcessInstance;
import
org.activiti.engine.history.HistoricTaskInstance;
import
org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration;
import
org.activiti.engine.repository.Deployment;
import
org.activiti.engine.repository.ProcessDefinition;
import
org.activiti.engine.runtime.ProcessInstance;
import
org.activiti.engine.task.Task;
import
org.junit.Test;

import
java.io.InputStream;
import
java.util.List;
import
java.util.zip.ZipInputStream;

/**
 *
流程实例,任务,执行对象控制流程的执行
 * @author lhy
 *
 */

public class ProcessInstanceTest {

    ProcessEngineConfiguration
cfg = new StandaloneProcessEngineConfiguration()
            .setJdbcUrl(
"jdbc:mysql://127.0.0.1/activiti?serverTimezone=UTC")
            .setJdbcUsername(
"activiti")
            .setJdbcPassword(
"123456")
            .setJdbcDriver(
"com.mysql.jdbc.Driver")
            .setDatabaseSchemaUpdate(ProcessEngineConfiguration.
DB_SCHEMA_UPDATE_TRUE);

    ProcessEngine processEngine = cfg.buildProcessEngine();
   
String pName = processEngine.getName();
   
String ver = ProcessEngine.VERSION;
  
// System.out.println("ProcessEngine [" + pName + "] Version: [" + ver + "]");


   
public String    regProcess(String fileName ){
//       fileName = "";
       
RepositoryService repositoryService = processEngine.getRepositoryService();
       
Deployment deployment = repositoryService.createDeployment()
                .addClasspathResource(fileName).deploy()
//myProcess_1   onboarding.bpmn20.xml
       
ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery()
                .deploymentId(deployment.getId()).singleResult()
;
        return  
processDefinition.getId();

    
}


   
/**
     * 1.
部署流程定义(从zip)
     */
   
@Test
   
public void deploymentProcess_zip(){
        InputStream in =
this.getClass().getClassLoader().getResourceAsStream("MyProcess.zip");
       
ZipInputStream zipInputStream = new ZipInputStream(in);
       
Deployment deployment = processEngine.getRepositoryService()                    //与流程定义和部署对象相关的Service
               
.createDeployment()                                                     //创建一个部署对象
               
.name("流程实例定义")                                                         //添加部署的名称
               
.addZipInputStream(zipInputStream)                                      //指定zip格式的文件完成部署
               
.deploy();                                                              //完成部署
       
System.out.println("部署ID:"+deployment.getId());
       
System.out.println("部署名称:"+deployment.getName());
   
}

   
/**
     * 2.
启动流程实例
     */
   
@Test
   
public String  startProcessInstance(String processDefinitionKey){

        ProcessInstance pi =
processEngine.getRuntimeService()        //与正在执行的流程实例和执行对象相关的Service
               
.startProcessInstanceByKey(processDefinitionKey);     //使用流程定义的key启动流程实例,key对应myProcess.bpmn文件中id的属性值,使用key值启动,默认是按照最新版本的流程定义启动
       
System.out.println("流程实例ID:"+pi.getId());                    //流程实例ID:1301
       
System.out.println("流程定义ID:"+pi.getProcessDefinitionId());   //流程定义ID:myProcess:10:1204
       
return pi.getId();
   
}

   
/**
     * 3.
查询当前人的个人任务
     */
   
@Test
   
public String  SelectByPersonalTask( String assignee ){

        List<Task> list =
processEngine.getTaskService()               //与正在执行的任务管理相关的Service
               
.createTaskQuery()                                     //创建任务查询对象
               
/**查询条件(where部分)*/
              
// .taskAssignee(assignee)                                //指定个人任务查询,指定办理人
//          .taskCandidateUser(candidateUser)                      //组任务的办理人查询
//                 .processDefinitionId(assignee)              //使用流程定义ID查询
        
.processInstanceId(assignee)                  //使用流程实例ID查询
//          .executionId(executionId)                              //使用执行对象ID查询
               
/**排序*/
               
.orderByTaskCreateTime().asc()                         //使用创建时间的升序排列
               
/**返回结果集*/
//          .singleResult()                                        //返回惟一结果集
//          .count()                                               //返回结果集的数量
//          .listPage(firstResult, maxResults);                    //分页查询
               
.list();                                               //返回列表
       
if(list!=null && list.size()>0){
            String rst =
"";
            for
(Task task : list){
                System.
out.println("任务ID:"+task.getId());
               
System.out.println("任务名称:"+task.getName());
               
System.out.println("任务的创建时间:"+task.getCreateTime());
               
System.out.println("任务的办理人:"+task.getAssignee());
               
System.out.println("流程实例ID:"+task.getProcessInstanceId());
               
System.out.println("执行对象ID:"+task.getExecutionId());
               
System.out.println("流程定义ID:"+task.getProcessDefinitionId());
               
System.out.println("########################################################");
              
rst = rst+","+task.getId();
           
}
           
return rst;
       
}
       
return "没有找到";
   
}

   
/**
     * 4.
完成我的任务
     */
   
@Test
   
public String  completePersonalTask( String taskId){

       
processEngine.getTaskService()                                 //与正在执行的任务管理相关的Service
               
.complete(taskId);
       
System.out.println("完成任务:任务ID:"+taskId);
        return
"完成任务:任务ID:"+taskId;
   
}

   
/**
     * 5.
查询流程状态(判断流程正在执行,还是结束)
     */
   
@Test
   
public String  isProcessEnd(String processInstanceId)  {
        ProcessInstance pi =
processEngine.getRuntimeService()          //表示正在执行的流程实例和执行对象
               
.createProcessInstanceQuery()                           //创建流程实例查询
               
.processInstanceId(processInstanceId)                   //使用流程实例ID查询
               
.singleResult();
        if
(pi == null){
            System.
out.println("流程已经结束");
            return
"流程已经结束";
       
}else{
            System.
out.println("流程没有结束");
            return
"流程没有结束";
       
}
    }

   
/**
     * 6.
查询历史任务(后面讲)
     */
   
@Test
   
public void findHistoryTask(){
        String taskAssignee =
"海哥";
       
List<HistoricTaskInstance> list = processEngine.getHistoryService()         //与历史数据(历史表)相关的Service
               
.createHistoricTaskInstanceQuery()                                  //创建历史任务实例查询
               
.taskAssignee(taskAssignee)                                         //指定历史任务的办理人
               
.list();
        if
(list !=null && list.size()>0){
           
for(HistoricTaskInstance hti:list){
                System.
out.println(hti.getId()+"    "+hti.getName()+"    "+hti.getProcessInstanceId()+"   "+hti.getStartTime()+"   "+hti.getEndTime()+"   "+hti.getDurationInMillis());
               
System.out.println("################################");
           
}
        }
    }

   
/**
     * 7.
查询历史流程实例(后面讲)
     */
   
@Test
   
public void findHistoryProcessInstance(){
        String processInstanceId =
"1301";
       
HistoricProcessInstance hpi = processEngine.getHistoryService()             //与历史数据(历史表)相关的Service
               
.createHistoricProcessInstanceQuery()                               //创建历史流程实例查询
               
.processInstanceId(processInstanceId)                               //使用流程实例ID查询
               
.singleResult();
       
System.out.println(hpi.getId()+"    "+hpi.getProcessDefinitionId()+"    "+hpi.getStartTime()+"    "+hpi.getEndTime()+"     "+hpi.getDurationInMillis());
   
}
}

 

 

 

新建类型regProcess

package com.example.springdemo;





import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RestController;





@RestController

public class regProcess {



    @RequestMapping("/regProcess")

    public String regProcess(String fname ) {

        ProcessInstanceTest abc = new  ProcessInstanceTest();



        String  rest = abc.regProcess(""+fname);

        return rest;

    }



    @RequestMapping("/startProcessInstance")

    public String startProcessInstance(String processName ) {

        ProcessInstanceTest abc = new ProcessInstanceTest();

       String rest =  abc.startProcessInstance(processName);

        return rest;

    }



    @RequestMapping("/SelectByPersonalTask")

    public String SelectByPersonalTask(String processid ) {

        ProcessInstanceTest abc = new ProcessInstanceTest();



        String rest =  abc.SelectByPersonalTask(processid);

        return rest;

    }



    @RequestMapping("/completePersonalTask")

    public String completePersonalTask(String processid ) {

        ProcessInstanceTest abc = new ProcessInstanceTest();



        String rest =  abc.completePersonalTask(processid);

        return rest;

    }



    @RequestMapping("/isProcessEnd")

    public String isProcessEnd(String processid ) {

        ProcessInstanceTest abc = new ProcessInstanceTest();



        String rest =  abc.isProcessEnd(processid);

        return rest;

    }



}

 

 

 

执行打包程序


部署:

 

 

如果部署在linux 服务器上, 需要后台运行

Nohup java –jar ***.Jar

 

 

然后记得打关闭防火墙

 

 

 


测试:

注册

http://127.0.0.1:8080/regProcess?fname=qzsh.bpmn

17504

启动一个实例

http://127.0.0.1:8080/startProcessInstance?processName=qzsh

 

 

查询任务节点

 

http://127.0.0.1:8080/SelectByPersonalTask?processid=12501

12504

完成某个节点

 

http://127.0.0.1:8080/completePersonalTask?processid=12504

 

检查是否完成:

http://127.0.0.1:8080/isProcessEnd?processid=27501

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值