跳转至

0.总结

1.Execution 执行对象

按流程定义的规则执行一次的过程

对应的表:

  • act_ru_execution , 正在执行的信息
  • act_hi_procinst , 已经执行完成的历史流程实例信息
  • act_hi_actinst , 存放历史所有完成的活动

2.ProcessInstance 流程实例

特指流程开始到结束的那个最大的执行分支,一个执行的流程中,流程实例只有一个.

注意:

  • 如果是单例流程 , 执行对象id就是流程实例id
  • 如果一个流程有分支和聚合 , 那么执行对象id和流程实例id就不同
  • 一个流程中只有一个流程实例 , 执行对象会有多个

3.Task 任务

执行到某个任务环节时生成的人物信息

对应的表:

  • act_run_task , 正在执行的任务信息
  • act_hi_taskinst , 已经完成的历史任务信息

4. 相关ID总结

  • 部署id
  • act_re_deployment - id
  • 流程定义id
  • act_re_procdef - id
  • 流程实例id
  • act_ru_execution - id
  • 执行实例id
  • act_ru_task - execution_id
  • 任务id
  • act_ru_task - id

1.启动流程实例

  • processDefinitionId 流程定义ID
  • processDefinitionKey 流程定义KEY
  • variables 流程变量
  • businesskey 业务表单表示

1. 根据流程定义ID启动

runtimeService.startProcessInstanceById(processDefinitionId);
runtimeService.startProcessInstanceById(processDefinitionId, variables);
runtimeService.startProcessInstanceById(processDefinitionId, businessKey);
runtimeService.startProcessInstanceById(processDefinitionId, businessKey, variables);

2. 根据流程定义KEY启动

runtimeService.startProcessInstanceByKey(processDefinitionKey);
runtimeService.startProcessInstanceByKey(processDefinitionKey, variables);
runtimeService.startProcessInstanceByKey(processDefinitionKey, businessKey);
runtimeService.startProcessInstanceByKey(processDefinitionKey, businessKey, variables)

3.常用的方法

runtimeService.startProcessInstanceByKey(processDefinitionKey, businessKey);
runtimeService.startProcessInstanceByKey(processDefinitionKey, businessKey, variables);

4.演示

String processDefinitionKey ="level";
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(processDefinitionKey);
System.out.println("流程启动成功...");
System.out.println("流程执行ID="+processInstance.getId());
System.out.println("流程定义ID="+processInstance.getProcessDefinitionId());
System.out.println("流程实例ID="+processInstance.getProcessInstanceId());

结果

流程启动成功...
流程执行ID=2501
流程定义ID=level:1:4
流程实例ID=2501
  • 当流程同时处理两条线路时,流程执行id和流程实例id就会不同

2.查询我的个人任务

    /**
     * 查询我的个人任务
     */
    @Test
    public void queryMyTask() {
        TaskService taskService = this.processEngine.getTaskService();
        String assignee = "张三";
        List<Task> list = taskService.createTaskQuery()
                // 条件
                .taskAssignee(assignee)
                // .deploymentId(deploymentId) //根据部署id
                // .deploymentIdIn(deploymentIds) //根据多个部署id (少用)
                // .processDefinitionId(processDefinitionId) //根据流程定义id
                // .processDefinitionKey(processDefinitionKey) //根据流程定义key
                // .processDefinitionName(processDefinitionName) //根据流程name
                // .processInstanceId(processInstanceId) //根据流程实例id
                // .processInstanceBusinessKey(processInstanceBusinessKey) //根据流程业务key
                // .processVariableValueEquals(variableValue) // 根据唯一的vars
                // .processVariableValueGreaterThan(name, value) //根据指定的vars

                // 排序
                .orderByTaskCreateTime().asc()
                // 结果集
                .list();
        // .listPage(firstResult, maxResults);
        // .count();
        // .singleResult();

        if (list != null && list.size() > 0) {
            for (Task task : list) {
                System.out.println("任务id=" + task.getId());
                System.out.println("任务办理人=" + task.getAssignee());
                System.out.println("任务执行id=" + task.getExecutionId());
                System.out.println("任务实例id=" + task.getProcessInstanceId());
                System.out.println("任务名称=" + task.getName());
                System.out.println("流程定义id=" + task.getProcessDefinitionId());
                System.out.println("任务创建时间=" + task.getCreateTime());
            }
        }
    }

结果

任务id=5004
任务办理人=张三
任务执行id=5001
任务实例id=5001
任务名称=提交申请
流程定义id=level:1:4
任务创建时间=Sat May 18 16:29:34 CST 2019

3.办理任务

/**
     * 办理流程
     */
@Test
public void completeTask() {
    TaskService taskService = this.processEngine.getTaskService();
    String taskId = "5004";
    // 根据任务id
    taskService.complete(taskId);
    // 根据任务id完成并指定流程变量
    //      taskService.complete(taskId, variables);

    System.out.println("任务完成");
}

4.查询流程状态

    /**
     * 判断流程是否结束
     * 
     * 可以更新业务表里的状态
     */
    @Test
    public void isComplete() {
        RuntimeService runtimeService = this.processEngine.getRuntimeService();
        // 已知流程实例id
        String processInstanceId = "5004";
        ProcessInstance singleResult = runtimeService.createProcessInstanceQuery().processInstanceId(processInstanceId)
                .singleResult();
        if (singleResult == null) {
            System.out.println("流程__结束");
        } else {
            System.out.println("流程__正在执行");
        }

        // 已知任务id
        String taskId = "7502";
        TaskService taskService = this.processEngine.getTaskService();
        Task task = taskService.createTaskQuery().taskId(taskId).singleResult();
        String instanceId = task.getProcessInstanceId();
        ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId(instanceId)
                .singleResult();
        if (processInstance == null) {
            System.out.println("流程__结束");
        } else {
            System.out.println("流程__正在执行");
        }
    }

5.查询历史任务

    /**
     * 查询历史任务
     */
    @Test
    public void queryHistoryTask() {
        HistoryService historyService = this.processEngine.getHistoryService();
        List<HistoricTaskInstance> list = historyService.createHistoricTaskInstanceQuery().list();
        if (list!=null&&list.size()>0) {
            for (HistoricTaskInstance hi : list) {
                System.out.println("任务id="+hi.getId());
            }
        }
    }

6.查询历史流程实例

    /**
     * 查询历史流程实例
     */
    @Test
    public void queryHistoryProcess() {
        HistoryService historyService = this.processEngine.getHistoryService();
        List<HistoricProcessInstance> list = historyService.createHistoricProcessInstanceQuery().list();
        if (list != null && list.size() > 0) {
            for (HistoricProcessInstance hi : list) {
                System.out.println("任务id=" + hi.getId());
            }
        }
    }