activiti工作流 php,码云社 | 砺锋科技-SpringBoot整合Activiti工作流(附源码) - 用代码改变世界...
依赖:
新建springBoot项目时勾选activiti,或者在已建立的springBoot项目添加以下依赖: org.activiti activiti-spring-boot-starter-basic 6.0.0
配置:
数据源和activiti配置:server: port: 8081spring: datasource: url: jdbc:mysql://localhost:3306/act5?useSSL=true driver-class-name: com.mysql.jdbc.Driver username: root password: root # activiti default configuration activiti: database-schema-update: true check-process-definitions: true process-definition-location-prefix: classpath:/processes/# process-definition-location-suffixes:# - **.bpmn# - **.bpmn20.xml history-level: full
在activiti的默认配置中,process-definition-location-prefix 是指定activiti流程描述文件的前缀(即路径),启动时,activiti就会去寻找此路径下的流程描述文件,并且自动部署;suffix 是一个String数组,表示描述文件的默认后缀名,默认以上两种。
springMVC配置:package com.yawn.config;import org.springframework.context.annotation.Configuration;import org.springframework.format.FormatterRegistry;import org.springframework.http.HttpStatus;import org.springframework.web.servlet.config.annotation.*;/** * Created by yawn on 2017/8/5. */@EnableWebMvc@Configurationpublic class MvcConfig extends WebMvcConfigurerAdapter{ @Override public void addResourceHandlers(ResourceHandlerRegistry registry){ registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/"); registry.addResourceHandler("/templates/**").addResourceLocations("classpath:/templates/"); super.addResourceHandlers(registry); } @Override public void addViewControllers(ViewControllerRegistry registry){ registry.addViewController("/index"); registry.addViewController("/user"); registry.addRedirectViewController("/","/templates/login.html");// registry.addStatusController("/403", HttpStatus.FORBIDDEN); super.addViewControllers(registry); }}
这里配置静态资源和直接访问的页面:在本示例项目中,添加了thymeleaf依赖解析视图,主要采用异步方式获取数据,通过angularJS进行前端数据的处理和展示。
使用activiti:
配置了数据源和activiti后,启动项目,activiti 的各个服务组件就已经被加入到spring容器中了,所以就可以直接注入使用了。如果在未自动配置的spring环境中,可以使用通过指定bean的init-method来配置activiti的服务组件。
案例:
以以下请假流程为例:
1. 开始流程并“申请请假”(员工)private static final String PROCESS_DEFINE_KEY = "vacationProcess"; public Object startVac(String userName, Vacation vac) { identityService.setAuthenticatedUserId(userName); // 开始流程 ProcessInstance vacationInstance = runtimeService.startProcessInstanceByKey(PROCESS_DEFINE_KEY); // 查询当前任务 Task currentTask = taskService.createTaskQuery().processInstanceId(vacationInstance.getId()).singleResult(); // 申明任务 taskService.claim(currentTask.getId(), userName); Map vars = new HashMap<>(4); vars.put("applyUser", userName); vars.put("days", vac.getDays()); vars.put("reason", vac.getReason()); // 完成任务 taskService.complete(currentTask.getId(), vars); return true; }
在此方法中,Vaction 是申请时的具体信息,在完成“申请请假”任务时,可以将这些信息设置成参数。
2. 审批请假(老板)
(1)查询需要自己审批的请假public Object myAudit(String userName) { List taskList = taskService.createTaskQuery().taskCandidateUser(userName) .orderByTaskCreateTime().desc().list();// / 多此一举 taskList中包含了以下内容(用户的任务中包含了所在用户组的任务)// Group group = identityService.createGroupQuery().groupMember(userName).singleResult();// List list = taskService.createTaskQuery().taskCandidateGroup(group.getId()).list();// taskList.addAll(list); List vacTaskList = new ArrayList<>(); for (Task task : taskList) { VacTask vacTask = new VacTask(); vacTask.setId(task.getId()); vacTask.setName(task.getName()); vacTask.setCreateTime(task.getCreateTime()); String instanceId = task.getProcessInstanceId(); ProcessInstance instance = runtimeService.createProcessInstanceQuery().processInstanceId(instanceId).singleResult(); Vacation vac = getVac(instance); vacTask.setVac(vac); vacTaskList.add(vacTask); } return vacTaskList; } private Vacation getVac(ProcessInstance instance) { Integer days = runtimeService.getVariable(instance.getId(), "days", Integer.class); String reason = runtimeService.getVariable(instance.getId(), "reason", String.class); Vacation vac = new Vacation(); vac.setApplyUser(instance.getStartUserId()); vac.setDays(days); vac.setReason(reason); Date startTime = instance.getStartTime(); // activiti 6 才有 vac.setApplyTime(startTime); vac.setApplyStatus(instance.isEnded() ? "申请结束" : "等待审批"); return vac; }
package com.yawn.entity;import java.util.Date;/** * @author Created by yawn on 2018-01-09 14:31 */public class VacTask{ private String id; private String name; private Vacation vac; private Date createTime; // getter setter ...}
老板查询自己当前需要审批的任务,并且将任务和参数设置到一个VacTask对象,用于页面的展示。
TOOBUG(开发工程师)-本文作者
一个毫无志向的程序员,我就是我,不是toobug
263
0
2019-12-20 10:17
本文暂无评论,快来抢沙发!
评论
CODESEEDING(码云社)一家致力于程序员成长、以内容为核心、以提问为引导的多元化成长社区。我们在线上为技术爱好者提供了一个优质的交流氛围环境,在线下同样和众多高校联合开办了技术沙龙品牌。
020-85534346
关注我们
访问移动H5版
官方微信公众号
activiti工作流 php,码云社 | 砺锋科技-SpringBoot整合Activiti工作流(附源码) - 用代码改变世界...相关推荐
- mysql 亿级表count_码云社 | 砺锋科技-MySQL的count(*)的优化,获取千万级数据表的总行数 - 用代码改变世界...
专注于Java领域优质技术号,欢迎关注 作者:李长念 一.前言 这个问题是今天朋友提出来的,关于查询一个1200w的数据表的总行数,用count(*)的速度一直提不上去.找了很多优化方案,最后另辟蹊径 ...
- python代码世界你好_码云社 | 砺锋科技
Go 语言诞生于谷歌,由计算机领域的三位宗师级大牛 Rob Pike.Ken Thompson 和 Robert Griesemer 写成.由于出身名门,Go 在诞生之初就吸引了大批开发者的关注.诞生 ...
- Springboot 整合 Netty 实战(附源码)
作者:pjmike_pj juejin.im/post/5bd584bc518825292865395d 前言 这一篇文章主要介绍如何用Springboot 整合 Netty,由于本人尚处于学习Net ...
- 2023新版图文详解SpringBoot整合SSM框架(附源码)
版权声明 本文原创作者:谷哥的小弟 作者博客地址:http://blog.csdn.net/lfdfhl 教程概述 本教程以图文形式详细讲解SpringBoot整合SSM框架的流程以及具体步骤及其注意 ...
- Spring Cloud微服务实战:手把手带你整合eurekazuulfeignhystrix(附源码)
Spring Cloud微服务实战:手把手带你整合eureka&zuul&feign&hystrix(附源码) Spring Cloud简介 Spring Cloud是一个基于 ...
- c语言跳一跳辅助源码,.NET 开发一个微信跳一跳辅助程序(附源码)
原标题:.NET 开发一个微信跳一跳辅助程序(附源码) 来源:中国.NET研究协会 cnblogs.com/dotnet-org-cn/p/8149693.html 前言 微信更新了,出现了一个小游戏 ...
- SpringBoot停车场管理系统(附源码)
今日推荐强制双休!腾讯调整加班机制,21 点前必须离开工位 使用雪花id或uuid作为Mysql主键,被老板怼了一顿! 盘点 12 个 GitHub 上的高仿项目 CTO 说了,用错 @Autowir ...
- SpringBoot集成jsp(附源码)+遇到的坑
1.大体步骤 (1) 创建Maven web project: (2) 在pom.xml文件添加依赖: (3) 配置application.properties支持 ...
- SpringSession实战项目(基于SpringBoot项目)【附源码】
Python实战社群 Java实战社群 长按识别下方二维码,按需求添加 扫码关注添加客服 进Python社群▲ 扫码关注添加客服 进Java社群▲ 作者丨怀瑾握瑜 来源链接: https://www. ...
- springboot整合swagger2,附带源码
swagger2是基于我们在开发前后端分离项目的时候方便后端开发接口的人员做测试,以及团队之间更好的配合.好处我不多说,我在这主要讲怎么运用swagger2. 1.项目准备 /*Navicat Pre ...
最新文章
- 四大中三家已面向客户推出机器人业务解决方案?别逗了,先用机器人自我革命吧! post by 上海嘉冰信息技术...
- node-mongoDB
- python遍历目录_Python遍历目录的4种方法
- strak组件(3):URL别名的优化
- 模拟微信自动化发送(微信公众号文章自动点击)
- linux 查看文件工具,lsof---Linux查看文件信息的强大工具
- Crackme019
- unity每次运行总是game窗口最大化怎么解决?
- linux 内存性能评估,linux的内存性能评估
- 笔趣阁小说TXT采集软件工具
- 基于单片机的指纹识别电子密码锁设计
- 用计算机进行绘画教案,第二课 用鼠标键盘创作作品--电脑绘画教学设计(教案)...
- 使用Python提取Excel中单元格中的某一段内容(包含某特定字符且前后以逗号作为分隔符的内容)
- 什么是BASE最终一致性
- LA 3708 - Graveyard 墓地雕塑
- android系统刷机,安卓手机刷机完全攻略 从此不再怕刷机
- Modbus RTU笔记总结
- 百度网盘网页版增加倍速播放速度
- Java编程:颜色色带图片的生成
- Comparable 和 Comparator 比较器
热门文章
- WinEdt 打开***.bib文件时 error reading
- Slam(即时定位与地图构建)
- Atitit 引流矩阵与矩阵引流 推广方法 attilax总结
- Atitit 类库冲突解决方案 httpclient-4.5.2.jar
- Atitit.http代理的实现 代码java php c# python
- paip.sql2008 客户端软件绿色版V319
- paip.jquery ajax 请求JSON数据填充SELECT全过程纪录
- 企业GDPR安全隐私合规性指南
- 精译丨美国2017年最值得投资的7大共同基金
- (转)NYU教授给写AI新闻的记者们写了一封推心置腹的信,你也应该读读