# JeecgBoot集成步骤

JeecgBoot任何版本都可以按照如下方式进行集成

# 新增jeecg-module-flowable

第一个目标就是在JeecgBoot项目下,新建一个模块jeecg-module-flowable,专门管理流程引擎相关代码。 请按照如下步骤,逐步完成所有的配置。

  • 在jeecgboot父pom.xml , 新增maven依赖

<flowable.spring-boot.version>6.7.2</flowable.spring-boot.version>
 <!--一定要在这个标签下:dependencyManagement进行添加-->
<dependencyManagement>
    <dependencies>
        <!--以下是所需的依赖文件-->
        <dependency>
            <groupId>org.flowable</groupId>
            <artifactId>flowable-spring-boot-starter</artifactId>
            <version>${flowable.spring-boot.version}</version>
             <exclusions>
                <exclusion>
                    <groupId>org.mybatis</groupId>
                    <artifactId>mybatis</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

    </dependencies>
</dependencyManagement>

因为flowable包含了mybatis,但JeecgBoot已经引入了mybatis,所以这里把mybatis排除,或者会报错。

  • 创建jeecg-module-flowable模块

在IDEA中选中项目,右键点击:New->Module,直接点击Next,创建名称为jeecg-module-flowable的模块。

  • 在jeecg-module-system->jeecg-system-start的pom.xml新增jeecg-module-flowable
 <dependencies>
        <!--Flowable模块-->
        <dependency>
            <groupId>org.jeecgframework.boot</groupId>
            <artifactId>jeecg-module-flowable</artifactId>
            <version>${jeecgboot.version}</version>
        </dependency>
 </dependencies>       
  • 在application-dev.yml, application-test.yml, application-prod.yml添加flowable配置
flowable:
  #关闭定时任务JOB
  async-executor-activate: false
  #将databaseSchemaUpdate设置为true。当flowable发现库与数据库表结构不一致时,会自动将数据库表结构升级至新版本。
  database-schema-update: true
  # 自动部署验证设置:true-开启(默认)、false-关闭
  check-process-definitions: false
  #保存历史数据级别设置为full最高级别,便于历史数据的追溯
  history-level: full

以上配置可以根据您的业务需求进行调整

  • 在application-dev.yml, application-test.yml, application-prod.yml修改mysql配置
# 在url后面追加&nullCatalogMeansCurrent=true
 datasource:
        master:
          url: jdbc:mysql://127.0.0.1:3306/jeecg-boot?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai&nullCatalogMeansCurrent=true
          username: root
          password: root

如果不追加&nullCatalogMeansCurrent=true,可能会出现cause: java.sql.SQLSyntaxErrorException: Table 'jeecg-camunda.act_ge_property' doesn't exist

  • 配置SwaggerConfig

全局搜索SwaggerConfig类,并追加如下代码块。主要功能是配置Swagger

  @Bean(value = "flowableApi2")
    public Docket flowableApi() {
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo()).groupName("Flowable模块")
                .select()
                //此包路径下的类,才生成接口文档
                .apis(RequestHandlerSelectors.basePackage("org.jeecg.modules.flowable"))
                //加了ApiOperation注解的类,才生成接口文档
                .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
                .paths(PathSelectors.any())
                .build()
                .securitySchemes(Collections.singletonList(securityScheme()));
        //.globalOperationParameters(setHeaderToken());
    }
  • 将交付于您的jeecg-module-flowable的代码替换项目中的相应模块

主要是将交付模块中的src,pom.xml两个文件进行覆盖,并修改jeecgboot版本号。如下所示

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>jeecg-boot-parent</artifactId>
        <groupId>org.jeecgframework.boot</groupId>
        <!--将这个修改成您项目的版本号,不修改将导致maven依赖下载异常-->
        <version>3.6.2</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>jeecg-module-flowable</artifactId>
    <dependencies>
        <dependency>
            <groupId>org.jeecgframework.boot</groupId>
            <artifactId>jeecg-boot-base-core</artifactId>
        </dependency>
        <dependency>
            <groupId>org.flowable</groupId>
            <artifactId>flowable-spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>5.3.8</version>
        </dependency>
        <dependency>
            <groupId>org.jeecgframework.boot</groupId>
            <artifactId>jeecg-system-local-api</artifactId>
        </dependency>

    </dependencies>

</project>
  • 在ISysBaseAPI新增getUserList接口
public interface ISysBaseAPI extends CommonAPI {
     List<LoginUser> getUserList(List<String> userNameList);
}

@Slf4j
@Service
public class SysBaseApiImpl implements ISysBaseAPI {

    @Override
	public List<LoginUser> getUserList(List<String> userNameList) {
		if (CollectionUtil.isEmpty(userNameList)) {
			return Collections.EMPTY_LIST;
		}
		QueryWrapper<SysUser> queryWrapper = new QueryWrapper<SysUser>().eq("status", 1).eq("del_flag", 0);
		queryWrapper.in("username", userNameList);
		List<SysUser> sysUserList = userMapper.selectList(queryWrapper);
		if (CollectionUtil.isEmpty(sysUserList)) {
			return null;
		}
		List<LoginUser> loginUserList = new ArrayList<>();
		for (SysUser sysUser : sysUserList) {
			LoginUser loginUser = new LoginUser();
			BeanUtils.copyProperties(sysUser, loginUser);
			//去掉用户敏感信息
			loginUser.setPassword(null);
			loginUser.setRelTenantIds(null);
			loginUser.setDepartIds(null);
			loginUserList.add(loginUser);
		}
		return loginUserList;
	}
}

