最全2024全网最全Activiti7教程03(Activiti7基本操作-欢迎收藏),从头到尾,都是精华

最后

现在其实从大厂招聘需求可见,在招聘要求上有高并发经验优先,包括很多朋友之前都是做传统行业或者外包项目,一直在小公司,技术搞的比较简单,没有怎么搞过分布式系统,但是现在互联网公司一般都是做分布式系统。

所以说,如果你想进大厂,想脱离传统行业,这些技术知识都是你必备的,下面自己手打了一份Java并发体系思维导图,希望对你有所帮助。

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

act_re_procdef :流程定义表,部署每个新的流程定义都会在这张表中增加一条记录

在这里插入图片描述

act_ge_bytearray :流程资源表,流程部署的 bpmn文件和png图片会保存在该表中

在这里插入图片描述

2 启动流程实例


流程定义部署在Activiti后就可以通过工作流管理业务流程,也就是说上边部署的出差申请流程可以使用了。

针对该流程,启动一个流程表示发起一个新的出差申请单,这就相当于Java类和Java对象的关系,类定义好了后需要new创建一个对象使用,当然可以new出多个对象来,对于出差申请流程,张三可以发起一个出差申请单需要启动一个流程实例。

/**

  • 启动一个流程实例

*/

@Test

public void test05(){

// 1.创建ProcessEngine对象

ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();

// 2.获取RuntimeService对象

RuntimeService runtimeService = engine.getRuntimeService();

// 3.根据流程定义的id启动流程

String id= “evection”;

ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(id);

// 4.输出相关的流程实例信息

System.out.println(“流程定义的ID:” + processInstance.getProcessDefinitionId());

System.out.println(“流程实例的ID:” + processInstance.getId());

System.out.println(“当前活动的ID:” + processInstance.getActivityId());

}

输出内容:

在这里插入图片描述

启动流程实例涉及到的表结构

act_hi_actinst 流程实例执行历史

act_hi_identitylink 流程的参与用户的历史信息

act_hi_procinst 流程实例历史信息

act_hi_taskinst 流程任务历史信息

act_ru_execution 流程执行信息

act_ru_identitylink 流程的参与用户信息

act_ru_task 任务信息

3 任务查找


流程启动后,任务的负责人就可以查询自己当前能够处理的任务了,查询出来的任务都是当前用户的待办任务

/**

  • 任务查询

*/

@Test

public void test06(){

String assignee =“zhansan”;

ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();

// 任务查询 需要获取一个 TaskService 对象

TaskService taskService = engine.getTaskService();

// 根据流程的key和任务负责人 查询任务

List list = taskService.createTaskQuery()

.processDefinitionKey(“evection”)

.taskAssignee(assignee)

.list();

// 输出当前用户具有的任务

for (Task task : list) {

System.out.println(“流程实例id:” + task.getProcessInstanceId());

System.out.println(“任务id:” + task.getId());

System.out.println(“任务负责人:” + task.getAssignee());

System.out.println(“任务名称:” + task.getName());

}

}

输出结果

在这里插入图片描述

4 流程任务处理


任务负责人查询出来了待办的人,选择任务进行处理,完成任务

/**

  • 流程任务的处理

*/

@Test

public void test07(){

ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();

TaskService taskService = engine.getTaskService();

Task task = taskService.createTaskQuery()

.processDefinitionKey(“evection”)

.taskAssignee(“zhansan”)

.singleResult();

// 完成任务

taskService.complete(task.getId());

}

zhangsan处理了这个操作后,流程就流转到了 lisi处

在这里插入图片描述

然后就是不同的用户登录,然后查询任务处理任务,直到任务流程走完。

5 流程定义的查询


查询流程相关的信息,包括流程的定义,流程的部署,流程定义的版本

/**

  • 查询流程的定义

*/

@Test

public void test08(){

ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();

RepositoryService repositoryService = engine.getRepositoryService();

// 获取一个 ProcessDefinitionQuery对象 用来查询操作

ProcessDefinitionQuery processDefinitionQuery = repositoryService.createProcessDefinitionQuery();

List list = processDefinitionQuery.processDefinitionKey(“evection”)

.orderByProcessDefinitionVersion() // 安装版本排序

.desc() // 倒序

.list();

// 输出流程定义的信息

for (ProcessDefinition processDefinition : list) {

System.out.println(“流程定义的ID:” + processDefinition.getId());

System.out.println(“流程定义的name:” + processDefinition.getName());

System.out.println(“流程定义的key:” + processDefinition.getKey());

System.out.println(“流程定义的version:” + processDefinition.getVersion());

System.out.println(“流程部署的id:” + processDefinition.getDeploymentId());

}

}

