网站首页 > 博客文章 正文
工作很长时间,没有碰到工作流的问题,今天我们来看一下什么是工作流。
一、 什么是工作流
以请假为例,现在大多数公司的请假流程是这样的
员工向上级提出请假申请——上级口头同意——上级将请假记录下来——月底将请假记录上交公司——公司将请假录入电脑
采用工作流技术的公司的请假流程是这样的
员工使用账户登录系统——点击请假——上级登录系统点击允许
就这样,一个请假流程就结束了
有人会问,那上级不用向公司提交请假记录?公司不用将记录录入电脑?答案是,用的。但是这一切的工作都会在上级点击允许后自动运行!
这就是工作流技术。
Georgakopoulos给出的工作流定义是:工作流是将一组任务组织起来以完成某个经营过程:定义了任务的触发顺序和触发条件,每个任务可以由一个或多个软件系统完成,也可以由一个或一组人完成,还可以由一个或多个人与软件系统协作完
二、整合Spring Boot + activiti 一个例子瞬间就懂
我们要完成上图例子。同学提交请假,组长同意后给班长。班长同意后结束。
组长不同意或班长不同意就结束。
步骤:
1、搭建Spring boot 2.0版本(这里不详细介绍了)
2、引入activiti
<dependency> <groupId>org.activiti</groupId> <artifactId>activiti-spring</artifactId> <version>6.0.0</version> </dependency>
3、配置文件
@Configuration
public class ActivitiConfiguration {
@Autowired
private DataSource dataSource;
@Autowired
private PlatformTransactionManager platformTransactionManager;
@Bean
public SpringProcessEngineConfiguration springProcessEngineConfiguration() {
SpringProcessEngineConfiguration spec = new SpringProcessEngineConfiguration();
spec.setDataSource(dataSource);
spec.setTransactionManager(platformTransactionManager);
spec.setDatabaseSchemaUpdate("true");
Resource[] resources = null;
// 启动自动部署流程
try {
resources = new PathMatchingResourcePatternResolver().getResources("classpath*:processes/*.bpmn");
} catch (IOException e) {
e.printStackTrace();
}
spec.setDeploymentResources(resources);
return spec;
}
@Bean
public ProcessEngineFactoryBean processEngine() {
ProcessEngineFactoryBean processEngineFactoryBean = new ProcessEngineFactoryBean();
processEngineFactoryBean.setProcessEngineConfiguration(springProcessEngineConfiguration());
return processEngineFactoryBean;
}
@Bean
public RepositoryService repositoryService() throws Exception {
return processEngine().getObject().getRepositoryService();
}
@Bean
public RuntimeService runtimeService() throws Exception {
return processEngine().getObject().getRuntimeService();
}
@Bean
public TaskService taskService() throws Exception {
return processEngine().getObject().getTaskService();
}
@Bean
public HistoryService historyService() throws Exception {
return processEngine().getObject().getHistoryService();
}
}
4、在resources中创建processes文件夹,并新建文件 MyProcesses.bpmn 绘制流程图。这里需要安装activiti的插件。
5、这里我们只要有该流程图,activiti的引擎就会跟着图上的流程一步一步执行了。灰常的方便。
这里我们增加一个小需求,组长有好几个,我们需要制定哪个组长审批。跟着步骤我们设置一个监听器。
public class AuditorTaksListener implements TaskListener { private static final long serialVersionUID = 1L; @Override public void notify(DelegateTask delegateTask) { String[] zuzhang = { "zhangsan", "lisi" }; delegateTask.addCandidateUsers(Arrays.asList(zuzhang)); } }
这里我们制定张三、李四使我们的组长。
6、我们业务的逻辑
- 开启流程
Map<String, Object> variables = new HashMap<String, Object>(); ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("myprocess", variables); System.out.println("流程已启动"+processInstance.getId());
这里processInstance.getId()需要与我们具体的业务绑定起来。以便拿到任务。
- 根据流程ID获取当前的任务,并完成“提交审核" 的任务
Task task = taskService.createTaskQuery().processInstanceId(processInstance.getId()).singleResult(); taskService.complete(task.getId(),variables);
此时我们的流程走到了组长审批。还记得我们的监听器吗?触发条件是 create 。
当我们完成“提交审核”的任务时,“组长审批”就会自动创建。创建就会触发我们的监听器。自动进入到了我们的监听器。并制定任务的审核人是张三或者李四。
- 接下来我们查看李四的任务。
List<Task> list = taskService.createTaskQuery().taskCandidateUser("lisi").orderByTaskCreateTime().asc().list();
我们就拿到了李四的任务列表。列表中含有列表的ID,获得这个taskId。我们就可以选择完成该任务。
Map<String, Object> variables = new HashMap<String, Object>(); taskService.complete(task.getId(),variables);
但是,李四可以选择同意或是不同意。我们的variables就要增加同不同意的变量
Map<String, Object> variables = new HashMap<String, Object>();
variables.put("options", "true");
taskService.complete(task.getId(),variables);
修改我们的流程图
options为true 就是同意了,完成以后,“班长审批”就会被创建。
在班长审批上加上一个监听器,后面的步骤是不是就跟组长审批一样了呢。
这个工作流就这样完成了,是不是特别简单、有趣呢?
以后我们在慢慢深入去看看这个有趣的小引擎。
猜你喜欢
- 2024-10-18 一套集成工作流+地图引擎的快速开源平台源码
- 2024-10-18 Spring Boot + Security + MyBatis + Thymeleaf + Activiti 快速开发平台
- 2024-10-18 基于Java的快速开发平台-低代码集成工作流-快速开发表单系统
- 2024-10-18 30分钟学会:springboot+mysql+camunda开源工作流引擎
- 2024-10-18 工作审批流系统,快速落地平台(工作流和审批流的区别)
- 2024-10-18 Spring Boot 整合 xxl-job(spring boot整合thymeleaf)
- 2024-10-18 「低代码平台」springboot+Activiti7多实例(会签)流程实现(一)
- 2024-10-18 可视化Java工作流引擎开发,10分钟完成一个业务流程发布
- 2024-10-18 springboot+activiti7之拖拽表单k-form-design整合
- 2024-10-18 Activiti 6.0 流程引擎从零开始(第一天) 1
你 发表评论:
欢迎- 367℃用AI Agent治理微服务的复杂性问题|QCon
- 358℃初次使用IntelliJ IDEA新建Maven项目
- 357℃手把手教程「JavaWeb」优雅的SpringMvc+Mybatis整合之路
- 351℃Maven技术方案最全手册(mavena)
- 348℃安利Touch Bar 专属应用,让闲置的Touch Bar活跃起来!
- 346℃InfoQ 2024 年趋势报告:架构篇(infoq+2024+年趋势报告:架构篇分析)
- 345℃IntelliJ IDEA 2018版本和2022版本创建 Maven 项目对比
- 342℃从头搭建 IntelliJ IDEA 环境(intellij idea建包)
- 最近发表
- 标签列表
-
- powershellfor (55)
- messagesource (56)
- aspose.pdf破解版 (56)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- jwt漏洞 (58)
- macos14下载 (58)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- vue回到顶部 (57)
- qcombobox样式表 (68)
- vue数组concat (56)
- tomcatundertow (58)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)