集成成功之后的项目结构如下:

foo

完成上述步骤,请重启IDEA,然后运行项目即可。
请检查数据库是否生成act_前缀的相关表
检查Swagger是否正常生成Flowable模块,如下图:

foo

# JeecgVue集成步骤

# 集成Bpmn-Js

第一步,找到交付于您的Bpmn-Js.md,按照步骤在自己项目安装相应依赖 非常关键一个步骤!!!

# 注册a-timeline时间线组件

该组件用于显示审批时间线,JeecgBoot开源版本代码没有注册,需要我们手动注册。
定位到: src/commponents/registerGlobComp.ts

import type { App } from 'vue';
import { Icon } from './Icon';
import AIcon from '/@/components/jeecg/AIcon.vue';
//Tinymce富文本
import Editor from '/@/components/Tinymce/src/Editor.vue';

import { Button, JUploadButton } from './Button';

// 按需注册antd的组件
import {
  Button as AntButton,
  Select,
  //TODO: 省去其他的组件,在末尾添加时间线组件
  Timeline,
} from 'ant-design-vue';
const compList = [AntButton.Group, Icon, AIcon, JUploadButton];

import DragEngine from '@qiaoqiaoyun/drag-free';
import('@qiaoqiaoyun/drag-free/lib/index.css');

export function registerGlobComp(app: App) {
  compList.forEach((comp) => {
    app.component(comp.name || comp.displayName, comp);
  });
  app.component(Editor.name, Editor);

  app
    .use(Select)
    //TODO: 省去其他的组件,在末尾添加时间线组件
    .use(Timeline);
  console.log("注册antd组件完成!");
}

TODO处的代码,需要大家手动进行添加。 真实的文件内容已经注册了antd-vue很多的组件。
这里为显示方便都去掉, 我们只做添加不删除。注意!!!

# 集成自定义组件库

JeecgFlow提供了一个工作流相关的组件库,请将Custom文件夹添加到src/components文件夹下

foo

以上组件JeecgFlow自研的流程高亮相关组件库

# 集成业务相关代码

请将交付于您flowable文件夹添加到src/views文件夹下

zoom

后台主要根据这个文件夹进行菜单配置

# Bpmn-Js汉化

Bpmn-Js汉化教程 (opens new window)

# 构建项目运行环境

# 初始化数据库

找到JeecgBoot项目下的db文件夹,并且找到jeecgboot-mysql-5.7.sql脚本文件。
在自己的数据库环境创建一个新的数据库,Character Set: utf8mb4_general_ci,Collation: utf8mb4_general_ci
执行上述脚本,完成数据库的初始化。
注意: 流程引擎的相关表是应用启动后自动生成,以act_开头。并且mysql版本必须5.7+

# 修改MySql配置信息

目标文件: application-dev.yml,application-prod.yml,application-test.yml中的mysql进行配置

datasource:
    master:
      url: your-database?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai&nullCatalogMeansCurrent=true
      username: your-database-name
      password: your-database-password
      driver-class-name: com.mysql.cj.jdbc.Driver

# 修改Redis配置信息

目标文件: application-dev.yml,application-prod.yml,application-test.yml中的mysql进行配置

redis:
    database: 0
    host: your-redis-address
    password: 'your-redis-password'
    port: 6379

# 修改OSS配置信息

目标文件: application-dev.yml,application-prod.yml,application-test.yml中的mysql进行配置

  oss:
    endpoint: xx
    accessKey: xx
    secretKey: xx
    bucketName: markkkkdkd
    staticDomain: https://markkkkdkd.oss-cn-beijing.aliyuncs.com

官方目前是采用阿里云OSS, 如果您是使用七牛云或其他,请查询相关资料进行解决。

# 菜单配置

使用admin登陆系统后台,参照Flowable演示站 (opens new window)菜单配置,完成自己项目菜单配置。
如果您不知道admin账号,请到数据库找到sys_user表,将admin数据的slat=RCGTeGiH, password=5d80e0db286cd24c。这样操作可以将密码改成=admin2024

zoom

如上主要配置流程管理和审批管理两大模块的菜单。
如果需要配置网关等其他菜单配置也是同样操作。

# 角色配置

使用admin登陆系统后台,参照Flowable演示站 (opens new window)菜单配置,完成自己项目角色配置。

foo

请分别创建将军(general),军师(gudide),主公(leader)三种角色。

# 用户配置

使用admin登陆系统后台,参照Flowable演示站 (opens new window)菜单配置,完成自己项目用户配置。

foo

创建标红框的用户信息,并且给每一个用户绑定一个角色。主要创建关羽,诸葛亮,刘备三个用户名。

# 导出模型

在这我们以请假流程为例进行讲解,使用admin登陆系统后台,使用关羽账号登陆Flowable演示站 (opens new window) 在模型管理下找到请假案例,点击右侧更多->设计

foo

# 导入模型

将上一个步骤导出的模型,在您自己的项目的模型管理页面点击导入模型。即可完成模型部署。

foo

# 发起流程

完成上述操作, 便可以在请假案例菜单中,发起流程进行审批啦

foo

官网的案例会不断增多,每一个流程案例我们会单独开一个菜单.
如果您想迁移到自己项目,操作步骤一样