输出结果

流程定义的ID:evection:1:12504

流程定义的name:出差申请单

流程定义的key:evection

流程定义的version:1

流程部署的id:12501

6 流程的删除


/**

  • 删除流程

*/

@Test

public void test09(){

ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();

RepositoryService repositoryService = engine.getRepositoryService();

// 删除流程定义,如果该流程定义已经有了流程实例启动则删除时报错

repositoryService.deleteDeployment(“12501”);

// 设置为TRUE 级联删除流程定义,及时流程有实例启动,也可以删除,设置为false 非级联删除操作。

//repositoryService.deleteDeployment(“12501”,true);

}

注意:项目开发中级联删除操作的权限一般只开发给超级管理员使用。

7 流程资源的下载


现在我们的流程资源文件已经上传到了数据库中,如果其他用户想要查看这些资源,可以从数据库中把这些资源下载到本地。

解决方案:

  1. jdbc对blob类型处理clob类型数据读取出来就可以了。

  2. 使用activiti的api来实现操作。

使用activiti的api来操作我们需要添加commons-io的依赖

commons-io

commons-io

2.6

实现代码

/**

  • 读取数据库中的资源文件

*/

@Test

public void test10() throws Exception{

// 1.得到ProcessEngine对象

ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();

// 2.获取RepositoryService对象

RepositoryService repositoryService = engine.getRepositoryService();

// 3.得到查询器

ProcessDefinition definition = repositoryService.createProcessDefinitionQuery()

.processDefinitionKey(“evection”)

.singleResult();

// 4.获取流程部署的id

String deploymentId = definition.getDeploymentId();

// 5.通过repositoryService对象的相关方法 来获取图片信息和bpmn信息

// png图片

InputStream pngInput = repositoryService

.getResourceAsStream(deploymentId, definition.getDiagramResourceName());

// bpmn 文件的流

InputStream bpmnInput = repositoryService

.getResourceAsStream(deploymentId, definition.getResourceName());

// 6.文件的保存

File filePng = new File(“d:/evection.png”);

File fileBpmn = new File(“d:/evection.bpmn”);

OutputStream pngOut = new FileOutputStream(filePng);

OutputStream bpmnOut = new FileOutputStream(fileBpmn);

IOUtils.copy(pngInput,pngOut);

IOUtils.copy(bpmnInput,bpmnOut);

pngInput.close();

总结:心得体会

既然选择这个行业,选择了做一个程序员,也就明白只有不断学习,积累实战经验才有资格往上走,拿高薪,为自己,为父母,为以后的家能有一定的经济保障。

学习时间都是自己挤出来的,短时间或许很难看到效果,一旦坚持下来了,必然会有所改变。不如好好想想自己为什么想进入这个行业,给自己内心一个答案。

面试大厂,最重要的就是夯实的基础,不然面试官随便一问你就凉了;其次会问一些技术原理,还会看你对知识掌握的广度,最重要的还是你的思路,这是面试官比较看重的。

最后,上面这些大厂面试真题都是非常好的学习资料,通过这些面试真题能够看看自己对技术知识掌握的大概情况,从而能够给自己定一个学习方向。包括上面分享到的学习指南,你都可以从学习指南里理顺学习路线,避免低效学习。

大厂Java架构核心笔记(适合中高级程序员阅读):

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

面试大厂,最重要的就是夯实的基础,不然面试官随便一问你就凉了;其次会问一些技术原理,还会看你对知识掌握的广度,最重要的还是你的思路,这是面试官比较看重的。

最后,上面这些大厂面试真题都是非常好的学习资料,通过这些面试真题能够看看自己对技术知识掌握的大概情况,从而能够给自己定一个学习方向。包括上面分享到的学习指南,你都可以从学习指南里理顺学习路线,避免低效学习。

大厂Java架构核心笔记(适合中高级程序员阅读):

[外链图片转存中…(img-RenkP6Cq-1715549650735)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

  • 26
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值