SpringBoot集成Activiti(三)
SpringBoot集成 activiti
2023-09-11 14:17:00 时间
啦啦啦啦啦,富贵同学又开始开坑了,出了个免费的专栏,主要给大家从0基础开始用springBoot集成第三方的插件或者功能,如果这篇专栏能帮到你,一定不要忘了点一个赞哦!!欢迎大家收藏分享
hellow啊,靓仔,有没有看过前面的内容啊?
请移步到前面的内容去看(一)(二)的内容
接下来我们开始和我们的业务结合到一起。
还是先回顾一下上期内容,上期有个遗留的问题,就是mabatis jar包会冲突,所以我们
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-spring-boot-starter-basic</artifactId>
<version>5.22.0</version>
<exclusions>
<exclusion>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
</exclusion>
</exclusions>
</dependency>
第一步,好的,为了接下来方便接口的测试,我们使用swagger来快速搭建
<!--swagger-->
<dependency><!--添加Swagger依赖 -->
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.7.0</version>
</dependency>
<dependency><!--添加Swagger-UI依赖 -->
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.7.0</version>
</dependency>
<!--swagger-->
第二步,编写controller类
import com.wangfugui.activiti.dao.LeaveVo;
import com.wangfugui.activiti.dao.Leaves;
import com.wangfugui.activiti.dao.dto.HandleDto;
import com.wangfugui.activiti.dao.dto.UpcomingDto;
import com.wangfugui.activiti.service.LeaveService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
/**
* @author MaSiyi
* @version 1.0.0 2021/12/2
* @since JDK 1.8.0
*/
@RestController
@RequestMapping("/leave")
@Api(tags = "请假")
public class LeaveController {
@Autowired
protected LeaveService leaveService;
@PostMapping("/startLeave")
@ApiOperation("发起一个请假流程")
public String startLeave(@RequestBody Leaves leave) {
return leaveService.startLeave(leave);
}
@PostMapping("/upcoming")
@ApiOperation("获取待办列表")
public List<LeaveVo> listTask(@RequestBody UpcomingDto upcomingDto) {
return leaveService.upcoming(upcomingDto);
}
@PostMapping("/handle")
@ApiOperation("处理流程")
public String handle(@RequestBody HandleDto handleDto) {
return leaveService.handle(handleDto);
}
}
这次我们先来个简单的创建流程,获取待办流程,审批流程
所以我们就看到了这三个接口
第三步,我们进入到实现类中查看
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.wangfugui.activiti.dao.LeaveVo;
import com.wangfugui.activiti.dao.Leaves;
import com.wangfugui.activiti.dao.dto.HandleDto;
import com.wangfugui.activiti.dao.dto.UpcomingDto;
import com.wangfugui.activiti.dao.mapper.LeaveMapper;
import com.wangfugui.activiti.service.LeaveService;
import org.activiti.engine.IdentityService;
import org.activiti.engine.RuntimeService;
import org.activiti.engine.TaskService;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;
/**
* @author MaSiyi
* @version 1.0.0 2021/12/2
* @since JDK 1.8.0
*/
@Service
public class LeaveServiceImpl extends ServiceImpl<LeaveMapper, Leaves> implements LeaveService {
@Autowired
private RuntimeService runtimeservice;
@Autowired
private IdentityService identityservice;
@Autowired
private TaskService taskservice;
/**
* 开启一个流程
*
* @param leave
* @Param: [leave]
* @return: org.activiti.engine.runtime.ProcessInstance
* @Author: MaSiyi
* @Date: 2021/12/3
*/
@Override
public String startLeave(Leaves leave) {
leave.setId(UUID.randomUUID().toString().substring(0, 8));
//设置用户
identityservice.setAuthenticatedUserId(leave.getUserId());
//使用leaveapply表的主键作为businesskey,连接业务数据和流程数据
String businesskey = String.valueOf(leave.getId());
//发起请假流程
Map<String, Object> map = new HashMap<>();
//下个步骤处理人
map.put("deptleader", "Tom");
ProcessInstance processInstance = runtimeservice.startProcessInstanceByKey("leave", businesskey, map);
String instanceid = processInstance.getId();
//关联流程表
leave.setProcessInstanceId(instanceid);
this.save(leave);
return "申请成功";
}
/**
* 获取待办列表
*
* @param upcomingDto
* @Param: [upcomingDto]
* @return: java.util.List<com.wangfugui.activiti.dao.Leaves>
* @Author: MaSiyi
* @Date: 2021/12/3
*/
@Override
public List<LeaveVo> upcoming(UpcomingDto upcomingDto) {
List<LeaveVo> leaves = new ArrayList<>();
// 使用任务候选人查询待办列表
List<Task> tasks = taskservice.createTaskQuery().taskAssignee(upcomingDto.getUsername()).taskName("部门领导审批")
.listPage(upcomingDto.getPage(), upcomingDto.getSize());
for (Task task : tasks) {
String instanceId = task.getProcessInstanceId();
//查询正在运行的task
ProcessInstance processInstance = runtimeservice.createProcessInstanceQuery().processInstanceId(instanceId).singleResult();
String businessKey = processInstance.getBusinessKey();
Leaves leave = this.getById(businessKey);
LeaveVo leaveVo = new LeaveVo();
BeanUtils.copyProperties(leave,leaveVo);
leaveVo.setTaskId(task.getId());
leaves.add(leaveVo);
}
return leaves;
}
/**
* 审批任务
* @Param: [taskid]
* @return: java.lang.String
* @Author: MaSiyi
* @Date: 2021/12/3
*/
@Override
public String handle(HandleDto handleDto) {
//完成指定任务
taskservice.claim(handleDto.getTaskId(), handleDto.getUserName());
//进行下一个任务
Map<String, Object> variables = new HashMap<String, Object>();
variables.put("deptleaderapprove", handleDto.getApprove());
variables.put("hr", handleDto.getNextUserNam());
taskservice.complete(handleDto.getTaskId(), variables);
return "处理成功";
}
}
这三个的解释已经写在代码里面啦,大家可以去看看注释
第四步,我们来看一下我们的测试
发起一个流程
查询我们的待办
处理我们的待办
好了,今天的简单的基本方法就到这里了
下一篇介绍查看历史流程等的集成
好了,就是这么的简单,完整代码请移至SpringBoot+Activiti 查看
相关文章
- SpringBoot 集成MyBatis、事务管理
- SpringBoot使用JSP渲染页面
- SpringBoot 静态资源导入
- SpringBoot微服务的监控与运维
- 牛逼!这份 24W 字的 SpringBoot 从入门到实战让你彻底玩明白
- SpringBoot 集成缓存性能之王 Caffeine
- springboot整合mybatis-plus详解
- SpringBoot实现定时发送邮件
- SpringBoot整合MybatisPlus3.X之分页插件(四)
- 基于springboot的多数据源配置
- SpringBoot集成MyBatisPlus
- SpringBoot要点之使用Actuator监控
- springboot应用程序非web方式
- springboot 1.5.x 使用tomcat8设置cookie的domain以dot开头报错
- springboot-集成MySQL+druid+mybatis-plus总结
- springboot+rocketmq(5):实现批量消息
- springboot配置静态文件及获取静态资源路径【详细教程】
- SSO:Win10+CAS+SpringBoot Project(二)
- SpringBoot+React博客论坛系统 附带详细运行指导视频
- SpringBoot在线淘房系统(租房、购房) 附带运行指导视频
- 【springBoot】SpringBoot修改启动logo图案
- 【Redis】SpringBoot+MyBatis集成Redis二级缓存
- SpringBoot整合RabbitMQ报错 org.springframework.amqp.AmqpIOException: java.io.IOException
- springboot集成security(鉴权)
- SpringBoot 实现登录验证码(附集成SpringSecurity)