切换菜单
搜索
个人笔记云
首页
java
spring
springmvc
python
使用教程
笔记管理
搜索
登录/注册
好物分享
退出
搜索
activiti实战
2021-08-07
516
**参考视频教程资料:** [**Activiti7精讲Java通用工作流开发实战 : **](http://www.notescloud.top/goods/detail/1140)
数据库 === * 1、act_ge_ 通用数据表,ge是general的缩写 * 2、act_hi_ 历史数据表,hi是history的缩写,对应HistoryService接口 * 3、act_id_ 身份数据表,id是identity的缩写,对应IdentityService接口 * 4、act_re_ 流程存储表,re是repository的缩写,对应RepositoryService接口,存储流程部署和流程定义等静态数据 * 5、act_ru_ 运行时数据表,ru是runtime的缩写,对应RuntimeService接口和TaskService接口,存储流程实例和用户任务等动态数据 接口 === ![在这里插入图片描述](images/3028/1629184765542.png) ``` ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); RuntimeService runtimeService = processEngine.getRuntimeService(); RepositoryService repositoryService = processEngine.getRepositoryService(); TaskService taskService = processEngine.getTaskService(); ManagementService managementService = processEngine.getManagementService(); IdentityService identityService = processEngine.getIdentityService(); HistoryService historyService = processEngine.getHistoryService(); FormService formService = processEngine.getFormService(); ``` * RepositoryService:提供一系列管理流程部署和流程定义的API。 * RuntimeService:在流程运行时对流程实例进行管理与控制。 * TaskService:对流程任务进行管理,例如任务提醒、任务完成和创建任务等。 * IdentityService:提供对流程角色数据进行管理的API,这些角色数据包括用户组、用户及它们之间的关系。 * ManagementService:提供对流程引擎进行管理和维护的服务。 * HistoryService:对流程的历史数据进行操作,包括查询、删除这些历史数据。 * FormService:表单服务。 web流程设计工具 ========= 1.将Activiti提供的流程设计器应用activiti-app.war部署到Tomcat的webapps目录。 2.创建新的MySql数据库。修改activiti-app\\WEB-INF\\classes\\META-INF\\activiti-app目录下的db.properties配置文件改成使用MySql数据库(默认使用H2内存数据库,创建的模型重启后会丢失)。 3.开浏览器输入http://localhost:8080/activiti-explorer,使用用户kermit,密码kermit登录 ![在这里插入图片描述](images/3028/1629184765597.png) ![在这里插入图片描述](images/3028/1629184765619.png) ![在这里插入图片描述](images/3028/1629184765650.png) 设计一个请假流程 ======== 流程创建,并部署 ![在这里插入图片描述](images/3028/1629184765744.png) ![在这里插入图片描述](images/3028/1629184765788.png) 流程信息如下: ![在这里插入图片描述](images/3028/1629184765857.png) 发起申请,分别 是1天 和4天 ![在这里插入图片描述](images/3028/1629184765962.png) 把系统用户转换成activiti用户 ``` User user=identityService.newUser(*sysUser.getLoginName()*); user.setLastName(*sysUser.getUserName()*); user.setFirstName*(sysUser.getUserName()*); user.setEmail(*sysUser.getEmail()*); identityService.saveUser(user); ``` ![在这里插入图片描述](images/3028/1629184766129.png)创建群组(和请假流程的群组对应) ``` Group group = identityService.newGroup(*idGroup.getId()*); group.setName(*idGroup.getName()*); group.setType(*idGroup.getType()*); identityService.saveGroup(group); ``` ![在这里插入图片描述](images/3028/1629184766203.png) 用户群组绑定 ![在这里插入图片描述](images/3028/1629184766451.png) 查看任务 ``` //查出当前登录用户所在的用户组 List
groups = identityService.createGroupQuery() .groupMember(String.valueOf(getLoginName())).list(); List
groupNames = groups.stream() .map(group -> group.getId()).collect(Collectors.toList()); if (groups == null){ return null; } //查询用户组的待审批请假流程列表 List
tasks = taskService.createTaskQuery() //指定任务 //.processDefinitionKey(ActConstant.ProcessInstance_QingJia) .taskCandidateGroupIn(groupNames) .listPage(pageDomain.getPageNum() - 1, pageDomain.getPageSize()); ``` ``` //获取下个节点 信息 ProcessInstance pi = runtimeService.createProcessInstanceQuery().processInstanceId(newOaTask.getProcessInstanceId()).singleResult(); if(pi==null){ log.info("insertLeaveApply 流程 {} 结束" ,id); }else{ Task nextTask = taskService.createTaskQuery().processInstanceId(pi.getId()).singleResult(); log.info("insertLeaveApply 流程 {} 进行中 ,下个任务 {}",id,nextTask.getId()); } ``` ![在这里插入图片描述](images/3028/1629184766488.png) (经理审核)-经理角色用户登录【这个任务ID是第一条审批时候的,和上面的不一样,请忽略】 ``` //查询当前审批节点 Task task = taskService.createTaskQuery().taskId(id).singleResult(); if (ActConstant.ProcessResult_PASS.equals(auditResult)){ //通过 //设置流程参数 Map
args = new HashMap<>(); args.put("auditId", task.getId()); //设置审批任务的执行人 taskService.claim(task.getId(), getLoginName()); //完成审批任务 taskService.complete(task.getId(), args); }else{ // 不通过 runtimeService.deleteProcessInstance(task.getProcessInstanceId(), task.getId()); } ``` ![在这里插入图片描述](images/3028/1629184766527.png) 之后可以看到 流程流转... ![在这里插入图片描述](images/3028/1629184766591.png) (总监审核)-总监角色用户登录 ![在这里插入图片描述](images/3028/1629184766667.png) 流程都流转到hr ![在这里插入图片描述](images/3028/1629184766691.png) hr登录查看任务 ![在这里插入图片描述](images/3028/1629184766729.png) 审核一个 ![在这里插入图片描述](images/3028/1629184766753.png) 集成springboot ============ ``` package com.platform.config; import org.activiti.engine.*; import org.activiti.engine.impl.cfg.ProcessEngineConfigurationImpl; import org.activiti.engine.impl.history.HistoryLevel; import org.activiti.spring.ProcessEngineFactoryBean; import org.activiti.spring.SpringProcessEngineConfiguration; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.transaction.PlatformTransactionManager; import javax.sql.DataSource; /** * 工作流相关配置 @author liuli * 7大接口 * RepositoryService:提供一系列管理流程部署和流程定义的API。 * RuntimeService:在流程运行时对流程实例进行管理与控制。 * TaskService:对流程任务进行管理,例如任务提醒、任务完成和创建任务等。 * IdentityService:提供对流程角色数据进行管理的API,这些角色数据包括用户组、用户及它们之间的关系。 * ManagementService:提供对流程引擎进行管理和维护的服务。 * HistoryService:对流程的历史数据进行操作,包括查询、删除这些历史数据。 * FormService:表单服务。 * * 1、act_ge_ 通用数据表,ge是general的缩写 * 2、act_hi_ 历史数据表,hi是history的缩写,对应HistoryService接口 * 3、act_id_ 身份数据表,id是identity的缩写,对应IdentityService接口 * 4、act_re_ 流程存储表,re是repository的缩写,对应RepositoryService接口,存储流程部署和流程定义等静态数据 * 5、act_ru_ 运行时数据表,ru是runtime的缩写,对应RuntimeService接口和TaskService接口,存储流程实例和用户任务等动态数据 */ @Configuration public class ActivitiConfig { @Bean public ProcessEngineConfiguration processEngineConfiguration(DataSource dataSource, PlatformTransactionManager transactionManager) { SpringProcessEngineConfiguration processEngineConfiguration = new SpringProcessEngineConfiguration(); processEngineConfiguration.setDataSource(dataSource); /** * false:false为默认值,设置为该值后,Activiti在启动时,会对比数据库表中保存的版本,如果没有表或者版本不匹配时,将在启动时抛出异常。 * true:设置为该值后,Activiti会对数据库中所有的表进行更新,如果表不存在,则Activiti会自动创建。 * create-drop:Activiti启动时,会执行数据库表的创建操作,在Activiti关闭时,执行数据库表的删除操作。 * drop-create:Activiti启动时,执行数据库表的删除操作在Activiti关闭时,会执行数据库表的创建操作。 */ processEngineConfiguration.setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE); processEngineConfiguration.setDatabaseType("mysql"); processEngineConfiguration.setTransactionManager(transactionManager); // 流程图字体 processEngineConfiguration.setActivityFontName("宋体"); processEngineConfiguration.setAnnotationFontName("宋体"); processEngineConfiguration.setLabelFontName("宋体"); /** * 保存历史数据级别设置为full最高级别,便于历史数据的追溯 * none:不保存任何的历史数据,因此,在流程执行过程中,这是最高效的。 * activity:级别高于none,保存流程实例与流程行为,其他数据不保存。 * audit:除activity级别会保存的数据外,还会保存全部的流程任务及其属性。audit为history的默认值。 * full:保存历史数据的最高级别,除了会保存audit级别的数据外,还会保存其他全部流程相关的细节数据,包括一些流程参数等。 */ //使用系统业务自定义的 processEngineConfiguration.setHistoryLevel(HistoryLevel.NONE); // 用户验证表改成使用视图 processEngineConfiguration.setDbIdentityUsed(false); return processEngineConfiguration; } @Bean public ProcessEngineFactoryBean processEngine(ProcessEngineConfiguration processEngineConfiguration) { ProcessEngineFactoryBean processEngineFactoryBean = new ProcessEngineFactoryBean(); processEngineFactoryBean .setProcessEngineConfiguration((ProcessEngineConfigurationImpl) processEngineConfiguration); return processEngineFactoryBean; } // 八大接口 @Bean public RepositoryService repositoryService(ProcessEngine processEngine) { return processEngine.getRepositoryService(); } @Bean public RuntimeService runtimeService(ProcessEngine processEngine) { return processEngine.getRuntimeService(); } @Bean public TaskService taskService(ProcessEngine processEngine) { return processEngine.getTaskService(); } @Bean public HistoryService historyService(ProcessEngine processEngine) { return processEngine.getHistoryService(); } @Bean public FormService formService(ProcessEngine processEngine) { return processEngine.getFormService(); } @Bean public IdentityService identityService(ProcessEngine processEngine) { return processEngine.getIdentityService(); } @Bean public ManagementService managementService(ProcessEngine processEngine) { return processEngine.getManagementService(); } @Bean public DynamicBpmnService dynamicBpmnService(ProcessEngine processEngine) { return processEngine.getDynamicBpmnService(); } } ``` 时间和篇幅问题这里值提供了一个大致的思路和关键的业务代码,如有不懂可联系我 一起探讨 参考资料: http://www.mossle.com/docs/activiti/index.html#activitiExplorer https://juejin.im/post/5a4064365188252b145b4560 https://www.jianshu.com/p/701056e672a4
教程分类
热门视频教程
热门文章
热门书籍推荐