From cae1a85ba9db42cb6790cfe1e5e446b41ca80f0a Mon Sep 17 00:00:00 2001 From: wangmingwei Date: Tue, 21 Apr 2026 17:17:01 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=9D=E5=A7=8B=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 102 ++++++ Dockerfile | 22 ++ README | 0 README.md | 295 +++++++++++++++ allatori/class-winter-maven-plugin-pom.xml | 37 ++ pom.xml | 118 ++++++ yunzhupaas-workflow-admin/pom.xml | 113 ++++++ .../com/yunzhupaas/FlowableApplication.java | 18 + .../controller/DefinitionController.java | 89 +++++ .../admin/controller/InstanceController.java | 77 ++++ .../admin/controller/TaskController.java | 298 +++++++++++++++ .../admin/handle/GlobalExceptionHandler.java | 61 ++++ .../workflow/admin/result/Result.java | 96 +++++ .../src/main/resources/application-dev.yml | 101 ++++++ .../main/resources/application-preview.yml | 101 ++++++ .../src/main/resources/application-prod.yml | 101 ++++++ .../src/main/resources/application-test.yml | 101 ++++++ .../src/main/resources/application.yml | 24 ++ .../src/main/resources/logback-spring.xml | 339 ++++++++++++++++++ 19 files changed, 2093 insertions(+) create mode 100644 .gitignore create mode 100644 Dockerfile delete mode 100644 README create mode 100644 README.md create mode 100644 allatori/class-winter-maven-plugin-pom.xml create mode 100644 pom.xml create mode 100644 yunzhupaas-workflow-admin/pom.xml create mode 100644 yunzhupaas-workflow-admin/src/main/java/com/yunzhupaas/FlowableApplication.java create mode 100644 yunzhupaas-workflow-admin/src/main/java/com/yunzhupaas/workflow/admin/controller/DefinitionController.java create mode 100644 yunzhupaas-workflow-admin/src/main/java/com/yunzhupaas/workflow/admin/controller/InstanceController.java create mode 100644 yunzhupaas-workflow-admin/src/main/java/com/yunzhupaas/workflow/admin/controller/TaskController.java create mode 100644 yunzhupaas-workflow-admin/src/main/java/com/yunzhupaas/workflow/admin/handle/GlobalExceptionHandler.java create mode 100644 yunzhupaas-workflow-admin/src/main/java/com/yunzhupaas/workflow/admin/result/Result.java create mode 100644 yunzhupaas-workflow-admin/src/main/resources/application-dev.yml create mode 100644 yunzhupaas-workflow-admin/src/main/resources/application-preview.yml create mode 100644 yunzhupaas-workflow-admin/src/main/resources/application-prod.yml create mode 100644 yunzhupaas-workflow-admin/src/main/resources/application-test.yml create mode 100644 yunzhupaas-workflow-admin/src/main/resources/application.yml create mode 100644 yunzhupaas-workflow-admin/src/main/resources/logback-spring.xml diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ad33869 --- /dev/null +++ b/.gitignore @@ -0,0 +1,102 @@ +#====================================================================================================================== +#========================================= gitignore的基础用法 ========================================= +#====================================================================================================================== +# 一.基础语法 +# .gitignore配置文件的一些通用技巧 [参考:https://git-scm.com/docs/gitignore] +# 1.空白行不匹配任何文件,所以可以作为可读性的分隔符,同时两端的空格将会被忽略. +# 2.使用[#]开头,将会注释掉整行,使其不进行匹配操作,如果需要匹配#开头,可以使用转义字符[\]. +# 3.1匹配模式以[/]结尾,表示想要匹配一个目录及其子文件.(比如[foo/]会匹配foo目录及其下面的路径.) +# 3.2匹配模式不包含[/],将会全局匹配该文件. +# 4.通配符 +# [*]: 匹配除[/]以外的任何内容,也就意味着[*]不能跨目录. +# [?]: 匹配除[/]和[[]以及[]]以外的任何一个字符. +# [**]: 匹配所有的内容,或者说匹配任意目录下的内容. +# 示例: +# 1.[**/foo/bar] 将会匹配所有直接在foo目录下的bar,无论foo处在何处. +# 2.[foo/**]则表示匹配foo目录下的所有文件和目录. +# 3.[a/**/b]则可以匹配a/b, a/c/b, a/c/d/b,即此处的[**]可以表示0个或多个. +# !!! 需要注意的是,除上面示例的用法外,剩余的[**]都是无效的.. +# 5.可以通过前缀[!]来表示不忽略某些文件,比如可以通过[!a]来确保文件a不会被忽略,即时前面已经声明了忽略其父目录,该模式优先级高于普通忽略模式. +# 二.常用命令 +# 1.git -rm [https://git-scm.com/docs/git-rm] +# 删除文件索引,或者同时删除文件索引和物理文件.可以使用通配符. +# 2.git-check-ignore [https://git-scm.com/docs/git-check-ignore] +# 调试.gitignore文件 +# 三.注意事项 +# 1.如果文件已经被git管理,那么后续添加的忽略模式将不会生效,具体解决方法,参考<<二.常用命令>>. + +#======================================================================================================================= +#============================== java忽略文件 ===================================== +#===================== https://github.com/github/gitignore/blob/master/Java.gitignore ================== +#======================================================================================================================= +# 编译后的class文件,忽略所有以[.class]结尾的文件 +*.class + +# 日志文件,忽略所有以[.log]结尾的文件. +*.log + +# BlueJ 文件,忽略所有以[.ctxt]结尾的文件. +*.ctxt + +# Mobile Tools for Java (J2ME),忽略[.mtj.tmp/]目录及其子文件. +.mtj.tmp/ + +# 打包文件,忽略所有以[.jar]或[.war]或[.nar]或[.ear]或[.zip]或[.tar.gz]或[rar]结尾的文件. +*.jar +*.war +*.nar +*.ear +*.zip +*.tar.gz +*.rar + +# 虚拟机崩溃日志,忽略所有以[hs_err_pid]开头的文件.[see http://www.java.com/en/download/help/error_hotspot.xml] +hs_err_pid* +#======================================================================================================================= +#============================== maven忽略文件 =================================== +#===================== https://github.com/github/gitignore/blob/master/Maven.gitignore ================== +#======================================================================================================================= +target/ +pom.xml.tag +pom.xml.releaseBackup +pom.xml.versionsBackup +pom.xml.next +release.properties +dependency-reduced-pom.xml +buildNumber.properties +.mvn/timing.properties +# Avoid ignoring Maven wrapper jar file (.jar files are usually ignored) +!/.mvn/wrapper/maven-wrapper.jar +#======================================================================================================================= +#============================== IDE环境忽略文件 ================================== +#===================== https://github.com/github/gitignore/blob/master/Maven.gitignore ================== +#======================================================================================================================= +#----------------IDEA------------- +.idea/* +.idea/compiler.xml +.idea/encodings.xml +.idea/modules.xml +*.iml +#======================================================================================================================= +#============================== other环境忽略文件 ================================ +#===================== https://github.com/github/gitignore/blob/master/Maven.gitignore ================== +#======================================================================================================================= +*.sw? +.#* +*# +*~ +.classpath +.project +.settings/ +bin +build +target +dependency-reduced-pom.xml +*.sublime-* +/scratch +.gradle +Guardfile +README.html +*.iml +.idea +._* \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..77e8eae --- /dev/null +++ b/Dockerfile @@ -0,0 +1,22 @@ +# 基础镜像 +FROM bellsoft/liberica-openjre-rocky:21 +# FROM bellsoft/liberica-openjre-rocky:17 +# FROM bellsoft/liberica-openjre-rocky:11 +# FROM bellsoft/liberica-openjre-rocky:8 +LABEL maintainer=yunzhupaas-team + +# 设置时区 +ENV TZ=Asia/Shanghai +RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone + +# 指定运行时的工作目录 +WORKDIR /data/yunzhupaassoft/flowApi + +# 将构建产物jar包拷贝到运行时目录中 +COPY yunzhupaas-workflow-admin/target/*.jar ./yunzhupaas-flow-admin.jar + +# 指定容器内运行端口 +EXPOSE 31000 + +# 指定容器启动时要运行的命令 +ENTRYPOINT ["/bin/sh","-c","java -javaagent:./yunzhupaas-flow-admin.jar -Dfile.encoding=utf8 -Djava.security.egd=file:/dev/./urandom --add-opens java.base/java.lang=ALL-UNNAMED -XX:+DisableAttachMechanism -jar yunzhupaas-flow-admin.jar"] diff --git a/README b/README deleted file mode 100644 index e69de29..0000000 diff --git a/README.md b/README.md new file mode 100644 index 0000000..f85d65e --- /dev/null +++ b/README.md @@ -0,0 +1,295 @@ +> 特别说明:源码、JDK、数据库、Redis等安装或存放路径禁止包含中文、空格、特殊字符等 + +## 一 环境要求 + +### 1.1 开发环境 + +| 类目 | 版本说明或建议 | +| --- |------------------------| +| 硬件 | 开发电脑建议使用I3及以上CPU,16G及以上内存 | +| 操作系统 | Windows 10/11,MacOS | +| JDK | 默认使用JDK 21,如需要切换JDK 8/11/17版本请参考文档调整代码,推荐使用 `OpenJDK`,如 `Liberica JDK`、`Eclipse Temurin`、`Alibaba Dragonwell`、`BiSheng`等发行版;| +| Maven | 依赖管理工具,推荐使用 `3.6.3` 及以上版本 | +| 数据库 | 兼容 `MySQL 5.7.x/8.x`、`SQLServer 2012+`、`Oracle 11g`、`PostgreSQL 12+`、`达梦数据库(DM8)`、`人大金仓数据库(KingbaseES_V8R6)` | +| IDE | 代码集成开发环境,推荐使用 `IDEA2024` 及以上版本,兼容 `Eclipse`、 `Spring Tool Suite` 等IDE工具 | + +### 1.2 运行环境 + +> 适用于测试或生产环境 + +| 类目 | 版本说明或建议 | +| --- |-----------------------------------------------| +| 服务器配置 | 建议至少在 4C/16G/50G的机器配置下运行; | +| 操作系统 | 建议使用 `Windows Server 2019` 及以上版本或主流 `Linux` 发行版本,推荐使用 `Linux` 环境;兼容 `统信UOS`,`OpenEuler`,`麒麟服务器版` 等信创环境; | +| JRE | 默认使用JRE 21,如需要切换JRE 8、11、17版本请参考文档调整代码;推荐使用 `OpenJDK`,如 `Liberica JDK`、`Eclipse Temurin`、`Alibaba Dragonwell`、`BiSheng`等发行版; | +| 数据库 | 兼容 `MySQL 5.7.x/8.x`、`SQLServer 2012+`、`Oracle 11g`、`PostgreSQL 12+`、`达梦数据库(DM8)`、`人大金仓数据库(KingbaseES_V8R6)` | + +## 二 关联项目 + +| 项目 | 分支 | 说明 | +|--------------------|---------------|------------| +| yunzhupaas-workflow-core | v1.0.0-stable | 流程引擎基础依赖 | + +## 三 Maven私服配置 + +> Apache Maven 依赖管理工具,推荐使用 `3.6.3` 及以上版本
解决以下依赖无法从公共Maven仓库下载的问题 + +打开Maven安装目录中的 `conf/settings.xml` 文件,
+在 `` 中添加如下内容 + +```xml + + maven-releases + admin + admin123 + +``` + +在 `` 中添加 + +```xml + + maven-releases + * + maven-releases + https://repository.yunzhupaas.com/repository/maven-public/ + +``` + +## 四 开发环境 + +### 4.1 导入数据库脚本 + +> 以 MySQL数据库 为例
字符集:utf8mb4
排序规则:utf8mb4_general_ci + +在MySQL创建 `yunzhupaas_flow` 数据库,并将 `yunzhupaas-database/MySQL/yunzhupaas_flow_init.sql` 导入; + +### 4.2 导入依赖 + +详见 `yunzhupaas-workflow-core` 项目中的 `README.md` 文档说明 + +### 4.3 项目配置 + +打开编辑 `yunzhupaas-workflow-admin/src/main/resources/application.yml` + +#### 4.3.1 指定环境配置 + +环境说明: + +- `application-dev.yml` 开发环境(默认) +- `application-test.yml` 测试环境 +- `application-preview.yml` 预发布环境 +- `application-prod.yml` 生产环境 + +> 以开发环境为例,根据实际需求修改 + +```yaml +# application.yml第 6 行,可选值:dev(开发环境-默认)、test(测试环境)、preview(预生产)、prod(生产环境) +active: dev +``` + +#### 4.3.2 调整运行端口 +> 根据实际需求调整 + +打开编辑 `yunzhupaas-workflow-admin/src/main/resources/application-dev.yml`(第 2 行) + +```yaml +port: 31000 # 默认运行端口 +``` + +#### 4.3.3 数据库配置示例 + +打开编辑 `yunzhupaas-workflow-admin/src/main/resources/application-dev.yml`,修改以下配置 + +> 注意: +> - 若使用 `Oracle` 或 `达梦` 数据库必需配置模式名称 +> - 若使用 `PostgreSQL` 和 `人大金仓KingbaseES` 数据库, 默认public模式无需配置模式名称, 若指定模式需要配置模式名称 +> - 若使用 `MySQL` 和 `SQLServer` 无需配置模式名称 + +##### 4.3.3.1 MySQL数据库 + +```yaml +spring: + datasource: + driver-class-name: com.mysql.cj.jdbc.Driver + type: com.mysql.cj.jdbc.MysqlDataSource + url: jdbc:mysql://127.0.0.1:3306/yunzhupaas_flow?yunzhupaasDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&autoReconnect=true&nullCatalogMeansCurrent=true + username: dbuser + password: dbpasswd +``` + +##### 4.3.3.2 SQLServer数据库 + +```yaml +spring: + datasource: + driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver + type: com.microsoft.sqlserver.jdbc.SQLServerDataSource + url: jdbc:sqlserver://127.0.0.1:1433;databaseName=yunzhupaas_flow;trustServerCertificate=true + username: dbuser + password: dbpasswd +``` + +##### 4.3.3.3 Oracle数据库 +> 必需配置模式名称 + +```yaml +flowable: + database-schema: YUNZHUPAAS_FLOW +spring: + datasource: + driver-class-name: oracle.jdbc.OracleDriver + type: oracle.jdbc.datasource.impl.OracleDataSource + url: jdbc:oracle:thin:@127.0.0.1:1521:ORCL + username: YUNZHUPAAS_FLOW + password: dbpasswd +``` + +##### 4.3.3.4 PostgreSQL数据库 + +**若使用默认 `public` 模式** + +```yaml +spring: + datasource: + driver-class-name: org.postgresql.Driver + type: org.postgresql.ds.PGSimpleDataSource + url: jdbc:postgresql://127.0.0.1:5432/yunzhupaas_flow + username: dbuser + password: dbpasswd +``` + +**若使用其他模式** + +```yaml +flowable: + database-schema: yunzhupaas_flow +spring: + datasource: + driver-class-name: org.postgresql.Driver + type: org.postgresql.ds.PGSimpleDataSource + url: jdbc:postgresql://127.0.0.1:5432/yunzhupaas_flow + username: dbuser + password: dbpasswd +``` + +##### 4.3.3.5 达梦dm8数据库 +> 必需配置模式名称,连接后面需要添加参数 ?compatibleMode=oracle + +```yaml +flowable: + database-schema: YUNZHUPAAS_FLOW +spring: + datasource: + driver-class-name: dm.jdbc.driver.DmDriver + type: dm.jdbc.driver.DmdbDataSource + url: jdbc:dm://127.0.0.1:5236/YUNZHUPAAS_FLOW?compatibleMode=oracle + username: dbuser + password: dbpasswd +``` + +##### 4.3.3.6 人大金仓KingbaseES数据库 + +**若使用默认 `public` 模式** + +```yaml +spring: + datasource: + driver-class-name: org.postgresql.Driver + type: org.postgresql.ds.PGSimpleDataSource + url: jdbc:postgresql://127.0.0.1:5432/yunzhupaas_flow + username: dbuser + password: dbpasswd +``` + +**若使用其他模式** + +```yaml +flowable: + database-schema: yunzhupaas_flow +spring: + datasource: + driver-class-name: org.postgresql.Driver + type: org.postgresql.ds.PGSimpleDataSource + url: jdbc:postgresql://127.0.0.1:5432/yunzhupaas_flow + username: dbuser + password: dbpasswd +``` + +### 4.4 执行调试或运行 + +#### 4.4.1 `yunzhupaas-workflow-core` 项目未使用加密 + +- 在IDEA中, 展开右侧 `Maven` 中 `Profiles` 去除勾选 `encrypted` 选项, 再点击 Maven `刷新` 图标刷新Maven +- 找到 `yunzhupaas-workflow-admin/src/main/java/yunzhupaas/YunzhupaasFlowableApplication.java`,右击运行即可。 + +若使用JDK9及以上版本,在IDEA中,打开 `Edit Configurations` VM启动参数添加如下参数: + + ```bash + --add-opens java.base/java.lang=ALL-UNNAMED + ``` + +#### 4.4.2 `yunzhupaas-workflow-core` 项目使用加密 + +- 在IDEA中,展开右侧 `Maven` 中 `Profiles` 勾选 `encrypted` 选项, 再点击Maven `刷新` 图标刷新Maven +- 在IDEA中,双击右侧 `Maven` 中 `yunzhupaas-workflow` > `clean` 将会自动安装加密打包插件, 并创建创建`yunzhupaas-workflow-admin/target/copylib` 复制依赖包用于下一步运行 + +**参数说明**: + +```bash +# 打开项目中`yunzhupaas-workflow-admin/target/copylib` 目录, 复制Jar包 `yunzhupaas-workflow-common-版本号.jar` 的文件名 +-javaagent:项目存放路径/yunzhupaas-workflow-admin/target/copylib/yunzhupaas-workflow-common-当前版本号.jar(上面复制的文件名)="decryptProjectPathPrefix=yunzhupaas-workflow-common___yunzhupaas-workflow-flowable" +``` + +- 在IDEA中,打开 `Edit Configurations` VM启动参数添加如下参数 + +若使用 JDK8 运行,需要替换下方命令示例中的Jar包路径 + + ``` bash +-XX:+DisableAttachMechanism +-javaagent:D:/Projects/IdeaProjects/yunzhupaas-workflow-boot/yunzhupaas-workflow-admin/target/copylib/yunzhupaas-workflow-common-1.0.0-RELEASE.jar="decryptProjectPathPrefix=yunzhupaas-workflow-common___yunzhupaas-workflow-flowable" + ``` + +若使用JDK 9及以上版本,需要替换下方命令示例中的Jar包路径 + + ``` bash +--add-opens java.base/java.lang=ALL-UNNAMED +-XX:+DisableAttachMechanism +-javaagent:D:/Projects/IdeaProjects/yunzhupaas-workflow-boot/yunzhupaas-workflow-admin/target/copylib/yunzhupaas-workflow-common-1.0.0-RELEASE.jar="decryptProjectPathPrefix=yunzhupaas-workflow-common___yunzhupaas-workflow-flowable" + ``` + +### 4.5 专业版用户 +> 专业版用户无 `yunzhupaas-workflow-core` 项目 + +若使用 `JDK 8/11` 开发 + +- 首先全局搜索 `jakarta.` 批量替换为 `javax.`, +- 在本项目根目录打开 `pom.xml` 文件,注释第 92 行,解除注释第 94 行; + +## 五 项目发布 + +### 5.1 `yunzhupaas-workflow-core` 项目未使用加密 + +- 在IDEA中, 展开右侧 `Maven` 中 `Profiles` 去除勾选 `encrypted` 选项, 再点击Maven `刷新` 图标刷新Maven +- 在IDEA中,双击右侧Maven中 `yunzhupaas-workflow` > `Lifecycle` > `clean` 清理项目 +- 在IDEA中,双击右侧Maven中 `yunzhupaas-workflow` > `Lifecycle` > `package` 打包项目 +- 打开 `yunzhupaas-workflow/yunzhupaas-workflow-admin/target`,将 `yunzhupaas-workflow-admin-1.0.0-RELEASE.jar` 上传至服务器 + +### 5.2 `yunzhupaas-workflow-core` 项目使用加密 +- 在IDEA中, 展开右侧 `Maven` 中 `Profiles` 勾选 `encrypted` 选项, 再点击Maven `刷新` 图标刷新Maven +- 在IDEA中,双击右侧 `Maven` > `yunzhupaas-workflow` > `clean` 将会自动安装加密打包插件 +- 在IDEA中,双击右侧 `Maven` > `yunzhupaas-workflow` > `Lifecycle` > `package` 打包项目 +- 打开 `yunzhupaas-workflow/yunzhupaas-workflow-admin/target`,将 `yunzhupaas-workflow-admin-1.0.0-RELEASE.jar` 上传至服务器 +- 启动命令 + +若使用 JDK/JRE 8 运行 + +```bash +java -javaagent:./yunzhupaas-workflow-admin-1.0.0-RELEASE.jar -XX:+DisableAttachMechanism -jar yunzhupaas-workflow-admin-1.0.0-RELEASE.jar + ``` + +若使用 JDK/JRE 9及以上版本运行 + +```bash +java -javaagent:./yunzhupaas-workflow-admin-1.0.0-RELEASE.jar --add-opens java.base/java.lang=ALL-UNNAMED -XX:+DisableAttachMechanism -jar yunzhupaas-workflow-admin-1.0.0-RELEASE.jar + ``` diff --git a/allatori/class-winter-maven-plugin-pom.xml b/allatori/class-winter-maven-plugin-pom.xml new file mode 100644 index 0000000..b8cef5e --- /dev/null +++ b/allatori/class-winter-maven-plugin-pom.xml @@ -0,0 +1,37 @@ + + + 4.0.0 + + com.idea-aedi + class-winter-core + enhance-2.9.4 + + + + com.idea-aedi + class-winter-core + ${project.version} + + + + org.apache.maven + maven-plugin-api + 3.8.1 + + + + org.apache.maven.plugin-tools + maven-plugin-annotations + 3.6.1 + provided + + + + org.apache.maven + maven-project + 2.2.1 + + + diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..1994e9a --- /dev/null +++ b/pom.xml @@ -0,0 +1,118 @@ + + + 4.0.0 + + yunzhupaas-workflow + pom + 1.0.0-RELEASE + + yunzhupaas-workflow-admin + + + + com.yunzhupaas + yunzhupaas-workflow-core + 1.0.0-RELEASE + + + + 2.2 + 8.3.0 + 21.9.0.0 + 8.1.3.140 + 12.6.1.jre8 + 42.6.2 + 6.0.0 + 42.5.0 + + + + + + com.mysql + mysql-connector-j + ${mysql.version} + + + org.yaml + snakeyaml + ${snakeyaml.version} + + + + com.oracle.database.jdbc + ojdbc8 + ${oracle.version} + + + com.oracle.database.nls + orai18n + ${oracle.version} + + + + com.dameng + DmJdbcDriver18 + ${dm18.version} + + + + com.microsoft.sqlserver + mssql-jdbc + ${sqlserver.version} + + + + org.postgresql + postgresql + ${postgre.version} + + + + + + + + + + + boot3 + + [17,) + + + + + + + + + + + boot2 + + (,17) + + + + + + + + + + + + + + diff --git a/yunzhupaas-workflow-admin/pom.xml b/yunzhupaas-workflow-admin/pom.xml new file mode 100644 index 0000000..3c71e70 --- /dev/null +++ b/yunzhupaas-workflow-admin/pom.xml @@ -0,0 +1,113 @@ + + + + + yunzhupaas-workflow + com.yunzhupaas + 1.0.0-RELEASE + + 4.0.0 + jar + + yunzhupaas-workflow-admin + + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-validation + + + com.mysql + mysql-connector-j + + + + + com.oracle.database.jdbc + ojdbc8 + + + com.oracle.database.nls + orai18n + + + + com.dameng + DmJdbcDriver18 + + + + com.microsoft.sqlserver + mssql-jdbc + + + + org.postgresql + postgresql + + + + + + + + + + flowable + + [,] + + + + com.yunzhupaas + yunzhupaas-workflow-flowable${com.yunzhupaas.workflow.core.jdk.version} + ${project.version} + + + + + + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + com.yunzhupaas.FlowableApplication + ZIP + + + + + repackage + + + + + + + + diff --git a/yunzhupaas-workflow-admin/src/main/java/com/yunzhupaas/FlowableApplication.java b/yunzhupaas-workflow-admin/src/main/java/com/yunzhupaas/FlowableApplication.java new file mode 100644 index 0000000..3415cf5 --- /dev/null +++ b/yunzhupaas-workflow-admin/src/main/java/com/yunzhupaas/FlowableApplication.java @@ -0,0 +1,18 @@ +package com.yunzhupaas; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +/** + * 启动类 + * + * @author YUNZHUPAAS FlowableYUNZHUPAAS开发组 + * @version 1.0.0 + * @since 2024/4/2 17:55 + **/ +@SpringBootApplication +public class FlowableApplication { + public static void main(String[] args) { + SpringApplication.run(FlowableApplication.class, args); + } +} diff --git a/yunzhupaas-workflow-admin/src/main/java/com/yunzhupaas/workflow/admin/controller/DefinitionController.java b/yunzhupaas-workflow-admin/src/main/java/com/yunzhupaas/workflow/admin/controller/DefinitionController.java new file mode 100644 index 0000000..388e53a --- /dev/null +++ b/yunzhupaas-workflow-admin/src/main/java/com/yunzhupaas/workflow/admin/controller/DefinitionController.java @@ -0,0 +1,89 @@ +package com.yunzhupaas.workflow.admin.controller; + +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.validation.Valid; +import com.yunzhupaas.workflow.admin.result.Result; +import com.yunzhupaas.workflow.common.exception.ResultCode; +import com.yunzhupaas.workflow.common.model.fo.DefinitionDeleteFo; +import com.yunzhupaas.workflow.common.model.fo.DefinitionDeployFo; +import com.yunzhupaas.workflow.common.model.vo.DefinitionVo; +import com.yunzhupaas.workflow.common.model.vo.DeploymentVo; +import com.yunzhupaas.workflow.common.service.IDefinitionService; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * 流程定义控制层 + * + * @author YUNZHUPAAS FlowableYUNZHUPAAS开发组 + * @version 1.0.0 + * @since 2024/4/7 10:36 + */ +@Slf4j +@Tag(name = "流程定义控制层", description = "DefinitionController") +@RestController +@RequestMapping("/api/Flow/definition") +@RequiredArgsConstructor +public class DefinitionController { + private final IDefinitionService definitionService; + + /** + * 部署流程定义 + * + * @param fo {@link DefinitionDeployFo} + * @return {@link Result} + * @since 2024/4/7 13:39 + **/ + @Operation(summary = "deploy", description = "部署流程定义") + @PostMapping("/deploy") + public Result deploy(@RequestBody @Valid DefinitionDeployFo fo) { + DeploymentVo vo = definitionService.deployDefinition(fo); + if (null != vo) { + return Result.success(vo); + } + return Result.failed(ResultCode.DEPLOY_FAILURE); + } + + /** + * 列表查询流程定义 + * + * @return {@link Result>} + * @since 2024/4/7 13:39 + **/ + @Operation(summary = "list", description = "列表查询流程定义") + @GetMapping("/list") + public Result> list() { + return Result.success(definitionService.listDefinition()); + } + + /** + * 删除流程定义 + * + * @param fo {@link DefinitionDeleteFo} + * @return {@link Result} + * @since 2024/4/7 13:39 + **/ + @Operation(summary = "delete", description = "删除流程定义") + @DeleteMapping + public Result delete(@Valid DefinitionDeleteFo fo) { + if (definitionService.deleteDefinition(fo)) { + return Result.success(ResultCode.DELETE_SUCCESS); + } + return Result.failed(ResultCode.DELETE_FAILURE); + } + + /** + * 获取流程元素 + * + * @param deploymentId 部署ID + */ + @Operation(summary = "get", description = "获取流程元素") + @GetMapping("/{deploymentId}") + public Result getStructure(@PathVariable("deploymentId") String deploymentId) { + return Result.success(definitionService.getStructure(deploymentId)); + } +} diff --git a/yunzhupaas-workflow-admin/src/main/java/com/yunzhupaas/workflow/admin/controller/InstanceController.java b/yunzhupaas-workflow-admin/src/main/java/com/yunzhupaas/workflow/admin/controller/InstanceController.java new file mode 100644 index 0000000..3841697 --- /dev/null +++ b/yunzhupaas-workflow-admin/src/main/java/com/yunzhupaas/workflow/admin/controller/InstanceController.java @@ -0,0 +1,77 @@ +package com.yunzhupaas.workflow.admin.controller; + +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.validation.Valid; +import com.yunzhupaas.workflow.admin.result.Result; +import com.yunzhupaas.workflow.common.exception.ResultCode; +import com.yunzhupaas.workflow.common.model.fo.InstanceDeleteFo; +import com.yunzhupaas.workflow.common.model.fo.InstanceStartFo; +import com.yunzhupaas.workflow.common.model.vo.HistoricInstanceVo; +import com.yunzhupaas.workflow.common.model.vo.InstanceVo; +import com.yunzhupaas.workflow.common.service.IInstanceService; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +/** + * 流程实例控制层 + * + * @author YUNZHUPAAS FlowableYUNZHUPAAS开发组 + * @version 1.0.0 + * @since 2024/4/7 16:29 + */ +@Slf4j +@Tag(name = "流程实例控制层", description = "InstanceController") +@RestController +@RequestMapping("/api/Flow/instance") +@RequiredArgsConstructor +public class InstanceController { + private final IInstanceService instanceService; + + /** + * 启动流程实例 + * + * @param fo {@link InstanceStartFo} + * @return {@link Result} + * @since 2024/4/7 17:35 + **/ + @Operation(summary = "start", description = "启动流程实例") + @PostMapping("/start") + public Result start(@RequestBody @Valid InstanceStartFo fo) { + InstanceVo vo = instanceService.startById(fo); + if (null != vo) { + return Result.success(vo); + } + return Result.failed(ResultCode.START_FAILURE); + } + + /** + * 获取流程实例 + * + * @param instanceId {@link String} + * @return {@link Result} + * @since 2024/4/7 18:17 + **/ + @Operation(summary = "get", description = "获取流程实例") + @GetMapping("/{instanceId}") + public Result getInstance(@PathVariable("instanceId") String instanceId) { + return Result.success(instanceService.getHistoricProcessInstance(instanceId)); + } + + /** + * 删除流程实例 + * + * @param fo {@link InstanceDeleteFo} + * @return {@link Result} + * @since 2024/4/7 17:35 + **/ + @Operation(summary = "delete", description = "删除流程实例") + @DeleteMapping + public Result delete(InstanceDeleteFo fo) { + if (instanceService.deleteInstance(fo)) { + return Result.success(ResultCode.DELETE_SUCCESS); + } + return Result.failed(ResultCode.DELETE_FAILURE); + } +} diff --git a/yunzhupaas-workflow-admin/src/main/java/com/yunzhupaas/workflow/admin/controller/TaskController.java b/yunzhupaas-workflow-admin/src/main/java/com/yunzhupaas/workflow/admin/controller/TaskController.java new file mode 100644 index 0000000..93dbc71 --- /dev/null +++ b/yunzhupaas-workflow-admin/src/main/java/com/yunzhupaas/workflow/admin/controller/TaskController.java @@ -0,0 +1,298 @@ +package com.yunzhupaas.workflow.admin.controller; + +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.validation.Valid; +import com.yunzhupaas.workflow.admin.result.Result; +import com.yunzhupaas.workflow.common.exception.ResultCode; +import com.yunzhupaas.workflow.common.model.fo.*; +import com.yunzhupaas.workflow.common.model.vo.HistoricNodeVo; +import com.yunzhupaas.workflow.common.model.vo.NodeElementVo; +import com.yunzhupaas.workflow.common.model.vo.TaskVo; +import com.yunzhupaas.workflow.common.service.ITaskService; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * 流程任务控制层 + * + * @author YUNZHUPAAS FlowableYUNZHUPAAS开发组 + * @version 1.0.0 + * @since 2024/4/8 14:17 + */ +@Slf4j +@Tag(name = "流程任务控制层", description = "TaskController") +@RestController +@RequestMapping("/api/Flow/task") +@RequiredArgsConstructor +public class TaskController { + private final ITaskService taskService; + + /** + * 根据流程实例ID获取任务 + * + * @param instanceId {@link String} + * @return {@link Result>} + * @since 2024/4/8 15:10 + **/ + @Operation(summary = "list", description = "根据流程实例ID获取任务") + @GetMapping("/list/{instanceId}") + public Result> list(@PathVariable("instanceId") String instanceId) { + return Result.success(taskService.getTask(instanceId)); + } + + /** + * 完成任务 + * + * @param fo {@link TaskCompleteFo} + * @return {@link Result} + * @since 2024/4/8 15:10 + **/ + @Operation(summary = "complete", description = "完成任务") + @PostMapping("/complete") + public Result complete(@RequestBody @Valid TaskCompleteFo fo) { + if (taskService.complete(fo)) { + return Result.success(ResultCode.COMPLETE_SUCCESS); + } + return Result.failed(ResultCode.COMPLETE_FAILURE); + } + + /** + * 单节点跳转多节点 + * + * @param fo {@link MoveSingleToMultiFo} + * @return {@link Result} + * @since 2024/4/10 10:30 + **/ + @Operation(summary = "moveSingleToMulti", description = "单节点跳转多节点") + @PostMapping("/move/single/to/multi") + public Result moveSingleToMulti(@RequestBody @Valid MoveSingleToMultiFo fo) { + if (taskService.moveSingleToMulti(fo)) { + return Result.success(ResultCode.JUMP_SUCCESS); + } + return Result.failed(ResultCode.JUMP_FAILURE); + } + + /** + * 多节点跳转单节点 + * + * @param fo {@link MoveMultiToSingleFo} + * @return {@link Result} + * @since 2024/4/10 10:30 + **/ + @Operation(summary = "moveMultiToSingle", description = "多节点跳转单节点") + @PostMapping("/move/multi/to/single") + public Result moveMultiToSingle(@RequestBody @Valid MoveMultiToSingleFo fo) { + if (taskService.moveMultiToSingle(fo)) { + return Result.success(ResultCode.JUMP_SUCCESS); + } + return Result.failed(ResultCode.JUMP_FAILURE); + } + + /** + * 节点跳转 + * + * @param fo {@link JumpFo} + * @return {@link Result} + * @since 2024/4/10 11:50 + **/ + @Operation(summary = "jump", description = "节点跳转") + @PostMapping("/jump") + public Result jump(@RequestBody JumpFo fo) { + if (taskService.jump(fo)) { + return Result.success(ResultCode.JUMP_SUCCESS); + } + return Result.failed(ResultCode.JUMP_FAILURE); + } + + /** + * 获取可回退的节点ID + * + * @param taskId {@link String} + * @return {@link Result>} + * @since 2024/4/8 16:03 + **/ + @Operation(summary = "fallbacks", description = "获取可回退的节点ID") + @GetMapping("/fallbacks/{taskId}") + public Result> fallbacks(@PathVariable("taskId") String taskId) { + return Result.success(taskService.getFallbacks(taskId)); + } + + /** + * 退回 + * + * @param fo {@link TaskBackFo} + * @return {@link Result>} + * @since 2024/4/9 9:27 + **/ + @Operation(summary = "back", description = "退回") + @PostMapping("/back") + public Result> back(@RequestBody @Valid TaskBackFo fo) { + return Result.success(taskService.back(fo)); + } + + /** + * 获取上一级任务节点ID集合 + * + * @param fo {@link TaskPrevFo} + * @return {@link Result>} + * @since 2024/4/9 9:27 + **/ + @Operation(summary = "get", description = "获取上一级任务节点ID集合") + @GetMapping("/prev") + public Result> getPrev(TaskPrevFo fo) { + return Result.success(taskService.getPrevUserTask(fo)); + } + + /** + * 获取下一级任务节点集合 + * + * @param fo {@link TaskNextFo} + * @return {@link Result>} + * @since 2024/4/9 9:27 + **/ + @Operation(summary = "get", description = "获取下一级任务节点集合") + @GetMapping("/next") + public Result> getNext(TaskNextFo fo) { + return Result.success(taskService.getNextUserTask(fo)); + } + + /** + * 撤回 + * + * @param taskId {@link String} + * @return {@link Result} + * @since 2024/4/9 11:08 + **/ + @Operation(summary = "retract", description = "撤回") + @PostMapping("/retract/{taskId}") + public Result retract(@PathVariable("taskId") String taskId) { + if (taskService.retract(taskId)) { + return Result.success(ResultCode.RETRACT_SUCCESS); + } + return Result.failed(ResultCode.RETRACT_FAILURE); + } + + /** + * 获取出线Key集合(若出线的出口为网关,则一并获取网关的出线) + * + * @param fo {@link TaskOutgoingFo} + * @return {@link Result>} + * @since 2024/4/9 11:08 + **/ + @Operation(summary = "outgoingFlows", description = "获取出线Key集合(若出线的出口为网关,则一并获取网关的出线)") + @GetMapping("/outgoing/flows") + public Result> getOutgoingFlows(TaskOutgoingFo fo) { + return Result.success(taskService.getOutgoingFlows(fo)); + } + + /** + * 获取完成的节点Key + * + * @param instanceId {@link String} + * @return {@link Result>} + * @since 2024/4/9 13:54 + **/ + @Operation(summary = "get", description = "获取完成的节点Key") + @GetMapping("/finished/keys/{instanceId}") + public Result> getKeysOfFinished(@PathVariable("instanceId") String instanceId) { + return Result.success(taskService.getKeysOfFinished(instanceId)); + } + + /** + * 获取进线的Key + * + * @param taskId {@link String} + * @return {@link Result>} + * @since 2024/4/9 13:58 + **/ + @Operation(summary = "get", description = "获取进线的Key") + @GetMapping("/incoming/flows/{taskId}") + public Result> getIncomingFlows(@PathVariable("taskId") String taskId) { + return Result.success(taskService.getIncomingFlows(taskId)); + } + + /** + * 获取线之后的任务节点 + * + * @param fo {@link FlowTargetTaskFo} + * @return {@link Result} + * @since 2024/4/17 17:48 + **/ + @Operation(summary = "get", description = "获取线之后的任务节点") + @GetMapping("/flow/target") + public Result> getTaskKeyAfterFlow(FlowTargetTaskFo fo) { + return Result.success(taskService.getTaskKeyAfterFlow(fo)); + } + + /** + * 获取未经过的节点 + * + * @param instanceId {@link String} + * @return {@link Result>} + * @since 2024/4/29 10:08 + **/ + @Operation(summary = "get", description = "获取未经过的节点") + @GetMapping("/tobe/pass/{instanceId}") + public Result> getToBePass(@PathVariable("instanceId") String instanceId) { + return Result.success(taskService.getToBePass(instanceId)); + } + + /** + * 获取节点的后续节点 + * + * @param fo 参数 + */ + @Operation(summary = "get", description = "获取节点的后续节点") + @PostMapping("/after") + public Result> getAfter(@RequestBody TaskAfterFo fo) { + return Result.success(taskService.getAfter(fo)); + } + + /** + * 异常补偿 + * + * @param fo 参数 + */ + @Operation(summary = "compensate", description = "异常补偿") + @PostMapping("/compensate") + public Result> compensate(@RequestBody CompensateFo fo) { + return Result.success(taskService.compensate(fo)); + } + + /** + * 获取历史节点 + * + * @param instanceId 实例主键 + */ + @Operation(summary = "historic", description = "获取历史节点") + @GetMapping("/historic/{instanceId}") + public Result> getHistoric(@PathVariable("instanceId") String instanceId) { + return Result.success(taskService.getHistoric(instanceId)); + } + + /** + * 获取历史结束节点 + * + * @param instanceId 实例主键 + */ + @Operation(summary = "historicEnd", description = "获取历史结束节点") + @GetMapping("/historic/end/{instanceId}") + public Result> getHistoricEnd(@PathVariable("instanceId") String instanceId) { + return Result.success(taskService.getHistoricEnd(instanceId)); + } + + /** + * 获取元素信息 + * + * @param model 参数 + */ + @Operation(summary = "elementInfo", description = "获取元素信息") + @GetMapping("/element/info") + public Result getElementInfo(InfoModel model) { + return Result.success(taskService.getElementInfo(model)); + } +} diff --git a/yunzhupaas-workflow-admin/src/main/java/com/yunzhupaas/workflow/admin/handle/GlobalExceptionHandler.java b/yunzhupaas-workflow-admin/src/main/java/com/yunzhupaas/workflow/admin/handle/GlobalExceptionHandler.java new file mode 100644 index 0000000..219df00 --- /dev/null +++ b/yunzhupaas-workflow-admin/src/main/java/com/yunzhupaas/workflow/admin/handle/GlobalExceptionHandler.java @@ -0,0 +1,61 @@ +package com.yunzhupaas.workflow.admin.handle; + +import jakarta.servlet.http.HttpServletRequest; +import com.yunzhupaas.workflow.admin.result.Result; +import com.yunzhupaas.workflow.common.exception.BizException; +import com.yunzhupaas.workflow.common.exception.ResultCode; +import lombok.extern.slf4j.Slf4j; +import org.springframework.context.support.DefaultMessageSourceResolvable; +import org.springframework.validation.BindException; +import org.springframework.validation.FieldError; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.RestControllerAdvice; + +import java.util.List; +import java.util.stream.Collectors; + +/** + * 全局异常处理 + * + * @author YUNZHUPAAS FlowableYUNZHUPAAS开发组 + * @version 1.0.0 + * @since 2024/4/3 15:33 + */ +@Slf4j +@RestControllerAdvice +public class GlobalExceptionHandler { + @ExceptionHandler(BindException.class) + public Result bindExceptionHandler(BindException e) { + log.error("接口校验失败!原因是:{}", e.getMessage(), e); + List fieldErrors = e.getBindingResult().getFieldErrors(); + List collect = fieldErrors.stream() + .map(DefaultMessageSourceResolvable::getDefaultMessage) + .collect(Collectors.toList()); + String msg = String.join(",", collect); + return Result.failed(ResultCode.REQUEST_PARAM_IS_NULL, msg); + } + + /** + * 处理空指针的异常 + */ + @ExceptionHandler(value = NullPointerException.class) + public Result exceptionHandler(HttpServletRequest req, NullPointerException e) { + log.error("发生空指针异常!原因是:{}", e.getMessage(), e); + return Result.failed(ResultCode.SYSTEM_EXECUTION_ERROR); + } + + /** + * 处理自定义异常 + */ + @ExceptionHandler(value = BizException.class) + public Result exceptionHandler(HttpServletRequest req, BizException e) { + log.error("BizException!原因是:{}", e.getMessage(), e); + return Result.failed(e.getResultCode(), e.getMessage()); + } + + @ExceptionHandler(Exception.class) + public Result exceptionHandler(HttpServletRequest req, Exception e) { + log.error("未知异常!原因是:{}", e.getMessage(), e); + return Result.failed(e.getMessage()); + } +} diff --git a/yunzhupaas-workflow-admin/src/main/java/com/yunzhupaas/workflow/admin/result/Result.java b/yunzhupaas-workflow-admin/src/main/java/com/yunzhupaas/workflow/admin/result/Result.java new file mode 100644 index 0000000..7eeff12 --- /dev/null +++ b/yunzhupaas-workflow-admin/src/main/java/com/yunzhupaas/workflow/admin/result/Result.java @@ -0,0 +1,96 @@ +package com.yunzhupaas.workflow.admin.result; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.yunzhupaas.workflow.common.exception.ResultCode; +import lombok.Data; + +import java.io.Serializable; + +/** + * 统一返回结果类 + * + * @author YUNZHUPAAS FlowableYUNZHUPAAS开发组 + * @version 1.0.0 + * @since 2024/4/3 15:00 + */ +@Data +@JsonInclude(JsonInclude.Include.NON_NULL) +public class Result implements Serializable { + private Boolean success; + private String code; + private String msg; + private T data; + + public static Result result(Boolean success, String code, String msg, T data) { + Result result = new Result<>(); + result.setSuccess(success); + result.setCode(code); + result.setMsg(msg); + result.setData(data); + return result; + } + + public static Result result(Boolean success, ResultCode resultCode, T data) { + return result(success, resultCode.getCode(), resultCode.getMsg(), data); + } + + public static boolean isSuccess(Result result) { + return result != null && ResultCode.SUCCESS.getCode().equals(result.getCode()); + } + + public static Result success() { + return result(true, ResultCode.SUCCESS, null); + } + + public static Result success(T data) { + return result(true, ResultCode.SUCCESS, data); + } + + public static Result success(ResultCode resultCode, T data) { + return result(true, resultCode, data); + } + + public static Result success(ResultCode resultCode) { + return result(true, resultCode, null); + } + + public static Result success(String code, String msg, T data) { + return result(true, code, msg, data); + } + + public static Result success(String msg) { + return result(true, ResultCode.SUCCESS.getCode(), msg, null); + } + + public static Result failed() { + return result(false, ResultCode.FAILURE.getCode(), ResultCode.FAILURE.getMsg(), null); + } + + public static Result failed(T data) { + return result(false, ResultCode.FAILURE.getCode(), ResultCode.FAILURE.getMsg(), data); + } + + public static Result failed(String msg) { + return result(false, ResultCode.FAILURE.getCode(), msg, null); + } + + public static Result failed(String msg, T data) { + return result(false, ResultCode.FAILURE.getCode(), msg, data); + } + + public static Result failed(ResultCode resultCode) { + return result(false, resultCode.getCode(), resultCode.getMsg(), null); + } + + public static Result failed(ResultCode resultCode, T data) { + return result(false, resultCode.getCode(), resultCode.getMsg(), data); + } + + public static Result failed(ResultCode resultCode, String msg) { + return result(false, resultCode.getCode(), msg, null); + } + + public static Result failed(ResultCode resultCode, String msg, T data) { + return result(false, resultCode.getCode(), msg, data); + } +} diff --git a/yunzhupaas-workflow-admin/src/main/resources/application-dev.yml b/yunzhupaas-workflow-admin/src/main/resources/application-dev.yml new file mode 100644 index 0000000..2741d69 --- /dev/null +++ b/yunzhupaas-workflow-admin/src/main/resources/application-dev.yml @@ -0,0 +1,101 @@ +server: + port: 31000 + +logging: + level: + root: info + org.flowable.engine.impl.persistence.entity.*: debug + org.flowable.task.service.impl.persistence.entity.*: debug + +# 注意: +# 若使用 Oracle 或 达梦 数据库必需配置模式名称 +# 若使用 PostgreSQL 和 人大金仓KingbaseES 数据库, 默认public模式无需配置模式名称, 若指定模式需要配置模式名称 +# 若使用 MySQL 和 SQLServer 无需配置模式名称 +#flowable: +# database-schema: YUNZHUPAAS_FLOW + +# ===================== 1 若使用MySQL数据库-Start ===================== +spring: + datasource: + driver-class-name: com.mysql.cj.jdbc.Driver + type: com.mysql.cj.jdbc.MysqlDataSource + url: jdbc:mysql://mysql.szlecheng.cn:13306/jnpfsoft_flow?yunzhupaasDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&autoReconnect=true&nullCatalogMeansCurrent=true&allowPublicKeyRetrieval=true + username: jnpfsoft_flow + password: C6J7BiD2bskYAwtZ +# ===================== 1 若使用MySQL数据库-End ======================= +# ===================== 2 若使用SQLServer数据库-Start ===================== +#spring: +# datasource: +# driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver +# type: com.microsoft.sqlserver.jdbc.SQLServerDataSource +# url: jdbc:sqlserver://127.0.0.1:1433;databaseName=yunzhupaas_flow;trustServerCertificate=true +# username: sa +# password: 123456 +# ===================== 2 若使用SQLServer数据库-End ======================= +# ===================== 3 若使用Oracle数据库-Start ===================== +#flowable: +# database-schema: YUNZHUPAAS_FLOW +#spring: +# datasource: +# driver-class-name: oracle.jdbc.OracleDriver +# type: oracle.jdbc.datasource.impl.OracleDataSource +# url: jdbc:oracle:thin:@127.0.0.1:1521:ORCL +# username: YUNZHUPAAS_FLOW +# password: dbpasswd +# ===================== 3 若使用Oracle数据库-End ======================= +# ===================== 4 若使用PostgreSQL数据库-Start ===================== +# ========== 4.1 若使用默认public模式-Start ========== +#spring: +# datasource: +# driver-class-name: org.postgresql.Driver +# type: org.postgresql.ds.PGSimpleDataSource +# url: jdbc:postgresql://127.0.0.1:5432/yunzhupaas_flow +# username: dbuser +# password: dbpasswd +# ========== 4.1 若使用默认public模式-End ========== +# ========== 4.2 若使用其他模式-Start ========== +#flowable: +# database-schema: yunzhupaas_flow +#spring: +# datasource: +# driver-class-name: org.postgresql.Driver +# type: org.postgresql.ds.PGSimpleDataSource +# url: jdbc:postgresql://127.0.0.1:5432/yunzhupaas_flow +# username: dbuser +# password: dbpasswd +# ========== 4.2 若使用其他模式-End ========== +# ===================== 4 若使用PostgreSQL数据库-End ======================= +# ===================== 5 若使用达梦dm8数据库-Start ===================== +#flowable: +# database-schema: YUNZHUPAAS_FLOW +#spring: +# datasource: +# driver-class-name: dm.jdbc.driver.DmDriver +# type: dm.jdbc.driver.DmdbDataSource +# # 连接后面需要添加参数 ?compatibleMode=oracle +# url: jdbc:dm://127.0.0.1:5236/YUNZHUPAAS_FLOW?compatibleMode=oracle +# username: dbuser +# password: dbpasswd +# ===================== 5 若使用达梦dm8数据库-End ======================= +# ===================== 6 若使用人大金仓KingbaseES数据库-Start ===================== +# ========== 6.1 若使用默认public模式-Start ========== +#spring: +# datasource: +# driver-class-name: org.postgresql.Driver +# type: org.postgresql.ds.PGSimpleDataSource +# url: jdbc:postgresql://127.0.0.1:5432/yunzhupaas_flow +# username: dbuser +# password: dbpasswd +# ========== 6.1 若使用默认public模式-End ========== +# ========== 6.2 若使用其他模式-Start ========== +#flowable: +# database-schema: yunzhupaas_flow +#spring: +# datasource: +# driver-class-name: org.postgresql.Driver +# type: org.postgresql.ds.PGSimpleDataSource +# url: jdbc:postgresql://127.0.0.1:5432/yunzhupaas_flow +# username: dbuser +# password: dbpasswd +# ========== 6.2 若使用其他模式-End ========== +# ===================== 6 若使用人大金仓KingbaseES数据库-End ======================= diff --git a/yunzhupaas-workflow-admin/src/main/resources/application-preview.yml b/yunzhupaas-workflow-admin/src/main/resources/application-preview.yml new file mode 100644 index 0000000..5e6b7d4 --- /dev/null +++ b/yunzhupaas-workflow-admin/src/main/resources/application-preview.yml @@ -0,0 +1,101 @@ +server: + port: 31000 + +logging: + level: + root: info + org.flowable.engine.impl.persistence.entity.*: debug + org.flowable.task.service.impl.persistence.entity.*: debug + +# 注意: +# 若使用 Oracle 或 达梦 数据库必需配置模式名称 +# 若使用 PostgreSQL 和 人大金仓KingbaseES 数据库, 默认public模式无需配置模式名称, 若指定模式需要配置模式名称 +# 若使用 MySQL 和 SQLServer 无需配置模式名称 +#flowable: +# database-schema: YUNZHUPAAS_FLOW + +# ===================== 1 若使用MySQL数据库-Start ===================== +spring: + datasource: + driver-class-name: com.mysql.cj.jdbc.Driver + type: com.mysql.cj.jdbc.MysqlDataSource + url: jdbc:mysql://127.0.0.1:3306/yunzhupaas_flow?yunzhupaasDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&autoReconnect=true&nullCatalogMeansCurrent=true + username: root + password: 123456 +# ===================== 1 若使用MySQL数据库-End ======================= +# ===================== 2 若使用SQLServer数据库-Start ===================== +#spring: +# datasource: +# driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver +# type: com.microsoft.sqlserver.jdbc.SQLServerDataSource +# url: jdbc:sqlserver://127.0.0.1:1433;databaseName=yunzhupaas_flow;trustServerCertificate=true +# username: sa +# password: 123456 +# ===================== 2 若使用SQLServer数据库-End ======================= +# ===================== 3 若使用Oracle数据库-Start ===================== +#flowable: +# database-schema: YUNZHUPAAS_FLOW +#spring: +# datasource: +# driver-class-name: oracle.jdbc.OracleDriver +# type: oracle.jdbc.datasource.impl.OracleDataSource +# url: jdbc:oracle:thin:@127.0.0.1:1521:ORCL +# username: YUNZHUPAAS_FLOW +# password: dbpasswd +# ===================== 3 若使用Oracle数据库-End ======================= +# ===================== 4 若使用PostgreSQL数据库-Start ===================== +# ========== 4.1 若使用默认public模式-Start ========== +#spring: +# datasource: +# driver-class-name: org.postgresql.Driver +# type: org.postgresql.ds.PGSimpleDataSource +# url: jdbc:postgresql://127.0.0.1:5432/yunzhupaas_flow +# username: dbuser +# password: dbpasswd +# ========== 4.1 若使用默认public模式-End ========== +# ========== 4.2 若使用其他模式-Start ========== +#flowable: +# database-schema: yunzhupaas_flow +#spring: +# datasource: +# driver-class-name: org.postgresql.Driver +# type: org.postgresql.ds.PGSimpleDataSource +# url: jdbc:postgresql://127.0.0.1:5432/yunzhupaas_flow +# username: dbuser +# password: dbpasswd +# ========== 4.2 若使用其他模式-End ========== +# ===================== 4 若使用PostgreSQL数据库-End ======================= +# ===================== 5 若使用达梦dm8数据库-Start ===================== +#flowable: +# database-schema: YUNZHUPAAS_FLOW +#spring: +# datasource: +# driver-class-name: dm.jdbc.driver.DmDriver +# type: dm.jdbc.driver.DmdbDataSource +# # 连接后面需要添加参数 ?compatibleMode=oracle +# url: jdbc:dm://127.0.0.1:5236/YUNZHUPAAS_FLOW?compatibleMode=oracle +# username: dbuser +# password: dbpasswd +# ===================== 5 若使用达梦dm8数据库-End ======================= +# ===================== 6 若使用人大金仓KingbaseES数据库-Start ===================== +# ========== 6.1 若使用默认public模式-Start ========== +#spring: +# datasource: +# driver-class-name: org.postgresql.Driver +# type: org.postgresql.ds.PGSimpleDataSource +# url: jdbc:postgresql://127.0.0.1:5432/yunzhupaas_flow +# username: dbuser +# password: dbpasswd +# ========== 6.1 若使用默认public模式-End ========== +# ========== 6.2 若使用其他模式-Start ========== +#flowable: +# database-schema: yunzhupaas_flow +#spring: +# datasource: +# driver-class-name: org.postgresql.Driver +# type: org.postgresql.ds.PGSimpleDataSource +# url: jdbc:postgresql://127.0.0.1:5432/yunzhupaas_flow +# username: dbuser +# password: dbpasswd +# ========== 6.2 若使用其他模式-End ========== +# ===================== 6 若使用人大金仓KingbaseES数据库-End ======================= diff --git a/yunzhupaas-workflow-admin/src/main/resources/application-prod.yml b/yunzhupaas-workflow-admin/src/main/resources/application-prod.yml new file mode 100644 index 0000000..5e6b7d4 --- /dev/null +++ b/yunzhupaas-workflow-admin/src/main/resources/application-prod.yml @@ -0,0 +1,101 @@ +server: + port: 31000 + +logging: + level: + root: info + org.flowable.engine.impl.persistence.entity.*: debug + org.flowable.task.service.impl.persistence.entity.*: debug + +# 注意: +# 若使用 Oracle 或 达梦 数据库必需配置模式名称 +# 若使用 PostgreSQL 和 人大金仓KingbaseES 数据库, 默认public模式无需配置模式名称, 若指定模式需要配置模式名称 +# 若使用 MySQL 和 SQLServer 无需配置模式名称 +#flowable: +# database-schema: YUNZHUPAAS_FLOW + +# ===================== 1 若使用MySQL数据库-Start ===================== +spring: + datasource: + driver-class-name: com.mysql.cj.jdbc.Driver + type: com.mysql.cj.jdbc.MysqlDataSource + url: jdbc:mysql://127.0.0.1:3306/yunzhupaas_flow?yunzhupaasDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&autoReconnect=true&nullCatalogMeansCurrent=true + username: root + password: 123456 +# ===================== 1 若使用MySQL数据库-End ======================= +# ===================== 2 若使用SQLServer数据库-Start ===================== +#spring: +# datasource: +# driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver +# type: com.microsoft.sqlserver.jdbc.SQLServerDataSource +# url: jdbc:sqlserver://127.0.0.1:1433;databaseName=yunzhupaas_flow;trustServerCertificate=true +# username: sa +# password: 123456 +# ===================== 2 若使用SQLServer数据库-End ======================= +# ===================== 3 若使用Oracle数据库-Start ===================== +#flowable: +# database-schema: YUNZHUPAAS_FLOW +#spring: +# datasource: +# driver-class-name: oracle.jdbc.OracleDriver +# type: oracle.jdbc.datasource.impl.OracleDataSource +# url: jdbc:oracle:thin:@127.0.0.1:1521:ORCL +# username: YUNZHUPAAS_FLOW +# password: dbpasswd +# ===================== 3 若使用Oracle数据库-End ======================= +# ===================== 4 若使用PostgreSQL数据库-Start ===================== +# ========== 4.1 若使用默认public模式-Start ========== +#spring: +# datasource: +# driver-class-name: org.postgresql.Driver +# type: org.postgresql.ds.PGSimpleDataSource +# url: jdbc:postgresql://127.0.0.1:5432/yunzhupaas_flow +# username: dbuser +# password: dbpasswd +# ========== 4.1 若使用默认public模式-End ========== +# ========== 4.2 若使用其他模式-Start ========== +#flowable: +# database-schema: yunzhupaas_flow +#spring: +# datasource: +# driver-class-name: org.postgresql.Driver +# type: org.postgresql.ds.PGSimpleDataSource +# url: jdbc:postgresql://127.0.0.1:5432/yunzhupaas_flow +# username: dbuser +# password: dbpasswd +# ========== 4.2 若使用其他模式-End ========== +# ===================== 4 若使用PostgreSQL数据库-End ======================= +# ===================== 5 若使用达梦dm8数据库-Start ===================== +#flowable: +# database-schema: YUNZHUPAAS_FLOW +#spring: +# datasource: +# driver-class-name: dm.jdbc.driver.DmDriver +# type: dm.jdbc.driver.DmdbDataSource +# # 连接后面需要添加参数 ?compatibleMode=oracle +# url: jdbc:dm://127.0.0.1:5236/YUNZHUPAAS_FLOW?compatibleMode=oracle +# username: dbuser +# password: dbpasswd +# ===================== 5 若使用达梦dm8数据库-End ======================= +# ===================== 6 若使用人大金仓KingbaseES数据库-Start ===================== +# ========== 6.1 若使用默认public模式-Start ========== +#spring: +# datasource: +# driver-class-name: org.postgresql.Driver +# type: org.postgresql.ds.PGSimpleDataSource +# url: jdbc:postgresql://127.0.0.1:5432/yunzhupaas_flow +# username: dbuser +# password: dbpasswd +# ========== 6.1 若使用默认public模式-End ========== +# ========== 6.2 若使用其他模式-Start ========== +#flowable: +# database-schema: yunzhupaas_flow +#spring: +# datasource: +# driver-class-name: org.postgresql.Driver +# type: org.postgresql.ds.PGSimpleDataSource +# url: jdbc:postgresql://127.0.0.1:5432/yunzhupaas_flow +# username: dbuser +# password: dbpasswd +# ========== 6.2 若使用其他模式-End ========== +# ===================== 6 若使用人大金仓KingbaseES数据库-End ======================= diff --git a/yunzhupaas-workflow-admin/src/main/resources/application-test.yml b/yunzhupaas-workflow-admin/src/main/resources/application-test.yml new file mode 100644 index 0000000..5e6b7d4 --- /dev/null +++ b/yunzhupaas-workflow-admin/src/main/resources/application-test.yml @@ -0,0 +1,101 @@ +server: + port: 31000 + +logging: + level: + root: info + org.flowable.engine.impl.persistence.entity.*: debug + org.flowable.task.service.impl.persistence.entity.*: debug + +# 注意: +# 若使用 Oracle 或 达梦 数据库必需配置模式名称 +# 若使用 PostgreSQL 和 人大金仓KingbaseES 数据库, 默认public模式无需配置模式名称, 若指定模式需要配置模式名称 +# 若使用 MySQL 和 SQLServer 无需配置模式名称 +#flowable: +# database-schema: YUNZHUPAAS_FLOW + +# ===================== 1 若使用MySQL数据库-Start ===================== +spring: + datasource: + driver-class-name: com.mysql.cj.jdbc.Driver + type: com.mysql.cj.jdbc.MysqlDataSource + url: jdbc:mysql://127.0.0.1:3306/yunzhupaas_flow?yunzhupaasDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&autoReconnect=true&nullCatalogMeansCurrent=true + username: root + password: 123456 +# ===================== 1 若使用MySQL数据库-End ======================= +# ===================== 2 若使用SQLServer数据库-Start ===================== +#spring: +# datasource: +# driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver +# type: com.microsoft.sqlserver.jdbc.SQLServerDataSource +# url: jdbc:sqlserver://127.0.0.1:1433;databaseName=yunzhupaas_flow;trustServerCertificate=true +# username: sa +# password: 123456 +# ===================== 2 若使用SQLServer数据库-End ======================= +# ===================== 3 若使用Oracle数据库-Start ===================== +#flowable: +# database-schema: YUNZHUPAAS_FLOW +#spring: +# datasource: +# driver-class-name: oracle.jdbc.OracleDriver +# type: oracle.jdbc.datasource.impl.OracleDataSource +# url: jdbc:oracle:thin:@127.0.0.1:1521:ORCL +# username: YUNZHUPAAS_FLOW +# password: dbpasswd +# ===================== 3 若使用Oracle数据库-End ======================= +# ===================== 4 若使用PostgreSQL数据库-Start ===================== +# ========== 4.1 若使用默认public模式-Start ========== +#spring: +# datasource: +# driver-class-name: org.postgresql.Driver +# type: org.postgresql.ds.PGSimpleDataSource +# url: jdbc:postgresql://127.0.0.1:5432/yunzhupaas_flow +# username: dbuser +# password: dbpasswd +# ========== 4.1 若使用默认public模式-End ========== +# ========== 4.2 若使用其他模式-Start ========== +#flowable: +# database-schema: yunzhupaas_flow +#spring: +# datasource: +# driver-class-name: org.postgresql.Driver +# type: org.postgresql.ds.PGSimpleDataSource +# url: jdbc:postgresql://127.0.0.1:5432/yunzhupaas_flow +# username: dbuser +# password: dbpasswd +# ========== 4.2 若使用其他模式-End ========== +# ===================== 4 若使用PostgreSQL数据库-End ======================= +# ===================== 5 若使用达梦dm8数据库-Start ===================== +#flowable: +# database-schema: YUNZHUPAAS_FLOW +#spring: +# datasource: +# driver-class-name: dm.jdbc.driver.DmDriver +# type: dm.jdbc.driver.DmdbDataSource +# # 连接后面需要添加参数 ?compatibleMode=oracle +# url: jdbc:dm://127.0.0.1:5236/YUNZHUPAAS_FLOW?compatibleMode=oracle +# username: dbuser +# password: dbpasswd +# ===================== 5 若使用达梦dm8数据库-End ======================= +# ===================== 6 若使用人大金仓KingbaseES数据库-Start ===================== +# ========== 6.1 若使用默认public模式-Start ========== +#spring: +# datasource: +# driver-class-name: org.postgresql.Driver +# type: org.postgresql.ds.PGSimpleDataSource +# url: jdbc:postgresql://127.0.0.1:5432/yunzhupaas_flow +# username: dbuser +# password: dbpasswd +# ========== 6.1 若使用默认public模式-End ========== +# ========== 6.2 若使用其他模式-Start ========== +#flowable: +# database-schema: yunzhupaas_flow +#spring: +# datasource: +# driver-class-name: org.postgresql.Driver +# type: org.postgresql.ds.PGSimpleDataSource +# url: jdbc:postgresql://127.0.0.1:5432/yunzhupaas_flow +# username: dbuser +# password: dbpasswd +# ========== 6.2 若使用其他模式-End ========== +# ===================== 6 若使用人大金仓KingbaseES数据库-End ======================= diff --git a/yunzhupaas-workflow-admin/src/main/resources/application.yml b/yunzhupaas-workflow-admin/src/main/resources/application.yml new file mode 100644 index 0000000..ccf90f6 --- /dev/null +++ b/yunzhupaas-workflow-admin/src/main/resources/application.yml @@ -0,0 +1,24 @@ +spring: + application: + name: yunzhupaas-workflow + profiles: + # 指定环境配置 dev(开发环境-默认)、test(测试环境)、preview(预生产)、prod(生产环境) + active: dev + main: + allow-bean-definition-overriding: true + allow-circular-references: true + +logging: + config: classpath:logback-spring.xml +springdoc: + default-flat-param-object: true + api-docs: + enabled: true + +#SpringDoc增强 +#knife4j: +# basic: #接口文档访问鉴权 +# enable: true +# username: yunzhupaas +# password: 123456 +# enable: true diff --git a/yunzhupaas-workflow-admin/src/main/resources/logback-spring.xml b/yunzhupaas-workflow-admin/src/main/resources/logback-spring.xml new file mode 100644 index 0000000..1136fd7 --- /dev/null +++ b/yunzhupaas-workflow-admin/src/main/resources/logback-spring.xml @@ -0,0 +1,339 @@ + + + + + + + + + + + + + + + + + + + + ${LOG_PATH}/log_error.log + + + + + + ${LOG_PATH}/error/%d{yyyy-MM-dd,aux}/log-error-%d{yyyy-MM-dd}.%i.log + + 7 + + + + 10MB + + + + + true + + + + ${FILE_LOG_PATTERN} + utf-8 + + + + + error + ACCEPT + DENY + + + + + + + + + ${LOG_PATH}/log_info.log + + + + + + ${LOG_PATH}/info/%d{yyyy-MM-dd,aux}/log-info-%d{yyyy-MM-dd}.%i.log + + 7 + + + + 10MB + + + + + true + + + + ${FILE_LOG_PATTERN} + utf-8 + + + + + info + ACCEPT + DENY + + + + + + + + + ${LOG_PATH}/log_warn.log + + + + + + ${LOG_PATH}/warn/%d{yyyy-MM-dd,aux}/log-warn-%d{yyyy-MM-dd}.%i.log + + 7 + + + + 10MB + + + + + true + + + + ${FILE_LOG_PATTERN} + utf-8 + + + + + warn + ACCEPT + DENY + + + + + + + + ${LOG_PATH}/log_debug.log + + + + + + ${LOG_PATH}/debug/%d{yyyy-MM-dd,aux}/log-debug-%d{yyyy-MM-dd}.%i.log + + 7 + + + + 10MB + + + + + true + + + + ${FILE_LOG_PATTERN} + utf-8 + + + + + debug + ACCEPT + DENY + + + + + + + + + ${LOG_PATH}/log_total.log + + + + + + ${LOG_PATH}/total/%d{yyyy-MM-dd,aux}/log-total-%d{yyyy-MM-dd}.%i.log + + 7 + + + + 10MB + + + + + true + + + + ${FILE_LOG_PATTERN} + utf-8 + + + + + + + + + ${LOG_PATH}/log_release.log + + + + + + ${LOG_PATH}/release/%d{yyyy-MM-dd,aux}/log-warn-%d{yyyy-MM-dd}.%i.log + + 7 + + + + 10MB + + + + + true + + + + ${FILE_LOG_PATTERN} + utf-8 + + + + + ${LOG_LEVEL} + ACCEPT + DENY + + + + + 0 + 256 + + + + + 0 + 256 + + + + + 0 + 256 + + + + + 0 + 256 + + + + + 0 + 256 + + + + + + + ${CONSOLE_LOG_PATTERN} + utf-8 + + + + + + + 0 + 256 + + + + + + + + + + + + + + + + + + +