前言

本文主要将如何使用IDEA借助插件创建流程图,并且使用代码部署执行审批

本次的工作流采用的是Activiti,案例是参考黑马程序教学视频员的案例

下载插件

需要两个插件 下载完插件必须重启!

jboss jbmp主要用来bpmn和xml以及png进行文件格式转换和识别

camuda bpmn主要用于画流程模板图,提供各种流程符号


创建流程图

首先在resource下创建一个bpmn目录,将来存放全部的流程图

新建一个出差的工作流模板

创建出来是这样的xml文件

右键进行图画编辑

然后就可以进行设计流程图了

设计流程图

首先右键新建一个开始节点

右键空白区域,修改id为myEvection

修改这个流程模板的名称 也就是修改name

然后新建一个用户任务

点击用户任务给它设置任务名称,也就是对应任务的Name的值

设置用户指定负责人,这里为zhangsan ,也就是对应任务的Assignee选项

这两步骤的意思是指:创建了一个任务,任务名称叫创建出差申请,由张三负责审批

下面继续创建一个流程节点(用户任务),步骤和上面相似

最后需要创建一个结束任务

就是这样的 大概流程为 流程发起->zhangsan->jerry->jack->rose->流程结束

我们需要用把它连起来,也就是使用流向(箭头),一定要连直了,不然会串通不起来的,我下面这个就是错误示范

正确示范如下 所有的节点和曲线都要通过肉眼去连接,是个细心活

到这里使用流程设计器把整个流程设计好了

注意:连线的时候尽量连直了,把图放大了再连会比较好连,不然会有问题!

生成PNG文件

现在我们设计的流程模板只是一个bpmn文件,接下来生成png文件

把我们生成都bpmn文件放在桌面上


然后修改后缀为xml文件

然后进行png图片转化,这样就清晰明了多了

导出到桌面


然后查看,不知道为什么,步骤是反的。。。 我仔细检查了好几遍都没发现问题,应该是版本的问题,或者谁知道可以告诉我

由于上面那个png有问题,我又发现了一种导出流程图的方式

直接在编辑流程图的地方右键空白处,直接导出png到本地,这次的没有问题

创建Activiti数据库

建议参考以下链接 之前写过就不啰嗦了

或者翻我之前的文章

https://blog.csdn.net/weixin_46713508/article/details/125511574?spm=1001.2014.3001.5502

流程部署

现在一个流程我们已经定义好了,接下来就进行部署,把数据持久化到数据库中

首先先创建一个测试类

package com.wyh.test;import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.RepositoryService;
import org.activiti.engine.repository.Deployment;
import org.junit.Test;/*** @program: Activiti01* @description: 测试流程部署* @author: 魏一鹤* @createDate: 2022-07-04 23:27**/public class ActivitiDemo   {//测试流程部署@Testpublic void testDeployment(){// 1.创建ProcessEngineProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();// 2.使用ProcessEngine得到操作数据库的服务(RepositoryService)RepositoryService repositoryService = processEngine.getRepositoryService();// 3.使用RepositoryService进行流程部署,定义一个流程的名字,把bpmn文件和png文件部署到数据库里Deployment deploy = repositoryService.createDeployment().name("出差申请流程")//流程名称.addClasspathResource("bpmn/evection.bpmn") //资源文件 bpmn配置文件.addClasspathResource("bpmn/evection.png") //资源文件 png流程图.disableSchemaValidation()//禁止校验文件.deploy();// 4.输出部署信息System.out.println("流程部署的ID:"+deploy.getId());System.out.println("流程部署的名字:"+deploy.getName());}
}

直接运行

通过日志我们可以发现已经部署流程到数据库里了

开启流程实例

package com.wyh.test;import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.RepositoryService;
import org.activiti.engine.RuntimeService;
import org.activiti.engine.repository.Deployment;
import org.activiti.engine.runtime.ProcessInstance;
import org.junit.Test;/*** @program: Activiti01* @description: 测试流程部署* @author: 魏一鹤* @createDate: 2022-07-04 23:27**/public class ActivitiDemo   {// 启动流程实例@Testpublic void testStartProcess() {// 1.创建ProcessEngineProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();// 2.获取RuntimeServiceRuntimeService runtimeService = processEngine.getRuntimeService();// 3.根据流程定义的id启动流程ProcessInstance instance = runtimeService.startProcessInstanceByKey("myEvection");// 4.输出内容System.out.println("流程定义ID = " + instance.getProcessDefinitionId());System.out.println("流程实例ID = " + instance.getId());System.out.println("当前活动的ID = " + instance.getActivityId());}
}


