From 03b9488188adb85230b4e499279b3fdb1cd4363f Mon Sep 17 00:00:00 2001
From: jeelowcode
Date: Fri, 25 Jul 2025 11:54:44 +0800
Subject: [PATCH 01/14] =?UTF-8?q?[update]=20=E5=8A=A0=E4=B8=8A=E6=94=AF?=
=?UTF-8?q?=E6=8C=81jdk17+springboot3.3.1=E5=88=86=E6=94=AF?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
README.md | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/README.md b/README.md
index 80831bb..a4ccea5 100644
--- a/README.md
+++ b/README.md
@@ -32,6 +32,11 @@
[社区/文档地址:http://doc.jeelowcode.com](http://doc.jeelowcode.com/)
+| 分支 | 简介 |
+|--------------|----------------------------|
+| master | 使用jdk8 + SpringBoot2.7.18 |
+| master_jdk17 | 使用jdk17 + SpringBoot3.3.1 |
+
## 3.代码架构
```
--
Gitee
From 8c71312504fa254cdb1120cdcb0693aa43c256b9 Mon Sep 17 00:00:00 2001
From: WeiXiao
Date: Fri, 1 Aug 2025 10:18:38 +0800
Subject: [PATCH 02/14] =?UTF-8?q?[style]=20=E4=BF=AE=E6=94=B9README?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
README.md | 103 ++++++++++++++++++++++++++++++++----------------------
1 file changed, 61 insertions(+), 42 deletions(-)
diff --git a/README.md b/README.md
index a4ccea5..0b3b951 100644
--- a/README.md
+++ b/README.md
@@ -4,7 +4,7 @@
-[点击前往查看:https://doc.jeelowcode.com/app/1](https://doc.jeelowcode.com/app/1)
+[💦官方自研低代码流程:https://doc.jeelowcode.com/app/1](https://doc.jeelowcode.com/app/1)
@@ -21,16 +21,19 @@
-## 1.项目简介
+
-**JeeLowCode** 是一款专为企业打造的低代码开发框架,以低代码为核心,实现快速开发。它提供可视化界面,拖拽组件即可搭建应用,无需复杂代码编写,极大提升开发效率。企业可免费使用,灵活适配业务需求,助力高效数字化转型,是企业降本增效的利器。
+## 📱项目简介
+
+**JeeLowCode** 是一款基于SpringBoot专为企业打造的低代码开发框架,以低代码为核心,实现快速开发。提供可视化界面,拖拽组件即可搭建应用,无需复杂代码编写,极大提升开发效率。企业可免费使用,灵活适配业务需求,助力高效数字化转型,是企业降本增效的利器。
-## 2.在线体验
-
-[体验地址:http://demo.jeelowcode.com](http://demo.jeelowcode.com)
-
-[社区/文档地址:http://doc.jeelowcode.com](http://doc.jeelowcode.com/)
| 分支 | 简介 |
|--------------|----------------------------|
@@ -38,7 +41,7 @@
| master_jdk17 | 使用jdk17 + SpringBoot3.3.1 |
-## 3.代码架构
+## 💻代码架构
```
com.jeelowcode
├── jeelowcode-admin // 启动模块
@@ -47,35 +50,28 @@ com.jeelowcode
├── jeelowcode-framework // 功能模块
│ └── jeelowcode-excel // Excel导入导出模块
│ └── jeelowcode-exception // 自定义异常模块
+ │ └── jeelowcode-global // 全局配置模块
│ └── jeelowcode-plus // SQL/DDL 语构建模块
│ └── jeelowcode-tenant // 租户模块
│ └── jeelowcode-utils // 工具类模块
- ├── jeelowcode-module // 个人业务相关
+ ├── jeelowcode-module // 个人业务相关(写在这个模块)
│ └── jeelowcode-module-api // 个人业务模块API
│ └── jeelowcode-module-biz // 个人业务业务
- ├── yudao-framework // 芋道核心模块
- ├── yudao-module // 芋道核心模块
```
-## 4.项目关系
-**后端项目**
+## 👥项目关系
| 项目 | Star | 简介 |
|--|--|---------|
| [JeeLowCode](https://gitcode.com/jeelowcode/jeelowcode)| [](https://gitee.com/jeelowecode/JeeLowCode) [](https://github.com/jeelowcode/jeelowcode) [](https://gitcode.com/jeelowcode/jeelowcode) | 基于 Spring Boot 多模块架构 |
-
-**前端项目**
-
-| 项目 | Star | 简介 |
-|--|--|---------------------------------------|
| [jeelowcode-ui-admin-vue3](https://gitcode.com/jeelowcode/jeelowcode-ui-admin-vue3)| [](https://gitee.com/jeelowecode/jeelowcode-ui-admin-vue3) [](https://github.com/jeelowcode/jeelowcode-ui-admin-vue3) [](https://gitcode.com/jeelowcode/jeelowcode-ui-admin-vue3) | 基于 Vue3 + Element Plus + Avue 实现的后台管理 |
-## 5.系统架构图
+## 🖼️系统架构图
-## 6.Hello World入门
+## 🐛Hello World入门
只需要**4步** 带你了解低代码JeeLowCode
@@ -93,9 +89,9 @@ com.jeelowcode
-## 7.演示效果图
+## 💻演示效果图
-### 7.1 手机端效果图:
+### 1 手机端效果图:
 |
@@ -109,7 +105,7 @@ com.jeelowcode
-### 7.2 电脑端效果图:
+### 2 电脑端效果图:
 |
@@ -123,7 +119,7 @@ com.jeelowcode
-### 7.3 动态效果图:
+### 3 动态效果图:
 |
@@ -133,9 +129,9 @@ com.jeelowcode
-## 8.框架核心亮点
+## 🌟框架核心亮点
-### 8.1 首页:
+### 1 首页:
@@ -143,7 +139,7 @@ com.jeelowcode
-### 8.2 在线表构建:
+### 2 在线表构建:
通过图形用户界面直观地创建数据表,一旦创建完成,即刻享有增、删、改、查、数据导入和导出的全面功能,操作简便,效率倍增。
@@ -156,7 +152,7 @@ com.jeelowcode
-### 8.3 在线统计报表:
+### 3 在线统计报表:
只需配置简单的SQL语句,即可迅速生成包括柱状图、折线图、饼图以及卡片视图在内的多样化统计报表,直观展现数据分析结果。
@@ -169,7 +165,7 @@ com.jeelowcode
-### 8.4 在线多表关联:
+### 4 在线多表关联:
利用界面化的灵活配置,实现多表关联的直观展示,确保所见即所得的数据处理体验。
@@ -185,7 +181,7 @@ com.jeelowcode
-### 8.5 在线格式化字段显示:
+### 5 在线格式化字段显示:
为满足界面字段合并显示需求,提供三种简捷处理方法:数据库层面的SQL函数拼接,查询时的SQL字符串合并,以及应用层的Java代码处理。选择适合的方法以优化性能和灵活性。
@@ -198,7 +194,7 @@ com.jeelowcode
-### 8.6 在线排序设置:
+### 6 在线排序设置:
通过拖放操作,用户可以直观地设置初始化数据的排序规则。
@@ -208,7 +204,7 @@ com.jeelowcode
-### 8.7 在线租户数据权限配置:
+### 7 在线租户数据权限配置:
提供在线配置工具,轻松实现租户级别的数据权限设定,确保数据访问的安全性和合规性,提升**多租户**场景下的应用灵活性。**JeeLowCode**以其卓越的灵活性、高效性和易用性,成为加速数字化转型、驱动业务创新的理想选择。
@@ -218,7 +214,7 @@ com.jeelowcode
-### 8.8 广泛数据库兼容:
+### 8 广泛数据库兼容:
@@ -243,7 +239,7 @@ com.jeelowcode
-### 8.9 在线表单设计:
+### 9 在线表单设计:
提供丰富多样的控件,全面支持各类页面的开发需求。
@@ -253,7 +249,7 @@ com.jeelowcode
-### 8.10 丰富完善的示例:
+### 10 丰富完善的示例:
丰富完善的示例,便于用户快速学习和上手
@@ -272,7 +268,7 @@ com.jeelowcode
-### 8.11 100+常用模板:
+### 11 100+常用模板:
提供了丰富多样的常用页面模板,以便开发者能够迅速采纳和应用。
@@ -291,13 +287,13 @@ com.jeelowcode
-## 9.启动步骤
+## 📥启动步骤
**温馨提示:** JDK、Maven、Node等可以从网盘下载
[百度网盘地址:https://pan.baidu.com/s/1ICmHRlrRYzBkx87zoRuqvQ?pwd=1234](https://pan.baidu.com/s/1ICmHRlrRYzBkx87zoRuqvQ?pwd=1234)
[阿里云盘地址:https://www.alipan.com/s/X4kF7Hshuc2](https://www.alipan.com/s/X4kF7Hshuc2)
-### 9.1 后台JAVA代码运行步骤
+### 1 后台JAVA代码运行步骤
**环境配置**
@@ -331,7 +327,7 @@ com.jeelowcode
-### 9.2 前端VUE代码运行步骤:
+### 2 前端VUE代码运行步骤:
**后台运行环境:** node18.0.0
@@ -426,7 +422,7 @@ pnpm run dev-server
-## 10.微信交流群
+## 👏微信交流群/合作
@@ -437,4 +433,27 @@ pnpm run dev-server
 |
 |
-
\ No newline at end of file
+
+
+## 📋提交规范
+
+```
+[init] 初始化
+[feat] 增加新功能
+[fix] 修复问题/BUG
+[perf] 优化/性能提升
+[refactor] 重构
+[revert] 撤销修改
+[style] 代码风格相关无影响运行结果的
+[update] 其他修改
+[upgrade] 升级版本
+```
+
+## 🔗文章收录
+
+- [企业级低代码平台,轻松应对99.99%编程挑战](https://mp.weixin.qq.com/s/M4h9wiZ1U7Fd3E4Ze4Yq_A)
+- [[开源]精心二次封装的企业级低代码开发框架,全开源低代码开发平台,在线轻松驾驭99.99%编程挑战](https://mp.weixin.qq.com/s/TZ094u7jm4wq3tacjPEExQ)
+- [无需编码,JeeLowCode 助你轻松构建强大应用!-JeeLowCode](https://mp.weixin.qq.com/s/h4jVs8DBAzaeSWKpDVo0xw)
+- [体验JeeLowCode,感受低代码开发的魅力与高效!](https://mp.weixin.qq.com/s/JNwFWHRPFwcEIE5JV5xT3A)
+- [体验JeeLowCode,感受低代码开发的魅力与高效!](https://mp.weixin.qq.com/s/JNwFWHRPFwcEIE5JV5xT3A)
+
--
Gitee
From 09b86f94ec744c0228d1d28d71873d7ae9e97ead Mon Sep 17 00:00:00 2001
From: WeiXiao
Date: Fri, 1 Aug 2025 10:22:33 +0800
Subject: [PATCH 03/14] =?UTF-8?q?[style]=20=E6=9B=B4=E6=94=B9README?=
=?UTF-8?q?=E4=BB=8B=E7=BB=8D?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
README.md | 24 ++++++++++++------------
1 file changed, 12 insertions(+), 12 deletions(-)
diff --git a/README.md b/README.md
index 0b3b951..082271a 100644
--- a/README.md
+++ b/README.md
@@ -24,12 +24,12 @@
-## 📱项目简介
+## 📱 项目简介
**JeeLowCode** 是一款基于SpringBoot专为企业打造的低代码开发框架,以低代码为核心,实现快速开发。提供可视化界面,拖拽组件即可搭建应用,无需复杂代码编写,极大提升开发效率。企业可免费使用,灵活适配业务需求,助力高效数字化转型,是企业降本增效的利器。
@@ -41,7 +41,7 @@
| master_jdk17 | 使用jdk17 + SpringBoot3.3.1 |
-## 💻代码架构
+## 💻 代码架构
```
com.jeelowcode
├── jeelowcode-admin // 启动模块
@@ -59,19 +59,19 @@ com.jeelowcode
│ └── jeelowcode-module-biz // 个人业务业务
```
-## 👥项目关系
+## 👥 项目关系
| 项目 | Star | 简介 |
|--|--|---------|
| [JeeLowCode](https://gitcode.com/jeelowcode/jeelowcode)| [](https://gitee.com/jeelowecode/JeeLowCode) [](https://github.com/jeelowcode/jeelowcode) [](https://gitcode.com/jeelowcode/jeelowcode) | 基于 Spring Boot 多模块架构 |
| [jeelowcode-ui-admin-vue3](https://gitcode.com/jeelowcode/jeelowcode-ui-admin-vue3)| [](https://gitee.com/jeelowecode/jeelowcode-ui-admin-vue3) [](https://github.com/jeelowcode/jeelowcode-ui-admin-vue3) [](https://gitcode.com/jeelowcode/jeelowcode-ui-admin-vue3) | 基于 Vue3 + Element Plus + Avue 实现的后台管理 |
-## 🖼️系统架构图
+## 🖼️ 系统架构图
-## 🐛Hello World入门
+## 🐛 Hello World入门
只需要**4步** 带你了解低代码JeeLowCode
@@ -89,7 +89,7 @@ com.jeelowcode
-## 💻演示效果图
+## 💻 演示效果图
### 1 手机端效果图:
@@ -129,7 +129,7 @@ com.jeelowcode
-## 🌟框架核心亮点
+## 🌟 框架核心亮点
### 1 首页:
@@ -287,7 +287,7 @@ com.jeelowcode
-## 📥启动步骤
+## 📥 启动步骤
**温馨提示:** JDK、Maven、Node等可以从网盘下载
[百度网盘地址:https://pan.baidu.com/s/1ICmHRlrRYzBkx87zoRuqvQ?pwd=1234](https://pan.baidu.com/s/1ICmHRlrRYzBkx87zoRuqvQ?pwd=1234)
@@ -422,7 +422,7 @@ pnpm run dev-server
-## 👏微信交流群/合作
+## 👏 微信交流群/合作
@@ -435,7 +435,7 @@ pnpm run dev-server
-## 📋提交规范
+## 📋 提交规范
```
[init] 初始化
@@ -449,7 +449,7 @@ pnpm run dev-server
[upgrade] 升级版本
```
-## 🔗文章收录
+## 🔗 文章收录
- [企业级低代码平台,轻松应对99.99%编程挑战](https://mp.weixin.qq.com/s/M4h9wiZ1U7Fd3E4Ze4Yq_A)
- [[开源]精心二次封装的企业级低代码开发框架,全开源低代码开发平台,在线轻松驾驭99.99%编程挑战](https://mp.weixin.qq.com/s/TZ094u7jm4wq3tacjPEExQ)
--
Gitee
From f015655940654d036233b7ebb140255a751f2b71 Mon Sep 17 00:00:00 2001
From: WeiXiao
Date: Fri, 1 Aug 2025 10:25:35 +0800
Subject: [PATCH 04/14] =?UTF-8?q?[style]=20=E4=BF=AE=E6=94=B9README?=
=?UTF-8?q?=E4=BB=8B=E7=BB=8D?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
README.md | 32 ++++++++++++++++----------------
1 file changed, 16 insertions(+), 16 deletions(-)
diff --git a/README.md b/README.md
index 082271a..00660d6 100644
--- a/README.md
+++ b/README.md
@@ -91,7 +91,7 @@ com.jeelowcode
## 💻 演示效果图
-### 1 手机端效果图:
+### 1. 手机端效果图:
 |
@@ -105,7 +105,7 @@ com.jeelowcode
-### 2 电脑端效果图:
+### 2. 电脑端效果图:
 |
@@ -119,7 +119,7 @@ com.jeelowcode
-### 3 动态效果图:
+### 3. 动态效果图:
 |
@@ -131,7 +131,7 @@ com.jeelowcode
## 🌟 框架核心亮点
-### 1 首页:
+### 1. 首页:
@@ -139,7 +139,7 @@ com.jeelowcode
-### 2 在线表构建:
+### 2. 在线表构建:
通过图形用户界面直观地创建数据表,一旦创建完成,即刻享有增、删、改、查、数据导入和导出的全面功能,操作简便,效率倍增。
@@ -152,7 +152,7 @@ com.jeelowcode
-### 3 在线统计报表:
+### 3. 在线统计报表:
只需配置简单的SQL语句,即可迅速生成包括柱状图、折线图、饼图以及卡片视图在内的多样化统计报表,直观展现数据分析结果。
@@ -165,7 +165,7 @@ com.jeelowcode
-### 4 在线多表关联:
+### 4. 在线多表关联:
利用界面化的灵活配置,实现多表关联的直观展示,确保所见即所得的数据处理体验。
@@ -181,7 +181,7 @@ com.jeelowcode
-### 5 在线格式化字段显示:
+### 5. 在线格式化字段显示:
为满足界面字段合并显示需求,提供三种简捷处理方法:数据库层面的SQL函数拼接,查询时的SQL字符串合并,以及应用层的Java代码处理。选择适合的方法以优化性能和灵活性。
@@ -194,7 +194,7 @@ com.jeelowcode
-### 6 在线排序设置:
+### 6. 在线排序设置:
通过拖放操作,用户可以直观地设置初始化数据的排序规则。
@@ -204,7 +204,7 @@ com.jeelowcode
-### 7 在线租户数据权限配置:
+### 7. 在线租户数据权限配置:
提供在线配置工具,轻松实现租户级别的数据权限设定,确保数据访问的安全性和合规性,提升**多租户**场景下的应用灵活性。**JeeLowCode**以其卓越的灵活性、高效性和易用性,成为加速数字化转型、驱动业务创新的理想选择。
@@ -214,7 +214,7 @@ com.jeelowcode
-### 8 广泛数据库兼容:
+### 8. 广泛数据库兼容:
@@ -239,7 +239,7 @@ com.jeelowcode
-### 9 在线表单设计:
+### 9. 在线表单设计:
提供丰富多样的控件,全面支持各类页面的开发需求。
@@ -249,7 +249,7 @@ com.jeelowcode
-### 10 丰富完善的示例:
+### 10. 丰富完善的示例:
丰富完善的示例,便于用户快速学习和上手
@@ -268,7 +268,7 @@ com.jeelowcode
-### 11 100+常用模板:
+### 11. 100+常用模板:
提供了丰富多样的常用页面模板,以便开发者能够迅速采纳和应用。
@@ -293,7 +293,7 @@ com.jeelowcode
[阿里云盘地址:https://www.alipan.com/s/X4kF7Hshuc2](https://www.alipan.com/s/X4kF7Hshuc2)
-### 1 后台JAVA代码运行步骤
+### 1. 后台JAVA代码运行步骤
**环境配置**
@@ -327,7 +327,7 @@ com.jeelowcode
-### 2 前端VUE代码运行步骤:
+### 2. 前端VUE代码运行步骤:
**后台运行环境:** node18.0.0
--
Gitee
From 19c2e9218c581500be7e22b7f45e0fd1e75a824c Mon Sep 17 00:00:00 2001
From: WeiXiao
Date: Fri, 1 Aug 2025 10:36:39 +0800
Subject: [PATCH 05/14] =?UTF-8?q?[style]=20=E6=9B=B4=E6=94=B9README.md?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
README.md | 1 -
1 file changed, 1 deletion(-)
diff --git a/README.md b/README.md
index 00660d6..57d4264 100644
--- a/README.md
+++ b/README.md
@@ -455,5 +455,4 @@ pnpm run dev-server
- [[开源]精心二次封装的企业级低代码开发框架,全开源低代码开发平台,在线轻松驾驭99.99%编程挑战](https://mp.weixin.qq.com/s/TZ094u7jm4wq3tacjPEExQ)
- [无需编码,JeeLowCode 助你轻松构建强大应用!-JeeLowCode](https://mp.weixin.qq.com/s/h4jVs8DBAzaeSWKpDVo0xw)
- [体验JeeLowCode,感受低代码开发的魅力与高效!](https://mp.weixin.qq.com/s/JNwFWHRPFwcEIE5JV5xT3A)
-- [体验JeeLowCode,感受低代码开发的魅力与高效!](https://mp.weixin.qq.com/s/JNwFWHRPFwcEIE5JV5xT3A)
--
Gitee
From 3820ecee8e0e4e63ef645524b840d062bd3fd804 Mon Sep 17 00:00:00 2001
From: WeiXiao
Date: Fri, 1 Aug 2025 11:48:20 +0800
Subject: [PATCH 06/14] =?UTF-8?q?[style]=20=E4=BF=AE=E6=94=B9README.md?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
README.md | 5 ++---
1 file changed, 2 insertions(+), 3 deletions(-)
diff --git a/README.md b/README.md
index 57d4264..d224708 100644
--- a/README.md
+++ b/README.md
@@ -4,7 +4,7 @@
-[💦官方自研低代码流程:https://doc.jeelowcode.com/app/1](https://doc.jeelowcode.com/app/1)
+[💦[推荐]官方自研流程:flow.jeelowcode.com](http://flow.jeelowcode.com)
@@ -24,8 +24,7 @@
--
Gitee
From 4d098673b10821558f3ebdf50d82c5691855bd04 Mon Sep 17 00:00:00 2001
From: WeiXiao
Date: Sun, 28 Sep 2025 16:32:42 +0800
Subject: [PATCH 07/14] =?UTF-8?q?=E7=99=BE=E5=BA=A6=E7=BD=91=E7=9B=98?=
=?UTF-8?q?=E4=B8=8B=E8=BD=BD=E5=9C=B0=E5=9D=80?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
README.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/README.md b/README.md
index d224708..11ee515 100644
--- a/README.md
+++ b/README.md
@@ -288,7 +288,7 @@ com.jeelowcode
## 📥 启动步骤
**温馨提示:** JDK、Maven、Node等可以从网盘下载
-[百度网盘地址:https://pan.baidu.com/s/1ICmHRlrRYzBkx87zoRuqvQ?pwd=1234](https://pan.baidu.com/s/1ICmHRlrRYzBkx87zoRuqvQ?pwd=1234)
+[百度网盘地址:https://pan.baidu.com/s/158EwoXY7nvBvm_P1JKnvZQ?pwd=1234](https://pan.baidu.com/s/158EwoXY7nvBvm_P1JKnvZQ?pwd=1234)
[阿里云盘地址:https://www.alipan.com/s/X4kF7Hshuc2](https://www.alipan.com/s/X4kF7Hshuc2)
--
Gitee
From d225c304591cb8a76be35633af05f76ca494838a Mon Sep 17 00:00:00 2001
From: WeiXiao
Date: Sun, 28 Sep 2025 16:51:48 +0800
Subject: [PATCH 08/14] =?UTF-8?q?[perf]=20=E5=8E=BB=E9=99=A4=E4=B8=8D?=
=?UTF-8?q?=E5=BF=85=E8=A6=81=E7=9A=84=E6=96=B9=E6=B3=95?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../service/impl/ExcelServiceImpl.java | 31 +++-------
.../service/impl/FrameServiceImpl.java | 3 -
.../jeelowcode/core/framework/utils/Func.java | 58 -------------------
3 files changed, 8 insertions(+), 84 deletions(-)
diff --git a/jeelowcode-core/src/main/java/com/jeelowcode/core/framework/service/impl/ExcelServiceImpl.java b/jeelowcode-core/src/main/java/com/jeelowcode/core/framework/service/impl/ExcelServiceImpl.java
index 6a7870e..576df62 100644
--- a/jeelowcode-core/src/main/java/com/jeelowcode/core/framework/service/impl/ExcelServiceImpl.java
+++ b/jeelowcode-core/src/main/java/com/jeelowcode/core/framework/service/impl/ExcelServiceImpl.java
@@ -13,31 +13,25 @@ http://www.apache.org/licenses/
*/
package com.jeelowcode.core.framework.service.impl;
-import cn.hutool.core.date.DateUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.jeelowcode.core.framework.entity.*;
import com.jeelowcode.core.framework.mapper.JeeLowCodeMapper;
import com.jeelowcode.core.framework.mapper.ReportFieldMapper;
import com.jeelowcode.core.framework.params.SaveImportDataParam;
+import com.jeelowcode.core.framework.params.model.ExcelImportDataDictModel;
+import com.jeelowcode.core.framework.params.model.ExcelModel;
+import com.jeelowcode.core.framework.params.model.ExcelTemplateModel;
import com.jeelowcode.core.framework.service.*;
import com.jeelowcode.core.framework.utils.Func;
import com.jeelowcode.framework.excel.model.ExcelTitleModel;
-import com.jeelowcode.framework.exception.JeeLowCodeException;
-import com.jeelowcode.framework.utils.component.redis.JeeLowCodeRedisUtils;
import com.jeelowcode.framework.utils.enums.YNEnum;
-import com.jeelowcode.framework.utils.model.ExecuteEnhanceModel;
-import com.jeelowcode.framework.utils.tool.spring.SpringUtils;
import com.jeelowcode.framework.utils.utils.FuncBase;
import com.jeelowcode.framework.utils.utils.JeeLowCodeUtils;
-import com.jeelowcode.core.framework.params.model.ExcelImportDataDictModel;
-import com.jeelowcode.core.framework.params.model.ExcelModel;
-import com.jeelowcode.core.framework.params.model.ExcelTemplateModel;
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.map.LinkedMap;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
@@ -45,8 +39,6 @@ import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
-import java.util.concurrent.TimeUnit;
-import java.util.concurrent.atomic.AtomicReference;
import java.util.stream.Collectors;
/**
@@ -68,12 +60,6 @@ public class ExcelServiceImpl implements IExcelService {
@Autowired
private IExcelFileDataService excelDataService;
- @Autowired
- private JeeLowCodeRedisUtils jeeLowCodeRedisUtils;
-
- @Autowired
- private IExcelFileService excelFileService;
-
@Autowired
private IReportService reportService;
@@ -169,7 +155,6 @@ public class ExcelServiceImpl implements IExcelService {
/**
* 获取导出基本信息
- *
*/
@Override
public ExcelModel getExcelReportModel(String reportCode) {
@@ -177,8 +162,8 @@ public class ExcelServiceImpl implements IExcelService {
String sheetName = reportEntity.getReportName();//表描述
- LambdaQueryWrapper wrapper=new LambdaQueryWrapper<>();
- wrapper.eq(ReportFieldEntity::getReportId,reportEntity.getId());
+ LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>();
+ wrapper.eq(ReportFieldEntity::getReportId, reportEntity.getId());
wrapper.eq(ReportFieldEntity::getIsExport, YNEnum.Y.getCode());
List fieldEntityList = reportFieldMapper.selectList(wrapper);
@@ -222,11 +207,11 @@ public class ExcelServiceImpl implements IExcelService {
//获取字典
ExcelImportDataDictModel dictModel = this.formatExcelImportDataList(dbFormId);
//处理导入
- SaveImportDataParam param=new SaveImportDataParam();
+ SaveImportDataParam param = new SaveImportDataParam();
param.setFieldId(fieldId);
param.setEntityList(entityList);
param.setDictModel(dictModel);
- frameService.handleImportData(dbFormId,param);
+ frameService.handleImportData(dbFormId, param);
}
diff --git a/jeelowcode-core/src/main/java/com/jeelowcode/core/framework/service/impl/FrameServiceImpl.java b/jeelowcode-core/src/main/java/com/jeelowcode/core/framework/service/impl/FrameServiceImpl.java
index 5054ded..bbbc1ee 100644
--- a/jeelowcode-core/src/main/java/com/jeelowcode/core/framework/service/impl/FrameServiceImpl.java
+++ b/jeelowcode-core/src/main/java/com/jeelowcode/core/framework/service/impl/FrameServiceImpl.java
@@ -98,9 +98,6 @@ public class FrameServiceImpl implements IFrameService {
@Autowired
private IDbFormRoleService dbFormRoleService;
- @Autowired
- private FormRoleDataRuleMapper roleDataRuleMapper;
-
@Autowired
private JeeLowCodeRedisUtils jeeLowCodeRedisUtils;
diff --git a/jeelowcode-core/src/main/java/com/jeelowcode/core/framework/utils/Func.java b/jeelowcode-core/src/main/java/com/jeelowcode/core/framework/utils/Func.java
index e2a8319..712e669 100644
--- a/jeelowcode-core/src/main/java/com/jeelowcode/core/framework/utils/Func.java
+++ b/jeelowcode-core/src/main/java/com/jeelowcode/core/framework/utils/Func.java
@@ -76,38 +76,6 @@ import java.util.stream.Collectors;
*/
public class Func extends FuncBase {
-
- //校验数据类型
- public static Object fomatDbValue(String fieldType, Object value) {
- if (FuncBase.isEmpty(value)) {
- return null;
- }
- if (FuncBase.equals(fieldType, JeeLowCodeFieldTypeEnum.STRING.getFieldType())
- || FuncBase.equals(fieldType, JeeLowCodeFieldTypeEnum.TEXT.getFieldType())
- || FuncBase.equals(fieldType, JeeLowCodeFieldTypeEnum.LONGTEXT.getFieldType())) {//字符串
- return FuncBase.toStr(value);
- } else if (FuncBase.equals(fieldType, JeeLowCodeFieldTypeEnum.INTEGER.getFieldType())) {
- return FuncBase.toInt(value);
- } else if (FuncBase.equals(fieldType, JeeLowCodeFieldTypeEnum.BIGINT.getFieldType())) {
- return FuncBase.toLong(value);
- } else if (FuncBase.equals(fieldType, JeeLowCodeFieldTypeEnum.BIGDECIMAL.getFieldType())) {
- return new BigDecimal(FuncBase.toStr(value));
- } else if (FuncBase.equals(fieldType, JeeLowCodeFieldTypeEnum.DATE.getFieldType())) {
- //yyyy-MM-dd
- String str = FuncBase.toStr(value);
- return DateUtil.parseDate(str.substring(0, 10));
- } else if (FuncBase.equals(fieldType, JeeLowCodeFieldTypeEnum.DATETIME.getFieldType())) {
- //yyyy-MM-dd HH:mm:ss
- String str = FuncBase.toStr(value);
- return DateUtil.parseDateTime(str.substring(0, 19));
- } else if (FuncBase.equals(fieldType, JeeLowCodeFieldTypeEnum.TIME.getFieldType())) {
- //HH:mm:ss
- String str = FuncBase.toStr(value);
- return DateUtil.parseTime(str.substring(0, 8));
- }
- return FuncBase.toStr(value);
- }
-
/**
* 校验表名称是否可用
*
@@ -257,33 +225,7 @@ public class Func extends FuncBase {
return sql;
}
- /**
- * 执行某一个类下的方法,
- *
- * @param classPath 类路径
- * @param methodName 方法名称
- * @param dataMap 参数
- * @return
- */
- public static Object runByClass(String classPath, String methodName, Map dataMap) {
- try {
- // 1. 获取Class对象
- Class> clazz = Class.forName(classPath);
-
- // 2. 创建DemoClass的一个实例
- Object demoClassInstance = clazz.getDeclaredConstructor().newInstance();
-
- // 3. 获取getBjName方法的对象
- Method method = clazz.getMethod(methodName, Map.class);
- // 4. 调用getBjName方法
- return method.invoke(demoClassInstance, dataMap);
- } catch (Exception e) {
- e.printStackTrace();
- throw new JeeLowCodeException(e.getMessage());
- }
-
- }
//计算
public static String executeJavaExpress(String express, Map dataMap) {
--
Gitee
From 09391d6a3d33410f0d7e8749eb049d2b43f76912 Mon Sep 17 00:00:00 2001
From: WeiXiao
Date: Thu, 16 Oct 2025 09:07:25 +0800
Subject: [PATCH 09/14] [update] README UPDATE
---
README.md | 11 ++---------
1 file changed, 2 insertions(+), 9 deletions(-)
diff --git a/README.md b/README.md
index 11ee515..fd906ab 100644
--- a/README.md
+++ b/README.md
@@ -1,11 +1,3 @@
-
-
-
-
-
-
-[💦[推荐]官方自研流程:flow.jeelowcode.com](http://flow.jeelowcode.com)
-
@@ -24,7 +16,8 @@
--
Gitee
From 182a9a529cb043e324c2629c721afab00aeb7b95 Mon Sep 17 00:00:00 2001
From: WeiXiao
Date: Mon, 27 Oct 2025 10:41:10 +0800
Subject: [PATCH 10/14] =?UTF-8?q?[update]=20=E6=9B=B4=E6=96=B0README.md?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
README.md | 3 +++
1 file changed, 3 insertions(+)
diff --git a/README.md b/README.md
index fd906ab..bf7ef91 100644
--- a/README.md
+++ b/README.md
@@ -1,3 +1,6 @@
+## 年度开源项目评选
+感谢您对 JeeLowCode 开源项目的支持,诚邀您投出宝贵一票!
+投票链接:https://gitee.com/activity/2025opensource?ident=IZQSAP
--
Gitee
From c1c4e1e97c0e0a1622e21ca24ab1287bad7a7412 Mon Sep 17 00:00:00 2001
From: WeiXiao
Date: Sat, 1 Nov 2025 16:38:23 +0800
Subject: [PATCH 11/14] =?UTF-8?q?[refactor]=20sql=E6=89=A7=E8=A1=8C?=
=?UTF-8?q?=E5=89=8D=E6=8B=A6=E6=88=AA=E5=8A=A0=E4=B8=8A=E7=A7=9F=E6=88=B7?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../component/JeelowCodePlusInterceptor.java | 226 +++++++-----------
1 file changed, 92 insertions(+), 134 deletions(-)
diff --git a/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/component/JeelowCodePlusInterceptor.java b/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/component/JeelowCodePlusInterceptor.java
index d6ba716..4712f04 100644
--- a/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/component/JeelowCodePlusInterceptor.java
+++ b/jeelowcode-framework/jeelowcode-plus/src/main/java/com/jeelowcode/framework/plus/component/JeelowCodePlusInterceptor.java
@@ -1,175 +1,133 @@
-/*
-Apache License
-Version 2.0, January 2004
-http://www.apache.org/licenses/
-本软件受适用的国家软件著作权法(包括国际条约)和开源协议 双重保护许可。
-
-开源协议中文释意如下:
-1.JeeLowCode开源版本无任何限制,在遵循本开源协议(Apache2.0)条款下,允许商用使用,不会造成侵权行为。
-2.允许基于本平台软件开展业务系统开发。
-3.在任何情况下,您不得使用本软件开发可能被认为与本软件竞争的软件。
-
-最终解释权归:http://www.jeelowcode.com
-*/
package com.jeelowcode.framework.plus.component;
-
-import com.jeelowcode.framework.global.JeeLowCodeBaseConstant;
import com.jeelowcode.framework.plus.SqlHelper;
import com.jeelowcode.framework.utils.utils.FuncBase;
-import org.apache.ibatis.builder.StaticSqlSource;
-import org.apache.ibatis.cache.CacheKey;
-import org.apache.ibatis.executor.Executor;
-import org.apache.ibatis.mapping.*;
-import org.apache.ibatis.plugin.Interceptor;
-import org.apache.ibatis.plugin.Intercepts;
-import org.apache.ibatis.plugin.Invocation;
-import org.apache.ibatis.plugin.Signature;
-import org.apache.ibatis.session.ResultHandler;
-import org.apache.ibatis.session.RowBounds;
+import org.apache.ibatis.executor.statement.RoutingStatementHandler;
+import org.apache.ibatis.executor.statement.StatementHandler;
+import org.apache.ibatis.mapping.BoundSql;
+import org.apache.ibatis.mapping.MappedStatement;
+import org.apache.ibatis.plugin.*;
+import org.apache.ibatis.reflection.MetaObject;
+import org.apache.ibatis.reflection.SystemMetaObject;
import org.springframework.stereotype.Component;
+import java.lang.reflect.Field;
+import java.lang.reflect.InvocationHandler;
+import java.lang.reflect.Proxy;
+import java.sql.Connection;
import java.util.ArrayList;
-import java.util.Iterator;
import java.util.List;
-import java.util.Map;
+import java.util.Properties;
import static com.jeelowcode.framework.global.JeeLowCodeBaseConstant.BASE_PACKAGES_CODE;
@Component
-@Intercepts({@Signature(
- type = Executor.class,
- method = "update",
- args = {MappedStatement.class, Object.class}
-), @Signature(
- type = Executor.class,
- method = "query",
- args = {MappedStatement.class, Object.class, RowBounds.class, ResultHandler.class}
-), @Signature(
- type = Executor.class,
- method = "query",
- args = {MappedStatement.class, Object.class, RowBounds.class, ResultHandler.class, CacheKey.class, BoundSql.class}
-)})
+@Intercepts({
+ @Signature(type = StatementHandler.class,
+ method = "prepare",
+ args = {Connection.class, Integer.class})
+})
public class JeelowCodePlusInterceptor implements Interceptor {
- private List getSkipMapperList(){//todo 后面需要优化
- String SKIP_MAPPER_CODE = BASE_PACKAGES_CODE+".framework.mapper";//不做租户拦截的mapper
-
-
- List skipMapperList=new ArrayList<>();
- skipMapperList.add(SKIP_MAPPER_CODE);
+ private List getSkipMapperList() {
+ List skipMapperList = new ArrayList<>();
+ // 不做租户拦截的mapper包路径
+ skipMapperList.add(BASE_PACKAGES_CODE + ".framework.mapper");
+ // 可以添加更多需要跳过的mapper路径
return skipMapperList;
}
@Override
public Object intercept(Invocation invocation) throws Throwable {
- Object target = invocation.getTarget();
- Object[] args = invocation.getArgs();
- if (!(target instanceof Executor)) {
- return invocation.proceed();
- }
+ try {
+ StatementHandler statementHandler = (StatementHandler) invocation.getTarget();
+ // 获取MappedStatement
+ MappedStatement ms = getMappedStatement(statementHandler);
+ if(FuncBase.isEmpty(ms)){
+ return invocation.proceed();
+ }
+ String id = ms.getId();
+ List skipMapperList = getSkipMapperList();
+ for(String skipMapper:skipMapperList){
+ if(id.startsWith(skipMapper)){
+ return invocation.proceed();
+ }
+ }
- Executor executor = (Executor) target;
- Object parameter = args[1];
- boolean isUpdate = args.length == 2;
- MappedStatement ms = (MappedStatement) args[0];
- String id = ms.getId();
- List skipMapperList = getSkipMapperList();
- for(String skipMapper:skipMapperList){
- if(id.startsWith(skipMapper)){
+ if (!id.startsWith(BASE_PACKAGES_CODE)) {//直接跳过,如果不是低代码平台,则直接跳过
return invocation.proceed();
}
+ // 获取SQL并处理
+ BoundSql boundSql = statementHandler.getBoundSql();
+ String originalSql = boundSql.getSql();
+
+ // 进行SQL替换处理
+ String publicSql = SqlHelper.getPublicSql(originalSql);
+
+ // 使用反射修改SQL
+ Field sqlField = BoundSql.class.getDeclaredField("sql");
+ sqlField.setAccessible(true);
+ sqlField.set(boundSql, publicSql);
+ } catch (Exception e) {
+ // 记录错误但不中断流程
+ System.err.println("拦截器处理异常: " + e.getMessage());
+ e.printStackTrace();
}
- if (!id.startsWith(BASE_PACKAGES_CODE)) {//直接跳过,如果不是低代码平台,则直接跳过
- return invocation.proceed();
- }
+ return invocation.proceed();
+ }
- if (!isUpdate && ms.getSqlCommandType() == SqlCommandType.SELECT) {//查询相关
- RowBounds rowBounds = (RowBounds) args[2];
- ResultHandler resultHandler = (ResultHandler) args[3];
- BoundSql boundSql;
- if (args.length == 4) {
- boundSql = ms.getBoundSql(parameter);
- } else {
- boundSql = (BoundSql) args[5];
- }
- String publicSql = SqlHelper.getPublicSql(boundSql.getSql());
- Object additionalParametersObj = boundSql.getAdditionalParameters();
- boundSql = new BoundSql(ms.getConfiguration(), publicSql, boundSql.getParameterMappings(), boundSql.getParameterObject());
- if (FuncBase.isNotEmpty(additionalParametersObj)) {
- Map additionalParameters = (Map) additionalParametersObj;
-
- Iterator> iterator = additionalParameters.entrySet().iterator();
- while (iterator.hasNext()) {
- Map.Entry next = iterator.next();
- String key = next.getKey();
- Object value = next.getValue();
- boundSql.setAdditionalParameter(key, value);
+ /**
+ * 通过反射获取MappedStatement
+ */
+ /**
+ * 通过 MetaObject 获取 MappedStatement
+ */
+ private MappedStatement getMappedStatement(StatementHandler handler) {
+ try {
+ // 处理代理对象
+ if (Proxy.isProxyClass(handler.getClass())) {
+ InvocationHandler invocationHandler = Proxy.getInvocationHandler(handler);
+ if (invocationHandler instanceof Plugin) {
+ Field targetField = invocationHandler.getClass().getDeclaredField("target");
+ targetField.setAccessible(true);
+ handler = (StatementHandler) targetField.get(invocationHandler);
}
}
- CacheKey cacheKey = executor.createCacheKey(ms, parameter, rowBounds, boundSql);
- List