Activiti6.0实战(一)常用操作及表数据变化

本文作者:SpringBoot_ZYL

意见反馈:[email protected]

文章来源:https://blog.csdn.net/gozhuyinglong

版权声明:本文版权归作者所有,转载请注明出处


一、流程部署

1.部署流程

下面代码是通过ZipInputStream方式进行部署,也是最常用的一种方式。

流程部署后,会生成“部署对象”和“流程定义”。

@Autowired
Repositoryservice repositoryService;

ZipInputStream zipInputStream = new ZipInputStream(inputStream);
Deployment deployment = repositoryService.createDeployment() // 创建部署
            .name(fileName) // 设置部署名称
            .addZipInputStream(zipInputStream) // 根据zip输入流部署
            .deploy(); // 开始部署

流程部署后,会操作如下表

act_re_deployment:插入部署对象,仅记录部署名及部署时间

act_ge_bytearray:插入BPMN的两个文件(.bpmn.png),包括部署ID

扫描二维码关注公众号,回复: 10867959 查看本文章

act_re_procdef:插入流程定义信息,包括部署ID,流程的Key和Name,版本,两个资源文件


select * from act_re_procdef; --流程定义
select * from act_re_deployment; -- 流程部署
select * from act_ge_bytearray; -- 存储二进制文件

2.查询流程定义列表

对流程定义查询前提是要创建流程定义查询,即:createProcessDefinitionQuery()


@Autowired
Repositoryservice repositoryService;

String key = "%process%";
List<ProcessDefinition> list = repositoryService
            .createProcessDefinitionQuery() // 创建流程定义查询
            .latestVersion() // 只查询最新版本
            .processDefinitionKeyLike(key) // 根据Key进行模糊查询
            .list(); // 返回列表

3.根据部署ID查询部署

对部署进行查询时,要提前创建部署查询,即:createDeploymentQuery()


@Autowired
Repositoryservice repositoryService;

String deploymentId = "5522";
repositoryService.createDeploymentQuery() // 创建部署查询
        .deploymentId(deploymentId) // 根据部署ID查询
        .singleResult(); // 返回唯一结果

4.删除部署


@Autowired
Repositoryservice repositoryService;

String deploymentId = "5522";
repositoryService.deleteDeployment(deploymentId); // 根据部署ID删除流程部署

删除部署会操作如下表,若级联删除,会将运行中的实例与历史实例一同删除

act_re_deployment:删除部署对象

act_ge_bytearray:删除资源文件

act_re_procdef:删除流程定义信息

二、启动流程

1.根据流程定义的Key启动

流程启动后,会创建“流程实例”和“任务”,而我们需要将我们的业务与流程实例进行绑定,这样才能确定我们的业务是使用的哪个流程实例。

流程定义可以理解为一个流程的模板,只能有一个;而流程实例是根据流程定义生成的一个具体的实例,可以有多个,一个审批业务对应一个流程实例。


@Autowired
RuntimeService runtimeService;

String processDefinitionId = "333";
runtimeService.startProcessInstanceByKey(processDefinitionId);

流程启动后,会操作如下表

act_ru_execution:执行流程实例表,核心,启动后会生成一个流程实例和待执行的任务节点

act_ru_task:用户任务表,待执行的任务

act_ru_identitylink:用户身份关系表,存储待执行任务的用户关系

act_hi_taskinst:历史用户任务表,存储所有已执行或待执行的用户任务历史

act_hi_procinst:历史流程实例表,存储流程实例

act_hi_actinst:历史活动节点表,存储所有已执行的节点(各类节点)

act_hi_identitylink:历史用户身份关系表,历史用户任务的关系表


select * from act_ru_execution; --执行流程实例表
select * from act_ru_task; -- 用户任务表
select * from act_ru_identitylink; -- 用户身份关系表
select * from act_hi_taskinst; -- 历史用户任务表
select * from act_hi_procinst; -- 历史流程实例表
select * from act_hi_actinst; -- 历史活动节点表
select * from act_hi_identitylink; -- 历史用户身份关系表

三、执行任务

1.查看我的任务列表


@Autowired
TaskService taskService;

String assignee = "可以是办理人的ID";
int startPage = 1;
int pageSize = 10;
List<Task> list = taskService.createTaskQuery() // 创建任务查询
            .taskAssignee(assignee) // 按照当前输人查询
            .orderByTaskCreateTime().desc() // 按任务创建时间排序,倒序排序
            .listPage(startPage, pageSize); // 分页查询出任务列表

2.执行任务

执行任务后,会自动根据条件跳转到下一任务


@Autowired
TaskService taskService;

String taskId = "20005";
taskService.complete(taskId); // 根据任务ID执行任务

执行任务后,表数据发生的变化

act_ru_execution:待执行的用户任务节点换成下一个用户任务节点

act_ru_task:当前待执行任务转历史,插入下一个任务

act_ru_identitylink:插入下一任务的用户关系

act_hi_taskinst:修改当前用户任务的完成时间,并插入一用户任务

act_hi_actinst:修改当前活动节点的完成时间,并插入下一个活动节点

act_hi_identitylink:插入下一任务的用户关系

3.任务结束

执行完最后一个节点后,流程会自动结束。

流程结束后,表格数据变化。

act_ru_execution:删除当前流程实例的运行时执行数据

act_ru_task:删除当前流程实例的运行时任务数据

act_ru_identitylink:删除当前流程实例的运行时用户关系数据

可通过如下方式判断流程实例是否结束

@Autowired
RuntimeService runtimeService

String processInstanceId = "2200";
ProcessInstance singleResult = runtimeService.createProcessInstanceQuery() // 创建流程实例查询
    .processInstanceId(processInstanceId) // 根据流程实例ID查询
    .singleResult(); // 返回唯一结果
if(singleResult == null){
    System.out.println("流程结束");
}


发布了14 篇原创文章 · 获赞 39 · 访问量 12万+

猜你喜欢

转载自blog.csdn.net/gozhuyinglong/article/details/80359133