增加挂起和激活流程
This commit is contained in:
parent
bbac3fac46
commit
846476de3c
19
README.md
19
README.md
|
@ -59,7 +59,7 @@
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
## 版本发布
|
## 版本发布
|
||||||
v1.0 2021-2-24 ding-flow首发
|
v1.0 2021-02-24 ding-flow首发
|
||||||
- 1.0 集成flowable官方设计器
|
- 1.0 集成flowable官方设计器
|
||||||
- 2.0 抛弃官方设计器用户组,使用ding-flow自带用户,流程角色。流程角色实现向下兼容(即流程某节点配置父角色,其父角色下所有子角色都具有流程审批权限)
|
- 2.0 抛弃官方设计器用户组,使用ding-flow自带用户,流程角色。流程角色实现向下兼容(即流程某节点配置父角色,其父角色下所有子角色都具有流程审批权限)
|
||||||
- 3.0 系统自带请假申请和采购单申请,采用类form表单提交,保存流程资源表。反序列化表单,实现流程中取业务数据。接口通用,一个接口按照规定格式设计流程即可。
|
- 3.0 系统自带请假申请和采购单申请,采用类form表单提交,保存流程资源表。反序列化表单,实现流程中取业务数据。接口通用,一个接口按照规定格式设计流程即可。
|
||||||
|
@ -69,11 +69,24 @@ v1.0 2021-2-24 ding-flow首发
|
||||||
- 7.0 钉钉修改用户和部门,系统异步监听数据变化,实时修改系统数据。实现钉钉和系统数据同步。
|
- 7.0 钉钉修改用户和部门,系统异步监听数据变化,实时修改系统数据。实现钉钉和系统数据同步。
|
||||||
- 8.0 账单管理,导出支付宝,微信账单。一键导入系统,系统轻松管理账单数据,日常消费明了清晰。
|
- 8.0 账单管理,导出支付宝,微信账单。一键导入系统,系统轻松管理账单数据,日常消费明了清晰。
|
||||||
|
|
||||||
v1.1 2021-2-26
|
v1.1 2021-02-26
|
||||||
- 1.0 集成ding-flow数据大屏,智能化科技大屏,实时了解钉钉数据,流程数据状态
|
- 1.0 集成ding-flow数据大屏,智能化科技大屏,实时了解钉钉数据,流程数据状态
|
||||||
- 2.0 修复流程历史数据保存失败问题
|
- 2.0 修复流程历史数据保存失败问题
|
||||||
- 3.0 调整待办,增加已办功能
|
- 3.0 调整待办,增加已办功能
|
||||||
|
|
||||||
|
v1.2 2021-03-08
|
||||||
|
- 1.0 新增消息管理
|
||||||
|
|
||||||
|
(1) 消息节点树形配置
|
||||||
|
|
||||||
|
(2) 消息节点触发配置,可实时对流程消息推送做开关配置
|
||||||
|
|
||||||
|
(3) 新增消息模板:在线设计dingTalk和邮件模板。消息内容支持参数化配置(使用${}识别参数)
|
||||||
|
- 2.0 新增流程发起和流程完结消息推送功能
|
||||||
|
- 3.0 新增转办任务功能(直接将办理人换成其他人)
|
||||||
|
- 4.0 新增委派任务功能(将任务节点分配给其他人处理,等其他人处理完之后,委派任务会自动回到委派人的任务中)
|
||||||
|
- 5.0 挂起流程
|
||||||
|
- 6.0 激活流程
|
||||||
## 未来规划
|
## 未来规划
|
||||||
|
|
||||||
- 1.0 角色与钉钉打通
|
- 1.0 角色与钉钉打通
|
||||||
|
@ -89,5 +102,7 @@ v1.1 2021-2-26
|
||||||
## 我有话说
|
## 我有话说
|
||||||
开源离不开您的参与、支持与鼓励。开源不易,如果您觉得项目对您有帮助,请您动动小手star一下,也是对作者的最大帮助。
|
开源离不开您的参与、支持与鼓励。开源不易,如果您觉得项目对您有帮助,请您动动小手star一下,也是对作者的最大帮助。
|
||||||
|
|
||||||
|
## 友情链接
|
||||||
|
博客
|
||||||
## 感谢诺依系统提供框架
|
## 感谢诺依系统提供框架
|
||||||
诺依系统地址: http://ruoyi.vip
|
诺依系统地址: http://ruoyi.vip
|
||||||
|
|
2
pom.xml
2
pom.xml
|
@ -30,6 +30,8 @@
|
||||||
<commons.fileupload.version>1.3.3</commons.fileupload.version>
|
<commons.fileupload.version>1.3.3</commons.fileupload.version>
|
||||||
<poi.version>3.17</poi.version>
|
<poi.version>3.17</poi.version>
|
||||||
<velocity.version>1.7</velocity.version>
|
<velocity.version>1.7</velocity.version>
|
||||||
|
<flowable.version>6.4.1</flowable.version>
|
||||||
|
<dingtalk.version>dingtalk-SNAPSHOT</dingtalk.version>
|
||||||
</properties>
|
</properties>
|
||||||
|
|
||||||
<!-- 依赖声明 -->
|
<!-- 依赖声明 -->
|
||||||
|
|
|
@ -70,7 +70,6 @@
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.snow</groupId>
|
<groupId>com.snow</groupId>
|
||||||
<artifactId>snow-framework</artifactId>
|
<artifactId>snow-framework</artifactId>
|
||||||
<version>4.3.1</version>
|
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<!-- 定时任务-->
|
<!-- 定时任务-->
|
||||||
|
@ -83,21 +82,18 @@
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.snow</groupId>
|
<groupId>com.snow</groupId>
|
||||||
<artifactId>snow-generator</artifactId>
|
<artifactId>snow-generator</artifactId>
|
||||||
<version>4.3.1</version>
|
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<!--dingtalk-->
|
<!--dingtalk-->
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.snow</groupId>
|
<groupId>com.snow</groupId>
|
||||||
<artifactId>snow-dingtalk</artifactId>
|
<artifactId>snow-dingtalk</artifactId>
|
||||||
<version>4.3.1</version>
|
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<!--工作流-->
|
<!--工作流-->
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.snow</groupId>
|
<groupId>com.snow</groupId>
|
||||||
<artifactId>snow-flowable</artifactId>
|
<artifactId>snow-flowable</artifactId>
|
||||||
<version>4.3.1</version>
|
|
||||||
</dependency>
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
|
|
|
@ -7,6 +7,7 @@ import com.snow.common.core.controller.BaseController;
|
||||||
import com.snow.common.core.domain.AjaxResult;
|
import com.snow.common.core.domain.AjaxResult;
|
||||||
import com.snow.common.core.page.PageModel;
|
import com.snow.common.core.page.PageModel;
|
||||||
import com.snow.common.core.page.TableDataInfo;
|
import com.snow.common.core.page.TableDataInfo;
|
||||||
|
import com.snow.flowable.common.enums.FlowInstanceEnum;
|
||||||
import com.snow.flowable.domain.*;
|
import com.snow.flowable.domain.*;
|
||||||
import com.snow.flowable.service.AppFormService;
|
import com.snow.flowable.service.AppFormService;
|
||||||
import com.snow.flowable.service.FlowableTaskService;
|
import com.snow.flowable.service.FlowableTaskService;
|
||||||
|
@ -217,6 +218,7 @@ public class FlowController extends BaseController {
|
||||||
return AjaxResult.success();
|
return AjaxResult.success();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 选择用户
|
* 选择用户
|
||||||
*/
|
*/
|
||||||
|
@ -227,4 +229,26 @@ public class FlowController extends BaseController {
|
||||||
mmap.put("flag",flag);
|
mmap.put("flag",flag);
|
||||||
return prefix + "/selectUser";
|
return prefix + "/selectUser";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@PostMapping("/activeProcessInstance")
|
||||||
|
@RequiresPermissions("flow:process:activeProcessInstance")
|
||||||
|
@ResponseBody
|
||||||
|
@RepeatSubmit
|
||||||
|
public AjaxResult activeProcessInstance(String id)
|
||||||
|
{
|
||||||
|
flowableService.suspendOrActiveProcessInstance(id,FlowInstanceEnum.ACTIVATE.getCode());
|
||||||
|
return AjaxResult.success();
|
||||||
|
}
|
||||||
|
|
||||||
|
@PostMapping("/suspendProcessInstance")
|
||||||
|
@RequiresPermissions("flow:process:suspendProcessInstance")
|
||||||
|
@ResponseBody
|
||||||
|
@RepeatSubmit
|
||||||
|
public AjaxResult suspendProcessInstance(String id)
|
||||||
|
{
|
||||||
|
flowableService.suspendOrActiveProcessInstance(id,FlowInstanceEnum.SUSPEND.getCode());
|
||||||
|
return AjaxResult.success();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -143,6 +143,7 @@ xss:
|
||||||
swagger:
|
swagger:
|
||||||
# 是否开启swagger
|
# 是否开启swagger
|
||||||
enabled: true
|
enabled: true
|
||||||
|
|
||||||
flowable:
|
flowable:
|
||||||
#关闭定时任务JOB
|
#关闭定时任务JOB
|
||||||
async-executor-activate: false
|
async-executor-activate: false
|
||||||
|
@ -157,7 +158,7 @@ flowable:
|
||||||
#上传文件的方式
|
#上传文件的方式
|
||||||
sys:
|
sys:
|
||||||
file:
|
file:
|
||||||
active: aliyun
|
active: local
|
||||||
|
|
||||||
log4j:
|
log4j:
|
||||||
logger:
|
logger:
|
||||||
|
|
|
@ -1164,7 +1164,6 @@ var table = {
|
||||||
},
|
},
|
||||||
// 发布信息
|
// 发布信息
|
||||||
deployment: function(id,type) {
|
deployment: function(id,type) {
|
||||||
console.log("=======>"+type);
|
|
||||||
table.set();
|
table.set();
|
||||||
$.modal.confirm("确定发布该条" + table.options.modalName + "信息吗?", function() {
|
$.modal.confirm("确定发布该条" + table.options.modalName + "信息吗?", function() {
|
||||||
var url = $.common.isEmpty(id) ? table.options.deploymentUrl : table.options.deploymentUrl.replace("{id}", id);
|
var url = $.common.isEmpty(id) ? table.options.deploymentUrl : table.options.deploymentUrl.replace("{id}", id);
|
||||||
|
@ -1176,6 +1175,34 @@ var table = {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
},
|
||||||
|
// 激活流程
|
||||||
|
activeProcessInstance: function(id) {
|
||||||
|
table.set();
|
||||||
|
$.modal.confirm("确定激活该条流程信息吗?", function() {
|
||||||
|
var url = $.common.isEmpty(id) ? table.options.activeFlowUrl : table.options.activeProcessInstanceUrl.replace("{id}", id);
|
||||||
|
if(table.options.type == table_type.bootstrapTreeTable) {
|
||||||
|
$.operate.get(url);
|
||||||
|
} else {
|
||||||
|
var data = { "id": id };
|
||||||
|
$.operate.submit(url, "post", "json", data);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
},
|
||||||
|
// 挂起流程
|
||||||
|
suspendProcessInstance: function(id) {
|
||||||
|
table.set();
|
||||||
|
$.modal.confirm("确定挂起该条流程信息吗?", function() {
|
||||||
|
var url = $.common.isEmpty(id) ? table.options.suspendProcessInstanceUrl : table.options.suspendProcessInstanceUrl.replace("{id}", id);
|
||||||
|
if(table.options.type == table_type.bootstrapTreeTable) {
|
||||||
|
$.operate.get(url);
|
||||||
|
} else {
|
||||||
|
var data = { "id": id };
|
||||||
|
$.operate.submit(url, "post", "json", data);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
},
|
},
|
||||||
// 清空信息
|
// 清空信息
|
||||||
clean: function() {
|
clean: function() {
|
||||||
|
|
|
@ -41,10 +41,14 @@
|
||||||
<script th:inline="javascript">
|
<script th:inline="javascript">
|
||||||
var detailFlag = [[${@permission.hasPermi('system:flow:myStartProcessDetail')}]];
|
var detailFlag = [[${@permission.hasPermi('system:flow:myStartProcessDetail')}]];
|
||||||
var processInstanceStatusDatas = [[${@dict.getType('process_instance_status')}]];
|
var processInstanceStatusDatas = [[${@dict.getType('process_instance_status')}]];
|
||||||
|
var activeProcessInstanceFlag = [[${@permission.hasPermi('system:flow:activeProcessInstance')}]];
|
||||||
|
var suspendProcessInstanceFlag = [[${@permission.hasPermi('system:flow:suspendProcessInstance')}]];
|
||||||
var prefixFlow = ctx + "flow";
|
var prefixFlow = ctx + "flow";
|
||||||
$(function() {
|
$(function() {
|
||||||
var options = {
|
var options = {
|
||||||
url: prefixFlow + "/getMyHistoricProcessInstance",
|
url: prefixFlow + "/getMyHistoricProcessInstance",
|
||||||
|
activeProcessInstanceUrl: prefixFlow+"/activeProcessInstance",
|
||||||
|
suspendProcessInstanceUrl: prefixFlow+"/suspendProcessInstance",
|
||||||
modalName: "我发起的流程",
|
modalName: "我发起的流程",
|
||||||
striped: true, //是否显示行间隔色
|
striped: true, //是否显示行间隔色
|
||||||
showToggle: false,
|
showToggle: false,
|
||||||
|
@ -103,6 +107,14 @@
|
||||||
align: 'center',
|
align: 'center',
|
||||||
formatter: function(value, row, index) {
|
formatter: function(value, row, index) {
|
||||||
var actions = [];
|
var actions = [];
|
||||||
|
var isFinished= row.isFinished;
|
||||||
|
var processInstanceStatus= row.processInstanceStatus;
|
||||||
|
if(processInstanceStatus==1&&isFinished==0){
|
||||||
|
actions.push('<a class="btn btn-danger btn-xs ' + suspendProcessInstanceFlag + '" href="javascript:void(0)" onclick="$.operate.suspendProcessInstance(\'' + row.id + '\')"><i class="fa fa-eye"></i>挂起</a> ');
|
||||||
|
}
|
||||||
|
if(processInstanceStatus==2&&isFinished==0){
|
||||||
|
actions.push('<a class="btn btn-success btn-xs ' + activeProcessInstanceFlag + '" href="javascript:void(0)" onclick="$.operate.activeProcessInstance(\'' + row.id + '\')"><i class="fa fa-eye"></i>激活</a> ');
|
||||||
|
}
|
||||||
actions.push('<a class="btn btn-info btn-xs ' + detailFlag + '" href="javascript:void(0)" onclick="getProcessDiagram(\'' + row.id + '\')"><i class="fa fa-eye"></i>详情</a>');
|
actions.push('<a class="btn btn-info btn-xs ' + detailFlag + '" href="javascript:void(0)" onclick="getProcessDiagram(\'' + row.id + '\')"><i class="fa fa-eye"></i>详情</a>');
|
||||||
return actions.join('');
|
return actions.join('');
|
||||||
}
|
}
|
||||||
|
@ -118,6 +130,7 @@
|
||||||
|
|
||||||
function fromDetailUrl(detailUrl) {
|
function fromDetailUrl(detailUrl) {
|
||||||
$.modal.openTab("详情", detailUrl);
|
$.modal.openTab("详情", detailUrl);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -17,18 +17,12 @@
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.snow</groupId>
|
<groupId>com.snow</groupId>
|
||||||
<artifactId>snow-framework</artifactId>
|
<artifactId>snow-framework</artifactId>
|
||||||
<version>4.3.1</version>
|
<version>${snow.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<!-- <dependency>
|
|
||||||
<groupId>com.aliyun</groupId>
|
|
||||||
<artifactId>alibaba-dingtalk-service-sdk</artifactId>
|
|
||||||
<version>1.0.1</version>
|
|
||||||
</dependency>-->
|
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.taobao.top</groupId>
|
<groupId>com.taobao.top</groupId>
|
||||||
<artifactId>lippi-oapi-encrpt</artifactId>
|
<artifactId>lippi-oapi-encrpt</artifactId>
|
||||||
<version>dingtalk-SNAPSHOT</version>
|
<version>${dingtalk.version}</version>
|
||||||
<scope>system</scope>
|
<scope>system</scope>
|
||||||
<systemPath>${pom.basedir}/src/main/resources/lib/lippi-oapi-encrpt.jar</systemPath>
|
<systemPath>${pom.basedir}/src/main/resources/lib/lippi-oapi-encrpt.jar</systemPath>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
@ -36,7 +30,7 @@
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.dingtalk.sdk</groupId>
|
<groupId>com.dingtalk.sdk</groupId>
|
||||||
<artifactId>dingtalk-sdk-java</artifactId>
|
<artifactId>dingtalk-sdk-java</artifactId>
|
||||||
<version>dingtalk-SNAPSHOT</version>
|
<version>${dingtalk.version}</version>
|
||||||
<scope>system</scope>
|
<scope>system</scope>
|
||||||
<systemPath>${pom.basedir}/src/main/resources/lib/taobao-sdk-java.jar</systemPath>
|
<systemPath>${pom.basedir}/src/main/resources/lib/taobao-sdk-java.jar</systemPath>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
|
@ -18,30 +18,27 @@
|
||||||
<artifactId>snow-dingtalk</artifactId>
|
<artifactId>snow-dingtalk</artifactId>
|
||||||
<version>4.3.1</version>
|
<version>4.3.1</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
|
||||||
<groupId>mysql</groupId>
|
|
||||||
<artifactId>mysql-connector-java</artifactId>
|
|
||||||
<version>5.1.38</version>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.liquibase</groupId>
|
<groupId>org.liquibase</groupId>
|
||||||
<artifactId>liquibase-core</artifactId>
|
<artifactId>liquibase-core</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
<!--flowable工作流-->
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.flowable</groupId>
|
<groupId>org.flowable</groupId>
|
||||||
<artifactId>flowable-spring-boot-starter</artifactId>
|
<artifactId>flowable-spring-boot-starter</artifactId>
|
||||||
<version>6.4.1</version>
|
<version>${flowable.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.flowable</groupId>
|
<groupId>org.flowable</groupId>
|
||||||
<artifactId>flowable-ui-modeler-rest</artifactId>
|
<artifactId>flowable-ui-modeler-rest</artifactId>
|
||||||
<version>6.4.1</version>
|
<version>${flowable.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.flowable</groupId>
|
<groupId>org.flowable</groupId>
|
||||||
<artifactId>flowable-json-converter</artifactId>
|
<artifactId>flowable-json-converter</artifactId>
|
||||||
<version>6.4.1</version>
|
<version>${flowable.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
</project>
|
</project>
|
|
@ -0,0 +1,34 @@
|
||||||
|
package com.snow.flowable.common.enums;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @program: snow
|
||||||
|
* @description 流程实例状态,挂起或者激活
|
||||||
|
* @author: 没用的阿吉
|
||||||
|
* @create: 2020-12-13 19:54
|
||||||
|
**/
|
||||||
|
public enum FlowInstanceEnum {
|
||||||
|
|
||||||
|
|
||||||
|
ACTIVATE(1, "激活"),
|
||||||
|
|
||||||
|
SUSPEND(2, "挂起");
|
||||||
|
|
||||||
|
private final Integer code;
|
||||||
|
private final String info;
|
||||||
|
|
||||||
|
FlowInstanceEnum(Integer code, String info)
|
||||||
|
{
|
||||||
|
this.code = code;
|
||||||
|
this.info = info;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Integer getCode()
|
||||||
|
{
|
||||||
|
return code;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getInfo()
|
||||||
|
{
|
||||||
|
return info;
|
||||||
|
}
|
||||||
|
}
|
|
@ -72,6 +72,9 @@ public class ProcessInstanceVO implements Serializable {
|
||||||
*/
|
*/
|
||||||
private String startUserName;
|
private String startUserName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 开始活动节点id
|
||||||
|
*/
|
||||||
private String startActivityId;
|
private String startActivityId;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -87,6 +90,9 @@ public class ProcessInstanceVO implements Serializable {
|
||||||
*/
|
*/
|
||||||
private String superProcessInstanceId;
|
private String superProcessInstanceId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 租户id
|
||||||
|
*/
|
||||||
private String tenantId;
|
private String tenantId;
|
||||||
|
|
||||||
|
|
||||||
|
@ -119,6 +125,11 @@ public class ProcessInstanceVO implements Serializable {
|
||||||
|
|
||||||
private String processDefinitionCategory;
|
private String processDefinitionCategory;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 流程状态(1--激活,2--挂起)
|
||||||
|
*/
|
||||||
|
private Integer processInstanceStatus;
|
||||||
|
|
||||||
public static List<ProcessInstanceVO> warpList(List<HistoricProcessInstance> historicProcessInstanceList){
|
public static List<ProcessInstanceVO> warpList(List<HistoricProcessInstance> historicProcessInstanceList){
|
||||||
return historicProcessInstanceList.stream().map(t->{
|
return historicProcessInstanceList.stream().map(t->{
|
||||||
ProcessInstanceVO processInstanceVO=new ProcessInstanceVO();
|
ProcessInstanceVO processInstanceVO=new ProcessInstanceVO();
|
||||||
|
|
|
@ -171,4 +171,11 @@ public interface FlowableService {
|
||||||
FlowGeneralSituationVO getFlowGeneralSituation(String userId);
|
FlowGeneralSituationVO getFlowGeneralSituation(String userId);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 挂起或激活流程 (0--激活,1--挂起)
|
||||||
|
* @param instanceId
|
||||||
|
* @param suspendState
|
||||||
|
*/
|
||||||
|
void suspendOrActiveProcessInstance(String instanceId, Integer suspendState);
|
||||||
}
|
}
|
||||||
|
|
|
@ -72,12 +72,5 @@ public interface FlowableTaskService {
|
||||||
*/
|
*/
|
||||||
void delegateTask(String taskId,String curUserId,String targetUserId);
|
void delegateTask(String taskId,String curUserId,String targetUserId);
|
||||||
|
|
||||||
/**
|
|
||||||
* 挂起或激活流程
|
|
||||||
* @param instanceId
|
|
||||||
* @param suspendState
|
|
||||||
*/
|
|
||||||
void suspendOrActiveApply(String instanceId, String suspendState);
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,6 +16,7 @@ import com.snow.common.enums.WorkRecordStatus;
|
||||||
import com.snow.common.exception.BusinessException;
|
import com.snow.common.exception.BusinessException;
|
||||||
import com.snow.flowable.common.constants.FlowConstants;
|
import com.snow.flowable.common.constants.FlowConstants;
|
||||||
import com.snow.flowable.common.enums.FlowDefEnum;
|
import com.snow.flowable.common.enums.FlowDefEnum;
|
||||||
|
import com.snow.flowable.common.enums.FlowInstanceEnum;
|
||||||
import com.snow.flowable.common.enums.FlowStatusEnum;
|
import com.snow.flowable.common.enums.FlowStatusEnum;
|
||||||
import com.snow.flowable.config.ICustomProcessDiagramGenerator;
|
import com.snow.flowable.config.ICustomProcessDiagramGenerator;
|
||||||
import com.snow.flowable.domain.*;
|
import com.snow.flowable.domain.*;
|
||||||
|
@ -44,6 +45,7 @@ import org.flowable.engine.history.HistoricProcessInstanceQuery;
|
||||||
import org.flowable.engine.impl.RepositoryServiceImpl;
|
import org.flowable.engine.impl.RepositoryServiceImpl;
|
||||||
import org.flowable.engine.impl.persistence.entity.ProcessDefinitionEntity;
|
import org.flowable.engine.impl.persistence.entity.ProcessDefinitionEntity;
|
||||||
import org.flowable.engine.repository.*;
|
import org.flowable.engine.repository.*;
|
||||||
|
import org.flowable.engine.runtime.Execution;
|
||||||
import org.flowable.engine.runtime.ProcessInstance;
|
import org.flowable.engine.runtime.ProcessInstance;
|
||||||
import org.flowable.engine.task.Attachment;
|
import org.flowable.engine.task.Attachment;
|
||||||
import org.flowable.engine.task.Comment;
|
import org.flowable.engine.task.Comment;
|
||||||
|
@ -660,7 +662,7 @@ public class FlowableServiceImpl implements FlowableService {
|
||||||
* 构建查询条件
|
* 构建查询条件
|
||||||
* @param processInstanceDTO
|
* @param processInstanceDTO
|
||||||
*/
|
*/
|
||||||
public HistoricProcessInstanceQuery buildHistoricProcessInstanceCondition(ProcessInstanceDTO processInstanceDTO){
|
private HistoricProcessInstanceQuery buildHistoricProcessInstanceCondition(ProcessInstanceDTO processInstanceDTO){
|
||||||
HistoricProcessInstanceQuery historicProcessInstanceQuery = historyService.createHistoricProcessInstanceQuery();
|
HistoricProcessInstanceQuery historicProcessInstanceQuery = historyService.createHistoricProcessInstanceQuery();
|
||||||
if(!StringUtils.isEmpty(processInstanceDTO.getBusinessKey())){
|
if(!StringUtils.isEmpty(processInstanceDTO.getBusinessKey())){
|
||||||
historicProcessInstanceQuery.processInstanceBusinessKey(processInstanceDTO.getBusinessKey());
|
historicProcessInstanceQuery.processInstanceBusinessKey(processInstanceDTO.getBusinessKey());
|
||||||
|
@ -693,7 +695,7 @@ public class FlowableServiceImpl implements FlowableService {
|
||||||
* 赋值ProcessInstanceVOs
|
* 赋值ProcessInstanceVOs
|
||||||
* @param processInstanceVOS
|
* @param processInstanceVOS
|
||||||
*/
|
*/
|
||||||
public void setProcessInstanceVOs(List<ProcessInstanceVO> processInstanceVOS){
|
private void setProcessInstanceVOs(List<ProcessInstanceVO> processInstanceVOS){
|
||||||
processInstanceVOS.parallelStream().forEach(t->{
|
processInstanceVOS.parallelStream().forEach(t->{
|
||||||
|
|
||||||
Map<String, Object> processVariables = t.getProcessVariables();
|
Map<String, Object> processVariables = t.getProcessVariables();
|
||||||
|
@ -716,6 +718,19 @@ public class FlowableServiceImpl implements FlowableService {
|
||||||
String startUserId = t.getStartUserId();
|
String startUserId = t.getStartUserId();
|
||||||
SysUser sysUser = sysUserService.selectUserById(Long.parseLong(startUserId));
|
SysUser sysUser = sysUserService.selectUserById(Long.parseLong(startUserId));
|
||||||
t.setStartUserName(sysUser.getUserName());
|
t.setStartUserName(sysUser.getUserName());
|
||||||
|
|
||||||
|
//流程状态查询 ACT_RU_EXECUTION
|
||||||
|
List<Execution> list = runtimeService.createExecutionQuery().processInstanceId(t.getId()).list();
|
||||||
|
if(CollectionUtils.isEmpty(list)){
|
||||||
|
t.setProcessInstanceStatus(FlowInstanceEnum.ACTIVATE.getCode());
|
||||||
|
}else {
|
||||||
|
Execution execution=list.get(0);
|
||||||
|
if(execution.isSuspended()){
|
||||||
|
t.setProcessInstanceStatus(FlowInstanceEnum.SUSPEND.getCode());
|
||||||
|
}else {
|
||||||
|
t.setProcessInstanceStatus(FlowInstanceEnum.ACTIVATE.getCode());
|
||||||
|
}
|
||||||
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@Override
|
@Override
|
||||||
|
@ -947,9 +962,7 @@ public class FlowableServiceImpl implements FlowableService {
|
||||||
return taskVOList;
|
return taskVOList;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getUserNameById(String id){
|
|
||||||
return sysUserService.selectUserById(Long.parseLong(id)).getUserName();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取流程图像,已执行节点和流程线高亮显示
|
* 获取流程图像,已执行节点和流程线高亮显示
|
||||||
|
@ -1060,6 +1073,16 @@ public class FlowableServiceImpl implements FlowableService {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void suspendOrActiveProcessInstance(String instanceId, Integer suspendState) {
|
||||||
|
if(suspendState==FlowInstanceEnum.ACTIVATE.getCode()){
|
||||||
|
runtimeService.activateProcessInstanceById(instanceId);
|
||||||
|
//TODO 保存流程记录
|
||||||
|
}else {
|
||||||
|
runtimeService.suspendProcessInstanceById(instanceId);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
/**
|
/**
|
||||||
* 获取高亮的线
|
* 获取高亮的线
|
||||||
* @param bpmnModel
|
* @param bpmnModel
|
||||||
|
@ -1137,4 +1160,10 @@ public class FlowableServiceImpl implements FlowableService {
|
||||||
}
|
}
|
||||||
return highFlows;
|
return highFlows;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private String getUserNameById(String id){
|
||||||
|
return sysUserService.selectUserById(Long.parseLong(id)).getUserName();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,6 +7,7 @@ import com.snow.common.core.page.PageModel;
|
||||||
import com.snow.common.exception.BusinessException;
|
import com.snow.common.exception.BusinessException;
|
||||||
import com.snow.flowable.common.constants.FlowConstants;
|
import com.snow.flowable.common.constants.FlowConstants;
|
||||||
import com.snow.flowable.common.enums.FlowDefEnum;
|
import com.snow.flowable.common.enums.FlowDefEnum;
|
||||||
|
import com.snow.flowable.common.enums.FlowInstanceEnum;
|
||||||
import com.snow.flowable.domain.*;
|
import com.snow.flowable.domain.*;
|
||||||
import com.snow.flowable.service.FlowableService;
|
import com.snow.flowable.service.FlowableService;
|
||||||
import com.snow.flowable.service.FlowableTaskService;
|
import com.snow.flowable.service.FlowableTaskService;
|
||||||
|
@ -285,10 +286,5 @@ public class FlowableTaskServiceImpl implements FlowableTaskService {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void suspendOrActiveApply(String instanceId, String suspendState) {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,6 +21,12 @@
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.springframework.boot</groupId>
|
<groupId>org.springframework.boot</groupId>
|
||||||
<artifactId>spring-boot-starter-web</artifactId>
|
<artifactId>spring-boot-starter-web</artifactId>
|
||||||
|
<exclusions><!-- 去掉默认配置 -->
|
||||||
|
<exclusion>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-starter-logging</artifactId>
|
||||||
|
</exclusion>
|
||||||
|
</exclusions>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<!-- SpringBoot 拦截器 -->
|
<!-- SpringBoot 拦截器 -->
|
||||||
|
@ -89,6 +95,8 @@
|
||||||
<artifactId>snow-system</artifactId>
|
<artifactId>snow-system</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
</project>
|
</project>
|
|
@ -11,7 +11,7 @@ import org.springframework.context.annotation.Configuration;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author qimingjin
|
* @author qimingjin
|
||||||
* @Title: 初始化对象
|
* @Title: 文件上传配置类
|
||||||
* @Description:
|
* @Description:
|
||||||
* @date 2021/1/11 11:22
|
* @date 2021/1/11 11:22
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -22,6 +22,7 @@ public class LocalStorage implements Storage {
|
||||||
private final Log logger = LogFactory.getLog(LocalStorage.class);
|
private final Log logger = LogFactory.getLog(LocalStorage.class);
|
||||||
|
|
||||||
private String storagePath;
|
private String storagePath;
|
||||||
|
|
||||||
private String address;
|
private String address;
|
||||||
|
|
||||||
private Path rootLocation;
|
private Path rootLocation;
|
||||||
|
|
|
@ -25,10 +25,24 @@ public interface Storage {
|
||||||
|
|
||||||
Stream<Path> loadAll();
|
Stream<Path> loadAll();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取文件路径
|
||||||
|
* @param keyName
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
Path load(String keyName);
|
Path load(String keyName);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 下载文件
|
||||||
|
* @param keyName
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
Resource loadAsResource(String keyName);
|
Resource loadAsResource(String keyName);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除
|
||||||
|
* @param keyName
|
||||||
|
*/
|
||||||
void delete(String keyName);
|
void delete(String keyName);
|
||||||
|
|
||||||
String generateUrl(String keyName);
|
String generateUrl(String keyName);
|
||||||
|
|
|
@ -19,7 +19,9 @@ import java.util.stream.Stream;
|
||||||
* @date 2021/1/11 11:23
|
* @date 2021/1/11 11:23
|
||||||
*/
|
*/
|
||||||
public class StorageService {
|
public class StorageService {
|
||||||
|
|
||||||
private String active;
|
private String active;
|
||||||
|
|
||||||
private Storage storage;
|
private Storage storage;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
|
|
|
@ -2,6 +2,7 @@ package com.snow.framework.web.exception;
|
||||||
|
|
||||||
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletRequest;
|
||||||
import org.apache.shiro.authz.AuthorizationException;
|
import org.apache.shiro.authz.AuthorizationException;
|
||||||
|
//import org.flowable.common.engine.api.FlowableException;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
import org.springframework.validation.BindException;
|
import org.springframework.validation.BindException;
|
||||||
|
@ -15,6 +16,8 @@ import com.snow.common.exception.DemoModeException;
|
||||||
import com.snow.common.utils.ServletUtils;
|
import com.snow.common.utils.ServletUtils;
|
||||||
import com.snow.common.utils.security.PermissionUtils;
|
import com.snow.common.utils.security.PermissionUtils;
|
||||||
|
|
||||||
|
import java.util.Optional;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 全局异常处理器
|
* 全局异常处理器
|
||||||
*
|
*
|
||||||
|
@ -74,6 +77,21 @@ public class GlobalExceptionHandler
|
||||||
return AjaxResult.error("服务器错误,请联系管理员");
|
return AjaxResult.error("服务器错误,请联系管理员");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 流程异常
|
||||||
|
* @param e
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
//@ExceptionHandler(FlowableException.class)
|
||||||
|
public AjaxResult flowableException(Exception e)
|
||||||
|
{
|
||||||
|
|
||||||
|
String errMessage=Optional.ofNullable(e.getMessage()).orElse("");
|
||||||
|
if(e.getMessage().contains("")){
|
||||||
|
return AjaxResult.error("服务器错误,请联系管理员");
|
||||||
|
}
|
||||||
|
return AjaxResult.error(errMessage);
|
||||||
|
}
|
||||||
/**
|
/**
|
||||||
* 业务异常
|
* 业务异常
|
||||||
*/
|
*/
|
||||||
|
|
Loading…
Reference in New Issue