这样就成功启动流程实例了

完成个人任务

zhangsan查询出个人任务后,完成个人任务,让流程进行到下一步

// 根据任务id完成个人任务
@Test
public void testCompletTask(){// 1 获取流程引擎ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();// 2 获取serviceTaskService taskService = processEngine.getTaskService();// 3 根据任务id查询任务taskService.complete("2505");
}

数据库里面act_ru_task里面的负责人就从当前的zhangsan换成下一个jerry了

任务历史,完成的任务会记录在act_hi_taskinst

完成完整的出差申请

改造下代码,首先jerry进行审批

// 根据任务id完成个人任务
@Test
public void testCompletTask(){// 1 获取流程引擎ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();// 2 获取serviceTaskService taskService = processEngine.getTaskService();// 3 获取jerry在myEvection中对应的任务 我们已知只有一个任务 可使用singleResult获取一个结果集Task task = taskService.createTaskQuery().processDefinitionKey("myEvection") // 流程的key.taskAssignee("jerry")   // 要查询的负责人.singleResult();// 因为可能有多个待办  所以是一个集合System.out.println("流程实例ID:"+task.getProcessInstanceId());System.out.println("任务ID:"+task.getId());System.out.println("任务负责人:"+task.getAssignee());System.out.println("任务名称:"+task.getName());// 4 获取jerry的完成任务taskService.complete(task.getId());}

下一步换成jack,记录到历史表,没有问题


然后是完成jack以及rose的任务,代码基本一样,只需要修改当前审批人,最终代码

// 根据任务id完成个人任务
@Test
public void testCompletTask(){// 1 获取流程引擎ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();// 2 获取serviceTaskService taskService = processEngine.getTaskService();// 3 获取zhangsan在myEvection中对应的任务 我们已知只有一个任务 可使用singleResult获取一个结果集//Task task = taskService.createTaskQuery()//        .processDefinitionKey("myEvection") // 流程的key//        .taskAssignee("jerry")   // 要查询的负责人//        .singleResult();// 因为可能有多个待办  所以是一个集合// 3 获取jerry在myEvection中对应的任务 我们已知只有一个任务 可使用singleResult获取一个结果集//Task task = taskService.createTaskQuery()//        .processDefinitionKey("myEvection") // 流程的key//        .taskAssignee("jerry")   // 要查询的负责人//        .singleResult();// 因为可能有多个待办  所以是一个集合// 3 获取jack在myEvection中对应的任务 我们已知只有一个任务 可使用singleResult获取一个结果集//Task task = taskService.createTaskQuery()//        .processDefinitionKey("myEvection") // 流程的key//        .taskAssignee("jack")   // 要查询的负责人//        .singleResult();// 因为可能有多个待办  所以是一个集合////System.out.println("流程实例ID:"+task.getProcessInstanceId());//System.out.println("任务ID:"+task.getId());//System.out.println("任务负责人:"+task.getAssignee());//System.out.println("任务名称:"+task.getName());// 3 获取rose在myEvection中对应的任务 我们已知只有一个任务 可使用singleResult获取一个结果集Task task = taskService.createTaskQuery().processDefinitionKey("myEvection") // 流程的key.taskAssignee("rose")   // 要查询的负责人.singleResult();// 因为可能有多个待办  所以是一个集合// 4 获取jerry的完成任务taskService.complete(task.getId());}

整个出差申请审批完了,发现act_ru_task表里面没有数据了,因为rose(财务审批)是流程中的最后一个任务了,他做完了以后任务表里面就没有任务了


历史表里面全部记录了整个流程

总结

至此,整个流程就通过Java代码的方式完成了,总结一下,根据不同的操作通过不同的服务实现,查询个人任务和完成个人任务都是通过流程实例的key和当前操作人来查询的

图文详细介绍:使用IDEA通过插件创建流程图解决Activiti工作流部署审批等操作相关推荐

  1. xilinx Vivado的使用详细介绍(2):创建工程、添加文件、综合、实现、管脚约束、产生比特流文件、烧写程序、硬件验证

    xilinx Vivado的使用详细介绍(2):创建工程.添加文件.综合.实现.管脚约束.产生比特流文件.烧写程序.硬件验证 Author:zhangxianhe 新建工程 打开Vivado软件,直接 ...

  2. 微型计算机怎么拆后盖,魅蓝E3后盖怎么打开?魅蓝E3手机后壳拆解步骤图文详细介绍...

    魅蓝E3怎么拆开后盖?3月21日下午,魅蓝发布了"玩得流畅 拍得清晰"的魅蓝E3中端新机,作为E2的后作,带来了更好的拍照水准,另外还提升了处理器和其他特色功能等.而本文主要给大家 ...

  3. SD卡中FAT32文件格式快速入门(图文详细介绍)

    说明: MBR :Master Boot Record ( 主引导记录) DBR :DOS Boot Record ( 引导扇区) FAT :File Allocation Table ( 文件分配表 ...

  4. python利器怎么编程-python 开发利器UliPad(图文详细介绍)

    学习python 最苦恼的就是没有趁手IDE ,之前学java 时 Eclipse 肯定是不二之选.eclipse pydev 也可以开发python,但觉太重了. 所以一直用自带的IDLE ,偶尔也 ...

  5. Xilinx Vivado的使用详细介绍(1):创建工程、编写代码、行为仿真、Testbench

    新建工程 打开Vivado软件,直接在欢迎界面点击Create New Project,或在开始菜单中选择File - New Project即可新建工程. 点击Next 输入工程名称和路径. 选择R ...

  6. 无线路由器文件服务器,TP-Link无线路由器设置USB网络共享的方法图文详细介绍...

    随着信息时代的发展,讯息资料层出不穷,企业或个人会有海量的信息数据需要传输及共享,传统的共享方式不仅配置麻烦而且效率低下.为了解决这个问题,TP-LINK推出多款新品无线路由器,不但满足双频无线路由器 ...

  7. 惠普电脑BIOS设置图文详细介绍

    惠普Omni 120 1015cl是一款入门级的一体电脑,由广达代工,采用H61主板.G620处理器.3.5寸硬盘.笔记本光驱.......从硬件配置来看应该不同于笔记本,但其BIOS与笔记本相似和标 ...

  8. windows-soft1:VMware Workstation Pro15安装图文详细介绍

    1.下载VMware软件 官方下载地址:Download VMware Workstation Pro 中国官方地址:下载 VMware Workstation Pro | CN 2.安装配置 双击下 ...

  9. oracle p6 破解版下载,Primavera P6项目管理软件 16~17 图文详细安装教程(附下载)

    Primavera P6 Professional项目管理软件结合了Oracle和Microsoft SQL Server关系数据库,是一款非常好用且功能强大的综合的项目管理软件(PPM) 解决方案, ...

最新文章

  1. 基于深度学习OpenCV与python进行字符识别
  2. 计算机应用培训资料,计算机应用培训资料.doc
  3. python中forward函数的引用_调用没有.forward()的forward函数
  4. python long_python long函数是什么?如何使用?
  5. 实时对讲是怎么发起的_QQ可实时显示手机电量并展示给好友 近半投票者支持该功能...
  6. 【java小知识】FileReader读取文件出现乱码的解决办法
  7. [bzoj1036]树的统计
  8. 求子集元素之和(洛谷P2415题题解,Java语言描述)
  9. Java基础学习总结(30)——Java 内存溢出问题总结
  10. 文件路径存入mysql_网站的文件的上传,并将相对路径保存到数据库的代码实现。...
  11. 图像处理课程设计大报告 MATLAB GUI APP实现直方图均衡化、几何变换和加噪滤波
  12. 【数据库】MySql分割字符串
  13. html中实心黑点,Word 实心黑点怎么打?
  14. 外贸必备——各国常用搜索引擎
  15. [ERP]VMI概念与运用场景
  16. 使用NLTK对英文文章分句,避免缩略词标点符号干扰
  17. android textview表情,android如何在textview或edittext上添加表情
  18. 热烈祝贺“UTONMOS第一届公会会长圆桌会议”圆满举行
  19. 外企office电话英语
  20. 关于Ecshop小京东,手机管理后台,增加楼层右边分类不显示的问题

热门文章

  1. FCPX插件电视信号故障转场效果
  2. 固定资产管理php,PHPOA系统让固定资产管理不再困难
  3. 在Macbook 上云玩LOL
  4. python geopy 北斗导航_python – Geopy:计算GPS航向/方位
  5. 硕士开题报告答辩审核需要注意哪些点?
  6. python tokenize怎么用_使用python nltk.tokenize时,如何将包含stopwords的短语视为单个标记?...
  7. sql汉字拼音首字母
  8. Android APK加固技术初探
  9. FFMPEG操作流数据-获取aac音频文件
  10. 程序设计实训---相亲数b