SpringBoot集合工作流(WorkFlow)Flowable

在我不久前做的一个项目中,需要完成一个审批模块,选用了flowable。

以下就是flowable简单的使用流程介绍

流程

一,引入依赖

<!--flowable依赖-->
       <dependency>
           <groupId>org.flowable</groupId>
           <artifactId>flowable-spring-boot-starter</artifactId>
           <version>6.7.2</version>
       </dependency>

二,创建流程图

此处使用到了IDEA的一个插件 Flowable BPMN visualizer

创建bpmn20.xml文件

 

利用插件绘制流程图

右键点击bpmn20.xml文件

绘制流程图

右键选择自己所需

绘制完成之后,bpmn20.xml文件内容就会自己生成了Wow Amazing! ! !

Controller

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
<div id="mCSB_2" class="mCustomScrollBox mCS-minimal-dark mCSB_vertical_horizontal mCSB_outside" style="max-height: none;" tabindex="0"><div id="mCSB_2_container" class="mCSB_container mCS_y_hidden mCS_no_scrollbar_y mCS_x_hidden mCS_no_scrollbar_x" style="position: relative; top: 0px; left: 0px; width: 100%;" dir="ltr"><code-pre class="code-pre" id="pre-JDmGcJ"><code-line class="line-numbers-rows"></code-line>package com.cn.pioneer.controller;
<code-line class="line-numbers-rows"></code-line>​
<code-line class="line-numbers-rows"></code-line>import com.baomidou.mybatisplus.extension.api.R;
<code-line class="line-numbers-rows"></code-line>import com.cn.pioneer.util.ResultVo;
<code-line class="line-numbers-rows"></code-line>import io.swagger.annotations.Api;
<code-line class="line-numbers-rows"></code-line>import io.swagger.annotations.ApiOperation;
<code-line class="line-numbers-rows"></code-line>import lombok.extern.slf4j.Slf4j;
<code-line class="line-numbers-rows"></code-line>​
<code-line class="line-numbers-rows"></code-line>import org.flowable.bpmn.model.Task;
<code-line class="line-numbers-rows"></code-line>import org.flowable.engine.*;
<code-line class="line-numbers-rows"></code-line>import org.flowable.engine.runtime.Execution;
<code-line class="line-numbers-rows"></code-line>import org.flowable.engine.runtime.ProcessInstance;
<code-line class="line-numbers-rows"></code-line>import org.springframework.beans.factory.annotation.Autowired;
<code-line class="line-numbers-rows"></code-line>import org.springframework.web.bind.annotation.PostMapping;
<code-line class="line-numbers-rows"></code-line>import org.springframework.web.bind.annotation.RequestBody;
<code-line class="line-numbers-rows"></code-line>import org.springframework.web.bind.annotation.RequestMapping;
<code-line class="line-numbers-rows"></code-line>import org.springframework.web.bind.annotation.RestController;
<code-line class="line-numbers-rows"></code-line>​
<code-line class="line-numbers-rows"></code-line>import javax.servlet.http.HttpServletResponse;
<code-line class="line-numbers-rows"></code-line>import java.util.HashMap;
<code-line class="line-numbers-rows"></code-line>import java.util.List;
<code-line class="line-numbers-rows"></code-line>import java.util.Map;
<code-line class="line-numbers-rows"></code-line>​
<code-line class="line-numbers-rows"></code-line>/**
<code-line class="line-numbers-rows"></code-line> * @author 3DG
<code-line class="line-numbers-rows"></code-line> * @Description 请假审批控制器
<code-line class="line-numbers-rows"></code-line> * @date 2023/10/19 11:32
<code-line class="line-numbers-rows"></code-line> */
<code-line class="line-numbers-rows"></code-line>@RestController
<code-line class="line-numbers-rows"></code-line>@RequestMapping("/leave")
<code-line class="line-numbers-rows"></code-line>@Slf4j
<code-line class="line-numbers-rows"></code-line>@Api(value = "请假审批 API 接口", tags = "请假审批 API 接口")
<code-line class="line-numbers-rows"></code-line>public class LeaveController {
<code-line class="line-numbers-rows"></code-line>    @Autowired
<code-line class="line-numbers-rows"></code-line>    private RuntimeService runtimeService;
<code-line class="line-numbers-rows"></code-line>    //启动流程实例通过RuntimeServiced对象
<code-line class="line-numbers-rows"></code-line>    @Autowired
<code-line class="line-numbers-rows"></code-line>    private TaskService taskService;
<code-line class="line-numbers-rows"></code-line>​
<code-line class="line-numbers-rows"></code-line>    //流程引擎
<code-line class="line-numbers-rows"></code-line>​
<code-line class="line-numbers-rows"></code-line>    /**
<code-line class="line-numbers-rows"></code-line>     * 创建流程
<code-line class="line-numbers-rows"></code-line>     */
<code-line class="line-numbers-rows"></code-line>​
<code-line class="line-numbers-rows"></code-line>    /**
<code-line class="line-numbers-rows"></code-line>     * 创建请假审批
<code-line class="line-numbers-rows"></code-line>     * @param LeaveID
<code-line class="line-numbers-rows"></code-line>     * @param LeaveName
<code-line class="line-numbers-rows"></code-line>     * @param LeaveDays
<code-line class="line-numbers-rows"></code-line>     * @param LeaveReason
<code-line class="line-numbers-rows"></code-line>     * @return
<code-line class="line-numbers-rows"></code-line>     */
<code-line class="line-numbers-rows"></code-line>    @PostMapping("add")
<code-line class="line-numbers-rows"></code-line>    @ApiOperation("创建请假审批流程")
<code-line class="line-numbers-rows"></code-line>    public ResultVo <String>addLeave(@RequestBody Integer LeaveID, String LeaveName, Integer LeaveDays, String LeaveReason){
<code-line class="line-numbers-rows"></code-line>        //获取assigne的取值
<code-line class="line-numbers-rows"></code-line>        Map<String,Object> map = new HashMap<>();
<code-line class="line-numbers-rows"></code-line>        map.put("leaveID",LeaveID);
<code-line class="line-numbers-rows"></code-line>        map.put("leaveName",LeaveName);
<code-line class="line-numbers-rows"></code-line>        map.put("leaveDays",LeaveDays);
<code-line class="line-numbers-rows"></code-line>        map.put("leaveReason",LeaveReason);
<code-line class="line-numbers-rows"></code-line>        //启动流程实例,第一个参数是流程的id
<code-line class="line-numbers-rows"></code-line>        ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("LeaveID",map);
<code-line class="line-numbers-rows"></code-line>       
<code-line class="line-numbers-rows"></code-line>        log.info(map.toString());
<code-line class="line-numbers-rows"></code-line>        return ResultVo.success("提交成功:"+processInstance.getId());
<code-line class="line-numbers-rows"></code-line>    }
<code-line class="line-numbers-rows"></code-line>​
<code-line class="line-numbers-rows"></code-line>    /**
<code-line class="line-numbers-rows"></code-line>     * 显示流程图
<code-line class="line-numbers-rows"></code-line>     */
<code-line class="line-numbers-rows"></code-line>    /**
<code-line class="line-numbers-rows"></code-line>     * 查看审批流程
<code-line class="line-numbers-rows"></code-line>     * @param httpServletResponse
<code-line class="line-numbers-rows"></code-line>     * @param processID
<code-line class="line-numbers-rows"></code-line>     * @throws Exception
<code-line class="line-numbers-rows"></code-line>     */
<code-line class="line-numbers-rows"></code-line>    @PostMapping("processDiagram")
<code-line class="line-numbers-rows"></code-line>    @ApiOperation("查看流程")
<code-line class="line-numbers-rows"></code-line>    public void getProcessDiagram(HttpServletResponse httpServletResponse,String processID)throws Exception{
<code-line class="line-numbers-rows"></code-line>        ProcessInstance pi = runtimeService.createProcessInstanceQuery().processInstanceId(processID).singleResult();
<code-line class="line-numbers-rows"></code-line>​
<code-line class="line-numbers-rows"></code-line>        if (pi ==null){
<code-line class="line-numbers-rows"></code-line>            return;
<code-line class="line-numbers-rows"></code-line>        }
<code-line class="line-numbers-rows"></code-line>        Task task = (Task) taskService.createTaskQuery().processInstanceId(pi.getId()).singleResult();
<code-line class="line-numbers-rows"></code-line>        //使用流程实例ID,查询正在执行的对象,返回流程实例对象
<code-line class="line-numbers-rows"></code-line>        String InstanceID = task.getId();
<code-line class="line-numbers-rows"></code-line>        List<Execution> executions = runtimeService
<code-line class="line-numbers-rows"></code-line>                .createExecutionQuery()
<code-line class="line-numbers-rows"></code-line>                .processInstanceId(InstanceID)
<code-line class="line-numbers-rows"></code-line>                .list();
<code-line class="line-numbers-rows"></code-line>    }
<code-line class="line-numbers-rows"></code-line>​
<code-line class="line-numbers-rows"></code-line>    /**
<code-line class="line-numbers-rows"></code-line>     * 审批请假
<code-line class="line-numbers-rows"></code-line>     */
<code-line class="line-numbers-rows"></code-line>    @PostMapping("approveLeave")
<code-line class="line-numbers-rows"></code-line>    @ApiOperation("审批请假")
<code-line class="line-numbers-rows"></code-line>    public ResultVo<String> approveLeave(String taskId,String approved){
<code-line class="line-numbers-rows"></code-line>        Task task = (Task) taskService.createTaskQuery().taskId(taskId).singleResult();
<code-line class="line-numbers-rows"></code-line>        if(task==null){
<code-line class="line-numbers-rows"></code-line>            return ResultVo.success("流程不存在");
<code-line class="line-numbers-rows"></code-line>        }
<code-line class="line-numbers-rows"></code-line>        //设置流程变量
<code-line class="line-numbers-rows"></code-line>        Map<String,Object> variables=new HashMap<>();
<code-line class="line-numbers-rows"></code-line>        Boolean approve = approved.equals("1")? true: false;
<code-line class="line-numbers-rows"></code-line>        //获取assignee的取值
<code-line class="line-numbers-rows"></code-line>        variables.put("approved",approve);
<code-line class="line-numbers-rows"></code-line>        taskService.complete(taskId,variables);
<code-line class="line-numbers-rows"></code-line>        return ResultVo.success("审批是否通过"+approved);
<code-line class="line-numbers-rows"></code-line>    }
<code-line class="line-numbers-rows"></code-line>}
</code-pre></div></div><div id="mCSB_2_scrollbar_vertical" class="mCSB_scrollTools mCSB_2_scrollbar mCS-minimal-dark mCSB_scrollTools_vertical" style="display: none;"><div class="mCSB_draggerContainer"><div id="mCSB_2_dragger_vertical" class="mCSB_dragger" style="position: absolute; min-height: 0px; height: 0px; top: 0px;"><div class="mCSB_dragger_bar" style="line-height: 0px;"></div></div><div class="mCSB_draggerRail"></div></div></div><div id="mCSB_2_scrollbar_horizontal" class="mCSB_scrollTools mCSB_2_scrollbar mCS-minimal-dark mCSB_scrollTools_horizontal" style="display: none;"><div class="mCSB_draggerContainer"><div id="mCSB_2_dragger_horizontal" class="mCSB_dragger" style="position: absolute; min-width: 0px; width: 0px; left: 0px;"><div class="mCSB_dragger_bar"></div></div><div class="mCSB_draggerRail"></div></div></div>

 

 



__EOF__

本文作者3DG
本文链接https://www.cnblogs.com/3-DG/p/17796853.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   3DG  阅读(1344)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示