具体集成步骤如下:
1.获取flowable-modeler源码
百度网盘:https://pan.baidu.com/s/1i7_G5_CN0NsbZRtaoDRCyA
提取码:55rx
2.把flowable-ui-modeler-app\src\main\resources\static下面的代码拷贝到我们自己的工程static下面。
3.引入相关maven配置
<flowable.version>6.4.1</flowable.version>
<!--flowable工作流-->
<dependency>
<groupId>org.flowable</groupId>
<artifactId>flowable-spring-boot-starter</artifactId>
<version>${flowable.version}</version>
</dependency>
<!--flowable整合设计器-->
<dependency>
<groupId>org.flowable</groupId>
<artifactId>flowable-ui-modeler-rest</artifactId>
<version>${flowable.version}</version>
</dependency>
<dependency>
<groupId>org.flowable</groupId>
<artifactId>flowable-json-converter</artifactId>
<version>${flowable.version}</version>
</dependency>
flowable官方设计器是带有一套自己的权限系统,在集成到DingFlow时是需要绕过登录。
4.Springboot启动类配置排除springsecurity认证
5.flowable获取用户是调用idm服务,这里重写获取用户信息接口;
前端在scripts ->configuration->url-config.js
后端接口示例(目前是写死的)
@RestController
@RequestMapping("/app")
public class AppRestResource {
@GetMapping("/rest/account")
public String getAccount() {
// 参考官方提供的响应数据
return "{\"id\":\"admin\",\"firstName\":\"Test\",\"lastName\":\"Administrator\",\"email\":\"admin@flowable.org\",\"fullName\":\"Test Administrator\",\"groups\":[],\"privileges\":[\"access-idm\",\"access-rest-api\",\"access-task\",\"access-modeler\",\"access-admin\"]}";
}
}
6.添加流程时会用到用户id,通过拦截器重置用户信息
package com.ruoyi.framework.config;
import org.flowable.idm.api.User;
import org.flowable.idm.engine.impl.persistence.entity.UserEntityImpl;
import org.flowable.ui.common.security.SecurityUtils;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@Component
public class CustomHandlerInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
String servletPath = request.getServletPath();
if (servletPath.endsWith(".css") || servletPath.endsWith(".js") || servletPath.endsWith(".jpg")
|| servletPath.endsWith(".png")) {
return true;
}
if (servletPath.startsWith("/app")) {
User user = new UserEntityImpl();
user.setId("admin");
SecurityUtils.assumeUser(user);
}
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
HandlerInterceptor.super.postHandle(request, response, handler, modelAndView);
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
throws Exception {
HandlerInterceptor.super.afterCompletion(request, response, handler, ex);
}
}
/**
* 自定义拦截规则
*/
@Override
public void addInterceptors(InterceptorRegistry registry)
{
registry.addInterceptor(repeatSubmitInterceptor).addPathPatterns("/**");
registry.addInterceptor(customHandlerInterceptor)
//告知拦截器:/static/admin/** 与 /static/user/** 不需要拦截 (配置的是 路径)
.excludePathPatterns("/static/**");
}
7.配置 flowable的mapper文件classpath路径,让项目启动时flowable相关mapper可以被扫描到。
# MyBatis配置
mybatis:
# 搜索指定包别名
typeAliasesPackage: com.ruoyi.**.domain
# 配置mapper的扫描,找到所有的mapper.xml映射文件
mapperLocations: classpath*:mapper/**/*Mapper.xml,classpath*:META-INF/modeler-mybatis-mappings/*.xml
# 加载全局的配置文件
configLocation: classpath:mybatis/mybatis-config.xml
8.修改myabtis配置文件,增加blobType对应的类型
<properties>
<property name="prefix" value=""/>
<property name="blobType" value="BLOB"/>
</properties>
9.FlowableCommonAppProperties中的这三个属性是没有配置,那就配置一下呗
# 随便配置,不会用到
flowable.common.app.idm-url=a
flowable.common.app.idm-admin.user=a
flowable.common.app.idm-admin.password=a
10.mysql的连接字符串中添加上nullCatalogMeansCurrent=true,将schema默认设置为当前连接的schema
url: jdbc:mysql://localhost:3306/ry-vue?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true
10.访问地址http://localhost:8080/modeler/index.html#/processes