基于Activiti工作流引擎(三)

流程实例与任务的执行

package com;
import java.io.InputStream;
import java.util.List;
import java.util.zip.ZipInputStream;
import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.history.HistoricTaskInstance;
import org.activiti.engine.repository.Deployment;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;
import org.junit.Test;
public class DefinitionInstance {
    ProcessEngine processEngine=ProcessEngines.getDefaultProcessEngine();
    @Test
    /**
     * 部署流程定义
     * @throws Exception
     */
    public void deployZip()throws Exception{
    InputStream in= this.getClass().getClassLoader().getResourceAsStream("diagrams/MyProcess.zip");
    ZipInputStream zipInputStream=new ZipInputStream(in);
    //获取仓库服务,从类的路径下加载完成部署
    Deployment deployment=  processEngine.getRepositoryService().createDeployment()
                            .name("请假流程")   //添加部署规则的显示别名
                            .addZipInputStream(zipInputStream)//使用zip输入流完成部署
                            .deploy();//完成发布
    System.out.println(deployment.getId()+"           "+deployment.getName());  
    }
    /**
     * 启动流程
     * 当流程到达一个节点是会在act_ru_execution表新增一条记录
     * 如果是用户任务节点,同时也会在act_ru_task添加一条记录(任务办理人,办理时间)
     */
    @Test
    public void startProcess()throws Exception{
    //按照流程定义执行helloWorld:10:704
    ProcessInstance pi=processEngine.getRuntimeService()
                      //通过流程定义的key启动流程,会启动最高版本的流程
                      .startProcessInstanceByKey("helloWorld");
    System.out.println("pid:"+pi.getId()+",activityId:"+pi.getActivityId()+",pdId:"+pi.getProcessInstanceId());
    }
    /**
     * 查询个人任务
     * @throws Exception
     */
    @Test
    public void queryPersonalTask()throws Exception{
        String assignee="李四";
        List list=  processEngine.getTaskService()
                            .createTaskQuery()
                            .taskAssignee(assignee)
                            .orderByTaskCreateTime().desc()
                            .list();
        System.out.println("=============【"+assignee+"】个人任务列表=============");
        for (Task task : list) {
            System.out.println("id:"+task.getId());
            System.out.println("name:"+task.getName());
            System.out.println("createTime:"+task.getCreateTime());
            System.out.println("assignee:"+task.getAssignee());
        }
    }
    /**
     * 完成个人任务
     * @throws Exception
     * 对于执行完的任务,activiti将从act_ru_task表中删除该任务,下一个任务会被插入进来
     */
    @Test
    public void completePersonalTask()throws Exception{
        String taskId="306";
        processEngine.getTaskService().complete(taskId);
        System.out.println("完成任务完成");
    }
    /**
     * 完成个人所有的任务
     * @throws Exception
     */
    @Test
    public void completeAllTask()throws Exception{
        String assignee="王五";
        List list=  processEngine.getTaskService()
                            .createTaskQuery()
                            .taskAssignee(assignee)
                            .orderByTaskCreateTime().desc()
                            .list();
        if(list!=null){
            for (Task task : list) {
                processEngine.getTaskService().complete(task.getId());
            }
        }
        System.out.println("已经批量完成任务!");
    }
    /**
     * 查询流程状态(判断是否在执行还是已经结束)
     * @throws Exception
     */
    @Test
    public void queryProcessState()throws Exception{
        String processInstance="801";
        ProcessInstance pi=processEngine.getRuntimeService().createProcessInstanceQuery()//创建流程实例查询,查询正在执行的流程实例
                                .processInstanceId(processInstance)//按照流程实例ID查询
                                .singleResult();//返回唯一结果
        if(pi!=null){
            System.out.println("当前流程实例在:"+pi.getActivityId());
        }else{
            System.out.println("流程已经结束");
        }
    }
    /**
     * 查询历史任务
     * @throws Exception
     */
    @Test
    public void queryHistoryTask()throws Exception{
        String taskAssignee="张三";
        List historicTaskInstances= processEngine.getHistoryService()
            .createHistoricTaskInstanceQuery()
            .taskAssignee(taskAssignee)
            .orderByHistoricTaskInstanceEndTime()
            .asc()
            .list();
        if(historicTaskInstances!=null){
            for (HistoricTaskInstance historicTaskInstance : historicTaskInstances) {
                System.out.println("任务id:"+historicTaskInstance.getId());
                System.out.println("任务名称:"+historicTaskInstance.getName());
                System.out.println("流程实例ID:"+historicTaskInstance.getProcessInstanceId());
                System.out.println("任务办理人:"+historicTaskInstance.getAssignee());
                System.out.println("执行对象:"+historicTaskInstance.getExecutionId());
                System.out.println("时间:"+historicTaskInstance.getStartTime()+"  "+historicTaskInstance.getEndTime()+"  "+historicTaskInstance.getDurationInMillis());
            }
        }
    }

}

你可能感兴趣的:(工作流引擎学习)