Compare commits

...

58 Commits

Author SHA1 Message Date
dd7bf104e7 issues/4983 SQL Injection in 3.5.1 #4983 2023-06-04 12:01:15 +08:00
6e85584c43 【issues/4986】model增加hideTab字段 2023-06-02 09:23:46 +08:00
c579dbb24d 升级积木报表版本号、修改readme 2023-05-31 16:16:52 +08:00
452132ca38 变更新文档地址 2023-05-30 09:53:27 +08:00
ebc396340e issues/4905 表单生成器字段配置时,选择关联字段,在进行高级配置时,无法加载数据库列表,提示 Sgin签名校验错误! #4905 2023-05-24 10:38:10 +08:00
5946aa79c3 [issues/4829]访问不存在的url时会提示Token失效,请重新登录呢 2023-05-23 16:54:05 +08:00
2bc20aaa5e minio的yml文档配置失效,应该将prefix 改为·jeecg.minio· 2023-05-12 10:21:57 +08:00
793295a8fe Seata示例启动不了 #4748 2023-05-10 17:21:23 +08:00
eaf3e32fdd ---author:scott---date:2023-05-10---for:yml属性为空导致项目启动报错,改造后支持单体非system独立启动--- 2023-05-10 17:13:54 +08:00
ba40a797df ---author:scott---date:2023-05-10---for:yml属性为空导致项目启动报错,改造后支持单体非system独立启动--- 2023-05-10 17:13:44 +08:00
545679f999 介绍 2023-05-08 22:06:05 +08:00
1a74dd1a2e Seata示例启动不了 #4748 2023-05-08 22:05:47 +08:00
9dd8b05fd7 开启saas多租户功能后,租户管理员在添加分类字典时,报错 #4846 2023-04-26 11:17:44 +08:00
e273008b37 3.5.0版本多租户的几个问题 #4647 2023-04-18 18:34:42 +08:00
53684d224e 变更文档为:help.jeecg.com 2023-04-18 11:57:11 +08:00
f9e843571c 新增QQ群 ⑦791696430 2023-04-18 09:55:51 +08:00
14e9adb3af 低代码应用截图 2023-04-17 23:34:50 +08:00
fedb7bf46f uniapp 效果 2023-04-17 23:21:30 +08:00
ce520be8ca 介绍图片更新 2023-04-17 23:02:46 +08:00
9d92c316c1 更新系统功能截图 2023-04-17 22:50:35 +08:00
f077cafcfe 预计3.5.1正式发布时间 2023-04-20 2023-04-17 15:37:04 +08:00
fd7d0b7202 如何指定nacos命名空间和分组 2023-04-17 14:29:58 +08:00
96586517bd Merge remote-tracking branch 'remotes/origin/master' 2023-04-17 13:32:49 +08:00
5b5a2c0180 Merge pull request #4825 from miniFrank/bugfix/issue-4762
[bugfix]
2023-04-17 13:14:31 +08:00
b089bb96f1 [bugfix]
1. 修复nacos命名问题;
2. 将RouteGroup对齐到nacosgroup;
https://github.com/jeecgboot/jeecg-boot/issues/4743
2023-04-16 21:12:36 +08:00
9da4850bd7 3.5.1 版本发布 2023-04-14 16:12:01 +08:00
a6bcb376fc 3.5.1 版本发布 2023-04-14 15:23:13 +08:00
7abc07424b 更新文档 2023-04-13 17:06:43 +08:00
e9f2bbca23 多租户实现逻辑功能不完善问题 #4676 2023-04-13 15:57:03 +08:00
b0ede05cf4 更新文档 2023-04-13 15:56:54 +08:00
ca1218f792 sys/duplicate/check SQL注入 #4737 2023-04-13 09:42:46 +08:00
8ed2da601b 文档变更为:help.jeecg.com 2023-04-12 17:04:49 +08:00
08696dbb5f vue3文档变更为域名:help.jeecg.com 2023-04-12 10:05:45 +08:00
645ea40bfd vue3文档变更为域名:help.jeecg.com 2023-04-12 10:04:16 +08:00
b970af00c1 新建用户会自动分配角色 #454 2023-04-10 21:30:45 +08:00
5fe9508428 这几个表不能强制隔离 2023-04-10 15:30:57 +08:00
a302fcd963 [issue/4649]树开表单列的字段如果带着下划线会导致生成的 *mapper.xml 中 SQL语句出错 2023-04-08 17:30:47 +08:00
5258228d3b Token有效期改为24小时 2023-04-06 10:17:53 +08:00
1c00be39f0 租户缓存bug 2023-04-06 10:17:29 +08:00
cf1fe01d03 oConvertUtils 里面判断字符串为空的方法有问题 #292 2023-04-05 12:57:14 +08:00
4c78bad14f [issue/4358]springCache中的清除缓存的操作使用了“keys” ] 2023-04-05 11:45:23 +08:00
ebcddad130 [issue/4672]方法造成的文件被占用,注释掉此方法tomcat就能自动清理掉临时文件 ] 2023-04-05 11:45:10 +08:00
42589cd1dc 【issues/425】使用online表单开发,代码生成选择vue3原生以后,界面导出的功能不能使用查询条件了-- 2023-04-05 11:44:51 +08:00
d81fa1f908 新增用户的时候设置租户无效 2023-03-15 11:34:26 +08:00
217fe0dce4 租户邀请人改成采用手机号,租户敏感接口加权限 2023-03-15 11:34:20 +08:00
fffa7f327b 简化职位录入,职位编码自动生成 2023-03-15 11:34:11 +08:00
5417f1285a 多租户实现逻辑功能不完善问题 #4676 2023-03-13 16:12:18 +08:00
b75cbcc911 积木报表数据库表字段缺失 #4675 2023-03-13 10:36:32 +08:00
a68f304307 补充逻辑,登录加载权限,加上租户套餐权限配置 2023-03-09 12:06:55 +08:00
0a00bd8a7c 解决bug,租户是否有效判断有误 2023-03-09 12:06:30 +08:00
e90efbb52f 解决bug,导入部门是否叶子值不对 2023-03-09 12:06:04 +08:00
3c320a5769 Merge pull request #4295 from wang1223440313/patch-1
#FIX 修复枚举常量命名错误
2023-03-08 20:20:04 +08:00
98472b5c35 Merge pull request #4654 from xuxiaowei-com-cn/master-token
 储存在Redis中的Token增加文件夹前缀
2023-03-08 20:16:06 +08:00
3f2354a8ac 开源协议补充 2023-03-08 13:38:51 +08:00
8a94c40e0e 储存在Redis中的Token增加文件夹前缀
https://github.com/jeecgboot/jeecg-boot/issues/4650
2023-03-07 16:24:30 +08:00
b362147577 Merge remote-tracking branch 'origin/patch-1' into patch-1 2022-11-23 19:49:22 +08:00
347b13beb4 #FIX 修复枚举常量命名错误
#FIX 修复枚举常量命名错误
2022-11-23 19:49:09 +08:00
16b8aac08f #FIX 修复枚举变量命名错误
#FIX 修复枚举变量命名错误
2022-11-23 19:44:03 +08:00
94 changed files with 1052 additions and 350 deletions

View File

@ -203,7 +203,7 @@
In any case, you must not make any such use of this software as to develop software which may be considered competitive with this software.
开源协议补充
JeecgBoot 是由 北京国炬信息技术有限公司 发行的软件。 总部位于北京地址中国·北京·朝阳区科荟前街1号院奥林佳泰大厦。邮箱jeecgos@163.com
JeecgBoot 是由 北京敲敲云科技有限公司 发行的软件。 总部位于北京地址中国·北京·朝阳区科荟前街1号院奥林佳泰大厦。邮箱jeecgos@163.com
本软件受适用的国家软件著作权法(包括国际条约)和双重保护许可。
1.允许基于本平台软件开展业务系统开发。

View File

