主要分为一下几个步骤:
1.画图
2.部署流程-把图的信息转入到数据表格中
3.创建流程实例-开始一个流程-实际发起了一个流程
4.执行任务:获取任务+完成任务
1.画图
一个简单的流程图,名称:qj01.bpmn
2.部署流程
2.1方法1
(本地测试可以用下,实际项目不使用)
private ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); //流程定义 @Test public void deploy(){ RepositoryService repositoryService = processEngine.getRepositoryService(); Deployment de = repositoryService.createDeployment().addClasspathResource("bpmn/qj01.bpmn").name("请假").deploy(); //这里"请假"中文到act_re_deployment表可能出现乱码 System.out.println("部署id"+de.getId()); /* 流程定义: 流程部署表 re_deployment 流程定义表 re_procdef 资源信息表 ge_bytearray */ }
执行,影响到3张数据表格:流程部署表 re_deployment 流程定义表 re_procdef 资源信息表 ge_bytearray
2.2方法2:上传压缩文件的方式
2.2.1第一步:把bpmnt图形文件压缩车zip文件
2.2.2编码
这里我省略了上传zip文件的过程,直接从本地读取的
@Test public void deploy2() throws FileNotFoundException { RepositoryService repositoryService = processEngine.getRepositoryService(); InputStream in = new FileInputStream("C:\\Users\\Administrator\\IdeaProjects\\jsnhcopy\\src\\main\\resources\\bpmn\\qj01.zip"); //zip文件路径 ZipInputStream zipInputStream = new ZipInputStream(in); Deployment deploy = repositoryService.createDeployment().addZipInputStream(zipInputStream).name("qjlc").deploy(); System.out.println("部署id"+deploy.getId()); /* 流程定义: 流程部署表 re_deployment 流程定义表 re_procdef 资源信息表 ge_bytearray */ }
2.3问题
3.创建流程实例-启动流程
//启动流程实例 @Test public void run(){ RuntimeService runtimeService = processEngine.getRuntimeService(); ProcessInstance myProcess_1 = runtimeService.startProcessInstanceByKey("myProcess_1");//表re_procdef里面的key字段 System.out.println("实例id"+myProcess_1.getId()); System.out.println("流程定义id"+myProcess_1.getProcessDefinitionId()); /* 启动流程实例 运行时任务表:ru_task 运行时流程执行表:ru_execution 运行时执行主体信息表:ru_identitylink */ }
其中 myProcess_1是表act_re_procdef里面的KEY_的值
执行,影响到三张表 运行时任务表:ru_task 运行时流程执行表:ru_execution 运行时执行主体信息表:ru_identitylink,此时一个流程被发起,有了任务act_ru_task
4.执行任务
4.1获取任务
@Test public void findtask(){ //获取任务 TaskService taskService = processEngine.getTaskService(); List<Task> task_list = taskService.createTaskQuery().taskAssignee("dcc").list();//查询dcc的任务 task_list.stream().forEach((x)->{ System.out.println("任务id"+x.getId()); System.out.println("任务名称"+x.getName()); });
这里是通过任务执行人来获取的任务,获取的是dcc的任务。这里获取到id为25005的任务
4.2完成任务
@Test public void complete() { TaskService taskService = processEngine.getTaskService(); taskService.complete("25005"); System.out.println("完成任务"); /* 任务id2505 完成任务id2505 */ /* 完成任务: ru的几张表的数据清楚了 历史相关表:
历史任务表:hi_taskinst
历史流程实例表:hi_procinst
历史流程参与者表:hi_identitylink
历史活动节点表:hi_actinst */ }
这里通过任务id来完成任务
在完成了这个任务后,流程就走到了审批流程,表中ru_task表中id为25005任务没有了,出现了一个新的任务-审批
再依照上面,获取任务-完成任务,整个流程就走完了。
此时act_ru_的几张表的数据会清空,历史信息进入历史表,涉及到一下四张表
历史任务表:hi_taskinst
历史流程实例表:hi_procinst
历史流程参与者表:hi_identitylink
历史活动节点表:hi_actinst
原文:https://www.cnblogs.com/jthr/p/14841605.html