public void test03(){
// 1.获取ProcessEngine对象
ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();
// 2.获取RepositoryService进行部署操作
RepositoryService service = engine.getRepositoryService();
// 3.使用RepositoryService进行部署操作
Deployment deploy = service.createDeployment()
.addClasspathResource(“bpmn/evection.bpmn”) // 添加bpmn资源
.addClasspathResource(“bpmn/evection.png”) // 添加png资源
.name(“出差申请流程”)
.deploy();// 部署流程
// 4.输出流程部署的信息
System.out.println(“流程部署的id:” + deploy.getId());
System.out.println(“流程部署的名称:” + deploy.getName());
}
日志中查看到相关的输出信息
1.2 部署zip文件
将bpmn文件和png文件两个打包为一个zip文件,统一上传
/**
- 通过一个zip文件来部署操作
*/
@Test
public void test04(){
// 定义zip文件的输入流
InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream(“bpmn/evection.zip”);
// 对 inputStream 做装饰
ZipInputStream zipInputStream = new ZipInputStream(inputStream);
ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();
RepositoryService repositoryService = engine.getRepositoryService();
Deployment deploy = repositoryService.createDeployment()
.addZipInputStream(zipInputStream)
.name(“出差申请流程”)
.deploy();
// 4.输出流程部署的信息
System.out.println(“流程部署的id:” + deploy.getId());
System.out.println(“流程部署的名称:” + deploy.getName());
}
上传后的数据库中的数据和单个文件上传其实是一样的。
1.3 操作数据表
流程定义部署后操作activiti中的三张表
act_re_deployment: 流程定义部署表,每部署一次就增加一条记录
act_re_procdef :流程定义表,部署每个新的流程定义都会在这张表中增加一条记录
act_ge_bytearray :流程资源表,流程部署的 bpmn文件和png图片会保存在该表中
流程定义部署在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 任务信息
流程启动后,任务的负责人就可以查询自己当前能够处理的任务了,查询出来的任务都是当前用户的待办任务
/**
- 任务查询
*/
@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());
}
}
输出结果
任务负责人查询出来了待办的人,选择任务进行处理,完成任务
/**
- 流程任务的处理
*/
@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处
然后就是不同的用户登录,然后查询任务处理任务,直到任务流程走完。
查询流程相关的信息,包括流程的定义,流程的部署,流程定义的版本
/**
- 查询流程的定义
*/
@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());
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)
笔者福利
以下是小编自己针对马上即将到来的金九银十准备的一套“面试宝典”,不管是技术还是HR的问题都有针对性的回答。
有了这个,面试踩雷?不存在的!
回馈粉丝,诚意满满!!!
一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!
AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算
4702)]
[外链图片转存中…(img-NFapRz9H-1712130844703)]
[外链图片转存中…(img-MXfHIO5d-1712130844704)]
一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!
AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算