@ -7,13 +7,13 @@
JEECG BOOT Low Code Development Platform
===============
The Latest Version 3.5.0Release date2023-03-08
The Latest Version 3.5.1Release date2023-04-20
[![AUR](https://img.shields.io/badge/license-Apache%20License%202.0-blue.svg)](https://github.com/zhangdaiscott/jeecg-boot/blob/master/LICENSE)
[![](https://img.shields.io/badge/Author-qiaoqiaoyun-orange.svg)](http://www.jeecg.com)
[![](https://img.shields.io/badge/Blog-blog-blue.svg)](https://jeecg.blog.csdn.net)
[![](https://img.shields.io/badge/version-3.5.0-brightgreen.svg)](https://github.com/zhangdaiscott/jeecg-boot)
[![](https://img.shields.io/badge/version-3.5.1-brightgreen.svg)](https://github.com/zhangdaiscott/jeecg-boot)
[![GitHub stars](https://img.shields.io/github/stars/zhangdaiscott/jeecg-boot.svg?style=social&label=Stars)](https://github.com/zhangdaiscott/jeecg-boot)
[![GitHub forks](https://img.shields.io/github/forks/zhangdaiscott/jeecg-boot.svg?style=social&label=Fork)](https://github.com/zhangdaiscott/jeecg-boot)
@ -73,11 +73,9 @@ Jeecg-Boot low code development platform can be applied in the development of an
Docker starts the project
-----------------------------------
- [Docker starts the monomer background](http://doc.jeecg.com/2043889)
- [Docker starts the Vue3 front-end](http://vue3.jeecg.com/3028878)
- [Docker starts the micro-service background](http://doc.jeecg.com/3043472)
- [Docker starts the Vue2 front-end](http://doc.jeecg.com/3043612)
- [Docker starts the monomer background](https://help.jeecg.com/java/setup/docker/up.html)
- [Docker starts the Vue3 front-end](http://help.jeecg.com/publish/docker.html)
- [Docker starts the micro-service background](https://help.jeecg.com/java/springcloud/docker.html)
@ -89,13 +87,13 @@ Technical documentation
- Demo [Vue3](http://boot3.jeecg.com) | [Vue2](http://boot.jeecg.com)
- Doc [Vue3](http://vue3.jeecg.com) | [Main](http://doc.jeecg.com)
- Doc [http://help.jeecg.com](http://help.jeecg.com)
- Newbie guide [Quick start](http://www.jeecg.com/doc/quickstart) | [video](https://space.bilibili.com/454617261/channel/series) | [Q&A ](http://www.jeecg.com/doc/qa) | [help](http://jeecg.com/doc/help) | [1 minute experience](https://my.oschina.net/jeecg/blog/3083313)
- Microservice Development [Monomer upgrade to microservice](http://doc.jeecg.com/3043471)
- Microservice Development [Monomer upgrade to microservice](https://help.jeecg.com/java/springcloud/switchcloud/monomer.html)
- QQ group ⑥730954414、683903138、⑤860162132(full)、④774126647(full)、③816531124(full)、②769925425(full)、①284271917(full)
- QQ group ⑦791696430、⑥730954414、683903138、⑤860162132(full)、④774126647(full)、③816531124(full)、②769925425(full)、①284271917(full)
@ -207,15 +205,15 @@ Technical Architecture:
#### backend
- Basic framework: Spring Boot 2.6.6
- Basic framework: Spring Boot 2.6.14
- Microservice framework: Spring Cloud Alibaba 2021.0.1.0
- Persistence layer framework: MybatisPlus 3.5.1
- Report tool: JimuReport 1.5.2
- Report tool: JimuReport 1.5.8
- Security framework: Apache Shiro 1.8.0, Jwt 3.11.0
- Security framework: Apache Shiro 1.10.0, Jwt 3.11.0
- Microservice technology stack: Spring Cloud Alibaba, Nacos, Gateway, Sentinel, Skywalking
@ -263,7 +261,7 @@ Technical Architecture:
8. Service monitoring SpringBootAdmin√
9. link tracking Skywalking [reference document](http://doc.jeecg.com/2350293)
9. link tracking Skywalking [reference document](https://help.jeecg.com/java/springcloud/super/skywarking.html)
10. Messaging middleware RabbitMQ √
@ -437,51 +435,116 @@ Technical Architecture:
Effect of system
----
##### Screen template
![输入图片说明](https://static.oschina.net/uploads/img/201912/25133248_Ag1C.jpg "在这里输入图片标题")
![输入图片说明](https://static.oschina.net/uploads/img/201912/25133301_k9Kc.jpg "在这里输入图片标题")
### Effect of system
##### PC
![](https://oscimg.oschina.net/oscnet/up-000530d95df337b43089ac77e562494f454.png)
![输入图片说明](https://static.oschina.net/uploads/img/201904/14155402_AmlV.png "在这里输入图片标题")
![输入图片说明](https://static.oschina.net/uploads/img/201904/14160657_cHwb.png "在这里输入图片标题")
![](https://oscimg.oschina.net/oscnet/up-9d6f36f251e71a0b515a01323474b03004c.png)
![输入图片说明](https://static.oschina.net/uploads/img/201904/14160813_KmXS.png "在这里输入图片标题")
![输入图片说明](https://static.oschina.net/uploads/img/201904/14160935_Nibs.png "在这里输入图片标题")
![输入图片说明](https://static.oschina.net/uploads/img/201904/14161004_bxQ4.png "在这里输入图片标题")
##### interactive
![](https://oscimg.oschina.net/oscnet/up-78b151fc888d4319377bf1cc311fe826871.png)
##### Online interface documentation
![输入图片说明](https://static.oschina.net/uploads/img/201908/27095258_M2Xq.png "在这里输入图片标题")
![输入图片说明](https://static.oschina.net/uploads/img/201904/14160957_hN3X.png "在这里输入图片标题")
![](https://oscimg.oschina.net/oscnet/up-16c07e000278329b69b228ae3189814b8e9.png)
##### Report
![输入图片说明](https://static.oschina.net/uploads/img/201904/14160828_pkFr.png "在这里输入图片标题")
![输入图片说明](https://static.oschina.net/uploads/img/201904/14160834_Lo23.png "在这里输入图片标题")
![输入图片说明](https://static.oschina.net/uploads/img/201904/14160842_QK7B.png "在这里输入图片标题")
![输入图片说明](https://static.oschina.net/uploads/img/201904/14160849_GBm5.png "在这里输入图片标题")
![输入图片说明](https://static.oschina.net/uploads/img/201904/14160858_6RAM.png "在这里输入图片标题")
##### process Designer
![](https://oscimg.oschina.net/oscnet/up-981ce174e4fbb48c8a2ce4ccfd7372e2994.png)
##### Process
![输入图片说明](https://static.oschina.net/uploads/img/201904/14160623_8fwk.png "在这里输入图片标题")
![输入图片说明](https://static.oschina.net/uploads/img/201904/14160917_9Ftz.png "在这里输入图片标题")
![输入图片说明](https://static.oschina.net/uploads/img/201904/14160633_u59G.png "在这里输入图片标题")
![输入图片说明](https://static.oschina.net/uploads/img/201907/05165142_yyQ7.png "在这里输入图片标题")
![输入图片说明](https://static.oschina.net/uploads/img/201904/14160917_9Ftz.png "在这里输入图片标题")
##### App
![输入图片说明](https://static.oschina.net/uploads/img/201904/14160633_u59G.png "在这里输入图片标题")
##### min process
![](https://oscimg.oschina.net/oscnet/up-1dc0d052149ec675f3e4fad632b82b48add.png)
![](https://oscimg.oschina.net/oscnet/up-de31bc2f9d9b8332c554b0954cc73d79593.png)
![](https://oscimg.oschina.net/oscnet/up-7f83b25159663686d67ed080eb16068c3b4.png)
##### dashboard Designer
![](https://oscimg.oschina.net/oscnet/up-9c9d41288c31398d76b390bdd400f13a582.png)
![](https://oscimg.oschina.net/oscnet/up-fad98d42b2cf92f92a903c9cff7579f18ec.png)
##### report Designer
![](https://oscimg.oschina.net/oscnet/up-64648de000851f15f6c7b9573d107ebb5f8.png)
![](https://oscimg.oschina.net/oscnet/up-fa52b44445db281c51d3f267dce7450d21b.gif)
![](https://oscimg.oschina.net/oscnet/up-68a19149d640f1646c8ed89ed4375e3326c.png)
![](https://oscimg.oschina.net/oscnet/up-f7e9cb2e3740f2d19ff63b40ec2dd554f96.png)
##### form Designer
![](https://oscimg.oschina.net/oscnet/up-5f8cb657615714b02190b355e59f60c5937.png)
![](https://oscimg.oschina.net/oscnet/up-d9659b2f324e33218476ec98c9b400e6508.png)
![](https://oscimg.oschina.net/oscnet/up-4868615395272d3206dbb960ade02dbc291.png)
##### bigscreen Designer
![](https://oscimg.oschina.net/oscnet/up-402a6034124474bfef8dfc5b4b2bac1ce5c.png)
![](https://oscimg.oschina.net/oscnet/up-6f7ba2e2ebbeea0d203db8d69fd87644c9f.png)
![](https://oscimg.oschina.net/oscnet/up-ee8d34f318da466b8a6070a6e3111d12ce7.png)
![](https://oscimg.oschina.net/oscnet/up-6b81781b43086819049c4421206810667c5.png)
##### uniapp
![](https://oscimg.oschina.net/oscnet/up-aac943fbd26561879c57a41f7a406edf274.png)
![](https://oscimg.oschina.net/oscnet/up-9a44ba2e82b09c750629d12fafd7f60f553.png)
##### low app
![](https://oscimg.oschina.net/oscnet/up-4be29ae761b2615c8c54b3f668cd8432d9b.png)
![](https://oscimg.oschina.net/oscnet/up-787e76bc24b38ecc7ed19f338808d128255.png)
![](https://oscimg.oschina.net/oscnet/up-99d24a236c483362868523ad0d90f611487.png)
![](https://oscimg.oschina.net/oscnet/up-339a0f29d10449abc7724e3bcda802761c1.png)
![](https://oscimg.oschina.net/oscnet/up-b356670cdc14c609958c7619a537397c4b9.png)
##### app
![](https://oscimg.oschina.net/oscnet/da543c5d0d57baab0cecaa4670c8b68c521.jpg)
![](https://oscimg.oschina.net/oscnet/fda4bd82cab9d682de1c1fbf2060bf14fa6.jpg)
##### PAD
![](https://oscimg.oschina.net/oscnet/e90fef970a8c33790ab03ffd6c4c7cec225.jpg)
![](https://oscimg.oschina.net/oscnet/d78218803a9e856a0aa82b45efc49849a0c.jpg)
![](https://oscimg.oschina.net/oscnet/0404054d9a12647ef6f82cf9cfb80a5ac02.jpg)
![](https://oscimg.oschina.net/oscnet/59c23b230f52384e588ee16309b44fa20de.jpg)
##### chart
![](https://oscimg.oschina.net/oscnet/up-218bc6a1669496b241ebb23506440c0083e.png)
![输入图片说明](https://static.oschina.net/uploads/img/201904/14160834_Lo23.png "在这里输入图片标题")
![输入图片说明](https://static.oschina.net/uploads/img/201904/14160842_QK7B.png "在这里输入图片标题")
![输入图片说明](https://static.oschina.net/uploads/img/201904/14160849_GBm5.png "在这里输入图片标题")
![输入图片说明](https://static.oschina.net/uploads/img/201904/14160858_6RAM.png "在这里输入图片标题")
##### swagger
![输入图片说明](https://static.oschina.net/uploads/img/201908/27095258_M2Xq.png "在这里输入图片标题")
![输入图片说明](https://static.oschina.net/uploads/img/201904/14160957_hN3X.png "在这里输入图片标题")
## donation
If so, buy the author a cup of coffee ☺

164
README.md
View File

@ -7,13 +7,13 @@
JEECG BOOT 低代码开发平台
===============
当前最新版本: 3.5.0发布日期2023-03-08
当前最新版本: 3.5.1发布日期2023-04-20
[![AUR](https://img.shields.io/badge/license-Apache%20License%202.0-blue.svg)](https://github.com/zhangdaiscott/jeecg-boot/blob/master/LICENSE)
[![](https://img.shields.io/badge/Author-北京敲敲云科技-orange.svg)](http://www.jeecg.com)
[![](https://img.shields.io/badge/Blog-官方博客-blue.svg)](https://jeecg.blog.csdn.net)
[![](https://img.shields.io/badge/version-3.5.0-brightgreen.svg)](https://github.com/zhangdaiscott/jeecg-boot)
[![](https://img.shields.io/badge/version-3.5.1-brightgreen.svg)](https://github.com/zhangdaiscott/jeecg-boot)
[![GitHub stars](https://img.shields.io/github/stars/zhangdaiscott/jeecg-boot.svg?style=social&label=Stars)](https://github.com/zhangdaiscott/jeecg-boot)
[![GitHub forks](https://img.shields.io/github/forks/zhangdaiscott/jeecg-boot.svg?style=social&label=Fork)](https://github.com/zhangdaiscott/jeecg-boot)
@ -33,6 +33,11 @@ JeecgBoot 提供了一系列`低代码模块`,实现在线开发`真正的零
`JEECG业务流程:` 采用工作流来实现、扩展出任务接口,供开发编写业务逻辑,表单提供多种解决方案: 表单设计器、online配置表单、编码表单。同时实现了流程与表单的分离设计松耦合、并支持任务节点灵活配置既保证了公司流程的保密性又减少了开发人员的工作量。
适用项目
-----------------------------------
Jeecg-Boot低代码开发平台可以应用在任何J2EE项目的开发中尤其适合SAAS项目、企业信息管理系统MIS、内部办公系统OA、企业资源计划系统ERP、客户关系管理系统CRM其半智能手工Merge的开发方式可以显著提高开发效率70%以上,极大降低开发成本。
源码下载
-----------------------------------
@ -45,9 +50,9 @@ JeecgBoot 提供了一系列`低代码模块`,实现在线开发`真正的零
##### 快速搭建开发环境
- [通过IDEA启动前后端项目](http://doc.jeecg.com/2043874)
- [Vue3前端项目快速启动](http://vue3.jeecg.com/2398848)
- [单体快速切换为微服务版](http://doc.jeecg.com/3043471)
- [通过IDEA启动前后端项目](https://help.jeecg.com/java/setup/idea/startup.html)
- [Vue3前端项目快速启动](http://help.jeecg.com/setup/startup.html)
- [单体快速切换为微服务版](https://help.jeecg.com/java/springcloud/switchcloud/monomer.html)
##### 项目说明
@ -61,6 +66,12 @@ JeecgBoot 提供了一系列`低代码模块`,实现在线开发`真正的零
技术支持
-----------------------------------
关闭gitee的issue通道使用中遇到问题或者BUG可以在 [Github上提Issues](https://github.com/jeecgboot/jeecg-boot/issues/new)
官方支持: [http://jeecg.com/doc/help](http://jeecg.com/doc/help)
技术文档
@ -68,13 +79,13 @@ JeecgBoot 提供了一系列`低代码模块`,实现在线开发`真正的零
- 项目官网: [http://www.jeecg.com](http://www.jeecg.com)
- 在线演示 [Vue3版本](http://boot3.jeecg.com) | [敲敲云(零代码)](http://app.qiaoqiaoyun.com)
- 在线演示 [低代码演示](http://boot3.jeecg.com) | [零代码体验](http://app.qiaoqiaoyun.com)
- 开发文档: [Vue3文档](http://vue3.jeecg.com) | [主项目文档](http://doc.jeecg.com)
- 开发文档: [http://help.jeecg.com](http://help.jeecg.com)
- 新手指南: [快速入门](http://www.jeecg.com/doc/quickstart) | [常见问题 ](http://www.jeecg.com/doc/qa) | [视频教程](https://space.bilibili.com/454617261/channel/series) | [1分钟体验低代码](https://my.oschina.net/jeecg/blog/3083313)
- 新手指南: [快速入门](http://www.jeecg.com/doc/quickstart) | [常见问题 ](http://www.jeecg.com/doc/qa) | [视频教程](https://space.bilibili.com/454617261/channel/series) | [1分钟低代码体验](https://my.oschina.net/jeecg/blog/3083313)
- QQ交流群 ⑥730954414、VUE3群683903138、⑤860162132(满)、④774126647(满)、③816531124(满)、②769925425(满)、①284271917(满)
- QQ交流群 ⑦791696430、⑥730954414、VUE3群683903138、⑤860162132(满)、④774126647(满)、③816531124(满)、②769925425(满)、①284271917(满)
> ` 提醒【QQ群是自助服务群建议给帮助您解决问题的同学发送指定红包表示感谢】 `
@ -84,14 +95,15 @@ JeecgBoot 提供了一系列`低代码模块`,实现在线开发`真正的零
Docker启动项目
-----------------------------------
- [Docker启动单体后台](http://doc.jeecg.com/2043889)
- [Docker启动Vue3前端](http://vue3.jeecg.com/3028878)
- [Docker启动微服务后台](http://doc.jeecg.com/3043472)
- [Docker启动单体后台](https://help.jeecg.com/java/setup/docker/up.html)
- [Docker启动Vue3前端](http://help.jeecg.com/publish/docker.html)
- [Docker启动微服务后台](https://help.jeecg.com/java/springcloud/docker.html)
************
VUE2版本专题说明
=======【VUE2版本专题介绍】============================================
VUE2版本专题介绍
-----------------------------------
#### 项目介绍
- 项目名称ant-design-vue-jeecg
@ -114,20 +126,11 @@ VUE2版本专题说明
| 后端源码 `Vue2版` |https://gitee.com/jeecg/jeecg-boot/tree/v3.4.3last |
| 前端源码 `Vue2版` |https://gitee.com/jeecg/ant-design-vue-jeecg |
************
=========【VUE2版本专题介绍】=========================================
适用项目
-----------------------------------
Jeecg-Boot低代码开发平台可以应用在任何J2EE项目的开发中尤其适合SAAS项目、企业信息管理系统MIS、内部办公系统OA、企业资源计划系统ERP、客户关系管理系统CRM其半智能手工Merge的开发方式可以显著提高开发效率70%以上,极大降低开发成本。
技术支持
-----------------------------------
关闭gitee的issue通道使用中遇到问题或者BUG可以在 [Github上提Issues](https://github.com/jeecgboot/jeecg-boot/issues/new)
官方支持: [http://jeecg.com/doc/help](http://jeecg.com/doc/help)
##### Star走势图
@ -235,15 +238,15 @@ Jeecg-Boot低代码开发平台可以应用在任何J2EE项目的开发中
#### 后端
- 基础框架Spring Boot 2.6.6
- 基础框架Spring Boot 2.6.14
- 微服务框架: Spring Cloud Alibaba 2021.0.1.0
- 持久层框架MybatisPlus 3.5.1
- 报表工具: JimuReport 1.5.2
- 报表工具: JimuReport 1.5.8
- 安全框架Apache Shiro 1.8.0Jwt 3.11.0
- 安全框架Apache Shiro 1.10.0Jwt 3.11.0
- 微服务技术栈Spring Cloud Alibaba、Nacos、Gateway、Sentinel、Skywalking
@ -291,7 +294,7 @@ Jeecg-Boot低代码开发平台可以应用在任何J2EE项目的开发中
8、服务监控 SpringBootAdmin√
9、链路跟踪 Skywalking [参考文档](http://doc.jeecg.com/2350293)
9、链路跟踪 Skywalking [参考文档](https://help.jeecg.com/java/springcloud/super/skywarking.html)
10、消息中间件 RabbitMQ √
@ -438,7 +441,7 @@ Jeecg-Boot低代码开发平台可以应用在任何J2EE项目的开发中
│ ├─数据报表设计
│ ├─图形报表设计支持echart
│ ├─大屏设计器(未开源)
│─流程模块功能 (未开源)
│─更多商业功能 (未开源)
│ ├─流程设计器
│ ├─表单设计器
├─大屏设计器
@ -465,39 +468,92 @@ Jeecg-Boot低代码开发平台可以应用在任何J2EE项目的开发中
系统效果
----
##### 大屏模板
![输入图片说明](https://static.oschina.net/uploads/img/201912/25133248_Ag1C.jpg "在这里输入图片标题")
### 系统效果
![输入图片说明](https://static.oschina.net/uploads/img/201912/25133301_k9Kc.jpg "在这里输入图片标题")
##### PC端
![](https://oscimg.oschina.net/oscnet/up-000530d95df337b43089ac77e562494f454.png)
![输入图片说明](https://static.oschina.net/uploads/img/201904/14155402_AmlV.png "在这里输入图片标题")
![输入图片说明](https://static.oschina.net/uploads/img/201904/14160657_cHwb.png "在这里输入图片标题")
![](https://oscimg.oschina.net/oscnet/up-9d6f36f251e71a0b515a01323474b03004c.png)
![输入图片说明](https://static.oschina.net/uploads/img/201904/14160813_KmXS.png "在这里输入图片标题")
![输入图片说明](https://static.oschina.net/uploads/img/201904/14160935_Nibs.png "在这里输入图片标题")
![输入图片说明](https://static.oschina.net/uploads/img/201904/14161004_bxQ4.png "在这里输入图片标题")
##### 系统交互
![](https://oscimg.oschina.net/oscnet/up-78b151fc888d4319377bf1cc311fe826871.png)
##### 在线接口文档
![输入图片说明](https://static.oschina.net/uploads/img/201908/27095258_M2Xq.png "在这里输入图片标题")
![输入图片说明](https://static.oschina.net/uploads/img/201904/14160957_hN3X.png "在这里输入图片标题")
![](https://oscimg.oschina.net/oscnet/up-16c07e000278329b69b228ae3189814b8e9.png)
##### 报表
![输入图片说明](https://static.oschina.net/uploads/img/201904/14160828_pkFr.png "在这里输入图片标题")
![输入图片说明](https://static.oschina.net/uploads/img/201904/14160834_Lo23.png "在这里输入图片标题")
![输入图片说明](https://static.oschina.net/uploads/img/201904/14160842_QK7B.png "在这里输入图片标题")
![输入图片说明](https://static.oschina.net/uploads/img/201904/14160849_GBm5.png "在这里输入图片标题")
![输入图片说明](https://static.oschina.net/uploads/img/201904/14160858_6RAM.png "在这里输入图片标题")
##### 流程设计
![](https://oscimg.oschina.net/oscnet/up-981ce174e4fbb48c8a2ce4ccfd7372e2994.png)
##### 流程
![输入图片说明](https://static.oschina.net/uploads/img/201904/14160623_8fwk.png "在这里输入图片标题")
![输入图片说明](https://static.oschina.net/uploads/img/201904/14160917_9Ftz.png "在这里输入图片标题")
![输入图片说明](https://static.oschina.net/uploads/img/201904/14160633_u59G.png "在这里输入图片标题")
![输入图片说明](https://static.oschina.net/uploads/img/201907/05165142_yyQ7.png "在这里输入图片标题")
![输入图片说明](https://static.oschina.net/uploads/img/201904/14160917_9Ftz.png "在这里输入图片标题")
![输入图片说明](https://static.oschina.net/uploads/img/201904/14160633_u59G.png "在这里输入图片标题")
##### 简版流程设计
![](https://oscimg.oschina.net/oscnet/up-1dc0d052149ec675f3e4fad632b82b48add.png)
![](https://oscimg.oschina.net/oscnet/up-de31bc2f9d9b8332c554b0954cc73d79593.png)
![](https://oscimg.oschina.net/oscnet/up-7f83b25159663686d67ed080eb16068c3b4.png)
##### 仪表盘设计器
![](https://oscimg.oschina.net/oscnet/up-9c9d41288c31398d76b390bdd400f13a582.png)
![](https://oscimg.oschina.net/oscnet/up-fad98d42b2cf92f92a903c9cff7579f18ec.png)
##### 报表设计器
![](https://oscimg.oschina.net/oscnet/up-64648de000851f15f6c7b9573d107ebb5f8.png)
![](https://oscimg.oschina.net/oscnet/up-fa52b44445db281c51d3f267dce7450d21b.gif)
![](https://oscimg.oschina.net/oscnet/up-68a19149d640f1646c8ed89ed4375e3326c.png)
![](https://oscimg.oschina.net/oscnet/up-f7e9cb2e3740f2d19ff63b40ec2dd554f96.png)
##### 表单设计器
![](https://oscimg.oschina.net/oscnet/up-5f8cb657615714b02190b355e59f60c5937.png)
![](https://oscimg.oschina.net/oscnet/up-d9659b2f324e33218476ec98c9b400e6508.png)
![](https://oscimg.oschina.net/oscnet/up-4868615395272d3206dbb960ade02dbc291.png)
##### 大屏设计器
![](https://oscimg.oschina.net/oscnet/up-402a6034124474bfef8dfc5b4b2bac1ce5c.png)
![](https://oscimg.oschina.net/oscnet/up-6f7ba2e2ebbeea0d203db8d69fd87644c9f.png)
![](https://oscimg.oschina.net/oscnet/up-ee8d34f318da466b8a6070a6e3111d12ce7.png)
![](https://oscimg.oschina.net/oscnet/up-6b81781b43086819049c4421206810667c5.png)
##### UNIAPP效果
![](https://oscimg.oschina.net/oscnet/up-aac943fbd26561879c57a41f7a406edf274.png)
![](https://oscimg.oschina.net/oscnet/up-9a44ba2e82b09c750629d12fafd7f60f553.png)
##### 零代码应用
![](https://oscimg.oschina.net/oscnet/up-4be29ae761b2615c8c54b3f668cd8432d9b.png)
![](https://oscimg.oschina.net/oscnet/up-787e76bc24b38ecc7ed19f338808d128255.png)
![](https://oscimg.oschina.net/oscnet/up-99d24a236c483362868523ad0d90f611487.png)
![](https://oscimg.oschina.net/oscnet/up-339a0f29d10449abc7724e3bcda802761c1.png)
![](https://oscimg.oschina.net/oscnet/up-b356670cdc14c609958c7619a537397c4b9.png)
##### 手机端
![](https://oscimg.oschina.net/oscnet/da543c5d0d57baab0cecaa4670c8b68c521.jpg)
@ -506,10 +562,20 @@ Jeecg-Boot低代码开发平台可以应用在任何J2EE项目的开发中
##### PAD端
![](https://oscimg.oschina.net/oscnet/e90fef970a8c33790ab03ffd6c4c7cec225.jpg)
![](https://oscimg.oschina.net/oscnet/d78218803a9e856a0aa82b45efc49849a0c.jpg)
![](https://oscimg.oschina.net/oscnet/0404054d9a12647ef6f82cf9cfb80a5ac02.jpg)
![](https://oscimg.oschina.net/oscnet/59c23b230f52384e588ee16309b44fa20de.jpg)
##### 图表示例
![](https://oscimg.oschina.net/oscnet/up-218bc6a1669496b241ebb23506440c0083e.png)
![输入图片说明](https://static.oschina.net/uploads/img/201904/14160834_Lo23.png "在这里输入图片标题")
![输入图片说明](https://static.oschina.net/uploads/img/201904/14160842_QK7B.png "在这里输入图片标题")
![输入图片说明](https://static.oschina.net/uploads/img/201904/14160849_GBm5.png "在这里输入图片标题")
![输入图片说明](https://static.oschina.net/uploads/img/201904/14160858_6RAM.png "在这里输入图片标题")
##### 在线接口文档
![输入图片说明](https://static.oschina.net/uploads/img/201908/27095258_M2Xq.png "在这里输入图片标题")
![输入图片说明](https://static.oschina.net/uploads/img/201904/14160957_hN3X.png "在这里输入图片标题")
## 捐赠
如果觉得还不错,请作者喝杯咖啡吧 ☺

View File

@ -14,7 +14,7 @@ USE `jeecg-boot`;
Target Server Version : 50738
File Encoding : 65001
Date: 06/03/2023 21:32:36
Date: 13/03/2023 09:28:06
*/
SET NAMES utf8mb4;
@ -713,6 +713,7 @@ CREATE TABLE `jimu_report_data_source` (
`update_time` datetime NULL DEFAULT NULL COMMENT '更新日期',
`connect_times` int(1) UNSIGNED NULL DEFAULT 0 COMMENT '连接失败次数',
`tenant_id` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '多租户标识',
`type` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '类型(report:报表;drag:仪表盘)',
PRIMARY KEY (`id`) USING BTREE,
INDEX `idx_jmdatasource_report_id`(`report_id`) USING BTREE,
INDEX `idx_jmdatasource_code`(`code`) USING BTREE
@ -721,9 +722,9 @@ CREATE TABLE `jimu_report_data_source` (
-- ----------------------------
-- Records of jimu_report_data_source
-- ----------------------------
INSERT INTO `jimu_report_data_source` VALUES ('1324261983692902402', 'jeewx', '1324261770294071296', '', NULL, 'MYSQL', 'com.mysql.jdbc.Driver', 'jdbc:mysql://127.0.0.1:3306/jeewx-boot?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8', 'root', 'root', 'jeecg', '2020-11-05 16:07:15', NULL, '2020-11-05 16:07:15', 0, NULL);
INSERT INTO `jimu_report_data_source` VALUES ('26d21fe4f27920d2f56abc8d90a8e527', 'oracle', '1308645288868712448', '', NULL, 'ORACLE', 'oracle.jdbc.OracleDriver', 'jdbc:oracle:thin:@192.168.1.199:1521:helowin', 'jeecgbootbpm', 'jeecg196283', 'admin', '2021-01-05 19:26:24', NULL, '2021-01-05 19:26:24', 0, NULL);
INSERT INTO `jimu_report_data_source` VALUES ('8f90daf47d15d35ca6cf420748b8b9ba', 'localhost', '1316944968992034816', '', NULL, 'MYSQL5.7', 'com.mysql.cj.jdbc.Driver', 'jdbc:mysql://127.0.0.1:3306/jeecg-boot?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8', 'root', 'root', 'admin', '2021-01-13 14:34:00', NULL, '2021-01-13 14:34:00', 0, NULL);
INSERT INTO `jimu_report_data_source` VALUES ('1324261983692902402', 'jeewx', '1324261770294071296', '', NULL, 'MYSQL', 'com.mysql.jdbc.Driver', 'jdbc:mysql://127.0.0.1:3306/jeewx-boot?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8', 'root', 'root', 'jeecg', '2020-11-05 16:07:15', NULL, '2020-11-05 16:07:15', 0, NULL, 'report');
INSERT INTO `jimu_report_data_source` VALUES ('26d21fe4f27920d2f56abc8d90a8e527', 'oracle', '1308645288868712448', '', NULL, 'ORACLE', 'oracle.jdbc.OracleDriver', 'jdbc:oracle:thin:@192.168.1.199:1521:helowin', 'jeecgbootbpm', 'jeecg196283', 'admin', '2021-01-05 19:26:24', NULL, '2021-01-05 19:26:24', 0, NULL, 'report');
INSERT INTO `jimu_report_data_source` VALUES ('8f90daf47d15d35ca6cf420748b8b9ba', 'localhost', '1316944968992034816', '', NULL, 'MYSQL5.7', 'com.mysql.cj.jdbc.Driver', 'jdbc:mysql://127.0.0.1:3306/jeecg-boot?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8', 'root', 'root', 'admin', '2021-01-13 14:34:00', NULL, '2021-01-13 14:34:00', 0, NULL, 'report');
-- ----------------------------
-- Table structure for jimu_report_db
@ -2958,7 +2959,7 @@ CREATE TABLE `qrtz_scheduler_state` (
-- ----------------------------
-- Records of qrtz_scheduler_state
-- ----------------------------
INSERT INTO `qrtz_scheduler_state` VALUES ('MyScheduler', 'qin1678102560776', 1678102793417, 15000);
INSERT INTO `qrtz_scheduler_state` VALUES ('MyScheduler', 'qin1678364404962', 1678369184458, 15000);
-- ----------------------------
-- Table structure for qrtz_simple_triggers
@ -4239,6 +4240,26 @@ CREATE TABLE `sys_log` (
-- ----------------------------
-- Records of sys_log
-- ----------------------------
INSERT INTO `sys_log` VALUES ('1632743293639704578', 1, '用户名: admin,登录成功', NULL, 'admin', '管理员', '127.0.0.1', NULL, NULL, NULL, NULL, NULL, NULL, '2023-03-06 22:01:51', NULL, NULL, NULL);
INSERT INTO `sys_log` VALUES ('1633795132552331266', 1, '用户名: admin,登录成功', NULL, 'admin', '管理员', '127.0.0.1', NULL, NULL, NULL, NULL, NULL, NULL, '2023-03-09 19:41:29', NULL, NULL, NULL);
INSERT INTO `sys_log` VALUES ('1633795234301952002', 3, ' jeecg 添加到角色 232', 2, 'admin', '管理员', NULL, NULL, NULL, NULL, NULL, NULL, NULL, '2023-03-09 19:41:53', NULL, NULL, 1);
INSERT INTO `sys_log` VALUES ('1633795819784847361', 2, '编辑用户username zhagnxiao', 2, 'admin', '管理员', '127.0.0.1', NULL, NULL, NULL, NULL, NULL, NULL, '2023-03-09 19:44:13', NULL, NULL, NULL);
INSERT INTO `sys_log` VALUES ('1633797138973147137', 2, '添加用户username sdfas', 2, 'admin', '管理员', '127.0.0.1', NULL, NULL, NULL, NULL, NULL, NULL, '2023-03-09 19:49:27', NULL, NULL, NULL);
INSERT INTO `sys_log` VALUES ('1633799025831133186', 2, '添加用户username 123', 2, 'admin', '管理员', '127.0.0.1', NULL, NULL, NULL, NULL, NULL, NULL, '2023-03-09 19:56:57', NULL, NULL, NULL);
INSERT INTO `sys_log` VALUES ('1633799090641518594', 2, '编辑用户username 123', 2, 'admin', '管理员', '127.0.0.1', NULL, NULL, NULL, NULL, NULL, NULL, '2023-03-09 19:57:12', NULL, NULL, NULL);
INSERT INTO `sys_log` VALUES ('1633799500294995970', 2, '添加用户username sdfasdf', 2, 'admin', '管理员', '127.0.0.1', NULL, NULL, NULL, NULL, NULL, NULL, '2023-03-09 19:58:50', NULL, NULL, NULL);
INSERT INTO `sys_log` VALUES ('1633799606465413122', 2, '编辑用户username sdfasdf', 2, 'admin', '管理员', '127.0.0.1', NULL, NULL, NULL, NULL, NULL, NULL, '2023-03-09 19:59:15', NULL, NULL, NULL);
INSERT INTO `sys_log` VALUES ('1633802472806670338', 1, '用户名: 管理员,退出成功', NULL, 'admin', '管理员', '127.0.0.1', NULL, NULL, NULL, NULL, NULL, NULL, '2023-03-09 20:10:39', NULL, NULL, NULL);
INSERT INTO `sys_log` VALUES ('1633802491123195906', 1, '用户名: admin,登录成功', NULL, 'admin', '管理员', '127.0.0.1', NULL, NULL, NULL, NULL, NULL, NULL, '2023-03-09 20:10:43', NULL, NULL, NULL);
INSERT INTO `sys_log` VALUES ('1633802551785414658', 2, '职务表-分页列表查询', 1, 'admin', '管理员', '127.0.0.1', 'org.jeecg.modules.system.controller.SysPositionController.queryPageList()', NULL, ' sysPosition: SysPosition(id=null, code=, name=null, postRank=null, companyId=null, createBy=null, createTime=null, updateBy=null, updateTime=null, sysOrgCode=null, tenantId=0) pageNo: 1 pageSize: 10 req: org.apache.shiro.web.servlet.ShiroHttpServletRequest@400bd6e8', NULL, 44, NULL, '2023-03-09 20:10:58', NULL, NULL, NULL);
INSERT INTO `sys_log` VALUES ('1633802611273228290', 2, '添加用户username asdfasdf', 2, 'admin', '管理员', '127.0.0.1', NULL, NULL, NULL, NULL, NULL, NULL, '2023-03-09 20:11:12', NULL, NULL, NULL);
INSERT INTO `sys_log` VALUES ('1633802653614727170', 2, '批量删除用户 ids 1633802611139010562,1633799500227887106,1633799025764024321,1633797138843123714', 3, 'admin', '管理员', '127.0.0.1', NULL, NULL, NULL, NULL, NULL, NULL, '2023-03-09 20:11:22', NULL, NULL, NULL);
INSERT INTO `sys_log` VALUES ('1633802992560627713', 2, '职务表-分页列表查询', 1, 'admin', '管理员', '127.0.0.1', 'org.jeecg.modules.system.controller.SysPositionController.queryPageList()', NULL, ' sysPosition: SysPosition(id=null, code=, name=null, postRank=null, companyId=null, createBy=null, createTime=null, updateBy=null, updateTime=null, sysOrgCode=null, tenantId=0) pageNo: 1 pageSize: 10 req: org.apache.shiro.web.servlet.ShiroHttpServletRequest@767bb69d', NULL, 18, NULL, '2023-03-09 20:12:43', NULL, NULL, NULL);
INSERT INTO `sys_log` VALUES ('1633802993412071426', 2, '职务表-分页列表查询', 1, 'admin', '管理员', '127.0.0.1', 'org.jeecg.modules.system.controller.SysPositionController.queryPageList()', NULL, ' sysPosition: SysPosition(id=null, code=总经理, name=null, postRank=null, companyId=null, createBy=null, createTime=null, updateBy=null, updateTime=null, sysOrgCode=null, tenantId=0) pageNo: 1 pageSize: 10 req: org.apache.shiro.web.servlet.ShiroHttpServletRequest@f9470cd', NULL, 24, NULL, '2023-03-09 20:12:43', NULL, NULL, NULL);
INSERT INTO `sys_log` VALUES ('1633803007035170818', 2, '编辑用户username admin', 2, 'admin', '管理员', '127.0.0.1', NULL, NULL, NULL, NULL, NULL, NULL, '2023-03-09 20:12:46', NULL, NULL, NULL);
INSERT INTO `sys_log` VALUES ('1633804165707456513', 2, '职务表-分页列表查询', 1, 'admin', '管理员', '127.0.0.1', 'org.jeecg.modules.system.controller.SysPositionController.queryPageList()', NULL, ' sysPosition: SysPosition(id=null, code=null, name=null, postRank=null, companyId=null, createBy=null, createTime=null, updateBy=null, updateTime=null, sysOrgCode=null, tenantId=1000) pageNo: 1 pageSize: 10 req: org.apache.shiro.web.servlet.ShiroHttpServletRequest@7460e74a', NULL, 15, NULL, '2023-03-09 20:17:22', NULL, NULL, NULL);
INSERT INTO `sys_log` VALUES ('1633804994137026562', 2, '修改角色ID: 1501570619841810433 的权限配置操作人 admin', 2, 'admin', '管理员', '127.0.0.1', NULL, NULL, NULL, NULL, NULL, NULL, '2023-03-09 20:20:40', NULL, NULL, NULL);
INSERT INTO `sys_log` VALUES ('1633807285640491010', 2, '编辑用户username admin', 2, 'admin', '管理员', '127.0.0.1', NULL, NULL, NULL, NULL, NULL, NULL, '2023-03-09 20:29:46', NULL, NULL, NULL);
-- ----------------------------
-- Table structure for sys_permission
@ -4282,7 +4303,7 @@ CREATE TABLE `sys_permission` (
-- Records of sys_permission
-- ----------------------------
INSERT INTO `sys_permission` VALUES ('1170592628746878978', 'd7d6e2e4e2934f2c9385a623fd98c6f3', '菜单管理', '/system/menu', 'system/menu/index', 1, NULL, NULL, 1, NULL, '1', 3.00, 0, 'ant-design:menu-fold-outlined', 0, 0, 0, 0, NULL, 'admin', '2019-09-08 15:00:05', 'admin', '2022-11-10 16:42:38', 0, 0, '1', 0);
INSERT INTO `sys_permission` VALUES ('119213522910765570', 'd7d6e2e4e2934f2c9385a623fd98c6f3', '租户用户', '/system/user/tenantUserList', 'system/user/TenantUserList', 1, NULL, NULL, 1, NULL, NULL, 3.20, 0, 'ant-design:user', 1, 0, 0, 0, NULL, NULL, '2018-12-25 20:34:38', 'admin', '2022-12-30 10:11:27', 0, 0, NULL, 0);
INSERT INTO `sys_permission` VALUES ('119213522910765570', '1633804334561746946', '租户用户', '/system/user/tenantUserList', 'system/user/TenantUserList', 1, NULL, NULL, 1, NULL, NULL, 3.20, 0, 'ant-design:user', 1, 0, 0, 0, NULL, NULL, '2018-12-25 20:34:38', 'admin', '2023-03-09 20:18:16', 0, 0, NULL, 0);
INSERT INTO `sys_permission` VALUES ('1211885237487923202', '1207203817658105858', 'btn:add', '', '', 1, NULL, NULL, 2, 'btn:add', '1', 1.00, 0, NULL, 1, 0, 0, NULL, NULL, 'admin', '2019-12-31 13:42:11', 'admin', '2020-01-07 20:07:53', 0, 0, '1', 0);
INSERT INTO `sys_permission` VALUES ('1214376304951664642', '3f915b2769fc80648e92d04e84ca059d', '用户编辑', '', '', 0, NULL, NULL, 2, 'system:user:edit', '1', 1.00, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2020-01-07 10:40:47', 'admin', '2022-11-17 16:24:33', 0, 0, '1', 0);
INSERT INTO `sys_permission` VALUES ('1214462306546319362', '3f915b2769fc80648e92d04e84ca059d', '新增用户', '', '', 0, NULL, NULL, 2, 'system:user:add', '1', 1.00, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2020-01-07 16:22:32', 'admin', '2022-11-17 16:24:47', 0, 0, '1', 0);
@ -4471,7 +4492,7 @@ INSERT INTO `sys_permission` VALUES ('1443390062919208961', '', '消息中心',
INSERT INTO `sys_permission` VALUES ('1443391584864358402', '1443390062919208961', '消息模板', '/message/template', 'system/message/template/index', 1, NULL, NULL, 1, NULL, '0', 2.00, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2021-09-30 09:45:45', 'admin', '2022-09-22 10:32:42', 0, 0, NULL, 0);
INSERT INTO `sys_permission` VALUES ('1446778415130722306', '1438108219445731330', 'JEECG官网', '/', 'http://www.jeecg.com', 0, NULL, NULL, 1, NULL, '0', 1.00, 0, NULL, 1, 0, 0, 0, NULL, 'jeecg', '2021-10-09 18:03:49', 'admin', '2021-11-15 18:01:26', 0, 0, NULL, 1);
INSERT INTO `sys_permission` VALUES ('1447535997560909826', '1438108197270446081', '禁用', NULL, NULL, 0, NULL, NULL, 2, 'demo.dbarray', '2', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2021-10-11 20:14:10', 'admin', '2021-10-11 20:18:48', 0, 0, '1', 0);
INSERT INTO `sys_permission` VALUES ('1447763172274495489', '', '统计报表', '/report', 'layouts/RouteView', 1, NULL, NULL, 0, NULL, '0', 3.10, 0, 'ant-design:bar-chart-outlined', 0, 0, 0, 0, NULL, 'jeecg', '2021-10-12 11:16:53', 'admin', '2023-03-06 19:36:56', 0, 0, NULL, 0);
INSERT INTO `sys_permission` VALUES ('1447763172274495489', '', '统计报表', '/report', 'layouts/RouteView', 1, NULL, NULL, 0, NULL, '0', 5.00, 0, 'ant-design:bar-chart-outlined', 0, 0, 0, 0, NULL, 'jeecg', '2021-10-12 11:16:53', 'admin', '2023-03-09 20:21:04', 0, 0, NULL, 0);
INSERT INTO `sys_permission` VALUES ('1447763517847396354', '1447763172274495489', 'EChartDemo', '/report/chartDemo', 'report/chartdemo/index', 1, NULL, NULL, 1, NULL, '0', 1.00, 0, NULL, 1, 0, 0, 0, NULL, 'jeecg', '2021-10-12 11:18:15', 'jeecg', '2021-10-14 14:36:38', 0, 0, NULL, 0);
INSERT INTO `sys_permission` VALUES ('1448252726202859522', '1447763172274495489', '布局统计报表', '/statisticst', 'report/statisticst/index', 1, NULL, NULL, 1, NULL, '0', 2.00, 0, NULL, 1, 0, 0, 0, NULL, 'jeecg', '2021-10-13 19:42:12', NULL, NULL, 0, 0, NULL, 0);
INSERT INTO `sys_permission` VALUES ('1450308897429536769', '1438108197958311537', 'JVxeTable示例', '/jeecg/j-vxe-table-demo', 'demo/jeecg/JVxeTableDemo/index', 1, NULL, NULL, 1, NULL, '0', 10.00, 0, NULL, 0, 0, 0, 0, NULL, 'admin', '2021-10-19 11:52:41', 'admin', '2021-10-19 11:54:46', 0, 0, NULL, 0);
@ -4563,7 +4584,7 @@ INSERT INTO `sys_permission` VALUES ('1593185714482880514', '3f915b2769fc80648e9
INSERT INTO `sys_permission` VALUES ('1594930803956920321', '1439398677984878593', '在线用户', '/system/onlineuser', 'system/onlineuser/OnlineUserList', 1, '', NULL, 1, NULL, '0', 12.00, 0, 'ant-design:aliwangwang-outlined', 1, 0, 0, 0, NULL, 'admin', '2022-11-22 13:48:31', 'admin', '2023-03-04 15:15:36', 0, 0, NULL, 0);
INSERT INTO `sys_permission` VALUES ('1596141938193747970', 'd7d6e2e4e2934f2c9385a623fd98c6f3', '用户设置', '/system/usersetting', 'system/usersetting/UserSetting', 1, '', NULL, 1, NULL, '0', 12.00, 0, 'ant-design:setting-twotone', 0, 0, 1, 0, NULL, 'admin', '2022-11-25 22:01:08', 'admin', '2023-03-04 15:00:26', 0, 0, NULL, 0);
INSERT INTO `sys_permission` VALUES ('1596335805278990338', '1596141938193747970', '账户设置用户编辑权限', NULL, NULL, 0, NULL, NULL, 2, 'system:user:setting:edit', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2022-11-26 10:51:29', NULL, NULL, 0, 0, '1', 0);
INSERT INTO `sys_permission` VALUES ('1597419994965786625', 'd7d6e2e4e2934f2c9385a623fd98c6f3', '租户角色', '/system/role/TenantRoleList', 'system/role/TenantRoleList', 1, '', NULL, 1, NULL, '0', 3.20, 0, 'ant-design:line-height-outlined', 1, 0, 0, 0, NULL, 'admin', '2022-11-29 10:39:40', 'admin', '2023-03-04 15:01:43', 0, 0, NULL, 0);
INSERT INTO `sys_permission` VALUES ('1597419994965786625', '1633804334561746946', '租户角色', '/system/role/TenantRoleList', 'system/role/TenantRoleList', 1, '', NULL, 1, NULL, '0', 3.20, 0, 'ant-design:line-height-outlined', 1, 0, 0, 0, NULL, 'admin', '2022-11-29 10:39:40', 'admin', '2023-03-09 20:18:23', 0, 0, NULL, 0);
INSERT INTO `sys_permission` VALUES ('15c92115213910765570', '3f915b2769fc80648e92d04e84ca059d', '通过ID查询用户信息接口', NULL, NULL, 0, NULL, NULL, 2, 'system:user:queryById', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2022-11-14 19:20:22', NULL, NULL, 0, 0, '1', 0);
INSERT INTO `sys_permission` VALUES ('1600105607009165314', '1280350452934307841', '邀请用户', NULL, NULL, 0, NULL, NULL, 2, 'system:tenant:invitation:user', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2022-12-06 20:31:20', NULL, NULL, 0, 0, '1', 0);
INSERT INTO `sys_permission` VALUES ('1600108123037917186', '1280350452934307841', '通过租户id获取用户', NULL, NULL, 0, NULL, NULL, 2, 'system:tenant:user:list', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2022-12-06 20:41:20', NULL, NULL, 0, 0, '1', 0);
@ -4580,6 +4601,7 @@ INSERT INTO `sys_permission` VALUES ('1620261087828418562', '1280350452934307841
INSERT INTO `sys_permission` VALUES ('1620305415648989186', '1280350452934307841', '彻底删除租户', NULL, NULL, 0, NULL, NULL, 2, 'system:tenant:deleteTenantLogic', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2023-01-31 14:18:10', 'admin', '2023-01-31 14:19:51', 0, 0, '1', 0);
INSERT INTO `sys_permission` VALUES ('1620327825894981634', '1280350452934307841', '租户还原', NULL, NULL, 0, NULL, NULL, 2, 'system:tenant:revertTenantLogic', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2023-01-31 15:47:13', NULL, NULL, 0, 0, '1', 0);
INSERT INTO `sys_permission` VALUES ('1621620772498288641', '1280350452934307841', '添加租户', NULL, NULL, 0, NULL, NULL, 2, 'system:tenant:add', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2023-01-11 15:08:29', NULL, NULL, 0, 0, '1', 0);
INSERT INTO `sys_permission` VALUES ('1633804334561746946', '', '我的租户', '/mytenant', 'layouts/RouteView', 1, '', NULL, 0, NULL, '0', 4.00, 0, 'ant-design:ant-design-outlined', 0, 0, 0, 0, NULL, 'admin', '2023-03-09 20:18:03', 'admin', '2023-03-09 20:20:57', 0, 0, NULL, 0);
INSERT INTO `sys_permission` VALUES ('1697220712498288641', '1280350452934307841', '根据ids查询租户', NULL, NULL, 0, NULL, NULL, 2, 'system:tenant:queryList', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2023-01-11 15:08:29', NULL, NULL, 0, 0, '1', 0);
INSERT INTO `sys_permission` VALUES ('190c2b43bec6a5f7a4194a85db67d96a', 'd7d6e2e4e2934f2c9385a623fd98c6f3', '角色管理', '/system/role', 'system/role/index', 1, NULL, NULL, 1, NULL, NULL, 2.00, 0, 'ant-design:solution', 0, 1, 0, NULL, NULL, NULL, '2018-12-25 20:34:38', 'admin', '2021-09-17 15:58:00', 0, 0, NULL, 0);
INSERT INTO `sys_permission` VALUES ('1a0811914300741f4e11838ff37a1d3a', '3f915b2769fc80648e92d04e84ca059d', '手机号禁用', '', '', 0, NULL, NULL, 2, 'user:form:phone', '2', 1.00, 0, NULL, 1, NULL, 0, NULL, NULL, 'admin', '2019-05-11 17:19:30', 'admin', '2019-05-11 18:00:22', 0, 0, '1', NULL);
@ -5479,6 +5501,7 @@ INSERT INTO `sys_role_permission` VALUES ('1631912286107684866', '15015706198418
INSERT INTO `sys_role_permission` VALUES ('1631912286107684867', '1501570619841810433', '1594930803956920321', NULL, '2023-03-04 14:59:43', '127.0.0.1');
INSERT INTO `sys_role_permission` VALUES ('1631912286107684868', '1501570619841810433', '1593173018886709250', NULL, '2023-03-04 14:59:43', '127.0.0.1');
INSERT INTO `sys_role_permission` VALUES ('1632635480313671681', 'e51758fa916c881624b046d26bd09230', '9502685863ab87f0ad1134142788a385', NULL, '2023-03-06 14:53:26', '127.0.0.1');
INSERT INTO `sys_role_permission` VALUES ('1633804994019586049', '1501570619841810433', '1633804334561746946', NULL, '2023-03-09 20:20:40', '127.0.0.1');
INSERT INTO `sys_role_permission` VALUES ('165acd6046a0eaf975099f46a3c898ea', 'f6817f48af4fb3af11b9e8bf182f618b', '4f66409ef3bbd69c1d80469d6e2a885e', NULL, NULL, NULL);
INSERT INTO `sys_role_permission` VALUES ('1664b92dff13e1575e3a929caa2fa14d', 'f6817f48af4fb3af11b9e8bf182f618b', 'd2bbf9ebca5a8fa2e227af97d2da7548', NULL, NULL, NULL);
INSERT INTO `sys_role_permission` VALUES ('16ef8ed3865ccc6f6306200760896c50', 'ee8626f80f7c2619917b6236f3a7f02b', 'e8af452d8948ea49d37c934f5100ae6a', NULL, NULL, NULL);
@ -5903,7 +5926,8 @@ CREATE TABLE `sys_tenant` (
-- ----------------------------
-- Records of sys_tenant
-- ----------------------------
INSERT INTO `sys_tenant` VALUES (1, '北京租户001', '2020-07-10 15:43:32', 'admin', NULL, NULL, 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, NULL, 1);
INSERT INTO `sys_tenant` VALUES (1, '白酒集团', '2020-07-10 15:43:32', 'admin', NULL, NULL, 1, NULL, NULL, NULL, NULL, '7WIUCW', NULL, NULL, NULL, NULL, NULL, 1, 'admin', '2023-03-09 20:27:48', 1);
INSERT INTO `sys_tenant` VALUES (1000, '北京敲敲云科技有限公司', '2023-03-09 19:55:11', 'admin', NULL, NULL, 1, NULL, NULL, NULL, NULL, '2PI3U6', NULL, NULL, NULL, NULL, NULL, 0, 'admin', '2023-03-09 21:38:56', NULL);
-- ----------------------------
-- Table structure for sys_tenant_pack
@ -5966,6 +5990,7 @@ CREATE TABLE `sys_tenant_pack_user` (
-- ----------------------------
-- Records of sys_tenant_pack_user
-- ----------------------------
INSERT INTO `sys_tenant_pack_user` VALUES ('1633795234318729217', '1633795213938606082', 'a75d45a015c44384a04449ee80dc3503', 1, 'admin', '2023-03-09 19:41:53', NULL, NULL, 1);
-- ----------------------------
-- Table structure for sys_third_account
@ -6039,11 +6064,10 @@ CREATE TABLE `sys_user` (
-- ----------------------------
-- Records of sys_user
-- ----------------------------
INSERT INTO `sys_user` VALUES ('1572778193260863489', '123123', '12312322', '0938718c770fa385', 'mSBQHHZP', 'temp/4afbfbedab64034f9015f1bca8c379310b551dab_1663814505787.jpg', '2022-09-16 00:00:00', 1, '111@1.com', '18611788521', NULL, 1, 1, NULL, NULL, 1, '11', 'devleader', NULL, 'admin', '2022-09-22 10:41:57', 'admin', '2022-09-22 10:42:12', 1, '', NULL, NULL, NULL);
INSERT INTO `sys_user` VALUES ('3d464b4ea0d2491aab8a7bde74c57e95', 'zhangsan', '张三', '02ea098224c7d0d2077c14b9a3a1ed16', 'x5xRdeKB', 'https://static.jeecg.com/temp/jmlogo_1606575041993.png', NULL, NULL, NULL, NULL, '财务部', 1, 0, NULL, NULL, 1, '0005', '总经理', NULL, 'admin', '2020-05-14 21:26:24', 'admin', '2020-09-09 14:42:51', 1, '', NULL, NULL, NULL);
INSERT INTO `sys_user` VALUES ('a75d45a015c44384a04449ee80dc3503', 'jeecg', 'jeecg', 'eee378a1258530cb', 'mIgiYJow', 'https://static.jeecg.com/temp/国炬软件logo_1606575029126.png', NULL, 1, NULL, NULL, 'A02A01', 1, 0, NULL, NULL, 1, '00002', 'devleader', NULL, 'admin', '2019-02-13 16:02:36', 'jeecg', '2022-03-09 23:03:21', 1, '', NULL, NULL, NULL);
INSERT INTO `sys_user` VALUES ('e9ca23d68d884d4ebb19d07889727dae', 'admin', '管理员', 'cb362cfeefbf3d8d', 'RCGTeGiH', 'https://static.jeecg.com/temp/国炬软件logo_1606575029126.png', '2018-12-05 00:00:00', 1, 'jeecg@163.com', '18611111111', 'A01', 1, 0, NULL, NULL, 1, '00001', '总经理', NULL, NULL, '2019-06-21 17:54:10', 'admin', '2022-11-03 10:19:31', 2, 'c6d7cb4deeac411cb3384b1b31278596', NULL, 0, NULL);
INSERT INTO `sys_user` VALUES ('f0019fdebedb443c98dcb17d88222c38', 'zhagnxiao', '张小红12', 'f898134e5e52ae11a2ffb2c3b57a4e90', 'go3jJ4zX', 'https://static.jeecg.com/temp/jmlogo_1606575041993.png', '2019-04-01 00:00:00', NULL, NULL, '18611711111', '研发部,财务部', 1, 0, NULL, NULL, 1, '00003', 'devleader', NULL, 'admin', '2020-10-01 19:34:10', 'admin', '2023-03-04 15:02:35', 2, '1582683631414632450', NULL, NULL, NULL);
INSERT INTO `sys_user` VALUES ('e9ca23d68d884d4ebb19d07889727dae', 'admin', '管理员', 'cb362cfeefbf3d8d', 'RCGTeGiH', 'https://static.jeecg.com/temp/国炬软件logo_1606575029126.png', '2018-12-05 00:00:00', 1, 'jeecg@163.com', '18611111111', 'A01', 1, 0, NULL, NULL, 1, '00001', '总经理', NULL, NULL, '2019-06-21 17:54:10', 'admin', '2023-03-09 20:29:46', 2, '', NULL, 1000, NULL);
INSERT INTO `sys_user` VALUES ('f0019fdebedb443c98dcb17d88222c38', 'zhagnxiao', '张小红12', 'f898134e5e52ae11a2ffb2c3b57a4e90', 'go3jJ4zX', 'https://static.jeecg.com/temp/jmlogo_1606575041993.png', '2019-04-01 00:00:00', NULL, NULL, '18611711111', '研发部,财务部', 1, 0, NULL, NULL, 1, '00003', 'devleader,总经理', NULL, 'admin', '2020-10-01 19:34:10', 'admin', '2023-03-09 19:44:13', 2, '1582683631414632450', NULL, NULL, NULL);
-- ----------------------------
-- Table structure for sys_user_agent
@ -6096,10 +6120,9 @@ CREATE TABLE `sys_user_depart` (
INSERT INTO `sys_user_depart` VALUES ('1303584634328633345', '3d464b4ea0d2491aab8a7bde74c57e95', 'a7d7e77e06c84325a40932163adcdaa6');
INSERT INTO `sys_user_depart` VALUES ('1256487210695356418', 'a75d45a015c44384a04449ee80dc3503', 'a7d7e77e06c84325a40932163adcdaa6');
INSERT INTO `sys_user_depart` VALUES ('1f3a0267811327b9eca86b0cc2b956f3', 'bcbe1290783a469a83ae3bd8effe15d4', '5159cde220114246b045e574adceafe9');
INSERT INTO `sys_user_depart` VALUES ('1587992837927714818', 'e9ca23d68d884d4ebb19d07889727dae', 'c6d7cb4deeac411cb3384b1b31278596');
INSERT INTO `sys_user_depart` VALUES ('1631913005669896194', 'f0019fdebedb443c98dcb17d88222c38', '1582683631414632450');
INSERT INTO `sys_user_depart` VALUES ('1631913005669896195', 'f0019fdebedb443c98dcb17d88222c38', '57197590443c44f083d42ae24ef26a2c');
INSERT INTO `sys_user_depart` VALUES ('1631913005678284802', 'f0019fdebedb443c98dcb17d88222c38', '67fc001af12a4f9b8458005d3f19934a');
INSERT INTO `sys_user_depart` VALUES ('1633795820112003074', 'f0019fdebedb443c98dcb17d88222c38', '1582683631414632450');
INSERT INTO `sys_user_depart` VALUES ('1633795820124585985', 'f0019fdebedb443c98dcb17d88222c38', '57197590443c44f083d42ae24ef26a2c');
INSERT INTO `sys_user_depart` VALUES ('1633795820137168898', 'f0019fdebedb443c98dcb17d88222c38', '67fc001af12a4f9b8458005d3f19934a');
-- ----------------------------
-- Table structure for sys_user_role
@ -6122,9 +6145,9 @@ CREATE TABLE `sys_user_role` (
INSERT INTO `sys_user_role` VALUES ('0ede6d23d53bc7dc990346ff14faabee', '3db4cf42353f4e868b7ccfeef90505d2', 'ee8626f80f7c2619917b6236f3a7f02b', 0);
INSERT INTO `sys_user_role` VALUES ('1256487210544361473', 'a75d45a015c44384a04449ee80dc3503', 'ee8626f80f7c2619917b6236f3a7f02b', 0);
INSERT INTO `sys_user_role` VALUES ('1303584634118918145', '3d464b4ea0d2491aab8a7bde74c57e95', 'ee8626f80f7c2619917b6236f3a7f02b', 0);
INSERT INTO `sys_user_role` VALUES ('1587992837868994562', 'e9ca23d68d884d4ebb19d07889727dae', '1501570619841810433', 0);
INSERT INTO `sys_user_role` VALUES ('1587992837885771777', 'e9ca23d68d884d4ebb19d07889727dae', 'f6817f48af4fb3af11b9e8bf182f618b', 0);
INSERT INTO `sys_user_role` VALUES ('1631913005644730370', 'f0019fdebedb443c98dcb17d88222c38', 'ee8626f80f7c2619917b6236f3a7f02b', 0);
INSERT INTO `sys_user_role` VALUES ('1633795820044894209', 'f0019fdebedb443c98dcb17d88222c38', 'ee8626f80f7c2619917b6236f3a7f02b', 0);
INSERT INTO `sys_user_role` VALUES ('1633807285908926466', 'e9ca23d68d884d4ebb19d07889727dae', '1501570619841810433', 1000);
INSERT INTO `sys_user_role` VALUES ('1633807285971841026', 'e9ca23d68d884d4ebb19d07889727dae', 'f6817f48af4fb3af11b9e8bf182f618b', 1000);
INSERT INTO `sys_user_role` VALUES ('31af310584bd5795f76b1fe8c38294a0', '70f5dcf03f36471dabba81381919291f', 'e51758fa916c881624b046d26bd09230', 0);
INSERT INTO `sys_user_role` VALUES ('79d66ef7aa137cfa9957081a1483009d', '9a668858c4c74cf5a2b25ad9608ba095', 'ee8626f80f7c2619917b6236f3a7f02b', 0);
INSERT INTO `sys_user_role` VALUES ('8d7846ec783e157174e4ce2949231a65', '7ee6630e89d17afbf6d12150197b578d', 'e51758fa916c881624b046d26bd09230', 0);
@ -6151,7 +6174,8 @@ CREATE TABLE `sys_user_tenant` (
`update_time` datetime NULL DEFAULT NULL COMMENT '更新日期',
PRIMARY KEY (`id`) USING BTREE,
INDEX `idx_sut_user_id`(`user_id`) USING BTREE,
INDEX `idx_sut_tenant_id`(`tenant_id`) USING BTREE
INDEX `idx_sut_tenant_id`(`tenant_id`) USING BTREE,
INDEX `uniq_sut_user_rel_tenant`(`user_id`, `tenant_id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '用户租户关系表' ROW_FORMAT = DYNAMIC;
-- ----------------------------

View File

@ -11,7 +11,7 @@
Target Server Version : 110200
File Encoding : 65001
Date: 07/03/2023 11:20:38
Date: 13/03/2023 10:26:56
*/
@ -1005,7 +1005,8 @@ CREATE TABLE "JEECGBOOT"."JIMU_REPORT_DATA_SOURCE" (
"UPDATE_BY" NVARCHAR2(50),
"UPDATE_TIME" DATE,
"CONNECT_TIMES" NUMBER(11,0),
"TENANT_ID" NVARCHAR2(10)
"TENANT_ID" NVARCHAR2(10),
"TYPE" VARCHAR2(10 BYTE)
)
LOGGING
NOCOMPRESS
@ -1037,13 +1038,14 @@ COMMENT ON COLUMN "JEECGBOOT"."JIMU_REPORT_DATA_SOURCE"."UPDATE_BY" IS '更新
COMMENT ON COLUMN "JEECGBOOT"."JIMU_REPORT_DATA_SOURCE"."UPDATE_TIME" IS '更新日期';
COMMENT ON COLUMN "JEECGBOOT"."JIMU_REPORT_DATA_SOURCE"."CONNECT_TIMES" IS '连接失败次数';
COMMENT ON COLUMN "JEECGBOOT"."JIMU_REPORT_DATA_SOURCE"."TENANT_ID" IS '多租户标识';
COMMENT ON COLUMN "JEECGBOOT"."JIMU_REPORT_DATA_SOURCE"."TYPE" IS '类型(report:报表;drag:仪表盘)';
-- ----------------------------
-- Records of JIMU_REPORT_DATA_SOURCE
-- ----------------------------
INSERT INTO "JEECGBOOT"."JIMU_REPORT_DATA_SOURCE" VALUES ('1324261983692902402', 'jeewx', '1324261770294071296', NULL, NULL, 'MYSQL', 'com.mysql.jdbc.Driver', 'jdbc:mysql://127.0.0.1:3306/jeewx-boot?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8', 'root', 'root', 'jeecg', TO_DATE('2020-11-05 16:07:15', 'SYYYY-MM-DD HH24:MI:SS'), NULL, TO_DATE('2020-11-05 16:07:15', 'SYYYY-MM-DD HH24:MI:SS'), '0', NULL);
INSERT INTO "JEECGBOOT"."JIMU_REPORT_DATA_SOURCE" VALUES ('26d21fe4f27920d2f56abc8d90a8e527', 'oracle', '1308645288868712448', NULL, NULL, 'ORACLE', 'oracle.jdbc.OracleDriver', 'jdbc:oracle:thin:@192.168.1.199:1521:helowin', 'jeecgbootbpm', 'jeecg196283', 'admin', TO_DATE('2021-01-05 19:26:24', 'SYYYY-MM-DD HH24:MI:SS'), NULL, TO_DATE('2021-01-05 19:26:24', 'SYYYY-MM-DD HH24:MI:SS'), '0', NULL);
INSERT INTO "JEECGBOOT"."JIMU_REPORT_DATA_SOURCE" VALUES ('8f90daf47d15d35ca6cf420748b8b9ba', 'localhost', '1316944968992034816', NULL, NULL, 'MYSQL5.7', 'com.mysql.cj.jdbc.Driver', 'jdbc:mysql://127.0.0.1:3306/jeecg-boot?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8', 'root', 'root', 'admin', TO_DATE('2021-01-13 14:34:00', 'SYYYY-MM-DD HH24:MI:SS'), NULL, TO_DATE('2021-01-13 14:34:00', 'SYYYY-MM-DD HH24:MI:SS'), '0', NULL);
INSERT INTO "JEECGBOOT"."JIMU_REPORT_DATA_SOURCE" VALUES ('1324261983692902402', 'jeewx', '1324261770294071296', NULL, NULL, 'MYSQL', 'com.mysql.jdbc.Driver', 'jdbc:mysql://127.0.0.1:3306/jeewx-boot?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8', 'root', 'root', 'jeecg', TO_DATE('2020-11-05 16:07:15', 'SYYYY-MM-DD HH24:MI:SS'), NULL, TO_DATE('2020-11-05 16:07:15', 'SYYYY-MM-DD HH24:MI:SS'), '0', NULL, 'report');
INSERT INTO "JEECGBOOT"."JIMU_REPORT_DATA_SOURCE" VALUES ('26d21fe4f27920d2f56abc8d90a8e527', 'oracle', '1308645288868712448', NULL, NULL, 'ORACLE', 'oracle.jdbc.OracleDriver', 'jdbc:oracle:thin:@192.168.1.199:1521:helowin', 'jeecgbootbpm', 'jeecg196283', 'admin', TO_DATE('2021-01-05 19:26:24', 'SYYYY-MM-DD HH24:MI:SS'), NULL, TO_DATE('2021-01-05 19:26:24', 'SYYYY-MM-DD HH24:MI:SS'), '0', NULL, 'report');
INSERT INTO "JEECGBOOT"."JIMU_REPORT_DATA_SOURCE" VALUES ('8f90daf47d15d35ca6cf420748b8b9ba', 'localhost', '1316944968992034816', NULL, NULL, 'MYSQL5.7', 'com.mysql.cj.jdbc.Driver', 'jdbc:mysql://127.0.0.1:3306/jeecg-boot?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8', 'root', 'root', 'admin', TO_DATE('2021-01-13 14:34:00', 'SYYYY-MM-DD HH24:MI:SS'), NULL, TO_DATE('2021-01-13 14:34:00', 'SYYYY-MM-DD HH24:MI:SS'), '0', NULL, 'report');
-- ----------------------------
-- Table structure for JIMU_REPORT_DB

View File

@ -12,7 +12,7 @@
Target Server Version : 15004188
File Encoding : 65001
Date: 07/03/2023 11:19:06
Date: 13/03/2023 10:11:30
*/
@ -2492,7 +2492,8 @@ CREATE TABLE [dbo].[jimu_report_data_source] (
[update_by] nvarchar(50) COLLATE Chinese_PRC_CI_AS NULL,
[update_time] datetime2(7) NULL,
[connect_times] int NULL,
[tenant_id] nvarchar(10) COLLATE Chinese_PRC_CI_AS NULL
[tenant_id] nvarchar(10) COLLATE Chinese_PRC_CI_AS NULL,
[type] nvarchar(10) COLLATE Chinese_PRC_CI_AS NULL
)
GO
@ -2604,17 +2605,24 @@ EXEC sp_addextendedproperty
'COLUMN', N'tenant_id'
GO
EXEC sp_addextendedproperty
'MS_Description', N'类型(report:报表;drag:仪表盘)',
'SCHEMA', N'dbo',
'TABLE', N'jimu_report_data_source',
'COLUMN', N'type'
GO
-- ----------------------------
-- Records of jimu_report_data_source
-- ----------------------------
INSERT INTO [dbo].[jimu_report_data_source] ([id], [name], [report_id], [code], [remark], [db_type], [db_driver], [db_url], [db_username], [db_password], [create_by], [create_time], [update_by], [update_time], [connect_times], [tenant_id]) VALUES (N'1324261983692902402', N'jeewx', N'1324261770294071296', N'', NULL, N'MYSQL', N'com.mysql.jdbc.Driver', N'jdbc:mysql://127.0.0.1:3306/jeewx-boot?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8', N'root', N'root', N'jeecg', N'2020-11-05 16:07:15.0000000', NULL, N'2020-11-05 16:07:15.0000000', N'0', NULL)
INSERT INTO [dbo].[jimu_report_data_source] ([id], [name], [report_id], [code], [remark], [db_type], [db_driver], [db_url], [db_username], [db_password], [create_by], [create_time], [update_by], [update_time], [connect_times], [tenant_id], [type]) VALUES (N'1324261983692902402', N'jeewx', N'1324261770294071296', N'', NULL, N'MYSQL', N'com.mysql.jdbc.Driver', N'jdbc:mysql://127.0.0.1:3306/jeewx-boot?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8', N'root', N'root', N'jeecg', N'2020-11-05 16:07:15.0000000', NULL, N'2020-11-05 16:07:15.0000000', N'0', NULL, N'report')
GO
INSERT INTO [dbo].[jimu_report_data_source] ([id], [name], [report_id], [code], [remark], [db_type], [db_driver], [db_url], [db_username], [db_password], [create_by], [create_time], [update_by], [update_time], [connect_times], [tenant_id]) VALUES (N'26d21fe4f27920d2f56abc8d90a8e527', N'oracle', N'1308645288868712448', N'', NULL, N'ORACLE', N'oracle.jdbc.OracleDriver', N'jdbc:oracle:thin:@192.168.1.199:1521:helowin', N'jeecgbootbpm', N'jeecg196283', N'admin', N'2021-01-05 19:26:24.0000000', NULL, N'2021-01-05 19:26:24.0000000', N'0', NULL)
INSERT INTO [dbo].[jimu_report_data_source] ([id], [name], [report_id], [code], [remark], [db_type], [db_driver], [db_url], [db_username], [db_password], [create_by], [create_time], [update_by], [update_time], [connect_times], [tenant_id], [type]) VALUES (N'26d21fe4f27920d2f56abc8d90a8e527', N'oracle', N'1308645288868712448', N'', NULL, N'ORACLE', N'oracle.jdbc.OracleDriver', N'jdbc:oracle:thin:@192.168.1.199:1521:helowin', N'jeecgbootbpm', N'jeecg196283', N'admin', N'2021-01-05 19:26:24.0000000', NULL, N'2021-01-05 19:26:24.0000000', N'0', NULL, N'report')
GO
INSERT INTO [dbo].[jimu_report_data_source] ([id], [name], [report_id], [code], [remark], [db_type], [db_driver], [db_url], [db_username], [db_password], [create_by], [create_time], [update_by], [update_time], [connect_times], [tenant_id]) VALUES (N'8f90daf47d15d35ca6cf420748b8b9ba', N'localhost', N'1316944968992034816', N'', NULL, N'MYSQL5.7', N'com.mysql.cj.jdbc.Driver', N'jdbc:mysql://127.0.0.1:3306/jeecg-boot?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8', N'root', N'root', N'admin', N'2021-01-13 14:34:00.0000000', NULL, N'2021-01-13 14:34:00.0000000', N'0', NULL)
INSERT INTO [dbo].[jimu_report_data_source] ([id], [name], [report_id], [code], [remark], [db_type], [db_driver], [db_url], [db_username], [db_password], [create_by], [create_time], [update_by], [update_time], [connect_times], [tenant_id], [type]) VALUES (N'8f90daf47d15d35ca6cf420748b8b9ba', N'localhost', N'1316944968992034816', N'', NULL, N'MYSQL5.7', N'com.mysql.cj.jdbc.Driver', N'jdbc:mysql://127.0.0.1:3306/jeecg-boot?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8', N'root', N'root', N'admin', N'2021-01-13 14:34:00.0000000', NULL, N'2021-01-13 14:34:00.0000000', N'0', NULL, N'report')
GO

View File

@ -4,7 +4,7 @@
<parent>
<groupId>org.jeecgframework.boot</groupId>
<artifactId>jeecg-boot-parent</artifactId>
<version>3.5.0</version>
<version>3.5.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>jeecg-boot-base-core</artifactId>
@ -186,7 +186,7 @@
</dependency>
<!-- 代码生成器 -->
<!-- 如下载失败,请参考此文档 http://doc.jeecg.com/2043876 -->
<!-- 如下载失败,请参考此文档 https://help.jeecg.com/java/setup/maven.html -->
<dependency>
<groupId>org.jeecgframework.boot</groupId>
<artifactId>codegenerate</artifactId>

View File

@ -78,7 +78,7 @@ public interface CommonConstant {
/** 登录用户Shiro权限缓存KEY前缀 */
public static String PREFIX_USER_SHIRO_CACHE = "shiro:cache:org.jeecg.config.shiro.ShiroRealm.authorizationCache:";
/** 登录用户Token令牌缓存KEY前缀 */
String PREFIX_USER_TOKEN = "prefix_user_token_";
String PREFIX_USER_TOKEN = "prefix_user_token:";
// /** Token缓存时间3600秒即一小时 */
// int TOKEN_EXPIRE_TIME = 3600;

View File

@ -7,6 +7,7 @@ import org.apache.commons.lang3.StringUtils;
import org.jeecg.common.util.RestUtil;
import org.jeecg.common.util.oConvertUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.HttpStatus;
@ -22,6 +23,7 @@ import java.util.*;
*/
@Slf4j
@Component
@ConditionalOnProperty(prefix = "jeecg.elasticsearch", name = "cluster-nodes")
public class JeecgElasticsearchTemplate {
/** es服务地址 */
private String baseUrl;

View File

@ -11,6 +11,7 @@ import org.jeecg.common.api.vo.Result;
import org.jeecg.common.system.query.QueryGenerator;
import org.jeecg.common.system.vo.LoginUser;
import org.jeecg.common.util.oConvertUtils;
import org.jeecg.config.JeecgBaseConfig;
import org.jeecgframework.poi.excel.ExcelImportUtil;
import org.jeecgframework.poi.excel.def.NormalExcelConstants;
import org.jeecgframework.poi.excel.entity.ExportParams;
@ -23,6 +24,7 @@ import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.servlet.ModelAndView;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@ -40,9 +42,9 @@ public class JeecgController<T, S extends IService<T>> {
/**issues/2933 JeecgController注入service时改用protected修饰能避免重复引用service*/
@Autowired
protected S service;
@Value("${jeecg.path.upload}")
private String upLoadPath;
@Resource
private JeecgBaseConfig jeecgBaseConfig;
/**
* 导出excel
*
@ -69,7 +71,7 @@ public class JeecgController<T, S extends IService<T>> {
mv.addObject(NormalExcelConstants.CLASS, clazz);
//update-begin--Author:liusq Date:20210126 for图片导出报错ImageBasePath未设置--------------------
ExportParams exportParams=new ExportParams(title + "报表", "导出人:" + sysUser.getRealname(), title);
exportParams.setImageBasePath(upLoadPath);
exportParams.setImageBasePath(jeecgBaseConfig.getPath().getUpload());
//update-end--Author:liusq Date:20210126 for图片导出报错ImageBasePath未设置----------------------
mv.addObject(NormalExcelConstants.PARAMS,exportParams);
mv.addObject(NormalExcelConstants.DATA_LIST, exportList);
@ -108,7 +110,7 @@ public class JeecgController<T, S extends IService<T>> {
IPage<T> pageList = service.page(page, queryWrapper);
List<T> exportList = pageList.getRecords();
Map<String, Object> map = new HashMap<>(5);
ExportParams exportParams=new ExportParams(title + "报表", "导出人:" + sysUser.getRealname(), title+i,upLoadPath);
ExportParams exportParams=new ExportParams(title + "报表", "导出人:" + sysUser.getRealname(), title+i,jeecgBaseConfig.getPath().getUpload());
exportParams.setType(ExcelType.XSSF);
//map.put("title",exportParams);
//表格Title

View File

@ -36,8 +36,8 @@ import org.jeecg.common.util.oConvertUtils;
**/
public class JwtUtil {
/**Token有效期为1小时Token在reids中缓存时间为两倍*/
public static final long EXPIRE_TIME = 60 * 60 * 1000;
/**Token有效期为24小时Token在reids中缓存时间乘以2*/
public static final long EXPIRE_TIME = 12 * 60 * 60 * 1000;
static final String WELL_NUMBER = SymbolConstant.WELL_NUMBER + SymbolConstant.LEFT_CURLY_BRACKET;
/**

View File

@ -40,7 +40,7 @@ public class ResourceUtil {
* 所有枚举java类
*/
private final static String CLASS_ENMU_PATTERN="/**/*Enum.class";
private final static String CLASS_ENUM_PATTERN="/**/*Enum.class";
/**
* 包路径 org.jeecg
@ -61,7 +61,7 @@ public class ResourceUtil {
return enumDictData;
}
ResourcePatternResolver resourcePatternResolver = new PathMatchingResourcePatternResolver();
String pattern = ResourcePatternResolver.CLASSPATH_ALL_URL_PREFIX + ClassUtils.convertClassNameToResourcePath(BASE_PACKAGE) + CLASS_ENMU_PATTERN;
String pattern = ResourcePatternResolver.CLASSPATH_ALL_URL_PREFIX + ClassUtils.convertClassNameToResourcePath(BASE_PACKAGE) + CLASS_ENUM_PATTERN;
try {
Resource[] resources = resourcePatternResolver.getResources(pattern);
MetadataReaderFactory readerFactory = new CachingMetadataReaderFactory(resourcePatternResolver);

View File

@ -62,6 +62,8 @@ public class DySmsHelper {
//update-begin-authortaoyan date:20200811 for:配置类数据获取
StaticConfig staticConfig = SpringContextUtils.getBean(StaticConfig.class);
logger.info("阿里大鱼短信秘钥 accessKeyId" + staticConfig.getAccessKeyId());
logger.info("阿里大鱼短信秘钥 accessKeySecret"+ staticConfig.getAccessKeySecret());
setAccessKeyId(staticConfig.getAccessKeyId());
setAccessKeySecret(staticConfig.getAccessKeySecret());
//update-end-authortaoyan date:20200811 for:配置类数据获取

View File

@ -21,7 +21,7 @@ public class PmsUtil {
private static String uploadPath;
@Value("${jeecg.path.upload}")
@Value("${jeecg.path.upload:}")
public void setUploadPath(String uploadPath) {
PmsUtil.uploadPath = uploadPath;
}

View File

@ -30,6 +30,11 @@ public class SqlInjectionUtil {
/**正则 show tables*/
private final static String SHOW_TABLES = "show\\s+tables";
/**
* sleep函数
*/
private final static Pattern FUN_SLEEP = Pattern.compile("sleep\\([\\d\\.]*\\)");
/**
* sql注释的正则
*/
@ -282,5 +287,13 @@ public class SqlInjectionUtil {
log.error(error);
throw new RuntimeException(error);
}
// issues/4737 sys/duplicate/check SQL注入 #4737
Matcher sleepMatcher = FUN_SLEEP.matcher(str);
if(sleepMatcher.find()){
String error = "请注意值可能存在SQL注入风险---> sleep";
log.error(error);
throw new RuntimeException(error);
}
}
}

View File

@ -1,19 +1,19 @@
package org.jeecg.common.util.filter;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.web.multipart.MultipartFile;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Iterator;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* @Description: 校验上传文件敏感后缀
* @author: lsq
* @date: 2021年08月09日 15:29
*/
@Slf4j
public class FileTypeFilter {
/**文件后缀*/
@ -112,8 +112,9 @@ public class FileTypeFilter {
*/
private static String getFileType(MultipartFile file) throws Exception {
//update-begin-author:liusq date:20230404 for: [issue/4672]方法造成的文件被占用注释掉此方法tomcat就能自动清理掉临时文件
String fileExtendName = null;
InputStream is;
InputStream is = null;
try {
//is = new FileInputStream(file);
is = file.getInputStream();
@ -130,16 +131,29 @@ public class FileTypeFilter {
break;
}
}
log.info("-----获取到的指定文件类型------"+fileExtendName);
// 如果不是上述类型,则判断扩展名
if (StringUtils.isBlank(fileExtendName)) {
String fileName = file.getOriginalFilename();
// 如果无扩展名,则直接返回空串
if (-1 == fileName.indexOf(".")) {
return "";
}
// 如果有扩展名,则返回扩展名
return getFileTypeBySuffix(fileName);
}
log.info("-----最終的文件类型------"+fileExtendName);
is.close();
return fileExtendName;
} catch (Exception exception) {
throw new Exception(exception.getMessage(), exception);
} catch (Exception e) {
log.error(e.getMessage(), e);
return "";
}finally {
if (is != null) {
is.close();
}
}
//update-end-author:liusq date:20230404 for: [issue/4672]方法造成的文件被占用注释掉此方法tomcat就能自动清理掉临时文件
}
/**

View File

@ -1,5 +1,6 @@
package org.jeecg.common.util;
import com.alibaba.fastjson.JSONArray;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.IOUtils;
import org.jeecg.common.constant.CommonConstant;
@ -86,7 +87,7 @@ public class oConvertUtils {
}
public static int getInt(String s, int defval) {
if (s == null || s == "") {
if (s == null || "".equals(s)) {
return (defval);
}
try {
@ -97,7 +98,7 @@ public class oConvertUtils {
}
public static int getInt(String s) {
if (s == null || s == "") {
if (s == null || "".equals(s)) {
return 0;
}
try {
@ -108,7 +109,7 @@ public class oConvertUtils {
}
public static int getInt(String s, Integer df) {
if (s == null || s == "") {
if (s == null || "".equals(s)) {
return df;
}
try {
@ -131,7 +132,7 @@ public class oConvertUtils {
}
public static double getDouble(String s, double defval) {
if (s == null || s == "") {
if (s == null || "".equals(s)) {
return (defval);
}
try {
@ -353,23 +354,63 @@ public class oConvertUtils {
/**
* 判断元素是否在数组内
*
* @param substring
* @param source
* @param child
* @param all
* @return
*/
public static boolean isIn(String substring, String[] source) {
if (source == null || source.length == 0) {
public static boolean isIn(String child, String[] all) {
if (all == null || all.length == 0) {
return false;
}
for (int i = 0; i < source.length; i++) {
String aSource = source[i];
if (aSource.equals(substring)) {
for (int i = 0; i < all.length; i++) {
String aSource = all[i];
if (aSource.equals(child)) {
return true;
}
}
return false;
}
/**
* 判断元素是否在数组内
*
* @param childArray
* @param all
* @return
*/
public static boolean isArrayIn(String[] childArray, String[] all) {
if (all == null || all.length == 0) {
return false;
}
for (String v : childArray) {
if (!isIn(v, all)) {
return false;
}
}
return true;
}
/**
* 判断元素是否在数组内
*
* @param childArray
* @param all
* @return
*/
public static boolean isJsonArrayIn(JSONArray childArray, String[] all) {
if (all == null || all.length == 0) {
return false;
}
String[] childs = childArray.toArray(new String[]{});
for (String v : childs) {
if (!isIn(v, all)) {
return false;
}
}
return true;
}
/**
* 获取Map对象
*/
@ -649,6 +690,95 @@ public class oConvertUtils {
return (list == null || list.size() == 0);
}
/**
* 判断旧值与新值 是否相等
*
* @param oldVal
* @param newVal
* @return
*/
public static boolean isEqual(Object oldVal, Object newVal) {
if (oldVal != null && newVal != null) {
if (isArray(oldVal)) {
return equalityOfArrays((Object[]) oldVal, (Object[]) newVal);
}else if(oldVal instanceof JSONArray){
return equalityOfJSONArray((JSONArray) oldVal, (JSONArray) newVal);
}
return oldVal.equals(newVal);
} else {
if (oldVal == null && newVal == null) {
return true;
} else {
return false;
}
}
}
/**
* 方法描述 判断一个对象是否是一个数组
*
* @param obj
* @return
* @author yaomy
* @date 2018年2月5日 下午5:03:00
*/
public static boolean isArray(Object obj) {
if (obj == null) {
return false;
}
return obj.getClass().isArray();
}
/**
* 判断两个数组是否相等(数组元素不分顺序)
*
* @param oldVal
* @param newVal
* @return
*/
public static boolean equalityOfJSONArray(JSONArray oldVal, JSONArray newVal) {
if (oldVal != null && newVal != null) {
Object[] oldValArray = oldVal.toArray();
Object[] newValArray = newVal.toArray();
return equalityOfArrays(oldValArray,newValArray);
} else {
if (oldVal == null && newVal == null) {
return true;
} else {
return false;
}
}
}
/**
* 判断两个数组是否相等(数组元素不分顺序)
*
* @param oldVal
* @param newVal
* @return
*/
public static boolean equalityOfArrays(Object[] oldVal, Object newVal[]) {
if (oldVal != null && newVal != null) {
Arrays.sort(oldVal);
Arrays.sort(newVal);
return Arrays.equals(oldVal, newVal);
} else {
if (oldVal == null && newVal == null) {
return true;
} else {
return false;
}
}
}
// public static void main(String[] args) {
//// String[] a = new String[]{"1", "2"};
//// String[] b = new String[]{"2", "1"};
// Integer a = null;
// Integer b = 1;
// System.out.println(oConvertUtils.isEqual(a, b));
// }
/**
* 判断 list 是否不为空
*

View File

@ -3,6 +3,8 @@ package org.jeecg.common.util.security;
import lombok.extern.slf4j.Slf4j;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* 查询表/字段 黑名单处理
@ -21,6 +23,11 @@ public abstract class AbstractQueryBlackListHandler {
*/
public static Map<String, String> ruleMap = new HashMap<>();
/**
* 以下字符不能出现在表名中或是字段名中
*/
public static final Pattern ILLEGAL_NAME_REG = Pattern.compile("[-]{2,}");
static {
ruleMap.put("sys_user", "password,salt");
}
@ -53,7 +60,10 @@ public abstract class AbstractQueryBlackListHandler {
return true;
}
log.info("--获取sql信息--", list.toString());
boolean flag = true;
boolean flag = checkTableAndFieldsName(list);
if(flag == false){
return false;
}
for (QueryTable table : list) {
String name = table.getName();
String fieldString = ruleMap.get(name);
@ -73,6 +83,46 @@ public abstract class AbstractQueryBlackListHandler {
return flag;
}
/**
* 校验表名和字段名是否有效或是是否会带些特殊的字符串进行sql注入
* issues/4983 SQL Injection in 3.5.1 #4983
* @return
*/
private boolean checkTableAndFieldsName(List<QueryTable> list){
boolean flag = true;
for(QueryTable queryTable: list){
String tableName = queryTable.getName();
if(hasSpecialString(tableName)){
flag = false;
log.warn("sql黑名单校验表名【"+tableName+"】包含特殊字符");
break;
}
Set<String> fields = queryTable.getFields();
for(String name: fields){
if(hasSpecialString(name)){
flag = false;
log.warn("sql黑名单校验字段名【"+name+"】包含特殊字符");
break;
}
}
}
return flag;
}
/**
* 是否包含特殊的字符串
* @param name
* @return
*/
private boolean hasSpecialString(String name){
Matcher m = ILLEGAL_NAME_REG.matcher(name);
if (m.find()) {
return true;
}
return false;
}
/**
* 查询的表的信息
*/

View File

@ -1,6 +1,7 @@
package org.jeecg.config;
import org.jeecg.config.vo.DomainUrl;
import org.jeecg.config.vo.Elasticsearch;
import org.jeecg.config.vo.Path;
import org.jeecg.config.vo.Shiro;
import org.springframework.boot.context.properties.ConfigurationProperties;
@ -52,6 +53,18 @@ public class JeecgBaseConfig {
* 文件预览
*/
private String fileViewDomain;
/**
* ES配置
*/
private Elasticsearch elasticsearch;
public Elasticsearch getElasticsearch() {
return elasticsearch;
}
public void setElasticsearch(Elasticsearch elasticsearch) {
this.elasticsearch = elasticsearch;
}
public Boolean getSafeMode() {
return safeMode;

View File

@ -12,13 +12,13 @@ import org.springframework.stereotype.Component;
@Data
public class StaticConfig {
@Value("${jeecg.oss.accessKey}")
@Value("${jeecg.oss.accessKey:}")
private String accessKeyId;
@Value("${jeecg.oss.secretKey}")
@Value("${jeecg.oss.secretKey:}")
private String accessKeySecret;
@Value(value = "${spring.mail.username}")
@Value(value = "${spring.mail.username:}")
private String emailFrom;
// /**

View File

@ -25,6 +25,7 @@ import org.springframework.http.converter.json.MappingJackson2HttpMessageConvert
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@ -59,12 +60,13 @@ public class WebMvcConfiguration implements WebMvcConfigurer {
*/
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/**")
//update-begin-author:taoyan date:20211116 for: jeecg.path.webapp配置无效 #3126
.addResourceLocations("file:" + jeecgBaseConfig.getPath().getUpload() + "//")
.addResourceLocations("file:" + jeecgBaseConfig.getPath().getWebapp() + "//")
//update-end-author:taoyan date:20211116 for: jeecg.path.webapp配置无效 #3126
.addResourceLocations(staticLocations.split(","));
ResourceHandlerRegistration resourceHandlerRegistration = registry.addResourceHandler("/**");
if (jeecgBaseConfig.getPath() != null && jeecgBaseConfig.getPath().getUpload() != null) {
resourceHandlerRegistration
.addResourceLocations("file:" + jeecgBaseConfig.getPath().getUpload() + "//")
.addResourceLocations("file:" + jeecgBaseConfig.getPath().getWebapp() + "//");
}
resourceHandlerRegistration.addResourceLocations(staticLocations.split(","));
}
/**

View File

@ -54,13 +54,13 @@ public class MybatisPlusSaasConfig {
//1.需要租户隔离的表请在此配置
if (MybatisPlusSaasConfig.OPEN_SYSTEM_TENANT_CONTROL) {
//a.系统管理表
TENANT_TABLE.add("sys_role");
TENANT_TABLE.add("sys_user_role");
//TENANT_TABLE.add("sys_role");
//TENANT_TABLE.add("sys_user_role");
TENANT_TABLE.add("sys_depart");
TENANT_TABLE.add("sys_category");
TENANT_TABLE.add("sys_data_source");
TENANT_TABLE.add("sys_position");
TENANT_TABLE.add("sys_announcement");
//TENANT_TABLE.add("sys_announcement");
}
//2.示例测试

View File

@ -5,6 +5,7 @@ import org.jeecg.common.constant.CommonConstant;
import org.jeecg.common.constant.SymbolConstant;
import org.jeecg.common.util.MinioUtil;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@ -14,6 +15,7 @@ import org.springframework.context.annotation.Configuration;
*/
@Slf4j
@Configuration
@ConditionalOnProperty(prefix = "jeecg.minio", name = "minio_url")
public class MinioConfig {
@Value(value = "${jeecg.minio.minio_url}")
private String minioUrl;

View File

@ -2,6 +2,7 @@ package org.jeecg.config.oss;
import org.jeecg.common.util.oss.OssBootUtil;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@ -10,6 +11,7 @@ import org.springframework.context.annotation.Configuration;
* @author: jeecg-boot
*/
@Configuration
@ConditionalOnProperty(prefix = "jeecg.oss", name = "endpoint")
public class OssConfiguration {
@Value("${jeecg.oss.endpoint}")

View File

@ -20,7 +20,6 @@ import org.jeecg.config.shiro.filters.CustomShiroFilterFactoryBean;
import org.jeecg.config.shiro.filters.JwtFilter;
import org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.DependsOn;
@ -146,6 +145,11 @@ public class ShiroConfig {
//测试模块排除
filterChainDefinitionMap.put("/test/seata/**", "anon");
// update-begin--author:liusq Date:20230522 for[issues/4829]访问不存在的url时会提示Token失效请重新登录呢
//错误路径排除
filterChainDefinitionMap.put("/error", "anon");
// update-end--author:liusq Date:20230522 for[issues/4829]访问不存在的url时会提示Token失效请重新登录呢
// 添加自己的过滤器并且取名为jwt
Map<String, Filter> filterMap = new HashMap<String, Filter>(1);
//如果cloudServer为空 则说明是单体 需要加载跨域配置【微服务跨域切换】

View File

@ -11,6 +11,7 @@ import org.apache.shiro.realm.AuthorizingRealm;
import org.apache.shiro.subject.PrincipalCollection;
import org.jeecg.common.api.CommonAPI;
import org.jeecg.common.config.TenantContext;
import org.jeecg.common.constant.CacheConstant;
import org.jeecg.common.constant.CommonConstant;
import org.jeecg.common.system.util.JwtUtil;
import org.jeecg.common.system.vo.LoginUser;
@ -148,9 +149,27 @@ public class ShiroRealm extends AuthorizingRealm {
//update-begin-author:taoyan date:20211227 for: /issues/I4O14W 用户租户信息变更判断漏洞
String[] arr = userTenantIds.split(",");
if(!oConvertUtils.isIn(contextTenantId, arr)){
log.info("租户异常——登录租户:" + contextTenantId);
log.info("租户异常——用户拥有租户组:" + userTenantIds);
throw new AuthenticationException("登录租户授权变更,请重新登陆!");
boolean isAuthorization = false;
//========================================================================
// 查询用户信息(如果租户不匹配从数据库中重新查询一次用户信息)
String loginUserKey = CacheConstant.SYS_USERS_CACHE + "::" + username;
redisUtil.del(loginUserKey);
LoginUser loginUserFromDb = commonApi.getUserByName(username);
if (oConvertUtils.isNotEmpty(loginUserFromDb.getRelTenantIds())) {
String[] newArray = loginUserFromDb.getRelTenantIds().split(",");
if (oConvertUtils.isIn(contextTenantId, newArray)) {
isAuthorization = true;
}
}
//========================================================================
//*********************************************
if(!isAuthorization){
log.info("租户异常——登录租户:" + contextTenantId);
log.info("租户异常——用户拥有租户组:" + userTenantIds);
throw new AuthenticationException("登录租户授权变更,请重新登陆!");
}
//*********************************************
}
//update-end-author:taoyan date:20211227 for: /issues/I4O14W 用户租户信息变更判断漏洞
}

View File

@ -0,0 +1,26 @@
package org.jeecg.config.vo;
/**
* @author: scott
* @date: 2023年05月10日 16:06
*/
public class Elasticsearch {
private String clusterNodes;
private boolean checkEnabled;
public String getClusterNodes() {
return clusterNodes;
}
public void setClusterNodes(String clusterNodes) {
this.clusterNodes = clusterNodes;
}
public boolean isCheckEnabled() {
return checkEnabled;
}
public void setCheckEnabled(boolean checkEnabled) {
this.checkEnabled = checkEnabled;
}
}

View File

@ -5,7 +5,7 @@
<parent>
<artifactId>jeecg-boot-parent</artifactId>
<groupId>org.jeecgframework.boot</groupId>
<version>3.5.0</version>
<version>3.5.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@ -44,7 +44,7 @@
//// /**
//// * 测试调用 erp 微服务接口
//// * 【如何测试通过archetype生成微服务模块快速集成测试】
//// * http://doc.jeecg.com/2194069
//// * https://help.jeecg.com/java/springcloud/archetype.html
//// * @return
//// */
//// @GetMapping("/callErp")

View File

@ -5,7 +5,7 @@
<parent>
<artifactId>jeecg-system-api</artifactId>
<groupId>org.jeecgframework.boot</groupId>
<version>3.5.0</version>
<version>3.5.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@ -5,7 +5,7 @@
<parent>
<artifactId>jeecg-system-api</artifactId>
<groupId>org.jeecgframework.boot</groupId>
<version>3.5.0</version>
<version>3.5.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@ -5,7 +5,7 @@
<parent>
<artifactId>jeecg-module-system</artifactId>
<groupId>org.jeecgframework.boot</groupId>
<version>3.5.0</version>
<version>3.5.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@ -4,7 +4,7 @@
<parent>
<groupId>org.jeecgframework.boot</groupId>
<artifactId>jeecg-module-system</artifactId>
<version>3.5.0</version>
<version>3.5.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@ -17,7 +17,6 @@ import java.nio.charset.StandardCharsets;
* 自动初始化代码生成器模板
* <p>
* 解决JAR发布需要手工配置代码生成器模板问题
* http://doc.jeecg.com/2043922
* @author zhang
*/
@Slf4j

View File

@ -58,6 +58,7 @@ public class EmailSendMsgHandle implements ISendMsgHandle {
//update-begin-authortaoyan date:20200811 for:配置类数据获取
if(oConvertUtils.isEmpty(emailFrom)){
StaticConfig staticConfig = SpringContextUtils.getBean(StaticConfig.class);
log.info("邮件配置 emailFrom" + emailFrom);
setEmailFrom(staticConfig.getEmailFrom());
}
//update-end-authortaoyan date:20200811 for:配置类数据获取

View File

@ -9,7 +9,6 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.extern.slf4j.Slf4j;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.apache.shiro.authz.annotation.RequiresRoles;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.config.TenantContext;
import org.jeecg.common.constant.CacheConstant;
@ -19,10 +18,7 @@ import org.jeecg.common.system.query.QueryGenerator;
import org.jeecg.common.system.vo.DictModel;
import org.jeecg.common.system.vo.DictQuery;
import org.jeecg.common.system.vo.LoginUser;
import org.jeecg.common.util.ImportExcelUtil;
import org.jeecg.common.util.SqlInjectionUtil;
import org.jeecg.common.util.TokenUtils;
import org.jeecg.common.util.oConvertUtils;
import org.jeecg.common.util.*;
import org.jeecg.config.mybatis.MybatisPlusSaasConfig;
import org.jeecg.modules.system.entity.SysDict;
import org.jeecg.modules.system.entity.SysDictItem;
@ -50,6 +46,8 @@ import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.util.*;
/**
@ -73,6 +71,8 @@ public class SysDictController {
public RedisTemplate<String, Object> redisTemplate;
@Autowired
private DictQueryBlackListHandler dictQueryBlackListHandler;
@Autowired
private RedisUtil redisUtil;
@RequestMapping(value = "/list", method = RequestMethod.GET)
public Result<IPage<SysDict>> queryPageList(SysDict sysDict,@RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
@ -202,9 +202,20 @@ public class SysDictController {
*/
@RequestMapping(value = "/loadDict/{dictCode}", method = RequestMethod.GET)
public Result<List<DictModel>> loadDict(@PathVariable("dictCode") String dictCode,
@RequestParam(name="keyword",required = false) String keyword,
@RequestParam(value = "sign",required = false) String sign,
@RequestParam(value = "pageSize", required = false) Integer pageSize) {
@RequestParam(name="keyword",required = false) String keyword,
@RequestParam(value = "sign",required = false) String sign,
@RequestParam(value = "pageSize", required = false) Integer pageSize) {
//update-begin-author:taoyan date:2023-5-22 for: /issues/4905 因为中括号(%5)的问题导致的 表单生成器字段配置时,选择关联字段,在进行高级配置时,无法加载数据库列表,提示 Sgin签名校验错误 #4905 RouteToRequestUrlFilter
if(keyword!=null && keyword.indexOf("%5")>=0){
try {
keyword = URLDecoder.decode(keyword, "UTF-8");
} catch (UnsupportedEncodingException e) {
log.error("下拉搜索关键字解码失败", e);
}
}
//update-end-author:taoyan date:2023-5-22 for: /issues/4905 因为中括号(%5)的问题导致的 表单生成器字段配置时,选择关联字段,在进行高级配置时,无法加载数据库列表,提示 Sgin签名校验错误 #4905
log.info(" 加载字典表数据,加载关键字: "+ keyword);
Result<List<DictModel>> result = new Result<List<DictModel>>();
//update-begin-author:taoyan date:20220317 for: VUEN-222【安全机制】字典接口、online报表、online图表等接口加一些安全机制
@ -459,22 +470,33 @@ public class SysDictController {
public Result<?> refleshCache() {
Result<?> result = new Result<SysDict>();
//清空字典缓存
Set keys = redisTemplate.keys(CacheConstant.SYS_DICT_CACHE + "*");
Set keys7 = redisTemplate.keys(CacheConstant.SYS_ENABLE_DICT_CACHE + "*");
Set keys2 = redisTemplate.keys(CacheConstant.SYS_DICT_TABLE_CACHE + "*");
Set keys21 = redisTemplate.keys(CacheConstant.SYS_DICT_TABLE_BY_KEYS_CACHE + "*");
Set keys3 = redisTemplate.keys(CacheConstant.SYS_DEPARTS_CACHE + "*");
Set keys4 = redisTemplate.keys(CacheConstant.SYS_DEPART_IDS_CACHE + "*");
Set keys5 = redisTemplate.keys( "jmreport:cache:dict*");
Set keys6 = redisTemplate.keys( "jmreport:cache:dictTable*");
redisTemplate.delete(keys);
redisTemplate.delete(keys2);
redisTemplate.delete(keys21);
redisTemplate.delete(keys3);
redisTemplate.delete(keys4);
redisTemplate.delete(keys5);
redisTemplate.delete(keys6);
redisTemplate.delete(keys7);
// Set keys = redisTemplate.keys(CacheConstant.SYS_DICT_CACHE + "*");
// Set keys7 = redisTemplate.keys(CacheConstant.SYS_ENABLE_DICT_CACHE + "*");
// Set keys2 = redisTemplate.keys(CacheConstant.SYS_DICT_TABLE_CACHE + "*");
// Set keys21 = redisTemplate.keys(CacheConstant.SYS_DICT_TABLE_BY_KEYS_CACHE + "*");
// Set keys3 = redisTemplate.keys(CacheConstant.SYS_DEPARTS_CACHE + "*");
// Set keys4 = redisTemplate.keys(CacheConstant.SYS_DEPART_IDS_CACHE + "*");
// Set keys5 = redisTemplate.keys( "jmreport:cache:dict*");
// Set keys6 = redisTemplate.keys( "jmreport:cache:dictTable*");
// redisTemplate.delete(keys);
// redisTemplate.delete(keys2);
// redisTemplate.delete(keys21);
// redisTemplate.delete(keys3);
// redisTemplate.delete(keys4);
// redisTemplate.delete(keys5);
// redisTemplate.delete(keys6);
// redisTemplate.delete(keys7);
//update-begin-author:liusq date:20230404 for: [issue/4358]springCache中的清除缓存的操作使用了“keys”
redisUtil.removeAll(CacheConstant.SYS_DICT_CACHE);
redisUtil.removeAll(CacheConstant.SYS_ENABLE_DICT_CACHE);
redisUtil.removeAll(CacheConstant.SYS_DICT_TABLE_CACHE);
redisUtil.removeAll(CacheConstant.SYS_DICT_TABLE_BY_KEYS_CACHE);
redisUtil.removeAll(CacheConstant.SYS_DEPARTS_CACHE);
redisUtil.removeAll(CacheConstant.SYS_DEPART_IDS_CACHE);
redisUtil.removeAll("jmreport:cache:dict");
redisUtil.removeAll("jmreport:cache:dictTable");
//update-end-author:liusq date:20230404 for: [issue/4358]springCache中的清除缓存的操作使用了“keys”
return result;
}

View File

@ -1,5 +1,6 @@
package org.jeecg.modules.system.controller;
import cn.hutool.core.util.RandomUtil;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
@ -19,6 +20,7 @@ import org.jeecg.common.util.oConvertUtils;
import org.jeecg.config.mybatis.MybatisPlusSaasConfig;
import org.jeecg.modules.system.entity.SysPosition;
import org.jeecg.modules.system.service.ISysPositionService;
import org.jeecg.modules.system.service.ISysUserService;
import org.jeecgframework.poi.excel.ExcelImportUtil;
import org.jeecgframework.poi.excel.def.NormalExcelConstants;
import org.jeecgframework.poi.excel.entity.ExportParams;
@ -39,6 +41,7 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* @Description: 职务表
@ -55,6 +58,9 @@ public class SysPositionController {
@Autowired
private ISysPositionService sysPositionService;
@Autowired
private ISysUserService userService;
/**
* 分页列表查询
*
@ -98,6 +104,13 @@ public class SysPositionController {
public Result<SysPosition> add(@RequestBody SysPosition sysPosition) {
Result<SysPosition> result = new Result<SysPosition>();
try {
//update-begin---author:wangshuai ---date:20230313 for【QQYUN-4558】vue3职位功能调整去掉编码和级别可以先隐藏------------
//编号是空的,不需要判断多租户隔离了
if(oConvertUtils.isEmpty(sysPosition.getCode())){
//生成职位编码10位
sysPosition.setCode(RandomUtil.randomString(10));
}
//update-end---author:wangshuai ---date:20230313 for【QQYUN-4558】vue3职位功能调整去掉编码和级别可以先隐藏-------------
sysPositionService.save(sysPosition);
result.success("添加成功!");
} catch (Exception e) {

View File

@ -12,6 +12,7 @@ import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.aspect.annotation.PermissionData;
import org.jeecg.common.config.TenantContext;
import org.jeecg.common.constant.CommonConstant;
import org.jeecg.common.constant.SymbolConstant;
import org.jeecg.common.system.query.QueryGenerator;
import org.jeecg.common.system.vo.LoginUser;
@ -19,6 +20,7 @@ import org.jeecg.common.util.PasswordUtil;
import org.jeecg.common.util.TokenUtils;
import org.jeecg.common.util.oConvertUtils;
import org.jeecg.config.mybatis.MybatisPlusSaasConfig;
import org.jeecg.modules.base.service.BaseCommonService;
import org.jeecg.modules.system.entity.*;
import org.jeecg.modules.system.service.ISysTenantPackService;
import org.jeecg.modules.system.service.ISysTenantService;
@ -55,6 +57,9 @@ public class SysTenantController {
@Autowired
private ISysTenantPackService sysTenantPackService;
@Autowired
private BaseCommonService baseCommonService;
/**
* 获取列表数据
@ -67,8 +72,8 @@ public class SysTenantController {
//@RequiresPermissions("system:tenant:list")
@PermissionData(pageComponent = "system/TenantList")
@RequestMapping(value = "/list", method = RequestMethod.GET)
public Result<IPage<SysTenant>> queryPageList(SysTenant sysTenant,@RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
@RequestParam(name="pageSize", defaultValue="10") Integer pageSize,HttpServletRequest req) {
public Result<IPage<SysTenant>> queryPageList(SysTenant sysTenant, @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
@RequestParam(name="pageSize", defaultValue="10") Integer pageSize, HttpServletRequest req) {
Result<IPage<SysTenant>> result = new Result<IPage<SysTenant>>();
//---author:zhangyafei---date:20210916-----for: 租户管理添加日期范围查询---
Date beginDate=null;
@ -104,8 +109,8 @@ public class SysTenantController {
*/
@GetMapping("/recycleBinPageList")
//@RequiresPermissions("system:tenant:recycleBinPageList")
public Result<IPage<SysTenant>> recycleBinPageList(SysTenant sysTenant,@RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
@RequestParam(name="pageSize", defaultValue="10") Integer pageSize,HttpServletRequest req){
public Result<IPage<SysTenant>> recycleBinPageList(SysTenant sysTenant, @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
@RequestParam(name="pageSize", defaultValue="10") Integer pageSize, HttpServletRequest req){
Result<IPage<SysTenant>> result = new Result<IPage<SysTenant>>();
Page<SysTenant> page = new Page<SysTenant>(pageNo, pageSize);
IPage<SysTenant> pageList = sysTenantService.getRecycleBinPageList(page, sysTenant);
@ -167,6 +172,22 @@ public class SysTenantController {
//@RequiresPermissions("system:tenant:delete")
@RequestMapping(value = "/delete", method ={RequestMethod.DELETE, RequestMethod.POST})
public Result<?> delete(@RequestParam(name="id",required=true) String id) {
//------------------------------------------------------------------
//如果是saas隔离的情况下判断当前租户id是否是当前租户下的
if (MybatisPlusSaasConfig.OPEN_SYSTEM_TENANT_CONTROL) {
//获取当前用户
LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
SysTenant sysTenant = sysTenantService.getById(id);
String username = "admin";
String createdBy = sysUser.getUsername();
if (!sysTenant.getCreateBy().equals(createdBy) && !username.equals(createdBy)) {
baseCommonService.addLog("未经授权不能删除非自己创建的租户租户ID" + id + ",操作人:" + sysUser.getUsername(), CommonConstant.LOG_TYPE_2, CommonConstant.OPERATE_TYPE_3);
return Result.error("删除租户失败,当前操作人不是租户的创建人!");
}
}
//------------------------------------------------------------------
sysTenantService.removeTenantById(id);
return Result.ok("删除成功");
}
@ -187,6 +208,22 @@ public class SysTenantController {
// 过滤掉已被引用的租户
List<Integer> idList = new ArrayList<>();
for (String id : ls) {
//------------------------------------------------------------------
//如果是saas隔离的情况下判断当前租户id是否是当前租户下的
if (MybatisPlusSaasConfig.OPEN_SYSTEM_TENANT_CONTROL) {
//获取当前用户
LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
SysTenant sysTenant = sysTenantService.getById(id);
String username = "admin";
String createdBy = sysUser.getUsername();
if (!sysTenant.getCreateBy().equals(createdBy) && !username.equals(createdBy)) {
baseCommonService.addLog("未经授权不能删除非自己创建的租户租户ID" + id + ",操作人:" + sysUser.getUsername(), CommonConstant.LOG_TYPE_2, CommonConstant.OPERATE_TYPE_3);
return Result.error("删除租户失败,当前操作人不是租户的创建人!");
}
}
//------------------------------------------------------------------
Long userCount = sysTenantService.countUserLinkTenant(id);
if (userCount == 0) {
idList.add(Integer.parseInt(id));
@ -218,8 +255,10 @@ public class SysTenantController {
result.error500("参数为空!");
}
//------------------------------------------------------------------------------------------------
//是否开启系统管理模块的多租户数据隔离【SAAS多租户模式】
if(MybatisPlusSaasConfig.OPEN_SYSTEM_TENANT_CONTROL){
//获取登录用户信息
LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
//是否开启系统管理模块的多租户数据隔离【SAAS多租户模式】, admin给特权可以管理所有租户
if(MybatisPlusSaasConfig.OPEN_SYSTEM_TENANT_CONTROL && !"admin".equals(sysUser.getUsername())){
Integer loginSessionTenant = oConvertUtils.getInt(TenantContext.getTenant());
if(loginSessionTenant!=null && !loginSessionTenant.equals(Integer.valueOf(id))){
result.error500("无权限访问他人租户!");
@ -355,13 +394,13 @@ public class SysTenantController {
/**
* 邀请用户【低代码应用专用接口】
* @param ids
* @param userIds
* @param phone
* @return
*/
@PutMapping("/invitationUserJoin")
//@RequiresPermissions("system:tenant:invitation:user")
public Result<String> invitationUserJoin(@RequestParam("ids") String ids,@RequestParam("userIds") String userIds){
sysTenantService.invitationUserJoin(ids,userIds);
public Result<String> invitationUserJoin(@RequestParam("ids") String ids, @RequestParam("phone") String phone){
sysTenantService.invitationUserJoin(ids,phone);
return Result.ok("邀请用户成功");
}
@ -400,7 +439,8 @@ public class SysTenantController {
@RequestParam("tenantId") String tenantId){
Result<String> result = new Result<>();
//是否开启系统管理模块的多租户数据隔离【SAAS多租户模式】
if(MybatisPlusSaasConfig.OPEN_SYSTEM_TENANT_CONTROL){
LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
if(MybatisPlusSaasConfig.OPEN_SYSTEM_TENANT_CONTROL && !"admin".equals(sysUser.getUsername())){
Integer loginSessionTenant = oConvertUtils.getInt(TenantContext.getTenant());
if(loginSessionTenant!=null && !loginSessionTenant.equals(Integer.valueOf(tenantId))){
result.error500("无权限访问他人租户!");
@ -417,7 +457,7 @@ public class SysTenantController {
* @return
*/
@RequestMapping(value = "/editOwnTenant", method ={RequestMethod.PUT, RequestMethod.POST})
public Result<SysTenant> editOwnTenant(@RequestBody SysTenant tenant,HttpServletRequest req) {
public Result<SysTenant> editOwnTenant(@RequestBody SysTenant tenant, HttpServletRequest req) {
Result<SysTenant> result = new Result();
String tenantId = TokenUtils.getTenantIdByRequest(req);
if(!tenantId.equals(tenant.getId().toString())){
@ -556,14 +596,14 @@ public class SysTenantController {
*/
@PutMapping("/cancelTenant")
//@RequiresPermissions("system:tenant:cancelTenant")
public Result<String> cancelTenant(@RequestBody SysTenant sysTenant,HttpServletRequest request) {
public Result<String> cancelTenant(@RequestBody SysTenant sysTenant, HttpServletRequest request) {
LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
SysTenant tenant = sysTenantService.getById(sysTenant.getId());
if (null == tenant) {
return Result.error("未找到当前租户信息");
}
if (!sysUser.getUsername().equals(tenant.getCreateBy())) {
return Result.error("没有权限");
return Result.error("无权限,只能注销自己创建的租户!");
}
SysUser userById = sysUserService.getById(sysUser.getId());
String loginPassword = request.getParameter("loginPassword");
@ -638,7 +678,7 @@ public class SysTenantController {
* @return
*/
@DeleteMapping("/exitUserTenant")
public Result<String> exitUserTenant(@RequestBody SysTenant sysTenant,HttpServletRequest request){
public Result<String> exitUserTenant(@RequestBody SysTenant sysTenant, HttpServletRequest request){
LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
//验证用户是否已存在
Integer count = relationService.userTenantIzExist(sysUser.getId(),sysTenant.getId());
@ -797,4 +837,24 @@ public class SysTenantController {
TenantDepartAuthInfo info = sysTenantService.getTenantDepartAuthInfo(Integer.parseInt(id));
return Result.ok(info);
}
/**
* 获取产品包下的用户列表(分页)
* @param tenantId
* @param packId
* @param status
* @param pageNo
* @param pageSize
* @return
*/
@GetMapping("/queryTenantPackUserList")
public Result<IPage<TenantPackUser>> queryTenantPackUserList(@RequestParam("tenantId") String tenantId,
@RequestParam("packId") String packId,
@RequestParam("status") Integer status,
@RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
@RequestParam(name="pageSize", defaultValue="10") Integer pageSize){
Page<TenantPackUser> page = new Page<>(pageNo,pageSize);
IPage<TenantPackUser> pageList = sysTenantService.queryTenantPackUserList(tenantId,packId,status,page);
return Result.ok(pageList);
}
}

View File

@ -167,7 +167,7 @@ public class SysUserController {
user.setOrgCode(null);
// 保存用户走一个service 保证事务
//获取租户ids
String relTenantIds = jsonObject.getString("realTenantIds");
String relTenantIds = jsonObject.getString("relTenantIds");
sysUserService.saveUser(user, selectedRoles, selectedDeparts, relTenantIds);
baseCommonService.addLog("添加用户username " +user.getUsername() ,CommonConstant.LOG_TYPE_2, 2);
result.success("添加成功!");
@ -1013,7 +1013,7 @@ public class SysUserController {
user.setStatus(CommonConstant.USER_UNFREEZE);
user.setDelFlag(CommonConstant.DEL_FLAG_0);
user.setActivitiSync(CommonConstant.ACT_SYNC_0);
sysUserService.addUserWithRole(user,"ee8626f80f7c2619917b6236f3a7f02b");//默认临时角色 test
sysUserService.addUserWithRole(user,null);
result.success("注册成功");
} catch (Exception e) {
result.error500("注册失败");

View File

@ -1,14 +1,15 @@
package org.jeecg.modules.system.mapper;
import java.util.List;
import java.util.Map;
import com.baomidou.mybatisplus.annotation.InterceptorIgnore;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.jeecg.modules.system.entity.SysCategory;
import org.jeecg.modules.system.model.TreeSelectModel;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import java.util.List;
import java.util.Map;
/**
* @Description: 分类字典
@ -34,5 +35,16 @@ public interface SysCategoryMapper extends BaseMapper<SysCategory> {
@Select("SELECT ID FROM sys_category WHERE CODE = #{code,jdbcType=VARCHAR}")
public String queryIdByCode(@Param("code") String code);
/**
* 获取分类字典最大的code
* @param page
* @return
*/
@InterceptorIgnore(tenantLine = "true")
@Select("SELECT code FROM sys_category WHERE code IS NOT NULL AND pid=#{categoryPid} ORDER BY code DESC")
List<SysCategory> getMaxCategoryCodeByPage(@Param("page") Page<SysCategory> page, @Param("categoryPid") String categoryPid);
@InterceptorIgnore(tenantLine = "true")
@Select("SELECT code FROM sys_category WHERE ID = #{id}")
SysCategory selectSysCategoryById(@Param("id") String id);
}

View File

@ -91,4 +91,14 @@ public interface SysTenantMapper extends BaseMapper<SysTenant> {
* @return
*/
List<UserPosition> queryUserPositionList(@Param("userIdList") List<String> userIdList);
/**
* 查询产品包关联的用户列表
* @param page
* @param tenantId
* @param packId
* @param status
* @return
*/
List<TenantPackUser> queryTenantPackUserList(@Param("page") Page<TenantPackUser> page, @Param("tenantId") String tenantId, @Param("packId") String packId, @Param("status") Integer status);
}

View File

@ -1,10 +1,7 @@
package org.jeecg.modules.system.mapper;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import org.jeecg.modules.system.entity.SysTenantPack;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.jeecg.modules.system.entity.SysTenantPack;
/**
* @Description: 租户产品包

View File

@ -68,6 +68,21 @@
)
and p.del_flag = 0
<!--update end Author:lvdandan Date:20200213 for加入部门权限 -->
<!-- update begin Author: taoyan Date:20200213 forQQYUN-4303 【low app】 用户登录的时候 加载low app的套餐权限 加到用户信息 -->
UNION
SELECT p.*
FROM sys_permission p
WHERE exists(
select a.id from sys_tenant_pack_perms a
join sys_tenant_pack b on a.pack_id = b.id
join sys_tenant_pack_user c on c.pack_id = b.id
join sys_user d on d.id = c.user_id
where p.id = a.permission_id AND d.username = #{username,jdbcType=VARCHAR}
)
and p.del_flag = 0
<!-- update end Author: taoyan Date:20200213 forQQYUN-4303 【low app】 用户登录的时候 加载low app的套餐权限 加到用户信息 -->
) h order by h.sort_no ASC
</select>

View File

@ -100,7 +100,7 @@
<select id="queryUserPositionList" resultType="org.jeecg.modules.system.vo.tenant.UserPosition">
SELECT c.id as user_id, name as position_name FROM sys_user c
join sys_user_position b on c.id = b.user_id
join sys_position a on a.code = b.position_code
join sys_position a on a.id = b.position_id
where c.status = 1 and c.del_flag = 0
and c.id in
<foreach collection="userIdList" index="index" item="id" open="(" separator="," close=")">
@ -108,5 +108,18 @@
</foreach>
</select>
<!--获取租户产品包用户列表-->
<select id="queryTenantPackUserList" resultType="org.jeecg.modules.system.vo.tenant.TenantPackUser">
SELECT c.id, c.username, c.realname, c.phone, c.avatar, a.pack_name, a.id as pack_id FROM sys_user c
join sys_tenant_pack_user b on c.id = b.user_id
join sys_tenant_pack a on a.id = b.pack_id
where c.status = 1
and c.del_flag = 0
and b.status = #{status}
and a.tenant_id = #{tenantId}
<if test="packId!='' and packId!=null">
and a.id = #{packId}
</if>
</select>
</mapper>

View File

@ -1,10 +1,11 @@
package org.jeecg.modules.system.model;
import org.jeecg.modules.system.entity.SysPermission;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.jeecg.modules.system.entity.SysPermission;
/**
* @Description: 菜单树,封装树结构
@ -129,13 +130,19 @@ public class SysPermissionTree implements Serializable {
private boolean hidden;
/**按钮权限状态(0无效1有效)*/
private java.lang.String status;
private String status;
/*update_begin author:wuxianquan date:20190908 for:model增加字段 */
/** 外链菜单打开方式 0/内部打开 1/外部打开 */
private boolean internalOrExternal;
/*update_end author:wuxianquan date:20190908 for:model增加字段 */
/*update_begin author:liusq date:20230601 for:【issues/4986】model增加hideTab字段 */
/**
* 是否隐藏Tab: 0否,1是默认值0
*/
private boolean hideTab;
/*update_end author:liusq date:20230601 for:【issues/4986】model增加hideTab字段 */
public SysPermissionTree() {
}
@ -169,6 +176,9 @@ public class SysPermissionTree implements Serializable {
this.internalOrExternal = permission.isInternalOrExternal();
/*update_end author:wuxianquan date:20190908 for:赋值 */
this.title=permission.getName();
/*update_end author:liusq date:20230601 for:【issues/4986】model增加hideTab字段 */
this.hideTab = permission.isHideTab();
/*update_end author:liusq date:20230601 for:【issues/4986】model增加hideTab字段 */
if (!permission.isLeaf()) {
this.children = new ArrayList<SysPermissionTree>();
}
@ -392,11 +402,11 @@ public class SysPermissionTree implements Serializable {
this.permsType = permsType;
}
public java.lang.String getStatus() {
public String getStatus() {
return status;
}
public void setStatus(java.lang.String status) {
public void setStatus(String status) {
this.status = status;
}
@ -409,4 +419,12 @@ public class SysPermissionTree implements Serializable {
this.internalOrExternal = internalOrExternal;
}
/*update_end author:wuxianquan date:20190908 for:get set 方法 */
public boolean isHideTab() {
return hideTab;
}
public void setHideTab(boolean hideTab) {
this.hideTab = hideTab;
}
}

View File

@ -1,7 +1,7 @@
package org.jeecg.modules.system.rule;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.extern.slf4j.Slf4j;
import org.jeecg.common.handler.IFillRuleHandler;
import org.jeecg.common.util.SpringContextUtils;
@ -50,16 +50,20 @@ public class CategoryCodeRule implements IFillRuleHandler {
* 3.添加子节点有兄弟元素 YouBianCodeUtil.getNextYouBianCode(lastCode);
* */
//找同类 确定上一个最大的code值
LambdaQueryWrapper<SysCategory> query = new LambdaQueryWrapper<SysCategory>().eq(SysCategory::getPid, categoryPid).isNotNull(SysCategory::getCode).orderByDesc(SysCategory::getCode);
SysCategoryMapper baseMapper = (SysCategoryMapper) SpringContextUtils.getBean("sysCategoryMapper");
List<SysCategory> list = baseMapper.selectList(query);
//update-begin---author:wangshuai ---date:20230424 for【issues/4846】开启saas多租户功能后租户管理员在添加分类字典时报错------------
Page<SysCategory> page = new Page<>(1,1);
List<SysCategory> list = baseMapper.getMaxCategoryCodeByPage(page,categoryPid);
//update-end---author:wangshuai ---date:20230424 for【issues/4846】开启saas多租户功能后租户管理员在添加分类字典时报错------------
if (list == null || list.size() == 0) {
if (ROOT_PID_VALUE.equals(categoryPid)) {
//情况1
categoryCode = YouBianCodeUtil.getNextYouBianCode(null);
} else {
//情况2
SysCategory parent = (SysCategory) baseMapper.selectById(categoryPid);
//update-begin---author:wangshuai ---date:20230424 for【issues/4846】开启saas多租户功能后租户管理员在添加分类字典时报错------------
SysCategory parent = (SysCategory) baseMapper.selectSysCategoryById(categoryPid);
//update-end---author:wangshuai ---date:20230424 for【issues/4846】开启saas多租户功能后租户管理员在添加分类字典时报错------------
categoryCode = YouBianCodeUtil.getSubYouBianCode(parent.getCode(), null);
}
} else {

View File

@ -1,7 +1,7 @@
package org.jeecg.modules.system.service;
import org.jeecg.modules.system.entity.SysTenantPack;
import com.baomidou.mybatisplus.extension.service.IService;
import org.jeecg.modules.system.entity.SysTenantPack;
import org.jeecg.modules.system.entity.SysTenantPackUser;
import java.util.List;
@ -71,5 +71,5 @@ public interface ISysTenantPackService extends IService<SysTenantPack> {
* @param packCode
* @return
*/
SysTenantPack getSysTenantPack(Integer tenantId ,String packCode);
SysTenantPack getSysTenantPack(Integer tenantId , String packCode);
}

View File

@ -45,11 +45,11 @@ public interface ISysTenantService extends IService<SysTenant> {
boolean removeTenantById(String id);
/**
* 邀请用户加入租户
* 邀请用户加入租户,通过手机号
* @param ids
* @param userIds
* @param phone
*/
void invitationUserJoin(String ids, String userIds);
void invitationUserJoin(String ids, String phone);
/**
* 请离用户(租户)
@ -190,4 +190,14 @@ public interface ISysTenantService extends IService<SysTenant> {
* @param sysTenantPackUser
*/
void deleteApply(SysTenantPackUser sysTenantPackUser);
/**
* 产品包用户列表
* @param tenantId
* @param packId
* @param status
* @param page
* @return
*/
IPage<TenantPackUser> queryTenantPackUserList(String tenantId, String packId, Integer status, Page<TenantPackUser> page);
}

View File

@ -192,6 +192,8 @@ public class SysDepartServiceImpl extends ServiceImpl<SysDepartMapper, SysDepart
sysDepart.setOrgType(String.valueOf(orgType));
sysDepart.setCreateTime(new Date());
sysDepart.setDelFlag(CommonConstant.DEL_FLAG_0.toString());
//新添加的部门是叶子节点
sysDepart.setIzLeaf(CommonConstant.IS_LEAF);
this.save(sysDepart);
//update-begin---author:wangshuai ---date:20220307 for[JTC-119]在部门管理菜单下设置部门负责人 创建用户的时候不需要处理
//新增部门的时候新增负责部门

View File

@ -1,6 +1,7 @@
package org.jeecg.modules.system.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.apache.shiro.SecurityUtils;
import org.jeecg.common.constant.SymbolConstant;
import org.jeecg.common.constant.TenantConstant;
@ -9,7 +10,6 @@ import org.jeecg.common.util.SpringContextUtils;
import org.jeecg.common.util.oConvertUtils;
import org.jeecg.modules.aop.TenantLog;
import org.jeecg.modules.system.entity.SysPackPermission;
import org.jeecg.modules.system.entity.SysTenant;
import org.jeecg.modules.system.entity.SysTenantPack;
import org.jeecg.modules.system.entity.SysTenantPackUser;
import org.jeecg.modules.system.mapper.SysPackPermissionMapper;
@ -18,11 +18,8 @@ import org.jeecg.modules.system.mapper.SysTenantPackUserMapper;
import org.jeecg.modules.system.service.ISysTenantPackService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.transaction.annotation.Transactional;
import javax.sql.DataSource;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

View File

@ -26,10 +26,8 @@ import org.jeecg.modules.system.service.ISysTenantService;
import org.jeecg.modules.system.service.ISysUserService;
import org.jeecg.modules.system.vo.tenant.*;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.NoSuchBeanDefinitionException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
@ -74,7 +72,7 @@ public class SysTenantServiceImpl extends ServiceImpl<SysTenantMapper, SysTenant
public Long countUserLinkTenant(String id) {
LambdaQueryWrapper<SysUserTenant> query = new LambdaQueryWrapper<>();
query.eq(SysUserTenant::getTenantId,id);
query.eq(SysUserTenant::getStatus,CommonConstant.STATUS_1);
query.eq(SysUserTenant::getStatus, CommonConstant.STATUS_1);
// 查找出已被关联的用户数量
return userTenantMapper.selectCount(query);
}
@ -91,27 +89,31 @@ public class SysTenantServiceImpl extends ServiceImpl<SysTenantMapper, SysTenant
@Override
@CacheEvict(value={CacheConstant.SYS_USERS_CACHE}, allEntries=true)
public void invitationUserJoin(String ids, String userIds) {
public void invitationUserJoin(String ids, String phone) {
String[] idArray = ids.split(SymbolConstant.COMMA);
String[] userIdArray = userIds.split(SymbolConstant.COMMA);
//先循环用户id避免多次查询
for (String userId : userIdArray) {
//循环租户id
for (String id:idArray) {
//update-begin---author:wangshuai ---date:20221223 for[QQYUN-3371]租户逻辑改造,改成关系表------------
LambdaQueryWrapper<SysUserTenant> query = new LambdaQueryWrapper<>();
query.eq(SysUserTenant::getTenantId,id);
query.eq(SysUserTenant::getUserId,userId);
long count = userTenantMapper.selectCount(query);
if(count == 0){
SysUserTenant relation = new SysUserTenant();
relation.setUserId(userId);
relation.setTenantId(Integer.valueOf(id));
relation.setStatus(CommonConstant.USER_TENANT_UNDER_REVIEW);
userTenantMapper.insert(relation);
}
//update-end---author:wangshuai ---date:20221223 for[QQYUN-3371]租户逻辑改造,改成关系表------------
//update-begin---author:wangshuai ---date:20230313 for【QQYUN-4605】后台的邀请谁加入租户没办法选不是租户下的用户通过手机号邀请------------
SysUser userByPhone = userService.getUserByPhone(phone);
//说明用户不存在
if(null == userByPhone){
throw new JeecgBootException("当前用户不存在,请核对手机号");
}
String userId = userByPhone.getId();
//循环租户id
for (String id:idArray) {
//update-begin---author:wangshuai ---date:20221223 for[QQYUN-3371]租户逻辑改造,改成关系表------------
LambdaQueryWrapper<SysUserTenant> query = new LambdaQueryWrapper<>();
query.eq(SysUserTenant::getTenantId,id);
query.eq(SysUserTenant::getUserId,userId);
long count = userTenantMapper.selectCount(query);
if(count == 0){
SysUserTenant relation = new SysUserTenant();
relation.setUserId(userId);
relation.setTenantId(Integer.valueOf(id));
relation.setStatus(CommonConstant.USER_TENANT_NORMAL);
userTenantMapper.insert(relation);
}
//update-end---author:wangshuai ---date:20221223 for[QQYUN-3371]租户逻辑改造,改成关系表------------
//update-end---author:wangshuai ---date:20230313 for【QQYUN-4605】后台的邀请谁加入租户没办法选不是租户下的用户通过手机号邀请------------
}
}
@ -477,6 +479,7 @@ public class SysTenantServiceImpl extends ServiceImpl<SysTenantMapper, SysTenant
.eq(SysTenantPackUser::getUserId, sysTenantPackUser.getUserId())
.eq(SysTenantPackUser::getPackId, sysTenantPackUser.getPackId());
sysTenantPackUserMapper.delete(query);
}
@Override
@ -559,6 +562,46 @@ public class SysTenantServiceImpl extends ServiceImpl<SysTenantMapper, SysTenant
}
}
@Override
public IPage<TenantPackUser> queryTenantPackUserList(String tenantId, String packId, Integer status, Page<TenantPackUser> page) {
// 查询用户
List<TenantPackUser> userList = baseMapper.queryTenantPackUserList(page,tenantId, packId,status);
// 获取产品包下用户部门和职位
userList = getPackUserPositionAndDepart(userList);
return page.setRecords(userList);
}
/**
* 获取用户职位和部门
* @param userList
* @return
*/
private List<TenantPackUser> getPackUserPositionAndDepart(List<TenantPackUser> userList) {
if(userList!=null && userList.size()>0){
List<String> userIdList = userList.stream().map(i->i.getId()).collect(Collectors.toList());
// 部门
List<UserDepart> depList = baseMapper.queryUserDepartList(userIdList);
// // 职位
// List<UserPosition> userPositions = baseMapper.queryUserPositionList(userIdList);
// 遍历用户 往用户中添加 部门信息和职位信息
for (TenantPackUser user : userList) {
//添加部门
for (UserDepart dep : depList) {
if (user.getId().equals(dep.getUserId())) {
user.addDepart(dep.getDepartName());
}
}
// //添加职位
// for (UserPosition userPosition : userPositions) {
// if (user.getId().equals(userPosition.getUserId())) {
// user.addPosition(userPosition.getPositionName());
// }
// }
}
}
return userList;
}
/**
* 触发入职流程
*

View File

@ -1,6 +1,6 @@
package org.jeecg.modules.system.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollectionUtil;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@ -8,6 +8,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.extern.slf4j.Slf4j;
@ -633,18 +634,6 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
}
}
//update-begin---author:wangshuai ---date:20230112 for用户创建的时候增加临时角色 test------------
//开启租户saas模式
if (MybatisPlusSaasConfig.OPEN_SYSTEM_TENANT_CONTROL) {
String testRoleId = "ee8626f80f7c2619917b6236f3a7f02b";
//如果前台没有传递角色或者传过来的劫色没有临时角色,那么默认临时角色 test
if (oConvertUtils.isEmpty(selectedRoles) || !selectedRoles.contains(testRoleId)) {
SysUserRole userRole = new SysUserRole(user.getId(), testRoleId);
sysUserRoleMapper.insert(userRole);
}
}
//update-end---author:wangshuai ---date:20230112 for用户创建的时候增加临时角色 test------------
//step.3 保存所属部门
if(oConvertUtils.isNotEmpty(selectedDeparts)) {
String[] arr = selectedDeparts.split(",");
@ -827,6 +816,10 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
//设置用户登录缓存租户
this.updateUserDepart(username, null,sysUser.getLoginTenantId());
log.info(" 登录接口用户的租户ID = {}", sysUser.getLoginTenantId());
if(sysUser.getLoginTenantId()!=null){
//登录的时候需要手工设置下会话中的租户ID,不然登录接口无法通过租户隔离查询到数据
TenantContext.setTenant(sysUser.getLoginTenantId()+"");
}
return null;
}
@ -864,12 +857,19 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
}else{
//是否开启系统管理模块的多租户数据隔离【SAAS多租户模式】
if (MybatisPlusSaasConfig.OPEN_SYSTEM_TENANT_CONTROL) {
SysUserTenant relation = new SysUserTenant();
relation.setUserId(userId);
String tenantId = oConvertUtils.getString(TenantContext.getTenant(), "0");
relation.setTenantId(Integer.valueOf(tenantId));
relation.setStatus(CommonConstant.STATUS_1);
relationMapper.insert(relation);
//update-begin---author:wangshuai ---date:20230220 for判断当前用户是否在当前租户里面如果不存在在新增------------
String tenantId = TenantContext.getTenant();
if(oConvertUtils.isNotEmpty(tenantId)){
Integer count = relationMapper.userTenantIzExist(userId, Integer.parseInt(tenantId));
if(count == 0){
SysUserTenant relation = new SysUserTenant();
relation.setUserId(userId);
relation.setTenantId(Integer.parseInt(tenantId));
relation.setStatus(CommonConstant.STATUS_1);
relationMapper.insert(relation);
}
}
//update-end---author:wangshuai ---date:20230220 for判断当前用户是否在当前租户里面如果不存在在新增------------
}
}
}
@ -885,21 +885,24 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
//数据库的租户id
List<Integer> oldTenantIds = relationMapper.getTenantIdsNoStatus(userId);
//如果传过来的租户id为空那么就删除租户
if (oConvertUtils.isEmpty(relTenantIds)) {
if (oConvertUtils.isEmpty(relTenantIds) && CollectionUtils.isNotEmpty(oldTenantIds)) {
this.deleteTenantByUserId(userId, null);
} else if (oConvertUtils.isNotEmpty(relTenantIds) && oConvertUtils.isEmpty(oldTenantIds)) {
} else if (oConvertUtils.isNotEmpty(relTenantIds) && CollectionUtils.isEmpty(oldTenantIds)) {
//如果传过来的租户id不为空但是数据库的租户id为空那么就新增
this.saveUserTenant(userId, relTenantIds);
} else {
//都不为空,需要比较,进行添加或删除
if(oConvertUtils.isNotEmpty(oldTenantIds)){
if(oConvertUtils.isNotEmpty(relTenantIds) && CollectionUtils.isNotEmpty(oldTenantIds)){
//找到新的租户id与原来的租户id不同之处进行删除
List<Integer> tenantIdList = oldTenantIds.stream().filter(item -> !relTenantIds.contains(item.toString())).collect(Collectors.toList());
for (Integer tenantId : tenantIdList) {
String[] relTenantIdArray = relTenantIds.split(SymbolConstant.COMMA);
List<String> relTenantIdList = Arrays.asList(relTenantIdArray);
List<Integer> deleteTenantIdList = oldTenantIds.stream().filter(item -> !relTenantIdList.contains(item.toString())).collect(Collectors.toList());
for (Integer tenantId : deleteTenantIdList) {
this.deleteTenantByUserId(userId, tenantId);
}
//找到原来租户的用户id与新的租户id不同之处进行新增
String tenantIds = Arrays.stream(relTenantIds.split(SymbolConstant.COMMA)).filter(item -> !oldTenantIds.contains(Integer.valueOf(item))).collect(Collectors.joining(","));
String tenantIds = relTenantIdList.stream().filter(item -> !oldTenantIds.contains(Integer.valueOf(item))).collect(Collectors.joining(","));
this.saveUserTenant(userId, tenantIds);
}
}

View File

@ -1,3 +1,4 @@
<#include "/common/utils.ftl">
<#if po.isQuery=='Y'>
<#assign query_flag=true>
<#if query_field_no==2>
@ -13,7 +14,7 @@
</#if>
<#if po.queryMode=='single'>
<#if query_field_no gt 1> </#if><a-col :lg="8">
<#if query_field_no gt 1> </#if><a-form-item label="${po.filedComment}">
<#if query_field_no gt 1> </#if><a-form-item label="${po.filedComment}" name="${po.fieldName}">
<#if po.classType=='sel_search'>
<#if query_field_no gt 1> </#if><j-search-select placeholder="请选择${po.filedComment}" v-model:value="queryParam.${po.fieldName}" dict="${po.dictTable},${po.dictText},${po.dictField}" />
<#elseif po.classType=='sel_user'>

View File

@ -21,7 +21,7 @@
<#assign query_flag = false>
<!--查询区域-->
<div class="jeecg-basic-table-form-container">
<a-form @keyup.enter.native="searchQuery" :model="queryParam" :label-col="labelCol" :wrapper-col="wrapperCol">
<a-form ref="formRef" @keyup.enter.native="searchQuery" :model="queryParam" :label-col="labelCol" :wrapper-col="wrapperCol">
<a-row :gutter="24">
<#-- 开始循环 -->
<#list columns as po>
@ -145,7 +145,8 @@
import { startProcess } from '/@/api/common/api';
</#if>
const queryParam = ref<any>({});
const formRef = ref();
const queryParam = reactive<any>({});
const toggleSearchStatus = ref<boolean>(false);
const registerModal = ref();
//注册table数据
@ -161,12 +162,13 @@
fixed: 'right',
},
beforeFetch: (params) => {
return Object.assign(params, queryParam.value);
return Object.assign(params, queryParam);
},
},
exportConfig: {
name: "${tableVo.ftlDescription}",
url: getExportUrl,
params: queryParam,
},
importConfig: {
url: getImportUrl,
@ -294,7 +296,7 @@
* 重置
*/
function searchReset() {
queryParam.value = {};
formRef.value.resetFields();
selectedRowKeys.value = [];
//刷新数据
reload();
@ -306,7 +308,7 @@
*/
function setFieldsValue(map) {
Object.keys(map).map((key) => {
queryParam.value[key] = map[key];
queryParam[key] = map[key];
});
}
</#if>
@ -318,7 +320,7 @@
* @param value
*/
function handleAreaChange(key, value) {
queryParam.value[key] = value.join(',');
queryParam[key] = value.join(',');
}
</#if>
@ -344,7 +346,7 @@
* @param value
*/
function handleFormChange(key, value) {
queryParam.value[key] = value;
queryParam[key] = value;
}
/**

View File

@ -1,6 +1,8 @@
<#assign hasChildrenField = "">
<#assign pidFieldName = "">
<#assign textFieldName = "">
<#assign textDbFieldName = "">
<#assign pidDbFieldName = "">
<#list originalColumns as po>
<#if po.fieldDbName == tableVo.extendParams.hasChildren>
<#assign hasChildrenField = po.fieldName>
@ -8,9 +10,11 @@
<#-- begin 【vue3专用】 -->
<#if po.fieldDbName == tableVo.extendParams.pidField>
<#assign pidFieldName = po.fieldName>
<#assign pidDbFieldName = po.fieldDbName>
</#if>
<#if po.fieldDbName == tableVo.extendParams.textField>
<#assign textFieldName = po.fieldName>
<#assign textDbFieldName = po.fieldDbName>
</#if>
<#-- end 【vue3专用】 -->
</#list>
@ -26,11 +30,11 @@
<select id="queryListByPid" parameterType="java.lang.Object" resultType="org.jeecg.common.system.vo.SelectTreeModel">
select
id as "key",
${textFieldName} as "title",
${textDbFieldName} as "title",
(case when ${Format.humpToUnderline(hasChildrenField)} = '1' then 0 else 1 end) as isLeaf,
${pidFieldName} as parentId
${pidDbFieldName} as parentId
from ${tableName}
where ${pidFieldName} = ${r'#'}{pid}
where ${pidDbFieldName} = ${r'#'}{pid}
<if test="query != null">
<foreach collection="query.entrySet()" item="value" index="key">
and ${r'$'}{key} = ${r'#'}{value}

View File

@ -22,7 +22,7 @@
<#assign query_flag = false>
<!--查询区域-->
<div class="jeecg-basic-table-form-container">
<a-form @keyup.enter.native="reload" :model="queryParam" :label-col="labelCol" :wrapper-col="wrapperCol">
<a-form ref="formRef" @keyup.enter.native="reload" :model="queryParam" :label-col="labelCol" :wrapper-col="wrapperCol">
<a-row :gutter="24">
<#-- 开始循环 -->
<#list columns as po>
@ -150,6 +150,8 @@
import { startProcess } from '/@/api/common/api';
</#if>
const formRef = ref();
const queryParam = reactive<any>({});
const checkedKeys = ref<Array<string | number>>([]);
//注册model
const [registerModal, {openModal}] = useModal();
@ -166,12 +168,13 @@
fixed:'right'
},
beforeFetch: (params) => {
return Object.assign(params, queryParam.value);
return Object.assign(params, queryParam);
},
},
exportConfig: {
name:"${tableVo.ftlDescription}",
url: getExportUrl,
params: queryParam,
},
importConfig: {
url: getImportUrl,
@ -304,7 +307,7 @@
* @param value
*/
function handleFormChange(key, value) {
queryParam.value[key] = value;
queryParam[key] = value;
}
/**
* 初始化字典配置
@ -330,7 +333,6 @@
</#if>
/* ----------------------以下为原生查询需要添加的-------------------------- */
const queryParam = ref<any>({});
const toggleSearchStatus = ref<boolean>(false);
const labelCol = reactive({
xs: { span: 24 },
@ -344,7 +346,7 @@
* 重置
*/
function searchReset() {
queryParam.value = {};
formRef.value.resetFields();
selectedRowKeys.value = [];
//刷新数据
reload();
@ -355,7 +357,7 @@
*/
function setFieldsValue(map) {
Object.keys(map).map((key) => {
queryParam.value[key] = map[key];
queryParam[key] = map[key];
});
}
</#if>
@ -367,7 +369,7 @@
* @param value
*/
function handleAreaChange(key, value) {
queryParam.value[key] = value.join(',');
queryParam[key] = value.join(',');
}
</#if>
</script>

View File

@ -11,6 +11,6 @@ WORKDIR /jeecg-boot
EXPOSE 8080
#ADD ./src/main/resources/jeecg ./config/jeecg
ADD ./target/jeecg-system-start-3.5.0.jar ./
ADD ./target/jeecg-system-start-3.5.1.jar ./
CMD sleep 60;java -Djava.security.egd=file:/dev/./urandom -jar jeecg-system-start-3.5.0.jar
CMD sleep 60;java -Djava.security.egd=file:/dev/./urandom -jar jeecg-system-start-3.5.1.jar

View File

@ -5,7 +5,7 @@
<parent>
<artifactId>jeecg-module-system</artifactId>
<groupId>org.jeecgframework.boot</groupId>
<version>3.5.0</version>
<version>3.5.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@ -10,7 +10,7 @@ import org.jeecgframework.codegenerate.window.CodeWindow;
*/
public class JeecgOneGUI {
/** 使用手册: http://doc.jeecg.com/2684691 */
/** 使用手册: https://help.jeecg.com/vue3/codegen/gui.html */
public static void main(String[] args) {
new CodeWindow().pack();
}

View File

@ -9,6 +9,6 @@ ${AnsiColor.BRIGHT_BLUE}
${AnsiColor.BRIGHT_GREEN}
Jeecg Boot Version: 3.5.0
Jeecg Boot Version: 3.5.1
Spring Boot Version: ${spring-boot.version}${spring-boot.formatted-version}
${AnsiColor.BLACK}

View File

@ -5,7 +5,7 @@
<parent>
<artifactId>jeecg-boot-parent</artifactId>
<groupId>org.jeecgframework.boot</groupId>
<version>3.5.0</version>
<version>3.5.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@ -10,6 +10,6 @@ WORKDIR /jeecg-cloud-gateway
EXPOSE 9999
ADD ./target/jeecg-cloud-gateway-3.5.0.jar ./
ADD ./target/jeecg-cloud-gateway-3.5.1.jar ./
CMD sleep 1;java -Dfile.encoding=utf-8 -Djava.security.egd=file:/dev/./urandom -jar jeecg-cloud-gateway-3.5.0.jar
CMD sleep 1;java -Dfile.encoding=utf-8 -Djava.security.egd=file:/dev/./urandom -jar jeecg-cloud-gateway-3.5.1.jar

View File

@ -5,7 +5,7 @@
<parent>
<artifactId>jeecg-server-cloud</artifactId>
<groupId>org.jeecgframework.boot</groupId>
<version>3.5.0</version>
<version>3.5.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>jeecg-cloud-gateway</artifactId>

View File

@ -33,7 +33,7 @@ public class GatewayRoutersConfig {
this.dataId = dataId + ".json";
}
@Value("${jeecg.route.config.group:DEFAULT_GROUP:#{null}}")
@Value("${spring.cloud.nacos.config.group:DEFAULT_GROUP:#{null}}")
public void setRouteGroup(String routeGroup) {
this.routeGroup = routeGroup;
}
@ -43,7 +43,7 @@ public class GatewayRoutersConfig {
this.serverAddr = serverAddr;
}
@Value("${spring.cloud.nacos.discovery.namespace:#{null}}")
@Value("${spring.cloud.nacos.config.namespace:#{null}}")
public void setNamespace(String namespace) {
this.namespace = namespace;
}

View File

@ -13,6 +13,8 @@ spring:
nacos:
config:
server-addr: @config.server-addr@
group: @config.group@
namespace: @config.namespace@
discovery:
server-addr: ${spring.cloud.nacos.config.server-addr}
gateway:

View File

@ -10,6 +10,6 @@ WORKDIR /jeecg-cloud-nacos
EXPOSE 8848
ADD ./target/jeecg-cloud-nacos-3.5.0.jar ./
ADD ./target/jeecg-cloud-nacos-3.5.1.jar ./
CMD sleep 1;java -Dfile.encoding=utf-8 -Djava.security.egd=file:/dev/./urandom -jar jeecg-cloud-nacos-3.5.0.jar
CMD sleep 1;java -Dfile.encoding=utf-8 -Djava.security.egd=file:/dev/./urandom -jar jeecg-cloud-nacos-3.5.1.jar

View File

@ -5,7 +5,7 @@
<artifactId>jeecg-cloud-nacos</artifactId>
<name>jeecg-cloud-nacos</name>
<description>nacos启动模块</description>
<version>3.5.0</version>
<version>3.5.1</version>
<!-- Nacos2不支持springboot2.6.6 -->
<parent>

View File

@ -10,6 +10,6 @@ WORKDIR /jeecg-demo-cloud
EXPOSE 7002
ADD ./target/jeecg-demo-cloud-start-3.5.0.jar ./
ADD ./target/jeecg-demo-cloud-start-3.5.1.jar ./
CMD sleep 1;java -Dfile.encoding=utf-8 -Djava.security.egd=file:/dev/./urandom -jar jeecg-demo-cloud-start-3.5.0.jar
CMD sleep 1;java -Dfile.encoding=utf-8 -Djava.security.egd=file:/dev/./urandom -jar jeecg-demo-cloud-start-3.5.1.jar

View File

@ -5,7 +5,7 @@
<parent>
<artifactId>jeecg-server-cloud</artifactId>
<groupId>org.jeecgframework.boot</groupId>
<version>3.5.0</version>
<version>3.5.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@ -8,6 +8,8 @@ spring:
nacos:
config:
server-addr: @config.server-addr@
group: @config.group@
namespace: @config.namespace@
discovery:
server-addr: ${spring.cloud.nacos.config.server-addr}
config:

View File

@ -10,6 +10,6 @@ WORKDIR /jeecg-system-cloud
EXPOSE 7001
ADD ./target/jeecg-system-cloud-start-3.5.0.jar ./
ADD ./target/jeecg-system-cloud-start-3.5.1.jar ./
CMD sleep 1;java -Dfile.encoding=utf-8 -Djava.security.egd=file:/dev/./urandom -jar jeecg-system-cloud-start-3.5.0.jar
CMD sleep 1;java -Dfile.encoding=utf-8 -Djava.security.egd=file:/dev/./urandom -jar jeecg-system-cloud-start-3.5.1.jar

View File

@ -5,7 +5,7 @@
<parent>
<artifactId>jeecg-server-cloud</artifactId>
<groupId>org.jeecgframework.boot</groupId>
<version>3.5.0</version>
<version>3.5.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>jeecg-system-cloud-start</artifactId>

View File

@ -21,7 +21,7 @@ import java.net.UnknownHostException;
/**
* 微服务启动类(采用此类启动项目为微服务模式)
* 注意: 需要先在naocs里面创建配置文件参考文档 http://doc.jeecg.com/2704725
* 注意: 需要先初始化Nacos的数据库脚本db/tables_nacos.sql
* @author zyf
* @date: 2022/4/21 10:55
*/

View File

@ -8,6 +8,8 @@ spring:
nacos:
config:
server-addr: @config.server-addr@
group: @config.group@
namespace: @config.namespace@
discovery:
server-addr: ${spring.cloud.nacos.config.server-addr}
config:

View File

@ -5,7 +5,7 @@
<parent>
<artifactId>jeecg-visual</artifactId>
<groupId>org.jeecgframework.boot</groupId>
<version>3.5.0</version>
<version>3.5.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>jeecg-cloud-monitor</artifactId>

View File

@ -10,6 +10,6 @@ WORKDIR /jeecg-cloud-sentinel
EXPOSE 8848
ADD ./target/jeecg-cloud-sentinel-3.5.0.jar ./
ADD ./target/jeecg-cloud-sentinel-3.5.1.jar ./
CMD sleep 5;java -Dfile.encoding=utf-8 -Djava.security.egd=file:/dev/./urandom -jar jeecg-cloud-sentinel-3.5.0.jar
CMD sleep 5;java -Dfile.encoding=utf-8 -Djava.security.egd=file:/dev/./urandom -jar jeecg-cloud-sentinel-3.5.1.jar

View File

@ -5,7 +5,7 @@
<parent>
<artifactId>jeecg-visual</artifactId>
<groupId>org.jeecgframework.boot</groupId>
<version>3.5.0</version>
<version>3.5.1</version>
</parent>
<artifactId>jeecg-cloud-sentinel</artifactId>
<name>jeecg-cloud-sentinel</name>

View File

@ -5,7 +5,7 @@
<parent>
<artifactId>jeecg-cloud-test</artifactId>
<groupId>org.jeecgframework.boot</groupId>
<version>3.5.0</version>
<version>3.5.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<description>公共测试模块</description>

View File

@ -5,7 +5,7 @@
<parent>
<artifactId>jeecg-cloud-test</artifactId>
<groupId>org.jeecgframework.boot</groupId>
<version>3.5.0</version>
<version>3.5.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<description>消息队列测试模块</description>

View File

@ -5,7 +5,7 @@
<parent>
<artifactId>jeecg-cloud-test-seata</artifactId>
<groupId>org.jeecgframework.boot</groupId>
<version>3.5.0</version>
<version>3.5.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<description>分布式事务测试模块</description>

View File

@ -3,17 +3,20 @@ server:
spring:
application:
name: seata-account
main:
allow-bean-definition-overriding: true
autoconfigure:
exclude: com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure
datasource:
dynamic:
seata: true # 开启对 seata的支持
seata-mode: AT #支持XA及AT模式,默认AT
primary: account
datasource:
# 设置 账号数据源配置
account:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/jeecg_account?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useSSL=false
url: jdbc:mysql://127.0.0.1:3306/jeecg_account?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&allowPublicKeyRetrieval=true&rewriteBatchedStatements=true
username: root
password: root
driver-class-name: com.mysql.cj.jdbc.Driver
schema: classpath:sql/schema-account.sql
seata:
enable-auto-data-source-proxy: false

View File

@ -5,7 +5,7 @@
<parent>
<artifactId>jeecg-cloud-test-seata</artifactId>
<groupId>org.jeecgframework.boot</groupId>
<version>3.5.0</version>
<version>3.5.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<description>分布式事务测试模块</description>

View File

@ -3,15 +3,19 @@ server:
spring:
application:
name: seata-order
main:
allow-bean-definition-overriding: true
autoconfigure:
exclude: com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure
datasource:
dynamic:
primary: order
seata: true # 开启对 seata的支持
seata-mode: AT #支持XA及AT模式,默认AT
datasource:
# 设置 账号数据源配置
order:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/jeecg_order?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useSSL=false
url: jdbc:mysql://127.0.0.1:3306/jeecg_order?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useSSL=false
username: root
password: root
schema: classpath:sql/schema-order.sql

View File

@ -5,7 +5,7 @@
<parent>
<artifactId>jeecg-cloud-test-seata</artifactId>
<groupId>org.jeecgframework.boot</groupId>
<version>3.5.0</version>
<version>3.5.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<description>分布式事务测试模块</description>

View File

@ -3,15 +3,18 @@ server:
spring:
application:
name: seata-product
main:
allow-bean-definition-overriding: true
datasource:
dynamic:
primary: product
seata: true # 开启对 seata的支持
seata-mode: AT #支持XA及AT模式,默认AT
datasource:
# 设置 账号数据源配置
product:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/jeecg_product?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useSSL=false
url: jdbc:mysql://127.0.0.1:3306/jeecg_product?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useSSL=false
username: root
password: root
schema: classpath:sql/schema-product.sql

View File

@ -5,7 +5,7 @@
<parent>
<artifactId>jeecg-cloud-test</artifactId>
<groupId>org.jeecgframework.boot</groupId>
<version>3.5.0</version>
<version>3.5.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>jeecg-cloud-test-seata</artifactId>

View File

@ -5,7 +5,7 @@
<parent>
<artifactId>jeecg-cloud-test</artifactId>
<groupId>org.jeecgframework.boot</groupId>
<version>3.5.0</version>
<version>3.5.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@ -5,7 +5,7 @@
<parent>
<artifactId>jeecg-visual</artifactId>
<groupId>org.jeecgframework.boot</groupId>
<version>3.5.0</version>
<version>3.5.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@ -10,7 +10,7 @@ WORKDIR /jeecg-cloud-xxljob
EXPOSE 9080
ADD ./target/jeecg-cloud-xxljob-3.5.0.jar ./
ADD ./target/jeecg-cloud-xxljob-3.5.1.jar ./
CMD java -Dfile.encoding=utf-8 -Djava.security.egd=file:/dev/./urandom -jar jeecg-cloud-xxljob-3.5.0.jar
CMD java -Dfile.encoding=utf-8 -Djava.security.egd=file:/dev/./urandom -jar jeecg-cloud-xxljob-3.5.1.jar

View File

@ -5,7 +5,7 @@
<parent>
<artifactId>jeecg-visual</artifactId>
<groupId>org.jeecgframework.boot</groupId>
<version>3.5.0</version>
<version>3.5.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
@ -45,6 +45,8 @@
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql-connector-java.version}</version>
<scope>runtime</scope>
</dependency>

View File

@ -5,7 +5,7 @@
<parent>
<artifactId>jeecg-server-cloud</artifactId>
<groupId>org.jeecgframework.boot</groupId>
<version>3.5.0</version>
<version>3.5.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@ -5,7 +5,7 @@
<parent>
<artifactId>jeecg-boot-parent</artifactId>
<groupId>org.jeecgframework.boot</groupId>
<version>3.5.0</version>
<version>3.5.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>

22
pom.xml
View File

@ -2,7 +2,7 @@
<modelVersion>4.0.0</modelVersion>
<groupId>org.jeecgframework.boot</groupId>
<artifactId>jeecg-boot-parent</artifactId>
<version>3.5.0</version>
<version>3.5.1</version>
<packaging>pom</packaging>
<name>JEECG BOOT ${project.version} </name>
@ -22,12 +22,12 @@
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.6.14</version>
<version>2.7.10</version>
<relativePath/>
</parent>
<properties>
<jeecgboot.version>3.5.0</jeecgboot.version>
<jeecgboot.version>3.5.1</jeecgboot.version>
<java.version>1.8</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
@ -55,7 +55,7 @@
<minidao.version>1.9.0</minidao.version>
<!-- 积木报表-->
<jimureport-spring-boot-starter.version>1.5.6</jimureport-spring-boot-starter.version>
<jimureport-spring-boot-starter.version>1.5.8</jimureport-spring-boot-starter.version>
<commons.version>2.6</commons.version>
<aliyun-java-sdk-dysmsapi.version>2.1.0</aliyun-java-sdk-dysmsapi.version>
<aliyun.oss.version>3.11.2</aliyun.oss.version>
@ -344,7 +344,7 @@
<dependency>
<groupId>org.jeecgframework.jimureport</groupId>
<artifactId>jimureport-nosql-starter</artifactId>
<version>${jimureport-spring-boot-starter.version}</version>
<version>1.5.6</version>
</dependency>
</dependencies>
</dependencyManagement>
@ -428,6 +428,10 @@
<profile.name>dev</profile.name>
<!--Nacos服务地址-->
<config.server-addr>jeecg-boot-nacos:8848</config.server-addr>
<!--Nacos配置中心命名空间,用于支持多环境.这里必须使用ID不能使用名称,默认为空-->
<config.namespace></config.namespace>
<!--Nacos配置分组名称-->
<config.group>DEFAULT_GROUP</config.group>
</properties>
</profile>
<!-- 测试 -->
@ -438,6 +442,10 @@
<profile.name>test</profile.name>
<!--Nacos服务地址-->
<config.server-addr>jeecg-boot-nacos:8848</config.server-addr>
<!--Nacos配置中心命名空间,用于支持多环境.这里必须使用ID不能使用名称,默认为空-->
<config.namespace></config.namespace>
<!--Nacos配置分组名称-->
<config.group>DEFAULT_GROUP</config.group>
</properties>
</profile>
<!-- 生产 -->
@ -448,6 +456,10 @@
<profile.name>prod</profile.name>
<!--Nacos服务地址-->
<config.server-addr>jeecg-boot-nacos:8848</config.server-addr>
<!--Nacos配置中心命名空间,用于支持多环境.这里必须使用ID不能使用名称,默认为空-->
<config.namespace></config.namespace>
<!--Nacos配置分组名称-->
<config.group>DEFAULT_GROUP</config.group>
</properties>
</profile>
<!-- SpringCloud运行环境 -->