complate(completewith)

Activiti是什么,为什么要用它?Activiti project是一个新的基于Apache license的开源BPM平台,实际上是一个工作审批流程。在我

Activiti是什么,为什么要用它?

Activiti project是一个新的基于Apache license的开源BPM平台,实际上是一个工作审批流程。在我们的日常生活中,赞同是很常见的。如果加班打车,需要将发票粘贴在报销单上,然后提交给组长。组长审核通过后,提交给部门负责人。部门负责人审核通过后,提交给财务部门。财务部分审核通过后,会给你银行卡付款。一个审批流程结束了。

引入pom

<dependency> <groupId>org.activiti</groupId> <artifactId>activiti-engine</artifactId> <version>5.22.0</version> </dependency> <!-- https://mvnrepository.com/artifact/org.activiti/activiti-spring --> <dependency> <groupId>org.activiti</groupId> <artifactId>activiti-spring</artifactId> <version>5.22.0</version> </dependency>初始化生成表

public static void main(String[] args) { //配置数据源 方式一 ProcessEngineConfiguration configuration = ProcessEngineConfiguration.createStandaloneProcessEngineConfiguration(); configuration.setJdbcDriver("com.mysql.jdbc.Driver"); configuration.setJdbcUrl("jdbc:mysql://127.0.0.1:3306/activiti?useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true&autoReconnect=true&rewriteBatchedStatements=true&zeroDateTimeBehavior=convertToNull&serverTimezone=Asia/Shanghai&useSSL=false"); configuration.setJdbcUsername("root"); configuration.setJdbcPassword("zsq2170"); //配置数据源 方式二// DriverManagerDataSource dataSource=new DriverManagerDataSource();// dataSource.setDriverClassName("com.mysql.jdbc.Driver");// dataSource.setUrl("jdbc:mysql://127.0.0.1:3306/activiti930?useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true&autoReconnect=true&rewriteBatchedStatements=true&zeroDateTimeBehavior=convertToNull&serverTimezone=Asia/Shanghai&useSSL=false");// dataSource.setUsername("root");// dataSource.setPassword("zsq2170");// configuration.setDataSource(dataSource); //配置表初始化方式 //ProcessEngineConfiguration.DB_SCHEMA_UPDATE_FALSE 如果数据库里面没有activiti的表,也不会创建 //ProcessEngineConfiguration.DB_SCHEMA_UPDATE_CREATE_DROP 创建表,使用完之后删除 //ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE 如果数据库里面没有表,就创建 //configuration.setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE); configuration.setDatabaseSchemaUpdate("drop-create"); //得到流程引擎 ProcessEngine processEngine = configuration.buildProcessEngine();System.out.println("初始化完成"); }描述表信息(初始化后自动生成表)

complate(completewith)& lt依赖性& gt& ltgroupId & gtorg.activiti & lt/groupId & gt;& ltartifactId & gt活动引擎& lt/artifact id & gt;& lt版本& gt5 . 22 . 0 & lt;/version & gt;& lt/dependency & gt;& lt!-https://mvnrepository . com/artifact/org . activiti/activiti-spring-& gt;& lt依赖性& gt& ltgroupId & gtorg.activiti & lt/groupId & gt;& ltartifactId & gt活动-春天& lt/artifact id & gt;& lt版本& gt5 . 22 . 0 & lt;/version & gt;& lt/dependency & gt;初始化表public static void main(string[]args){//数据源配置方法-processengineConfiguration configuration = processengineConfiguration。CreateStandaloneProcessengineConfiguration();configuration . setjdbcdriver(& # 34;com . MySQL . JDBC . driver & # 34;);configuration . setjdbcurl(& # 34;JDBC:MySQL://127 . 0 . 0 . 1:3306/activiti?use unicode = true & character encoding = utf-8 & allowMultiQueries = true & autore connect = true & rewriteBatchedStatements = true & zeroDateTimeBehavior = convert null & server time zone = Asia/Shanghai & use SSL = false & # 34;);configuration . set JDBC username(& # 34;根& # 34;);configuration . set JDBC password(& # 34;zsq2170 & # 34);//数据源配置模式2//驱动管理器数据源数据源=新建驱动管理器数据源();//data source . setdriverclass name(& # 34;com . MySQL . JDBC . driver & # 34;);//data source . seturl(& # 34;JDBC:MySQL://127 . 0 . 0 . 1:3306/activiti 930?use unicode = true & character encoding = utf-8 & allowMultiQueries = true & autore connect = true & rewriteBatchedStatements = true & zeroDateTimeBehavior = convert null & server time zone = Asia/Shanghai & use SSL = false & # 34;);//data source . set username(& # 34;根& # 34;);//data source . set password(& # 34;zsq2170 & # 34);//configuration . set data source(data source);//配置表初始化方法//processengineconfiguration . db _ schema _ update _ false如果数据库中没有activiti表,也不会创建//processengineconfiguration . db _ schema _ update _ create _ drop创建表。用完后删除//processengineconfiguration . db _ schema _ update _ true。如果数据库中没有表,则创建//configuration . setdatabaseschemaupdate(processengineconfiguration . db _ schema _ update _ true);configuration . setdatabaseschemaupdate(& # 34;拖放-创建& # 34;);//获取流程引擎processengine = configuration . buildprocessengine();system . out . println(& # 34;完成初始化& # 34;);}描述表格信息(初始化后自动生成表格)

complate(completewith)

表结构描述:

# repository service
SELECT * FROM ACT _ GE _ BYTEARRAY;#二进制文件表
select * from act _ re _ deployment;#流程部署表
select * from act _ re _ proc def;#过程定义
select * from act _ ge _ property;# ID算法和工作流版本信息表

# RuntimeService TaskService
SELECT * FROM ACT _ RU _ TASK;#流程一旦启动,就会有一条数据
SELECT * FROM ACT _ RU _ EXECUTION;#可能有多条数据
select * from act _ ru _ variable;#记录流程运行时的流程变量
select * from act _ ru _ identity link;#存储流程处理程序的信息

# history service
SELECT * FROM ACT _ HI _ proc inst;#历史流程实例
select * from act _ hi _ task inst;#历史任务实例
select * from act _ hi _ act inst;#历史活动节点表
select * from act _ hi _ var inst;#历史过程变量表
select * from act _ hi _ identity link;#历史处理程序表activiti
select * from act _ hi _ comment;#批注表
select * from act _ hi _ attachment;#附件表

#相关id摘要
部署ID ID ACT _ RE _ DEPLOYMENT
流程定义ID ID ACT _ RE _ proc def
流程实例ID ACT _ ru _ execution
执行实例act _ ru _ task。

画流程图

Eclipse插件安装教程https://blog.csdn.net/qq_23888451/article/details/83180874

complate(completewith)

绘制流程图绘制流程图

complate(completewith)

人员节点修改描述人员修改描述

complate(completewith)

设置办理人经办人

几个人员节点依次修改自己的名字,并设置处理程序。

complate(completewith)

设置流程名称设置流程名称

流程部署

图片完成后,压缩成zip包备用。

complate(completewith)

压缩成zip包压缩成zip包

/** * 2.流程部署 ->获取流程部署对象 */ @Test public void getDeployment(){ ProcessEngine processEngine = getProcessEngine(); //方式一 根据zip压缩包部署 一定得是zip InputStream inputStream = this.getClass().getResourceAsStream("/helloworld.zip"); RepositoryService repositoryService = processEngine.getRepositoryService(); //流程部署 ,获取流程部署对象 Deployment deploy = repositoryService.createDeployment().name("请假流程001") .addZipInputStream(new ZipInputStream(inputStream)) .deploy(); //方式二 根据bpmn文件部署// RepositoryService repositoryService = processEngine.getRepositoryService();// //流程部署 ,获取流程部署对象// Deployment deploy = repositoryService.createDeployment().name("请假流程001")// .addClasspathResource("templates/helloworld.bpmn")// .deploy(); System.out.println("流程部署成功 流程id"+deploy.getId()); }启动流程操作

/** * 3.启动流程 */ @Test public void startProcess(){ ProcessEngine processEngine = getProcessEngine(); RuntimeService runtimeService = processEngine.getRuntimeService(); //方式一 根据流程定义id// String processDefinitionId="helloword:1:4";// runtimeService.startProcessInstanceById(processDefinitionId); /** * 方式二 processDefinitionId -> 流程定义id * variables -> map流程变量 */ //runtimeService.startProcessInstanceById(processDefinitionId,variables); /** * 方式三 processDefinitionId -> 流程定义id * businessKey -> string 业务id 把业务id和流程执行实例进行绑定 */ //runtimeService.startProcessInstanceById(processDefinitionId,businessKey); /** * 方式四 processDefinitionId -> 流程定义id * businessKey -> string 业务id 把业务id和流程执行实例进行绑定 * variables -> map流程变量 */ //runtimeService.startProcessInstanceById(processDefinitionId,businessKey,variables); //方式五 /** * 根据流程定义的key启动 */ String processDefinitionKey="helloworld";// ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(processDefinitionKey); //创建流程变量对象 Map<String,Object> variables=new HashMap<>(); variables.put("请假天数",5); variables.put("请假原因","约会"); variables.put("请假时间",new Date()); ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(processDefinitionKey, variables);// runtimeService.startProcessInstanceByKey(processDefinitionKey,businessKey);// runtimeService.startProcessInstanceByKey(processDefinitionId,businessKey,variables); //============实际开发中使用========== //runtimeService.startProcessInstanceByKey(processDefinitionKey,businessKey);// //runtimeService.startProcessInstanceByKey(processDefinitionId,businessKey,variables); System.out.println("流程启动成功"+processInstance.getId()+" "+processInstance.getProcessDefinitionId()); }查询任务

/** * 4.查询任务 */ @Test public void findTask(){ ProcessEngine processEngine = getProcessEngine(); TaskService taskService = processEngine.getTaskService(); String assignee="张三"; List<Task> list = taskService.createTaskQuery() .taskAssignee(assignee) //根据办理人查询// .taskAssigneeLike() //根据办理人模糊查询// .deploymentId() //根据部署id查询// .deploymentIdIn() //根据部署id集合查询// .executionId() //根据执行实例id查询// .processDefinitionId() //根据流程定义id// .processDefinitionKey()//根据流程定义key// .processDefinitionKeyIn()// .processDefinitionKeyLike()// .processDefinitionName() //根据流程定义名称// .processDefinitionNameLike()// .processInstanceBusinessKey() //根据业务id// .processInstanceBusinessKeyLike() .list(); if(!CollectionUtils.isEmpty(list)){ for (Task task :list){ System.err.println("任务=="+task.toString()); System.err.println("任务Id=="+task.getId());//2502 System.err.println("流程实例id=="+task.getProcessInstanceId()); System.err.println("执行实例id=="+task.getExecutionId()); System.err.println("流程定义id=="+task.getProcessDefinitionId()); System.err.println("任务名称=="+task.getName()); System.err.println("任务办理人=="+task.getAssignee()); System.err.println("##########"); } } System.err.println("========任务查询完成==========="); }办理任务

/** * 5.办理任务 */ @Test public void complateTask(){ ProcessEngine processEngine = getProcessEngine(); TaskService taskService = processEngine.getTaskService(); String taskId="2504"; //方法1 根据任务id去完成 taskService.complete(taskId); //方法2 根据任务id去完成,并指定流程变量// taskService.complete(taskId,variables);// taskService.complete(taskId,variables,localScope); System.out.println("任务完成"); }删除流程定义

/** * 5.删除流程定义 */ @Test public void deleteProcDef(){ ProcessEngine processEngine = getProcessEngine(); RepositoryService repositoryService = processEngine.getRepositoryService(); String deploymentId="20001"; //根据流程部署id删除,如果当前id的流程正在执行,那么会报错// repositoryService.deleteDeployment(deploymentId); //根据流程部署id删除,删除流程定义,如果当前id流程正在执行,那么会把正在执行的流程数据删除 act_ru_*和act_hi_*表里的数据 repositoryService.deleteDeployment(deploymentId,true); System.out.println("删除成功"); }判断流程是否结束

/** * 6.判断流程是否结束 .更新业务表里面的状态 */ @Test public void isComplete(){ ProcessEngine processEngine = getProcessEngine(); //已知流程实例id RuntimeService runtimeService = processEngine.getRuntimeService(); String processInstanceId="2501";// String taskId="5002";// TaskService taskService = processEngine.getTaskService();// Task task = taskService.createTaskQuery().taskId(taskId).singleResult();// String processInstanceId = task.getProcessInstanceId();// System.out.println("processInstanceId===="+processInstanceId); ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId(processInstanceId).singleResult(); if(null!=processInstance){ System.out.println("流程未结束"); }else { System.out.println("流程结束"); } }一切的一切无非是在操作这些表格,想要学好activiti工作流,一定要弄清这些表的信息,以及部署id,流程实例,执行实例,任务实例这些东西,才能知道他是怎么操作的,查询也能够准确

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。

作者:美站资讯,如若转载,请注明出处:https://www.meizw.com/n/203150.html

发表回复

登录后才能评论