1544 Commits

Author SHA1 Message Date
d98acffe4e Merge remote-tracking branch 'origin/dev'
# Conflicts:
#	ruoyi-ui/package.json
2021-12-28 10:37:00 +08:00
ed659da488 发布 v3.5.0-release 正式版 2021-12-28 10:35:52 +08:00
a8227453fc update hutool 5.7.17 => 5.7.18 bugfix
update redisson 3.16.6 => 3.16.7 bugfix
2021-12-27 11:43:59 +08:00
225eda7176 update 更新 Sa-Token 文档说明与连接 2021-12-27 11:06:12 +08:00
295cd3670f Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue into dev
 Conflicts:
	pom.xml
	ruoyi-generator/src/main/java/com/ruoyi/generator/util/VelocityUtils.java
2021-12-27 09:30:12 +08:00
e4df0c6da1 优化代码生成字典组重复问题 2021-12-24 14:51:33 +08:00
2a421deaa3 update 更改项目介绍 2021-12-24 12:39:13 +08:00
7b23b6db6f 升级oshi到最新版本v5.8.6 2021-12-24 12:00:29 +08:00
5ca038d888 update 调整监控依赖 从 common 迁移到 framework 2021-12-24 11:36:02 +08:00
3454e34c7c update 更新 文档 satoken 说明 2021-12-22 13:23:21 +08:00
619a80228f update springboot 2.5.7 => 2.5.8 升级预防 log4j2 问题
update springboot-admin 2.5.4 => 2.5.5
update hutool 5.7.16 => 5.7.17
2021-12-22 10:22:00 +08:00
89de1beb6f update 优化web拦截器 使用原生接口处理 默认非生产环境开启 2021-12-22 10:19:57 +08:00
b6442b4640 Merge remote-tracking branch 'ruoyi-vue/master' into dev
# Conflicts:
#	pom.xml
#	ruoyi-common/src/main/java/com/ruoyi/common/utils/sql/SqlUtil.java
2021-12-22 10:10:29 +08:00
be412faf6c 升级fastjson到最新版1.2.79 2021-12-21 13:32:40 +08:00
fd3a699ad8 SQL工具类新增检查关键字方法 2021-12-21 13:32:28 +08:00
4c99cea3e4 update 更新批处理演示案例注释说明 2021-12-21 11:18:03 +08:00
1d54ef57c7 update 更新 nginx 配置文件关于 https 可能遇到的问题与解决方案说明 2021-12-21 10:54:57 +08:00
673b225da2 Merge remote-tracking branch 'ruoyi-vue/master' into dev
# Conflicts:
#	ruoyi-ui/vue.config.js
2021-12-20 14:34:05 +08:00
c3fe137720 Merge remote-tracking branch 'ruoyi-vue/master' into dev
# Conflicts:
#	ruoyi-ui/package.json
#	ruoyi-ui/vue.config.js
2021-12-20 14:32:21 +08:00
c28aa299bd 新增使用Gzip解压缩静态文件地址 2021-12-20 14:25:52 +08:00
b2189ae965 集成compression-webpack-plugin插件实现打包Gzip压缩 2021-12-20 10:00:26 +08:00
a3504dac6e Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue into dev
 Conflicts:
	pom.xml
	ruoyi-common/src/main/java/com/ruoyi/common/core/controller/BaseController.java
	ruoyi-common/src/main/java/com/ruoyi/common/utils/PageUtils.java
	ruoyi-ui/package.json
	ruoyi-ui/src/main.js
	ruoyi-ui/src/router/index.js
	ruoyi-ui/src/store/modules/permission.js
	ruoyi-ui/vue.config.js
2021-12-20 09:47:56 +08:00
a028b566ed 集成compression-webpack-plugin插件实现打包Gzip压缩 2021-12-20 09:46:17 +08:00
ca2405c104 升级log4j2到安全版本,防止漏洞风险 2021-12-19 19:56:53 +08:00
08f4ae04e1 update 更新 jdbc 配置参考博客地址 2021-12-19 02:05:31 +08:00
83d69ba507 add [重磅更新] 增加 jdbc 批处理参数 大幅提升批量操作性能 对原生语句与 MP 均有效 2021-12-18 22:59:55 +08:00
63cb34b563 update 优化 pr 调整导包位置 2021-12-18 18:34:23 +08:00
271e42176c !126 自动生成代码未引入此依赖 import com.baomidou.mybatisplus.extension.plugins.pag
Merge pull request !126 from 抓蛙师/auto-7465549-dev-1639814849312
2021-12-18 10:19:34 +00:00
e5647793ce 路由支持单独配置菜单或角色权限 2021-12-18 16:48:31 +08:00
b87e45ce32 自动生成代码未引入此依赖
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
2021-12-18 16:07:24 +08:00
903b5aebca 新增图片预览组件 2021-12-18 12:23:59 +08:00
7492dcc9e6 请求分页方法设置成通用方便灵活调用 2021-12-18 12:22:41 +08:00
5d2b162bea add 增加 DataPermissionHelper 类 便于操作数据权限变量 2021-12-17 21:52:11 +08:00
3fce90dbb9 update 优化数据权限缓存合并为一个 标注版本注释 2021-12-17 21:50:14 +08:00
d40b9324ca add oss下载增加 loading 层 2021-12-17 17:53:19 +08:00
6875935d37 fix 修复 集群雪花id重复问题 使用网卡信息绑定生成 2021-12-17 13:47:24 +08:00
8978012f9d 修复打包后字体图标偶现的乱码问题 2021-12-17 11:36:15 +08:00
7cf4a5da87 !391 修改重置表单bug
Merge pull request !391 from 18297093310/jieoschina-master-patch-51652
2021-12-17 03:17:16 +00:00
47b67331d4 修改重置表单bug 2021-12-17 03:06:25 +00:00
6e14601c7c 修复版本差异导致的懒加载报错问题 2021-12-16 16:34:20 +08:00
3546ac2854 fix 修复 redisson 集群模式 路径未匹配协议头问题 2021-12-16 15:37:31 +08:00
d600cdd8a0 add 代码生成增加 vue3 页面模板 2021-12-16 15:09:35 +08:00
d2c6e27d07 Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue into dev
 Conflicts:
	ruoyi-ui/src/views/system/user/index.vue
2021-12-16 14:21:04 +08:00
8041ced02d update 数据权限增加全局缓存 提高处理性能 减少重复处理 2021-12-16 13:58:52 +08:00
d81056cbe7 update 修改 缓存懒加载 为 false 默认启动预加载数据 2021-12-16 13:55:14 +08:00
44e8a012e2 update 去除 jdk17 标签 由于很多组件还未适配 导致一些问题 2021-12-16 12:10:42 +08:00
30483dacfb update 回滚错误修改 2021-12-16 11:52:55 +08:00
9d81d95700 update 代码生成 数据库功能使用 mapper 操作 规范用法避免滥用 2021-12-16 11:45:58 +08:00
e6b45d4cdb update 数据权限注解支持类标注 2021-12-16 10:54:44 +08:00
c2e28b5d94 update 修改 基础方法返回空判断 优化返回值 2021-12-16 10:54:26 +08:00
fef7ead0d5 新增Vue3前端代码生成模板 2021-12-16 09:51:11 +08:00
06aef0587a 用户导入提示溢出则显示滚动条 2021-12-16 09:50:26 +08:00
bf7c259cdd !390 fix: cron组件中周回显bug
Merge pull request !390 from fuzui/fix_week_echo_in_cron_component
2021-12-16 01:45:14 +00:00
43d76e5990 fix: cron组件中周回显bug 2021-12-16 02:18:48 +08:00
ffde310d30 update qiniu 7.8.0 => 7.9.0
update minio 8.3.3 => 8.3.4
2021-12-16 00:13:04 +08:00
44bc7dd9a5 update 修改已过期方法 调整编译警告 2021-12-16 00:11:38 +08:00
9e5b64e1b7 Merge remote-tracking branch 'origin/dev' into dev 2021-12-15 23:33:57 +08:00
2599073f56 fix 修复数据权限 兜底sql处理逻辑问题 2021-12-15 23:33:51 +08:00
a2d49f9981 update 更改演示案例多数据源注解 2021-12-15 17:28:41 +08:00
877a9d510b update tlog 1.3.5 => 1.3.6 修复 jdk17 不兼容问题 2021-12-15 15:33:31 +08:00
2455d0b859 add 增加 自定义 Xss 校验注解 用户导入增加 Bean 校验 2021-12-15 15:03:44 +08:00
b3c3afc2b4 Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue into dev
 Conflicts:
	pom.xml
	ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java
	ruoyi-system/src/main/java/com/ruoyi/system/domain/SysNotice.java
	ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java
2021-12-15 14:12:36 +08:00
3f97d19381 update [重磅更新] 重构分页 简化使用 2021-12-15 13:29:54 +08:00
3ab3d49055 update 清除警告 2021-12-15 13:23:16 +08:00
bd89cc0287 update ServicePlusImpl 功能 下沉到 BaseMapperPlus 2021-12-15 12:17:04 +08:00
d365a52cd6 自定义xss校验注解实现 2021-12-15 10:50:10 +08:00
5e38e054a7 update hutool 工具 改为单包引入 减少无用依赖 2021-12-15 10:44:50 +08:00
317f6d5c87 fix 修复代码生成 sql异常 屏蔽代码生成数据权限过滤 2021-12-14 23:47:59 +08:00
c876776a25 update 更正包名书写错误 2021-12-14 18:00:38 +08:00
e1c7115d8c 升级log4j2到安全版本,防止漏洞风险 2021-12-14 12:09:57 +08:00
bb4d75aff0 升级log4j2到安全版本,防止漏洞风险 2021-12-14 10:33:25 +08:00
c5dbd04c9c fix 修复数据权限 仅自己 相关问题 2021-12-14 10:11:16 +08:00
2a8a72a085 add 新增 Vue3 分支(由于组件还未完善 仅供学习) 2021-12-13 20:33:31 +08:00
29c46a15f9 Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue into dev
 Conflicts:
	README.md
	pom.xml
	ruoyi-admin/pom.xml
	ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysProfileController.java
	ruoyi-admin/src/main/resources/application.yml
	ruoyi-common/pom.xml
	ruoyi-framework/pom.xml
	ruoyi-generator/pom.xml
	ruoyi-job/pom.xml
	ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/JobInvokeUtil.java
	ruoyi-system/pom.xml
	ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysDeptMapper.java
	ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysMenuMapper.java
	ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysPostMapper.java
	ruoyi-system/src/main/java/com/ruoyi/system/service/ISysDeptService.java
	ruoyi-system/src/main/java/com/ruoyi/system/service/ISysMenuService.java
	ruoyi-system/src/main/java/com/ruoyi/system/service/ISysPostService.java
	ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java
	ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysMenuServiceImpl.java
	ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysPostServiceImpl.java
	ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java
	ruoyi-system/src/main/resources/mapper/system/SysDeptMapper.xml
	ruoyi-system/src/main/resources/mapper/system/SysMenuMapper.xml
	ruoyi-system/src/main/resources/mapper/system/SysPostMapper.xml
	ruoyi-ui/package.json
	ruoyi-ui/src/directive/index.js
	ruoyi-ui/src/plugins/download.js
	ruoyi-ui/src/views/index.vue
	ruoyi-ui/src/views/monitor/online/index.vue
	ruoyi-ui/src/views/system/user/authRole.vue
	ruoyi-ui/src/views/system/user/index.vue
	ruoyi-ui/src/views/tool/gen/basicInfoForm.vue
	ruoyi-ui/src/views/tool/gen/genInfoForm.vue
2021-12-13 12:37:36 +08:00
aae3fe5305 update [重大更新] 重写数据权限实现 2021-12-13 03:49:05 +00:00
2743785aaf 修复多参数逗号分隔的问题 2021-12-13 10:11:34 +08:00
4d92ef22c3 fix 修复代码生成 导出注解错误 2021-12-13 10:03:29 +08:00
79fc16eeb7 fix 修复代码生成 导出注解错误 2021-12-13 10:02:32 +08:00
2a235917dc 优化下载解析blob异常提示 2021-12-10 10:03:25 +08:00
8a5c8d0db5 update 补全缺失导包 2021-12-09 11:52:27 +08:00
bcd5b713f8 fix 修复 SysOssConfig 主键类型错误 2021-12-09 11:50:34 +08:00
a9488ba3c9 update 多数据源切换标注过期 3.6.0 移除 推荐使用原生注解 2021-12-09 11:50:25 +08:00
be13e3494a update redisson 3.16.4 => 3.16.6
update dynamic-ds 3.4.1 => 3.5.0
2021-12-09 11:49:00 +08:00
a62d65a9b8 fix 修复 TreeBuildUtils 顶节点不为 0 问题 2021-12-09 11:48:55 +08:00
44ce6774dc 代码生成预览支持复制内容 2021-12-09 09:57:02 +08:00
b911d7f78f 自定义文字复制剪贴指令 2021-12-09 09:56:11 +08:00
4644176e26 升级clipboard到最新版本2.0.8 2021-12-09 09:52:44 +08:00
df6759b033 remove 删除无用注入 2021-12-07 17:41:50 +08:00
bf8bac2bcc fix 关于 Undertow 的错误说明 2021-12-07 17:06:11 +08:00
37def02ee1 fix 修复sql关键字处理 防止解析器报错 2021-12-07 15:16:37 +08:00
09dfb25d73 update 修改 健康检查权限 改为用户放行 提高安全性 2021-12-07 12:20:21 +08:00
850b98337b 修正用户分配角色属性错误 2021-12-06 20:58:10 +08:00
7f2921f26b !382 update 优化查询用户的角色组、岗位组代码
Merge pull request !382 from 疯狂的狮子Li/update
2021-12-06 12:35:59 +00:00
836017f2b9 !381 fix 修复主键溢出问题 将查询返回类型改为 Long
Merge pull request !381 from 疯狂的狮子Li/fix
2021-12-06 12:34:52 +00:00
ed22f395ba update 更新 redis.conf 配置文件 标注key监听器配置 2021-12-06 20:25:33 +08:00
bcbc7c1d47 update 更新 RedisUtils 增加 注册监听器方法 2021-12-06 20:22:45 +08:00
1445d6d24a update 更新 RedisUtils 返回客户端实例 2021-12-06 19:52:27 +08:00
4de4763baf update 优化查询用户的角色组、岗位组代码 2021-12-06 18:32:51 +08:00
8362fe1b39 update 优化查询用户的角色组、岗位组代码 2021-12-06 14:48:04 +08:00
258dc16cfd update 更新 jdk 版本说明 暂不支持 jdk17 2021-12-06 14:36:59 +08:00
8f8e796c77 update tlog 1.3.4 => 1.3.5 启用 tlog 自动配置 2021-12-06 14:36:38 +08:00
a39a98cda9 update 移除 包错误引用 2021-12-06 14:35:55 +08:00
90ba39593a update 声明 cglib 依赖 控制版本 2021-12-06 12:12:20 +08:00
c3061a19a2 remove 移除过期工具 2021-12-06 11:01:07 +08:00
e11a6163dd update 禁止所有工具类实例化 优化代码书写规范 2021-12-06 10:59:54 +08:00
1b752c35cc update 使用 Cglib 重构 BeanCopyUtils 性能优异 2021-12-06 10:40:57 +08:00
8b9d3541dd update LoginUser 增加角色缓存 优化角色权限代码 2021-12-03 19:25:38 +08:00
d4f49b10d7 update 重构代码生成分页相关 基于新分页方法 2021-12-03 15:58:16 +08:00
5ba39c0086 update 重构分页 基于 分页新方法 2021-12-03 15:57:58 +08:00
b5db6fe186 update 重构分页工具 使用分页实体类 过期方法标注过期 3.6.0 移除 2021-12-03 15:57:11 +08:00
8d2886e1ca add 增加 分页查询实体类 2021-12-03 15:56:19 +08:00
965ebd0f03 fix 修复主键溢出问题 将查询返回类型改为 Long 2021-12-03 11:11:43 +08:00
cb306b0793 remove 移除过期 用户导入 2021-12-03 10:45:31 +08:00
c5dc08e082 update 调整 角色查询部门 返回值类型 2021-12-03 10:45:04 +08:00
b00c6dd89b !120 selectPostListByUserId方法出参调整为Long
Merge pull request !120 from zendwang/dev
2021-12-03 02:40:05 +00:00
2fd28ca5c8 update 更新 nginx 演示环境配置 2021-12-02 21:07:43 +08:00
14a05ddaca !119 系统用户自定义导入时初始密码加密优化
Merge pull request !119 from zendwang/dev
2021-12-02 12:37:08 +00:00
209654fdff fix selectPostListByUserId方法出参调整为Long 2021-12-02 20:13:47 +08:00
f30aa02e7c fix 系统用户自定义导入时初始密码加密优化 2021-12-02 19:48:56 +08:00
dd4374229b fix 修复更改密码问题 由于移除redis上存储的密码 导致找不到缓存内的旧密码 2021-12-02 19:11:36 +08:00
7eedf37149 update 优化 pr !118 代码结构 2021-12-02 18:47:18 +08:00
7aea32f48b !118 为Transactional注解设置rollback属性
Merge pull request !118 from zendwang/dev
2021-12-02 10:44:24 +00:00
ac38f7b909 fix 为Transactional注解设置rollback属性 2021-12-02 18:34:49 +08:00
2c3f1c28e5 tomcat update 2021-12-02 16:31:51 +08:00
e8ee5ad691 update 用户登录 支持校验错误次数锁定登录 2021-12-02 16:04:45 +08:00
5322f5f707 update 常量类 接口化 2021-12-02 14:18:20 +08:00
408f5055a9 update 通用权限服务 迁移回 ruoyi-framework 模块 2021-12-02 14:02:00 +08:00
6bfae2652f 若依 3.8.0 2021-12-01 08:53:11 +08:00
9036370d67 remove 删除 jjwt 无用依赖 2021-11-30 17:34:31 +08:00
9bc730866f 🎉 RuoYi-Vue3(Vue3 Element Plus Vite)版本 2021-11-30 11:15:33 +08:00
a2d3f987c0 优化代码 2021-11-30 11:15:17 +08:00
255b5f2f07 update 更改前端工程文件版本号 2021-11-30 11:11:23 +08:00
f43a5cb244 update 更改前端工程文件版本号 2021-11-30 11:11:03 +08:00
bf4ac3ad7a !378 fix: crontab组件bug
Merge pull request !378 from fuzui/fix_cron_tool
2021-11-30 03:03:08 +00:00
4f0e73ba97 update 使用 hutool-jwt 替换老旧 jjwt 依赖 2021-11-30 10:33:35 +08:00
f28a91969a fix: crontab组件中规范数据范围、冗余代码去除以及部分通配符说明 2021-11-30 02:08:08 +08:00
ca285f5e53 fix: crontab组件周显示及计算bug 2021-11-30 00:22:23 +08:00
34f2552cad fix: crontab组件互斥bug 2021-11-30 00:17:12 +08:00
c6fe27b040 update 调整 OSS 表字段内容长度 2021-11-29 17:07:41 +08:00
3e2ddb3b25 fix 修复 count 语法异常 2021-11-29 17:07:41 +08:00
230d19a7aa update 调整 OSS 表字段内容长度 2021-11-29 16:46:27 +08:00
d2b7843d97 fix 修复 count 语法异常 2021-11-29 16:41:20 +08:00
ebc6617a8e Merge remote-tracking branch 'origin/dev' 2021-11-29 14:01:44 +08:00
dbba894544 发布 v3.4.0 2021-11-29 14:01:28 +08:00
65eb873f9a Merge remote-tracking branch 'origin/dev' 2021-11-29 13:59:15 +08:00
52673152cc 发布 v3.4.0 2021-11-29 13:58:42 +08:00
36fd16562e Merge remote-tracking branch 'origin/dev' 2021-11-29 13:31:37 +08:00
a8a4f2101d add 增加 mapper 目录下 package-info 防止建错目录 2021-11-29 09:59:53 +08:00
f46bd8b6ba update 更新 Validation 框架国际化说明 2021-11-28 21:47:08 +08:00
a627de02c7 Merge remote-tracking branch 'origin/dev' into dev 2021-11-28 21:04:13 +08:00
a94a0589dd update [重磅更新] Validator 校验框架支持国际化 2021-11-28 21:03:48 +08:00
81755a280d Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue into dev
 Conflicts:
	ruoyi-ui/src/utils/index.js
	ruoyi-ui/src/views/register.vue
2021-11-28 15:10:05 +08:00
89d776acb5 fix 修复 OSS 工厂 未实例化服务更新加载问题 2021-11-27 16:36:11 +08:00
daf660e66d update 更改 excel 方法注释 更清晰明显用法 2021-11-27 13:20:50 +08:00
e4020faff3 update 使用导入新写法 重构系统用户导入 2021-11-27 12:57:21 +08:00
e11b727584 update 修改移除无用回执信息 2021-11-27 12:43:34 +08:00
0a36a94b73 update 报错增加 excel 表头信息 2021-11-27 11:18:41 +08:00
89e7cb19b9 注册成功提示类型success 2021-11-26 18:11:57 +08:00
fa2bdcd5ac update 抽象 Excel 导入支持自定义监听器 2021-11-26 18:11:41 +08:00
ea71c9b214 !376 camelCase中应该转换下划线,而不是横杠
Merge pull request !376 from khejing/master
2021-11-26 10:07:58 +00:00
c00e397405 update 抽象 Excel 导入支持自定义监听器 2021-11-26 18:06:44 +08:00
a2a2640d29 update 调整校验异常 返回完整信息 2021-11-26 18:05:47 +08:00
7c4a104823 !113 add 新增 excel 导入支持开启 Validator 数据验证
Merge pull request !113 from Yjoioooo/auto-5403234-dev-1637903026810
2021-11-26 08:40:42 +00:00
7892ec5a59 fix 修复重复提交不生效问题 由于概念不同 使用 RedisUtils 重构 2021-11-26 16:32:56 +08:00
e5fd1f76db camelCase中应该是下划线,而不是横杠 2021-11-26 08:26:45 +00:00
6502f21072 update 修改不规范命名 2021-11-26 05:57:28 +00:00
48fd65d7f8 update satoken 标注为公测 2021-11-26 13:45:12 +08:00
1010ccca4d update 更新 RedisUtils set保留ttl 兼容 5.X redis版本 2021-11-26 13:34:18 +08:00
c21ff85b57 update 增加excel导入样例 2021-11-26 13:02:59 +08:00
c3bb4d2a61 add 新增导入支持开启Validator数据验证,支持开启导入异常行继续读取,支持返回导入回执 2021-11-26 13:01:00 +08:00
d2b7f8ef0f remove 删除无用 js 文件 2021-11-25 19:47:34 +08:00
af25588b88 Merge remote-tracking branch 'ruoyi-vue/master' into dev
# Conflicts:
#	pom.xml
#	ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysProfileController.java
#	ruoyi-framework/src/main/java/com/ruoyi/framework/config/FilterConfig.java
#	ruoyi-generator/pom.xml
#	ruoyi-generator/src/main/java/com/ruoyi/generator/util/VelocityInitializer.java
#	ruoyi-generator/src/main/java/com/ruoyi/generator/util/VelocityUtils.java
#	ruoyi-generator/src/main/resources/vm/js/api.js.vm
#	ruoyi-generator/src/main/resources/vm/vue/index-tree.vue.vm
#	ruoyi-generator/src/main/resources/vm/vue/index.vue.vm
#	ruoyi-generator/src/main/resources/vm/xml/mapper.xml.vm
#	ruoyi-quartz/src/main/java/com/ruoyi/quartz/config/ScheduleConfig.java
#	ruoyi-ui/package.json
#	ruoyi-ui/src/api/monitor/server.js
#	ruoyi-ui/src/components/RuoYi/Doc/index.vue
#	ruoyi-ui/src/components/RuoYi/Git/index.vue
#	ruoyi-ui/src/components/SizeSelect/index.vue
#	ruoyi-ui/src/layout/components/Sidebar/Logo.vue
#	ruoyi-ui/src/layout/components/TagsView/index.vue
#	ruoyi-ui/src/layout/index.vue
#	ruoyi-ui/src/main.js
#	ruoyi-ui/src/plugins/download.js
#	ruoyi-ui/src/router/index.js
#	ruoyi-ui/src/store/modules/permission.js
#	ruoyi-ui/src/store/modules/settings.js
#	ruoyi-ui/src/store/modules/tagsView.js
#	ruoyi-ui/src/store/modules/user.js
#	ruoyi-ui/src/views/login.vue
#	ruoyi-ui/src/views/monitor/job/log.vue
#	ruoyi-ui/src/views/system/dict/data.vue
#	ruoyi-ui/src/views/system/role/index.vue
#	ruoyi-ui/src/views/system/user/authRole.vue
#	ruoyi-ui/src/views/system/user/index.vue
#	ruoyi-ui/src/views/system/user/profile/resetPwd.vue
#	ruoyi-ui/src/views/system/user/profile/userAvatar.vue
#	ruoyi-ui/src/views/system/user/profile/userInfo.vue
2021-11-25 19:39:53 +08:00
7546ef649c update springboot 2.5.6 => 2.5.7 2021-11-25 19:14:52 +08:00
2a3bf1d994 remove 删除无用 redis 依赖配置 2021-11-25 19:14:30 +08:00
664192da0b 升级velocity到最新版本2.3(语法升级) 2021-11-25 15:18:02 +08:00
9fc3e220a7 防止修改用户个人信息接口修改用户名 2021-11-25 14:00:27 +08:00
64f6a69d9a 修复代码生成复选框字典遗漏问题 2021-11-25 13:54:49 +08:00
16734b1d88 升级velocity到最新版本2.3 2021-11-24 15:03:04 +08:00
31106c91fb 修复使用 this.$options.data 报错问题 2021-11-24 15:00:51 +08:00
026a427103 优化前端代码 2021-11-24 14:47:24 +08:00
7a4f36c00e update 优化时间查询语句 2021-11-24 11:24:15 +08:00
1f3ef4ffe1 update 初始化数据转移到 ApplicationRunner 统一处理 2021-11-24 10:59:18 +08:00
c364836a9d Merge remote-tracking branch 'origin/dev' into dev 2021-11-24 10:58:17 +08:00
97a12075b1 update 初始化数据转移到 ApplicationRunner 统一处理 2021-11-24 10:58:10 +08:00
bafb1372a7 !375 删除代码生成中冗余的导出方法
Merge pull request !375 from fuzui/delete_redundancy_gen_export_function
2021-11-24 00:39:07 +00:00
b4f032fab4 删除代码生成中冗余的导出方法 2021-11-24 02:48:35 +08:00
d36d944b3a remove 删除 quartz 相关 sql 数据 2021-11-23 21:53:53 +08:00
7af22453ba update 更新 redis.conf 存储策略 aof 与 rdb 配置参数 2021-11-23 20:19:51 +08:00
d0c4b5bc76 add 增加 RedisUtils set 保留 TTL 有效期方法 2021-11-23 10:20:44 +08:00
4f194aa101 升级js-cookie到最新版本3.0.1 2021-11-22 18:07:33 +08:00
ef4bfde4a8 优化提示信息 2021-11-22 18:06:44 +08:00
65a1245a03 update OSS 模块 整体重命名 消除歧义 2021-11-22 09:48:22 +08:00
486e4f8dd3 update 删除无用字段 2021-11-22 09:46:45 +08:00
4cfbd8a9d2 update OSS 模块 整体重命名 消除歧义 2021-11-22 09:45:46 +08:00
7ab51b8960 update 规范 ICloudStorageStrategy 接口函数 2021-11-22 09:34:26 +08:00
18cbd96280 update satoken 标记生产可用 2021-11-22 09:29:58 +08:00
2cdea69719 add 增加 缓存懒加载 开关 2021-11-22 02:46:13 +08:00
6c053b6266 update 优化 RedisUtils.getCacheObject 的返回值处理 2021-11-22 02:45:50 +08:00
20eea9914e update 基于 DictService 重构 Excel 内字典查询功能 2021-11-22 02:44:46 +08:00
6d3f4f5a04 update 抽象 DictService 通用 字典服务 2021-11-22 02:43:22 +08:00
20e782eb21 update 抽象 ConfigService 通用 参数配置服务 2021-11-22 02:42:59 +08:00
e30fa57ab4 update DictUtils 字典工具类 标记过期 3.5.0 版本移除 使用 DictService 代替 2021-11-22 02:42:14 +08:00
ef0b07d5c4 update 更新 RepeatSubmit 注解 aop 处理 针对特殊参数进行过滤 2021-11-22 00:57:49 +08:00
b9b1ec8f41 Merge remote-tracking branch 'origin/dev' into dev 2021-11-21 01:39:50 +08:00
019526fbe9 update 解耦 LoginUser 与 SysUser 强关联 2021-11-21 01:39:43 +08:00
421593c0ba 添加新群号:101539465 2021-11-20 12:09:53 +08:00
91ad85aec1 添加新群号:264312783 2021-11-19 15:20:54 +08:00
d1eacc1d1c 新增tab对象简化页签操作 2021-11-19 14:53:40 +08:00
e41dd8a0f1 !370 fix 修复关闭 xss 功能导致可重复读 RepeatableFilter 失效
Merge pull request !370 from 疯狂的狮子Li/master
2021-11-19 06:53:16 +00:00
5e1d4f215d fix 修复关闭 xss 功能导致可重复读 RepeatableFilter 失效 2021-11-19 13:06:51 +08:00
9a7bb81cd0 fix 修复关闭 xss 功能导致可重复读 RepeatableFilter 失效 2021-11-19 13:01:30 +08:00
321bb010cb update 更新注解参数类型 去除多余警告 2021-11-18 19:28:39 +08:00
e24a79f87b update 调整 bat 脚本 编码格式 2021-11-18 18:54:54 +08:00
2dd0add3e7 remove 删除无用日志配置 2021-11-18 18:49:10 +08:00
ce279ca360 Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue into dev
 Conflicts:
	ruoyi-generator/src/main/resources/vm/java/serviceImpl.java.vm
	ruoyi-ui/package.json
	ruoyi-ui/src/utils/request.js
2021-11-18 18:43:34 +08:00
fcf606acde 升级jsencrypt到最新版本3.2.1 2021-11-18 17:50:49 +08:00
084907eeca !369 代码生成模板缺少事务
Merge pull request !369 from lihy2021/N/A
2021-11-18 09:47:35 +00:00
f8487f581b update 补全所有接口 单参数接口文档 2021-11-18 17:01:23 +08:00
40c9559d9e update springboot-admin 2.5.3 => 2.5.4 2021-11-17 20:11:56 +08:00
531e0ef918 remove 删除 quartz 过时页面 2021-11-17 19:42:38 +08:00
2781655b0a update 适配 ruoyi 关于优化导出数据操作 2021-11-17 19:42:14 +08:00
64add90edd Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue into dev
 Conflicts:
	ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/CaptchaController.java
	ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/SysLogininforController.java
	ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/SysOperlogController.java
	ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysConfigController.java
	ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDictDataController.java
	ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDictTypeController.java
	ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysPostController.java
	ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRoleController.java
	ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java
	ruoyi-common/src/main/java/com/ruoyi/common/config/RuoYiConfig.java
	ruoyi-common/src/main/java/com/ruoyi/common/utils/http/HttpUtils.java
	ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java
	ruoyi-generator/src/main/resources/vm/java/controller.java.vm
	ruoyi-generator/src/main/resources/vm/vue/index.vue.vm
	ruoyi-quartz/src/main/java/com/ruoyi/quartz/controller/SysJobController.java
	ruoyi-quartz/src/main/java/com/ruoyi/quartz/controller/SysJobLogController.java
	ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/JobInvokeUtil.java
	ruoyi-ui/package.json
	ruoyi-ui/src/api/monitor/logininfor.js
	ruoyi-ui/src/api/monitor/operlog.js
	ruoyi-ui/src/api/system/config.js
	ruoyi-ui/src/api/system/dict/data.js
	ruoyi-ui/src/api/system/dict/type.js
	ruoyi-ui/src/api/system/post.js
	ruoyi-ui/src/api/system/role.js
	ruoyi-ui/src/api/system/user.js
	ruoyi-ui/src/main.js
	ruoyi-ui/src/utils/request.js
	ruoyi-ui/src/views/monitor/job/index.vue
	ruoyi-ui/src/views/monitor/job/log.vue
	ruoyi-ui/src/views/monitor/logininfor/index.vue
	ruoyi-ui/src/views/monitor/operlog/index.vue
	ruoyi-ui/src/views/system/config/index.vue
	ruoyi-ui/src/views/system/dict/data.vue
	ruoyi-ui/src/views/system/dict/index.vue
	ruoyi-ui/src/views/system/post/index.vue
	ruoyi-ui/src/views/system/role/index.vue
	ruoyi-ui/src/views/system/user/index.vue
2021-11-17 19:14:03 +08:00
8de93d35ed 代码生成模板缺少事务 2021-11-17 07:56:24 +00:00
eb844e3260 fix 修复 OssFactory 在程序启动未调用api 没有初始化 导致无法订阅配置更改问题 2021-11-17 13:50:58 +08:00
cedd2d1daf 优化导出数据操作 2021-11-17 11:57:17 +08:00
81d04fb31f Merge remote-tracking branch 'origin/dev' into dev 2021-11-17 10:46:18 +08:00
caba6fb01e update 调度中心 集成监控客户端 注册到监控中心 2021-11-17 10:45:58 +08:00
1c8d44b309 update 监控中心 集成监控客户端 实现自监控 2021-11-17 10:45:32 +08:00
984098abce fix: 修复返回参数的数据类型错误的问题 2021-11-16 20:47:26 +08:00
ead6da4760 update 更新页面与文档项目介绍 2021-11-16 18:54:53 +08:00
2ab96587ef 任务参数忽略双引号中的逗号 2021-11-16 16:05:15 +08:00
cb9c0e79eb 升级core-js到最新版本3.19.1 2021-11-16 14:15:17 +08:00
96d2b2d6b8 !368 【轻量级 PR】: 统一全局配置文件
Merge pull request !368 from XTvLi/master
2021-11-16 05:43:07 +00:00
b374ff4d6d update 优化字典工具写法 2021-11-15 16:54:34 +08:00
149b136e0b fix 修复用户导入字典使用错误 2021-11-14 22:27:36 +08:00
5389663b72 fix 修复 临时文件存储位置 相对路径问题 2021-11-12 21:16:45 +08:00
f99e24bf82 update 更新文档 演示环境 2021-11-12 20:39:11 +08:00
a610c5c8c6 update 更新文档 演示环境 2021-11-12 20:38:49 +08:00
874cf18566 fix 修复 配置应用前缀路径书写问题 2021-11-12 19:43:49 +08:00
53cb0826bc update 升级 swagger 配置 使用 knife4j 增强模式 2021-11-12 13:15:32 +08:00
6904f38ea2 update 调整代码格式化 2021-11-11 15:31:49 +08:00
223ff4ebff fix 分页工具 排序字段 null 处理 2021-11-11 12:47:26 +08:00
d2ec3e7d9a update 移除 sql 脚本 quartz 相关表数据 2021-11-10 14:10:25 +00:00
b00171366f 统一全局配置内容, 删除临时调用配置文件 2021-11-10 18:17:43 +08:00
4e817a1109 升级axios到最新版本0.24.0 2021-11-10 11:14:50 +08:00
d185d4e4cc 增加sendGet无参请求方法 2021-11-10 11:13:27 +08:00
3b574875cb update hutool 5.7.15 => 5.7.16
update okhttp 4.9.1 => 4.9.2
update spring-boot-admin 2.5.2 => 2.5.3
update redisson 3.16.3 => 3.16.4
update tlog 1.3.3 => 1.3.4
2021-11-10 10:07:28 +08:00
4d5048435c fix 修复 ruoyi 关于 配置应用前缀路径的bug 改为配置文件统一配置 2021-11-08 18:17:29 +08:00
57df7f8dfe fix 修复 OSS 七牛云 token 过期未刷新问题 2021-11-08 14:36:07 +08:00
74b36fbd98 !110 提高不同类型数据库的兼容性
Merge pull request !110 from phanes/dev
2021-11-07 12:15:03 +00:00
8ea56d3b22 update 减少使用特定数据库函数 2021-11-07 11:58:35 +08:00
019f585c83 update 补全通用日志服务 注释 2021-11-04 19:01:33 +08:00
c7c9bd6b08 fix 修复 用户逻辑删除 差异问题 2021-11-04 18:49:46 +08:00
b132f04f71 fix 修复 SysLoginController 接口文档书写错误问题 2021-11-04 14:18:38 +08:00
2f21f293c1 update 基于 hutool 封装树构建工具 重构部门与菜单树结构返回 2021-11-04 10:32:18 +08:00
5b3c390e08 remove 移除 MybatisPlusRedisCache 二级缓存 2021-11-03 15:04:10 +08:00
8a93371baa remove 移除 feign 相关代码与依赖 2021-11-03 15:02:29 +08:00
95dcae1a85 remove 移除 quartz 相关代码与依赖 2021-11-03 14:46:12 +08:00
03e2ff587e 同步 ruoyi 2021-11-03 13:58:59 +08:00
1ea73a67ca Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue into dev
 Conflicts:
	README.md
	ruoyi-common/src/main/java/com/ruoyi/common/constant/Constants.java
	ruoyi-common/src/main/java/com/ruoyi/common/utils/html/EscapeUtil.java
	ruoyi-common/src/main/java/com/ruoyi/common/utils/html/HTMLFilter.java
	ruoyi-common/src/main/java/com/ruoyi/common/utils/uuid/UUID.java
	ruoyi-quartz/src/main/java/com/ruoyi/quartz/controller/SysJobController.java
	ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java
	ruoyi-ui/src/api/login.js
	ruoyi-ui/src/views/index.vue
2021-11-03 13:58:45 +08:00
1d32420a27 add 增加 ValidatorUtils 校验框架工具 用于在非 Controller 的地方校验对象 2021-11-03 13:50:51 +08:00
9aa8438ced fix 修复通用实体 传参无法接收问题 2021-11-02 22:46:49 +08:00
0b35927b16 fix 修复通用实体 传参无法接收问题 2021-11-02 22:43:53 +08:00
bbbe83b737 添加新群号:101539465 2021-11-02 14:40:21 +08:00
06f06ce390 fix 修复 Linux 清除临时目录 导致上传找不到目录报错问题 2021-11-01 17:44:01 +08:00
cc4c52c998 任务屏蔽违规字符 2021-11-01 15:03:06 +08:00
bd09e5b11c 修复字符串无法被反转义问题 2021-11-01 15:02:47 +08:00
181f62c15e 回显数据字典键值修正 2021-11-01 14:40:00 +08:00
a2c8b0d13e fix 修复 xxl-job-admin 部署问题 2021-11-01 13:51:02 +08:00
c4e17ff847 fix 修复 xxl-job-admin 部署问题 2021-11-01 13:49:11 +08:00
3ae5ec92a5 登录/验证码请求headers不设置token 2021-11-01 13:29:27 +08:00
2fe919b6ce !361 优化一些布尔判断语法
Merge pull request !361 from 清溪先生/master
2021-11-01 05:28:59 +00:00
a8ab3ffd01 update 升级 docker 基础镜像 2021-11-01 09:55:14 +08:00
2c6e1f0db7 fix 修复 SysOss、SysOssConfig 未继承 BaseEntity 基础实体问题 2021-10-31 21:32:25 +08:00
cd0aad10b0 fix 修复 SysOss、SysOssConfig 未继承 BaseEntity 基础实体问题 2021-10-31 21:28:19 +08:00
da2cb61cae update 调整 pr !107 代码格式 2021-10-29 17:37:15 +08:00
e4c691fd5f !107 add 新增 Admin 监控 Bean 初始化 startup trace 监控插件
Merge pull request !107 from shenxinquan/auto-480232-dev-1635497752042
2021-10-29 09:36:13 +00:00
sxq
ea2e560bd9 去掉jfr相关类。 2021-10-29 17:28:33 +08:00
sxq
25321984fa 新增startup trace监控。 2021-10-29 16:55:42 +08:00
afbe1c98e6 !106 发布 v3.3.0
Merge pull request !106 from 疯狂的狮子Li/dev
2021-10-29 01:19:51 +00:00
d6e080d546 发布 v3.3.0 2021-10-29 09:14:49 +08:00
5c6f30a8a9 update RedisUtils 更新删除 hash 数据方法 2021-10-28 10:43:46 +08:00
e8e8ae9fd7 update minio 8.3.1 => 8.3.3 2021-10-28 10:43:02 +08:00
3353ead5d3 update 搜索框 更新文本域生成 用于模糊查询 2021-10-28 09:45:29 +08:00
160beb8e1c update jdk11 适配依赖 调整到 common 包 2021-10-28 09:44:57 +08:00
3f0d3ffb8a Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue into dev
 Conflicts:
	pom.xml
	ruoyi-common/pom.xml
	ruoyi-common/src/main/java/com/ruoyi/common/core/redis/RedisCache.java
	ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java
2021-10-28 09:40:02 +08:00
13c770b6be 优化一些布尔判断语法 2021-10-27 19:03:29 +08:00
2eb55528ec 升级spring-boot到最新版本2.5.6 2021-10-27 16:23:35 +08:00
839f631d6b 添加Jaxb依赖,防止jdk8以上出现的兼容错误 2021-10-27 16:22:57 +08:00
8faae71157 !359 update ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java.
Merge pull request !359 from Remenber_Ray/N/A
2021-10-27 07:37:19 +00:00
b87e0fa124 !358 update ruoyi-common/src/main/java/com/ruoyi/common/core/redis/RedisCache.java.
Merge pull request !358 from 雪丛/N/A
2021-10-27 07:34:47 +00:00
bb205a5cdb update 注释掉原定时任务相关sql 下个版本移除 2021-10-27 13:42:51 +08:00
7e3c9c1094 update 删除无用setUsername 使用自动注入 2021-10-27 13:26:24 +08:00
dbb2d8462b update 迁移所有脚本文件至script目录 2021-10-26 19:42:27 +08:00
3bf96c6cd7 update 删除重复依赖 补全演示demo注解参数 2021-10-26 19:09:50 +08:00
61375c4bbb Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue into dev
 Conflicts:
	ruoyi-common/pom.xml
2021-10-26 18:57:55 +08:00
2e4689d557 update 更新xxl-job执行器开关功能 2021-10-26 18:30:02 +08:00
b6596d021b 替换自定义验证注解 2021-10-26 17:22:20 +08:00
0628dc9b2f update ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java. 2021-10-26 08:02:48 +00:00
3117080be3 !105 1:升级springboot版本到2.5.6。 2:升级hutool版本到5.7.15。
Merge pull request !105 from shenxinquan/auto-480232-dev-1635232384088
2021-10-26 07:14:18 +00:00
sxq
16d6e11e94 1:升级springboot版本到2.5.6。
2:升级hutool版本到5.7.15。
2021-10-26 15:12:58 +08:00
790aa0d24b update ruoyi-common/src/main/java/com/ruoyi/common/core/redis/RedisCache.java.
增加删除Hash中的数据
2021-10-26 01:42:12 +00:00
d254340b9b fix 修正错别字 2021-10-25 18:33:26 +08:00
42a3117e2a Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue into dev
 Conflicts:
	pom.xml
	ruoyi-common/src/main/java/com/ruoyi/common/annotation/RepeatSubmit.java
	ruoyi-common/src/main/java/com/ruoyi/common/core/domain/AjaxResult.java
	ruoyi-common/src/main/java/com/ruoyi/common/utils/Threads.java
	ruoyi-common/src/main/java/com/ruoyi/common/utils/file/FileUtils.java
	ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/RateLimiterAspect.java
	ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleMapper.java
	ruoyi-system/src/main/java/com/ruoyi/system/service/ISysRoleService.java
	ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java
	ruoyi-system/src/main/resources/mapper/system/SysRoleMapper.xml
	ruoyi-ui/src/layout/components/Settings/index.vue
	ruoyi-ui/src/plugins/download.js
	ruoyi-ui/src/store/modules/permission.js
	ruoyi-ui/src/views/index.vue
	ruoyi-ui/src/views/monitor/server/index.vue
	ruoyi-ui/src/views/system/role/index.vue
	ry.bat
2021-10-25 18:24:55 +08:00
e47dcb10de fix 修复原生 任务调度中心 集成之后 字体图标被过滤问题 2021-10-25 18:03:44 +08:00
8a7dcf8a80 修正错别字 2021-10-25 10:26:00 +08:00
0c30ffa11f !354 update ruoyi-common/src/main/java/com/ruoyi/common/utils/Threads.java.
Merge pull request !354 from Remenber_Ray/N/A
2021-10-25 01:55:51 +00:00
0904bf6446 !355 fix 跨域访问之后 下载无法获取 download-filename
Merge pull request !355 from 疯狂的狮子Li/master
2021-10-25 01:55:23 +00:00
2173ed504d update 更新关于全局路径设置与文档链接 2021-10-24 17:23:15 +08:00
4583787759 fix 跨域访问之后 下载无法获取 download-filename 2021-10-24 17:13:04 +08:00
17550a5f4b update ruoyi-common/src/main/java/com/ruoyi/common/utils/Threads.java.
修复描述错误
2021-10-24 02:34:25 +00:00
a4558c32b2 解析blob响应是否登录失效 2021-10-23 10:23:32 +08:00
ef4fef3d56 update ry.sh. 2021-10-23 10:21:02 +08:00
3dbbc6a223 AjaxResult重写put方法,以方便链式调用 2021-10-22 16:23:08 +08:00
d3696f5223 !347 update ruoyi-common/src/main/java/com/ruoyi/common/core/domain/AjaxResult.java.
Merge pull request !347 from abbfun/N/A
2021-10-22 08:19:00 +00:00
b8a8b76c38 fix 修复跨域访问无权限获取请求头 download-filename 导致文件名为空问题 2021-10-22 12:38:33 +08:00
296e6171a1 update 补全国际化文件 2021-10-22 11:22:31 +08:00
2d7d137abd update ruoyi-common/src/main/java/com/ruoyi/common/core/domain/AjaxResult.java.
AjaxResult链式调用
2021-10-22 03:09:54 +00:00
336adbd056 update 统一格式化代码结构 2021-10-22 10:04:15 +08:00
32bfe334c0 update 整理删除无用注释 保证代码整洁 2021-10-21 18:41:56 +08:00
c1c4fb2ca4 update hutool 5.7.13 => 5.7.14
update qcloud.cos 5.6.55 => 5.6.58
update minio 8.3.0 => 8.3.1
2021-10-21 18:10:45 +08:00
6c9dc9ae51 update 修正pr 不规范写法 2021-10-21 17:40:44 +08:00
f4b619d1d1 update 修正注释错误 2021-10-21 10:10:30 +08:00
255c8a083e add 增加 RedisUtils 测试设置过期时间 案例 2021-10-21 09:33:13 +08:00
d0700172fa update 合并oss.sql至主sql 2021-10-20 15:30:39 +08:00
83ce927d16 add 前端增加 任务调度中心页面 与环境及nginx配置 2021-10-20 15:25:14 +08:00
809774d87c update 更新xxljob配置类 增加配置注解 2021-10-20 15:24:41 +08:00
6f3f89a0d3 update 更新xxljob默认sql执行器名称 2021-10-20 15:24:09 +08:00
a870a1c6bc update sql文件更新 xxljob控制台菜单 2021-10-20 15:23:51 +08:00
e04938666c fix 修复 xxl-admin 部分文件被忽略问题 2021-10-20 14:37:20 +08:00
c0eb3c53c1 update swagger组 顺序配置 2021-10-20 14:18:26 +08:00
b6443e0c01 update quartz改为保留一个版本 2021-10-20 13:53:36 +08:00
83922c5737 update 更新关于xxl-job说明 2021-10-20 13:44:10 +08:00
78cd6f36ef add 增加 ruoyi-xxl-job-admin 多环境配置 2021-10-20 13:32:53 +08:00
eed4e09282 update 从总输出模块剔除 ruoyi-quartz 切换至 ruoyi-job 2021-10-20 13:27:05 +08:00
aaa15b403a add [重大更新]增加 ruoyi-job 任务调度模块(基于xxl-job) 2021-10-20 13:22:45 +08:00
82f1f5d0cf update 优化xxl-job-admin相关pr代码 增加格式化日志输出与docker镜像 2021-10-20 13:07:16 +08:00
2b0452207e update admin监控增加日志文件输出 2021-10-20 13:06:42 +08:00
bc67d0b7b7 !103 集成xxl-job-admin控制台。
Merge pull request !103 from shenxinquan/auto-480232-dev-1634700780703
2021-10-20 04:43:32 +00:00
sxq
a8092ace32 初始化配置文件。 2021-10-20 11:58:14 +08:00
sxq
12d76e4f20 1:properties 换成yml 配置文件。
2:默认端口改成9100。
2021-10-20 11:56:17 +08:00
sxq
c60130e534 xxl-job-admin的sql 初始化文件。 2021-10-20 11:43:41 +08:00
sxq
3eeeb27d70 集成xxl-job-admin控制台。 2021-10-20 11:32:53 +08:00
c2a179e9dd 新增认证对象简化权限验证 2021-10-20 11:21:11 +08:00
8b6f7b4e4c !101 更新时间和用户注入问题
Merge pull request !101 from 抓蛙师/auto-7465549-dev-1634694016583
2021-10-20 01:41:24 +00:00
ce7097b498 更新时间和用户注入问题 2021-10-20 09:40:04 +08:00
60404a6564 update 调整不规范导包 2021-10-15 19:30:42 +08:00
519ea854d5 生产环境使用路由懒加载提升页面响应速度 2021-10-15 17:57:46 +08:00
e66d0e4f74 角色列表返回类型保持一致 2021-10-15 17:56:57 +08:00
9e0ec2b03c update 修改测试代码 测试通用实体通过 删除树实体不通用属性 2021-10-15 16:21:00 +08:00
36e501b457 update 通用数据注入改为适配通用实体类 2021-10-15 16:20:16 +08:00
284f47e76c update 代码生成 改为生成抽象实体 2021-10-15 16:19:51 +08:00
b47f8fd784 update 代码生成 改为生成抽象实体 2021-10-15 16:19:42 +08:00
37a8addf52 update feign 标记过期 2021-10-15 15:55:44 +08:00
a6fb88d74c update [重大更新]全业务 增加 接口文档注解 格式化代码 2021-10-15 15:19:42 +08:00
bb43b2853d update 前端增加默认国际化参数 2021-10-15 11:45:43 +08:00
ba1585de34 Merge remote-tracking branch 'origin/dev' into dev 2021-10-15 11:31:39 +08:00
6684812014 update 标记过期 推荐迁移至新框架 xxl-job 2021-10-15 11:31:26 +08:00
1419700c43 update 标记过期 推荐使用 spring-cache 2021-10-15 11:31:00 +08:00
14f6249031 update 包重命名 规范化 2021-10-15 11:30:39 +08:00
ea249c33fd update 包重命名 规范化 2021-10-15 11:30:24 +08:00
1c0b410f55 !97 fix 修改oss配置删除时删除缓存bug
Merge pull request !97 from 孤舟烟雨/auto-494979-dev-1634217979662
2021-10-14 14:21:52 +00:00
1eaea5c81c 修改oss配置删除时删除缓存bug 2021-10-14 21:26:03 +08:00
64ec206ecb update 更改上传数据回填 2021-10-14 17:28:13 +08:00
e7afea4cb7 升级oshi到最新版本v5.8.2 2021-10-14 16:20:18 +08:00
6d6271d6c9 修复五级以上菜单404问题 2021-10-14 16:19:46 +08:00
cbb0c98f98 add [重磅更新] 增加分布式日志框架 TLog 2021-10-11 17:59:27 +08:00
aaf9f57459 update 去除登录警告 2021-10-11 16:49:21 +08:00
2006e5e51e update springboot-admin 2.5.1 => 2.5.2 2021-10-11 09:43:03 +08:00
741a5b275b Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue into dev
 Conflicts:
	pom.xml
	ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRegisterController.java
	ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/TestController.java
	ruoyi-admin/src/main/resources/mybatis/mybatis-config.xml
	ruoyi-common/src/main/java/com/ruoyi/common/core/domain/model/LoginUser.java
	ruoyi-common/src/main/java/com/ruoyi/common/utils/http/HttpUtils.java
	ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java
	ruoyi-framework/src/main/java/com/ruoyi/framework/config/ResourcesConfig.java
	ruoyi-framework/src/main/java/com/ruoyi/framework/interceptor/RepeatSubmitInterceptor.java
	ruoyi-system/src/main/java/com/ruoyi/system/service/SysRegisterService.java
	ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysMenuServiceImpl.java
	ruoyi-ui/package.json
	ruoyi-ui/src/views/monitor/server/index.vue
2021-10-11 09:37:06 +08:00
eb4376b649 Excel导入支持@Excels注解 2021-10-10 14:30:08 +08:00
b1e5ebab8f 升级spring-boot-mybatis到最新版2.2.0 2021-10-10 11:26:50 +08:00
8bd6296721 升级pagehelper到最新版1.4.0 2021-10-10 11:25:37 +08:00
ae5c68368b 升级SpringBoot到最新版本2.5.5 2021-10-10 11:24:16 +08:00
4fdb0f48ec 同步element2.15.6表格样式 2021-10-10 11:23:04 +08:00
c4207f640b 使用JSONField忽略字段 2021-10-10 11:21:46 +08:00
f6e477b4f5 升级druid到最新版1.2.8 2021-10-10 09:44:14 +08:00
7ae47b50b8 导入模板添加默认参数 2021-10-09 12:22:55 +08:00
0b14155a75 增加 sendGet 无参判断 2021-10-09 12:22:54 +08:00
f1fed76273 升级element-ui到最新版本2.15.6 2021-10-09 12:22:48 +08:00
48813161f6 设置mybatis默认的执行器 2021-10-04 10:27:38 +08:00
a006904724 fix 2021-09-30 03:18:41 +00:00
5477ce3c39 修正swagger没有指定dataTypeClass导致启动出现warn日志 2021-09-29 19:51:48 +08:00
f38d7811e3 update 优化 代码生成常量 关于 BO VO 注释 2021-09-28 18:26:32 +08:00
a09f1b8666 update 优化 代码生成常量 关于 BO VO 注释 2021-09-28 18:26:31 +08:00
c7071752a7 update 优化代码生成 导入表 列表返回 主键默认选中 2021-09-28 18:26:30 +08:00
29163a41c2 update 更新 Admin 监控 注释 避免错误使用 2021-09-28 18:04:09 +08:00
c0e4e27dcc fix 修复 多数据源aop语法错误 2021-09-28 14:38:35 +08:00
3401f38edc fix 修复 多数据源aop语法错误 2021-09-28 14:37:03 +08:00
85762f7c92 Merge remote-tracking branch 'origin/dev'
# Conflicts:
#	README.md
2021-09-28 09:48:35 +08:00
3f142dd0fa 发布 v3.2.0 2021-09-28 09:41:37 +08:00
22b4f87232 Merge remote-tracking branch 'origin/dev' into dev 2021-09-28 09:32:56 +08:00
ca5823fcdf Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue into dev
 Conflicts:
	ruoyi-ui/package.json
2021-09-28 09:30:34 +08:00
49fc74be5d fix 修复更新问题 导出文件名乱码 2021-09-27 21:30:07 +08:00
25f50d74c5 升级sass-loader到最新版本10.1.1 2021-09-27 18:54:43 +08:00
266f4d6806 升级dart-sass到版本1.32.13 2021-09-27 18:54:10 +08:00
a6a9814c06 update 更新 service 注解 2021-09-27 17:58:36 +08:00
5a8d3ddef0 update 回退 dart-sass 新版报大量警告 2021-09-27 17:58:10 +08:00
99dcbe0207 update 封装通用下载方法简化下载使用 2021-09-27 17:24:37 +08:00
75b22e9a23 Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue into dev
 Conflicts:
	ruoyi-common/src/main/java/com/ruoyi/common/utils/file/FileUtils.java
	ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java
	ruoyi-generator/src/main/resources/vm/vue/index.vue.vm
	ruoyi-ui/package.json
	ruoyi-ui/src/main.js
	ruoyi-ui/src/views/monitor/job/index.vue
	ruoyi-ui/src/views/monitor/job/log.vue
	ruoyi-ui/src/views/monitor/logininfor/index.vue
	ruoyi-ui/src/views/monitor/operlog/index.vue
	ruoyi-ui/src/views/system/config/index.vue
	ruoyi-ui/src/views/system/dict/data.vue
	ruoyi-ui/src/views/system/dict/index.vue
	ruoyi-ui/src/views/system/post/index.vue
	ruoyi-ui/src/views/system/role/index.vue
	ruoyi-ui/src/views/system/user/index.vue
	ruoyi-ui/src/views/tool/build/index.vue
	ruoyi-ui/src/views/tool/gen/index.vue
2021-09-27 16:50:26 +08:00
c4f8c1b296 update 更新线程池策略说明 2021-09-27 15:00:36 +08:00
eecefdc4fa update 测试 jdk17 无异常 文档说明 2021-09-27 14:14:57 +08:00
ded99502ae 新增通用方法简化下载使用 2021-09-27 10:38:29 +08:00
02b95f95a8 升级file-saver到最新版本2.0.5 2021-09-27 10:36:43 +08:00
2a6d2d733e 升级dart-sass到最新版本1.42.1 2021-09-27 10:32:03 +08:00
3434610349 update 接口文档 支持分组配置 2021-09-26 17:02:28 +08:00
bcac70b2ab update 扩展 security 配置属性 2021-09-26 17:02:08 +08:00
369438a46d update 回滚配置 2021-09-26 16:42:42 +08:00
aed8969498 remove 移除无用配置类 2021-09-26 15:37:40 +08:00
4a8781f4d9 fix jwt过滤编写问题 2021-09-26 15:18:05 +08:00
bff9d0560d fix jwt过滤编写问题 2021-09-26 15:17:27 +08:00
36f8eb71f3 fix jwt过滤编写问题 2021-09-26 14:39:51 +08:00
f7982ede73 fix jwt过滤编写问题 2021-09-26 14:35:25 +08:00
92804151a3 update 优化匿名路径jwt放行 2021-09-26 14:08:48 +08:00
0f2caf1cb6 update security 路径配置抽取到配置文件 2021-09-26 14:08:28 +08:00
8a81f37d22 update 同步ruoyi 2021-09-26 10:08:24 +08:00
125547f08f Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue into dev
 Conflicts:
	pom.xml
	ruoyi-common/src/main/java/com/ruoyi/common/utils/html/HTMLFilter.java
	ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java
	ruoyi-framework/src/main/java/com/ruoyi/framework/config/RedisConfig.java
	ruoyi-generator/src/main/resources/vm/vue/index.vue.vm
	ruoyi-system/src/main/java/com/ruoyi/system/service/SysLoginService.java
	ruoyi-ui/src/views/monitor/server/index.vue
2021-09-26 10:05:29 +08:00
30c89b33fe Excel注解支持导入导出标题信息 2021-09-26 09:03:01 +08:00
7479ff4b06 修复xss过滤后格式出现的异常 2021-09-25 17:12:37 +08:00
9801e9c29a remove 移除过期工具 2021-09-24 15:13:11 +08:00
821f40882f !332 fix 自动生成代码漏掉 this.#[[$modal]]#.msgError
Merge pull request !332 from 疯狂的狮子Li/N/A
2021-09-24 06:50:50 +00:00
02ce9868a7 fix 自动生成代码漏掉 this.#[[$modal]]#.msgError 2021-09-24 05:41:55 +00:00
6f870e11ff update 优化空校验处理 2021-09-24 11:17:25 +08:00
a8f2ff4531 !331 update 代码生成编辑页面 拼写错误修正
Merge pull request !331 from 疯狂的狮子Li/master
2021-09-24 02:07:44 +00:00
eaa3baab3c update 代码生成编辑页面 拼写错误修正 2021-09-24 10:06:23 +08:00
77bce8b1e8 update springboot 2.5.4 => 2.5.5 bugfix版本
update mybatis-plus 3.4.3.3 => 3.4.3.4 bugfix版本
update redisson 3.16.2 => 3.16.3 bugfix版本
2021-09-24 09:59:28 +08:00
6480282826 升级fastjson到最新版1.2.78 2021-09-24 09:28:46 +08:00
6197ad5090 !330 优化 记录登录信息,移除不必要的修改
Merge pull request !330 from lihy2021/N/A
2021-09-24 01:27:57 +00:00
b477e40d3c 优化 记录登录信息,移除不必要的修改 2021-09-24 00:41:43 +00:00
7c8eae3735 update 更新 satoken分支 相关介绍 2021-09-23 19:25:01 +08:00
f8cc7ce328 限流返回类型转换数值型的格式 2021-09-23 19:15:33 +08:00
1a5881b1d0 修正服务监控磁盘变量 2021-09-23 19:09:22 +08:00
071c4c1412 update 同步ruoyi适配改动 2021-09-23 19:04:09 +08:00
03b31652a2 Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue into dev
 Conflicts:
	ruoyi-generator/src/main/resources/vm/vue/index-tree.vue.vm
	ruoyi-generator/src/main/resources/vm/vue/index.vue.vm
	ruoyi-ui/src/layout/components/Settings/index.vue
	ruoyi-ui/src/main.js
	ruoyi-ui/src/views/monitor/job/index.vue
	ruoyi-ui/src/views/monitor/job/log.vue
	ruoyi-ui/src/views/monitor/logininfor/index.vue
	ruoyi-ui/src/views/monitor/online/index.vue
	ruoyi-ui/src/views/monitor/operlog/index.vue
	ruoyi-ui/src/views/monitor/server/index.vue
	ruoyi-ui/src/views/system/config/index.vue
	ruoyi-ui/src/views/system/dict/data.vue
	ruoyi-ui/src/views/system/dict/index.vue
	ruoyi-ui/src/views/system/post/index.vue
	ruoyi-ui/src/views/system/role/index.vue
	ruoyi-ui/src/views/system/user/authRole.vue
	ruoyi-ui/src/views/system/user/index.vue
	ruoyi-ui/src/views/system/user/profile/resetPwd.vue
	ruoyi-ui/src/views/system/user/profile/userAvatar.vue
	ruoyi-ui/src/views/system/user/profile/userInfo.vue
	ruoyi-ui/src/views/tool/gen/importTable.vue
2021-09-23 18:53:17 +08:00
852bc4887a remove 移除无用字段 2021-09-23 14:58:48 +08:00
fa124aeb8b 新增通用方法简化模态/缓存使用 2021-09-23 09:57:29 +08:00
258335cc65 新增通用方法简化模态/缓存使用 2021-09-23 09:38:16 +08:00
bdebca94b3 remove 移除无用合并 2021-09-22 12:38:52 +08:00
f85bad3388 update 调整依赖结构 解决依赖冲突 2021-09-22 11:10:10 +08:00
e9b0289eff update 优化代码生成 根据MP生成特性 调整导入表结构默认值合理化 2021-09-22 11:09:42 +08:00
40984e201e update 同步ruoyi修改命名 2021-09-22 10:12:49 +08:00
76bf987203 Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue into dev
 Conflicts:
	ruoyi-common/src/main/java/com/ruoyi/common/annotation/Excel.java
	ruoyi-common/src/main/java/com/ruoyi/common/annotation/RepeatSubmit.java
	ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java
	ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/DataSourceAspect.java
	ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/LogAspect.java
	ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/RateLimiterAspect.java
	ruoyi-framework/src/main/java/com/ruoyi/framework/interceptor/RepeatSubmitInterceptor.java
	ruoyi-framework/src/main/java/com/ruoyi/framework/interceptor/impl/SameUrlDataInterceptor.java
2021-09-22 10:09:15 +08:00
3b42abef44 Excel注解支持自定义数据处理器 2021-09-22 09:03:01 +08:00
26f0737c60 防重提交注解支持配置间隔时间/提示消息 2021-09-20 19:09:25 +08:00
ac94242875 reset dataSourceAspect 2021-09-20 19:08:50 +08:00
54bfa627f0 防止Excel导入图片可能出现的异常 2021-09-20 19:04:57 +08:00
36c058188a 防止记录日志转换出现的异常 2021-09-20 19:04:40 +08:00
5306a45093 Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue into dev
 Conflicts:
	ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/DataScopeAspect.java
	ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/DataSourceAspect.java
	ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/LogAspect.java
	ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/RateLimiterAspect.java
2021-09-20 17:53:25 +08:00
a292cccb63 代码生成点击预览重置激活tab 2021-09-18 18:58:03 +08:00
5ccd9877b4 !325 update 优化aop语法 使用spring自动注入注解 基于注解拦截的aop注解不可能为空
Merge pull request !325 from 疯狂的狮子Li/master
2021-09-18 10:47:06 +00:00
7108ec41b5 !322 Cron表达式生成器关闭时销毁,避免再次打开时存在上一次修改的数据
Merge pull request !322 from muyi/master
2021-09-18 10:43:59 +00:00
5188d56b4a !321 修复 全局限流key会多出一个"-" 将其移动到IP后面 去除多余的空格
Merge pull request !321 from 疯狂的狮子Li/N/A
2021-09-18 10:41:03 +00:00
8f7ed66544 update 优化aop语法 使用spring自动注入注解 基于注解拦截的aop注解不可能为空 2021-09-18 18:20:21 +08:00
c99b9262a8 update 优化aop写法 使用spring自动注入注解参数 2021-09-18 18:05:50 +08:00
2ccbaf9143 update 补全 @Override 注解 2021-09-18 18:05:28 +08:00
d54ab2733c update 简化数据字典使用 2021-09-18 17:04:25 +08:00
2f18d0d709 Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue into dev
 Conflicts:
	ruoyi-generator/src/main/java/com/ruoyi/generator/util/VelocityUtils.java
	ruoyi-generator/src/main/resources/vm/vue/index-tree.vue.vm
	ruoyi-generator/src/main/resources/vm/vue/index.vue.vm
	ruoyi-ui/src/main.js
	ruoyi-ui/src/views/system/dict/data.vue
	ruoyi-ui/src/views/system/dict/index.vue
	ruoyi-ui/src/views/system/role/index.vue
	ruoyi-ui/src/views/system/user/index.vue
2021-09-18 16:01:52 +08:00
41c75a808a update easyexcel 2.2.10 => 2.2.11
update hutool 5.7.11 => 5.7.13
2021-09-18 15:48:43 +08:00
1e55853036 update 更新 分布式幂等 文档说明 2021-09-18 15:47:52 +08:00
931ed0eb00 update [重大改动]重写 防重提交实现 使用分布式锁 解决并发问题 压测通过 2021-09-18 15:44:36 +08:00
9342bbef56 fix 修复合并错误 2021-09-17 15:39:27 +00:00
yjb
aaae404b2a Cron表达式生成器关闭时销毁,避免再次打开时存在上一次修改的数据 2021-09-17 19:14:41 +08:00
f3a8b4625f 修复 全局限流key会多出一个"-" 将其移动到IP后面 去除多余的空格 2021-09-17 09:32:43 +00:00
4021020d3b update 更新 集群限流说明 2021-09-17 17:23:07 +08:00
2569e8c0a4 add 增加 集群限流演示案例 2021-09-17 17:22:55 +08:00
dcaeb18870 add 增加 集群限流功能 2021-09-17 17:22:45 +08:00
30fe14c0ff add 增加 获取redis客户端实例id工具 2021-09-17 17:22:25 +08:00
089b3d6e6d update 更新限流 README.md 说明 2021-09-17 16:20:46 +08:00
17b90f8381 add 增加 限流演示案例 2021-09-17 16:20:26 +08:00
f9c62fc23b update 使用 Redisson 限流工具 重写限流实现 2021-09-17 16:20:05 +08:00
900867df02 add RedisUtils 增加限流工具 2021-09-17 16:19:12 +08:00
12ab8b03d9 使用vue-data-dict,简化数据字典使用 2021-09-17 15:36:54 +08:00
50599487f8 update [重大改动] 将 framework 与 system 模块 解耦 2021-09-17 14:48:36 +08:00
2b53e9d86a Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue into dev
 Conflicts:
	ruoyi-common/src/main/java/com/ruoyi/common/annotation/Log.java
	ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/LogAspect.java
	ruoyi-generator/src/main/resources/vm/java/mapper.java.vm
2021-09-17 11:12:43 +08:00
23270c60bc 日志注解新增是否保存响应参数 2021-09-16 16:03:49 +08:00
2cb6709323 !318 修复后端主子表代码模板方法名生成错误问题
Merge pull request !318 from 稚屿/N/A
2021-09-16 07:48:08 +00:00
917bc03a43 !316 禁用DictTag中el-tag渐变动画
Merge pull request !316 from 马小法/master
2021-09-16 07:34:34 +00:00
c6963e1a96 update 重写框架 README.md 格式更友好 通俗易懂 2021-09-15 15:29:39 +08:00
d71e35893d update 重写框架 README.md 格式更友好 通俗易懂 2021-09-15 12:05:24 +08:00
efd277e7ed update 用户未登录日志改为 warn 级别 2021-09-15 10:53:14 +08:00
dbe3446b63 修复后端主子表代码模板方法名生成错误问题 2021-09-14 13:53:32 +00:00
d3d3972bea update OSS模块 关于下载403报错信息优化 2021-09-14 17:52:19 +08:00
5285735c7a add 增加 redis redisson 集群配置 2021-09-14 16:57:07 +08:00
b84e7013d2 禁用el-tag组件的渐变动画 2021-09-14 15:15:22 +08:00
9bc5414b44 update 更新 Actuator prod 默认暴漏端点 增加暴漏 logfile 日志端点 2021-09-14 12:17:16 +08:00
6e28683411 update 默认适配jdk11 2021-09-14 12:07:42 +08:00
b27a8afc3b fix 修复多主键代码生成bug 2021-09-14 12:03:58 +08:00
ed7e8d0e5c update 更新文档扩展项目地址 2021-09-14 10:17:22 +08:00
662251e208 Merge remote-tracking branch 'origin/dev' into dev 2021-09-14 10:16:44 +08:00
e314a5e333 update 更新文档扩展项目地址 2021-09-14 10:16:38 +08:00
a0c165c418 !92 fix 代码生成-当表未设置主键时第一个字段重复生成
Merge pull request !92 from dawn9117/dev
2021-09-13 13:25:18 +00:00
c604c2de98 fix 代码生成-当表未设置主键时第一个字段重复生成 2021-09-13 21:21:19 +08:00
d6107025fa !89 update 字典类型 数据解析状态对应字典调整
Merge pull request !89 from 抓蛙师/auto-7465549-dev-1631512665539
2021-09-13 05:58:57 +00:00
a7ecfb68c1 字典类型 数据解析状态对应字典调整 2021-09-13 13:57:03 +08:00
188d27159d update 同步 ruoyi 3.7.0 修正改动 2021-09-13 13:17:01 +08:00
2af534eea4 Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue into dev
 Conflicts:
	pom.xml
	ruoyi-admin/pom.xml
	ruoyi-admin/src/main/resources/application.yml
	ruoyi-common/pom.xml
	ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysMenu.java
	ruoyi-framework/pom.xml
	ruoyi-generator/pom.xml
	ruoyi-quartz/pom.xml
	ruoyi-system/pom.xml
	ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/RouterVo.java
	ruoyi-system/src/main/resources/mapper/system/SysMenuMapper.xml
	ruoyi-ui/package.json
	ruoyi-ui/src/components/ImageUpload/index.vue
	ruoyi-ui/src/components/ThemePicker/index.vue
	ruoyi-ui/src/layout/components/Sidebar/Link.vue
	ruoyi-ui/src/layout/components/Sidebar/SidebarItem.vue
	ruoyi-ui/src/router/index.js
	ruoyi-ui/src/views/index.vue
	ruoyi-ui/src/views/tool/gen/editTable.vue
	ruoyi-ui/src/views/tool/gen/index.vue
	sql/ry_20210908.sql
2021-09-13 13:03:58 +08:00
db193a46e8 若依 3.7.0 2021-09-13 09:36:38 +08:00
808bb9a958 update 更新关于 本地与云存储说明 2021-09-10 16:13:57 +08:00
eca8ea1eb6 fix 修复 @Cacheable 与 @DataScope 冲突问题 2021-09-10 15:41:23 +08:00
d9681e1791 update 更新 @Cacheable 错误用法 注意事项 2021-09-10 15:31:01 +08:00
7f96363ecb update 更新数据库最低版本说明 2021-09-10 11:52:31 +08:00
04c340627d 修复多图组件验证失败被删除问题 2021-09-10 11:06:25 +08:00
c1c6c1cf30 update 将所有 云存储字样 改为 对象存储 避免误解 2021-09-10 10:51:40 +08:00
b47a38d9d8 update 回滚 配置检测拦截是否有效SQL 因不通用 2021-09-09 17:37:26 +08:00
5bb7b0dda5 update 优化代码生成 insertByBo 方法 针对返回主键优化 2021-09-09 15:24:33 +08:00
61edd5588e Merge remote-tracking branch 'origin/dev' into dev 2021-09-09 10:17:58 +08:00
e1c993c277 update 回滚 配置检测拦截是否有效SQL 因不通用 2021-09-09 10:17:40 +08:00
15abd4d053 优化提示 2021-09-08 11:26:08 +08:00
a7376b36f8 !312 修复代码生成页面数据编辑保存之后总是跳转第一页的问题
Merge pull request !312 from 稚屿/master
2021-09-08 03:19:59 +00:00
d2b61762b7 修复代码生成页面数据编辑保存之后总是跳转第一页的问题 2021-09-08 11:18:35 +08:00
a5e38f6f99 菜单管理支持配置路由参数 2021-09-08 09:28:23 +08:00
4988b585f8 !309 修正单词拼写错误
Merge pull request !309 from 稚屿/master
2021-09-07 08:16:58 +00:00
c2efaa5c3c !86 同步dev分支
Merge pull request !86 from 疯狂的狮子Li/dev
2021-09-07 05:50:21 +00:00
3b5fb07c3d Merge branch 'master' of gitee.com:JavaLionLi/RuoYi-Vue-Plus into dev 2021-09-07 05:49:53 +00:00
ddf8d6ad6b 发布 v3.1.0 2021-09-07 13:48:22 +08:00
182edef28a update 所有业务适配 RedisUtils 新工具 2021-09-07 13:20:24 +08:00
97cffa048e add 过期 RedisCache 新增 RedisUtils 工具类 更灵巧便于使用 2021-09-07 13:19:34 +08:00
c5d46591fe update 更新 jackson 配置 支持 LocalDateTime 全局格式化 2021-09-07 13:18:36 +08:00
38f03855eb update redisson 3.16.1 => 3.16.2 2021-09-07 09:53:14 +08:00
0d8421e7ab update 适配 mybatis-plus 升级更新 2021-09-06 16:42:03 +08:00
43301bee8b update 使用MP自行判断数据库类型 2021-09-06 16:10:33 +08:00
36b0ebf54c update 代码生成 查询数据库列表 按照时间倒序 2021-09-06 11:08:09 +08:00
e7f83fb695 update mybatis-plus 3.4.3 => 3.4.3.3 适配升级 (包含不兼容升级) 请详细阅读 mybatis-plus 官方升级文档 2021-09-06 10:19:58 +08:00
ab4b75fe30 Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue into dev
 Conflicts:
	ruoyi-ui/src/assets/styles/ruoyi.scss
	ruoyi-ui/src/assets/styles/sidebar.scss
	ruoyi-ui/src/assets/styles/variables.scss
	ruoyi-ui/src/components/ThemePicker/index.vue
	ruoyi-ui/src/layout/components/Sidebar/Logo.vue
	ruoyi-ui/src/layout/components/Sidebar/index.vue
	ruoyi-ui/src/layout/components/TagsView/index.vue
	ruoyi-ui/src/layout/index.vue
	ruoyi-ui/src/store/modules/settings.js
	ruoyi-ui/src/store/modules/tagsView.js
	ruoyi-ui/src/views/tool/gen/index.vue
2021-09-06 09:59:28 +08:00
b35f708c07 修正单词拼写错误 2021-09-05 21:36:33 +08:00
0e6150720c 页签新增关闭左侧 2021-09-05 13:27:58 +08:00
44adf03d2c 页签右键按钮添加图标 2021-09-05 13:26:45 +08:00
9ae5edaa74 菜单&部门新增展开/折叠功能 2021-09-04 12:10:33 +08:00
14c6c796e8 新增暗色菜单风格主题 2021-09-04 12:09:55 +08:00
2d6c306ae1 update 优化 oss配置 使用发布订阅工具 刷新配置 2021-09-03 17:42:58 +08:00
b2ab087313 add PageUtils 增加构造无参 TableDataInfo 方法 2021-09-03 17:35:44 +08:00
22daef0b51 update 泛型统一使用 V 2021-09-03 17:14:19 +08:00
067029eebe update 优化分页工具排序处理 2021-09-03 17:06:18 +08:00
5d72f9d224 修复保存配置主题颜色失效问题 2021-09-03 16:50:48 +08:00
4dd235124d add 增加 发布订阅 演示案例 2021-09-03 16:22:04 +08:00
04c03d7ab7 add RedisCache 工具类 增加 发布订阅工具 2021-09-03 16:21:50 +08:00
fd8affdc8a update 补全演示案例 接口文档 2021-09-03 16:21:23 +08:00
e49f0cebf1 自定义弹层溢出滚动样式 2021-09-03 13:27:03 +08:00
237b598264 update 更新feign关于熔断注释 2021-09-03 11:43:34 +08:00
f566c39026 Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue into dev
 Conflicts:
	ruoyi-common/src/main/java/com/ruoyi/common/core/page/PageDomain.java
	ruoyi-generator/src/main/resources/mapper/generator/GenTableMapper.xml
	ruoyi-ui/src/assets/styles/ruoyi.scss
	ruoyi-ui/src/views/monitor/job/index.vue
	ruoyi-ui/src/views/system/dict/data.vue
	ruoyi-ui/src/views/system/dict/index.vue
	ruoyi-ui/src/views/system/role/index.vue
	ruoyi-ui/src/views/system/user/index.vue
	ruoyi-ui/src/views/tool/gen/index.vue
2021-09-03 10:55:58 +08:00
6361e4efdc 定时任务支持在线生成cron表达式 2021-09-03 09:54:07 +08:00
cfa86bd4fe !308 代码生成: 导入表时查询 新创建表的优先排序在前面
Merge pull request !308 from xiaoshitou/N/A
2021-09-03 01:39:40 +00:00
a56bc47a81 代码生成: 导入表时查询 新创建表的优先排序在前面 2021-09-02 20:01:25 +00:00
80784433b8 remove 移除分页合理化参数 使用 MP 全局配置分页溢出 2021-09-02 15:59:42 +08:00
ab9bc35f9f update MP字段验证策略更改为 NOT_NULL 个别特殊字段使用注解单独处理 2021-09-02 15:45:57 +08:00
f3d6d1e43b update 优化全局线程池配置 使用泛型 防止错误输入 2021-09-02 15:20:31 +08:00
8b2f7f0e64 update 优化验证码配置 使用泛型 防止错误输入 2021-09-02 15:19:18 +08:00
76710e453e update 分页合理化 2021-09-02 13:46:11 +08:00
6801490e3b update 分页合理化 2021-09-02 11:29:50 +08:00
a15bfdfb46 防止表格最后页最后项删除变成暂无数据 2021-09-02 10:55:10 +08:00
1a695159e3 Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue into dev
 Conflicts:
	ruoyi-common/src/main/java/com/ruoyi/common/core/controller/BaseController.java
	ruoyi-common/src/main/java/com/ruoyi/common/core/page/PageDomain.java
	ruoyi-common/src/main/java/com/ruoyi/common/core/page/TableSupport.java
	ruoyi-common/src/main/java/com/ruoyi/common/utils/ServletUtils.java
	ruoyi-ui/src/api/login.js
	ruoyi-ui/src/views/system/dict/data.vue
	ruoyi-ui/src/views/system/dict/index.vue
	ruoyi-ui/src/views/system/role/index.vue
	ruoyi-ui/src/views/system/user/index.vue
	ruoyi-ui/src/views/tool/gen/index.vue
2021-09-02 10:49:56 +08:00
ee823b8326 防止表格最后页最后项删除变成暂无数据 2021-09-02 10:19:04 +08:00
b461c8cc99 update spring-boot-admin 2.5.0 => 2.5.1
update aliyun.oss 3.13.0 => 3.13.1
update qcloud.cos 5.6.47 => 5.6.51
update hutool 5.7.9 => 5.7.11
update maven-jar-plugin 3.1.1 => 3.2.0
2021-09-01 15:38:08 +08:00
adb31b71f8 Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue into dev
 Conflicts:
	ruoyi-generator/src/main/resources/vm/vue/index-tree.vue.vm
	ruoyi-generator/src/main/resources/vm/vue/index.vue.vm
	ruoyi-ui/src/views/monitor/job/index.vue
	ruoyi-ui/src/views/monitor/logininfor/index.vue
	ruoyi-ui/src/views/monitor/operlog/index.vue
	ruoyi-ui/src/views/system/config/index.vue
	ruoyi-ui/src/views/system/dept/index.vue
	ruoyi-ui/src/views/system/menu/index.vue
	ruoyi-ui/src/views/system/notice/index.vue
	ruoyi-ui/src/views/system/post/index.vue
2021-09-01 09:40:36 +08:00
57178e72a4 !304 修改数据字典样式回显
Merge pull request !304 from 马小法/master
2021-09-01 01:20:59 +00:00
52ca1e7d06 Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue into dev
 Conflicts:
	ruoyi-system/src/main/resources/mapper/system/SysMenuMapper.xml
2021-08-31 09:42:55 +08:00
b8317a562c !303 修改非管理员登录时,获取菜单报错sql
Merge pull request !303 from Gold_Fish/master
2021-08-30 08:59:55 +00:00
8040ad8c03 修改数据字典回显 2021-08-30 16:53:16 +08:00
c628aa5be8 修改代码生成字典回显样式 2021-08-30 16:49:30 +08:00
1370d4a43c add 优化 增加 redis 配置文件 2021-08-30 14:18:22 +08:00
f22aa6d94a update 更新容器名 2021-08-30 13:46:49 +08:00
bdfd2f0787 Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue into dev
 Conflicts:
	ruoyi-common/src/main/java/com/ruoyi/common/filter/XssHttpServletRequestWrapper.java
	ruoyi-ui/src/api/login.js
2021-08-30 12:49:19 +08:00
673d10c6c4 update 优化 saveAll 空列表校验 2021-08-30 12:36:01 +08:00
e54033f4e4 update 优化 saveOrUpdateAll 空列表校验 2021-08-30 12:24:24 +08:00
bfeca2cd7c !84 全量保存或更新之前判断addList长度和updateList长度
Merge pull request !84 from 抓蛙师/dev
2021-08-30 04:20:46 +00:00
41de169dd2 全量保存或更新时判断数组长度再继续 2021-08-30 11:29:33 +08:00
b036e78d85 修改根据userId获取菜单sql 2021-08-30 02:42:49 +00:00
4e8c6fb7c0 修复字典组件值为整形不显示问题 2021-08-29 15:57:01 +08:00
134835c870 验证码默认20s超时 2021-08-29 15:56:46 +08:00
5ade90debf !299 XssHttpServletRequestWrapper中增加available方法
Merge pull request !299 from Ming/master
2021-08-29 07:36:57 +00:00
bb0aeb39e3 !298 修复带utc日期格式 yyyy-MM-dd'T'HH:mm:ss.SSS 在safari浏览器中无法正确格式化的问题
Merge pull request !298 from wjtc8/N/A
2021-08-29 07:35:06 +00:00
dc0f655781 remove 移除docker镜像无用路径配置 2021-08-27 12:07:16 +08:00
94be46d065 fix 修复定时器工具编写错误问题 2021-08-26 18:03:33 +08:00
a5acc3b27e update java 代码格式统一使用4个空格 2021-08-26 13:06:27 +08:00
ee927ad6dc !83 update 优化生成的业务名
Merge pull request !83 from 友杰/auto-8071125-dev-1629950351765
2021-08-26 04:33:02 +00:00
b71e8970fe update 优化生成的业务名 2021-08-26 11:59:05 +08:00
0c438ad8e9 update 修改时检查用户数据权限范围 2021-08-26 11:15:07 +08:00
31c2cfa53c Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue into dev
 Conflicts:
	ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDeptController.java
	ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRoleController.java
	ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java
	ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/impl/SysJobServiceImpl.java
	ruoyi-system/src/main/java/com/ruoyi/system/service/ISysDeptService.java
	ruoyi-system/src/main/java/com/ruoyi/system/service/ISysRoleService.java
	ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java
	ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java
	ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java
	ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java
	ruoyi-system/src/main/resources/mapper/system/SysDeptMapper.xml
	ruoyi-system/src/main/resources/mapper/system/SysRoleMapper.xml
	ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml
2021-08-26 11:10:42 +08:00
23ce0af2e8 update 优化 ServicePlusImpl 的 vo 泛型 由K改成V 增加可读性 增加注释 2021-08-26 10:56:36 +08:00
0014be5242 update 优化代码生成 导入与同步 批处理效率 2021-08-26 10:23:01 +08:00
7c6fe5f244 add 新增 saveOrUpdateAll 方法 可完美替代 saveOrUpdateBatch 高性能 2021-08-26 09:58:57 +08:00
3e5ae811bf !82 saveAll支持有id更新,无id插入
Merge pull request !82 from 抓蛙师/dev
2021-08-26 01:24:20 +00:00
5df5e63afe update 解决 logout 写死 无法扩展路径问题 2021-08-25 21:50:38 +08:00
545f0bd4b0 saveAll支持有id则更新和无id则插入 2021-08-25 20:24:35 +08:00
8ffe111086 update 重写 InsertAll 方法实现 可完美替代 saveBatch 秒级插入上万数据 2021-08-25 18:01:52 +08:00
1cd64a1c4e fix minio Prefix 空问题 2021-08-25 10:03:39 +08:00
098c650655 update ruoyi-common/src/main/java/com/ruoyi/common/filter/XssHttpServletRequestWrapper.java.
增加available方法于XssHttpServletRequestWrapper
2021-08-24 08:42:56 +00:00
e52092c6d4 修改时检查用户数据权限范围 2021-08-24 16:00:39 +08:00
fc98a260d6 update 优化spy配置文件为 UTF8编码 解决中文注释乱码问题 2021-08-24 16:00:33 +08:00
613fe5d35a update 更改OSS上传通用路径生成 按照年月日分三级目录 2021-08-24 15:51:23 +08:00
f5b90af6d0 add 增加 导出雪花id excel失真问题 2021-08-24 14:28:39 +08:00
bf86e5979b update 重构 将下载excel工具提取到全局 2021-08-24 14:28:20 +08:00
dae8ee4afc update 增加验证码开关注释 2021-08-24 14:27:14 +08:00
89911e7caf 修复带utc日期格式 yyyy-MM-dd'T'HH:mm:ss.SSS 在safari浏览器中无法正确格式化的问题 2021-08-24 05:51:00 +00:00
72f3971ca2 update 重构 将下载excel工具提取到全局 2021-08-24 13:38:15 +08:00
0fc266fe80 定时任务对检查异常进行事务回滚 2021-08-24 11:12:11 +08:00
f91ebd93d2 update 重构 将下载excel工具提取到全局 2021-08-23 18:28:33 +08:00
dea627f02c update 更改用户注册页面标题名 2021-08-23 18:21:05 +08:00
3c0f992e76 fix 解决搜索校验不通过问题 2021-08-23 18:20:07 +08:00
5f2f4bb7ef add 增加查询校验组 2021-08-23 18:17:45 +08:00
92a32fe380 fix 修复定时器工具编写错误问题 2021-08-22 12:47:51 +00:00
a0fc78f9e6 remove 删除无用路径 2021-08-22 11:58:08 +08:00
3ade542d81 fix 修复 druid 监控 集群模式下 无法路由到同一台服务器问题 nginx 使用 ip_hash 路由方式 保障同 ip 路由到同服务器 2021-08-22 10:42:58 +08:00
0e2ff6a6da update 优化copy工具增加空判断 2021-08-22 10:41:26 +08:00
0c9a778736 Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue into dev
 Conflicts:
	ruoyi-ui/src/directive/index.js
2021-08-22 10:40:36 +08:00
d1ef19f08a 自定义可拖动弹窗高度指令 2021-08-20 17:57:44 +08:00
e6e10308ff 自定义可拖动弹窗宽度指令 2021-08-20 17:45:25 +08:00
d48c57917c fix 修复 excel 导入与 class 未对应问题 2021-08-20 17:01:18 +08:00
40347e4cb8 fix 修复 excel 导入与 class 未对应问题 2021-08-20 17:00:57 +08:00
33c16e562b update springboot 2.5.3 => 2.5.4
update hutool 5.7.7 => 5.7.9
update feign-okhttp 11.2 => 11.6
2021-08-20 14:47:49 +08:00
cb5ee9c8a1 补充定时任务表字段注释 2021-08-20 11:04:15 +08:00
c3b44e835d update 同步 ruoyi 更新代码 2021-08-19 17:37:44 +08:00
c380b77617 Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue into dev
 Conflicts:
	ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java
	ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysProfileController.java
	ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRoleController.java
	ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java
	ruoyi-common/src/main/java/com/ruoyi/common/constant/Constants.java
	ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/DataScopeAspect.java
	ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/LogAspect.java
	ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/PermissionService.java
	ruoyi-quartz/src/main/java/com/ruoyi/quartz/controller/SysJobController.java
	ruoyi-ui/src/layout/index.vue
2021-08-19 17:33:46 +08:00
7fafd94e39 !80 update 优化oss配置错误时的错误信息
Merge pull request !80 from 友杰/auto-8071125-dev-1629364607691
2021-08-19 09:23:46 +00:00
89a75e7800 update 优化oss配置错误时的错误信息 2021-08-19 17:16:36 +08:00
1e37f0430b 定时任务屏蔽ldap远程调用 2021-08-19 15:26:22 +08:00
295173258c !295 update 优化 使用权限工具 获取用户信息
Merge pull request !295 from 疯狂的狮子Li/update
2021-08-19 06:55:13 +00:00
fec90d0487 !294 update ruoyi-ui/src/layout/index.vue.
Merge pull request !294 from aasdd/N/A
2021-08-19 06:49:06 +00:00
aead560227 update 优化 使用权限工具 获取用户信息 2021-08-19 11:13:59 +08:00
c91d33e4ab update 优化 OSS 模块与上传组件 异常处理 2021-08-18 19:15:03 +08:00
36fae5c926 update 优化 OSS 模块与上传组件 异常处理 2021-08-18 19:14:26 +08:00
a33a919169 fix 修复 OSS配置清空被过滤问题 2021-08-18 18:24:24 +08:00
88e3805ff9 fix 修复 OSS配置清空被过滤问题 2021-08-18 18:24:05 +08:00
8133c60ab3 update ruoyi-ui/src/layout/index.vue.
删掉此处代码,使右边栏动画生效。现在是没有动画的
2021-08-18 09:29:22 +00:00
96c4c4da56 fix 修复 新版本说明 标签错误 2021-08-18 16:54:22 +08:00
e981388aa7 fix 修复 新版本说明 标签错误 2021-08-18 16:53:56 +08:00
cf4b49ca3b fix 修复 富文本图片路径错误问题 2021-08-18 14:50:10 +08:00
9dd0ed4329 fix 修复 富文本图片路径错误问题 2021-08-18 14:49:31 +08:00
6a8deaf61a fix 修复 minio 无 perfix 问题 2021-08-18 14:14:50 +08:00
e3d90b820d Merge remote-tracking branch 'origin/dev' into dev 2021-08-18 14:13:55 +08:00
8c7507b048 fix 修复 minio 无 perfix 问题 2021-08-18 14:13:46 +08:00
0375fd319c !78 同步dev分支
Merge pull request !78 from 疯狂的狮子Li/dev
2021-08-18 03:11:24 +00:00
b19111b9bf Merge branch 'master' of gitee.com:JavaLionLi/RuoYi-Vue-Plus into dev 2021-08-18 03:11:04 +00:00
a937e3f268 发布 v3.0.0 2021-08-18 11:09:14 +08:00
4eb94f4a1e update 更新vip群信息 2021-08-18 10:44:08 +08:00
8cc673ec95 update 同步 ruoyi 自定义限流 新功能 2021-08-17 14:39:38 +08:00
c271ffc066 update 同步 ruoyi 自定义限流 新功能 2021-08-17 14:34:29 +08:00
896939ce4e Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue into dev
 Conflicts:
	ruoyi-common/src/main/java/com/ruoyi/common/annotation/Excels.java
	ruoyi-common/src/main/java/com/ruoyi/common/constant/Constants.java
	ruoyi-framework/src/main/java/com/ruoyi/framework/config/RedisConfig.java
2021-08-17 14:23:19 +08:00
5c155f5f11 支持自定义注解实现接口限流 2021-08-17 14:08:18 +08:00
5bfb2dae13 update 优化OSS异常判断 2021-08-17 11:43:14 +08:00
52d0d62c35 update 同步 ruoyi 适配改动 2021-08-17 10:45:01 +08:00
d3abd6c96e Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue into dev
 Conflicts:
	ruoyi-common/src/main/java/com/ruoyi/common/exception/CustomException.java
	ruoyi-common/src/main/java/com/ruoyi/common/exception/base/BaseException.java
	ruoyi-common/src/main/java/com/ruoyi/common/exception/file/FileException.java
	ruoyi-common/src/main/java/com/ruoyi/common/exception/user/UserException.java
	ruoyi-common/src/main/java/com/ruoyi/common/utils/SecurityUtils.java
	ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java
	ruoyi-common/src/main/java/com/ruoyi/common/utils/sql/SqlUtil.java
	ruoyi-framework/src/main/java/com/ruoyi/framework/web/exception/GlobalExceptionHandler.java
	ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java
	ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/UserDetailsServiceImpl.java
	ruoyi-generator/src/main/java/com/ruoyi/generator/service/GenTableServiceImpl.java
	ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysConfigServiceImpl.java
	ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java
	ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDictTypeServiceImpl.java
	ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysPostServiceImpl.java
	ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java
	ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java
	ruoyi-ui/src/components/Breadcrumb/index.vue
2021-08-17 10:38:07 +08:00
03cf98d3c9 优化异常信息 2021-08-16 16:25:25 +08:00
6f51f729ba !289 添加日期范围支持重复添加多组日期范围,请求参数中对象的属性为null、undefined不进行拼接
Merge pull request !289 from wangzhaoqiang/master
2021-08-16 08:23:27 +00:00
73d2ed4c02 update 更新批量演示demo代码 2021-08-16 16:18:36 +08:00
57b159eb98 添加日期范围支持重复添加多组日期范围,请求参数中对象的属性为null、undefined不进行拼接 2021-08-16 14:48:34 +08:00
08da6834a5 !288 修正方法名单词拼写错误
Merge pull request !288 from 稚屿/N/A
2021-08-16 02:36:36 +00:00
268468fb47 !287 更新到【默认首页使用keep-alive缓存】后报错
Merge pull request !287 from wangzhaoqiang/master
2021-08-16 02:36:29 +00:00
333e19339c 修正方法名单词拼写错误 2021-08-15 10:26:05 +00:00
25b47db3cb update 移除Spring注入 改为全局缓存 并使用更新时间确保集群配置最终一致性 2021-08-15 16:59:46 +08:00
7b6ccd9b22 解决登录后浏览器后台Breadcrumb组件报错 2021-08-14 20:16:48 +08:00
881edb3e62 update springboot admin 2.4.3 => 2.5.0 (新增 Quartz 专属监控页) 2021-08-14 14:53:25 +08:00
bb1d8d5796 remove 删除无用常量 2021-08-14 14:30:52 +08:00
cb13642e85 update 重写 OSS 模块相关实现 支持动态配置(页面配置) 2021-08-13 21:09:24 +08:00
6473d4d8be Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue into dev
 Conflicts:
	bin/clean.bat
	bin/run.bat
	ruoyi-common/src/main/java/com/ruoyi/common/config/RuoYiConfig.java
	ruoyi-common/src/main/java/com/ruoyi/common/utils/file/FileUploadUtils.java
	ruoyi-common/src/main/java/com/ruoyi/common/utils/file/FileUtils.java
	ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java
	ruoyi-generator/src/main/resources/vm/vue/index.vue.vm
	ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysConfigServiceImpl.java
	ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDictTypeServiceImpl.java
	ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java
	ruoyi-ui/bin/run-web.bat
	ruoyi-ui/src/components/ImageUpload/index.vue
	ruoyi-ui/src/router/index.js
	ruoyi-ui/src/views/index.vue
2021-08-13 17:36:26 +08:00
5d6f134609 多图上传组件移除多余的api地址 2021-08-13 15:15:35 +08:00
f02743bde5 代码生成主子表多选行数据 2021-08-13 14:50:35 +08:00
8c09c30ca0 remove 删除OSS配置页面无用按钮 2021-08-13 14:32:24 +08:00
86fba4aed4 remove 删除配置文件 OSS存储相关配置 2021-08-13 14:10:16 +08:00
a5a71bf505 fix 修复代码生成 删除按钮报错 loading 不取消问题 2021-08-13 14:07:32 +08:00
652a39b11c update 修正 PR 相关问题 2021-08-13 14:04:57 +08:00
824635df7f update 修正 PR 相关问题 2021-08-13 12:37:34 +08:00
3003bb0f50 Excel注解图片导入兼容xls 2021-08-13 10:56:35 +08:00
5139265d32 默认首页使用keep-alive缓存 2021-08-13 10:10:29 +08:00
c9f7314cd0 !77 update 对象存储配置 重构到数据库 动态配置
* 增加对象存储配置sql
* 修改对象存储配置
* Merge branch 'dev' of https://gitee.com/JavaLionLi/RuoYi-Vue-Plus into dev
* 增加对象存储配置
* 增加对象存储配置
2021-08-13 02:03:46 +00:00
8a67af6c26 !285 修复角色分配用户页面接收参数与传递参数类型不一致导致的错误
Merge pull request !285 from 稚屿/N/A
2021-08-13 01:55:58 +00:00
8e4802505e !284 添加SysConfigservice,SysDictTypeService的实现方法遗漏的@Override注解
Merge pull request !284 from Old丶x/master
2021-08-13 01:55:52 +00:00
8ee641c1bc 修复角色分配用户页面接收参数与传递参数类型不一致导致的错误 2021-08-13 01:08:00 +00:00
779508989f 添加加载字典数据,清空字典数据,重置字典数据方法上遗漏的@Override注解 2021-08-12 17:30:31 +08:00
d9e805a6a5 添加获取验证码方法上遗漏的@Override注解 2021-08-12 17:19:56 +08:00
2b0c4acfa1 add 增加 admin 监控客户端开关 2021-08-12 13:53:58 +08:00
2915548bce remove 移除无用配置 2021-08-12 11:41:43 +08:00
c9a9da7f49 remove 移除无用配置 2021-08-12 11:38:06 +08:00
8adbdee9d9 remove 移除无用配置 2021-08-12 11:37:12 +08:00
5645356fa9 fix 生产minio回显问题 2021-08-11 17:05:02 +08:00
6a66aaff47 update 注入器 insert 增加 update 字段处理 2021-08-11 16:47:38 +08:00
253f28bb2b update 代码生成文档注解 增加必填判断配置 2021-08-11 15:43:58 +08:00
a48154a2ee update 补全基础实体 文档注解 2021-08-11 15:43:23 +08:00
0883b9eff1 update hutool 5.7.6 => 5.7.7 2021-08-11 14:42:58 +08:00
2c2dad24d5 update 更新 阿里云 maven源 新地址 2021-08-11 14:28:05 +08:00
cec4e083ef update 更改多数据源框架更清晰的依赖名 2021-08-11 14:27:40 +08:00
05316b08b4 update 统一镜像时区配置 移除主机时间映射 2021-08-11 13:09:48 +08:00
7be17ea89a Excel注解支持Image图片导入 2021-08-11 10:13:34 +08:00
1f07641d9b update bin 2021-08-11 10:11:13 +08:00
c0f4f805d0 !281 补全注册用户方法上遗漏的@Override注解
Merge pull request !281 from 稚屿/N/A
2021-08-11 02:08:58 +00:00
c2de299834 update 同步ruoyi 2021-08-09 10:05:27 +08:00
9bfa420a76 Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue into dev
 Conflicts:
	README.md
	ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysConfigController.java
	ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDeptController.java
	ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDictDataController.java
	ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDictTypeController.java
	ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java
	ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysMenuController.java
	ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysNoticeController.java
	ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysPostController.java
	ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRoleController.java
	ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java
	ruoyi-common/src/main/java/com/ruoyi/common/core/controller/BaseController.java
	ruoyi-common/src/main/java/com/ruoyi/common/core/domain/model/LoginUser.java
	ruoyi-common/src/main/java/com/ruoyi/common/utils/SecurityUtils.java
	ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/UserDetailsServiceImpl.java
	ruoyi-quartz/src/main/java/com/ruoyi/quartz/controller/SysJobController.java
	ruoyi-ui/package.json
	ruoyi-ui/src/views/system/menu/index.vue
2021-08-09 09:55:50 +08:00
b84224d7ba 补全注册用户方法上遗漏的@Override注解 2021-08-08 14:08:52 +00:00
98a143f1fe 添加新群号:101456076 2021-08-08 19:50:50 +08:00
3243428009 优化用户不能删除自己 2021-08-08 19:12:52 +08:00
7736097f6b 提取通用方法到基类控制器 2021-08-08 19:12:12 +08:00
f544ffc568 add 增加 国际化演示demo 2021-08-06 18:59:28 +08:00
c06a02fb97 add 增加 完整国际化解决方案 2021-08-06 18:59:08 +08:00
fc60c003c3 升级element-ui到最新版本2.15.5 2021-08-06 14:31:39 +08:00
4d15ab766f fix 修复操作日志根据状态查询异常问题 2021-08-06 12:43:21 +08:00
6896db47af update 补全国家化文件 2021-08-05 13:45:54 +08:00
313d8e8484 update 排版文档 增加新功能说明 2021-08-05 13:31:00 +08:00
8c912a8133 add 集成 性能分析插件 p6spy 更强劲的 SQL 分析 2021-08-05 13:30:36 +08:00
ffd3dc335f update 将 Actuator 配置 移动到全局配置 2021-08-05 13:30:04 +08:00
4e54190e3a update 代码生成模板 适配新excel导出 2021-08-05 10:22:29 +08:00
79bf332c53 remove 移除通用上传下载接口与配置 2021-08-04 19:11:39 +08:00
08db4a5f53 update 更改所有业务excel导出 2021-08-04 19:03:25 +08:00
ffed5a09cb remove 移除原生excel工具 2021-08-04 19:02:59 +08:00
5ca4478540 update 更新 SysJob 导入导出 补全 SysUser 试图对象 2021-08-04 18:52:09 +08:00
9cf4794146 update 更新 SysUser 导入导出 2021-08-04 18:29:38 +08:00
43901370e9 update 自动注入修改为强制注入 无用户信息返回 null 并日志报警 2021-08-04 18:13:11 +08:00
b65856227f update 文件存储工厂使用redis加载类型 2021-08-04 17:40:02 +08:00
e1fcbc6476 update 移动文件存储 controller 到 admin 模块 2021-08-04 17:27:33 +08:00
0e8a8fca31 update 移动文件存储业务到 system 模块 2021-08-04 17:26:14 +08:00
01e8fe5ddb fix 头像上传 未走OSS存储问题 2021-08-04 13:10:28 +08:00
0ec756cf58 fix oss列表 jpeg 不回显问题 2021-08-04 13:09:43 +08:00
0539c2f927 update 重写系统部分业务导出 2021-08-04 11:46:55 +08:00
80067d32fc fix 头像上传 未走OSS存储问题 2021-08-04 11:15:16 +08:00
19d5f2dd78 update 下载工具更名为通用下载 2021-08-04 09:28:31 +08:00
13dde63463 update 修改 下载工具类 删除无用代码 2021-08-04 09:27:16 +08:00
da4e080656 update 修改 操作日志导出 适配easyexcel工具 2021-08-03 19:29:59 +08:00
89cca8af07 update 重构 统一使用 zip 工具下载 2021-08-03 19:29:15 +08:00
170908ef8d add 增加 easyexcel 工具类 2021-08-03 19:28:15 +08:00
70b77d9801 add 增加 easyexcel 依赖 2021-08-03 19:27:48 +08:00
2b1c3335f6 !74 Fix 修复DictUtils方法报错
Merge pull request !74 from jackytang/N/A
2021-08-03 02:07:20 +00:00
ad15978ccb Fix 修复DictUtils方法报错 2021-08-02 16:10:31 +00:00
c813046594 update 日常校验 统一重构到 StringUtils 便于维护扩展 2021-08-02 19:28:41 +08:00
5740561cd3 update 更新文档链接 更明显 2021-08-02 15:08:04 +08:00
28073ef2fe update 适配新业务 接口返回值 2021-08-02 13:08:36 +08:00
c958217d19 update 修改 自动注入器 用户未登录异常拦截抛出警告 返回Null 2021-08-02 13:08:19 +08:00
f8ab5663ef update 日常字符串校验 统一重构到 StringUtils 便于维护扩展 2021-08-02 12:15:14 +08:00
cfdeada3fd Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue into dev
 Conflicts:
	pom.xml
	ruoyi-admin/src/main/resources/application.yml
	ruoyi-admin/src/main/resources/i18n/messages.properties
	ruoyi-common/src/main/java/com/ruoyi/common/constant/Constants.java
	ruoyi-common/src/main/java/com/ruoyi/common/constant/UserConstants.java
	ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java
	ruoyi-common/src/main/java/com/ruoyi/common/filter/XssFilter.java
	ruoyi-common/src/main/java/com/ruoyi/common/utils/StringUtils.java
	ruoyi-framework/src/main/java/com/ruoyi/framework/config/FilterConfig.java
	ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java
	ruoyi-framework/src/main/java/com/ruoyi/framework/manager/factory/AsyncFactory.java
	ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/TokenService.java
	ruoyi-generator/src/main/java/com/ruoyi/generator/util/VelocityUtils.java
	ruoyi-generator/src/main/resources/vm/java/controller.java.vm
	ruoyi-generator/src/main/resources/vm/java/mapper.java.vm
	ruoyi-generator/src/main/resources/vm/java/service.java.vm
	ruoyi-generator/src/main/resources/vm/java/serviceImpl.java.vm
	ruoyi-generator/src/main/resources/vm/xml/mapper.xml.vm
	ruoyi-quartz/src/main/java/com/ruoyi/quartz/controller/SysJobController.java
	ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java
	ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java
	ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java
	ruoyi-ui/src/api/login.js
	ruoyi-ui/src/router/index.js
	ruoyi-ui/src/utils/zipdownload.js
	ruoyi-ui/src/views/index.vue
	ruoyi-ui/src/views/login.vue
	ruoyi-ui/src/views/system/user/index.vue
2021-08-02 11:21:09 +08:00
210b5af1c7 update 优化自动注入器 异常检查更完善 2021-08-02 09:39:35 +08:00
946242e8f1 add 增加 重复提交 配置属性类 2021-08-01 11:04:37 +08:00
1cb79223ff update feign-okhttp 11.0 => 11.2
update okhttp 3.19.4 => 4.9.1
update minio 8.2.0 => 8.3.0
2021-08-01 11:03:56 +08:00
68ae4df2dc 升级commons.io到最新版本v2.11.0 2021-07-31 17:52:06 +08:00
de33e6ecc8 优化代码生成模板 2021-07-30 22:18:20 +08:00
a1cc346aca 优化代码生成模板 2021-07-30 21:50:47 +08:00
5397e345ca 新增是否开启用户注册功能 2021-07-30 21:23:35 +08:00
ba99070ca4 update 更新 防重提交拦截器 demo演示案例 2021-07-30 19:11:10 +08:00
c65acd6a28 update 重写 防重提交拦截器 支持全局与注解自定义 拦截时间配置配置 优化逻辑 2021-07-30 19:10:54 +08:00
a6bde3c5da update 降级 minio 依赖版本 2021-07-30 14:17:15 +08:00
39783f2b19 update 降级 minio 依赖版本 2021-07-30 14:14:21 +08:00
8ed7916b61 定时任务屏蔽http(s)远程调用 2021-07-30 11:28:46 +08:00
2de5cc52d1 启用父部门状态排除顶级节点 2021-07-30 11:28:04 +08:00
f6bc28000e 防止错误token导致的解析异常 2021-07-29 17:32:55 +08:00
90d2a7af03 update 更新 BigNumberSerializer 书写错误 2021-07-29 15:09:23 +08:00
d29a7adc9a update 更新 BigNumberSerializer 注释 2021-07-29 14:28:08 +08:00
0158fb437d update 更新 springboot 版本标签 2021-07-29 13:27:26 +08:00
2ef70303c5 Merge remote-tracking branch 'origin/dev' into dev 2021-07-29 13:11:42 +08:00
7e613f8da6 add 增加 jackson 超出 JS 最大数值自动转字符串(雪花id序列化)处理 2021-07-29 13:11:35 +08:00
826bef86b2 update 更新软件架构图 2021-07-29 03:22:56 +00:00
0bfc4b433b update 优化 InsertAll 写法 2021-07-28 18:23:27 +08:00
6b5dd4d2be 优化XSS跨站脚本过滤 2021-07-28 16:04:59 +08:00
4da51c739b update service 统一使用 ServicePlusImpl 2021-07-28 14:39:20 +08:00
5dbf39beee update service 统一使用 ServicePlusImpl 2021-07-28 14:22:58 +08:00
e6becb9337 BLOB下载时清除URL对象引用 2021-07-28 13:13:28 +08:00
c191b24024 fix 修复 jdk8 与 jdk11 差异问题 2021-07-28 11:56:37 +08:00
13da3c71d8 fix 修复 jdk8 与 jdk11 差异问题 2021-07-28 11:56:12 +08:00
eb2be90e74 Merge remote-tracking branch 'origin/dev'
# Conflicts:
#	README.md
#	docker/docker-compose.yml
#	pom.xml
#	ruoyi-admin/pom.xml
#	ruoyi-admin/src/main/resources/application-dev.yml
#	ruoyi-admin/src/main/resources/application-prod.yml
#	ruoyi-common/pom.xml
#	ruoyi-demo/pom.xml
#	ruoyi-extend/pom.xml
#	ruoyi-extend/ruoyi-monitor-admin/pom.xml
#	ruoyi-framework/pom.xml
#	ruoyi-generator/pom.xml
#	ruoyi-generator/src/main/resources/vm/java/editBo.java.vm
#	ruoyi-generator/src/main/resources/vm/java/queryBo.java.vm
#	ruoyi-quartz/pom.xml
#	ruoyi-system/pom.xml
#	ruoyi-ui/package.json
#	ruoyi-ui/src/views/index.vue
2021-07-28 10:49:16 +08:00
973471c63b 发布 v2.6.0 2021-07-28 10:45:01 +08:00
79766fa8c2 update springboot 2.4.9 => 2.5.3
update hutool 5.7.5 => 5.7.6
update redisson 3.16.0 => 3.16.1
update datasource 3.4.0 => 3.4.1
2021-07-28 10:18:05 +08:00
8da55fb72a 添加新群号:101456076 2021-07-28 09:51:19 +08:00
6e75e88d71 update 同步ruoyi修正 2021-07-27 12:48:28 +08:00
06944747fd Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue into dev
 Conflicts:
	pom.xml
	ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysProfileController.java
	ruoyi-admin/src/main/resources/application.yml
	ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysMenuServiceImpl.java
	ruoyi-ui/package.json
	ruoyi-ui/src/router/index.js
	ruoyi-ui/src/views/monitor/job/index.vue
	ruoyi-ui/src/views/system/dict/index.vue
	ruoyi-ui/src/views/system/menu/index.vue
	ruoyi-ui/src/views/system/role/index.vue
	ruoyi-ui/src/views/system/user/index.vue
	ruoyi-ui/src/views/system/user/profile/resetPwd.vue
	ruoyi-ui/src/views/tool/gen/index.vue
2021-07-27 12:42:41 +08:00
6a5c86541a 跳转路由高亮相对应的菜单栏 2021-07-27 11:54:20 +08:00
3803ac78e2 升级oshi到最新版本v5.8.0 2021-07-27 11:53:59 +08:00
51ae60820d Merge remote-tracking branch 'origin/dev' into dev 2021-07-27 11:07:40 +08:00
7cf6064200 update 重构 IServicePlus 功能 增加 BeanCopyUtils 深拷贝工具 2021-07-27 11:07:33 +08:00
4095a1b6ee !275 fix Issue #I42GRW 任意账户越权漏洞
Merge pull request !275 from lagXkjy/master
2021-07-27 02:08:04 +00:00
3347ca4d74 fix:Issue #I42GRW 修复任意账户越权漏洞 2021-07-27 09:33:12 +08:00
2e1761423d fix 修复 DictData 删除逻辑问题 2021-07-26 12:05:15 +00:00
79eb42d3fe remove 删除 自带通用上传 接口 使用OSS模块替换 2021-07-26 14:36:59 +08:00
11c73d8877 udpate 补全缺失类 2021-07-26 13:57:11 +08:00
a5fbb1cd1f udpate 更新 新特性文档介绍 2021-07-26 13:24:21 +08:00
a3f1a00078 udpate 更新 OSS模块 适配新规范 2021-07-26 13:15:37 +08:00
280196c9e5 udpate 更新新功能演示案例 2021-07-26 13:13:46 +08:00
83cc800e97 update 多bo合并 使用分组校验 生成bo代码 2021-07-26 13:12:56 +08:00
da5a1293b3 update 更新自定义vo转化接口 2021-07-26 13:12:03 +08:00
48817519a9 update 修改页面文档与源码地址 2021-07-26 13:08:54 +08:00
b7f6f73342 fix 修复 授权角色空数据问题 2021-07-26 10:52:31 +08:00
9b1883988b 升级element-ui到最新版本2.15.3 2021-07-26 09:50:58 +08:00
49c8a007cc 修复定时任务日志执行状态显示 2021-07-26 09:50:33 +08:00
64f6d28441 角色&菜单新增字段属性提示信息 2021-07-25 20:08:55 +08:00
c26d87c677 内链设置meta信息 2021-07-25 20:05:18 +08:00
97ae0eb7c7 密码框新增显示切换密码图标 2021-07-25 19:13:56 +08:00
6c1cccd031 导入用户样式调整 2021-07-25 19:08:00 +08:00
856d1ceba8 顶部菜单样式调整 2021-07-25 19:06:57 +08:00
60673b3b64 去除默认分页合理化参数 2021-07-25 10:35:37 +08:00
0a516e3001 更多操作按钮添加权限控制 2021-07-25 10:20:52 +08:00
bb87f35797 富文本新增上传文件大小限制 2021-07-25 08:57:01 +08:00
90d4fd8cf1 update [重大改动] 重写VO转换 支持深拷贝 将VO类抽象到 ServicePlus 泛型处理 2021-07-24 21:19:05 +08:00
fbe9ad2392 Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue into dev
 Conflicts:
	ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java
	ruoyi-ui/src/router/index.js
2021-07-24 19:03:36 +08:00
b539939a90 update 更新druid配置 独立配置更明显 2021-07-24 18:29:12 +08:00
1dfc9bbaa6 fix 修复多数据源druid全局配置缩进错误 引起无效配置问题
(cherry picked from commit 334fe11584)
2021-07-24 18:25:51 +08:00
334fe11584 fix 修复多数据源druid全局配置缩进错误 引起无效配置问题 2021-07-24 18:23:22 +08:00
c43f9bc3c2 顶部菜单排除隐藏的默认路由 2021-07-24 18:20:55 +08:00
46b43b1bd9 !269 code=401时request方法没有返回Promise.reject 修复
Merge pull request !269 from 严俊东/N/A
2021-07-24 02:48:01 +00:00
c92ae6a9d2 update 更新除图片外显示URL文本 2021-07-23 19:50:08 +08:00
8dbda47174 !268 修正方法名单词拼写错误
Merge pull request !268 from 稚屿/N/A
2021-07-23 11:34:30 +00:00
dd9340090b add OSS模块 增加预览图片开关 2021-07-23 19:14:37 +08:00
7114fc2720 update OSS模块 更新 阿里云 腾讯云 相关代码 重构部分代码结构 2021-07-23 18:37:39 +08:00
22fd00832d update 更新OSS模块 七牛云相关代码 2021-07-23 15:35:28 +08:00
2d17123b74 update springboot 2.4.8 => 2.4.9
update hutool 5.7.4 => 5.7.5
update minio 8.2.2 => 8.3.0
update docker plugin 1.2.0 => 1.2.2
2021-07-23 10:50:03 +08:00
bb67924233 update OSS下载文件名改为后端传输 2021-07-23 10:48:28 +08:00
1f2cf719da Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue into dev
 Conflicts:
	pom.xml
	ruoyi-ui/src/views/monitor/job/index.vue
2021-07-21 14:00:07 +08:00
85376e8d6e add 演示Demo增加自定义分页接口案例 2021-07-21 12:07:12 +08:00
ed197ce7ac update 完成OSS模块页面功能 2021-07-20 17:26:20 +08:00
cdace51197 code=401时request方法没有返回Promise.reject 修复 2021-07-20 04:49:22 +00:00
a4c019ace2 update OSS接口增加通用contentType 2021-07-20 11:12:22 +08:00
c24fc4282c 修正方法名单词拼写错误 2021-07-20 00:54:50 +00:00
eea8f33cf9 发布 v2.5.2 bug修复版
(cherry picked from commit b12bdd1f15)
2021-07-19 19:44:18 +08:00
0a128e454c update 编写 Minio 实现 调整OSS模块结构 2021-07-19 19:40:18 +08:00
b12bdd1f15 发布 v2.5.2 bug修复版 2021-07-19 18:56:46 +08:00
0bf40ba600 fix 回滚代码生成器 批处理优化(字段内容不一致, 不适合批处理) 2021-07-19 18:48:13 +08:00
7d4f60e89d fix 代码生成 queryType 重复勾选数据库无默认值问题 2021-07-19 18:48:11 +08:00
59006cb931 fix 修复接口单参数校验无效问题 2021-07-19 18:48:08 +08:00
acf40052c4 update 优化代码生成器注释格式 2021-07-19 18:48:00 +08:00
aad482a7e0 remove 移除无用配置 2021-07-19 18:47:55 +08:00
dc3a017301 fix 代码生成器 queryType >= <= 标识符错误问题 2021-07-19 18:47:48 +08:00
50b7421f28 remove 删除无用文档与脚本 2021-07-19 18:47:44 +08:00
61daaa3506 fix 未完全解决的代码生成字典问题 2021-07-19 18:45:18 +08:00
5b42f87ec4 update 修复 thread-pool: enabled 配置不生效问题 2021-07-19 18:45:17 +08:00
3aaf4e2384 fix 回滚代码生成器 批处理优化(字段内容不一致, 不适合批处理) 2021-07-19 14:18:38 +08:00
1891dbc566 fix 代码生成 queryType 重复勾选数据库无默认值问题 2021-07-19 10:04:56 +08:00
00b9043915 add 增加 OSS 模块业务代码 2021-07-18 20:27:37 +08:00
fdd8c65b36 fix 修复接口单参数校验无效问题 2021-07-18 19:53:16 +08:00
7cffafcdaa update 增加OSS模块service自动激活 2021-07-18 19:29:33 +08:00
f847f67982 update 更新OSS配置类 使用内部类结构 2021-07-18 18:41:47 +08:00
4b921f5e72 remove 移除无用配置 2021-07-18 18:22:55 +08:00
089e288a6e update 使用 策略+工厂 重写OSS模块 2021-07-18 18:20:21 +08:00
d642c08c2e update 优化代码生成器注释格式 2021-07-18 18:19:16 +08:00
7e90d84598 add 增加 OSS 对象存储模块 相关代码(未完成) 2021-07-17 20:44:27 +08:00
d7fde6fe0d fix 代码生成器 queryType >= <= 标识符错误问题 2021-07-17 18:07:08 +08:00
b616a2f2e7 定时任务新增更多操作 2021-07-15 17:35:33 +08:00
dfebbfc331 remove 删除无用文档与脚本 2021-07-14 14:47:48 +08:00
a42acb03ab !70 fix 未完全解决的代码生成字典问题
Merge pull request !70 from Nguyendream/N/A
2021-07-14 06:43:08 +00:00
1031ba44b7 fix 未完全解决的代码生成字典问题 2021-07-14 06:38:56 +00:00
28fa991fc2 update 修复 thread-pool: enabled 配置不生效问题 2021-07-14 10:43:33 +08:00
60abdf1dbc 升级oshi到最新版本v5.7.5 2021-07-14 09:53:26 +08:00
83905db717 !69 同步dev分支
Merge pull request !69 from 疯狂的狮子Li/dev
2021-07-13 05:50:21 +00:00
55546dfc80 发布 v2.5.1 针对 v2.5.0 版本新特性bug修复 2021-07-13 13:49:47 +08:00
a412b6b03a update 验证码开关 转移到系统配置内 2021-07-13 13:38:53 +08:00
fd5414f82e Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue into dev
 Conflicts:
	ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/CaptchaController.java
	ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java
	ruoyi-system/src/main/java/com/ruoyi/system/service/ISysConfigService.java
	ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysConfigServiceImpl.java
	ruoyi-ui/src/components/ImageUpload/index.vue
	ruoyi-ui/src/views/login.vue
	sql/ry_20210713.sql
2021-07-13 13:34:10 +08:00
79965e30af fix 合并 pr !68 业务集群部署与文件上传的问题 2021-07-13 13:20:08 +08:00
5c8de41b32 fix 修复 docker业务集群部署与文件上传的问题 2021-07-13 13:12:32 +08:00
6bf38a806c fix 修复 docker业务集群部署与文件上传的问题 2021-07-13 13:11:37 +08:00
15c45eae11 fix 修复代码生成同步表结构id冲突问题 2021-07-13 13:08:47 +08:00
45b9acd57b fix 修复代码生成选择字典 无法取消问题 2021-07-13 11:32:02 +08:00
3b765f3ac9 fix 修复代码生成字典为null问题 2021-07-13 11:24:12 +08:00
7b894da43c 参数管理支持配置验证码开关 2021-07-13 10:30:40 +08:00
c8b66f9b04 删除富文本video事件 2021-07-13 10:28:55 +08:00
25d9edd5c9 !259 图片上传 - 多图时无法删除相应图片修复
Merge pull request !259 from 严俊东/N/A
2021-07-13 02:26:10 +00:00
fdad98b321 Merge remote-tracking branch 'origin/dev' into dev 2021-07-12 14:30:05 +08:00
8ddd71a818 update 使用hutool重构 判断是否url 2021-07-12 14:29:49 +08:00
5632278688 !67 同步dev分支
Merge pull request !67 from 疯狂的狮子Li/dev
2021-07-12 03:39:43 +00:00
1cbe4c0d88 Merge branch 'master' of gitee.com:JavaLionLi/RuoYi-Vue-Plus into dev 2021-07-12 03:39:26 +00:00
77a21d098f 图片上传 - 多图时无法删除相应图片修复 2021-07-12 03:01:50 +00:00
cd34c87afa fix 修复升级合并错误 2021-07-12 11:00:12 +08:00
d30ba9d52e 发布 v2.5.0 2021-07-12 09:58:32 +08:00
e085ec9418 发布 v2.5.0 2021-07-12 09:53:46 +08:00
aac20ca789 update hutool 5.7.4 2021-07-12 09:46:05 +08:00
599016a63a update 同步ruoyi修正差异 2021-07-12 09:44:46 +08:00
8231953e29 Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue into dev
 Conflicts:
	pom.xml
	ruoyi-admin/pom.xml
	ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysMenuController.java
	ruoyi-admin/src/main/resources/application.yml
	ruoyi-common/pom.xml
	ruoyi-common/src/main/java/com/ruoyi/common/constant/UserConstants.java
	ruoyi-common/src/main/java/com/ruoyi/common/utils/StringUtils.java
	ruoyi-framework/pom.xml
	ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java
	ruoyi-generator/pom.xml
	ruoyi-quartz/pom.xml
	ruoyi-system/pom.xml
	ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/MetaVo.java
	ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysMenuServiceImpl.java
	ruoyi-ui/package.json
	ruoyi-ui/src/components/HeaderSearch/index.vue
	ruoyi-ui/src/layout/components/AppMain.vue
	ruoyi-ui/src/router/index.js
	ruoyi-ui/src/store/modules/permission.js
	ruoyi-ui/src/views/index.vue
2021-07-12 09:37:23 +08:00
170cfb356c 若依 3.6.0 2021-07-12 08:42:11 +08:00
5879c2484a 菜单路由配置支持内链访问 2021-07-11 16:31:10 +08:00
c02dad2ca3 默认访问首页新增提示语 2021-07-11 15:28:11 +08:00
1bfa14e3c6 富文本默认上传返回url类型 2021-07-10 12:17:32 +08:00
ea506de048 Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue into dev
 Conflicts:
	ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRoleController.java
	ruoyi-generator/src/main/resources/vm/vue/index-tree.vue.vm
	ruoyi-generator/src/main/resources/vm/vue/index.vue.vm
	ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java
	ruoyi-ui/src/directive/index.js
	ruoyi-ui/src/directive/permission/hasPermi.js
	ruoyi-ui/src/directive/permission/hasRole.js
	ruoyi-ui/src/main.js
	ruoyi-ui/src/views/system/notice/index.vue
2021-07-09 18:07:32 +08:00
d6bb7ab832 update 更新 admin client 与 actuator 配置到 环境配置文件 2021-07-09 17:41:45 +08:00
43486f2f41 update 配置 monitor-admin docker编排 2021-07-09 17:15:09 +08:00
5dec58e7f5 自定义弹窗拖拽指令 2021-07-09 17:12:29 +08:00
8321f92d2c 全局注册通用组件 2021-07-09 17:09:57 +08:00
da1095e298 授权用户添加访问权限 2021-07-09 17:08:30 +08:00
1c11d7ccc1 update 转移 springboot-admin 到扩展模块项目 2021-07-09 15:30:40 +08:00
33ae270b0d update 更新 nginx https 配置 2021-07-09 14:14:16 +08:00
4c500eb50c update 更新 部署文档 2021-07-08 21:01:57 +08:00
dcad0cdf92 update 更新 业务模块 集群配置 2021-07-08 20:34:24 +08:00
bc5898b8cd update 更新 nginx 配置文件 2021-07-08 20:34:12 +08:00
18705b4f26 update 更新文档 Docker 文档说明 2021-07-08 20:33:49 +08:00
e169366638 update 更新文档 PR 说明 2021-07-08 20:18:27 +08:00
ae8c0b6c43 update 更新sql文件项目官网 2021-07-08 20:06:19 +08:00
6a8e281b66 update 更新docker脚本配置 2021-07-08 20:06:06 +08:00
821f54f1ab update 富文本接口返回值修正 2021-07-08 20:05:37 +08:00
e30079d656 Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue into dev
 Conflicts:
	ruoyi-ui/src/components/FileUpload/index.vue
	ruoyi-ui/src/components/ImageUpload/index.vue
2021-07-08 19:58:28 +08:00
f56da498ab ImageUpload组件支持多图片上传 2021-07-08 19:17:09 +08:00
6905522b91 update 优化 docker 配置 2021-07-08 16:47:34 +08:00
e259093e01 文件上传组件添加数量限制属性 2021-07-08 15:49:04 +08:00
e963a86b15 富文本编辑组件添加类型属性 2021-07-08 15:48:11 +08:00
e447fb806b FileUpload组件支持多文件上传 2021-07-08 12:36:02 +08:00
d0bbcc4e77 update 更新 docker ip配置 2021-07-06 15:30:25 +08:00
282f3b0632 add 增加 docker 配置 2021-07-06 14:06:25 +08:00
80e74eb91c add 增加 docker 编排 与 shell 脚本 2021-07-06 13:48:06 +08:00
61e2a60438 update 同步 ruoyi 对新业务进行修正 2021-07-06 13:19:53 +08:00
59114a14ff update 同步 ruoyi 对新业务进行修正 2021-07-06 13:05:47 +08:00
aa14085746 Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue into dev
 Conflicts:
	ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRoleController.java
	ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java
	ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java
	ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java
	ruoyi-system/src/main/java/com/ruoyi/system/service/ISysRoleService.java
	ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java
	ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java
	ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java
	ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml
	ruoyi-ui/src/api/system/role.js
	ruoyi-ui/src/api/system/user.js
	ruoyi-ui/src/assets/styles/ruoyi.scss
	ruoyi-ui/src/router/index.js
	ruoyi-ui/src/views/system/role/index.vue
	ruoyi-ui/src/views/system/user/index.vue
2021-07-06 12:01:05 +08:00
9ac87fd66f update 优化中英文语言配置 2021-07-06 11:39:14 +08:00
54688ce7c7 update 优化批量插入执行器 增加主键类型枚举对应生成策略 2021-07-05 18:17:49 +08:00
2fc3dcfc74 update 更改演示案例 2021-07-05 16:35:15 +08:00
90c41d498c 角色管理新增分配用户功能 2021-07-05 14:54:09 +08:00
ce6bea4ba0 限制超级管理员不允许操作 2021-07-05 09:57:15 +08:00
769e298e0a !66 修复 按钮loading卡死的问题
Merge pull request !66 from Nguyendream/N/A
2021-07-05 01:31:49 +00:00
dfb4d9f049 修复 按钮loading卡死的问题 2021-07-05 00:39:29 +00:00
2704e921c8 update 增加 feign 熔断 自定义结构体解析方法 与 demo 注释 2021-07-04 19:18:06 +08:00
99051916eb update 升级 springboot 2.4.8 2021-07-04 13:24:19 +08:00
de194880ae update 关闭默认二级缓存 推荐使用 spring-cache 注解手动缓存 2021-07-04 02:21:04 +08:00
c26073afeb update 优化缓存配置 增加spring-cache演示案例 2021-07-04 02:13:24 +08:00
b9128b6074 update 依赖升级 2021-07-03 23:52:39 +08:00
d6ca9e548d Merge remote-tracking branch 'origin/dev' into dev 2021-07-02 09:39:14 +08:00
2d8f380b71 update 优化 增加MP注入异常拦截 2021-07-02 09:39:07 +08:00
9c7901f526 用户管理新增分配角色功能 2021-07-01 18:01:36 +08:00
sxq
945b6c1e59 redis获取map属性bug修复。 2021-07-01 14:03:29 +08:00
5647cf7a7e update 规范maven写法 2021-07-01 10:42:24 +08:00
d4be4df871 update 优化代码生成器 批量导入 2021-06-30 13:37:11 +08:00
d92560b64b fix 修复 hutool StrUtil.containsAny 传入参数后返回结果不一致问题 2021-06-29 15:22:45 +08:00
4952f7dcdb !61 update ruoyi-common/src/main/java/com/ruoyi/common/utils/DictUtils.java.
Merge pull request !61 from 陆继保/N/A
2021-06-29 07:17:35 +00:00
200170e5f3 update ruoyi-common/src/main/java/com/ruoyi/common/utils/DictUtils.java. 2021-06-29 07:04:25 +00:00
10a6a9192d update 更新 MP 详细日志配置 2021-06-29 09:57:45 +08:00
99de90a015 update 更新配置注释(规范使用方法) 2021-06-28 19:23:02 +08:00
cb54546259 Merge remote-tracking branch 'origin/dev' into dev 2021-06-28 13:54:53 +08:00
efd1fc017b Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue into dev
 Conflicts:
	pom.xml
	ruoyi-common/src/main/java/com/ruoyi/common/core/page/PageDomain.java
	ruoyi-ui/vue.config.js
2021-06-28 13:52:19 +08:00
04f5a93aa8 升级pagehelper到最新版1.3.1 2021-06-25 17:25:49 +08:00
751ca90690 !251 修复日志列表取消字段排序时的报错问题
Merge pull request !251 from 稚屿/N/A
2021-06-25 09:23:45 +00:00
b73a67455d update README.md. 2021-06-25 08:01:54 +00:00
b51b8b1b41 update README.md. 2021-06-25 08:00:38 +00:00
4d7ef44aee Merge branch 'master' of https://gitee.com/JavaLionLi/RuoYi-Vue-Plus 2021-06-24 17:14:15 +08:00
3148781045 update 更新文档 提问四部曲 2021-06-24 17:13:19 +08:00
96507d3709 update 更新文档 提问四部曲 2021-06-24 17:12:48 +08:00
5ddfd5bf11 update 更新文档 提问四部曲 2021-06-24 17:10:38 +08:00
f6dd60c051 update 修改readme加入提问四部曲 2021-06-24 17:10:37 +08:00
beef02a4b6 update 更新文档 提问四部曲 2021-06-24 17:10:03 +08:00
676ecd9052 update 修改readme加入提问四部曲 2021-06-24 17:06:49 +08:00
4962ec7589 Merge branch 'master' of https://gitee.com/JavaLionLi/RuoYi-Vue-Plus 2021-06-24 15:46:01 +08:00
cc2fbc7b89 fix 相对路径下载问题 2021-06-24 15:42:51 +08:00
66f453452e fix 相对路径下载问题 2021-06-24 15:41:16 +08:00
24c7ff7959 Merge branch 'master' of https://gitee.com/JavaLionLi/RuoYi-Vue-Plus 2021-06-24 09:54:13 +08:00
dfd7f594b5 update 更新文档版本 2021-06-24 09:39:33 +08:00
9b76b5ac98 update 更新文档版本 2021-06-24 09:39:14 +08:00
9edab3dc55 !58 同步dev分支
Merge pull request !58 from 疯狂的狮子Li/dev
2021-06-24 01:36:00 +00:00
3eee19c9a2 Merge remote-tracking branch 'origin/dev' into dev 2021-06-24 09:34:16 +08:00
8195e948a1 发布 v2.4.0 2021-06-24 09:34:06 +08:00
1dfeae6a03 修复日志列表取消字段排序时的报错问题 2021-06-24 00:27:37 +00:00
ae43edeb4f update 更新 初始化项目 文档地址 2021-06-23 21:24:13 +08:00
1488a09b8e Merge branch 'dev' of https://gitee.com/JavaLionLi/RuoYi-Vue-Plus 2021-06-23 18:08:17 +08:00
152a386ac1 add 增加 Swagger3 用法示例 2021-06-23 17:01:30 +08:00
c4712bcb52 Merge branch 'dev' of https://gitee.com/JavaLionLi/RuoYi-Vue-Plus 2021-06-23 15:31:22 +08:00
4545beab51 update 更新文档 增加 GitHub 地址 与其他小标签 2021-06-23 15:30:26 +08:00
f48e807cee remove 删除无用测试类 2021-06-23 09:51:44 +08:00
c12dc71ece Merge remote-tracking branch 'origin/dev'
# Conflicts:
#	ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/RedisLockAspect.java
2021-06-23 09:44:04 +08:00
ce3562b3ea Merge remote-tracking branch 'origin/dev' 2021-06-23 09:43:31 +08:00
d05458aa3a Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue into dev
 Conflicts:
	ruoyi-ui/src/main.js
	ruoyi-ui/src/views/system/dict/data.vue
	ruoyi-ui/src/views/system/dict/index.vue
	ruoyi-ui/src/views/system/user/index.vue
	ruoyi-ui/src/views/system/user/profile/userInfo.vue
2021-06-23 09:38:53 +08:00
1ed60c79c0 用户信息长度校验限制 2021-06-22 20:45:19 +08:00
aee1e53140 全局挂载字典标签组件 2021-06-22 20:44:40 +08:00
c822e2f6cc Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue into dev
 Conflicts:
	ruoyi-ui/src/views/monitor/druid/index.vue
	ruoyi-ui/src/views/system/dict/data.vue
	ruoyi-ui/src/views/system/dict/index.vue
	ruoyi-ui/src/views/tool/swagger/index.vue
2021-06-22 16:56:38 +08:00
f098222a43 update 集成 Lock4j 分布式锁 2021-06-22 16:45:37 +08:00
sxq
715abe1140 删除redislockmanager 2021-06-22 16:31:41 +08:00
sxq
645c926bbd 集成lock4j框架,删除redisson锁,使用lock4j的锁。 2021-06-22 16:06:02 +08:00
sxq
56eba9cded Merge branch 'dev' of D:\idea\RuoYi-Vue-Plus with conflicts. 2021-06-22 15:35:52 +08:00
253e2b2de1 增加字典标签样式回显 2021-06-22 14:24:26 +08:00
1790c81603 fix 修复地址ip地址特殊回环问题 2021-06-22 14:12:51 +08:00
b1413f021e 增加字典标签样式回显 2021-06-22 14:04:14 +08:00
fef57cb312 update 更新文档说明 2021-06-22 14:01:35 +08:00
a129fafb69 update 更新多数据源与缓存 注意事项 2021-06-22 13:57:36 +08:00
81897d0b04 update 更新多数据源演示案例 2021-06-22 13:43:20 +08:00
40bba563d6 update 优化多数据源aop顺序问题 2021-06-22 13:43:05 +08:00
1caf76f64b update 更新多数据源文档介绍 2021-06-22 11:52:29 +08:00
8338913ac5 update 更新动态数据源 默认数据源配置 与文档链接 2021-06-22 11:38:33 +08:00
c950daf301 update 优化 多数据源集成 相关pr 2021-06-22 11:31:27 +08:00
cf16e31632 多数据源替换成dynamic-datasource 2021-06-22 11:31:04 +08:00
f48d708e28 fix 修复 insertAll sql拼接无主键问题 2021-06-21 20:03:31 +08:00
f585992c6f Merge remote-tracking branch 'origin/dev' into dev 2021-06-21 19:41:11 +08:00
9c55b83dea fix 修复 insertAll sql拼接无主键问题 2021-06-21 17:53:18 +08:00
ff5edc44ed update 注释主子表选项 不推荐使用 2021-06-21 12:52:21 +08:00
dcd95d013f update springboot 2.3.11 => 2.4.7
update springboot-admin 2.3.1 => 2.4.1
update feign 2.2.6 => 3.0.3
update hutool 5.7.1 => 5.7.2
2021-06-21 12:43:23 +08:00
d507111008 update 更新 jackson 时区配置 2021-06-19 00:34:57 +08:00
3ff6339e29 add 增加测试批量新增演示案例 2021-06-18 15:32:55 +08:00
3cc028fa29 update 根据改动调整测试类 2021-06-18 15:32:23 +08:00
85ae3a9420 update 对相关代码改动 进行调整 2021-06-18 15:31:38 +08:00
46b67fef7a add 增加 ServicePlusImpl 自动以实现类 重写移除事务注解方法 防止多数据源失效 2021-06-18 15:28:43 +08:00
c98ab8fb51 add 增加 自定义 批量insert方法 2021-06-18 15:27:47 +08:00
281b6b6d2b update 调整 core mp 包结构 2021-06-18 15:25:37 +08:00
60c22b6a43 update ry.sh. 2021-06-17 21:29:00 +08:00
3f05ed6ffa 封装iframe组件 2021-06-17 20:17:42 +08:00
e87f2dda85 update 更新 redisson 文档说明 以免造成误解 2021-06-17 19:27:00 +08:00
44bbe8b307 update 同步更新 ruoyi 适配新功能 2021-06-17 19:22:49 +08:00
a8c1d02ee1 Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue into dev
 Conflicts:
	pom.xml
	ruoyi-common/src/main/java/com/ruoyi/common/constant/Constants.java
	ruoyi-common/src/main/java/com/ruoyi/common/core/page/PageDomain.java
	ruoyi-common/src/main/java/com/ruoyi/common/utils/file/FileUtils.java
	ruoyi-generator/src/main/java/com/ruoyi/generator/service/GenTableServiceImpl.java
	ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysDeptMapper.java
	ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java
	ruoyi-system/src/main/resources/mapper/system/SysDeptMapper.xml
	ruoyi-ui/.env.development
	ruoyi-ui/.env.production
	ruoyi-ui/.env.staging
	ruoyi-ui/package.json
	ruoyi-ui/src/App.vue
	ruoyi-ui/src/assets/styles/ruoyi.scss
	ruoyi-ui/src/components/Pagination/index.vue
	ruoyi-ui/src/layout/components/Settings/index.vue
	ruoyi-ui/src/layout/components/Sidebar/Logo.vue
	ruoyi-ui/src/main.js
	ruoyi-ui/src/permission.js
	ruoyi-ui/src/settings.js
	ruoyi-ui/src/store/modules/settings.js
	ruoyi-ui/src/views/monitor/logininfor/index.vue
	ruoyi-ui/src/views/monitor/operlog/index.vue
	ruoyi-ui/src/views/system/user/index.vue
	ruoyi-ui/vue.config.js
2021-06-17 18:15:34 +08:00
a2e4f747e0 update 优化 jdk11 依赖全部转移到选项配置 2021-06-17 13:48:00 +08:00
7dd18c75b0 update 更新 jackson 相关文档 2021-06-17 12:43:00 +08:00
090ad5323a 日志列表支持排序操作 2021-06-17 12:30:43 +08:00
47266f712a update 更新 JDK logo 2021-06-17 10:33:48 +08:00
0140965a30 update 优化 jdk11 相关 pr 2021-06-17 09:42:00 +08:00
8bda10c23c !54 fix 生成器生成的 service 和 serviceImpl 中 deleteWithValidByIds 参数字段类型错误
* fix 生成器生成的 service 和 serviceImpl 中 deleteWithValidByIds 参数字段类型错误
2021-06-17 09:30:52 +08:00
d10099d9e9 update 适配 jdk11 2021-06-16 23:46:26 +08:00
ac3f9e5f33 【update】JDK11支持 2021-06-16 23:33:01 +08:00
0d9fb68a04 update 更新 自定义主键案例 2021-06-16 19:40:59 +08:00
c3636f1527 update 更新 feign demo 更清晰的用法 2021-06-16 19:24:44 +08:00
a0392865f4 update 更新 feign demo 更清晰的用法 2021-06-16 19:24:26 +08:00
9f856e9ec2 update 回滚 Mybatis-Plus 到 3.4.3 版本(3.4.3.1 官方代码有bug https://gitee.com/baomidou/mybatis-plus/issues/I3VS3L) 2021-06-16 18:44:06 +08:00
f9967cca4c fix 移除 Long 序列化为 String 配置 改为由用户自行添加注解 2021-06-16 17:41:48 +08:00
a1717eac6d update 升级 hutool 5.7.1 适配工具类 2021-06-16 15:39:19 +08:00
bb2ade75a8 update 升级 hutool 5.7.1 适配工具类 2021-06-16 15:38:44 +08:00
7bdce848e7 update 升级 hutool 5.7.1 适配工具类 2021-06-16 15:36:45 +08:00
feb7c85d57 update mybatis-plus 升级 3.4.3.1 fixbug 版本 2021-06-16 13:29:33 +08:00
2cdc12055d fix 修复 JsonUtils 参数为空报错 2021-06-16 13:15:18 +08:00
639816369a remove 移除无用swagger配置 2021-06-16 12:58:10 +08:00
3e90fd010d 升级commons.fileupload到最新版本v1.4 2021-06-16 09:53:00 +08:00
462862ba65 升级commons.io到最新版本v2.10.0 2021-06-16 09:52:38 +08:00
7601a72faf 升级element-ui到最新版本2.15.2 2021-06-15 10:26:19 +08:00
7ab14ff293 定时任务屏蔽rmi远程调用 2021-06-15 10:26:02 +08:00
d98faaffee update 移除 fastjson 增加 jackson 工具类 重写相关业务 2021-06-13 15:39:35 +08:00
c2cf7ba16a update 优化 jackson 序列化配置 2021-06-13 15:38:40 +08:00
5311937b69 update 增加 jackson 配置 默认序列化时间格式 2021-06-12 23:41:56 +08:00
a044519b21 update 移除 基础类 字段生成判断 2021-06-12 23:40:34 +08:00
8349e631d2 update 优化 异步工厂重写 使用 spring 异步处理 2021-06-12 20:14:50 +08:00
b3541e9758 update 优化 使用 hutool 替换 ruoyi 自带工具类 解决部分方法过期与高版本JDK不兼容问题 2021-06-12 20:13:35 +08:00
97a0c890bf update 增加MP自定义id 序列化兼容 2021-06-11 17:42:33 +08:00
200106df39 升级oshi到最新版本v5.7.4 2021-06-11 10:29:14 +08:00
83718c61cd 发布 v2.3.2 2021-06-11 09:29:21 +08:00
a51f7d52ed Merge remote-tracking branch 'origin/dev' into dev 2021-06-11 09:23:41 +08:00
bf3a88ff1a 发版 v2.3.2 2021-06-11 09:23:34 +08:00
ea66e20282 修复用户搜索分页变量错误 2021-06-10 22:36:22 +08:00
346e80839f update spring-cache 与 MP二级缓存相关 2021-06-10 22:32:40 +08:00
a209b39552 分页组件新增pagerCount属性 2021-06-10 22:29:13 +08:00
24da85fea3 update MybatisPlus整合Redis二级缓存 2021-06-10 21:18:58 +08:00
57df2690da update spring-cache 整合 redisson 2021-06-10 20:23:15 +08:00
35f607f9a5 remove 删除无用注释 2021-06-10 18:23:59 +08:00
557672ba9f 系统布局配置支持动态标题开关 2021-06-10 18:05:27 +08:00
427430fc48 update 补全注释 更新文档 2021-06-10 17:11:44 +08:00
48d9fc10ea update 增加分页对象注释 2021-06-10 16:21:44 +08:00
c5c8afe147 update 还原错误提交 2021-06-10 15:44:14 +08:00
b348b766fc Merge remote-tracking branch 'origin/dev' into dev 2021-06-10 15:43:28 +08:00
b561f7d906 remove 移除无用配置文件 2021-06-10 15:43:20 +08:00
9d05d2bac5 remove 移除无用配置文件 2021-06-10 15:42:46 +08:00
a3116cd27d 优化部门父级启用状态 2021-06-10 15:34:38 +08:00
f6ccfe6ed3 update 独立 CountDownLatch 方法 2021-06-10 14:04:41 +08:00
1bf9dd1217 update 优化redis锁工具代码结构 2021-06-10 13:32:50 +08:00
524683eabd update swagger 升级为 3.0.0 使用 OAS_30 协议 2021-06-10 09:57:34 +08:00
2103731f10 Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue into dev
 Conflicts:
	pom.xml
	ruoyi-admin/pom.xml
	ruoyi-admin/src/main/java/com/ruoyi/web/core/config/SwaggerConfig.java
	ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysRole.java
	ruoyi-framework/src/main/java/com/ruoyi/framework/config/ResourcesConfig.java
	ruoyi-generator/src/main/resources/vm/vue/index.vue.vm
	ruoyi-ui/src/layout/components/Navbar.vue
	ruoyi-ui/src/views/monitor/job/index.vue
	ruoyi-ui/src/views/monitor/logininfor/index.vue
	ruoyi-ui/src/views/monitor/online/index.vue
	ruoyi-ui/src/views/monitor/operlog/index.vue
	ruoyi-ui/src/views/system/config/index.vue
	ruoyi-ui/src/views/system/dept/index.vue
	ruoyi-ui/src/views/system/dict/data.vue
	ruoyi-ui/src/views/system/dict/index.vue
	ruoyi-ui/src/views/system/menu/index.vue
	ruoyi-ui/src/views/system/notice/index.vue
	ruoyi-ui/src/views/system/post/index.vue
	ruoyi-ui/src/views/system/role/index.vue
	ruoyi-ui/src/views/system/user/index.vue
	ruoyi-ui/src/views/tool/gen/index.vue
	ruoyi-ui/src/views/tool/swagger/index.vue
2021-06-10 09:44:56 +08:00
ceeac476ec update 优化 代码生成器 增加表单防重注解 2021-06-10 00:04:19 +08:00
a6ba7d9093 update 优化pr redis工具代码 2021-06-09 23:31:47 +08:00
sxq
f45b50a796 update redis锁工具类编写 2021-06-09 23:30:46 +08:00
2ace3257f9 升级swagger到最新版本v3.0.0 2021-06-09 20:07:36 +08:00
c16ee7fc2c 升级swagger到最新版本v3.0.0 2021-06-08 16:34:36 +08:00
fd33fe869d 修复导出角色数据范围翻译缺少仅本人 2021-06-08 16:27:24 +08:00
9a792e601e fix 修复相对路径上传异常问题 2021-06-04 18:12:09 +08:00
00d024ff86 fix 修复相对路径上传异常问题 2021-06-04 18:11:46 +08:00
428a6ed71b update 优化 锁切面代码 key到常量类 2021-06-04 16:49:33 +08:00
f087b37cb3 update 优化 锁切面代码 key到常量类 2021-06-04 16:46:28 +08:00
2027dae30b !49 同步dev分支
Merge pull request !49 from 疯狂的狮子Li/dev
2021-06-04 16:12:43 +08:00
450c6759eb 发布 2.3.1 2021-06-04 16:11:17 +08:00
dcf125a08a update 优化 redis锁pr 代码 2021-06-04 16:09:43 +08:00
sxq
ad6386a618 redis分布式锁(基于注解形势)。 2021-06-04 15:00:56 +08:00
6fc141497a update 优化分页默认值 默认查全部 2021-06-04 10:48:35 +08:00
d674d934e7 fix 修复上传路径 win 打包编译为 win 路径, linux 报错问题 2021-06-04 09:46:28 +08:00
85bf5fbc9b fix 修复主键列表显示 重复生成bug 2021-06-03 17:33:48 +08:00
b7446f8d0f 富文本工具栏配置视频 2021-06-03 13:26:09 +08:00
19924cd184 修复关闭confirm提示框控制台报错问题 2021-06-03 13:24:29 +08:00
77a7cac830 同步 dev 2021-06-03 10:11:07 +08:00
01c34b837d Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue into dev
 Conflicts:
	ruoyi-ui/src/views/system/menu/index.vue
2021-06-03 09:46:33 +08:00
5cc9b34132 update 更新文档 增加 star MIT IDEA 等小标签 2021-06-02 23:02:51 +08:00
a5975a489c update 更新文档 增加 star MIT IDEA 等小标签 2021-06-02 22:55:56 +08:00
edaf57148a update 更新开源协议软件名 2021-06-02 22:55:02 +08:00
85470a1549 修复表单构建选择下拉选择控制台报错问题 2021-06-02 20:43:34 +08:00
2a604c0548 !237 同步菜单新增、修改界面“功能权限”maxlength为100(保持与数据库字段长度一致),避免因超过50后不能录入问题
Merge pull request !237 from 老李/origin
2021-06-02 20:40:09 +08:00
2ab7c7feae !47 【优化】代码生成器新增、修改页面的按钮动作loading从页面loading到按钮loading
Merge pull request !47 from 狂盗一枝梅/kdyzm
2021-06-02 18:20:06 +08:00
6b789e2eb0 优化新增、修改页面的按钮动作loading从页面loading到按钮loading 2021-06-02 18:13:34 +08:00
329c95196e update 更新测试案例 2021-06-02 17:15:20 +08:00
375a7f7b4c !45 【优化】为代码生成器生成的前端代码添加loading;删除方法回调函数变更为箭头表达式
Merge pull request !45 from 狂盗一枝梅/kdyzm
2021-06-02 17:10:40 +08:00
9590de2c19 优化树生成的代码生成:增加loading、修改删除按钮的回调函数为箭头函数 2021-06-02 17:08:00 +08:00
430addf520 【优化】为代码生成器生成的前端代码添加loading;删除方法回调函数变更为箭头表达式 2021-06-02 16:40:58 +08:00
sxq
0fe064b8a2 修复reddison不能批量删除的bug。 2021-06-02 15:14:04 +08:00
2ee2e4505a fix 修复配置文件书写错误 2021-06-02 14:28:40 +08:00
7c20d6e28c update 优化代码书写格式 使用工具类 2021-06-02 12:47:54 +08:00
a961fff69d Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue into dev
 Conflicts:
	ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/TestController.java
2021-06-02 12:42:18 +08:00
b7f3c68eca 优化图片工具类读取文件 2021-06-02 11:45:40 +08:00
edd2981076 调整用户测试接口swagger注解 2021-06-02 11:45:30 +08:00
5c40c4b958 update 文档增加 Oracle 分支路径配置 2021-06-02 10:09:09 +08:00
a287599c8f update 增加redis空密码兼容性 2021-06-02 10:09:09 +08:00
0bc71e28a1 update 优化代码书写格式 去除警告 2021-06-02 10:09:08 +08:00
45fe77ce4a update 文档增加 Oracle 分支路径配置 2021-06-02 09:49:16 +08:00
a4edce5a93 Merge remote-tracking branch 'origin/dev' into dev 2021-06-02 09:41:19 +08:00
83ba79dca2 update 增加redis空密码兼容性 2021-06-02 09:41:12 +08:00
d1351503a8 update 优化代码书写格式 去除警告 2021-06-01 23:14:42 +08:00
d9dd76f2ae 发布 v2.3.0 2021-06-01 10:54:59 +08:00
54d97b53de 发布 v2.3.0 2021-06-01 10:54:23 +08:00
7437092765 Merge remote-tracking branch 'origin/master' 2021-06-01 10:34:09 +08:00
c90ca8c2a6 发布 v2.3.0 2021-06-01 10:33:57 +08:00
d815317d7c 发布 v2.3.0 2021-06-01 10:21:56 +08:00
7bbeea0b81 update 更新文档 增加 redisson 内容 2021-05-31 23:38:30 +08:00
99c4692a0d update 升级 luttuce 为 redisson 性能更强 工具更全 2021-05-31 23:21:14 +08:00
f3aaa7ea7a Merge remote-tracking branch 'origin/dev' into dev 2021-05-31 17:44:03 +08:00
38c3c878e1 !44 修改批量接口,改用mybatis原生foreach优化性能
Merge pull request !44 from Yjoioooo/insert-optimization
2021-05-31 17:43:53 +08:00
90063ad03c update 修改框架中批量接口,改为原生mybatis执行foreach,改善性能 2021-05-31 17:37:34 +08:00
8ba346faa6 update 修改框架中批量接口,改为原生mybatis执行foreach,改善性能 2021-05-31 17:23:13 +08:00
079dc12fe1 update 优化 system 模块 删除性能 2021-05-31 16:55:26 +08:00
d7359122b4 Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue into dev
 Conflicts:
	ruoyi-common/src/main/java/com/ruoyi/common/core/controller/BaseController.java
	ry.sh
2021-05-31 13:21:29 +08:00
c105a63c8b 添加bat脚本执行应用 2021-05-31 12:16:27 +08:00
01fef0b9e1 同步菜单新增、修改界面“功能权限”maxlength为100(保持与数据库字段长度一致),避免因超过50后不能录入问题 2021-05-31 10:31:50 +08:00
7b7f098dee update 文档更新数据权限使用 2021-05-30 02:25:56 +08:00
a02aeb468e add 增加demo模块 树表演示案例(包含数据权限) 2021-05-30 02:25:14 +08:00
a3a682eeb1 add 增加demo模块 单表演示案例(包含数据权限) 2021-05-30 02:24:10 +08:00
456f31901c add 增加测试数据sql文件 2021-05-30 02:22:19 +08:00
6d5a0d8a7e update 完美修复 数据权限功能(支持单表多表过滤) 2021-05-30 02:20:21 +08:00
6192d42564 update 优化代码生成模板 2021-05-30 02:18:34 +08:00
8cc2aee13e fix 修复单表数据权限问题 2021-05-29 21:54:20 +08:00
0860934888 update 优化数据权限sql 解决MP apply注入附带 AND 语法问题 2021-05-29 21:52:15 +08:00
d2b077af35 fix 修复数据权限编写错误 2021-05-29 21:48:56 +08:00
4bca89f072 fix 修复数据权限编写错误 2021-05-29 21:48:26 +08:00
fcfc5c85c7 update 还原数据权限修改 2021-05-29 19:51:08 +08:00
06513446a0 update 还原数据权限修改 2021-05-29 19:44:33 +08:00
2d53896f92 Merge remote-tracking branch 'origin/master'
# Conflicts:
#	ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/DataScopeAspect.java
#	ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysConfigServiceImpl.java
2021-05-29 19:17:58 +08:00
e523764b0f 发布 2.2.1 2021-05-29 19:14:45 +08:00
8e7d9e1bc7 Merge remote-tracking branch 'origin/master' 2021-05-29 19:03:51 +08:00
38d2a97582 update 优化参数&字典缓存操作 2021-05-29 19:03:31 +08:00
01d2b6ded9 update 优化dataScope参数防止注入 2021-05-29 19:03:11 +08:00
080770a493 update 文档增加演示图例 2021-05-29 19:03:04 +08:00
3aaa219d5e fix 修复sql符号错误 2021-05-29 19:03:03 +08:00
df8a6bbaa2 remove 删除提交错误文件 2021-05-29 19:03:02 +08:00
08d82bb12f 配置文件错误 2021-05-29 19:03:01 +08:00
57e071fe6b 发布 2.2.1 2021-05-29 18:57:56 +08:00
8d761fa60c update 优化数据权限sql 解决MP apply注入附带 AND 语法问题 2021-05-29 18:54:35 +08:00
b7bd67b4cb update 优化数据权限sql 解决MP apply注入附带 AND 语法问题 2021-05-29 18:41:32 +08:00
ead1136e31 add 增加 security 权限框架 @Async 异步注解配置 2021-05-28 14:24:45 +08:00
3d54400163 update 增加修改包名文档 2021-05-28 11:08:51 +08:00
7779cbca4d update 优化参数&字典缓存操作 2021-05-28 10:30:11 +08:00
8d6c9e116d Merge remote-tracking branch 'origin/dev' into dev
# Conflicts:
#	ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/DataScopeAspect.java
2021-05-28 10:07:48 +08:00
d0b2166525 Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue into dev
 Conflicts:
	ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysConfigController.java
	ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDictDataController.java
	ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDictTypeController.java
	ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/DataScopeAspect.java
	ruoyi-system/src/main/java/com/ruoyi/system/service/ISysConfigService.java
	ruoyi-system/src/main/java/com/ruoyi/system/service/ISysDictDataService.java
	ruoyi-system/src/main/java/com/ruoyi/system/service/ISysDictTypeService.java
	ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysConfigServiceImpl.java
	ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDictDataServiceImpl.java
	ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDictTypeServiceImpl.java
	ruoyi-system/src/main/resources/mapper/system/SysDeptMapper.xml
	ruoyi-ui/src/api/system/config.js
	ruoyi-ui/src/api/system/dict/type.js
	ruoyi-ui/src/views/system/config/index.vue
	ruoyi-ui/src/views/system/dict/index.vue
2021-05-28 10:07:15 +08:00
b4f9d3a8f2 update 优化dataScope参数防止注入 2021-05-27 22:06:36 +08:00
af9cfb40a4 优化参数&字典缓存操作 2021-05-27 17:38:44 +08:00
6fa3bfe051 修复两处存在SQL注入漏洞问题 2021-05-27 17:38:27 +08:00
454a07b775 update 文档增加演示图例 2021-05-26 16:45:17 +08:00
8a6bc41938 update 文档增加演示图例 2021-05-26 16:44:59 +08:00
f793ee395d fix 修复sql符号错误 2021-05-26 13:00:48 +08:00
d2f0ea6fa0 fix 修复sql符号错误 2021-05-26 09:23:56 +08:00
c94756f8a2 remove 删除提交错误文件 2021-05-25 14:33:00 +08:00
a42c1e4711 remove 删除提交错误文件 2021-05-25 14:32:41 +08:00
25264faf37 配置文件错误 2021-05-25 14:28:58 +08:00
380b4e5f3a 配置文件错误 2021-05-25 14:28:38 +08:00
9bd78a8c22 !41 发布 v2.2.0
Merge pull request !41 from 疯狂的狮子li/dev
2021-05-25 14:18:21 +08:00
a570589dcc 发布 v2.2.0 2021-05-25 14:11:32 +08:00
2885ced2c7 add 增加验证码开关 2021-05-25 14:02:50 +08:00
5dc873209e add 增加验证码开关 2021-05-25 14:02:34 +08:00
3131b7ea9d fix redis反序列化异常问题 2021-05-25 13:40:18 +08:00
ca903ebd1f update 更新捐献二维码 2021-05-25 10:32:19 +08:00
a2ca46004b update 更新捐献码 2021-05-25 10:17:43 +08:00
5795958a18 update 同步升级 ruoyi-vue 3.5.0 2021-05-25 10:14:18 +08:00
6c195af2a3 Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue into dev
 Conflicts:
	pom.xml
	ruoyi-admin/pom.xml
	ruoyi-admin/src/main/resources/application.yml
	ruoyi-common/pom.xml
	ruoyi-common/src/main/java/com/ruoyi/common/filter/XssHttpServletRequestWrapper.java
	ruoyi-common/src/main/java/com/ruoyi/common/utils/ExceptionUtil.java
	ruoyi-common/src/main/java/com/ruoyi/common/utils/uuid/IdUtils.java
	ruoyi-framework/pom.xml
	ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/LogAspect.java
	ruoyi-framework/src/main/java/com/ruoyi/framework/config/RedisConfig.java
	ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java
	ruoyi-generator/pom.xml
	ruoyi-generator/src/main/resources/vm/java/mapper.java.vm
	ruoyi-generator/src/main/resources/vm/vue/index.vue.vm
	ruoyi-quartz/pom.xml
	ruoyi-quartz/src/main/java/com/ruoyi/quartz/domain/SysJob.java
	ruoyi-system/pom.xml
	ruoyi-ui/package.json
	ruoyi-ui/public/index.html
	ruoyi-ui/src/views/index.vue
	ruoyi-ui/src/views/monitor/job/index.vue
	ruoyi-ui/src/views/monitor/logininfor/index.vue
	ruoyi-ui/src/views/monitor/operlog/index.vue
	ruoyi-ui/src/views/system/config/index.vue
	ruoyi-ui/src/views/system/dict/data.vue
	ruoyi-ui/src/views/system/dict/index.vue
	ruoyi-ui/src/views/system/notice/index.vue
	ruoyi-ui/src/views/system/post/index.vue
	ruoyi-ui/src/views/system/role/index.vue
	ruoyi-ui/src/views/system/user/index.vue
2021-05-25 10:00:36 +08:00
5e64a93d11 若依 3.5.0 2021-05-25 09:37:55 +08:00
caa81d1f4d Merge remote-tracking branch 'origin/dev' into dev 2021-05-24 16:12:46 +08:00
5f584e683a update redis序列化修改为使用jackson 2021-05-24 16:12:40 +08:00
4aabf5d8be Redis设置HashKey序列化 2021-05-24 15:10:55 +08:00
cf6254a8d5 用户登录后记录最后登录IP&时间 2021-05-24 14:21:29 +08:00
883cff5de9 新增IE浏览器版本过低提示页面 2021-05-24 14:15:41 +08:00
7e79c4f249 生成vue模板导出按钮点击后添加遮罩 2021-05-24 11:34:03 +08:00
504638eb41 !234 【轻量级 PR】:删去两处冗余代码
Merge pull request !234 from xivLi/master
2021-05-24 11:30:21 +08:00
2adac4a899 升级fastjson到最新版1.2.76 2021-05-24 11:25:17 +08:00
56a943bf48 升级druid到最新版本v1.2.6 2021-05-24 11:24:54 +08:00
77ebca264a 修复请求形参未传值记录日志异常问题 2021-05-23 19:22:30 +08:00
7b94ae3a9a xss校验json条件优化 2021-05-23 19:20:36 +08:00
bd1edc6dcc !233 修正方法名单词拼写错误
Merge pull request !233 from lyqwer/N/A
2021-05-23 17:15:18 +08:00
09d166e97d !231 修正注释
Merge pull request !231 from 刘立伟/N/A
2021-05-23 17:14:52 +08:00
a272ea07a9 !38 修改bo代码生成器,修改无法更新代码生成器是否必填为否问题
Merge pull request !38 from Yjoioooo/master
2021-05-22 23:40:26 +08:00
69dd3ab639 update 修改bo加入判断是否设置必填再加载必填注解 2021-05-22 23:30:11 +08:00
798ffd9065 fix 修复代码生成器中表字段取消必填无法更新问题 2021-05-22 23:29:15 +08:00
f3e5d908d6 quartz模块下 domain包中的 SysJob类不需要实现Serializable接口 2021-05-22 16:05:12 +08:00
9651a7d7fc 删去utils.uuid下 IdUtils类中 多余的import(同包下的UUID类) 2021-05-22 15:52:19 +08:00
1d38d51ac1 发布 2.1.2 2021-05-21 17:58:04 +08:00
f80b8f0d42 update springboot 升级 2.3.11
update mybatis-plus 升级 3.4.3 分页Plus对象适配更新
2021-05-21 17:58:03 +08:00
d0dbe49bfd update 增加请求前缀 2021-05-21 17:58:02 +08:00
39a0e05f87 update 请求响应对象 与 分页对象 结构修改 适配接口文档配置 2021-05-21 17:58:01 +08:00
34e7f20f24 update 验证码生成更新为无符号整数计算 2021-05-21 17:58:01 +08:00
dc7eeaa45d 发布 2.1.2 2021-05-21 17:57:13 +08:00
b2914cbcb1 修正方法名单词拼写错误 2021-05-21 17:24:48 +08:00
97a237bbdc update springboot 升级 2.3.11
update mybatis-plus 升级 3.4.3 分页Plus对象适配更新
2021-05-21 11:50:47 +08:00
3d25dfbebe update 增加请求前缀 2021-05-20 17:00:18 +08:00
7076deb2b6 update 请求响应对象 与 分页对象 结构修改 适配接口文档配置 2021-05-20 13:23:12 +08:00
db18050b86 update 验证码生成更新为无符号整数计算 2021-05-19 22:57:34 +08:00
8c744e13bc 发布 v2.1.1 2021-05-18 11:38:18 +08:00
eb12d7bd73 fix 修复swagger开关无法控制关闭问题 2021-05-18 11:38:17 +08:00
5e32b5f0bf update 配置统一提取为 properties 配置类 2021-05-18 11:38:16 +08:00
0fc1f4e10e update admin 实时监控日志 改为保留一天 2021-05-18 11:38:16 +08:00
3b79eff2f1 fix maven install 异常 2021-05-18 11:38:15 +08:00
92a54a5320 update 删除过期方法 2021-05-18 11:38:14 +08:00
65ca0f2554 update 修正更新说明错误 2021-05-18 11:38:14 +08:00
72de8f57a7 发布 v2.1.1 2021-05-18 11:37:24 +08:00
d0a4d6b111 修正注释 2021-05-18 10:21:48 +08:00
c4eb641d9c fix 修复swagger开关无法控制关闭问题 2021-05-17 16:36:07 +08:00
b431703262 导出按钮点击之后添加遮罩 2021-05-17 15:37:58 +08:00
2ebcffb22e update 配置统一提取为 properties 配置类 2021-05-17 13:39:59 +08:00
89fa1dff09 update admin 实时监控日志 改为保留一天 2021-05-16 10:42:47 +08:00
5bc6057050 fix maven install 异常 2021-05-16 10:29:13 +08:00
87164d574e update 删除过期方法 2021-05-16 09:25:19 +08:00
b366f8b053 update 修正更新说明错误 2021-05-15 14:55:21 +08:00
be6a9ba72c 发布 v2.1.0 2021-05-15 14:34:57 +08:00
3e08a8e1c1 update 通用Service接口 增加自定义vo转换函数 2021-05-15 14:34:56 +08:00
3c57f468c6 update swagger升级3.0.2 2021-05-15 14:34:55 +08:00
84c1841e85 remove 移除ruoyi自带服务监控(Admin已全部包含) 2021-05-15 14:34:55 +08:00
a7833a3b72 remove 移除ruoyi自带服务监控(Admin已全部包含) 2021-05-15 14:34:54 +08:00
df6f3e658a update 增强分页工具兼容性 2021-05-15 14:34:53 +08:00
b885e1eeff 发布 v2.1.0 2021-05-15 14:33:53 +08:00
69b9a4db2b update 通用Service接口 增加自定义vo转换函数 2021-05-15 14:27:29 +08:00
ee064fa84c update swagger升级3.0.2 2021-05-15 14:25:48 +08:00
9d94d0fce9 remove 移除ruoyi自带服务监控(Admin已全部包含) 2021-05-15 14:25:07 +08:00
b5064021e6 remove 移除ruoyi自带服务监控(Admin已全部包含) 2021-05-15 14:23:43 +08:00
31db658929 update 增强分页工具兼容性 2021-05-15 11:32:05 +08:00
322d9d66a8 !36 同步dev分支
Merge pull request !36 from 疯狂的狮子li/dev
2021-05-14 21:43:57 +08:00
488cce767f update 打包插件更新 2.3.10 2021-05-14 21:43:28 +08:00
2316379160 !35 同步dev分支
Merge pull request !35 from 疯狂的狮子li/dev
2021-05-14 21:40:56 +08:00
d459bb61dc update 打包插件更新 2.3.10 2021-05-14 21:38:41 +08:00
590f4e07af !34 同步dev分支
Merge pull request !34 from 疯狂的狮子li/dev
2021-05-14 21:12:59 +08:00
e071b4315a 正式发布 v2.0.0 2021-05-14 21:07:20 +08:00
869e975ed1 update springboot 升级 2.3.10 依赖全面升级适配 2021-05-14 17:03:19 +08:00
dab99405c5 update springboot 升级 2.3.10 依赖全面升级适配 2021-05-14 16:58:09 +08:00
d2c745d3fd add 代码生成器 增加校验注解 2021-05-14 15:12:40 +08:00
6067cb1797 add 增加增强Mapper 重写业务适配 2021-05-14 13:01:18 +08:00
51efddcfb0 update 重写文档介绍 2021-05-14 11:19:50 +08:00
0c7e52d9c3 update 代码生成器修改为MP分页(完成) 2021-05-14 10:44:04 +08:00
81b50b9b3c update 代码生成器修改为MP分页(未完成) 2021-05-13 23:52:36 +08:00
7c26e516c9 update 更新数据权限相关注意事项 2021-05-13 22:45:26 +08:00
9c95c93630 fix 修复系统配置表 sql符号错误问题 2021-05-13 22:44:30 +08:00
7f73591742 fix 修复代码生成 数据权限问题 2021-05-13 22:43:14 +08:00
f01bb5966a update 使用 MP 分页工具 重构业务 2021-05-13 21:25:51 +08:00
b0417338cc add 增加升级版通用Service IServicePlus 2021-05-13 21:24:47 +08:00
20e82d708b remove 移除 pagehelper 分页工具 2021-05-13 21:23:50 +08:00
9f5a03edcd add 增加分页工具 2021-05-13 21:22:51 +08:00
a34fef3478 !33 版本更新 v1.0.2
Merge pull request !33 from 疯狂的狮子li/dev
2021-05-13 09:21:08 +08:00
685504e1d0 版本更新 v1.0.2 2021-05-13 09:20:02 +08:00
fddc128156 update 更新整合打包文档 重新排版 2021-05-13 09:17:12 +08:00
9159e2ed22 fix vue与boot整合打包与admin页面路由冲突 2021-05-13 09:16:28 +08:00
15fdb9b218 !32 版本更新 v1.0.1
Merge pull request !32 from 疯狂的狮子li/dev
2021-05-11 17:37:27 +08:00
3b73bbe0ac 版本更新 v1.0.1 2021-05-11 17:36:52 +08:00
c33c3de43a Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue into dev
 Conflicts:
	README.md
	ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/SysOperlogController.java
	ruoyi-common/src/main/java/com/ruoyi/common/exception/file/InvalidExtensionException.java
	ruoyi-common/src/main/java/com/ruoyi/common/utils/Arith.java
	ruoyi-common/src/main/java/com/ruoyi/common/utils/file/FileUploadUtils.java
	ruoyi-common/src/main/java/com/ruoyi/common/utils/file/MimeTypeUtils.java
	ruoyi-generator/src/main/java/com/ruoyi/generator/controller/GenController.java
	ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java
	ruoyi-ui/src/assets/styles/element-ui.scss
	ruoyi-ui/src/views/index.vue
2021-05-11 17:14:53 +08:00
99726be9ac 修正导入表权限标识 2021-05-11 14:26:20 +08:00
32f333a00e 删除操作日志记录日志 2021-05-11 14:25:39 +08:00
be5c19b764 树级结构更新子节点使用replaceFirst 2021-05-11 14:25:25 +08:00
dd384e4a31 上传媒体类型添加视频格式 2021-05-11 14:25:08 +08:00
bdde195e2b !225 【bug修复】文件上传时出现java.nio.file.FileAlreadyExistsException
Merge pull request !225 from CANYON/master
2021-05-11 14:19:53 +08:00
dafdb43c84 update 配置转移到 yml 文件 统一管理 2021-05-11 10:02:32 +08:00
961c60dd1a update 更新banner 2021-05-10 23:53:15 +08:00
e124de4b80 !31 同步dev分支
Merge pull request !31 from 疯狂的狮子li/dev
2021-05-10 15:35:09 +08:00
98624e66e5 正式发布 1.0.0 2021-05-10 15:34:17 +08:00
5343b03493 update 更新作者二维码 2021-05-08 23:57:09 +08:00
60895bf8d6 update 更新作者二维码 2021-05-08 23:54:52 +08:00
d50e7a3d17 !30 同步dev分支
Merge pull request !30 from 疯狂的狮子li/dev
2021-05-08 23:39:50 +08:00
a181c09786 fix 修复数据权限问题 2021-05-08 23:35:39 +08:00
7c8dd238de !29 同步dev分支
Merge pull request !29 from 疯狂的狮子li/dev
2021-05-08 17:08:21 +08:00
0b6952d0fe fix 日志时间sql符号转换问题 2021-05-08 17:05:18 +08:00
6ce4c93b3c fix 日志时间sql符号转换问题 2021-05-08 16:55:50 +08:00
14ea071306 修复文件上传时java.nio.file.FileAlreadyExistsException 2021-05-08 15:31:16 +08:00
50034301ac 添加新群号:201396349 2021-05-06 20:40:25 +08:00
85ed712c50 !222 update ruoyi-ui/src/assets/styles/element-ui.scss.
Merge pull request !222 from leizhuogogo/N/A
2021-05-06 20:39:36 +08:00
f67d682345 !221 update ruoyi-common/src/main/java/com/ruoyi/common/utils/Arith.java.
Merge pull request !221 from phper08/N/A
2021-05-06 20:39:26 +08:00
0656dc381d !28 同步dev分支
Merge pull request !28 from 疯狂的狮子li/dev
2021-05-06 17:52:14 +08:00
3f1427eef9 update ruoyi-ui/src/assets/styles/element-ui.scss. 2021-05-06 17:50:28 +08:00
882f65fdce update 项目地址项目名 2021-05-06 17:44:46 +08:00
7d0f5e94ef update ruoyi-common/src/main/java/com/ruoyi/common/utils/Arith.java. 2021-05-03 13:18:33 +08:00
f1fccb7a66 !27 同步dev分支
Merge pull request !27 from 疯狂的狮子li/dev
2021-04-28 15:59:28 +08:00
73db99398f fix 部门权限问题 2021-04-28 15:58:08 +08:00
0af493ad67 !26 同步dev分支
Merge pull request !26 from 疯狂的狮子li/dev
2021-04-28 11:53:09 +08:00
bc182f1392 fix 日志时间问题 2021-04-28 11:52:21 +08:00
91c6ae307d Merge remote-tracking branch 'origin/master' 2021-04-25 10:40:15 +08:00
aabae8eb01 update 修改MP验证策略 NOT_NULL -> NOT_EMPTY 2021-04-25 10:40:09 +08:00
e3ea16d020 update 修改MP验证策略 NOT_NULL -> NOT_EMPTY 2021-04-25 10:38:20 +08:00
ad991c9d8e !25 同步 ruoyi
Merge pull request !25 from 疯狂的狮子li/dev
2021-04-25 09:46:06 +08:00
c0e5e9cb24 update 同步ruoyi 2021-04-25 09:45:45 +08:00
ae48c160b0 !24 修复问题
Merge pull request !24 from 疯狂的狮子li/dev
2021-04-25 09:39:52 +08:00
4e723f4936 Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue into dev
 Conflicts:
	ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java
	ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysMenuServiceImpl.java
2021-04-25 09:27:07 +08:00
251547e79e update 重写MP注入器 2021-04-25 09:19:38 +08:00
b222c4215b !23 同步dev
Merge pull request !23 from 疯狂的狮子li/dev
2021-04-23 16:00:06 +08:00
734073019f update 屏蔽用户密码返回 2021-04-23 15:59:46 +08:00
9a26a3c4e8 !22 同步 master
Merge pull request !22 from 疯狂的狮子li/master
2021-04-22 21:14:48 +08:00
1bef814c51 update 补全实体类 注入注解 2021-04-22 21:07:18 +08:00
6dc791c34f !21 同步dev分支
Merge pull request !21 from 疯狂的狮子li/dev
2021-04-22 15:42:00 +08:00
5fcef39a2e add 集成 spring-boot-admin 全方位监控 2021-04-22 15:04:35 +08:00
7ae9f21f82 !20 fix 问题
Merge pull request !20 from 疯狂的狮子li/dev
2021-04-22 10:08:12 +08:00
5b4e9ef4db Merge branch 'master' of https://gitee.com/JavaLionLi/RuoYi-Vue-Plus into dev 2021-04-22 09:50:03 +08:00
39e9df47bc !19 修改添加用户获取到密码为null
Merge pull request !19 from 再见亦是路人/master
2021-04-22 09:49:38 +08:00
9173f9c9cb fix feign熔断问题 2021-04-22 09:32:28 +08:00
62081aebb9 修复开启TopNav后,左侧打开外链问题 2021-04-21 16:34:44 +08:00
a4b71278c0 修改用户密码获取失败 2021-04-21 15:56:00 +08:00
3f07632cd4 修复一级菜单包屑显示重复问题 2021-04-21 15:14:36 +08:00
2c94587263 优化ExcelUtil空值处理 2021-04-21 09:53:14 +08:00
db43f678d8 !18 fix 代码生成器编辑问题
Merge pull request !18 from 疯狂的狮子li/dev
2021-04-19 19:02:51 +08:00
a4f2aa1981 fix 代码生成器编辑问题 2021-04-19 19:01:26 +08:00
78149e19dc !17 同步 ruoyi
Merge pull request !17 from 疯狂的狮子li/dev
2021-04-19 17:54:33 +08:00
046b0bc98a 同步 ruoyi 2021-04-19 17:44:22 +08:00
97873a7b2b Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue into dev
 Conflicts:
	pom.xml
	ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/LogAspect.java
	ruoyi-generator/src/main/java/com/ruoyi/generator/util/VelocityInitializer.java
	ruoyi-ui/src/assets/styles/ruoyi.scss
	ruoyi-ui/src/components/ThemePicker/index.vue
	ruoyi-ui/src/layout/components/Settings/index.vue
	ruoyi-ui/src/store/modules/settings.js
2021-04-19 17:43:32 +08:00
f8633f8c4e fix Feign 熔断不生效 bug 2021-04-19 17:38:47 +08:00
ef27ee0a28 !15 同步 ruoyi
Merge pull request !15 from 疯狂的狮子li/dev
2021-04-16 11:36:47 +08:00
bf5315d306 Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue into dev 2021-04-16 11:34:39 +08:00
9c7efa8e0e !14 fix 表名上传错误
Merge pull request !14 from 疯狂的狮子li/dev
2021-04-16 11:32:07 +08:00
a1c44b4987 fix 表名上传错误 2021-04-16 11:30:51 +08:00
55f8624388 !13 同步dev分支
Merge pull request !13 from 疯狂的狮子li/dev
2021-04-14 14:38:29 +08:00
927777291e update 导出 Excel 工作表的名称修改 2021-04-14 14:36:27 +08:00
3fc3818231 update 完成所有原生功能使用 Mybatis-Plus 与 Lombok 重写 2021-04-14 13:27:27 +08:00
f093da99ec Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue into dev
 Conflicts:
	ruoyi-admin/src/main/resources/application-prod.yml
	ruoyi-generator/src/main/resources/vm/java/controller.java.vm
	ruoyi-generator/src/main/resources/vm/xml/mapper.xml.vm
	ruoyi-ui/src/assets/styles/ruoyi.scss
	ruoyi-ui/src/assets/styles/sidebar.scss
	ruoyi-ui/src/layout/components/Navbar.vue
	ruoyi-ui/src/layout/components/Settings/index.vue
	ruoyi-ui/src/layout/components/TagsView/index.vue
	ruoyi-ui/src/settings.js
	ruoyi-ui/src/store/getters.js
	ruoyi-ui/src/store/modules/permission.js
	ruoyi-ui/src/store/modules/settings.js
	ruoyi-ui/src/store/modules/tagsView.js
	ruoyi-ui/src/views/monitor/druid/index.vue
2021-04-14 13:22:31 +08:00
adeaa77864 update mp化 2021-04-14 12:01:26 +08:00
48d61a3cdf update mp化 2021-04-14 11:19:46 +08:00
876a06a9cd update mp化 2021-04-13 17:14:50 +08:00
20d40ea691 update mp化 2021-04-13 15:29:05 +08:00
d69d1fbfe8 update 更新任务调度模块 与 代码生成模块 MP lombok 化 2021-04-12 17:49:56 +08:00
323fe960bd update 更新基础包与核心包 lombok 化 2021-04-12 17:26:47 +08:00
938ca5c451 fix 补全缺包 2021-04-12 17:09:05 +08:00
4500db395f update ruoyi原生改为 MP lombok 格式
update SysConfig 模块代码
2021-04-12 17:02:55 +08:00
d48946ab90 fix bo缺包问题 2021-04-12 10:34:50 +08:00
88841ac01f update Date参数接收Bo实体格式转换 2021-04-09 11:47:51 +08:00
8b37eca241 Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue
 Conflicts:
	ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysMenuServiceImpl.java
	ruoyi-system/src/main/resources/mapper/system/SysRoleMapper.xml
	ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml
	ruoyi-ui/src/assets/styles/ruoyi.scss
	ruoyi-ui/src/utils/zipdownload.js
2021-04-08 17:12:13 +08:00
1d3a361a66 fix 字节转换 bug 2021-04-08 16:40:10 +08:00
c862484f00 update 默认增加editBo主键生成 2021-04-08 16:29:35 +08:00
ccd48965a8 fix controller 接口路径问题 2021-04-04 20:01:36 +08:00
b6472f3469 Merge branch 'master' of https://gitee.com/JavaLionLi/RuoYi-Vue-Plus 2021-04-04 11:27:42 +08:00
866c69e706 fix 代码生成器问题 2021-04-04 11:27:08 +08:00
a50df84a72 fix 生成 remove 方法参数类型错误 2021-04-03 17:00:47 +08:00
6760942218 fix Page 路径导入 2021-04-02 23:05:44 +08:00
b71e74927e add 添加单模块分支 2021-04-02 16:14:58 +08:00
7e50364244 add 添加单模块分支 2021-04-02 16:14:21 +08:00
b82fa6534b add 添加多模块分支 2021-04-02 16:12:09 +08:00
74a4848205 add 添加单模块分支 2021-04-02 16:11:23 +08:00
4e58887b9a add 增加单模块项目 2021-04-02 16:01:07 +08:00
dfcd84c2bc fix 数据权限语句null bug 2021-04-02 15:44:02 +08:00
3012bf0a31 add 增加数据权限注入 2021-04-02 14:22:27 +08:00
85e9534fae add 增加数据权限注入 2021-04-02 14:15:10 +08:00
4a1ff5a5ac update 修改controller生成模板 规范代码结构 2021-04-01 17:57:54 +08:00
222dfd1fe1 update 修改xml生成模板 附加domain类路径 2021-04-01 17:57:24 +08:00
c1964b934f update 简化queryById代码生成器 2021-03-31 16:51:24 +08:00
b16fe5e263 Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue
 Conflicts:
	ruoyi-ui/src/views/tool/build/index.vue
2021-03-31 16:49:45 +08:00
fdacc04582 Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue
 Conflicts:
	ruoyi-common/src/main/java/com/ruoyi/common/utils/StringUtils.java
	ruoyi-common/src/main/java/com/ruoyi/common/utils/html/EscapeUtil.java
2021-03-30 17:21:22 +08:00
96d10126b2 修复request.getInputStream() 重复读取错误问题 2021-03-30 11:41:24 +08:00
a29ebef202 Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue
 Conflicts:
	ruoyi-common/src/main/java/com/ruoyi/common/filter/RepeatableFilter.java
2021-03-30 11:38:56 +08:00
06e9feadee Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue
 Conflicts:
	ruoyi-ui/src/views/system/user/profile/userAvatar.vue
2021-03-26 14:07:53 +08:00
77ffdf69a1 fix 修复 vo转换 分页bug 2021-03-25 17:01:17 +08:00
e3bcc6b273 fix 查询类模板缺少导入包 2021-03-25 17:00:40 +08:00
39793318a0 update ruoyi-demo 增加 knife4j 依赖 2021-03-25 16:59:17 +08:00
2df675bb01 !12 【BUG】项目启动后配置的定时器任务无法正常启动
Merge pull request !12 from linCodeTest/quartz_bug
2021-03-23 16:43:13 +08:00
c9e01879ca beanUtil.copy参数顺序反了 2021-03-23 16:22:02 +08:00
6557f1bdae update pr优化 2021-03-22 13:34:40 +08:00
f156e0a094 update pr优化 2021-03-22 13:32:20 +08:00
62464cfe45 fix Collection 验证失效问题 2021-03-22 13:31:43 +08:00
7d47e1e81b fix 表名转换问题 2021-03-22 13:30:59 +08:00
3d6fbb93f5 !11 [功能] 拆分出Vo,QueryBo,AddBo,EditBo等领域对象
* [修改] 错误引入的无用导包删除
* [新增] 增加Vo,QueryBo,AddBo,EditBo等视图,并调整controller,service的调用代码
* [新增] 增加CreateAndUpdateMetaObjectHandler,配合fill注解,实现创建和修改人的自动设置,减少重复代码
2021-03-22 09:32:49 +08:00
5d1e977442 个人信息添加手机&邮箱重复验证 2021-03-22 09:30:12 +08:00
8434511e39 Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue
 Conflicts:
	ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysProfileController.java
2021-03-22 09:29:25 +08:00
939d89f0b8 !10 [BUG] 解决只能使用circle干扰的bug
Merge pull request !10 from wugh/hotfix/captcha
2021-03-20 10:14:03 +08:00
1270b056d5 [bug修复] 解决调整验证码干扰的类型无效,只用circle的bug
[优化] 调整使用那种验证码的逻辑判断,使用switch优化,并减少重复代码
2021-03-19 19:28:43 +08:00
a7f235164f Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue
 Conflicts:
	ruoyi-common/src/main/java/com/ruoyi/common/core/controller/BaseController.java
2021-03-18 13:08:14 +08:00
31ddb2aee3 update swagger 升级为 knife4j 2021-03-16 12:52:09 +08:00
c0186580ba fix 修复代码生成缺少jar异常 2021-03-16 10:57:26 +08:00
63a582404b update swagger 模板修改为 swagger-bootstrap-ui 2021-03-15 17:51:00 +08:00
04e1dc351e update 移除无用依赖 2021-03-15 17:50:24 +08:00
7ae2df1390 update 使用hutool 重写 UserAgent 2021-03-15 17:49:30 +08:00
9b4b9e0c74 update 删除通用工具 改为使用hutool 2021-03-15 16:38:43 +08:00
46aa17db9c Merge remote-tracking branch 'origin/master' 2021-03-15 10:00:49 +08:00
71325b540a Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue
 Conflicts:
	ruoyi-admin/src/main/resources/application-prod.yml
	ruoyi-common/src/main/java/com/ruoyi/common/core/controller/BaseController.java
2021-03-15 10:00:14 +08:00
2509815a4f fix 验证码点击不刷新 bug 2021-03-14 00:15:29 +08:00
2b8ab9cc4d update 使用hutool重写系统监控 2021-03-12 18:02:23 +08:00
57cfad671f update 使用hutool重写验证码生成 2021-03-12 16:52:55 +08:00
9a94ab573d !6 update ruoyi-admin/src/main/resources/application.yml.
Merge pull request !6 from hechieh/N/A
2021-03-10 13:34:15 +08:00
51d942f14c update ruoyi-admin/src/main/resources/application.yml. 2021-03-10 13:27:10 +08:00
5494ec36e5 Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue
 Conflicts:
	ruoyi-common/src/main/java/com/ruoyi/common/core/text/Convert.java
	ruoyi-ui/src/components/Editor/index.vue
	ruoyi-ui/src/permission.js
	ruoyi-ui/src/store/modules/user.js
	ruoyi-ui/src/views/monitor/logininfor/index.vue
	ruoyi-ui/src/views/monitor/operlog/index.vue
2021-03-09 09:32:49 +08:00
2c2deced02 Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue 2021-03-03 17:14:21 +08:00
0638f3c1fe Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue
 Conflicts:
	README.md
	ruoyi-ui/src/views/index.vue
2021-02-28 14:39:53 +08:00
9b136e76bb update 3.4.0 2021-02-22 10:06:18 +08:00
ac99fddfe6 Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue
 Conflicts:
	ruoyi-admin/src/main/resources/application.yml
	ruoyi-ui/package.json
	ruoyi-ui/src/views/index.vue
2021-02-22 10:04:43 +08:00
66899c4c96 Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue
 Conflicts:
	sql/ry_20210210.sql
2021-02-18 09:12:32 +08:00
2c40a892f8 Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue
 Conflicts:
	ruoyi-ui/src/store/modules/permission.js
	ruoyi-ui/src/views/system/role/index.vue
2021-02-07 09:18:17 +08:00
6f0dfa850a Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue
 Conflicts:
	ruoyi-ui/src/views/system/role/index.vue
2021-02-03 13:38:43 +08:00
8ba1266b6a 修改 页面生成模板 适配后端时间格式 2021-01-28 09:22:25 +08:00
118c02144f 集成 Feign 接口化管理 Http请求(如短信,支付,推送等) 2021-01-27 15:15:03 +08:00
a4756004f8 删除过时配置 2021-01-27 13:10:05 +08:00
6e6933bb25 支持树表生成 增加生成树表说明 2021-01-25 13:35:07 +08:00
2925f28255 Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue
 Conflicts:
	ruoyi-ui/package.json
2021-01-25 09:54:49 +08:00
b5e8fa2b98 统一校验配置类名称 2021-01-21 09:31:37 +08:00
09acac4caf 更新readme 2021-01-18 16:13:05 +08:00
9fdee373af 删除多余注解(@Data已包含) 2021-01-18 14:00:03 +08:00
3362ce5f33 升级 MybatisPlus 3.4.2 2021-01-15 15:55:24 +08:00
52325307f4 Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue
 Conflicts:
	README.md
2021-01-15 15:08:50 +08:00
684eadbcc6 Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue
 Conflicts:
	ruoyi-common/src/main/java/com/ruoyi/common/constant/GenConstants.java
	ruoyi-generator/src/main/java/com/ruoyi/generator/controller/GenController.java
	ruoyi-generator/src/main/java/com/ruoyi/generator/domain/GenTable.java
	ruoyi-generator/src/main/java/com/ruoyi/generator/domain/GenTableColumn.java
	ruoyi-generator/src/main/java/com/ruoyi/generator/mapper/GenTableMapper.java
	ruoyi-generator/src/main/java/com/ruoyi/generator/service/GenTableServiceImpl.java
	ruoyi-generator/src/main/java/com/ruoyi/generator/service/IGenTableService.java
	ruoyi-generator/src/main/java/com/ruoyi/generator/util/VelocityInitializer.java
	ruoyi-generator/src/main/java/com/ruoyi/generator/util/VelocityUtils.java
	ruoyi-generator/src/main/resources/mapper/generator/GenTableMapper.xml
	ruoyi-generator/src/main/resources/vm/java/controller.java.vm
	ruoyi-generator/src/main/resources/vm/java/domain.java.vm
	ruoyi-generator/src/main/resources/vm/java/mapper.java.vm
	ruoyi-generator/src/main/resources/vm/java/serviceImpl.java.vm
	ruoyi-generator/src/main/resources/vm/vue/index.vue.vm
	ruoyi-generator/src/main/resources/vm/xml/mapper.xml.vm
	ruoyi-ui/src/views/system/user/index.vue
	ruoyi-ui/src/views/tool/gen/editTable.vue
	ruoyi-ui/src/views/tool/gen/genInfoForm.vue
	ruoyi-ui/src/views/tool/gen/index.vue
	sql/ry_20210108.sql
2021-01-11 09:58:41 +08:00
b368745380 Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue
 Conflicts:
	ruoyi-common/src/main/java/com/ruoyi/common/constant/GenConstants.java
	ruoyi-generator/src/main/java/com/ruoyi/generator/util/GenUtils.java
	ruoyi-generator/src/main/resources/vm/vue/index.vue.vm
	ruoyi-ui/package.json
	ruoyi-ui/src/components/HeaderSearch/index.vue
	ruoyi-ui/src/main.js
	ruoyi-ui/src/views/tool/gen/editTable.vue
	ruoyi-ui/src/views/tool/gen/index.vue
2021-01-06 09:35:00 +08:00
d73994f05d Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue
 Conflicts:
	ruoyi-admin/src/main/resources/application.yml
	ruoyi-generator/src/main/resources/vm/vue/index.vue.vm
	ruoyi-ui/src/layout/components/TagsView/index.vue
	ruoyi-ui/src/views/login.vue
	ruoyi-ui/src/views/monitor/job/index.vue
	ruoyi-ui/src/views/monitor/logininfor/index.vue
	ruoyi-ui/src/views/monitor/online/index.vue
	ruoyi-ui/src/views/monitor/operlog/index.vue
	ruoyi-ui/src/views/system/config/index.vue
	ruoyi-ui/src/views/system/dept/index.vue
	ruoyi-ui/src/views/system/dict/data.vue
	ruoyi-ui/src/views/system/dict/index.vue
	ruoyi-ui/src/views/system/menu/index.vue
	ruoyi-ui/src/views/system/notice/index.vue
	ruoyi-ui/src/views/system/post/index.vue
	ruoyi-ui/src/views/system/role/index.vue
	ruoyi-ui/src/views/system/user/index.vue
	ruoyi-ui/src/views/tool/gen/index.vue
2021-01-05 09:22:36 +08:00
e9d368ed0c Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue
 Conflicts:
	ruoyi-common/src/main/java/com/ruoyi/common/constant/GenConstants.java
	ruoyi-generator/src/main/java/com/ruoyi/generator/util/GenUtils.java
	ruoyi-system/src/main/resources/mapper/system/SysMenuMapper.xml
	ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml
2020-12-30 16:20:09 +08:00
b8f6731584 增加 demo模块 方便参考扩展 2020-12-29 10:17:44 +08:00
93e7f53cf8 Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue 2020-12-28 10:40:13 +08:00
c24b912b50 Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue
 Conflicts:
	ruoyi-generator/src/main/resources/vm/vue/index.vue.vm
	ruoyi-ui/src/store/modules/permission.js
2020-12-25 09:59:24 +08:00
476df3117b Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue
 Conflicts:
	ruoyi-ui/src/utils/permission.js
	ruoyi-ui/src/utils/request.js
2020-12-24 10:04:54 +08:00
1000a577d0 配置文件新增redis数据库索引属性 2020-12-21 11:58:49 +08:00
78ef398257 Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue
 Conflicts:
	ruoyi-admin/src/main/resources/application.yml
	ruoyi-ui/src/store/modules/permission.js
2020-12-21 11:55:32 +08:00
805c79506b 代码生成 后端支持 between 2020-12-18 17:46:05 +08:00
817da5bc04 修复export与list结果不统一问题 2020-12-18 16:50:58 +08:00
a514330db3 修复export与list结果不统一的问题 2020-12-18 15:47:07 +08:00
2b0cf24be4 修改 controller 生成器 解决where条件重复bug 2020-12-18 09:47:35 +08:00
6c8497f632 Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue
 Conflicts:
	ruoyi-ui/package.json
	ruoyi-ui/src/components/Breadcrumb/index.vue
	ruoyi-ui/src/layout/components/AppMain.vue
	ruoyi-ui/src/layout/components/Sidebar/index.vue
	ruoyi-ui/src/layout/components/TagsView/index.vue
	ruoyi-ui/src/store/getters.js
	ruoyi-ui/src/store/modules/permission.js
	ruoyi-ui/src/views/system/user/profile/resetPwd.vue
	ruoyi-ui/src/views/system/user/profile/userInfo.vue
	ruoyi-ui/src/views/tool/gen/editTable.vue
2020-12-18 09:45:54 +08:00
b029a7265a 将controller条件查询器改完隐式泛型 2020-12-18 00:02:40 +08:00
f44ff8477f Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue
 Conflicts:
	README.md
	ruoyi-common/src/main/java/com/ruoyi/common/filter/XssHttpServletRequestWrapper.java
	ruoyi-framework/src/main/java/com/ruoyi/framework/config/RedisConfig.java
2020-12-16 12:44:21 +08:00
1249c7ca26 Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue
 Conflicts:
	ruoyi-ui/src/permission.js
	ruoyi-ui/src/views/login.vue
2020-12-15 10:25:00 +08:00
1ec7073027 同步升级 3.3 2020-12-14 09:28:15 +08:00
7e476b941e Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue
 Conflicts:
	ruoyi-admin/src/main/resources/application.yml
	ruoyi-common/src/main/java/com/ruoyi/common/core/redis/RedisCache.java
	ruoyi-ui/package.json
	ruoyi-ui/src/main.js
	ruoyi-ui/src/views/index.vue
	ruoyi-ui/src/views/tool/gen/index.vue
2020-12-14 09:27:27 +08:00
8d4f3561d5 修复mybatis-plus插件不生效bug 2020-12-11 18:45:57 +08:00
8b88d91312 update README.md 2020-12-11 14:44:07 +08:00
f56f57a236 Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue
 Conflicts:
	ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDictDataController.java
	ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java
	ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/LogAspect.java
	ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleMenuMapper.java
	ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java
	ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java
	ruoyi-system/src/main/resources/mapper/system/SysRoleMenuMapper.xml
	ruoyi-ui/package.json
	ruoyi-ui/src/assets/styles/ruoyi.scss
	ruoyi-ui/src/assets/styles/sidebar.scss
	ruoyi-ui/src/assets/styles/variables.scss
	ruoyi-ui/src/components/HeaderSearch/index.vue
	ruoyi-ui/src/components/Screenfull/index.vue
	ruoyi-ui/src/layout/components/Settings/index.vue
	ruoyi-ui/src/layout/components/Sidebar/Logo.vue
	ruoyi-ui/src/layout/components/Sidebar/SidebarItem.vue
	ruoyi-ui/src/layout/components/Sidebar/index.vue
	ruoyi-ui/src/layout/components/TagsView/ScrollPane.vue
	ruoyi-ui/src/layout/index.vue
	ruoyi-ui/src/main.js
	ruoyi-ui/src/settings.js
	ruoyi-ui/src/store/modules/settings.js
	ruoyi-ui/src/store/modules/user.js
	ruoyi-ui/src/views/login.vue
	ruoyi-ui/src/views/system/user/index.vue
	ruoyi-ui/src/views/system/user/profile/resetPwd.vue
	ruoyi-ui/src/views/system/user/profile/userInfo.vue
	ruoyi-ui/src/views/tool/gen/editTable.vue
	ruoyi-ui/src/views/tool/gen/index.vue
	ruoyi-ui/vue.config.js
2020-12-11 14:27:54 +08:00
4e56f30381 修改 生成器controller模板缺导包 与 index页面兼容性
Merge pull request !2 from dragonwzj/master
2020-12-09 16:49:24 +08:00
fe39a7bc7b 模板controller导入;模板vue列表页当有查询条件时报错 2020-12-09 16:16:53 +08:00
5109eb0e7e 日志输出改回相对路径 解决新版idea 编译user.dir会指定到idea配置目录下 2020-12-09 13:37:04 +08:00
583738fa65 日志输出改回相对路径 解决新版idea 编译user.dir会指定到idea配置目录下 2020-12-09 13:33:41 +08:00
5a62019cdd 更新 如何修改为Tomcat相关注释配置与说明 2020-12-08 16:21:30 +08:00
69f30760f8 Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue
 Conflicts:
	ruoyi-ui/src/assets/styles/ruoyi.scss
	ruoyi-ui/src/utils/request.js
	ruoyi-ui/src/views/system/user/profile/userAvatar.vue
2020-12-07 12:59:35 +08:00
e80349c343 Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue
 Conflicts:
	ruoyi-common/src/main/java/com/ruoyi/common/core/domain/BaseEntity.java
	ruoyi-generator/src/main/resources/mapper/generator/GenTableMapper.xml
	ruoyi-system/src/main/resources/mapper/system/SysConfigMapper.xml
	ruoyi-system/src/main/resources/mapper/system/SysDictTypeMapper.xml
	ruoyi-system/src/main/resources/mapper/system/SysLogininforMapper.xml
	ruoyi-system/src/main/resources/mapper/system/SysOperLogMapper.xml
	ruoyi-system/src/main/resources/mapper/system/SysRoleMapper.xml
	ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml
	ruoyi-ui/src/utils/request.js
2020-12-04 11:46:29 +08:00
d2cef9c40d 新增 关于多数据源事务 2020-12-03 11:32:29 +08:00
b346036cca 增加 多数据源事务描述 2020-12-03 11:30:48 +08:00
5ebd0a971f Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue 2020-12-03 11:20:50 +08:00
c50e058953 为所有MP插件增加官方链接 2020-12-03 11:15:54 +08:00
a3dfa843af 增加 多数据源使用注意事项 2020-12-03 11:13:58 +08:00
2afb109bff 增加 maven多环境配置注释 2020-12-01 11:53:55 +08:00
f7f7557d4d 项目修改为 maven多环境配置 2020-12-01 11:44:29 +08:00
b36b413a69 Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue 2020-12-01 09:23:55 +08:00
ce438f182a Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue
 Conflicts:
	ruoyi-common/src/main/java/com/ruoyi/common/constant/GenConstants.java
	ruoyi-common/src/main/java/com/ruoyi/common/constant/UserConstants.java
	ruoyi-common/src/main/java/com/ruoyi/common/core/text/CharsetKit.java
	ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysMenuServiceImpl.java
	ruoyi-ui/package.json
	ruoyi-ui/src/layout/components/AppMain.vue
	ruoyi-ui/src/layout/components/TagsView/index.vue
	ruoyi-ui/src/router/index.js
	ruoyi-ui/src/store/modules/permission.js
	ruoyi-ui/src/views/system/user/profile/userAvatar.vue
	sql/ry_20201128.sql
2020-11-30 12:41:39 +08:00
6d900dc654 Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue 2020-11-25 09:30:42 +08:00
15c4428b9c 修改 ruoyi CharsetKit.java bug 2020-11-24 11:54:38 +08:00
20d7c90515 Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue
 Conflicts:
	ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/ServerController.java
	ruoyi-ui/src/views/system/user/profile/userAvatar.vue
	sql/ry_20201123.sql
2020-11-24 10:03:59 +08:00
3363d7b12d 同步升级 3.2.1 修复重大bug 阻止任意文件下载漏洞 2020-11-18 10:52:33 +08:00
ff563c44e2 Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue
 Conflicts:
	ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/CommonController.java
	ruoyi-admin/src/main/resources/application.yml
	ruoyi-common/src/main/java/com/ruoyi/common/constant/GenConstants.java
	ruoyi-common/src/main/java/com/ruoyi/common/utils/file/FileUtils.java
	ruoyi-generator/src/main/java/com/ruoyi/generator/domain/GenTableColumn.java
	ruoyi-generator/src/main/java/com/ruoyi/generator/util/GenUtils.java
	ruoyi-generator/src/main/resources/vm/vue/index.vue.vm
	ruoyi-ui/package.json
	ruoyi-ui/src/views/index.vue
	ruoyi-ui/src/views/tool/gen/editTable.vue
2020-11-18 10:41:13 +08:00
527decb7fa 更新 undertow 配置 2020-11-16 14:50:05 +08:00
03f0e3a137 为所有MP插件和配置增加官方链接 2020-11-16 14:12:14 +08:00
148d0361e0 增加字段填充配置 2020-11-16 14:03:55 +08:00
d626dd9e90 更新分页插件配置 增加主键插件配置 2020-11-16 13:57:26 +08:00
1043afcecc 重磅升级 Mybatis-Plus 升级为 3.4.1 2020-11-13 11:39:16 +08:00
04d1154be0 重磅升级 重写 Mybatis-Plus 配置文件 根据官方文档详细注释 2020-11-13 11:18:37 +08:00
550f781d6f 重磅升级 Mybatis-Plus 插件 全部升级为最新插件 2020-11-13 11:17:33 +08:00
b114d0a41c 重磅升级 Mybatis-Plus 升级为 3.4.1 Hutool 升级到 5.4.0 2020-11-13 11:16:57 +08:00
60dda6c7eb Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue
 Conflicts:
	ruoyi-ui/src/views/index.vue
2020-11-12 09:24:40 +08:00
c57005b4e4 Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue 2020-11-06 17:18:55 +08:00
93093d9f55 更改 MybatisPlus Lambda查询 改为官方推荐写法 2020-11-05 13:56:49 +08:00
e095a9f73f Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue 2020-11-05 12:58:53 +08:00
5d748a50ff 删除 MyBatisConfig.java 配置文件 2020-11-03 09:58:01 +08:00
efb938c370 Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue
 Conflicts:
	ruoyi-framework/src/main/java/com/ruoyi/framework/config/MyBatisConfig.java
	ruoyi-ui/src/views/system/notice/index.vue
	ruoyi-ui/src/views/system/user/index.vue
2020-11-03 09:56:18 +08:00
616fbc45ae 增加 校验框架配置与全局异常处理 2020-10-28 16:01:26 +08:00
cf44d1f213 Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue
 Conflicts:
	ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/PermissionService.java
	ruoyi-ui/src/views/system/dept/index.vue
2020-10-28 11:54:52 +08:00
30d15afd33 Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue
 Conflicts:
	ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/PermissionService.java
	ruoyi-generator/src/main/resources/vm/sql/sql.vm
	ruoyi-ui/src/views/login.vue
	sql/ry_20201021.sql
2020-10-23 17:41:02 +08:00
8747d36b2c 更改日志存储路径 使用项目变量 2020-10-20 16:38:39 +08:00
1a15c528a2 Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue
 Conflicts:
	ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java
	ruoyi-common/src/main/java/com/ruoyi/common/constant/GenConstants.java
2020-10-16 10:27:13 +08:00
f4876422a9 Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue
 Conflicts:
	ruoyi-ui/src/views/system/dict/index.vue
	ruoyi-ui/src/views/system/role/index.vue
2020-10-14 09:22:01 +08:00
8ca53c7666 Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue
 Conflicts:
	ruoyi-generator/src/main/resources/vm/vue/index.vue.vm
	ruoyi-ui/src/views/monitor/job/index.vue
	ruoyi-ui/src/views/monitor/logininfor/index.vue
	ruoyi-ui/src/views/monitor/online/index.vue
	ruoyi-ui/src/views/monitor/operlog/index.vue
	ruoyi-ui/src/views/system/config/index.vue
	ruoyi-ui/src/views/system/dept/index.vue
	ruoyi-ui/src/views/system/dict/data.vue
	ruoyi-ui/src/views/system/dict/index.vue
	ruoyi-ui/src/views/system/menu/index.vue
	ruoyi-ui/src/views/system/notice/index.vue
	ruoyi-ui/src/views/system/post/index.vue
	ruoyi-ui/src/views/system/role/index.vue
	ruoyi-ui/src/views/system/user/index.vue
	ruoyi-ui/src/views/system/user/profile/resetPwd.vue
	ruoyi-ui/src/views/system/user/profile/userAvatar.vue
	ruoyi-ui/src/views/system/user/profile/userInfo.vue
	ruoyi-ui/src/views/tool/gen/index.vue
2020-10-12 09:54:59 +08:00
bd39b971cf Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue
 Conflicts:
	ruoyi-admin/src/main/resources/application.yml
	ruoyi-ui/package.json
	ruoyi-ui/src/utils/ruoyi.js
	ruoyi-ui/src/views/monitor/job/index.vue
2020-10-10 09:19:20 +08:00
cb92e41b76 修复生成树结构报错 2020-10-07 12:27:29 +08:00
cddaf4b088 Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue
 Conflicts:
	ruoyi-ui/src/layout/components/TagsView/index.vue
	ruoyi-ui/src/views/system/user/index.vue
2020-10-07 12:25:38 +08:00
cc59e5ad89 Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue
 Conflicts:
	ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysMenuController.java
2020-10-03 11:57:41 +08:00
3c703e4189 解决 druid 请求已响应bug 2020-09-25 12:05:41 +08:00
ef4731e3ff 删除无用js 2020-09-25 12:05:01 +08:00
6101a3bf0d Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue
 Conflicts:
	ruoyi-framework/src/main/java/com/ruoyi/framework/web/domain/Server.java
	ruoyi-ui/src/assets/styles/sidebar.scss
2020-09-25 11:15:57 +08:00
aefa2095f0 Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue
 Conflicts:
	ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/SysLogininforController.java
	ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysMenu.java
	ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysRole.java
	ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java
	ruoyi-common/src/main/java/com/ruoyi/common/core/domain/model/LoginUser.java
	ruoyi-framework/src/main/java/com/ruoyi/framework/manager/factory/AsyncFactory.java
	ruoyi-generator/src/main/resources/vm/sql/sql.vm
	ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/MetaVo.java
	ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysDeptMapper.java
	ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysMenuMapper.java
	ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java
	ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysMenuServiceImpl.java
	ruoyi-system/src/main/resources/mapper/system/SysDeptMapper.xml
	ruoyi-system/src/main/resources/mapper/system/SysMenuMapper.xml
	ruoyi-system/src/main/resources/mapper/system/SysRoleMapper.xml
	ruoyi-ui/src/assets/styles/ruoyi.scss
	ruoyi-ui/src/router/index.js
	ruoyi-ui/src/views/system/menu/index.vue
	ruoyi-ui/src/views/system/role/index.vue
	ruoyi-ui/src/views/system/user/index.vue
	sql/ry_20200920.sql
2020-09-22 13:22:30 +08:00
298fabfdec Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue
 Conflicts:
	ruoyi-generator/src/main/java/com/ruoyi/generator/controller/GenController.java
	ruoyi-generator/src/main/java/com/ruoyi/generator/mapper/GenTableColumnMapper.java
	ruoyi-generator/src/main/java/com/ruoyi/generator/service/GenTableServiceImpl.java
	ruoyi-generator/src/main/java/com/ruoyi/generator/service/IGenTableService.java
	ruoyi-generator/src/main/resources/mapper/generator/GenTableColumnMapper.xml
	ruoyi-generator/src/main/resources/mapper/generator/GenTableMapper.xml
	ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml
	ruoyi-ui/src/api/tool/gen.js
	ruoyi-ui/src/assets/styles/ruoyi.scss
	ruoyi-ui/src/views/system/user/index.vue
	ruoyi-ui/src/views/tool/gen/index.vue
2020-09-18 17:38:23 +08:00
b111cbeedd Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue
 Conflicts:
	ruoyi-common/src/main/java/com/ruoyi/common/constant/GenConstants.java
	ruoyi-generator/src/main/java/com/ruoyi/generator/domain/GenTableColumn.java
	ruoyi-generator/src/main/java/com/ruoyi/generator/util/GenUtils.java
	ruoyi-generator/src/main/resources/vm/vue/index.vue.vm
	ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysConfigServiceImpl.java
	ruoyi-ui/src/views/tool/gen/editTable.vue
2020-09-16 09:23:02 +08:00
06c4d4d01b Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue
 Conflicts:
	pom.xml
	ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/MetaVo.java
	ruoyi-system/src/main/resources/mapper/system/SysNoticeMapper.xml
	ruoyi-ui/package.json
	ruoyi-ui/src/components/Editor/index.vue
	ruoyi-ui/src/router/index.js
2020-09-11 09:17:43 +08:00
a41bc230a1 修改上传文件路径 2020-09-08 14:49:37 +08:00
ef95cec77f Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue
 Conflicts:
	ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/DataScopeAspect.java
	ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDictTypeServiceImpl.java
	ruoyi-ui/src/components/Editor/index.vue
2020-09-07 11:31:40 +08:00
f69cb567f0 Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue
 Conflicts:
	sql/ry_20200901.sql
2020-09-02 09:08:52 +08:00
1ef17bb582 Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue
 Conflicts:
	ruoyi-common/src/main/java/com/ruoyi/common/constant/GenConstants.java
	ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/DataScopeAspect.java
	ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java
	ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysMenuServiceImpl.java
2020-08-31 09:12:13 +08:00
fdbe943053 Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue
 Conflicts:
	ruoyi-generator/src/main/java/com/ruoyi/generator/domain/GenTableColumn.java
2020-08-26 15:30:25 +08:00
184bb04bc2 Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue
 Conflicts:
	ruoyi-ui/src/components/Editor/index.vue
	ruoyi-ui/src/views/system/notice/index.vue
	sql/ry_20200822.sql
2020-08-24 10:26:44 +08:00
d464d8703c Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue
 Conflicts:
	ruoyi-common/src/main/java/com/ruoyi/common/core/page/PageDomain.java
2020-08-21 13:01:12 +08:00
1b82822d15 根据勾选列表是否显示 隐藏主键列 2020-08-19 17:32:34 +08:00
1cc8bc172b 修改代码生成 删除主键type注解配置 使用全局配置 2020-08-19 17:03:21 +08:00
5aeac1a8ae Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue
 Conflicts:
	ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java
	ruoyi-generator/src/main/resources/vm/vue/index.vue.vm
	ruoyi-ui/package.json
	ruoyi-ui/src/components/HeaderSearch/index.vue
	ruoyi-ui/src/layout/components/TagsView/ScrollPane.vue
	ruoyi-ui/src/utils/ruoyi.js
2020-08-19 17:01:43 +08:00
def4377226 Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue
 Conflicts:
	ruoyi-ui/src/utils/ruoyi.js
2020-08-17 12:57:06 +08:00
25afde4796 同步升级3.1 2020-08-13 11:28:11 +08:00
088bc98a43 Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue
 Conflicts:
	ruoyi-admin/src/main/resources/application.yml
	ruoyi-ui/package.json
2020-08-13 11:24:04 +08:00
3aaff7b776 Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue
 Conflicts:
	ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/SysUserOnlineController.java
	ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysMenuController.java
	ruoyi-generator/src/main/resources/vm/vue/index.vue.vm
	ruoyi-ui/src/assets/styles/ruoyi.scss
	ruoyi-ui/src/main.js
	ruoyi-ui/src/views/monitor/job/index.vue
	ruoyi-ui/src/views/monitor/logininfor/index.vue
	ruoyi-ui/src/views/monitor/online/index.vue
	ruoyi-ui/src/views/monitor/operlog/index.vue
	ruoyi-ui/src/views/system/config/index.vue
	ruoyi-ui/src/views/system/dept/index.vue
	ruoyi-ui/src/views/system/dict/data.vue
	ruoyi-ui/src/views/system/dict/index.vue
	ruoyi-ui/src/views/system/menu/index.vue
	ruoyi-ui/src/views/system/notice/index.vue
	ruoyi-ui/src/views/system/post/index.vue
	ruoyi-ui/src/views/system/role/index.vue
	ruoyi-ui/src/views/system/user/index.vue
	ruoyi-ui/src/views/tool/gen/index.vue
2020-08-12 10:16:29 +08:00
4044ed23ea Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue
 Conflicts:
	ruoyi-generator/src/main/java/com/ruoyi/generator/util/GenUtils.java
	ruoyi-ui/src/components/Editor/index.vue
2020-08-10 09:38:28 +08:00
a9f4a4e111 Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue
 Conflicts:
	.gitignore
	ruoyi-common/src/main/java/com/ruoyi/common/utils/spring/SpringUtils.java
	ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserOnlineServiceImpl.java
	ruoyi-system/src/main/resources/mapper/system/SysConfigMapper.xml
	ruoyi-system/src/main/resources/mapper/system/SysDeptMapper.xml
	ruoyi-system/src/main/resources/mapper/system/SysDictTypeMapper.xml
	ruoyi-system/src/main/resources/mapper/system/SysMenuMapper.xml
	ruoyi-system/src/main/resources/mapper/system/SysPostMapper.xml
	ruoyi-system/src/main/resources/mapper/system/SysRoleMapper.xml
	ruoyi-system/src/main/resources/mapper/system/SysRoleMenuMapper.xml
	ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml
	ruoyi-ui/src/utils/request.js
	ruoyi-ui/src/utils/ruoyi.js
2020-08-07 09:22:36 +08:00
c7785d1dbc Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue
 Conflicts:
	README.md
	ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRoleController.java
	ruoyi-common/src/main/java/com/ruoyi/common/constant/Constants.java
	ruoyi-ui/src/utils/request.js
2020-08-05 09:42:03 +08:00
5b1ed429ae 文件路径,使用jvm系统变量,兼容windows和linux; 2020-08-05 09:35:41 +08:00
c8613ac9a7 错误修正 2020-08-04 14:34:05 +08:00
d9aa681a0d 错误修正 2020-08-04 14:31:51 +08:00
c966d9bada Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue
 Conflicts:
	pom.xml
	ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/CaptchaController.java
	ruoyi-admin/src/main/resources/application.yml
	ruoyi-common/src/main/java/com/ruoyi/common/core/redis/RedisCache.java
	ruoyi-common/src/main/java/com/ruoyi/common/utils/file/FileUploadUtils.java
	ruoyi-common/src/main/java/com/ruoyi/common/utils/file/FileUtils.java
	ruoyi-common/src/main/java/com/ruoyi/common/utils/html/EscapeUtil.java
	ruoyi-common/src/main/java/com/ruoyi/common/utils/sql/SqlUtil.java
	ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/DataScopeAspect.java
	ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/TokenService.java
	ruoyi-generator/src/main/java/com/ruoyi/generator/controller/GenController.java
	ruoyi-generator/src/main/java/com/ruoyi/generator/domain/GenTable.java
	ruoyi-generator/src/main/java/com/ruoyi/generator/service/GenTableServiceImpl.java
	ruoyi-generator/src/main/java/com/ruoyi/generator/service/IGenTableService.java
	ruoyi-generator/src/main/java/com/ruoyi/generator/util/VelocityUtils.java
	ruoyi-generator/src/main/resources/mapper/generator/GenTableMapper.xml
	ruoyi-generator/src/main/resources/vm/vue/index.vue.vm
	ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysMenuMapper.java
	ruoyi-system/src/main/resources/mapper/system/SysDeptMapper.xml
	ruoyi-ui/babel.config.js
	ruoyi-ui/package.json
	ruoyi-ui/src/api/tool/gen.js
	ruoyi-ui/src/assets/styles/ruoyi.scss
	ruoyi-ui/src/components/HeaderSearch/index.vue
	ruoyi-ui/src/layout/components/TagsView/ScrollPane.vue
	ruoyi-ui/src/main.js
	ruoyi-ui/src/utils/ruoyi.js
	ruoyi-ui/src/views/login.vue
	ruoyi-ui/src/views/monitor/job/index.vue
	ruoyi-ui/src/views/monitor/logininfor/index.vue
	ruoyi-ui/src/views/monitor/online/index.vue
	ruoyi-ui/src/views/monitor/operlog/index.vue
	ruoyi-ui/src/views/system/config/index.vue
	ruoyi-ui/src/views/system/dept/index.vue
	ruoyi-ui/src/views/system/dict/data.vue
	ruoyi-ui/src/views/system/dict/index.vue
	ruoyi-ui/src/views/system/menu/index.vue
	ruoyi-ui/src/views/system/notice/index.vue
	ruoyi-ui/src/views/system/post/index.vue
	ruoyi-ui/src/views/system/role/index.vue
	ruoyi-ui/src/views/system/user/index.vue
	ruoyi-ui/src/views/tool/gen/genInfoForm.vue
	ruoyi-ui/src/views/tool/gen/index.vue
	ruoyi-ui/vue.config.js
	sql/ry_20200724.sql
2020-08-02 18:31:47 +08:00
a95abff0d3 删除文件 ruoyi-common/src/main/resources 2020-08-02 18:18:35 +08:00
8a9a53225a Merge branch 'master' of https://gitee.com/JavaLionLi/RuoYi-Vue-Plus 2020-07-23 09:55:40 +08:00
e19e2fd9cc Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue
 Conflicts:
	ruoyi-common/src/main/java/com/ruoyi/common/constant/GenConstants.java
	ruoyi-framework/src/main/java/com/ruoyi/framework/config/ResourcesConfig.java
	ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java
	ruoyi-generator/src/main/java/com/ruoyi/generator/controller/GenController.java
	ruoyi-generator/src/main/java/com/ruoyi/generator/domain/GenTable.java
	ruoyi-generator/src/main/java/com/ruoyi/generator/service/GenTableServiceImpl.java
	ruoyi-generator/src/main/java/com/ruoyi/generator/util/VelocityUtils.java
	ruoyi-generator/src/main/resources/vm/sql/sql.vm
	ruoyi-ui/src/utils/index.js
	ruoyi-ui/src/utils/ruoyi.js
	ruoyi-ui/src/views/tool/gen/editTable.vue
	ruoyi-ui/src/views/tool/gen/genInfoForm.vue
	ruoyi-ui/src/views/tool/gen/importTable.vue
2020-07-23 09:54:57 +08:00
8e1b8a3a3f 全注入 可能会出现小白乱用的情况 改成@Autowired构造注入 2020-07-22 18:46:34 +08:00
6f47310c24 同步升级3.0 端口提交错误 改回8080 2020-07-20 10:47:00 +08:00
1e79d6f56f 同步升级3.0 2020-07-20 10:41:32 +08:00
a53a3b3119 Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue
 Conflicts:
	ruoyi-ui/package.json
	ruoyi-ui/src/views/system/menu/index.vue
	ruoyi/src/main/java/com/ruoyi/common/utils/file/FileUploadUtils.java
	ruoyi/src/main/java/com/ruoyi/common/utils/http/HttpUtils.java
	ruoyi/src/main/java/com/ruoyi/common/utils/sign/Md5Utils.java
	ruoyi/src/main/java/com/ruoyi/framework/security/service/SysLoginService.java
	ruoyi/src/main/java/com/ruoyi/project/system/controller/SysLoginController.java
	ruoyi/src/main/java/com/ruoyi/project/system/domain/SysUser.java
	ruoyi/src/main/java/com/ruoyi/project/system/service/impl/SysUserServiceImpl.java
2020-07-17 16:43:47 +08:00
22f3e2ad23 Merge branch 'master' of https://gitee.com/JavaLionLi/RuoYi-Vue-Plus 2020-07-17 11:41:29 +08:00
4555050301 删除 mybatis相关配置 2020-07-17 11:41:09 +08:00
e6dc647287 修复数据库decimal类型无improt问题 2020-07-16 20:09:35 +08:00
e85334bacd 修复 生成器业务名 只会截取表下划线的最后一个 导致很多controller 会重名 问题 2020-07-16 13:14:01 +08:00
a3a3d62034 Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue
 Conflicts:
	ruoyi-ui/src/layout/components/Navbar.vue
	ruoyi-ui/src/views/system/role/index.vue
2020-07-13 09:27:49 +08:00
59b42fddea Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue
 Conflicts:
	ruoyi/src/main/java/com/ruoyi/framework/redis/RedisCache.java
2020-07-10 11:40:38 +08:00
eef65b449d Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue
 Conflicts:
	ruoyi-ui/README.md
	ruoyi/src/main/resources/application.yml
2020-07-06 09:16:44 +08:00
942629722d 删除 测试数据 2020-07-02 10:58:13 +08:00
f652a035b7 增加 数据库超时重连配置 2020-07-01 09:16:47 +08:00
c70ec63952 Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue
 Conflicts:
	ruoyi/sql/ry_20200629.sql
	ruoyi/src/main/java/com/ruoyi/project/system/controller/SysUserController.java
2020-07-01 09:16:25 +08:00
f0bee6af63 Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue
 Conflicts:
	ruoyi-ui/src/router/index.js
	ruoyi-ui/src/views/system/user/index.vue
	ruoyi-ui/src/views/system/user/profile/userAvatar.vue
	ruoyi-ui/src/views/tool/gen/editTable.vue
	ruoyi-ui/src/views/tool/gen/index.vue
	ruoyi/src/main/java/com/ruoyi/RuoYiApplication.java
	ruoyi/src/main/java/com/ruoyi/project/tool/gen/service/GenTableServiceImpl.java
2020-06-29 09:08:18 +08:00
2e95557840 删除测试代码 2020-06-29 09:07:17 +08:00
827bbc2b17 Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue
 Conflicts:
	ruoyi/src/main/java/com/ruoyi/common/constant/HttpStatus.java
	ruoyi/src/main/java/com/ruoyi/common/core/lang/UUID.java
	ruoyi/src/main/java/com/ruoyi/common/utils/VerifyCodeUtils.java
	ruoyi/src/main/java/com/ruoyi/common/utils/ip/IpUtils.java
	ruoyi/src/main/java/com/ruoyi/framework/config/FastJson2JsonRedisSerializer.java
	ruoyi/src/main/java/com/ruoyi/project/monitor/service/impl/SysOperLogServiceImpl.java
	ruoyi/src/main/java/com/ruoyi/project/system/controller/SysLoginController.java
	ruoyi/src/main/java/com/ruoyi/project/system/domain/SysRole.java
	ruoyi/src/main/java/com/ruoyi/project/system/service/impl/SysConfigServiceImpl.java
	ruoyi/src/main/java/com/ruoyi/project/system/service/impl/SysDictDataServiceImpl.java
	ruoyi/src/main/java/com/ruoyi/project/system/service/impl/SysDictTypeServiceImpl.java
	ruoyi/src/main/java/com/ruoyi/project/system/service/impl/SysMenuServiceImpl.java
	ruoyi/src/main/java/com/ruoyi/project/system/service/impl/SysNoticeServiceImpl.java
	ruoyi/src/main/java/com/ruoyi/project/system/service/impl/SysPostServiceImpl.java
	ruoyi/src/main/java/com/ruoyi/project/system/service/impl/SysRoleServiceImpl.java
	ruoyi/src/main/java/com/ruoyi/project/system/service/impl/SysUserOnlineServiceImpl.java
	ruoyi/src/main/java/com/ruoyi/project/system/service/impl/SysUserServiceImpl.java
	ruoyi/src/main/java/com/ruoyi/project/tool/gen/service/GenTableColumnServiceImpl.java
	ruoyi/src/main/java/com/ruoyi/project/tool/gen/service/GenTableServiceImpl.java
	ruoyi/src/main/java/com/ruoyi/project/tool/gen/service/IGenTableColumnService.java
2020-06-21 10:06:26 +08:00
eb7c29c647 解决文件上传bug,因undertow与tomcat对文件写入的底层实现不同,无需创建新文件 2020-06-18 15:33:36 +08:00
8d318c222e Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue
 Conflicts:
	ruoyi/src/main/java/com/ruoyi/common/utils/ip/IpUtils.java
2020-06-18 15:13:40 +08:00
db380f9af1 还原 2020-06-15 14:06:12 +08:00
694fb19628 修复 上传文件重名问题 2020-06-15 13:07:14 +08:00
c53d5fd1f6 Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue
 Conflicts:
	ruoyi-ui/src/views/monitor/online/index.vue
	ruoyi-ui/src/views/system/user/index.vue
	ruoyi-ui/vue.config.js
	ruoyi/src/main/java/com/ruoyi/common/utils/http/HttpUtils.java
	ruoyi/src/main/java/com/ruoyi/common/utils/ip/IpUtils.java
	ruoyi/src/main/java/com/ruoyi/project/tool/gen/util/GenUtils.java
2020-06-12 15:14:19 +08:00
6bb7db31aa Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue
 Conflicts:
	ruoyi-ui/src/assets/styles/ruoyi.scss
	ruoyi-ui/src/components/HeaderSearch/index.vue
	ruoyi-ui/src/components/IconSelect/index.vue
	ruoyi-ui/src/permission.js
	ruoyi-ui/src/views/monitor/job/index.vue
	ruoyi-ui/src/views/system/user/index.vue
	ruoyi/src/main/java/com/ruoyi/framework/aspectj/DataScopeAspect.java
	ruoyi/src/main/java/com/ruoyi/framework/web/domain/BaseEntity.java
	ruoyi/src/main/java/com/ruoyi/project/system/controller/SysPostController.java
	ruoyi/src/main/resources/mybatis/system/SysDeptMapper.xml
	ruoyi/src/main/resources/mybatis/system/SysDictDataMapper.xml
	ruoyi/src/main/resources/mybatis/system/SysRoleMapper.xml
	ruoyi/src/main/resources/mybatis/system/SysUserMapper.xml
	ruoyi/src/main/resources/vm/vue/index.vue.vm
	ruoyi/src/main/resources/vm/xml/mapper.xml.vm
2020-06-08 12:01:19 +08:00
2e37fe9bc9 Merge branch 'master' of https://gitee.com/JavaLionLi/RuoYi-Vue-Plus 2020-06-01 13:40:15 +08:00
8a62368141 同步若依2.3版本 2020-06-01 13:40:01 +08:00
5f866906d1 Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue
 Conflicts:
	ruoyi-ui/package.json
	ruoyi-ui/src/api/system/config.js
	ruoyi-ui/src/api/system/dict/data.js
	ruoyi-ui/src/api/system/dict/type.js
	ruoyi-ui/src/assets/styles/element-variables.scss
	ruoyi-ui/src/components/SvgIcon/index.vue
	ruoyi-ui/src/layout/components/Sidebar/Link.vue
	ruoyi-ui/src/layout/components/Sidebar/index.vue
	ruoyi-ui/src/layout/components/TagsView/ScrollPane.vue
	ruoyi-ui/src/layout/components/TagsView/index.vue
	ruoyi-ui/src/views/monitor/job/index.vue
	ruoyi-ui/src/views/system/config/index.vue
	ruoyi-ui/src/views/system/dept/index.vue
	ruoyi-ui/src/views/system/dict/data.vue
	ruoyi-ui/src/views/system/dict/index.vue
	ruoyi-ui/src/views/system/menu/index.vue
	ruoyi-ui/src/views/system/notice/index.vue
	ruoyi-ui/src/views/system/post/index.vue
	ruoyi-ui/src/views/system/role/index.vue
	ruoyi-ui/src/views/system/user/index.vue
	ruoyi-ui/src/views/system/user/profile/resetPwd.vue
	ruoyi-ui/src/views/system/user/profile/userAvatar.vue
	ruoyi-ui/src/views/system/user/profile/userInfo.vue
	ruoyi-ui/vue.config.js
	ruoyi/pom.xml
	ruoyi/src/main/java/com/ruoyi/common/constant/Constants.java
	ruoyi/src/main/java/com/ruoyi/common/utils/StringUtils.java
	ruoyi/src/main/java/com/ruoyi/project/system/controller/SysConfigController.java
	ruoyi/src/main/java/com/ruoyi/project/system/controller/SysDictDataController.java
	ruoyi/src/main/java/com/ruoyi/project/system/controller/SysDictTypeController.java
	ruoyi/src/main/java/com/ruoyi/project/system/service/ISysConfigService.java
	ruoyi/src/main/java/com/ruoyi/project/system/service/ISysDictDataService.java
	ruoyi/src/main/java/com/ruoyi/project/system/service/ISysDictTypeService.java
	ruoyi/src/main/java/com/ruoyi/project/system/service/impl/SysConfigServiceImpl.java
	ruoyi/src/main/java/com/ruoyi/project/system/service/impl/SysDictDataServiceImpl.java
	ruoyi/src/main/java/com/ruoyi/project/system/service/impl/SysDictTypeServiceImpl.java
	ruoyi/src/main/java/com/ruoyi/project/system/service/impl/SysMenuServiceImpl.java
	ruoyi/src/main/resources/application.yml
	ruoyi/src/main/resources/vm/sql/sql.vm
	ruoyi/src/main/resources/vm/vue/index.vue.vm
2020-06-01 13:34:08 +08:00
48999868d8 update README.md. 2020-05-27 17:49:10 +08:00
35e940f0b5 Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue
 Conflicts:
	ruoyi-ui/src/layout/components/Sidebar/index.vue
	ruoyi-ui/src/layout/components/TagsView/index.vue
	ruoyi/src/main/java/com/ruoyi/common/constant/Constants.java
	ruoyi/src/main/java/com/ruoyi/common/constant/UserConstants.java
	ruoyi/src/main/java/com/ruoyi/project/system/controller/SysMenuController.java
	ruoyi/src/main/java/com/ruoyi/project/system/service/impl/SysMenuServiceImpl.java
2020-05-27 09:05:31 +08:00
4460fae46f Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue 2020-05-23 10:31:39 +08:00
c20dabbcdf 更改 README.md 增加改动说明 2020-05-23 10:29:31 +08:00
98941acd2a Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue
 Conflicts:
	ruoyi-ui/src/api/system/dept.js
	ruoyi-ui/src/utils/request.js
	ruoyi-ui/src/views/monitor/job/index.vue
	ruoyi-ui/src/views/monitor/logininfor/index.vue
	ruoyi-ui/src/views/monitor/operlog/index.vue
	ruoyi-ui/src/views/system/dept/index.vue
	ruoyi/src/main/java/com/ruoyi/framework/aspectj/DataSourceAspect.java
	ruoyi/src/main/java/com/ruoyi/framework/aspectj/lang/annotation/DataSource.java
	ruoyi/src/main/java/com/ruoyi/framework/config/SwaggerConfig.java
	ruoyi/src/main/java/com/ruoyi/framework/web/controller/BaseController.java
	ruoyi/src/main/java/com/ruoyi/framework/web/page/TableDataInfo.java
	ruoyi/src/main/java/com/ruoyi/project/system/controller/SysDeptController.java
	ruoyi/src/main/java/com/ruoyi/project/system/service/impl/SysDeptServiceImpl.java
	ruoyi/src/main/java/com/ruoyi/project/tool/gen/controller/GenController.java
	ruoyi/src/main/resources/application.yml
2020-05-20 09:15:19 +08:00
661cc0afdb Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue
 Conflicts:
	ruoyi/src/main/java/com/ruoyi/common/constant/Constants.java
	ruoyi/src/main/java/com/ruoyi/common/utils/http/HttpUtils.java
	ruoyi/src/main/java/com/ruoyi/common/utils/ip/AddressUtils.java
	ruoyi/src/main/resources/application.yml
	ruoyi/src/main/resources/mybatis/system/SysDeptMapper.xml
2020-05-14 16:25:43 +08:00
d350c048b8 Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue
 Conflicts:
	ruoyi-ui/src/store/modules/tagsView.js
	ruoyi/src/main/java/com/ruoyi/common/constant/UserConstants.java
	ruoyi/src/main/java/com/ruoyi/project/system/controller/SysDeptController.java
	ruoyi/src/main/java/com/ruoyi/project/system/mapper/SysDeptMapper.java
	ruoyi/src/main/java/com/ruoyi/project/system/service/ISysDeptService.java
	ruoyi/src/main/java/com/ruoyi/project/system/service/impl/SysDeptServiceImpl.java
	ruoyi/src/main/resources/mybatis/system/SysDeptMapper.xml
2020-05-07 17:44:08 +08:00
b15be7078c 同步ruoyi-vue更新 2020-05-06 11:57:51 +08:00
42008124b6 Merge remote-tracking branch 'origin/master'
# Conflicts:
#	ruoyi-ui/src/assets/styles/ruoyi.scss
#	ruoyi-ui/src/views/tool/gen/index.vue
2020-04-29 09:17:17 +08:00
1dae7c9bc9 Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue
 Conflicts:
	ruoyi-ui/src/assets/styles/ruoyi.scss
	ruoyi-ui/src/router/index.js
	ruoyi-ui/src/store/modules/permission.js
	ruoyi-ui/src/views/tool/gen/index.vue
	ruoyi/src/main/java/com/ruoyi/project/system/service/impl/SysRoleServiceImpl.java
	ruoyi/src/main/java/com/ruoyi/project/tool/gen/util/VelocityUtils.java
	ruoyi/src/main/resources/vm/java/domain.java.vm
	ruoyi/src/main/resources/vm/vue/index.vue.vm
2020-04-29 09:16:29 +08:00
1062da678f Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue
 Conflicts:
	ruoyi-ui/src/assets/styles/ruoyi.scss
	ruoyi-ui/src/router/index.js
	ruoyi-ui/src/store/modules/permission.js
	ruoyi-ui/src/views/tool/gen/index.vue
	ruoyi/src/main/java/com/ruoyi/project/system/service/impl/SysRoleServiceImpl.java
	ruoyi/src/main/java/com/ruoyi/project/tool/gen/util/VelocityUtils.java
	ruoyi/src/main/resources/vm/java/domain.java.vm
	ruoyi/src/main/resources/vm/vue/index.vue.vm
2020-04-25 20:14:40 +08:00
4bee0d652a 修复前端页面报错 找不到模块问题 2020-04-25 20:09:39 +08:00
405ad4280c Merge branch 'master' of https://gitee.com/JavaLionLi/RuoYi-Vue-Plus 2020-04-21 09:09:43 +08:00
44e2618ee2 Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue
 Conflicts:
	ruoyi-ui/src/views/monitor/job/index.vue
	ruoyi-ui/src/views/monitor/operlog/index.vue
	ruoyi-ui/src/views/system/config/index.vue
	ruoyi-ui/src/views/system/dept/index.vue
	ruoyi-ui/src/views/system/dict/data.vue
	ruoyi-ui/src/views/system/dict/index.vue
	ruoyi-ui/src/views/system/menu/index.vue
	ruoyi-ui/src/views/system/notice/index.vue
	ruoyi-ui/src/views/system/post/index.vue
	ruoyi-ui/src/views/system/role/index.vue
	ruoyi-ui/src/views/system/user/index.vue
	ruoyi-ui/src/views/system/user/profile/userAvatar.vue
	ruoyi-ui/src/views/tool/gen/importTable.vue
	ruoyi-ui/src/views/tool/gen/index.vue
	ruoyi/sql/ry_20200415.sql
	ruoyi/src/main/java/com/ruoyi/project/system/domain/SysMenu.java
	ruoyi/src/main/java/com/ruoyi/project/system/domain/vo/RouterVo.java
	ruoyi/src/main/java/com/ruoyi/project/system/service/impl/SysMenuServiceImpl.java
	ruoyi/src/main/resources/mybatis/system/SysMenuMapper.xml
	ruoyi/src/main/resources/vm/sql/sql.vm
	ruoyi/src/main/resources/vm/vue/index.vue.vm
2020-04-21 09:08:48 +08:00
09918e338a 修复 undertow 未生效问题 2020-04-19 14:47:25 +08:00
1dac24c9f8 Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue
 Conflicts:
	ruoyi/pom.xml
2020-04-13 12:51:20 +08:00
76ea06748b 升级fastjson到最新版1.2.68 修复安全加固 2020-04-13 12:48:03 +08:00
29b131b107 Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue
 Conflicts:
	ruoyi/src/main/resources/vm/vue/index.vue.vm
2020-04-10 13:43:18 +08:00
31a2713012 Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue
 Conflicts:
	ruoyi-ui/package.json
	ruoyi-ui/src/api/login.js
	ruoyi-ui/src/assets/styles/ruoyi.scss
	ruoyi-ui/src/layout/components/Navbar.vue
	ruoyi-ui/src/utils/ruoyi.js
	ruoyi-ui/src/views/tool/build/index.vue
	ruoyi-ui/src/views/tool/gen/editTable.vue
	ruoyi-ui/src/views/tool/gen/index.vue
	ruoyi/src/main/java/com/ruoyi/project/monitor/domain/SysLogininfor.java
	ruoyi/src/main/java/com/ruoyi/project/monitor/domain/SysOperLog.java
	ruoyi/src/main/java/com/ruoyi/project/system/controller/SysLoginController.java
	ruoyi/src/main/java/com/ruoyi/project/tool/gen/controller/GenController.java
	ruoyi/src/main/resources/mybatis/tool/GenTableMapper.xml
2020-04-03 10:16:28 +08:00
39d8723159 Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue
 Conflicts:
	ruoyi-ui/src/views/monitor/job/index.vue
	ruoyi/src/main/resources/mybatis/system/SysMenuMapper.xml
2020-03-24 15:29:45 +08:00
67657e9f02 升级 v2.2 2020-03-19 09:32:15 +08:00
2a922caf89 升级 v2.2 2020-03-19 09:22:46 +08:00
bd7371fb8b 升级 v2.2 2020-03-19 09:21:17 +08:00
51ae2d1a87 升级 v2.2 2020-03-19 09:13:07 +08:00
b1afb78ca2 Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue
 Conflicts:
	ruoyi-ui/package.json
	ruoyi-ui/src/components/SvgIcon/index.vue
	ruoyi-ui/src/layout/components/TagsView/index.vue
	ruoyi-ui/src/router/index.js
	ruoyi-ui/src/store/modules/tagsView.js
	ruoyi-ui/src/views/monitor/job/index.vue
	ruoyi/pom.xml
	ruoyi/src/main/java/com/ruoyi/RuoYiApplication.java
	ruoyi/src/main/java/com/ruoyi/framework/config/SecurityConfig.java
	ruoyi/src/main/java/com/ruoyi/framework/web/domain/Server.java
	ruoyi/src/main/java/com/ruoyi/project/common/CommonController.java
	ruoyi/src/main/resources/application.yml
2020-03-19 09:10:03 +08:00
2e6bb454f4 Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue
 Conflicts:
	ruoyi-ui/bin/package.bat
	ruoyi-ui/package.json
	ruoyi-ui/src/assets/styles/element-ui.scss
	ruoyi-ui/src/layout/components/Navbar.vue
	ruoyi-ui/src/layout/components/Sidebar/SidebarItem.vue
	ruoyi-ui/src/layout/components/TagsView/index.vue
	ruoyi-ui/src/router/index.js
	ruoyi-ui/src/views/components/icons/element-icons.js
	ruoyi-ui/src/views/dashboard/mixins/resize.js
	ruoyi-ui/src/views/system/menu/index.vue
	ruoyi/src/main/java/com/ruoyi/common/filter/XssFilter.java
	ruoyi/src/main/java/com/ruoyi/common/filter/XssHttpServletRequestWrapper.java
	ruoyi/src/main/java/com/ruoyi/common/utils/text/CharsetKit.java
	ruoyi/src/main/java/com/ruoyi/common/utils/text/Convert.java
	ruoyi/src/main/java/com/ruoyi/common/utils/text/StrFormatter.java
	ruoyi/src/main/java/com/ruoyi/framework/config/FilterConfig.java
	ruoyi/src/main/java/com/ruoyi/project/system/controller/SysNoticeController.java
	ruoyi/src/main/java/com/ruoyi/project/system/mapper/SysNoticeMapper.java
	ruoyi/src/main/java/com/ruoyi/project/system/service/ISysNoticeService.java
	ruoyi/src/main/java/com/ruoyi/project/system/service/impl/SysNoticeServiceImpl.java
	ruoyi/src/main/java/com/ruoyi/project/tool/gen/controller/GenController.java
	ruoyi/src/main/java/com/ruoyi/project/tool/gen/service/GenTableColumnServiceImpl.java
	ruoyi/src/main/java/com/ruoyi/project/tool/gen/util/GenUtils.java
2020-03-16 09:58:40 +08:00
7507a3ed2a Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue
 Conflicts:
	ruoyi-ui/src/views/system/user/profile/index.vue
	ruoyi/src/main/java/com/ruoyi/framework/security/service/SysPermissionService.java
	ruoyi/src/main/java/com/ruoyi/framework/security/service/TokenService.java
	ruoyi/src/main/resources/mybatis/monitor/SysOperLogMapper.xml
2020-03-09 09:40:39 +08:00
bed1fd98ff Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue
 Conflicts:
	ruoyi-ui/src/views/login/auth-redirect.vue
	ruoyi-ui/src/views/login/components/SocialSignin.vue
	ruoyi-ui/src/views/system/dept/index.vue
	ruoyi-ui/src/views/system/menu/index.vue
	ruoyi-ui/src/views/tool/gen/editTable.vue
2020-03-02 16:15:24 +08:00
f9b9156c8a Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue
 Conflicts:
	ruoyi-ui/src/views/monitor/operlog/index.vue
	ruoyi-ui/src/views/tool/gen/importTable.vue
	ruoyi/src/main/resources/vm/java/mapper.java.vm
	ruoyi/src/main/resources/vm/java/service.java.vm
2020-02-28 17:34:44 +08:00
87c0074fab Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue
 Conflicts:
	ruoyi/src/main/java/com/ruoyi/framework/config/MyBatisConfig.java
2020-02-25 10:48:50 +08:00
0ba48df61e 升级 v2.1 2020-02-24 10:19:17 +08:00
db20b4a3d3 升级 v2.1 2020-02-24 10:02:53 +08:00
6687efd887 Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue
 Conflicts:
	ruoyi-ui/package.json
	ruoyi-ui/src/components/RuoYi/Git/index.vue
	ruoyi-ui/src/layout/components/Navbar.vue
	ruoyi-ui/src/main.js
	ruoyi-ui/src/utils/index.js
	ruoyi-ui/src/utils/permission.js
	ruoyi-ui/src/utils/ruoyi.js
	ruoyi-ui/src/views/system/dept/index.vue
	ruoyi-ui/src/views/system/menu/index.vue
	ruoyi-ui/src/views/tool/build/index.vue
	ruoyi-ui/src/views/tool/gen/genInfoForm.vue
	ruoyi/pom.xml
	ruoyi/src/main/java/com/ruoyi/common/constant/GenConstants.java
	ruoyi/src/main/java/com/ruoyi/common/utils/html/EscapeUtil.java
	ruoyi/src/main/java/com/ruoyi/project/system/controller/SysDeptController.java
	ruoyi/src/main/java/com/ruoyi/project/system/controller/SysMenuController.java
	ruoyi/src/main/java/com/ruoyi/project/tool/gen/controller/GenController.java
	ruoyi/src/main/java/com/ruoyi/project/tool/gen/domain/GenTable.java
	ruoyi/src/main/java/com/ruoyi/project/tool/gen/util/VelocityUtils.java
	ruoyi/src/main/resources/application.yml
	ruoyi/src/main/resources/mybatis/monitor/SysLogininforMapper.xml
	ruoyi/src/main/resources/mybatis/monitor/SysOperLogMapper.xml
	ruoyi/src/main/resources/vm/java/controller.java.vm
	ruoyi/src/main/resources/vm/java/domain.java.vm
	ruoyi/src/main/resources/vm/vue/index.vue.vm
2020-02-24 09:56:22 +08:00
c9527fcf42 修复地址开关无效问题 2020-02-24 09:23:37 +08:00
a1cf719d26 Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue
 Conflicts:
	ruoyi-ui/src/views/system/user/index.vue
	ruoyi/src/main/java/com/ruoyi/project/system/domain/SysUser.java
2020-02-18 14:47:23 +08:00
7cd5c26337 修复sql报错 2020-02-16 16:30:10 +08:00
fbba782f5c 增加彩色日志输出 调整优化日志格式 2020-02-14 13:58:35 +08:00
a108574387 增加彩色日志输出 调整优化日志格式 2020-02-14 13:40:39 +08:00
de74b802d4 web 容器使用 undertow 性能更强 2020-02-14 13:37:19 +08:00
83c427c1bb 增加 代码生成与MybatisPlus测试案例 cstest 2020-02-14 13:36:52 +08:00
7c8d062d58 修改 代码生成器 适配 MybatisPlus 2020-02-14 13:27:55 +08:00
c7bc8e415f 集成 Lombok + MybatisPlus 3.3.0 2020-02-14 13:27:09 +08:00
2841620be6 初始化项目 2020-02-13 10:48:51 +08:00
b279aa391c 删除文件 ruoyi 2020-02-13 10:47:22 +08:00
abdb1048ed 删除文件 ruoyi-ui 2020-02-13 10:47:14 +08:00
a7fa51303b 删除文件 LICENSE 2020-02-13 10:47:08 +08:00
3dd52a3f7d 删除文件 README.md 2020-02-13 10:47:02 +08:00
813 changed files with 92260 additions and 50673 deletions

18
.editorconfig Normal file
View File

@ -0,0 +1,18 @@
# http://editorconfig.org
root = true
# 空格替代Tab缩进在各种编辑工具下效果一致
[*]
indent_style = space
indent_size = 4
charset = utf-8
end_of_line = lf
trim_trailing_whitespace = true
insert_final_newline = true
[*.{json,yml}]
indent_size = 2
[*.md]
insert_final_newline = false
trim_trailing_whitespace = false

87
.gitignore vendored
View File

@ -1,44 +1,43 @@
###################################################################### ######################################################################
# Build Tools # Build Tools
.gradle .gradle
/build/ /build/
!gradle/wrapper/gradle-wrapper.jar !gradle/wrapper/gradle-wrapper.jar
target/ target/
!.mvn/wrapper/maven-wrapper.jar !.mvn/wrapper/maven-wrapper.jar
###################################################################### ######################################################################
# IDE # IDE
### STS ### ### STS ###
.apt_generated .apt_generated
.classpath .classpath
.factorypath .factorypath
.project .project
.settings .settings
.springBeans .springBeans
### IntelliJ IDEA ### ### IntelliJ IDEA ###
.idea .idea
*.iws *.iws
*.iml *.iml
*.ipr *.ipr
### NetBeans ### ### NetBeans ###
nbproject/private/ nbproject/private/
build/* build/*
nbbuild/ nbbuild/
dist/ nbdist/
nbdist/ .nb-gradle/
.nb-gradle/
######################################################################
###################################################################### # Others
# Others *.log
*.log *.xml.versionsBackup
*.xml.versionsBackup *.swp
*.swp
!*/build/*.java
!*/build/*.java !*/build/*.html
!*/build/*.html !*/build/*.xml
!*/build/*.xml

View File

@ -1,6 +1,6 @@
The MIT License (MIT) The MIT License (MIT)
Copyright (c) 2018 RuoYi Copyright (c) 2019 RuoYi-Vue-Plus
Permission is hereby granted, free of charge, to any person obtaining a copy of Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in this software and associated documentation files (the "Software"), to deal in
@ -17,4 +17,4 @@ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

216
README.md
View File

@ -1,85 +1,153 @@
## 平台简介 ## 平台简介
[![码云Gitee](https://gitee.com/JavaLionLi/RuoYi-Vue-Plus/badge/star.svg?theme=blue)](https://gitee.com/JavaLionLi/RuoYi-Vue-Plus)
[![GitHub](https://img.shields.io/github/stars/JavaLionLi/RuoYi-Vue-Plus.svg?style=social&label=Stars)](https://github.com/JavaLionLi/RuoYi-Vue-Plus)
[![License](https://img.shields.io/badge/License-MIT-blue.svg)](https://gitee.com/JavaLionLi/RuoYi-Vue-Plus/blob/master/LICENSE)
[![使用IntelliJ IDEA开发维护](https://img.shields.io/badge/IntelliJ%20IDEA-提供支持-blue.svg)](https://www.jetbrains.com/?from=RuoYi-Vue-Plus)
<br>
[![RuoYi-Vue-Plus](https://img.shields.io/badge/RuoYi_Vue_Plus-3.5.0-success.svg)](https://gitee.com/JavaLionLi/RuoYi-Vue-Plus)
[![Spring Boot](https://img.shields.io/badge/Spring%20Boot-2.5-blue.svg)]()
[![JDK-8+](https://img.shields.io/badge/JDK-8-green.svg)]()
[![JDK-11](https://img.shields.io/badge/JDK-11-green.svg)]()
若依是一套全部开源的快速开发平台,毫无保留给个人及企业免费使用。 > RuoYi-Vue-Plus 是重写 RuoYi-Vue 针对 `分布式集群` 场景全方位升级(不兼容原框架)
* 前端采用Vue、Element UI。 > 系统演示: [传送门](https://gitee.com/JavaLionLi/RuoYi-Vue-Plus/wikis/系统演示?sort_id=4836388)
* 后端采用Spring Boot、Spring Security、Redis & Jwt。
* 权限认证使用Jwt支持多终端认证系统。
* 支持加载动态权限菜单,多方式轻松权限控制。
* 高效率开发,使用代码生成器可以一键生成前后端代码。
* 提供了单应用版本[RuoYi-Vue-fast](https://github.com/yangzongzhuan/RuoYi-Vue-fast)Oracle版本[RuoYi-Vue-Oracle](https://github.com/yangzongzhuan/RuoYi-Vue-Oracle),保持同步更新。
* 不分离版本,请移步[RuoYi](https://gitee.com/y_project/RuoYi),微服务版本,请移步[RuoYi-Cloud](https://gitee.com/y_project/RuoYi-Cloud)
* 特别鸣谢:[element](https://github.com/ElemeFE/element)[vue-element-admin](https://github.com/PanJiaChen/vue-element-admin)[eladmin-web](https://github.com/elunez/eladmin-web)。
* 阿里云折扣场:[点我进入](http://aly.ruoyi.vip),腾讯云秒杀场:[点我进入](http://txy.ruoyi.vip)&nbsp;&nbsp;
* 阿里云优惠券:[点我领取](https://www.aliyun.com/minisite/goods?userCode=brki8iof&share_source=copy_link),腾讯云优惠券:[点我领取](https://cloud.tencent.com/redirect.php?redirect=1025&cps_key=198c8df2ed259157187173bc7f4f32fd&from=console)&nbsp;&nbsp;
## 内置功能 | 功能介绍 | 使用技术 | 文档地址 | 特性注意事项 |
|---|---|---|---|
| 当前框架 | RuoYi-Vue-Plus | [RuoYi-Vue-Plus文档](https://gitee.com/JavaLionLi/RuoYi-Vue-Plus/wikis/pages) | 重写RuoYi-Vue全方位升级(不兼容原框架) |
| satoken分支 | RuoYi-Vue-Plus-satoken | [satoken分支地址](https://gitee.com/JavaLionLi/RuoYi-Vue-Plus/tree/satoken/) | 高可读性 扩展性(推荐使用) |
| 单体分支 | RuoYi-Vue-Plus-fast | [fast分支地址](https://gitee.com/JavaLionLi/RuoYi-Vue-Plus/tree/fast/) | 单体应用结构 |
| Vue3分支 | RuoYi-Vue-Plus-UI | [UI地址](https://gitee.com/JavaLionLi/RuoYi-Vue-Plus-UI) | 由于组件还未完善 仅供学习 |
| 原框架 | RuoYi-Vue | [RuoYi-Vue官网](http://ruoyi.vip/) | 定期同步需要的功能 |
| 前端开发框架 | Vue、Element UI | [Element UI官网](https://element.eleme.cn/#/zh-CN) | |
| 后端开发框架 | SpringBoot | [SpringBoot官网](https://spring.io/projects/spring-boot/#learn) | |
| 容器框架 | Undertow | [Undertow官网](https://undertow.io/) | 基于 XNIO 的高性能容器 |
| 权限认证框架 | Spring Security、Jwt | [SpringSecurity官网](https://spring.io/projects/spring-security#learn) | 支持多终端认证系统 |
| 权限认证框架 | Sa-Token、Jwt | [Sa-Token官网](https://sa-token.dev33.cn/) | 强解耦、强扩展 |
| 关系数据库 | MySQL | [MySQL官网](https://dev.mysql.com/) | 适配 8.X 最低 5.7 |
| 缓存数据库 | Redis | [Redis官网](https://redis.io/) | 适配 6.X 最低 4.X |
| 数据库框架 | Mybatis-Plus | [Mybatis-Plus文档](https://baomidou.com/guide/) | 快速 CRUD 增加开发效率 |
| 数据库框架 | p6spy | [p6spy官网](https://p6spy.readthedocs.io/) | 更强劲的 SQL 分析 |
| 多数据源框架 | dynamic-datasource | [dynamic-ds文档](https://www.kancloud.cn/tracy5546/dynamic-datasource/content) | 支持主从与多种类数据库异构 |
| 序列化框架 | Jackson | [Jackson官网](https://github.com/FasterXML/jackson) | 统一使用 jackson 高效可靠 |
| Redis客户端 | Redisson | [Redisson文档](https://github.com/redisson/redisson/wiki/%E7%9B%AE%E5%BD%95) | 支持单机、集群配置 |
| 分布式限流 | Redisson | [Redisson文档](https://github.com/redisson/redisson/wiki/%E7%9B%AE%E5%BD%95) | 全局、请求IP、集群ID 多种限流 |
| 分布式锁 | Lock4j | [Lock4j官网](https://gitee.com/baomidou/lock4j) | 注解锁、工具锁 多种多样 |
| 分布式幂等 | Redisson | [Lock4j文档](https://gitee.com/baomidou/lock4j) | 拦截重复提交 |
| 分布式日志 | TLog | [TLog文档](https://yomahub.com/tlog/docs) | 支持跟踪链路日志记录、性能分析、链路排查 |
| 分布式任务调度 | Xxl-Job | [Xxl-Job官网](https://www.xuxueli.com/xxl-job/) | 高性能 高可靠 易扩展 |
| 文件存储 | Minio | [Minio文档](https://docs.min.io/) | 本地存储 |
| 文件存储 | 七牛、阿里、腾讯 | [OSS使用文档](https://gitee.com/JavaLionLi/RuoYi-Vue-Plus/wikis/pages?sort_id=4359146&doc_id=1469725) | 云存储 |
| 监控框架 | SpringBoot-Admin | [SpringBoot-Admin文档](https://codecentric.github.io/spring-boot-admin/current/) | 全方位服务监控 |
| 校验框架 | Validation | [Validation文档](https://docs.jboss.org/hibernate/stable/validator/reference/en-US/html_single/) | 增强接口安全性、严谨性 支持国际化 |
| Excel框架 | Alibaba EasyExcel | [EasyExcel文档](https://www.yuque.com/easyexcel/doc/easyexcel) | 性能优异 扩展性强 |
| 文档框架 | Knife4j | [Knife4j文档](https://doc.xiaominfo.com/knife4j/documentation/) | 美化接口文档 |
| 工具类框架 | Hutool、Lombok | [Hutool文档](https://www.hutool.cn/docs/) | 减少代码冗余 增加安全性 |
| 代码生成器 | 适配MP、Knife4j规范化代码 | [Hutool文档](https://www.hutool.cn/docs/) | 一键生成前后端代码 |
| 部署方式 | Docker | [Docker文档](https://docs.docker.com/) | 容器编排 一键部署业务集群 |
| 国际化 | SpringMessage | [SpringMVC文档](https://docs.spring.io/spring-framework/docs/current/reference/html/web.html#mvc) | Spring标准国际化方案 |
1. 用户管理:用户是系统操作者,该功能主要完成系统用户配置。 ## 参考文档
2. 部门管理:配置系统组织机构(公司、部门、小组),树结构展现支持数据权限。
3. 岗位管理:配置系统用户所属担任职务。
4. 菜单管理:配置系统菜单,操作权限,按钮权限标识等。
5. 角色管理:角色菜单权限分配、设置角色按机构进行数据范围权限划分。
6. 字典管理:对系统中经常使用的一些较为固定的数据进行维护。
7. 参数管理:对系统动态配置常用参数。
8. 通知公告:系统通知公告信息发布维护。
9. 操作日志:系统正常操作日志记录和查询;系统异常信息日志记录和查询。
10. 登录日志:系统登录日志记录查询包含登录异常。
11. 在线用户:当前系统中活跃用户状态监控。
12. 定时任务:在线(添加、修改、删除)任务调度包含执行结果日志。
13. 代码生成前后端代码的生成java、html、xml、sql支持CRUD下载 。
14. 系统接口根据业务代码自动生成相关的api接口文档。
15. 服务监控监视当前系统CPU、内存、磁盘、堆栈等相关信息。
16. 缓存监控:对系统的缓存信息查询,命令统计等。
17. 在线构建器拖动表单元素生成相应的HTML代码。
18. 连接池监视监视当前系统数据库连接池状态可进行分析SQL找出系统性能瓶颈。
## 在线体验 使用框架前请仔细阅读文档重点注意事项
<br>
>[初始化项目 必看](https://gitee.com/JavaLionLi/RuoYi-Vue-Plus/wikis/关于初始化项目?sort_id=4164117)
>>[https://gitee.com/JavaLionLi/RuoYi-Vue-Plus/wikis/关于初始化项目?sort_id=4164117](https://gitee.com/JavaLionLi/RuoYi-Vue-Plus/wikis/关于初始化项目?sort_id=4164117)
>
>[部署项目 必看](https://gitee.com/JavaLionLi/RuoYi-Vue-Plus/wikis/关于应用部署?sort_id=4219382)
>>[https://gitee.com/JavaLionLi/RuoYi-Vue-Plus/wikis/关于应用部署?sort_id=4219382](https://gitee.com/JavaLionLi/RuoYi-Vue-Plus/wikis/关于应用部署?sort_id=4219382)
>
>[参考文档 Wiki](https://gitee.com/JavaLionLi/RuoYi-Vue-Plus/wikis/pages)
>>[https://gitee.com/JavaLionLi/RuoYi-Vue-Plus/wikis/pages](https://gitee.com/JavaLionLi/RuoYi-Vue-Plus/wikis/pages)
- admin/admin123 ## 软件架构图
- 陆陆续续收到一些打赏,为了更好的体验已用于演示服务器升级。谢谢各位小伙伴。
演示地址:http://vue.ruoyi.vip ![Plus部署架构图](https://images.gitee.com/uploads/images/2021/1112/202137_673ac5d2_1766278.png "Plus部署架构图.png")
文档地址http://doc.ruoyi.vip ## 贡献代码
## 演示图 欢迎各路英雄豪杰 `PR` 代码 请提交到 `dev` 开发分支 统一测试发版
<table> 框架定位为 `通用后台管理系统(分布式集群强化)` 原则上不接受业务 `PR`
<tr>
<td><img src="https://oscimg.oschina.net/oscnet/cd1f90be5f2684f4560c9519c0f2a232ee8.jpg"/></td> ### 其他
<td><img src="https://oscimg.oschina.net/oscnet/1cbcf0e6f257c7d3a063c0e3f2ff989e4b3.jpg"/></td>
</tr> * 同步升级 RuoYi-Vue
<tr> * GitHub 地址 [RuoYi-Vue-Plus-github](https://github.com/JavaLionLi/RuoYi-Vue-Plus)
<td><img src="https://oscimg.oschina.net/oscnet/up-8074972883b5ba0622e13246738ebba237a.png"/></td> * 单模块 fast 分支 [RuoYi-Vue-Plus-fast](https://gitee.com/JavaLionLi/RuoYi-Vue-Plus/tree/fast/)
<td><img src="https://oscimg.oschina.net/oscnet/up-9f88719cdfca9af2e58b352a20e23d43b12.png"/></td> * satoken 分支 [RuoYi-Vue-Plus-satoken](https://gitee.com/JavaLionLi/RuoYi-Vue-Plus/tree/satoken/)
</tr> * 用户扩展项目 [扩展项目列表](https://gitee.com/JavaLionLi/RuoYi-Vue-Plus/wikis/pages?sort_id=4478302&doc_id=1469725)
<tr>
<td><img src="https://oscimg.oschina.net/oscnet/up-39bf2584ec3a529b0d5a3b70d15c9b37646.png"/></td> ## 加群与捐献
<td><img src="https://oscimg.oschina.net/oscnet/up-936ec82d1f4872e1bc980927654b6007307.png"/></td> >[加群与捐献](https://gitee.com/JavaLionLi/RuoYi-Vue-Plus/wikis/加群与捐献?sort_id=4104598)
</tr> >>[https://gitee.com/JavaLionLi/RuoYi-Vue-Plus/wikis/加群与捐献?sort_id=4104598](https://gitee.com/JavaLionLi/RuoYi-Vue-Plus/wikis/加群与捐献?sort_id=4104598)
<tr>
<td><img src="https://oscimg.oschina.net/oscnet/up-b2d62ceb95d2dd9b3fbe157bb70d26001e9.png"/></td> ## 捐献作者
<td><img src="https://oscimg.oschina.net/oscnet/up-d67451d308b7a79ad6819723396f7c3d77a.png"/></td> 作者为兼职做开源,平时还需要工作,如果帮到了您可以请作者吃个盒饭
</tr> <img src="https://images.gitee.com/uploads/images/2021/0525/101654_451e4523_1766278.jpeg" width="300px" height="450px" />
<tr> <img src="https://images.gitee.com/uploads/images/2021/0525/101713_3d18b119_1766278.jpeg" width="300px" height="450px" />
<td><img src="https://oscimg.oschina.net/oscnet/5e8c387724954459291aafd5eb52b456f53.jpg"/></td>
<td><img src="https://oscimg.oschina.net/oscnet/644e78da53c2e92a95dfda4f76e6d117c4b.jpg"/></td> ## 业务功能
</tr>
<tr> | 功能 | 介绍 |
<td><img src="https://oscimg.oschina.net/oscnet/up-8370a0d02977eebf6dbf854c8450293c937.png"/></td> |---|---|
<td><img src="https://oscimg.oschina.net/oscnet/up-49003ed83f60f633e7153609a53a2b644f7.png"/></td> | 用户管理 | 用户是系统操作者,该功能主要完成系统用户配置。 |
</tr> | 部门管理 | 配置系统组织机构(公司、部门、小组),树结构展现支持数据权限。 |
<tr> | 岗位管理 | 配置系统用户所属担任职务。 |
<td><img src="https://oscimg.oschina.net/oscnet/up-d4fe726319ece268d4746602c39cffc0621.png"/></td> | 菜单管理 | 配置系统菜单,操作权限,按钮权限标识等。 |
<td><img src="https://oscimg.oschina.net/oscnet/up-c195234bbcd30be6927f037a6755e6ab69c.png"/></td> | 角色管理 | 角色菜单权限分配、设置角色按机构进行数据范围权限划分。 |
</tr> | 字典管理 | 对系统中经常使用的一些较为固定的数据进行维护。 |
<tr> | 参数管理 | 对系统动态配置常用参数。 |
<td><img src="https://oscimg.oschina.net/oscnet/b6115bc8c31de52951982e509930b20684a.jpg"/></td> | 通知公告 | 系统通知公告信息发布维护。 |
<td><img src="https://oscimg.oschina.net/oscnet/up-5e4daac0bb59612c5038448acbcef235e3a.png"/></td> | 操作日志 | 系统正常操作日志记录和查询;系统异常信息日志记录和查询。 |
</tr> | 登录日志 | 系统登录日志记录查询包含登录异常。 |
| 文件管理 | 系统文件上传、下载等管理。 |
| 定时任务 | 在线(添加、修改、删除)任务调度包含执行结果日志。 |
| 代码生成 | 前后端代码的生成java、html、xml、sql支持CRUD下载 。 |
| 系统接口 | 根据业务代码自动生成相关的api接口文档。 |
| 服务监控 | 监视集群系统CPU、内存、磁盘、堆栈、在线日志、Spring相关配置等。 |
| 缓存监控 | 对系统的缓存信息查询,命令统计等。 |
| 在线构建器 | 拖动表单元素生成相应的HTML代码。 |
| 连接池监视 | 监视当前系统数据库连接池状态可进行分析SQL找出系统性能瓶颈。 |
| 使用案例 | 系统的一些功能案例 |
## 演示图例
<table border="1" cellpadding="1" cellspacing="1" style="width:500px">
<tbody>
<tr>
<td><img src="https://oscimg.oschina.net/oscnet/up-972235bcbe3518dedd351ff0e2ee7d1031c.png" width="1920" /></td>
<td><img src="https://oscimg.oschina.net/oscnet/up-5e0097702fa91e2e36391de8127676a7fa1.png" width="1920" /></td>
</tr>
<tr>
<td>
<p><img src="https://oscimg.oschina.net/oscnet/up-e56e3828f48cd9886d88731766f06d5f3c1.png" width="1920" /></p>
</td>
<td><img src="https://oscimg.oschina.net/oscnet/up-0715990ea1a9f254ec2138fcd063c1f556a.png" width="1920" /></td>
</tr>
<tr>
<td><img src="https://oscimg.oschina.net/oscnet/up-eaf5417ccf921bb64abb959e3d8e290467f.png" width="1920" /></td>
<td><img src="https://oscimg.oschina.net/oscnet/up-fc285cf33095ebf8318de6999af0f473861.png" width="1920" /></td>
</tr>
<tr>
<td><img src="https://oscimg.oschina.net/oscnet/up-60c83fd8bd61c29df6dbf47c88355e9c272.png" width="1920" /></td>
<td><img src="https://oscimg.oschina.net/oscnet/up-7f731948c8b73c7d90f67f9e1c7a534d5c3.png" width="1920" /></td>
</tr>
<tr>
<td><img src="https://oscimg.oschina.net/oscnet/up-e4de89b5e2d20c52d3c3a47f9eb88eb8526.png" width="1920" /></td>
<td><img src="https://oscimg.oschina.net/oscnet/up-8791d823a508eb90e67c604f36f57491a67.png" width="1920" /></td>
</tr>
<tr>
<td><img src="https://oscimg.oschina.net/oscnet/up-4589afd99982ead331785299b894174feb6.png" width="1920" /></td>
<td><img src="https://oscimg.oschina.net/oscnet/up-8ea177cdacaea20995daf2f596b15232561.png" width="1920" /></td>
</tr>
<tr>
<td><img src="https://oscimg.oschina.net/oscnet/up-32d1d04c55c11f74c9129fbbc58399728c4.png" width="1920" /></td>
<td><img src="https://oscimg.oschina.net/oscnet/up-04fa118f7631b7ae6fd72299ca0a1430a63.png" width="1920" /></td>
</tr>
<tr>
<td><img src="https://oscimg.oschina.net/oscnet/up-fe7e85b65827802bfaadf3acd42568b58c7.png" width="1920" /></td>
<td><img src="https://oscimg.oschina.net/oscnet/up-eff2b02a54f8188022d8498cfe6af6fcc06.png" width="1920" /></td>
</tr>
</tbody>
</table> </table>
## 若依前后端分离交流群
QQ群 [![加入QQ群](https://img.shields.io/badge/已满-937441-blue.svg)](https://jq.qq.com/?_wv=1027&k=5bVB1og) [![加入QQ群](https://img.shields.io/badge/已满-887144332-blue.svg)](https://jq.qq.com/?_wv=1027&k=5eiA4DH) [![加入QQ群](https://img.shields.io/badge/已满-180251782-blue.svg)](https://jq.qq.com/?_wv=1027&k=5AxMKlC) [![加入QQ群](https://img.shields.io/badge/已满-104180207-blue.svg)](https://jq.qq.com/?_wv=1027&k=51G72yr) [![加入QQ群](https://img.shields.io/badge/186866453-blue.svg)](https://jq.qq.com/?_wv=1027&k=VvjN2nvu) 点击按钮入群。

View File

@ -1,12 +0,0 @@
@echo off
echo.
echo [<5B><>Ϣ] <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD>
echo.
%~d0
cd %~dp0
cd ..
call mvn clean
pause

View File

@ -1,12 +0,0 @@
@echo off
echo.
echo [<5B><>Ϣ] <20><><EFBFBD><EFBFBD>Web<65><62><EFBFBD>̣<EFBFBD><CCA3><EFBFBD><EFBFBD><EFBFBD>war/jar<61><72><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>
echo.
%~d0
cd %~dp0
cd ..
call mvn clean package -Dmaven.test.skip=true
pause

View File

@ -1,14 +0,0 @@
@echo off
echo.
echo [<5B><>Ϣ] <20><><EFBFBD><EFBFBD>Web<65><62><EFBFBD>̡<EFBFBD>
echo.
cd %~dp0
cd ../ruoyi-admin/target
set JAVA_OPTS=-Xms256m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m
java -jar %JAVA_OPTS% ruoyi-admin.jar
cd bin
pause

Binary file not shown.

666
pom.xml
View File

@ -1,277 +1,389 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" <project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<groupId>com.ruoyi</groupId> <groupId>com.ruoyi</groupId>
<artifactId>ruoyi</artifactId> <artifactId>ruoyi-vue-plus</artifactId>
<version>3.4.0</version> <version>3.5.0</version>
<name>ruoyi</name> <name>RuoYi-Vue-Plus</name>
<url>http://www.ruoyi.vip</url> <url>https://gitee.com/JavaLionLi/RuoYi-Vue-Plus</url>
<description>若依管理系统</description> <description>RuoYi-Vue-Plus后台管理系统</description>
<properties> <properties>
<ruoyi.version>3.4.0</ruoyi.version> <ruoyi-vue-plus.version>3.5.0</ruoyi-vue-plus.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <spring-boot.version>2.5.8</spring-boot.version>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<java.version>1.8</java.version> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<maven-jar-plugin.version>3.1.1</maven-jar-plugin.version> <java.version>1.8</java.version>
<druid.version>1.2.4</druid.version> <maven-jar-plugin.version>3.2.0</maven-jar-plugin.version>
<bitwalker.version>1.21</bitwalker.version> <druid.version>1.2.8</druid.version>
<swagger.version>2.9.2</swagger.version> <knife4j.version>3.0.3</knife4j.version>
<kaptcha.version>2.3.2</kaptcha.version> <swagger-annotations.version>1.5.22</swagger-annotations.version>
<mybatis-spring-boot.version>2.1.4</mybatis-spring-boot.version> <poi.version>4.1.2</poi.version>
<pagehelper.boot.version>1.3.0</pagehelper.boot.version> <easyexcel.version>2.2.11</easyexcel.version>
<fastjson.version>1.2.75</fastjson.version> <cglib.version>3.3.0</cglib.version>
<oshi.version>5.6.0</oshi.version> <velocity.version>2.3</velocity.version>
<jna.version>5.7.0</jna.version> <mybatis-plus.version>3.4.3.4</mybatis-plus.version>
<commons.io.version>2.5</commons.io.version> <p6spy.version>3.9.1</p6spy.version>
<commons.fileupload.version>1.3.3</commons.fileupload.version> <hutool.version>5.7.18</hutool.version>
<commons.collections.version>3.2.2</commons.collections.version> <okhttp.version>4.9.2</okhttp.version>
<poi.version>4.1.2</poi.version> <spring-boot-admin.version>2.5.5</spring-boot-admin.version>
<velocity.version>1.7</velocity.version> <redisson.version>3.16.7</redisson.version>
<jwt.version>0.9.1</jwt.version> <lock4j.version>2.2.1</lock4j.version>
</properties> <dynamic-ds.version>3.5.0</dynamic-ds.version>
<tlog.version>1.3.6</tlog.version>
<!-- 依赖声明 --> <xxl-job.version>2.3.0</xxl-job.version>
<dependencyManagement>
<dependencies> <!-- jdk11 缺失依赖 jaxb-->
<jaxb.version>3.0.1</jaxb.version>
<!-- SpringBoot的依赖配置-->
<dependency> <!-- OSS 配置 -->
<groupId>org.springframework.boot</groupId> <qiniu.version>7.9.0</qiniu.version>
<artifactId>spring-boot-dependencies</artifactId> <aliyun.oss.version>3.13.1</aliyun.oss.version>
<version>2.2.13.RELEASE</version> <qcloud.cos.version>5.6.58</qcloud.cos.version>
<type>pom</type> <minio.version>8.3.4</minio.version>
<scope>import</scope>
</dependency> <!-- docker 配置 -->
<docker.registry.url>localhost</docker.registry.url>
<!--阿里数据库连接池 --> <docker.registry.host>http://${docker.registry.url}:2375</docker.registry.host>
<dependency> <docker.namespace>ruoyi</docker.namespace>
<groupId>com.alibaba</groupId> <docker.plugin.version>1.2.2</docker.plugin.version>
<artifactId>druid-spring-boot-starter</artifactId>
<version>${druid.version}</version> </properties>
</dependency>
<!-- 依赖声明 -->
<!-- 解析客户端操作系统、浏览器等 --> <dependencyManagement>
<dependency> <dependencies>
<groupId>eu.bitwalker</groupId>
<artifactId>UserAgentUtils</artifactId> <!-- SpringBoot的依赖配置-->
<version>${bitwalker.version}</version> <dependency>
</dependency> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<!-- SpringBoot集成mybatis框架 --> <version>${spring-boot.version}</version>
<dependency> <type>pom</type>
<groupId>org.mybatis.spring.boot</groupId> <scope>import</scope>
<artifactId>mybatis-spring-boot-starter</artifactId> </dependency>
<version>${mybatis-spring-boot.version}</version>
</dependency> <!-- 阿里数据库连接池 -->
<dependency>
<!-- pagehelper 分页插件 --> <groupId>com.alibaba</groupId>
<dependency> <artifactId>druid-spring-boot-starter</artifactId>
<groupId>com.github.pagehelper</groupId> <version>${druid.version}</version>
<artifactId>pagehelper-spring-boot-starter</artifactId> </dependency>
<version>${pagehelper.boot.version}</version>
</dependency> <dependency>
<groupId>com.github.xiaoymin</groupId>
<!-- 获取系统信息 --> <artifactId>knife4j-spring-boot-starter</artifactId>
<dependency> <version>${knife4j.version}</version>
<groupId>com.github.oshi</groupId> <exclusions>
<artifactId>oshi-core</artifactId> <exclusion>
<version>${oshi.version}</version> <artifactId>swagger-annotations</artifactId>
</dependency> <groupId>io.swagger</groupId>
</exclusion>
<dependency> </exclusions>
<groupId>net.java.dev.jna</groupId> </dependency>
<artifactId>jna</artifactId>
<version>${jna.version}</version> <dependency>
</dependency> <groupId>io.swagger</groupId>
<artifactId>swagger-annotations</artifactId>
<dependency> <version>${swagger-annotations.version}</version>
<groupId>net.java.dev.jna</groupId> </dependency>
<artifactId>jna-platform</artifactId>
<version>${jna.version}</version> <!-- excel工具 -->
</dependency> <dependency>
<groupId>org.apache.poi</groupId>
<!-- swagger2--> <artifactId>poi-ooxml</artifactId>
<dependency> <version>${poi.version}</version>
<groupId>io.springfox</groupId> </dependency>
<artifactId>springfox-swagger2</artifactId>
<version>${swagger.version}</version> <dependency>
<exclusions> <groupId>com.alibaba</groupId>
<exclusion> <artifactId>easyexcel</artifactId>
<groupId>io.swagger</groupId> <version>${easyexcel.version}</version>
<artifactId>swagger-annotations</artifactId> <exclusions>
</exclusion> <exclusion>
<exclusion> <groupId>org.apache.poi</groupId>
<groupId>io.swagger</groupId> <artifactId>poi</artifactId>
<artifactId>swagger-models</artifactId> </exclusion>
</exclusion> <exclusion>
</exclusions> <groupId>org.apache.poi</groupId>
</dependency> <artifactId>poi-ooxml-schemas</artifactId>
</exclusion>
<!-- swagger2-UI--> </exclusions>
<dependency> </dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId> <dependency>
<version>${swagger.version}</version> <groupId>cglib</groupId>
</dependency> <artifactId>cglib</artifactId>
<version>${cglib.version}</version>
<!--io常用工具类 --> </dependency>
<dependency>
<groupId>commons-io</groupId> <!-- velocity代码生成使用模板 -->
<artifactId>commons-io</artifactId> <dependency>
<version>${commons.io.version}</version> <groupId>org.apache.velocity</groupId>
</dependency> <artifactId>velocity-engine-core</artifactId>
<version>${velocity.version}</version>
<!--文件上传工具类 --> </dependency>
<dependency>
<groupId>commons-fileupload</groupId> <!-- jdk11 缺失依赖 jaxb-->
<artifactId>commons-fileupload</artifactId> <dependency>
<version>${commons.fileupload.version}</version> <groupId>com.sun.xml.bind</groupId>
</dependency> <artifactId>jaxb-impl</artifactId>
<version>${jaxb.version}</version>
<!-- excel工具 --> </dependency>
<dependency>
<groupId>org.apache.poi</groupId> <!-- dynamic-datasource 多数据源-->
<artifactId>poi-ooxml</artifactId> <dependency>
<version>${poi.version}</version> <groupId>com.baomidou</groupId>
</dependency> <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
<version>${dynamic-ds.version}</version>
<!--velocity代码生成使用模板 --> </dependency>
<dependency>
<groupId>org.apache.velocity</groupId> <dependency>
<artifactId>velocity</artifactId> <groupId>com.baomidou</groupId>
<version>${velocity.version}</version> <artifactId>mybatis-plus-boot-starter</artifactId>
<exclusions> <version>${mybatis-plus.version}</version>
<exclusion> </dependency>
<groupId>commons-collections</groupId> <dependency>
<artifactId>commons-collections</artifactId> <groupId>com.baomidou</groupId>
</exclusion> <artifactId>mybatis-plus-extension</artifactId>
</exclusions> <version>${mybatis-plus.version}</version>
</dependency> </dependency>
<!-- sql性能分析插件 -->
<!-- collections工具类 --> <dependency>
<dependency> <groupId>p6spy</groupId>
<groupId>commons-collections</groupId> <artifactId>p6spy</artifactId>
<artifactId>commons-collections</artifactId> <version>${p6spy.version}</version>
<version>${commons.collections.version}</version> </dependency>
</dependency>
<dependency>
<!-- 阿里JSON解析器 --> <groupId>cn.hutool</groupId>
<dependency> <artifactId>hutool-core</artifactId>
<groupId>com.alibaba</groupId> <version>${hutool.version}</version>
<artifactId>fastjson</artifactId> </dependency>
<version>${fastjson.version}</version>
</dependency> <dependency>
<groupId>cn.hutool</groupId>
<!--Token生成与解析--> <artifactId>hutool-http</artifactId>
<dependency> <version>${hutool.version}</version>
<groupId>io.jsonwebtoken</groupId> </dependency>
<artifactId>jjwt</artifactId>
<version>${jwt.version}</version> <dependency>
</dependency> <groupId>cn.hutool</groupId>
<artifactId>hutool-captcha</artifactId>
<!--验证码 --> <version>${hutool.version}</version>
<dependency> </dependency>
<groupId>com.github.penggle</groupId>
<artifactId>kaptcha</artifactId> <dependency>
<version>${kaptcha.version}</version> <groupId>cn.hutool</groupId>
</dependency> <artifactId>hutool-extra</artifactId>
<version>${hutool.version}</version>
<!-- 定时任务--> </dependency>
<dependency>
<groupId>com.ruoyi</groupId> <dependency>
<artifactId>ruoyi-quartz</artifactId> <groupId>cn.hutool</groupId>
<version>${ruoyi.version}</version> <artifactId>hutool-jwt</artifactId>
</dependency> <version>${hutool.version}</version>
</dependency>
<!-- 代码生成-->
<dependency> <dependency>
<groupId>com.ruoyi</groupId> <groupId>com.squareup.okhttp3</groupId>
<artifactId>ruoyi-generator</artifactId> <artifactId>okhttp</artifactId>
<version>${ruoyi.version}</version> <version>${okhttp.version}</version>
</dependency> </dependency>
<!-- 核心模块--> <dependency>
<dependency> <groupId>de.codecentric</groupId>
<groupId>com.ruoyi</groupId> <artifactId>spring-boot-admin-starter-server</artifactId>
<artifactId>ruoyi-framework</artifactId> <version>${spring-boot-admin.version}</version>
<version>${ruoyi.version}</version> </dependency>
</dependency> <dependency>
<groupId>de.codecentric</groupId>
<!-- 系统模块--> <artifactId>spring-boot-admin-starter-client</artifactId>
<dependency> <version>${spring-boot-admin.version}</version>
<groupId>com.ruoyi</groupId> </dependency>
<artifactId>ruoyi-system</artifactId>
<version>${ruoyi.version}</version> <!--redisson-->
</dependency> <dependency>
<groupId>org.redisson</groupId>
<!-- 通用工具--> <artifactId>redisson-spring-boot-starter</artifactId>
<dependency> <version>${redisson.version}</version>
<groupId>com.ruoyi</groupId> </dependency>
<artifactId>ruoyi-common</artifactId> <dependency>
<version>${ruoyi.version}</version> <groupId>com.baomidou</groupId>
</dependency> <artifactId>lock4j-redisson-spring-boot-starter</artifactId>
<version>${lock4j.version}</version>
</dependencies> </dependency>
</dependencyManagement>
<!-- xxl-job-core -->
<modules> <dependency>
<module>ruoyi-admin</module> <groupId>com.xuxueli</groupId>
<module>ruoyi-framework</module> <artifactId>xxl-job-core</artifactId>
<module>ruoyi-system</module> <version>${xxl-job.version}</version>
<module>ruoyi-quartz</module> </dependency>
<module>ruoyi-generator</module>
<module>ruoyi-common</module> <dependency>
</modules> <groupId>com.yomahub</groupId>
<packaging>pom</packaging> <artifactId>tlog-web-spring-boot-starter</artifactId>
<version>${tlog.version}</version>
</dependency>
<dependencies>
<dependency>
</dependencies> <groupId>com.yomahub</groupId>
<artifactId>tlog-xxljob-spring-boot-starter</artifactId>
<build> <version>${tlog.version}</version>
<plugins> </dependency>
<plugin>
<groupId>org.apache.maven.plugins</groupId> <!-- 定时任务 -->
<artifactId>maven-compiler-plugin</artifactId> <dependency>
<version>3.1</version> <groupId>com.ruoyi</groupId>
<configuration> <artifactId>ruoyi-job</artifactId>
<source>${java.version}</source> <version>${ruoyi-vue-plus.version}</version>
<target>${java.version}</target> </dependency>
<encoding>${project.build.sourceEncoding}</encoding>
</configuration> <!-- 代码生成-->
</plugin> <dependency>
</plugins> <groupId>com.ruoyi</groupId>
</build> <artifactId>ruoyi-generator</artifactId>
<version>${ruoyi-vue-plus.version}</version>
<repositories> </dependency>
<repository>
<id>public</id> <!-- 核心模块-->
<name>aliyun nexus</name> <dependency>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url> <groupId>com.ruoyi</groupId>
<releases> <artifactId>ruoyi-framework</artifactId>
<enabled>true</enabled> <version>${ruoyi-vue-plus.version}</version>
</releases> </dependency>
</repository>
</repositories> <!-- 系统模块-->
<dependency>
<pluginRepositories> <groupId>com.ruoyi</groupId>
<pluginRepository> <artifactId>ruoyi-system</artifactId>
<id>public</id> <version>${ruoyi-vue-plus.version}</version>
<name>aliyun nexus</name> </dependency>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<releases> <!-- 通用工具-->
<enabled>true</enabled> <dependency>
</releases> <groupId>com.ruoyi</groupId>
<snapshots> <artifactId>ruoyi-common</artifactId>
<enabled>false</enabled> <version>${ruoyi-vue-plus.version}</version>
</snapshots> </dependency>
</pluginRepository>
</pluginRepositories> <!-- OSS对象存储模块 -->
<dependency>
</project> <groupId>com.ruoyi</groupId>
<artifactId>ruoyi-oss</artifactId>
<version>${ruoyi-vue-plus.version}</version>
</dependency>
<!-- demo模块 -->
<dependency>
<groupId>com.ruoyi</groupId>
<artifactId>ruoyi-demo</artifactId>
<version>${ruoyi-vue-plus.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
<modules>
<module>ruoyi-admin</module>
<module>ruoyi-framework</module>
<module>ruoyi-system</module>
<module>ruoyi-job</module>
<module>ruoyi-generator</module>
<module>ruoyi-common</module>
<module>ruoyi-demo</module>
<module>ruoyi-extend</module>
<module>ruoyi-oss</module>
</modules>
<packaging>pom</packaging>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
<encoding>${project.build.sourceEncoding}</encoding>
</configuration>
</plugin>
</plugins>
<resources>
<resource>
<!--打包该目录下的 application.yml -->
<directory>src/main/resources</directory>
<!-- 启用过滤 即该资源中的变量将会被过滤器中的值替换 -->
<filtering>true</filtering>
</resource>
</resources>
</build>
<repositories>
<repository>
<id>public</id>
<name>aliyun nexus</name>
<url>https://maven.aliyun.com/repository/public/</url>
<releases>
<enabled>true</enabled>
</releases>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>public</id>
<name>aliyun nexus</name>
<url>https://maven.aliyun.com/repository/public/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
<profiles>
<profile>
<id>local</id>
<properties>
<!-- 环境标识,需要与配置文件的名称相对应 -->
<profiles.active>local</profiles.active>
<logging.level>debug</logging.level>
<knife4j.production>false</knife4j.production>
<endpoints.include>'*'</endpoints.include>
</properties>
</profile>
<profile>
<id>dev</id>
<properties>
<!-- 环境标识,需要与配置文件的名称相对应 -->
<profiles.active>dev</profiles.active>
<logging.level>debug</logging.level>
<knife4j.production>false</knife4j.production>
<endpoints.include>'*'</endpoints.include>
</properties>
<activation>
<!-- 默认环境 -->
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<profile>
<id>prod</id>
<properties>
<profiles.active>prod</profiles.active>
<logging.level>warn</logging.level>
<knife4j.production>true</knife4j.production>
<endpoints.include>health, info, logfile</endpoints.include>
</properties>
</profile>
</profiles>
</project>

15
ruoyi-admin/Dockerfile Normal file
View File

@ -0,0 +1,15 @@
FROM anapsix/alpine-java:8_server-jre_unlimited
MAINTAINER Lion Li
RUN mkdir -p /ruoyi/server
RUN mkdir -p /ruoyi/server/logs
RUN mkdir -p /ruoyi/server/temp
WORKDIR /ruoyi/server
EXPOSE 8080
ADD ./target/ruoyi-admin.jar ./app.jar
ENTRYPOINT ["java", "-Djava.security.egd=file:/dev/./urandom", "-jar", "app.jar"]

View File

@ -1,108 +1,117 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" <project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent> <parent>
<artifactId>ruoyi</artifactId> <artifactId>ruoyi-vue-plus</artifactId>
<groupId>com.ruoyi</groupId> <groupId>com.ruoyi</groupId>
<version>3.4.0</version> <version>3.5.0</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<packaging>jar</packaging> <packaging>jar</packaging>
<artifactId>ruoyi-admin</artifactId> <artifactId>ruoyi-admin</artifactId>
<description> <description>
web服务入口 web服务入口
</description> </description>
<dependencies> <dependencies>
<!-- spring-boot-devtools --> <!-- spring-boot-devtools -->
<dependency> <dependency>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId> <artifactId>spring-boot-devtools</artifactId>
<optional>true</optional> <!-- 表示依赖不会传递 --> <optional>true</optional> <!-- 表示依赖不会传递 -->
</dependency> </dependency>
<!-- swagger2--> <!-- Mysql驱动包 -->
<dependency> <dependency>
<groupId>io.springfox</groupId> <groupId>mysql</groupId>
<artifactId>springfox-swagger2</artifactId> <artifactId>mysql-connector-java</artifactId>
</dependency> </dependency>
<!--防止进入swagger页面报类型转换错误排除2.9.2中的引用手动增加1.5.21版本--> <!-- 核心模块-->
<dependency> <dependency>
<groupId>io.swagger</groupId> <groupId>com.ruoyi</groupId>
<artifactId>swagger-annotations</artifactId> <artifactId>ruoyi-framework</artifactId>
<version>1.5.21</version> </dependency>
</dependency>
<dependency>
<dependency> <groupId>com.ruoyi</groupId>
<groupId>io.swagger</groupId> <artifactId>ruoyi-system</artifactId>
<artifactId>swagger-models</artifactId> </dependency>
<version>1.5.21</version>
</dependency> <dependency>
<groupId>com.ruoyi</groupId>
<!-- swagger2-UI--> <artifactId>ruoyi-job</artifactId>
<dependency> </dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId> <dependency>
</dependency> <groupId>com.ruoyi</groupId>
<artifactId>ruoyi-oss</artifactId>
<!-- Mysql驱动包 --> </dependency>
<dependency>
<groupId>mysql</groupId> <!-- 代码生成-->
<artifactId>mysql-connector-java</artifactId> <dependency>
</dependency> <groupId>com.ruoyi</groupId>
<artifactId>ruoyi-generator</artifactId>
<!-- 核心模块--> </dependency>
<dependency>
<groupId>com.ruoyi</groupId> <!-- demo模块 -->
<artifactId>ruoyi-framework</artifactId> <dependency>
</dependency> <groupId>com.ruoyi</groupId>
<artifactId>ruoyi-demo</artifactId>
<!-- 定时任务--> </dependency>
<dependency>
<groupId>com.ruoyi</groupId> </dependencies>
<artifactId>ruoyi-quartz</artifactId>
</dependency> <build>
<finalName>${project.artifactId}</finalName>
<!-- 代码生成--> <plugins>
<dependency> <plugin>
<groupId>com.ruoyi</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>ruoyi-generator</artifactId> <artifactId>spring-boot-maven-plugin</artifactId>
</dependency> <version>${spring-boot.version}</version>
<configuration>
</dependencies> <fork>true</fork> <!-- 如果没有该配置devtools不会生效 -->
</configuration>
<build> <executions>
<plugins> <execution>
<plugin> <goals>
<groupId>org.springframework.boot</groupId> <goal>repackage</goal>
<artifactId>spring-boot-maven-plugin</artifactId> </goals>
<version>2.1.1.RELEASE</version> </execution>
<configuration> </executions>
<fork>true</fork> <!-- 如果没有该配置devtools不会生效 --> </plugin>
</configuration> <plugin>
<executions> <groupId>org.apache.maven.plugins</groupId>
<execution> <artifactId>maven-war-plugin</artifactId>
<goals> <version>3.2.0</version>
<goal>repackage</goal> <configuration>
</goals> <failOnMissingWebXml>false</failOnMissingWebXml>
</execution> <warName>${project.artifactId}</warName>
</executions> </configuration>
</plugin> </plugin>
<plugin> <plugin>
<groupId>org.apache.maven.plugins</groupId> <groupId>com.spotify</groupId>
<artifactId>maven-war-plugin</artifactId> <artifactId>docker-maven-plugin</artifactId>
<version>3.1.0</version> <version>${docker.plugin.version}</version>
<configuration> <configuration>
<failOnMissingWebXml>false</failOnMissingWebXml> <imageName>${docker.namespace}/ruoyi-server:${project.version}</imageName>
<warName>${project.artifactId}</warName> <dockerDirectory>${project.basedir}</dockerDirectory>
</configuration> <dockerHost>${docker.registry.host}</dockerHost>
</plugin> <registryUrl>${docker.registry.url}</registryUrl>
</plugins> <serverId>${docker.registry.url}</serverId>
<finalName>${project.artifactId}</finalName> <resources>
</build> <resource>
<targetPath>/</targetPath>
</project> <directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
</plugins>
</build>
</project>

View File

@ -1,30 +1,24 @@
package com.ruoyi; package com.ruoyi;
import org.springframework.boot.SpringApplication; import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; import org.springframework.boot.context.metrics.buffering.BufferingApplicationStartup;
/** /**
* 启动程序 * 启动程序
* *
* @author ruoyi * @author ruoyi
*/ */
@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })
public class RuoYiApplication @SpringBootApplication
{ public class RuoYiApplication {
public static void main(String[] args)
{ public static void main(String[] args) {
// System.setProperty("spring.devtools.restart.enabled", "false"); System.setProperty("spring.devtools.restart.enabled", "false");
SpringApplication.run(RuoYiApplication.class, args); SpringApplication application = new SpringApplication(RuoYiApplication.class);
System.out.println("(♥◠‿◠)ノ゙ 若依启动成功 ლ(´ڡ`ლ)゙ \n" + application.setApplicationStartup(new BufferingApplicationStartup(2048));
" .-------. ____ __ \n" + application.run(args);
" | _ _ \\ \\ \\ / / \n" + System.out.println("(♥◠‿◠)ノ゙ RuoYi-Vue-Plus启动成功 ლ(´ڡ`ლ)゙");
" | ( ' ) | \\ _. / ' \n" + }
" |(_ o _) / _( )_ .' \n" +
" | (_,_).' __ ___(_ o _)' \n" + }
" | |\\ \\ | || |(_,_)' \n" +
" | | \\ `' /| `-' / \n" +
" | | \\ / \\ / \n" +
" ''-' `'-' `-..-' ");
}
}

View File

@ -1,18 +1,18 @@
package com.ruoyi; package com.ruoyi;
import org.springframework.boot.builder.SpringApplicationBuilder; import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
/** /**
* web容器中进行部署 * web容器中进行部署
* *
* @author ruoyi * @author ruoyi
*/ */
public class RuoYiServletInitializer extends SpringBootServletInitializer public class RuoYiServletInitializer extends SpringBootServletInitializer {
{
@Override @Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
{ return application.sources(RuoYiApplication.class);
return application.sources(RuoYiApplication.class); }
}
} }

View File

@ -1,86 +1,87 @@
package com.ruoyi.web.controller.common; package com.ruoyi.web.controller.common;
import java.awt.image.BufferedImage; import cn.hutool.captcha.AbstractCaptcha;
import java.io.IOException; import cn.hutool.captcha.generator.CodeGenerator;
import java.util.concurrent.TimeUnit; import cn.hutool.core.convert.Convert;
import javax.annotation.Resource; import cn.hutool.core.util.IdUtil;
import javax.imageio.ImageIO; import com.ruoyi.common.constant.Constants;
import javax.servlet.http.HttpServletResponse; import com.ruoyi.common.core.domain.AjaxResult;
import org.springframework.beans.factory.annotation.Autowired; import com.ruoyi.common.enums.CaptchaType;
import org.springframework.beans.factory.annotation.Value; import com.ruoyi.common.utils.RedisUtils;
import org.springframework.util.FastByteArrayOutputStream; import com.ruoyi.common.utils.StringUtils;
import org.springframework.web.bind.annotation.GetMapping; import com.ruoyi.common.utils.reflect.ReflectUtils;
import org.springframework.web.bind.annotation.RestController; import com.ruoyi.common.utils.spring.SpringUtils;
import com.google.code.kaptcha.Producer; import com.ruoyi.framework.config.properties.CaptchaProperties;
import com.ruoyi.common.constant.Constants; import com.ruoyi.system.service.ISysConfigService;
import com.ruoyi.common.core.domain.AjaxResult; import io.swagger.annotations.Api;
import com.ruoyi.common.core.redis.RedisCache; import io.swagger.annotations.ApiOperation;
import com.ruoyi.common.utils.sign.Base64; import lombok.RequiredArgsConstructor;
import com.ruoyi.common.utils.uuid.IdUtils; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
/** import org.springframework.web.bind.annotation.RestController;
* 验证码操作处理
* import java.util.HashMap;
* @author ruoyi import java.util.Map;
*/ import java.util.concurrent.TimeUnit;
@RestController
public class CaptchaController /**
{ * 验证码操作处理
@Resource(name = "captchaProducer") *
private Producer captchaProducer; * @author Lion Li
*/
@Resource(name = "captchaProducerMath") @Api(value = "验证码操作处理", tags = {"验证码管理"})
private Producer captchaProducerMath; @RequiredArgsConstructor(onConstructor_ = @Autowired)
@RestController
@Autowired public class CaptchaController {
private RedisCache redisCache;
private final CaptchaProperties captchaProperties;
// 验证码类型 private final ISysConfigService configService;
@Value("${ruoyi.captchaType}")
private String captchaType; /**
* 生成验证码
/** */
* 生成验证码 @ApiOperation("生成验证码")
*/ @GetMapping("/captchaImage")
@GetMapping("/captchaImage") public AjaxResult<Map<String, Object>> getCode() {
public AjaxResult getCode(HttpServletResponse response) throws IOException Map<String, Object> ajax = new HashMap<>();
{ boolean captchaOnOff = configService.selectCaptchaOnOff();
// 保存验证码信息 ajax.put("captchaOnOff", captchaOnOff);
String uuid = IdUtils.simpleUUID(); if (!captchaOnOff) {
String verifyKey = Constants.CAPTCHA_CODE_KEY + uuid; return AjaxResult.success(ajax);
}
String capStr = null, code = null; // 保存验证码信息
BufferedImage image = null; String uuid = IdUtil.simpleUUID();
String verifyKey = Constants.CAPTCHA_CODE_KEY + uuid;
// 生成验证码 // 生成验证码
if ("math".equals(captchaType)) CaptchaType captchaType = captchaProperties.getType();
{ boolean isMath = CaptchaType.MATH == captchaType;
String capText = captchaProducerMath.createText(); Integer length = isMath ? captchaProperties.getNumberLength() : captchaProperties.getCharLength();
capStr = capText.substring(0, capText.lastIndexOf("@")); CodeGenerator codeGenerator = ReflectUtils.newInstance(captchaType.getClazz(), length);
code = capText.substring(capText.lastIndexOf("@") + 1); AbstractCaptcha captcha = SpringUtils.getBean(captchaProperties.getCategory().getClazz());
image = captchaProducerMath.createImage(capStr); captcha.setGenerator(codeGenerator);
} captcha.createCode();
else if ("char".equals(captchaType)) String code = isMath ? getCodeResult(captcha.getCode()) : captcha.getCode();
{ RedisUtils.setCacheObject(verifyKey, code, Constants.CAPTCHA_EXPIRATION, TimeUnit.MINUTES);
capStr = code = captchaProducer.createText(); ajax.put("uuid", uuid);
image = captchaProducer.createImage(capStr); ajax.put("img", captcha.getImageBase64());
} return AjaxResult.success(ajax);
}
redisCache.setCacheObject(verifyKey, code, Constants.CAPTCHA_EXPIRATION, TimeUnit.MINUTES);
// 转换流信息写出 private String getCodeResult(String capStr) {
FastByteArrayOutputStream os = new FastByteArrayOutputStream(); int numberLength = captchaProperties.getNumberLength();
try int a = Convert.toInt(StringUtils.substring(capStr, 0, numberLength).trim());
{ char operator = capStr.charAt(numberLength);
ImageIO.write(image, "jpg", os); int b = Convert.toInt(StringUtils.substring(capStr, numberLength + 1, numberLength + 1 + numberLength).trim());
} switch (operator) {
catch (IOException e) case '*':
{ return Convert.toStr(a * b);
return AjaxResult.error(e.getMessage()); case '+':
} return Convert.toStr(a + b);
case '-':
AjaxResult ajax = AjaxResult.success(); return Convert.toStr(a - b);
ajax.put("uuid", uuid); default:
ajax.put("img", Base64.encode(os.toByteArray())); return StringUtils.EMPTY;
return ajax; }
} }
}
}

View File

@ -1,118 +0,0 @@
package com.ruoyi.web.controller.common;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import com.ruoyi.common.config.RuoYiConfig;
import com.ruoyi.common.constant.Constants;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.file.FileUploadUtils;
import com.ruoyi.common.utils.file.FileUtils;
import com.ruoyi.framework.config.ServerConfig;
/**
* 通用请求处理
*
* @author ruoyi
*/
@RestController
public class CommonController
{
private static final Logger log = LoggerFactory.getLogger(CommonController.class);
@Autowired
private ServerConfig serverConfig;
/**
* 通用下载请求
*
* @param fileName 文件名称
* @param delete 是否删除
*/
@GetMapping("common/download")
public void fileDownload(String fileName, Boolean delete, HttpServletResponse response, HttpServletRequest request)
{
try
{
if (!FileUtils.checkAllowDownload(fileName))
{
throw new Exception(StringUtils.format("文件名称({})非法,不允许下载。 ", fileName));
}
String realFileName = System.currentTimeMillis() + fileName.substring(fileName.indexOf("_") + 1);
String filePath = RuoYiConfig.getDownloadPath() + fileName;
response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);
FileUtils.setAttachmentResponseHeader(response, realFileName);
FileUtils.writeBytes(filePath, response.getOutputStream());
if (delete)
{
FileUtils.deleteFile(filePath);
}
}
catch (Exception e)
{
log.error("下载文件失败", e);
}
}
/**
* 通用上传请求
*/
@PostMapping("/common/upload")
public AjaxResult uploadFile(MultipartFile file) throws Exception
{
try
{
// 上传文件路径
String filePath = RuoYiConfig.getUploadPath();
// 上传并返回新文件名称
String fileName = FileUploadUtils.upload(filePath, file);
String url = serverConfig.getUrl() + fileName;
AjaxResult ajax = AjaxResult.success();
ajax.put("fileName", fileName);
ajax.put("url", url);
return ajax;
}
catch (Exception e)
{
return AjaxResult.error(e.getMessage());
}
}
/**
* 本地资源通用下载
*/
@GetMapping("/common/download/resource")
public void resourceDownload(String resource, HttpServletRequest request, HttpServletResponse response)
throws Exception
{
try
{
if (!FileUtils.checkAllowDownload(resource))
{
throw new Exception(StringUtils.format("资源文件({})非法,不允许下载。 ", resource));
}
// 本地资源路径
String localPath = RuoYiConfig.getProfile();
// 数据库资源地址
String downloadPath = localPath + StringUtils.substringAfter(resource, Constants.RESOURCE_PREFIX);
// 下载名称
String downloadName = StringUtils.substringAfterLast(downloadPath, "/");
response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);
FileUtils.setAttachmentResponseHeader(response, downloadName);
FileUtils.writeBytes(downloadPath, response.getOutputStream());
}
catch (Exception e)
{
log.error("下载文件失败", e);
}
}
}

View File

@ -1,53 +1,57 @@
package com.ruoyi.web.controller.monitor; package com.ruoyi.web.controller.monitor;
import java.util.ArrayList; import com.ruoyi.common.core.domain.AjaxResult;
import java.util.HashMap; import com.ruoyi.common.utils.StringUtils;
import java.util.List; import io.swagger.annotations.Api;
import java.util.Map; import io.swagger.annotations.ApiOperation;
import java.util.Properties; import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisCallback; import org.springframework.data.redis.connection.RedisServerCommands;
import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.RedisCallback;
import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RequestMapping;
import com.ruoyi.common.core.domain.AjaxResult; import org.springframework.web.bind.annotation.RestController;
import com.ruoyi.common.utils.StringUtils;
import java.util.*;
/**
* 缓存监控 /**
* * 缓存监控
* @author ruoyi *
*/ * @author Lion Li
@RestController */
@RequestMapping("/monitor/cache") @Api(value = "缓存监控", tags = {"缓存监控管理"})
public class CacheController @RequiredArgsConstructor(onConstructor_ = @Autowired)
{ @RestController
@Autowired @RequestMapping("/monitor/cache")
private RedisTemplate<String, String> redisTemplate; public class CacheController {
@PreAuthorize("@ss.hasPermi('monitor:cache:list')") private final RedisTemplate<String, String> redisTemplate;
@GetMapping()
public AjaxResult getInfo() throws Exception @ApiOperation("获取缓存监控详细信息")
{ @PreAuthorize("@ss.hasPermi('monitor:cache:list')")
Properties info = (Properties) redisTemplate.execute((RedisCallback<Object>) connection -> connection.info()); @GetMapping()
Properties commandStats = (Properties) redisTemplate.execute((RedisCallback<Object>) connection -> connection.info("commandstats")); public AjaxResult<Map<String, Object>> getInfo() throws Exception {
Object dbSize = redisTemplate.execute((RedisCallback<Object>) connection -> connection.dbSize()); Properties info = (Properties) redisTemplate.execute((RedisCallback<Object>) RedisServerCommands::info);
Properties commandStats = (Properties) redisTemplate.execute((RedisCallback<Object>) connection -> connection.info("commandstats"));
Map<String, Object> result = new HashMap<>(3); Object dbSize = redisTemplate.execute((RedisCallback<Object>) RedisServerCommands::dbSize);
result.put("info", info);
result.put("dbSize", dbSize); Map<String, Object> result = new HashMap<>(3);
result.put("info", info);
List<Map<String, String>> pieList = new ArrayList<>(); result.put("dbSize", dbSize);
commandStats.stringPropertyNames().forEach(key -> {
Map<String, String> data = new HashMap<>(2); List<Map<String, String>> pieList = new ArrayList<>();
String property = commandStats.getProperty(key); if (commandStats != null) {
data.put("name", StringUtils.removeStart(key, "cmdstat_")); commandStats.stringPropertyNames().forEach(key -> {
data.put("value", StringUtils.substringBetween(property, "calls=", ",usec")); Map<String, String> data = new HashMap<>(2);
pieList.add(data); String property = commandStats.getProperty(key);
}); data.put("name", StringUtils.removeStart(key, "cmdstat_"));
result.put("commandStats", pieList); data.put("value", StringUtils.substringBetween(property, "calls=", ",usec"));
return AjaxResult.success(result); pieList.add(data);
} });
} }
result.put("commandStats", pieList);
return AjaxResult.success(result);
}
}

View File

@ -1,27 +0,0 @@
package com.ruoyi.web.controller.monitor;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.framework.web.domain.Server;
/**
* 服务器监控
*
* @author ruoyi
*/
@RestController
@RequestMapping("/monitor/server")
public class ServerController
{
@PreAuthorize("@ss.hasPermi('monitor:server:list')")
@GetMapping()
public AjaxResult getInfo() throws Exception
{
Server server = new Server();
server.copyTo();
return AjaxResult.success(server);
}
}

View File

@ -1,67 +1,69 @@
package com.ruoyi.web.controller.monitor; package com.ruoyi.web.controller.monitor;
import java.util.List; import com.ruoyi.common.annotation.Log;
import org.springframework.beans.factory.annotation.Autowired; import com.ruoyi.common.core.controller.BaseController;
import org.springframework.security.access.prepost.PreAuthorize; import com.ruoyi.common.core.domain.AjaxResult;
import org.springframework.web.bind.annotation.DeleteMapping; import com.ruoyi.common.core.domain.PageQuery;
import org.springframework.web.bind.annotation.GetMapping; import com.ruoyi.common.core.page.TableDataInfo;
import org.springframework.web.bind.annotation.PathVariable; import com.ruoyi.common.enums.BusinessType;
import org.springframework.web.bind.annotation.RequestMapping; import com.ruoyi.common.utils.poi.ExcelUtil;
import org.springframework.web.bind.annotation.RestController; import com.ruoyi.system.domain.SysLogininfor;
import com.ruoyi.common.annotation.Log; import com.ruoyi.system.service.ISysLogininforService;
import com.ruoyi.common.core.controller.BaseController; import io.swagger.annotations.Api;
import com.ruoyi.common.core.domain.AjaxResult; import io.swagger.annotations.ApiOperation;
import com.ruoyi.common.core.page.TableDataInfo; import lombok.RequiredArgsConstructor;
import com.ruoyi.common.enums.BusinessType; import org.springframework.beans.factory.annotation.Autowired;
import com.ruoyi.common.utils.poi.ExcelUtil; import org.springframework.security.access.prepost.PreAuthorize;
import com.ruoyi.system.domain.SysLogininfor; import org.springframework.validation.annotation.Validated;
import com.ruoyi.system.service.ISysLogininforService; import org.springframework.web.bind.annotation.*;
/** import javax.servlet.http.HttpServletResponse;
* 系统访问记录 import java.util.List;
*
* @author ruoyi /**
*/ * 系统访问记录
@RestController *
@RequestMapping("/monitor/logininfor") * @author Lion Li
public class SysLogininforController extends BaseController */
{ @Validated
@Autowired @Api(value = "系统访问记录", tags = {"系统访问记录管理"})
private ISysLogininforService logininforService; @RequiredArgsConstructor(onConstructor_ = @Autowired)
@RestController
@PreAuthorize("@ss.hasPermi('monitor:logininfor:list')") @RequestMapping("/monitor/logininfor")
@GetMapping("/list") public class SysLogininforController extends BaseController {
public TableDataInfo list(SysLogininfor logininfor)
{ private final ISysLogininforService logininforService;
startPage();
List<SysLogininfor> list = logininforService.selectLogininforList(logininfor); @ApiOperation("查询系统访问记录列表")
return getDataTable(list); @PreAuthorize("@ss.hasPermi('monitor:logininfor:list')")
} @GetMapping("/list")
public TableDataInfo<SysLogininfor> list(SysLogininfor logininfor, PageQuery pageQuery) {
@Log(title = "登录日志", businessType = BusinessType.EXPORT) return logininforService.selectPageLogininforList(logininfor, pageQuery);
@PreAuthorize("@ss.hasPermi('monitor:logininfor:export')") }
@GetMapping("/export")
public AjaxResult export(SysLogininfor logininfor) @ApiOperation("导出系统访问记录列表")
{ @Log(title = "登录日志", businessType = BusinessType.EXPORT)
List<SysLogininfor> list = logininforService.selectLogininforList(logininfor); @PreAuthorize("@ss.hasPermi('monitor:logininfor:export')")
ExcelUtil<SysLogininfor> util = new ExcelUtil<SysLogininfor>(SysLogininfor.class); @PostMapping("/export")
return util.exportExcel(list, "登录日志"); public void export(SysLogininfor logininfor, HttpServletResponse response) {
} List<SysLogininfor> list = logininforService.selectLogininforList(logininfor);
ExcelUtil.exportExcel(list, "登录日志", SysLogininfor.class, response);
@PreAuthorize("@ss.hasPermi('monitor:logininfor:remove')") }
@Log(title = "登录日志", businessType = BusinessType.DELETE)
@DeleteMapping("/{infoIds}") @ApiOperation("删除系统访问记录")
public AjaxResult remove(@PathVariable Long[] infoIds) @PreAuthorize("@ss.hasPermi('monitor:logininfor:remove')")
{ @Log(title = "登录日志", businessType = BusinessType.DELETE)
return toAjax(logininforService.deleteLogininforByIds(infoIds)); @DeleteMapping("/{infoIds}")
} public AjaxResult<Void> remove(@PathVariable Long[] infoIds) {
return toAjax(logininforService.deleteLogininforByIds(infoIds));
@PreAuthorize("@ss.hasPermi('monitor:logininfor:remove')") }
@Log(title = "登录日志", businessType = BusinessType.CLEAN)
@DeleteMapping("/clean") @ApiOperation("清空系统访问记录")
public AjaxResult clean() @PreAuthorize("@ss.hasPermi('monitor:logininfor:remove')")
{ @Log(title = "登录日志", businessType = BusinessType.CLEAN)
logininforService.cleanLogininfor(); @DeleteMapping("/clean")
return AjaxResult.success(); public AjaxResult<Void> clean() {
} logininforService.cleanLogininfor();
} return AjaxResult.success();
}
}

View File

@ -1,66 +1,69 @@
package com.ruoyi.web.controller.monitor; package com.ruoyi.web.controller.monitor;
import java.util.List; import com.ruoyi.common.annotation.Log;
import org.springframework.beans.factory.annotation.Autowired; import com.ruoyi.common.core.controller.BaseController;
import org.springframework.security.access.prepost.PreAuthorize; import com.ruoyi.common.core.domain.AjaxResult;
import org.springframework.web.bind.annotation.DeleteMapping; import com.ruoyi.common.core.domain.PageQuery;
import org.springframework.web.bind.annotation.GetMapping; import com.ruoyi.common.core.page.TableDataInfo;
import org.springframework.web.bind.annotation.PathVariable; import com.ruoyi.common.enums.BusinessType;
import org.springframework.web.bind.annotation.RequestMapping; import com.ruoyi.common.utils.poi.ExcelUtil;
import org.springframework.web.bind.annotation.RestController; import com.ruoyi.system.domain.SysOperLog;
import com.ruoyi.common.annotation.Log; import com.ruoyi.system.service.ISysOperLogService;
import com.ruoyi.common.core.controller.BaseController; import io.swagger.annotations.Api;
import com.ruoyi.common.core.domain.AjaxResult; import io.swagger.annotations.ApiOperation;
import com.ruoyi.common.core.page.TableDataInfo; import lombok.RequiredArgsConstructor;
import com.ruoyi.common.enums.BusinessType; import org.springframework.beans.factory.annotation.Autowired;
import com.ruoyi.common.utils.poi.ExcelUtil; import org.springframework.security.access.prepost.PreAuthorize;
import com.ruoyi.system.domain.SysOperLog; import org.springframework.validation.annotation.Validated;
import com.ruoyi.system.service.ISysOperLogService; import org.springframework.web.bind.annotation.*;
/** import javax.servlet.http.HttpServletResponse;
* 操作日志记录 import java.util.List;
*
* @author ruoyi /**
*/ * 操作日志记录
@RestController *
@RequestMapping("/monitor/operlog") * @author Lion Li
public class SysOperlogController extends BaseController */
{ @Validated
@Autowired @Api(value = "操作日志记录", tags = {"操作日志记录管理"})
private ISysOperLogService operLogService; @RequiredArgsConstructor(onConstructor_ = @Autowired)
@RestController
@PreAuthorize("@ss.hasPermi('monitor:operlog:list')") @RequestMapping("/monitor/operlog")
@GetMapping("/list") public class SysOperlogController extends BaseController {
public TableDataInfo list(SysOperLog operLog)
{ private final ISysOperLogService operLogService;
startPage();
List<SysOperLog> list = operLogService.selectOperLogList(operLog); @ApiOperation("查询操作日志记录列表")
return getDataTable(list); @PreAuthorize("@ss.hasPermi('monitor:operlog:list')")
} @GetMapping("/list")
public TableDataInfo<SysOperLog> list(SysOperLog operLog, PageQuery pageQuery) {
@Log(title = "操作日志", businessType = BusinessType.EXPORT) return operLogService.selectPageOperLogList(operLog, pageQuery);
@PreAuthorize("@ss.hasPermi('monitor:operlog:export')") }
@GetMapping("/export")
public AjaxResult export(SysOperLog operLog) @ApiOperation("导出操作日志记录列表")
{ @Log(title = "操作日志", businessType = BusinessType.EXPORT)
List<SysOperLog> list = operLogService.selectOperLogList(operLog); @PreAuthorize("@ss.hasPermi('monitor:operlog:export')")
ExcelUtil<SysOperLog> util = new ExcelUtil<SysOperLog>(SysOperLog.class); @PostMapping("/export")
return util.exportExcel(list, "操作日志"); public void export(SysOperLog operLog, HttpServletResponse response) {
} List<SysOperLog> list = operLogService.selectOperLogList(operLog);
ExcelUtil.exportExcel(list, "操作日志", SysOperLog.class, response);
@PreAuthorize("@ss.hasPermi('monitor:operlog:remove')") }
@DeleteMapping("/{operIds}")
public AjaxResult remove(@PathVariable Long[] operIds) @ApiOperation("删除操作日志记录")
{ @Log(title = "操作日志", businessType = BusinessType.DELETE)
return toAjax(operLogService.deleteOperLogByIds(operIds)); @PreAuthorize("@ss.hasPermi('monitor:operlog:remove')")
} @DeleteMapping("/{operIds}")
public AjaxResult<Void> remove(@PathVariable Long[] operIds) {
@Log(title = "操作日志", businessType = BusinessType.CLEAN) return toAjax(operLogService.deleteOperLogByIds(operIds));
@PreAuthorize("@ss.hasPermi('monitor:operlog:remove')") }
@DeleteMapping("/clean")
public AjaxResult clean() @ApiOperation("清空操作日志记录")
{ @Log(title = "操作日志", businessType = BusinessType.CLEAN)
operLogService.cleanOperLog(); @PreAuthorize("@ss.hasPermi('monitor:operlog:remove')")
return AjaxResult.success(); @DeleteMapping("/clean")
} public AjaxResult<Void> clean() {
} operLogService.cleanOperLog();
return AjaxResult.success();
}
}

View File

@ -1,92 +1,79 @@
package com.ruoyi.web.controller.monitor; package com.ruoyi.web.controller.monitor;
import java.util.ArrayList; import com.ruoyi.common.annotation.Log;
import java.util.Collection; import com.ruoyi.common.constant.Constants;
import java.util.Collections; import com.ruoyi.common.core.controller.BaseController;
import java.util.List; import com.ruoyi.common.core.domain.AjaxResult;
import org.springframework.beans.factory.annotation.Autowired; import com.ruoyi.common.core.domain.model.LoginUser;
import org.springframework.security.access.prepost.PreAuthorize; import com.ruoyi.common.core.page.TableDataInfo;
import org.springframework.web.bind.annotation.DeleteMapping; import com.ruoyi.common.enums.BusinessType;
import org.springframework.web.bind.annotation.GetMapping; import com.ruoyi.common.utils.RedisUtils;
import org.springframework.web.bind.annotation.PathVariable; import com.ruoyi.common.utils.StringUtils;
import org.springframework.web.bind.annotation.RequestMapping; import com.ruoyi.system.domain.SysUserOnline;
import org.springframework.web.bind.annotation.RestController; import com.ruoyi.system.service.ISysUserOnlineService;
import com.ruoyi.common.annotation.Log; import io.swagger.annotations.Api;
import com.ruoyi.common.constant.Constants; import io.swagger.annotations.ApiOperation;
import com.ruoyi.common.core.controller.BaseController; import lombok.RequiredArgsConstructor;
import com.ruoyi.common.core.domain.AjaxResult; import org.springframework.beans.factory.annotation.Autowired;
import com.ruoyi.common.core.domain.model.LoginUser; import org.springframework.security.access.prepost.PreAuthorize;
import com.ruoyi.common.core.page.TableDataInfo; import org.springframework.web.bind.annotation.*;
import com.ruoyi.common.core.redis.RedisCache;
import com.ruoyi.common.enums.BusinessType; import java.util.ArrayList;
import com.ruoyi.common.utils.StringUtils; import java.util.Collection;
import com.ruoyi.system.domain.SysUserOnline; import java.util.Collections;
import com.ruoyi.system.service.ISysUserOnlineService; import java.util.List;
/** /**
* 在线用户监控 * 在线用户监控
* *
* @author ruoyi * @author Lion Li
*/ */
@RestController @Api(value = "在线用户监控", tags = {"在线用户监控管理"})
@RequestMapping("/monitor/online") @RequiredArgsConstructor(onConstructor_ = @Autowired)
public class SysUserOnlineController extends BaseController @RestController
{ @RequestMapping("/monitor/online")
@Autowired public class SysUserOnlineController extends BaseController {
private ISysUserOnlineService userOnlineService;
private final ISysUserOnlineService userOnlineService;
@Autowired
private RedisCache redisCache; @ApiOperation("在线用户列表")
@PreAuthorize("@ss.hasPermi('monitor:online:list')")
@PreAuthorize("@ss.hasPermi('monitor:online:list')") @GetMapping("/list")
@GetMapping("/list") public TableDataInfo<SysUserOnline> list(String ipaddr, String userName) {
public TableDataInfo list(String ipaddr, String userName) Collection<String> keys = RedisUtils.keys(Constants.LOGIN_TOKEN_KEY + "*");
{ List<SysUserOnline> userOnlineList = new ArrayList<SysUserOnline>();
Collection<String> keys = redisCache.keys(Constants.LOGIN_TOKEN_KEY + "*"); for (String key : keys) {
List<SysUserOnline> userOnlineList = new ArrayList<SysUserOnline>(); LoginUser user = RedisUtils.getCacheObject(key);
for (String key : keys) if (StringUtils.isNotEmpty(ipaddr) && StringUtils.isNotEmpty(userName)) {
{ if (StringUtils.equals(ipaddr, user.getIpaddr()) && StringUtils.equals(userName, user.getUsername())) {
LoginUser user = redisCache.getCacheObject(key); userOnlineList.add(userOnlineService.selectOnlineByInfo(ipaddr, userName, user));
if (StringUtils.isNotEmpty(ipaddr) && StringUtils.isNotEmpty(userName)) }
{ } else if (StringUtils.isNotEmpty(ipaddr)) {
if (StringUtils.equals(ipaddr, user.getIpaddr()) && StringUtils.equals(userName, user.getUsername())) if (StringUtils.equals(ipaddr, user.getIpaddr())) {
{ userOnlineList.add(userOnlineService.selectOnlineByIpaddr(ipaddr, user));
userOnlineList.add(userOnlineService.selectOnlineByInfo(ipaddr, userName, user)); }
} } else if (StringUtils.isNotEmpty(userName)) {
} if (StringUtils.equals(userName, user.getUsername())) {
else if (StringUtils.isNotEmpty(ipaddr)) userOnlineList.add(userOnlineService.selectOnlineByUserName(userName, user));
{ }
if (StringUtils.equals(ipaddr, user.getIpaddr())) } else {
{ userOnlineList.add(userOnlineService.loginUserToUserOnline(user));
userOnlineList.add(userOnlineService.selectOnlineByIpaddr(ipaddr, user)); }
} }
} Collections.reverse(userOnlineList);
else if (StringUtils.isNotEmpty(userName) && StringUtils.isNotNull(user.getUser())) userOnlineList.removeAll(Collections.singleton(null));
{ return TableDataInfo.build(userOnlineList);
if (StringUtils.equals(userName, user.getUsername())) }
{
userOnlineList.add(userOnlineService.selectOnlineByUserName(userName, user)); /**
} * 强退用户
} */
else @ApiOperation("强退用户")
{ @PreAuthorize("@ss.hasPermi('monitor:online:forceLogout')")
userOnlineList.add(userOnlineService.loginUserToUserOnline(user)); @Log(title = "在线用户", businessType = BusinessType.FORCE)
} @DeleteMapping("/{tokenId}")
} public AjaxResult<Void> forceLogout(@PathVariable String tokenId) {
Collections.reverse(userOnlineList); RedisUtils.deleteObject(Constants.LOGIN_TOKEN_KEY + tokenId);
userOnlineList.removeAll(Collections.singleton(null)); return AjaxResult.success();
return getDataTable(userOnlineList); }
} }
/**
* 强退用户
*/
@PreAuthorize("@ss.hasPermi('monitor:online:forceLogout')")
@Log(title = "在线用户", businessType = BusinessType.FORCE)
@DeleteMapping("/{tokenId}")
public AjaxResult forceLogout(@PathVariable String tokenId)
{
redisCache.deleteObject(Constants.LOGIN_TOKEN_KEY + tokenId);
return AjaxResult.success();
}
}

View File

@ -1,135 +1,128 @@
package com.ruoyi.web.controller.system; package com.ruoyi.web.controller.system;
import java.util.List; import com.ruoyi.common.annotation.Log;
import org.springframework.beans.factory.annotation.Autowired; import com.ruoyi.common.constant.UserConstants;
import org.springframework.security.access.prepost.PreAuthorize; import com.ruoyi.common.core.controller.BaseController;
import org.springframework.validation.annotation.Validated; import com.ruoyi.common.core.domain.AjaxResult;
import org.springframework.web.bind.annotation.DeleteMapping; import com.ruoyi.common.core.domain.PageQuery;
import org.springframework.web.bind.annotation.GetMapping; import com.ruoyi.common.core.page.TableDataInfo;
import org.springframework.web.bind.annotation.PathVariable; import com.ruoyi.common.enums.BusinessType;
import org.springframework.web.bind.annotation.PostMapping; import com.ruoyi.common.utils.poi.ExcelUtil;
import org.springframework.web.bind.annotation.PutMapping; import com.ruoyi.system.domain.SysConfig;
import org.springframework.web.bind.annotation.RequestBody; import com.ruoyi.system.service.ISysConfigService;
import org.springframework.web.bind.annotation.RequestMapping; import io.swagger.annotations.Api;
import org.springframework.web.bind.annotation.RestController; import io.swagger.annotations.ApiOperation;
import com.ruoyi.common.annotation.Log; import io.swagger.annotations.ApiParam;
import com.ruoyi.common.annotation.RepeatSubmit; import lombok.RequiredArgsConstructor;
import com.ruoyi.common.constant.UserConstants; import org.springframework.beans.factory.annotation.Autowired;
import com.ruoyi.common.core.controller.BaseController; import org.springframework.security.access.prepost.PreAuthorize;
import com.ruoyi.common.core.domain.AjaxResult; import org.springframework.validation.annotation.Validated;
import com.ruoyi.common.core.page.TableDataInfo; import org.springframework.web.bind.annotation.*;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.SecurityUtils; import javax.servlet.http.HttpServletResponse;
import com.ruoyi.common.utils.poi.ExcelUtil; import java.util.List;
import com.ruoyi.system.domain.SysConfig;
import com.ruoyi.system.service.ISysConfigService; /**
* 参数配置 信息操作处理
/** *
* 参数配置 信息操作处理 * @author Lion Li
* */
* @author ruoyi @Validated
*/ @Api(value = "参数配置控制器", tags = {"参数配置管理"})
@RestController @RequiredArgsConstructor(onConstructor_ = @Autowired)
@RequestMapping("/system/config") @RestController
public class SysConfigController extends BaseController @RequestMapping("/system/config")
{ public class SysConfigController extends BaseController {
@Autowired
private ISysConfigService configService; private final ISysConfigService configService;
/** /**
* 获取参数配置列表 * 获取参数配置列表
*/ */
@PreAuthorize("@ss.hasPermi('system:config:list')") @ApiOperation("获取参数配置列表")
@GetMapping("/list") @PreAuthorize("@ss.hasPermi('system:config:list')")
public TableDataInfo list(SysConfig config) @GetMapping("/list")
{ public TableDataInfo<SysConfig> list(SysConfig config, PageQuery pageQuery) {
startPage(); return configService.selectPageConfigList(config, pageQuery);
List<SysConfig> list = configService.selectConfigList(config); }
return getDataTable(list);
} @ApiOperation("导出参数配置列表")
@Log(title = "参数管理", businessType = BusinessType.EXPORT)
@Log(title = "参数管理", businessType = BusinessType.EXPORT) @PreAuthorize("@ss.hasPermi('system:config:export')")
@PreAuthorize("@ss.hasPermi('system:config:export')") @PostMapping("/export")
@GetMapping("/export") public void export(SysConfig config, HttpServletResponse response) {
public AjaxResult export(SysConfig config) List<SysConfig> list = configService.selectConfigList(config);
{ ExcelUtil.exportExcel(list, "参数数据", SysConfig.class, response);
List<SysConfig> list = configService.selectConfigList(config); }
ExcelUtil<SysConfig> util = new ExcelUtil<SysConfig>(SysConfig.class);
return util.exportExcel(list, "参数数据"); /**
} * 根据参数编号获取详细信息
*/
/** @ApiOperation("根据参数编号获取详细信息")
* 根据参数编号获取详细信息 @PreAuthorize("@ss.hasPermi('system:config:query')")
*/ @GetMapping(value = "/{configId}")
@PreAuthorize("@ss.hasPermi('system:config:query')") public AjaxResult<SysConfig> getInfo(@ApiParam("参数ID") @PathVariable Long configId) {
@GetMapping(value = "/{configId}") return AjaxResult.success(configService.selectConfigById(configId));
public AjaxResult getInfo(@PathVariable Long configId) }
{
return AjaxResult.success(configService.selectConfigById(configId)); /**
} * 根据参数键名查询参数值
*/
/** @ApiOperation("根据参数键名查询参数值")
* 根据参数键名查询参数值 @GetMapping(value = "/configKey/{configKey}")
*/ public AjaxResult<Void> getConfigKey(@ApiParam("参数Key") @PathVariable String configKey) {
@GetMapping(value = "/configKey/{configKey}") return AjaxResult.success(configService.selectConfigByKey(configKey));
public AjaxResult getConfigKey(@PathVariable String configKey) }
{
return AjaxResult.success(configService.selectConfigByKey(configKey)); /**
} * 新增参数配置
*/
/** @ApiOperation("新增参数配置")
* 新增参数配置 @PreAuthorize("@ss.hasPermi('system:config:add')")
*/ @Log(title = "参数管理", businessType = BusinessType.INSERT)
@PreAuthorize("@ss.hasPermi('system:config:add')") @PostMapping
@Log(title = "参数管理", businessType = BusinessType.INSERT) public AjaxResult<Void> add(@Validated @RequestBody SysConfig config) {
@PostMapping if (UserConstants.NOT_UNIQUE.equals(configService.checkConfigKeyUnique(config))) {
@RepeatSubmit return AjaxResult.error("新增参数'" + config.getConfigName() + "'失败,参数键名已存在");
public AjaxResult add(@Validated @RequestBody SysConfig config) }
{ return toAjax(configService.insertConfig(config));
if (UserConstants.NOT_UNIQUE.equals(configService.checkConfigKeyUnique(config))) }
{
return AjaxResult.error("新增参数'" + config.getConfigName() + "'失败,参数键名已存在"); /**
} * 修改参数配置
config.setCreateBy(SecurityUtils.getUsername()); */
return toAjax(configService.insertConfig(config)); @ApiOperation("修改参数配置")
} @PreAuthorize("@ss.hasPermi('system:config:edit')")
@Log(title = "参数管理", businessType = BusinessType.UPDATE)
/** @PutMapping
* 修改参数配置 public AjaxResult<Void> edit(@Validated @RequestBody SysConfig config) {
*/ if (UserConstants.NOT_UNIQUE.equals(configService.checkConfigKeyUnique(config))) {
@PreAuthorize("@ss.hasPermi('system:config:edit')") return AjaxResult.error("修改参数'" + config.getConfigName() + "'失败,参数键名已存在");
@Log(title = "参数管理", businessType = BusinessType.UPDATE) }
@PutMapping return toAjax(configService.updateConfig(config));
public AjaxResult edit(@Validated @RequestBody SysConfig config) }
{
if (UserConstants.NOT_UNIQUE.equals(configService.checkConfigKeyUnique(config))) /**
{ * 删除参数配置
return AjaxResult.error("修改参数'" + config.getConfigName() + "'失败,参数键名已存在"); */
} @ApiOperation("删除参数配置")
config.setUpdateBy(SecurityUtils.getUsername()); @PreAuthorize("@ss.hasPermi('system:config:remove')")
return toAjax(configService.updateConfig(config)); @Log(title = "参数管理", businessType = BusinessType.DELETE)
} @DeleteMapping("/{configIds}")
public AjaxResult<Void> remove(@ApiParam("参数ID串") @PathVariable Long[] configIds) {
/** configService.deleteConfigByIds(configIds);
* 删除参数配置 return success();
*/ }
@PreAuthorize("@ss.hasPermi('system:config:remove')")
@Log(title = "参数管理", businessType = BusinessType.DELETE) /**
@DeleteMapping("/{configIds}") * 刷新参数缓存
public AjaxResult remove(@PathVariable Long[] configIds) */
{ @ApiOperation("刷新参数缓存")
return toAjax(configService.deleteConfigByIds(configIds)); @PreAuthorize("@ss.hasPermi('system:config:remove')")
} @Log(title = "参数管理", businessType = BusinessType.CLEAN)
@DeleteMapping("/refreshCache")
/** public AjaxResult<Void> refreshCache() {
* 清空缓存 configService.resetConfigCache();
*/ return AjaxResult.success();
@PreAuthorize("@ss.hasPermi('system:config:remove')") }
@Log(title = "参数管理", businessType = BusinessType.CLEAN) }
@DeleteMapping("/clearCache")
public AjaxResult clearCache()
{
configService.clearCache();
return AjaxResult.success();
}
}

View File

@ -1,163 +1,147 @@
package com.ruoyi.web.controller.system; package com.ruoyi.web.controller.system;
import java.util.Iterator; import cn.hutool.core.lang.tree.Tree;
import java.util.List; import cn.hutool.core.util.ArrayUtil;
import org.apache.commons.lang3.ArrayUtils; import com.ruoyi.common.annotation.Log;
import org.springframework.beans.factory.annotation.Autowired; import com.ruoyi.common.constant.UserConstants;
import org.springframework.security.access.prepost.PreAuthorize; import com.ruoyi.common.core.controller.BaseController;
import org.springframework.validation.annotation.Validated; import com.ruoyi.common.core.domain.AjaxResult;
import org.springframework.web.bind.annotation.DeleteMapping; import com.ruoyi.common.core.domain.entity.SysDept;
import org.springframework.web.bind.annotation.GetMapping; import com.ruoyi.common.enums.BusinessType;
import org.springframework.web.bind.annotation.PathVariable; import com.ruoyi.common.utils.StringUtils;
import org.springframework.web.bind.annotation.PostMapping; import com.ruoyi.system.service.ISysDeptService;
import org.springframework.web.bind.annotation.PutMapping; import io.swagger.annotations.Api;
import org.springframework.web.bind.annotation.RequestBody; import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.RequestMapping; import io.swagger.annotations.ApiParam;
import org.springframework.web.bind.annotation.RestController; import lombok.RequiredArgsConstructor;
import com.ruoyi.common.annotation.Log; import org.springframework.beans.factory.annotation.Autowired;
import com.ruoyi.common.constant.UserConstants; import org.springframework.security.access.prepost.PreAuthorize;
import com.ruoyi.common.core.controller.BaseController; import org.springframework.validation.annotation.Validated;
import com.ruoyi.common.core.domain.AjaxResult; import org.springframework.web.bind.annotation.*;
import com.ruoyi.common.core.domain.entity.SysDept;
import com.ruoyi.common.enums.BusinessType; import java.util.HashMap;
import com.ruoyi.common.utils.SecurityUtils; import java.util.List;
import com.ruoyi.common.utils.StringUtils; import java.util.Map;
import com.ruoyi.system.service.ISysDeptService;
/**
/** * 部门信息
* 部门信息 *
* * @author Lion Li
* @author ruoyi */
*/ @Validated
@RestController @Api(value = "部门控制器", tags = {"部门管理"})
@RequestMapping("/system/dept") @RequiredArgsConstructor(onConstructor_ = @Autowired)
public class SysDeptController extends BaseController @RestController
{ @RequestMapping("/system/dept")
@Autowired public class SysDeptController extends BaseController {
private ISysDeptService deptService;
private final ISysDeptService deptService;
/**
* 获取部门列表 /**
*/ * 获取部门列表
@PreAuthorize("@ss.hasPermi('system:dept:list')") */
@GetMapping("/list") @ApiOperation("获取部门列表")
public AjaxResult list(SysDept dept) @PreAuthorize("@ss.hasPermi('system:dept:list')")
{ @GetMapping("/list")
List<SysDept> depts = deptService.selectDeptList(dept); public AjaxResult<List<SysDept>> list(SysDept dept) {
return AjaxResult.success(depts); List<SysDept> depts = deptService.selectDeptList(dept);
} return AjaxResult.success(depts);
}
/**
* 查询部门列表(排除节点) /**
*/ * 查询部门列表(排除节点)
@PreAuthorize("@ss.hasPermi('system:dept:list')") */
@GetMapping("/list/exclude/{deptId}") @ApiOperation("查询部门列表(排除节点)")
public AjaxResult excludeChild(@PathVariable(value = "deptId", required = false) Long deptId) @PreAuthorize("@ss.hasPermi('system:dept:list')")
{ @GetMapping("/list/exclude/{deptId}")
List<SysDept> depts = deptService.selectDeptList(new SysDept()); public AjaxResult<List<SysDept>> excludeChild(@ApiParam("部门ID") @PathVariable(value = "deptId", required = false) Long deptId) {
Iterator<SysDept> it = depts.iterator(); List<SysDept> depts = deptService.selectDeptList(new SysDept());
while (it.hasNext()) depts.removeIf(d -> d.getDeptId().equals(deptId)
{ || ArrayUtil.contains(StringUtils.split(d.getAncestors(), ","), deptId + ""));
SysDept d = (SysDept) it.next(); return AjaxResult.success(depts);
if (d.getDeptId().intValue() == deptId }
|| ArrayUtils.contains(StringUtils.split(d.getAncestors(), ","), deptId + ""))
{ /**
it.remove(); * 根据部门编号获取详细信息
} */
} @ApiOperation("根据部门编号获取详细信息")
return AjaxResult.success(depts); @PreAuthorize("@ss.hasPermi('system:dept:query')")
} @GetMapping(value = "/{deptId}")
public AjaxResult<SysDept> getInfo(@ApiParam("部门ID") @PathVariable Long deptId) {
/** deptService.checkDeptDataScope(deptId);
* 根据部门编号获取详细信息 return AjaxResult.success(deptService.selectDeptById(deptId));
*/ }
@PreAuthorize("@ss.hasPermi('system:dept:query')")
@GetMapping(value = "/{deptId}") /**
public AjaxResult getInfo(@PathVariable Long deptId) * 获取部门下拉树列表
{ */
return AjaxResult.success(deptService.selectDeptById(deptId)); @ApiOperation("获取部门下拉树列表")
} @GetMapping("/treeselect")
public AjaxResult<List<Tree<Long>>> treeselect(SysDept dept) {
/** List<SysDept> depts = deptService.selectDeptList(dept);
* 获取部门下拉树列表 return AjaxResult.success(deptService.buildDeptTreeSelect(depts));
*/ }
@GetMapping("/treeselect")
public AjaxResult treeselect(SysDept dept) /**
{ * 加载对应角色部门列表树
List<SysDept> depts = deptService.selectDeptList(dept); */
return AjaxResult.success(deptService.buildDeptTreeSelect(depts)); @ApiOperation("加载对应角色部门列表树")
} @GetMapping(value = "/roleDeptTreeselect/{roleId}")
public AjaxResult<Map<String, Object>> roleDeptTreeselect(@ApiParam("角色ID") @PathVariable("roleId") Long roleId) {
/** List<SysDept> depts = deptService.selectDeptList(new SysDept());
* 加载对应角色部门列表树 Map<String, Object> ajax = new HashMap<>();
*/ ajax.put("checkedKeys", deptService.selectDeptListByRoleId(roleId));
@GetMapping(value = "/roleDeptTreeselect/{roleId}") ajax.put("depts", deptService.buildDeptTreeSelect(depts));
public AjaxResult roleDeptTreeselect(@PathVariable("roleId") Long roleId) return AjaxResult.success(ajax);
{ }
List<SysDept> depts = deptService.selectDeptList(new SysDept());
AjaxResult ajax = AjaxResult.success(); /**
ajax.put("checkedKeys", deptService.selectDeptListByRoleId(roleId)); * 新增部门
ajax.put("depts", deptService.buildDeptTreeSelect(depts)); */
return ajax; @ApiOperation("新增部门")
} @PreAuthorize("@ss.hasPermi('system:dept:add')")
@Log(title = "部门管理", businessType = BusinessType.INSERT)
/** @PostMapping
* 新增部门 public AjaxResult<Void> add(@Validated @RequestBody SysDept dept) {
*/ if (UserConstants.NOT_UNIQUE.equals(deptService.checkDeptNameUnique(dept))) {
@PreAuthorize("@ss.hasPermi('system:dept:add')") return AjaxResult.error("新增部门'" + dept.getDeptName() + "'失败,部门名称已存在");
@Log(title = "部门管理", businessType = BusinessType.INSERT) }
@PostMapping return toAjax(deptService.insertDept(dept));
public AjaxResult add(@Validated @RequestBody SysDept dept) }
{
if (UserConstants.NOT_UNIQUE.equals(deptService.checkDeptNameUnique(dept))) /**
{ * 修改部门
return AjaxResult.error("新增部门'" + dept.getDeptName() + "'失败,部门名称已存在"); */
} @ApiOperation("修改部门")
dept.setCreateBy(SecurityUtils.getUsername()); @PreAuthorize("@ss.hasPermi('system:dept:edit')")
return toAjax(deptService.insertDept(dept)); @Log(title = "部门管理", businessType = BusinessType.UPDATE)
} @PutMapping
public AjaxResult<Void> edit(@Validated @RequestBody SysDept dept) {
/** if (UserConstants.NOT_UNIQUE.equals(deptService.checkDeptNameUnique(dept))) {
* 修改部门 return AjaxResult.error("修改部门'" + dept.getDeptName() + "'失败,部门名称已存在");
*/ } else if (dept.getParentId().equals(dept.getDeptId())) {
@PreAuthorize("@ss.hasPermi('system:dept:edit')") return AjaxResult.error("修改部门'" + dept.getDeptName() + "'失败,上级部门不能是自己");
@Log(title = "部门管理", businessType = BusinessType.UPDATE) } else if (StringUtils.equals(UserConstants.DEPT_DISABLE, dept.getStatus())
@PutMapping && deptService.selectNormalChildrenDeptById(dept.getDeptId()) > 0) {
public AjaxResult edit(@Validated @RequestBody SysDept dept) return AjaxResult.error("该部门包含未停用的子部门!");
{ }
if (UserConstants.NOT_UNIQUE.equals(deptService.checkDeptNameUnique(dept))) return toAjax(deptService.updateDept(dept));
{ }
return AjaxResult.error("修改部门'" + dept.getDeptName() + "'失败,部门名称已存在");
} /**
else if (dept.getParentId().equals(dept.getDeptId())) * 删除部门
{ */
return AjaxResult.error("修改部门'" + dept.getDeptName() + "'失败,上级部门不能是自己"); @ApiOperation("删除部门")
} @PreAuthorize("@ss.hasPermi('system:dept:remove')")
else if (StringUtils.equals(UserConstants.DEPT_DISABLE, dept.getStatus()) @Log(title = "部门管理", businessType = BusinessType.DELETE)
&& deptService.selectNormalChildrenDeptById(dept.getDeptId()) > 0) @DeleteMapping("/{deptId}")
{ public AjaxResult<Void> remove(@ApiParam("部门ID串") @PathVariable Long deptId) {
return AjaxResult.error("该部门包含未停用的子部门!"); if (deptService.hasChildByDeptId(deptId)) {
} return AjaxResult.error("存在下级部门,不允许删除");
dept.setUpdateBy(SecurityUtils.getUsername()); }
return toAjax(deptService.updateDept(dept)); if (deptService.checkDeptExistUser(deptId)) {
} return AjaxResult.error("部门存在用户,不允许删除");
}
/** return toAjax(deptService.deleteDeptById(deptId));
* 删除部门 }
*/ }
@PreAuthorize("@ss.hasPermi('system:dept:remove')")
@Log(title = "部门管理", businessType = BusinessType.DELETE)
@DeleteMapping("/{deptId}")
public AjaxResult remove(@PathVariable Long deptId)
{
if (deptService.hasChildByDeptId(deptId))
{
return AjaxResult.error("存在下级部门,不允许删除");
}
if (deptService.checkDeptExistUser(deptId))
{
return AjaxResult.error("部门存在用户,不允许删除");
}
return toAjax(deptService.deleteDeptById(deptId));
}
}

View File

@ -1,120 +1,114 @@
package com.ruoyi.web.controller.system; package com.ruoyi.web.controller.system;
import java.util.ArrayList; import com.ruoyi.common.annotation.Log;
import java.util.List; import com.ruoyi.common.core.controller.BaseController;
import org.springframework.beans.factory.annotation.Autowired; import com.ruoyi.common.core.domain.AjaxResult;
import org.springframework.security.access.prepost.PreAuthorize; import com.ruoyi.common.core.domain.PageQuery;
import org.springframework.validation.annotation.Validated; import com.ruoyi.common.core.domain.entity.SysDictData;
import org.springframework.web.bind.annotation.DeleteMapping; import com.ruoyi.common.core.page.TableDataInfo;
import org.springframework.web.bind.annotation.GetMapping; import com.ruoyi.common.enums.BusinessType;
import org.springframework.web.bind.annotation.PathVariable; import com.ruoyi.common.utils.StringUtils;
import org.springframework.web.bind.annotation.PostMapping; import com.ruoyi.common.utils.poi.ExcelUtil;
import org.springframework.web.bind.annotation.PutMapping; import com.ruoyi.system.service.ISysDictDataService;
import org.springframework.web.bind.annotation.RequestBody; import com.ruoyi.system.service.ISysDictTypeService;
import org.springframework.web.bind.annotation.RequestMapping; import io.swagger.annotations.Api;
import org.springframework.web.bind.annotation.RestController; import io.swagger.annotations.ApiOperation;
import com.ruoyi.common.annotation.Log; import io.swagger.annotations.ApiParam;
import com.ruoyi.common.core.controller.BaseController; import lombok.RequiredArgsConstructor;
import com.ruoyi.common.core.domain.AjaxResult; import org.springframework.beans.factory.annotation.Autowired;
import com.ruoyi.common.core.domain.entity.SysDictData; import org.springframework.security.access.prepost.PreAuthorize;
import com.ruoyi.common.core.page.TableDataInfo; import org.springframework.validation.annotation.Validated;
import com.ruoyi.common.enums.BusinessType; import org.springframework.web.bind.annotation.*;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.StringUtils; import javax.servlet.http.HttpServletResponse;
import com.ruoyi.common.utils.poi.ExcelUtil; import java.util.ArrayList;
import com.ruoyi.system.service.ISysDictDataService; import java.util.List;
import com.ruoyi.system.service.ISysDictTypeService;
/**
/** * 数据字典信息
* 数据字典信息 *
* * @author Lion Li
* @author ruoyi */
*/ @Validated
@RestController @Api(value = "数据字典信息控制器", tags = {"数据字典信息管理"})
@RequestMapping("/system/dict/data") @RequiredArgsConstructor(onConstructor_ = @Autowired)
public class SysDictDataController extends BaseController @RestController
{ @RequestMapping("/system/dict/data")
@Autowired public class SysDictDataController extends BaseController {
private ISysDictDataService dictDataService;
private final ISysDictDataService dictDataService;
@Autowired private final ISysDictTypeService dictTypeService;
private ISysDictTypeService dictTypeService;
@ApiOperation("查询字典数据列表")
@PreAuthorize("@ss.hasPermi('system:dict:list')") @PreAuthorize("@ss.hasPermi('system:dict:list')")
@GetMapping("/list") @GetMapping("/list")
public TableDataInfo list(SysDictData dictData) public TableDataInfo<SysDictData> list(SysDictData dictData, PageQuery pageQuery) {
{ return dictDataService.selectPageDictDataList(dictData, pageQuery);
startPage(); }
List<SysDictData> list = dictDataService.selectDictDataList(dictData);
return getDataTable(list); @ApiOperation("导出字典数据列表")
} @Log(title = "字典数据", businessType = BusinessType.EXPORT)
@PreAuthorize("@ss.hasPermi('system:dict:export')")
@Log(title = "字典数据", businessType = BusinessType.EXPORT) @PostMapping("/export")
@PreAuthorize("@ss.hasPermi('system:dict:export')") public void export(SysDictData dictData, HttpServletResponse response) {
@GetMapping("/export") List<SysDictData> list = dictDataService.selectDictDataList(dictData);
public AjaxResult export(SysDictData dictData) ExcelUtil.exportExcel(list, "字典数据", SysDictData.class, response);
{ }
List<SysDictData> list = dictDataService.selectDictDataList(dictData);
ExcelUtil<SysDictData> util = new ExcelUtil<SysDictData>(SysDictData.class); /**
return util.exportExcel(list, "字典数据"); * 查询字典数据详细
} */
@ApiOperation("查询字典数据详细")
/** @PreAuthorize("@ss.hasPermi('system:dict:query')")
* 查询字典数据详细 @GetMapping(value = "/{dictCode}")
*/ public AjaxResult<SysDictData> getInfo(@ApiParam("字典code") @PathVariable Long dictCode) {
@PreAuthorize("@ss.hasPermi('system:dict:query')") return AjaxResult.success(dictDataService.selectDictDataById(dictCode));
@GetMapping(value = "/{dictCode}") }
public AjaxResult getInfo(@PathVariable Long dictCode)
{ /**
return AjaxResult.success(dictDataService.selectDictDataById(dictCode)); * 根据字典类型查询字典数据信息
} */
@ApiOperation("根据字典类型查询字典数据信息")
/** @GetMapping(value = "/type/{dictType}")
* 根据字典类型查询字典数据信息 public AjaxResult<List<SysDictData>> dictType(@ApiParam("字典类型") @PathVariable String dictType) {
*/ List<SysDictData> data = dictTypeService.selectDictDataByType(dictType);
@GetMapping(value = "/type/{dictType}") if (StringUtils.isNull(data)) {
public AjaxResult dictType(@PathVariable String dictType) data = new ArrayList<>();
{ }
List<SysDictData> data = dictTypeService.selectDictDataByType(dictType); return AjaxResult.success(data);
if (StringUtils.isNull(data)) }
{
data = new ArrayList<SysDictData>(); /**
} * 新增字典类型
return AjaxResult.success(data); */
} @ApiOperation("新增字典类型")
@PreAuthorize("@ss.hasPermi('system:dict:add')")
/** @Log(title = "字典数据", businessType = BusinessType.INSERT)
* 新增字典类型 @PostMapping
*/ public AjaxResult<Void> add(@Validated @RequestBody SysDictData dict) {
@PreAuthorize("@ss.hasPermi('system:dict:add')") return toAjax(dictDataService.insertDictData(dict));
@Log(title = "字典数据", businessType = BusinessType.INSERT) }
@PostMapping
public AjaxResult add(@Validated @RequestBody SysDictData dict) /**
{ * 修改保存字典类型
dict.setCreateBy(SecurityUtils.getUsername()); */
return toAjax(dictDataService.insertDictData(dict)); @ApiOperation("修改保存字典类型")
} @PreAuthorize("@ss.hasPermi('system:dict:edit')")
@Log(title = "字典数据", businessType = BusinessType.UPDATE)
/** @PutMapping
* 修改保存字典类型 public AjaxResult<Void> edit(@Validated @RequestBody SysDictData dict) {
*/ return toAjax(dictDataService.updateDictData(dict));
@PreAuthorize("@ss.hasPermi('system:dict:edit')") }
@Log(title = "字典数据", businessType = BusinessType.UPDATE)
@PutMapping /**
public AjaxResult edit(@Validated @RequestBody SysDictData dict) * 删除字典类型
{ */
dict.setUpdateBy(SecurityUtils.getUsername()); @ApiOperation("删除字典类型")
return toAjax(dictDataService.updateDictData(dict)); @PreAuthorize("@ss.hasPermi('system:dict:remove')")
} @Log(title = "字典类型", businessType = BusinessType.DELETE)
@DeleteMapping("/{dictCodes}")
/** public AjaxResult<Void> remove(@ApiParam("字典code串") @PathVariable Long[] dictCodes) {
* 删除字典类型 dictDataService.deleteDictDataByIds(dictCodes);
*/ return success();
@PreAuthorize("@ss.hasPermi('system:dict:remove')") }
@Log(title = "字典类型", businessType = BusinessType.DELETE) }
@DeleteMapping("/{dictCodes}")
public AjaxResult remove(@PathVariable Long[] dictCodes)
{
return toAjax(dictDataService.deleteDictDataByIds(dictCodes));
}
}

View File

@ -1,131 +1,126 @@
package com.ruoyi.web.controller.system; package com.ruoyi.web.controller.system;
import java.util.List; import com.ruoyi.common.annotation.Log;
import org.springframework.beans.factory.annotation.Autowired; import com.ruoyi.common.constant.UserConstants;
import org.springframework.security.access.prepost.PreAuthorize; import com.ruoyi.common.core.controller.BaseController;
import org.springframework.validation.annotation.Validated; import com.ruoyi.common.core.domain.AjaxResult;
import org.springframework.web.bind.annotation.DeleteMapping; import com.ruoyi.common.core.domain.PageQuery;
import org.springframework.web.bind.annotation.GetMapping; import com.ruoyi.common.core.domain.entity.SysDictType;
import org.springframework.web.bind.annotation.PathVariable; import com.ruoyi.common.core.page.TableDataInfo;
import org.springframework.web.bind.annotation.PostMapping; import com.ruoyi.common.enums.BusinessType;
import org.springframework.web.bind.annotation.PutMapping; import com.ruoyi.common.utils.poi.ExcelUtil;
import org.springframework.web.bind.annotation.RequestBody; import com.ruoyi.system.service.ISysDictTypeService;
import org.springframework.web.bind.annotation.RequestMapping; import io.swagger.annotations.Api;
import org.springframework.web.bind.annotation.RestController; import io.swagger.annotations.ApiOperation;
import com.ruoyi.common.annotation.Log; import io.swagger.annotations.ApiParam;
import com.ruoyi.common.constant.UserConstants; import lombok.RequiredArgsConstructor;
import com.ruoyi.common.core.controller.BaseController; import org.springframework.beans.factory.annotation.Autowired;
import com.ruoyi.common.core.domain.AjaxResult; import org.springframework.security.access.prepost.PreAuthorize;
import com.ruoyi.common.core.domain.entity.SysDictType; import org.springframework.validation.annotation.Validated;
import com.ruoyi.common.core.page.TableDataInfo; import org.springframework.web.bind.annotation.*;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.SecurityUtils; import javax.servlet.http.HttpServletResponse;
import com.ruoyi.common.utils.poi.ExcelUtil; import java.util.List;
import com.ruoyi.system.service.ISysDictTypeService;
/**
/** * 数据字典信息
* 数据字典信息 *
* * @author Lion Li
* @author ruoyi */
*/ @Validated
@RestController @Api(value = "数据字典信息控制器", tags = {"数据字典信息管理"})
@RequestMapping("/system/dict/type") @RequiredArgsConstructor(onConstructor_ = @Autowired)
public class SysDictTypeController extends BaseController @RestController
{ @RequestMapping("/system/dict/type")
@Autowired public class SysDictTypeController extends BaseController {
private ISysDictTypeService dictTypeService;
private final ISysDictTypeService dictTypeService;
@PreAuthorize("@ss.hasPermi('system:dict:list')")
@GetMapping("/list") @ApiOperation("查询字典类型列表")
public TableDataInfo list(SysDictType dictType) @PreAuthorize("@ss.hasPermi('system:dict:list')")
{ @GetMapping("/list")
startPage(); public TableDataInfo<SysDictType> list(SysDictType dictType, PageQuery pageQuery) {
List<SysDictType> list = dictTypeService.selectDictTypeList(dictType); return dictTypeService.selectPageDictTypeList(dictType, pageQuery);
return getDataTable(list); }
}
@ApiOperation("导出字典类型列表")
@Log(title = "字典类型", businessType = BusinessType.EXPORT) @Log(title = "字典类型", businessType = BusinessType.EXPORT)
@PreAuthorize("@ss.hasPermi('system:dict:export')") @PreAuthorize("@ss.hasPermi('system:dict:export')")
@GetMapping("/export") @PostMapping("/export")
public AjaxResult export(SysDictType dictType) public void export(SysDictType dictType, HttpServletResponse response) {
{ List<SysDictType> list = dictTypeService.selectDictTypeList(dictType);
List<SysDictType> list = dictTypeService.selectDictTypeList(dictType); ExcelUtil.exportExcel(list, "字典类型", SysDictType.class, response);
ExcelUtil<SysDictType> util = new ExcelUtil<SysDictType>(SysDictType.class); }
return util.exportExcel(list, "字典类型");
} /**
* 查询字典类型详细
/** */
* 查询字典类型详细 @ApiOperation("查询字典类型详细")
*/ @PreAuthorize("@ss.hasPermi('system:dict:query')")
@PreAuthorize("@ss.hasPermi('system:dict:query')") @GetMapping(value = "/{dictId}")
@GetMapping(value = "/{dictId}") public AjaxResult<SysDictType> getInfo(@ApiParam("字典ID") @PathVariable Long dictId) {
public AjaxResult getInfo(@PathVariable Long dictId) return AjaxResult.success(dictTypeService.selectDictTypeById(dictId));
{ }
return AjaxResult.success(dictTypeService.selectDictTypeById(dictId));
} /**
* 新增字典类型
/** */
* 新增字典类型 @ApiOperation("新增字典类型")
*/ @PreAuthorize("@ss.hasPermi('system:dict:add')")
@PreAuthorize("@ss.hasPermi('system:dict:add')") @Log(title = "字典类型", businessType = BusinessType.INSERT)
@Log(title = "字典类型", businessType = BusinessType.INSERT) @PostMapping
@PostMapping public AjaxResult<Void> add(@Validated @RequestBody SysDictType dict) {
public AjaxResult add(@Validated @RequestBody SysDictType dict) if (UserConstants.NOT_UNIQUE.equals(dictTypeService.checkDictTypeUnique(dict))) {
{ return AjaxResult.error("新增字典'" + dict.getDictName() + "'失败,字典类型已存在");
if (UserConstants.NOT_UNIQUE.equals(dictTypeService.checkDictTypeUnique(dict))) }
{ return toAjax(dictTypeService.insertDictType(dict));
return AjaxResult.error("新增字典'" + dict.getDictName() + "'失败,字典类型已存在"); }
}
dict.setCreateBy(SecurityUtils.getUsername()); /**
return toAjax(dictTypeService.insertDictType(dict)); * 修改字典类型
} */
@ApiOperation("修改字典类型")
/** @PreAuthorize("@ss.hasPermi('system:dict:edit')")
* 修改字典类型 @Log(title = "字典类型", businessType = BusinessType.UPDATE)
*/ @PutMapping
@PreAuthorize("@ss.hasPermi('system:dict:edit')") public AjaxResult<Void> edit(@Validated @RequestBody SysDictType dict) {
@Log(title = "字典类型", businessType = BusinessType.UPDATE) if (UserConstants.NOT_UNIQUE.equals(dictTypeService.checkDictTypeUnique(dict))) {
@PutMapping return AjaxResult.error("修改字典'" + dict.getDictName() + "'失败,字典类型已存在");
public AjaxResult edit(@Validated @RequestBody SysDictType dict) }
{ return toAjax(dictTypeService.updateDictType(dict));
if (UserConstants.NOT_UNIQUE.equals(dictTypeService.checkDictTypeUnique(dict))) }
{
return AjaxResult.error("修改字典'" + dict.getDictName() + "'失败,字典类型已存在"); /**
} * 删除字典类型
dict.setUpdateBy(SecurityUtils.getUsername()); */
return toAjax(dictTypeService.updateDictType(dict)); @ApiOperation("删除字典类型")
} @PreAuthorize("@ss.hasPermi('system:dict:remove')")
@Log(title = "字典类型", businessType = BusinessType.DELETE)
/** @DeleteMapping("/{dictIds}")
* 删除字典类型 public AjaxResult<Void> remove(@ApiParam("字典ID串") @PathVariable Long[] dictIds) {
*/ dictTypeService.deleteDictTypeByIds(dictIds);
@PreAuthorize("@ss.hasPermi('system:dict:remove')") return success();
@Log(title = "字典类型", businessType = BusinessType.DELETE) }
@DeleteMapping("/{dictIds}")
public AjaxResult remove(@PathVariable Long[] dictIds) /**
{ * 刷新字典缓存
return toAjax(dictTypeService.deleteDictTypeByIds(dictIds)); */
} @ApiOperation("刷新字典缓存")
@PreAuthorize("@ss.hasPermi('system:dict:remove')")
/** @Log(title = "字典类型", businessType = BusinessType.CLEAN)
* 清空缓存 @DeleteMapping("/refreshCache")
*/ public AjaxResult<Void> refreshCache() {
@PreAuthorize("@ss.hasPermi('system:dict:remove')") dictTypeService.resetDictCache();
@Log(title = "字典类型", businessType = BusinessType.CLEAN) return AjaxResult.success();
@DeleteMapping("/clearCache") }
public AjaxResult clearCache()
{ /**
dictTypeService.clearCache(); * 获取字典选择框列表
return AjaxResult.success(); */
} @ApiOperation("获取字典选择框列表")
@GetMapping("/optionselect")
/** public AjaxResult<List<SysDictType>> optionselect() {
* 获取字典选择框列表 List<SysDictType> dictTypes = dictTypeService.selectDictTypeAll();
*/ return AjaxResult.success(dictTypes);
@GetMapping("/optionselect") }
public AjaxResult optionselect() }
{
List<SysDictType> dictTypes = dictTypeService.selectDictTypeAll();
return AjaxResult.success(dictTypes);
}
}

View File

@ -0,0 +1,35 @@
package com.ruoyi.web.controller.system;
import com.ruoyi.common.config.RuoYiConfig;
import com.ruoyi.common.utils.StringUtils;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* 首页
*
* @author Lion Li
*/
@Api(value = "首页控制器", tags = {"首页管理"})
@RequiredArgsConstructor(onConstructor_ = @Autowired)
@RestController
public class SysIndexController {
/**
* 系统基础配置
*/
private final RuoYiConfig ruoyiConfig;
/**
* 访问首页,提示语
*/
@ApiOperation("访问首页,提示语")
@GetMapping("/")
public String index() {
return StringUtils.format("欢迎使用{}后台管理框架当前版本v{},请通过前端地址访问。", ruoyiConfig.getName(), ruoyiConfig.getVersion());
}
}

View File

@ -1,94 +1,94 @@
package com.ruoyi.web.controller.system; package com.ruoyi.web.controller.system;
import java.util.List; import com.ruoyi.common.constant.Constants;
import java.util.Set; import com.ruoyi.common.core.domain.AjaxResult;
import org.springframework.beans.factory.annotation.Autowired; import com.ruoyi.common.core.domain.entity.SysMenu;
import org.springframework.web.bind.annotation.GetMapping; import com.ruoyi.common.core.domain.entity.SysUser;
import org.springframework.web.bind.annotation.PostMapping; import com.ruoyi.common.core.domain.model.LoginBody;
import org.springframework.web.bind.annotation.RequestBody; import com.ruoyi.common.utils.SecurityUtils;
import org.springframework.web.bind.annotation.RestController; import com.ruoyi.system.domain.vo.RouterVo;
import com.ruoyi.common.constant.Constants; import com.ruoyi.system.service.ISysMenuService;
import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.system.service.ISysUserService;
import com.ruoyi.common.core.domain.entity.SysMenu; import com.ruoyi.system.service.SysLoginService;
import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.system.service.SysPermissionService;
import com.ruoyi.common.core.domain.model.LoginBody; import io.swagger.annotations.Api;
import com.ruoyi.common.core.domain.model.LoginUser; import io.swagger.annotations.ApiOperation;
import com.ruoyi.common.utils.ServletUtils; import lombok.RequiredArgsConstructor;
import com.ruoyi.framework.web.service.SysLoginService; import org.springframework.beans.factory.annotation.Autowired;
import com.ruoyi.framework.web.service.SysPermissionService; import org.springframework.validation.annotation.Validated;
import com.ruoyi.framework.web.service.TokenService; import org.springframework.web.bind.annotation.GetMapping;
import com.ruoyi.system.service.ISysMenuService; import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
/** import org.springframework.web.bind.annotation.RestController;
* 登录验证
* import java.util.HashMap;
* @author ruoyi import java.util.List;
*/ import java.util.Map;
@RestController import java.util.Set;
public class SysLoginController
{ /**
@Autowired * 登录验证
private SysLoginService loginService; *
* @author Lion Li
@Autowired */
private ISysMenuService menuService; @Validated
@Api(value = "登录验证控制器", tags = {"登录验证管理"})
@Autowired @RequiredArgsConstructor(onConstructor_ = @Autowired)
private SysPermissionService permissionService; @RestController
public class SysLoginController {
@Autowired
private TokenService tokenService; private final SysLoginService loginService;
private final ISysMenuService menuService;
/** private final ISysUserService userService;
* 登录方法 private final SysPermissionService permissionService;
*
* @param loginBody 登录信息 /**
* @return 结果 * 登录方法
*/ *
@PostMapping("/login") * @param loginBody 登录信息
public AjaxResult login(@RequestBody LoginBody loginBody) * @return 结果
{ */
AjaxResult ajax = AjaxResult.success(); @ApiOperation("登录方法")
// 生成令牌 @PostMapping("/login")
String token = loginService.login(loginBody.getUsername(), loginBody.getPassword(), loginBody.getCode(), public AjaxResult<Map<String, Object>> login(@RequestBody LoginBody loginBody) {
loginBody.getUuid()); Map<String, Object> ajax = new HashMap<>();
ajax.put(Constants.TOKEN, token); // 生成令牌
return ajax; String token = loginService.login(loginBody.getUsername(), loginBody.getPassword(), loginBody.getCode(),
} loginBody.getUuid());
ajax.put(Constants.TOKEN, token);
/** return AjaxResult.success(ajax);
* 获取用户信息 }
*
* @return 用户信息 /**
*/ * 获取用户信息
@GetMapping("getInfo") *
public AjaxResult getInfo() * @return 用户信息
{ */
LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest()); @ApiOperation("获取用户信息")
SysUser user = loginUser.getUser(); @GetMapping("getInfo")
// 角色集合 public AjaxResult<Map<String, Object>> getInfo() {
Set<String> roles = permissionService.getRolePermission(user); SysUser user = userService.selectUserById(SecurityUtils.getUserId());
// 权限集合 // 角色集合
Set<String> permissions = permissionService.getMenuPermission(user); Set<String> roles = permissionService.getRolePermission(user);
AjaxResult ajax = AjaxResult.success(); // 权限集合
ajax.put("user", user); Set<String> permissions = permissionService.getMenuPermission(user);
ajax.put("roles", roles); Map<String, Object> ajax = new HashMap<>();
ajax.put("permissions", permissions); ajax.put("user", user);
return ajax; ajax.put("roles", roles);
} ajax.put("permissions", permissions);
return AjaxResult.success(ajax);
/** }
* 获取路由信息
* /**
* @return 路由信息 * 获取路由信息
*/ *
@GetMapping("getRouters") * @return 路由信息
public AjaxResult getRouters() */
{ @ApiOperation("获取路由信息")
LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest()); @GetMapping("getRouters")
// 用户信息 public AjaxResult<List<RouterVo>> getRouters() {
SysUser user = loginUser.getUser(); Long userId = SecurityUtils.getUserId();
List<SysMenu> menus = menuService.selectMenuTreeByUserId(user.getUserId()); List<SysMenu> menus = menuService.selectMenuTreeByUserId(userId);
return AjaxResult.success(menuService.buildMenus(menus)); return AjaxResult.success(menuService.buildMenus(menus));
} }
} }

View File

@ -1,157 +1,133 @@
package com.ruoyi.web.controller.system; package com.ruoyi.web.controller.system;
import java.util.List; import cn.hutool.core.lang.tree.Tree;
import org.springframework.beans.factory.annotation.Autowired; import com.ruoyi.common.annotation.Log;
import org.springframework.security.access.prepost.PreAuthorize; import com.ruoyi.common.constant.UserConstants;
import org.springframework.validation.annotation.Validated; import com.ruoyi.common.core.controller.BaseController;
import org.springframework.web.bind.annotation.DeleteMapping; import com.ruoyi.common.core.domain.AjaxResult;
import org.springframework.web.bind.annotation.GetMapping; import com.ruoyi.common.core.domain.entity.SysMenu;
import org.springframework.web.bind.annotation.PathVariable; import com.ruoyi.common.enums.BusinessType;
import org.springframework.web.bind.annotation.PostMapping; import com.ruoyi.common.utils.StringUtils;
import org.springframework.web.bind.annotation.PutMapping; import com.ruoyi.system.service.ISysMenuService;
import org.springframework.web.bind.annotation.RequestBody; import io.swagger.annotations.Api;
import org.springframework.web.bind.annotation.RequestMapping; import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.RestController; import io.swagger.annotations.ApiParam;
import com.ruoyi.common.annotation.Log; import lombok.RequiredArgsConstructor;
import com.ruoyi.common.constant.Constants; import org.springframework.beans.factory.annotation.Autowired;
import com.ruoyi.common.constant.UserConstants; import org.springframework.security.access.prepost.PreAuthorize;
import com.ruoyi.common.core.controller.BaseController; import org.springframework.validation.annotation.Validated;
import com.ruoyi.common.core.domain.AjaxResult; import org.springframework.web.bind.annotation.*;
import com.ruoyi.common.core.domain.entity.SysMenu;
import com.ruoyi.common.core.domain.model.LoginUser; import java.util.HashMap;
import com.ruoyi.common.enums.BusinessType; import java.util.List;
import com.ruoyi.common.utils.SecurityUtils; import java.util.Map;
import com.ruoyi.common.utils.ServletUtils;
import com.ruoyi.common.utils.StringUtils; /**
import com.ruoyi.framework.web.service.TokenService; * 菜单信息
import com.ruoyi.system.service.ISysMenuService; *
* @author Lion Li
/** */
* 菜单信息 @Validated
* @Api(value = "菜单信息控制器", tags = {"菜单信息管理"})
* @author ruoyi @RequiredArgsConstructor(onConstructor_ = @Autowired)
*/ @RestController
@RestController @RequestMapping("/system/menu")
@RequestMapping("/system/menu") public class SysMenuController extends BaseController {
public class SysMenuController extends BaseController
{ private final ISysMenuService menuService;
@Autowired
private ISysMenuService menuService; /**
* 获取菜单列表
@Autowired */
private TokenService tokenService; @ApiOperation("获取菜单列表")
@PreAuthorize("@ss.hasPermi('system:menu:list')")
/** @GetMapping("/list")
* 获取菜单列表 public AjaxResult<List<SysMenu>> list(SysMenu menu) {
*/ List<SysMenu> menus = menuService.selectMenuList(menu, getUserId());
@PreAuthorize("@ss.hasPermi('system:menu:list')") return AjaxResult.success(menus);
@GetMapping("/list") }
public AjaxResult list(SysMenu menu)
{ /**
LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest()); * 根据菜单编号获取详细信息
Long userId = loginUser.getUser().getUserId(); */
List<SysMenu> menus = menuService.selectMenuList(menu, userId); @ApiOperation("根据菜单编号获取详细信息")
return AjaxResult.success(menus); @PreAuthorize("@ss.hasPermi('system:menu:query')")
} @GetMapping(value = "/{menuId}")
public AjaxResult<SysMenu> getInfo(@ApiParam("菜单ID") @PathVariable Long menuId) {
/** return AjaxResult.success(menuService.selectMenuById(menuId));
* 根据菜单编号获取详细信息 }
*/
@PreAuthorize("@ss.hasPermi('system:menu:query')") /**
@GetMapping(value = "/{menuId}") * 获取菜单下拉树列表
public AjaxResult getInfo(@PathVariable Long menuId) */
{ @ApiOperation("获取菜单下拉树列表")
return AjaxResult.success(menuService.selectMenuById(menuId)); @GetMapping("/treeselect")
} public AjaxResult<List<Tree<Long>>> treeselect(SysMenu menu) {
List<SysMenu> menus = menuService.selectMenuList(menu, getUserId());
/** return AjaxResult.success(menuService.buildMenuTreeSelect(menus));
* 获取菜单下拉树列表 }
*/
@GetMapping("/treeselect") /**
public AjaxResult treeselect(SysMenu menu) * 加载对应角色菜单列表树
{ */
LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest()); @ApiOperation("加载对应角色菜单列表树")
Long userId = loginUser.getUser().getUserId(); @GetMapping(value = "/roleMenuTreeselect/{roleId}")
List<SysMenu> menus = menuService.selectMenuList(menu, userId); public AjaxResult<Map<String, Object>> roleMenuTreeselect(@ApiParam("角色ID") @PathVariable("roleId") Long roleId) {
return AjaxResult.success(menuService.buildMenuTreeSelect(menus)); List<SysMenu> menus = menuService.selectMenuList(getUserId());
} Map<String, Object> ajax = new HashMap<>();
ajax.put("checkedKeys", menuService.selectMenuListByRoleId(roleId));
/** ajax.put("menus", menuService.buildMenuTreeSelect(menus));
* 加载对应角色菜单列表树 return AjaxResult.success(ajax);
*/ }
@GetMapping(value = "/roleMenuTreeselect/{roleId}")
public AjaxResult roleMenuTreeselect(@PathVariable("roleId") Long roleId) /**
{ * 新增菜单
LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest()); */
List<SysMenu> menus = menuService.selectMenuList(loginUser.getUser().getUserId()); @ApiOperation("新增菜单")
AjaxResult ajax = AjaxResult.success(); @PreAuthorize("@ss.hasPermi('system:menu:add')")
ajax.put("checkedKeys", menuService.selectMenuListByRoleId(roleId)); @Log(title = "菜单管理", businessType = BusinessType.INSERT)
ajax.put("menus", menuService.buildMenuTreeSelect(menus)); @PostMapping
return ajax; public AjaxResult<Void> add(@Validated @RequestBody SysMenu menu) {
} if (UserConstants.NOT_UNIQUE.equals(menuService.checkMenuNameUnique(menu))) {
return AjaxResult.error("新增菜单'" + menu.getMenuName() + "'失败,菜单名称已存在");
/** } else if (UserConstants.YES_FRAME.equals(menu.getIsFrame()) && !StringUtils.ishttp(menu.getPath())) {
* 新增菜单 return AjaxResult.error("新增菜单'" + menu.getMenuName() + "'失败地址必须以http(s)://开头");
*/ }
@PreAuthorize("@ss.hasPermi('system:menu:add')") return toAjax(menuService.insertMenu(menu));
@Log(title = "菜单管理", businessType = BusinessType.INSERT) }
@PostMapping
public AjaxResult add(@Validated @RequestBody SysMenu menu) /**
{ * 修改菜单
if (UserConstants.NOT_UNIQUE.equals(menuService.checkMenuNameUnique(menu))) */
{ @ApiOperation("修改菜单")
return AjaxResult.error("新增菜单'" + menu.getMenuName() + "'失败,菜单名称已存在"); @PreAuthorize("@ss.hasPermi('system:menu:edit')")
} @Log(title = "菜单管理", businessType = BusinessType.UPDATE)
else if (UserConstants.YES_FRAME.equals(menu.getIsFrame()) @PutMapping
&& !StringUtils.startsWithAny(menu.getPath(), Constants.HTTP, Constants.HTTPS)) public AjaxResult<Void> edit(@Validated @RequestBody SysMenu menu) {
{ if (UserConstants.NOT_UNIQUE.equals(menuService.checkMenuNameUnique(menu))) {
return AjaxResult.error("新增菜单'" + menu.getMenuName() + "'失败,地址必须以http(s)://开头"); return AjaxResult.error("修改菜单'" + menu.getMenuName() + "'失败,菜单名称已存在");
} } else if (UserConstants.YES_FRAME.equals(menu.getIsFrame()) && !StringUtils.ishttp(menu.getPath())) {
menu.setCreateBy(SecurityUtils.getUsername()); return AjaxResult.error("修改菜单'" + menu.getMenuName() + "'失败地址必须以http(s)://开头");
return toAjax(menuService.insertMenu(menu)); } else if (menu.getMenuId().equals(menu.getParentId())) {
} return AjaxResult.error("修改菜单'" + menu.getMenuName() + "'失败,上级菜单不能选择自己");
}
/** return toAjax(menuService.updateMenu(menu));
* 修改菜单 }
*/
@PreAuthorize("@ss.hasPermi('system:menu:edit')") /**
@Log(title = "菜单管理", businessType = BusinessType.UPDATE) * 删除菜单
@PutMapping */
public AjaxResult edit(@Validated @RequestBody SysMenu menu) @ApiOperation("删除菜单")
{ @PreAuthorize("@ss.hasPermi('system:menu:remove')")
if (UserConstants.NOT_UNIQUE.equals(menuService.checkMenuNameUnique(menu))) @Log(title = "菜单管理", businessType = BusinessType.DELETE)
{ @DeleteMapping("/{menuId}")
return AjaxResult.error("修改菜单'" + menu.getMenuName() + "'失败,菜单名称已存在"); public AjaxResult<Void> remove(@ApiParam("菜单ID") @PathVariable("menuId") Long menuId) {
} if (menuService.hasChildByMenuId(menuId)) {
else if (UserConstants.YES_FRAME.equals(menu.getIsFrame()) return AjaxResult.error("存在子菜单,不允许删除");
&& !StringUtils.startsWithAny(menu.getPath(), Constants.HTTP, Constants.HTTPS)) }
{ if (menuService.checkMenuExistRole(menuId)) {
return AjaxResult.error("修改菜单'" + menu.getMenuName() + "'失败地址必须以http(s)://开头"); return AjaxResult.error("菜单已分配,不允许删除");
} }
else if (menu.getMenuId().equals(menu.getParentId())) return toAjax(menuService.deleteMenuById(menuId));
{ }
return AjaxResult.error("修改菜单'" + menu.getMenuName() + "'失败,上级菜单不能选择自己"); }
}
menu.setUpdateBy(SecurityUtils.getUsername());
return toAjax(menuService.updateMenu(menu));
}
/**
* 删除菜单
*/
@PreAuthorize("@ss.hasPermi('system:menu:remove')")
@Log(title = "菜单管理", businessType = BusinessType.DELETE)
@DeleteMapping("/{menuId}")
public AjaxResult remove(@PathVariable("menuId") Long menuId)
{
if (menuService.hasChildByMenuId(menuId))
{
return AjaxResult.error("存在子菜单,不允许删除");
}
if (menuService.checkMenuExistRole(menuId))
{
return AjaxResult.error("菜单已分配,不允许删除");
}
return toAjax(menuService.deleteMenuById(menuId));
}
}

View File

@ -1,92 +1,86 @@
package com.ruoyi.web.controller.system; package com.ruoyi.web.controller.system;
import java.util.List; import com.ruoyi.common.annotation.Log;
import org.springframework.beans.factory.annotation.Autowired; import com.ruoyi.common.core.controller.BaseController;
import org.springframework.security.access.prepost.PreAuthorize; import com.ruoyi.common.core.domain.AjaxResult;
import org.springframework.validation.annotation.Validated; import com.ruoyi.common.core.domain.PageQuery;
import org.springframework.web.bind.annotation.DeleteMapping; import com.ruoyi.common.core.page.TableDataInfo;
import org.springframework.web.bind.annotation.GetMapping; import com.ruoyi.common.enums.BusinessType;
import org.springframework.web.bind.annotation.PathVariable; import com.ruoyi.system.domain.SysNotice;
import org.springframework.web.bind.annotation.PostMapping; import com.ruoyi.system.service.ISysNoticeService;
import org.springframework.web.bind.annotation.PutMapping; import io.swagger.annotations.Api;
import org.springframework.web.bind.annotation.RequestBody; import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.RequestMapping; import io.swagger.annotations.ApiParam;
import org.springframework.web.bind.annotation.RestController; import lombok.RequiredArgsConstructor;
import com.ruoyi.common.annotation.Log; import org.springframework.beans.factory.annotation.Autowired;
import com.ruoyi.common.core.controller.BaseController; import org.springframework.security.access.prepost.PreAuthorize;
import com.ruoyi.common.core.domain.AjaxResult; import org.springframework.validation.annotation.Validated;
import com.ruoyi.common.core.page.TableDataInfo; import org.springframework.web.bind.annotation.*;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.SecurityUtils; /**
import com.ruoyi.system.domain.SysNotice; * 公告 信息操作处理
import com.ruoyi.system.service.ISysNoticeService; *
* @author Lion Li
/** */
* 公告 信息操作处理 @Validated
* @Api(value = "公告信息控制器", tags = {"公告信息管理"})
* @author ruoyi @RequiredArgsConstructor(onConstructor_ = @Autowired)
*/ @RestController
@RestController @RequestMapping("/system/notice")
@RequestMapping("/system/notice") public class SysNoticeController extends BaseController {
public class SysNoticeController extends BaseController
{ private final ISysNoticeService noticeService;
@Autowired
private ISysNoticeService noticeService; /**
* 获取通知公告列表
/** */
* 获取通知公告列表 @ApiOperation("获取通知公告列表")
*/ @PreAuthorize("@ss.hasPermi('system:notice:list')")
@PreAuthorize("@ss.hasPermi('system:notice:list')") @GetMapping("/list")
@GetMapping("/list") public TableDataInfo<SysNotice> list(SysNotice notice, PageQuery pageQuery) {
public TableDataInfo list(SysNotice notice) return noticeService.selectPageNoticeList(notice, pageQuery);
{ }
startPage();
List<SysNotice> list = noticeService.selectNoticeList(notice); /**
return getDataTable(list); * 根据通知公告编号获取详细信息
} */
@ApiOperation("根据通知公告编号获取详细信息")
/** @PreAuthorize("@ss.hasPermi('system:notice:query')")
* 根据通知公告编号获取详细信息 @GetMapping(value = "/{noticeId}")
*/ public AjaxResult<SysNotice> getInfo(@ApiParam("公告ID") @PathVariable Long noticeId) {
@PreAuthorize("@ss.hasPermi('system:notice:query')") return AjaxResult.success(noticeService.selectNoticeById(noticeId));
@GetMapping(value = "/{noticeId}") }
public AjaxResult getInfo(@PathVariable Long noticeId)
{ /**
return AjaxResult.success(noticeService.selectNoticeById(noticeId)); * 新增通知公告
} */
@ApiOperation("新增通知公告")
/** @PreAuthorize("@ss.hasPermi('system:notice:add')")
* 新增通知公告 @Log(title = "通知公告", businessType = BusinessType.INSERT)
*/ @PostMapping
@PreAuthorize("@ss.hasPermi('system:notice:add')") public AjaxResult<Void> add(@Validated @RequestBody SysNotice notice) {
@Log(title = "通知公告", businessType = BusinessType.INSERT) return toAjax(noticeService.insertNotice(notice));
@PostMapping }
public AjaxResult add(@Validated @RequestBody SysNotice notice)
{ /**
notice.setCreateBy(SecurityUtils.getUsername()); * 修改通知公告
return toAjax(noticeService.insertNotice(notice)); */
} @ApiOperation("修改通知公告")
@PreAuthorize("@ss.hasPermi('system:notice:edit')")
/** @Log(title = "通知公告", businessType = BusinessType.UPDATE)
* 修改通知公告 @PutMapping
*/ public AjaxResult<Void> edit(@Validated @RequestBody SysNotice notice) {
@PreAuthorize("@ss.hasPermi('system:notice:edit')") return toAjax(noticeService.updateNotice(notice));
@Log(title = "通知公告", businessType = BusinessType.UPDATE) }
@PutMapping
public AjaxResult edit(@Validated @RequestBody SysNotice notice) /**
{ * 删除通知公告
notice.setUpdateBy(SecurityUtils.getUsername()); */
return toAjax(noticeService.updateNotice(notice)); @ApiOperation("删除通知公告")
} @PreAuthorize("@ss.hasPermi('system:notice:remove')")
@Log(title = "通知公告", businessType = BusinessType.DELETE)
/** @DeleteMapping("/{noticeIds}")
* 删除通知公告 public AjaxResult<Void> remove(@ApiParam("公告ID串") @PathVariable Long[] noticeIds) {
*/ return toAjax(noticeService.deleteNoticeByIds(noticeIds));
@PreAuthorize("@ss.hasPermi('system:notice:remove')") }
@Log(title = "通知公告", businessType = BusinessType.DELETE) }
@DeleteMapping("/{noticeIds}")
public AjaxResult remove(@PathVariable Long[] noticeIds)
{
return toAjax(noticeService.deleteNoticeByIds(noticeIds));
}
}

View File

@ -0,0 +1,114 @@
package com.ruoyi.web.controller.system;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.annotation.RepeatSubmit;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.domain.PageQuery;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.core.validate.AddGroup;
import com.ruoyi.common.core.validate.EditGroup;
import com.ruoyi.common.core.validate.QueryGroup;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.system.domain.bo.SysOssConfigBo;
import com.ruoyi.system.domain.vo.SysOssConfigVo;
import com.ruoyi.system.service.ISysOssConfigService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.util.Arrays;
/**
* 对象存储配置Controller
*
* @author Lion Li
* @author 孤舟烟雨
* @date 2021-08-13
*/
@Validated
@Api(value = "对象存储配置控制器", tags = {"对象存储配置管理"})
@RequiredArgsConstructor(onConstructor_ = @Autowired)
@RestController
@RequestMapping("/system/oss/config")
public class SysOssConfigController extends BaseController {
private final ISysOssConfigService iSysOssConfigService;
/**
* 查询对象存储配置列表
*/
@ApiOperation("查询对象存储配置列表")
@PreAuthorize("@ss.hasPermi('system:oss:list')")
@GetMapping("/list")
public TableDataInfo<SysOssConfigVo> list(@Validated(QueryGroup.class) SysOssConfigBo bo, PageQuery pageQuery) {
return iSysOssConfigService.queryPageList(bo, pageQuery);
}
/**
* 获取对象存储配置详细信息
*/
@ApiOperation("获取对象存储配置详细信息")
@PreAuthorize("@ss.hasPermi('system:oss:query')")
@GetMapping("/{ossConfigId}")
public AjaxResult<SysOssConfigVo> getInfo(@ApiParam("OSS配置ID")
@NotNull(message = "主键不能为空")
@PathVariable("ossConfigId") Integer ossConfigId) {
return AjaxResult.success(iSysOssConfigService.queryById(ossConfigId));
}
/**
* 新增对象存储配置
*/
@ApiOperation("新增对象存储配置")
@PreAuthorize("@ss.hasPermi('system:oss:add')")
@Log(title = "对象存储配置", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public AjaxResult<Void> add(@Validated(AddGroup.class) @RequestBody SysOssConfigBo bo) {
return toAjax(iSysOssConfigService.insertByBo(bo) ? 1 : 0);
}
/**
* 修改对象存储配置
*/
@ApiOperation("修改对象存储配置")
@PreAuthorize("@ss.hasPermi('system:oss:edit')")
@Log(title = "对象存储配置", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public AjaxResult<Void> edit(@Validated(EditGroup.class) @RequestBody SysOssConfigBo bo) {
return toAjax(iSysOssConfigService.updateByBo(bo) ? 1 : 0);
}
/**
* 删除对象存储配置
*/
@ApiOperation("删除对象存储配置")
@PreAuthorize("@ss.hasPermi('system:oss:remove')")
@Log(title = "对象存储配置", businessType = BusinessType.DELETE)
@DeleteMapping("/{ossConfigIds}")
public AjaxResult<Void> remove(@ApiParam("OSS配置ID串")
@NotEmpty(message = "主键不能为空")
@PathVariable Long[] ossConfigIds) {
return toAjax(iSysOssConfigService.deleteWithValidByIds(Arrays.asList(ossConfigIds), true) ? 1 : 0);
}
/**
* 状态修改
*/
@ApiOperation("状态修改")
@PreAuthorize("@ss.hasPermi('system:oss:edit')")
@Log(title = "对象存储状态修改", businessType = BusinessType.UPDATE)
@PutMapping("/changeStatus")
public AjaxResult<Void> changeStatus(@RequestBody SysOssConfigBo bo) {
return toAjax(iSysOssConfigService.updateOssConfigStatus(bo));
}
}

View File

@ -0,0 +1,143 @@
package com.ruoyi.web.controller.system;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.http.HttpException;
import cn.hutool.http.HttpUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.annotation.RepeatSubmit;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.domain.PageQuery;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.core.validate.QueryGroup;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.utils.JsonUtils;
import com.ruoyi.common.utils.file.FileUtils;
import com.ruoyi.oss.constant.OssConstant;
import com.ruoyi.system.domain.SysConfig;
import com.ruoyi.system.domain.SysOss;
import com.ruoyi.system.domain.bo.SysOssBo;
import com.ruoyi.system.domain.vo.SysOssVo;
import com.ruoyi.system.service.ISysConfigService;
import com.ruoyi.system.service.ISysOssService;
import io.swagger.annotations.*;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import javax.validation.constraints.NotEmpty;
import java.io.File;
import java.io.IOException;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
/**
* 文件上传 控制层
*
* @author Lion Li
*/
@Validated
@Api(value = "OSS对象存储控制器", tags = {"OSS对象存储管理"})
@RequiredArgsConstructor(onConstructor_ = @Autowired)
@RestController
@RequestMapping("/system/oss")
public class SysOssController extends BaseController {
private final ISysOssService iSysOssService;
private final ISysConfigService iSysConfigService;
/**
* 查询OSS对象存储列表
*/
@ApiOperation("查询OSS对象存储列表")
@PreAuthorize("@ss.hasPermi('system:oss:list')")
@GetMapping("/list")
public TableDataInfo<SysOssVo> list(@Validated(QueryGroup.class) SysOssBo bo, PageQuery pageQuery) {
return iSysOssService.queryPageList(bo, pageQuery);
}
/**
* 上传OSS对象存储
*/
@ApiOperation("上传OSS对象存储")
@ApiImplicitParams({
@ApiImplicitParam(name = "file", value = "文件", dataTypeClass = File.class, required = true),
})
@PreAuthorize("@ss.hasPermi('system:oss:upload')")
@Log(title = "OSS对象存储", businessType = BusinessType.INSERT)
@RepeatSubmit
@PostMapping("/upload")
public AjaxResult<Map<String, String>> upload(@RequestPart("file") MultipartFile file) {
if (ObjectUtil.isNull(file)) {
throw new ServiceException("上传文件不能为空");
}
SysOss oss = iSysOssService.upload(file);
Map<String, String> map = new HashMap<>(2);
map.put("url", oss.getUrl());
map.put("fileName", oss.getFileName());
return AjaxResult.success(map);
}
@ApiOperation("下载OSS对象存储")
@PreAuthorize("@ss.hasPermi('system:oss:download')")
@GetMapping("/download/{ossId}")
public void download(@ApiParam("OSS对象ID") @PathVariable Long ossId, HttpServletResponse response) throws IOException {
SysOss sysOss = iSysOssService.getById(ossId);
if (ObjectUtil.isNull(sysOss)) {
throw new ServiceException("文件数据不存在!");
}
response.reset();
FileUtils.setAttachmentResponseHeader(response, sysOss.getOriginalName());
response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE + "; charset=UTF-8");
long data;
try {
data = HttpUtil.download(sysOss.getUrl(), response.getOutputStream(), false);
} catch (HttpException e) {
if (e.getMessage().contains("403")) {
throw new ServiceException("无读取权限, 请在对应的OSS开启'公有读'权限!");
} else {
throw new ServiceException(e.getMessage());
}
}
response.setContentLength(Convert.toInt(data));
}
/**
* 删除OSS对象存储
*/
@ApiOperation("删除OSS对象存储")
@PreAuthorize("@ss.hasPermi('system:oss:remove')")
@Log(title = "OSS对象存储", businessType = BusinessType.DELETE)
@DeleteMapping("/{ossIds}")
public AjaxResult<Void> remove(@ApiParam("OSS对象ID串")
@NotEmpty(message = "主键不能为空")
@PathVariable Long[] ossIds) {
return toAjax(iSysOssService.deleteWithValidByIds(Arrays.asList(ossIds), true) ? 1 : 0);
}
/**
* 变更图片列表预览状态
*/
@ApiOperation("变更图片列表预览状态")
@PreAuthorize("@ss.hasPermi('system:oss:edit')")
@Log(title = "OSS对象存储", businessType = BusinessType.UPDATE)
@PutMapping("/changePreviewListResource")
public AjaxResult<Void> changePreviewListResource(@RequestBody String body) {
Map<String, Boolean> map = JsonUtils.parseMap(body);
SysConfig config = iSysConfigService.getOne(new LambdaQueryWrapper<SysConfig>()
.eq(SysConfig::getConfigKey, OssConstant.PEREVIEW_LIST_RESOURCE_KEY));
config.setConfigValue(map.get("previewListResource").toString());
return toAjax(iSysConfigService.updateConfig(config));
}
}

View File

@ -1,130 +1,120 @@
package com.ruoyi.web.controller.system; package com.ruoyi.web.controller.system;
import java.util.List; import com.ruoyi.common.annotation.Log;
import org.springframework.beans.factory.annotation.Autowired; import com.ruoyi.common.constant.UserConstants;
import org.springframework.security.access.prepost.PreAuthorize; import com.ruoyi.common.core.controller.BaseController;
import org.springframework.validation.annotation.Validated; import com.ruoyi.common.core.domain.AjaxResult;
import org.springframework.web.bind.annotation.DeleteMapping; import com.ruoyi.common.core.domain.PageQuery;
import org.springframework.web.bind.annotation.GetMapping; import com.ruoyi.common.core.page.TableDataInfo;
import org.springframework.web.bind.annotation.PathVariable; import com.ruoyi.common.enums.BusinessType;
import org.springframework.web.bind.annotation.PostMapping; import com.ruoyi.common.utils.poi.ExcelUtil;
import org.springframework.web.bind.annotation.PutMapping; import com.ruoyi.system.domain.SysPost;
import org.springframework.web.bind.annotation.RequestBody; import com.ruoyi.system.service.ISysPostService;
import org.springframework.web.bind.annotation.RequestMapping; import io.swagger.annotations.Api;
import org.springframework.web.bind.annotation.RestController; import io.swagger.annotations.ApiOperation;
import com.ruoyi.common.annotation.Log; import io.swagger.annotations.ApiParam;
import com.ruoyi.common.constant.UserConstants; import lombok.RequiredArgsConstructor;
import com.ruoyi.common.core.controller.BaseController; import org.springframework.beans.factory.annotation.Autowired;
import com.ruoyi.common.core.domain.AjaxResult; import org.springframework.security.access.prepost.PreAuthorize;
import com.ruoyi.common.core.page.TableDataInfo; import org.springframework.validation.annotation.Validated;
import com.ruoyi.common.enums.BusinessType; import org.springframework.web.bind.annotation.*;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.poi.ExcelUtil; import javax.servlet.http.HttpServletResponse;
import com.ruoyi.system.domain.SysPost; import java.util.List;
import com.ruoyi.system.service.ISysPostService;
/**
/** * 岗位信息操作处理
* 岗位信息操作处理 *
* * @author Lion Li
* @author ruoyi */
*/ @Validated
@RestController @Api(value = "岗位信息控制器", tags = {"岗位信息管理"})
@RequestMapping("/system/post") @RequiredArgsConstructor(onConstructor_ = @Autowired)
public class SysPostController extends BaseController @RestController
{ @RequestMapping("/system/post")
@Autowired public class SysPostController extends BaseController {
private ISysPostService postService;
private final ISysPostService postService;
/**
* 获取岗位列表 /**
*/ * 获取岗位列表
@PreAuthorize("@ss.hasPermi('system:post:list')") */
@GetMapping("/list") @ApiOperation("获取岗位列表")
public TableDataInfo list(SysPost post) @PreAuthorize("@ss.hasPermi('system:post:list')")
{ @GetMapping("/list")
startPage(); public TableDataInfo<SysPost> list(SysPost post, PageQuery pageQuery) {
List<SysPost> list = postService.selectPostList(post); return postService.selectPagePostList(post, pageQuery);
return getDataTable(list); }
}
@ApiOperation("导出岗位列表")
@Log(title = "岗位管理", businessType = BusinessType.EXPORT) @Log(title = "岗位管理", businessType = BusinessType.EXPORT)
@PreAuthorize("@ss.hasPermi('system:post:export')") @PreAuthorize("@ss.hasPermi('system:post:export')")
@GetMapping("/export") @PostMapping("/export")
public AjaxResult export(SysPost post) public void export(SysPost post, HttpServletResponse response) {
{ List<SysPost> list = postService.selectPostList(post);
List<SysPost> list = postService.selectPostList(post); ExcelUtil.exportExcel(list, "岗位数据", SysPost.class, response);
ExcelUtil<SysPost> util = new ExcelUtil<SysPost>(SysPost.class); }
return util.exportExcel(list, "岗位数据");
} /**
* 根据岗位编号获取详细信息
/** */
* 根据岗位编号获取详细信息 @ApiOperation("根据岗位编号获取详细信息")
*/ @PreAuthorize("@ss.hasPermi('system:post:query')")
@PreAuthorize("@ss.hasPermi('system:post:query')") @GetMapping(value = "/{postId}")
@GetMapping(value = "/{postId}") public AjaxResult<SysPost> getInfo(@ApiParam("岗位ID") @PathVariable Long postId) {
public AjaxResult getInfo(@PathVariable Long postId) return AjaxResult.success(postService.selectPostById(postId));
{ }
return AjaxResult.success(postService.selectPostById(postId));
} /**
* 新增岗位
/** */
* 新增岗位 @ApiOperation("新增岗位")
*/ @PreAuthorize("@ss.hasPermi('system:post:add')")
@PreAuthorize("@ss.hasPermi('system:post:add')") @Log(title = "岗位管理", businessType = BusinessType.INSERT)
@Log(title = "岗位管理", businessType = BusinessType.INSERT) @PostMapping
@PostMapping public AjaxResult<Void> add(@Validated @RequestBody SysPost post) {
public AjaxResult add(@Validated @RequestBody SysPost post) if (UserConstants.NOT_UNIQUE.equals(postService.checkPostNameUnique(post))) {
{ return AjaxResult.error("新增岗位'" + post.getPostName() + "'失败,岗位名称已存在");
if (UserConstants.NOT_UNIQUE.equals(postService.checkPostNameUnique(post))) } else if (UserConstants.NOT_UNIQUE.equals(postService.checkPostCodeUnique(post))) {
{ return AjaxResult.error("新增岗位'" + post.getPostName() + "'失败,岗位编码已存在");
return AjaxResult.error("新增岗位'" + post.getPostName() + "'失败,岗位名称已存在"); }
} return toAjax(postService.insertPost(post));
else if (UserConstants.NOT_UNIQUE.equals(postService.checkPostCodeUnique(post))) }
{
return AjaxResult.error("新增岗位'" + post.getPostName() + "'失败,岗位编码已存在"); /**
} * 修改岗位
post.setCreateBy(SecurityUtils.getUsername()); */
return toAjax(postService.insertPost(post)); @ApiOperation("修改岗位")
} @PreAuthorize("@ss.hasPermi('system:post:edit')")
@Log(title = "岗位管理", businessType = BusinessType.UPDATE)
/** @PutMapping
* 修改岗位 public AjaxResult<Void> edit(@Validated @RequestBody SysPost post) {
*/ if (UserConstants.NOT_UNIQUE.equals(postService.checkPostNameUnique(post))) {
@PreAuthorize("@ss.hasPermi('system:post:edit')") return AjaxResult.error("修改岗位'" + post.getPostName() + "'失败,岗位名称已存在");
@Log(title = "岗位管理", businessType = BusinessType.UPDATE) } else if (UserConstants.NOT_UNIQUE.equals(postService.checkPostCodeUnique(post))) {
@PutMapping return AjaxResult.error("修改岗位'" + post.getPostName() + "'失败,岗位编码已存在");
public AjaxResult edit(@Validated @RequestBody SysPost post) }
{ return toAjax(postService.updatePost(post));
if (UserConstants.NOT_UNIQUE.equals(postService.checkPostNameUnique(post))) }
{
return AjaxResult.error("修改岗位'" + post.getPostName() + "'失败,岗位名称已存在"); /**
} * 删除岗位
else if (UserConstants.NOT_UNIQUE.equals(postService.checkPostCodeUnique(post))) */
{ @ApiOperation("删除岗位")
return AjaxResult.error("修改岗位'" + post.getPostName() + "'失败,岗位编码已存在"); @PreAuthorize("@ss.hasPermi('system:post:remove')")
} @Log(title = "岗位管理", businessType = BusinessType.DELETE)
post.setUpdateBy(SecurityUtils.getUsername()); @DeleteMapping("/{postIds}")
return toAjax(postService.updatePost(post)); public AjaxResult<Void> remove(@ApiParam("岗位ID串") @PathVariable Long[] postIds) {
} return toAjax(postService.deletePostByIds(postIds));
}
/**
* 删除岗位 /**
*/ * 获取岗位选择框列表
@PreAuthorize("@ss.hasPermi('system:post:remove')") */
@Log(title = "岗位管理", businessType = BusinessType.DELETE) @ApiOperation("获取岗位选择框列表")
@DeleteMapping("/{postIds}") @GetMapping("/optionselect")
public AjaxResult remove(@PathVariable Long[] postIds) public AjaxResult<List<SysPost>> optionselect() {
{ List<SysPost> posts = postService.selectPostAll();
return toAjax(postService.deletePostByIds(postIds)); return AjaxResult.success(posts);
} }
}
/**
* 获取岗位选择框列表
*/
@GetMapping("/optionselect")
public AjaxResult optionselect()
{
List<SysPost> posts = postService.selectPostAll();
return AjaxResult.success(posts);
}
}

View File

@ -1,139 +1,135 @@
package com.ruoyi.web.controller.system; package com.ruoyi.web.controller.system;
import java.io.IOException; import com.ruoyi.common.annotation.Log;
import org.springframework.beans.factory.annotation.Autowired; import com.ruoyi.common.constant.UserConstants;
import org.springframework.web.bind.annotation.GetMapping; import com.ruoyi.common.core.controller.BaseController;
import org.springframework.web.bind.annotation.PostMapping; import com.ruoyi.common.core.domain.AjaxResult;
import org.springframework.web.bind.annotation.PutMapping; import com.ruoyi.common.core.domain.entity.SysUser;
import org.springframework.web.bind.annotation.RequestBody; import com.ruoyi.common.core.domain.model.LoginUser;
import org.springframework.web.bind.annotation.RequestMapping; import com.ruoyi.common.core.service.TokenService;
import org.springframework.web.bind.annotation.RequestParam; import com.ruoyi.common.enums.BusinessType;
import org.springframework.web.bind.annotation.RestController; import com.ruoyi.common.utils.SecurityUtils;
import org.springframework.web.multipart.MultipartFile; import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.annotation.Log; import com.ruoyi.system.domain.SysOss;
import com.ruoyi.common.config.RuoYiConfig; import com.ruoyi.system.service.ISysOssService;
import com.ruoyi.common.constant.UserConstants; import com.ruoyi.system.service.ISysUserService;
import com.ruoyi.common.core.controller.BaseController; import io.swagger.annotations.Api;
import com.ruoyi.common.core.domain.AjaxResult; import io.swagger.annotations.ApiImplicitParam;
import com.ruoyi.common.core.domain.entity.SysUser; import io.swagger.annotations.ApiImplicitParams;
import com.ruoyi.common.core.domain.model.LoginUser; import io.swagger.annotations.ApiOperation;
import com.ruoyi.common.enums.BusinessType; import lombok.RequiredArgsConstructor;
import com.ruoyi.common.utils.SecurityUtils; import org.springframework.beans.factory.annotation.Autowired;
import com.ruoyi.common.utils.ServletUtils; import org.springframework.validation.annotation.Validated;
import com.ruoyi.common.utils.StringUtils; import org.springframework.web.bind.annotation.*;
import com.ruoyi.common.utils.file.FileUploadUtils; import org.springframework.web.multipart.MultipartFile;
import com.ruoyi.framework.web.service.TokenService;
import com.ruoyi.system.service.ISysUserService; import java.io.File;
import java.util.HashMap;
/** import java.util.Map;
* 个人信息 业务处理
* /**
* @author ruoyi * 个人信息 业务处理
*/ *
@RestController * @author Lion Li
@RequestMapping("/system/user/profile") */
public class SysProfileController extends BaseController @Validated
{ @Api(value = "个人信息控制器", tags = {"个人信息管理"})
@Autowired @RequiredArgsConstructor(onConstructor_ = @Autowired)
private ISysUserService userService; @RestController
@RequestMapping("/system/user/profile")
@Autowired public class SysProfileController extends BaseController {
private TokenService tokenService;
private final ISysUserService userService;
/** private final TokenService tokenService;
* 个人信息 private final ISysOssService iSysOssService;
*/
@GetMapping /**
public AjaxResult profile() * 个人信息
{ */
LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest()); @ApiOperation("个人信息")
SysUser user = loginUser.getUser(); @GetMapping
AjaxResult ajax = AjaxResult.success(user); public AjaxResult<Map<String, Object>> profile() {
ajax.put("roleGroup", userService.selectUserRoleGroup(loginUser.getUsername())); LoginUser loginUser = getLoginUser();
ajax.put("postGroup", userService.selectUserPostGroup(loginUser.getUsername())); SysUser user = userService.selectUserById(loginUser.getUserId());
return ajax; Map<String, Object> ajax = new HashMap<>();
} ajax.put("user", user);
ajax.put("roleGroup", userService.selectUserRoleGroup(loginUser.getUsername()));
/** ajax.put("postGroup", userService.selectUserPostGroup(loginUser.getUsername()));
* 修改用户 return AjaxResult.success(ajax);
*/ }
@Log(title = "个人信息", businessType = BusinessType.UPDATE)
@PutMapping /**
public AjaxResult updateProfile(@RequestBody SysUser user) * 修改用户
{ */
if (StringUtils.isNotEmpty(user.getPhonenumber()) @ApiOperation("修改用户")
&& UserConstants.NOT_UNIQUE.equals(userService.checkPhoneUnique(user))) @Log(title = "个人信息", businessType = BusinessType.UPDATE)
{ @PutMapping
return AjaxResult.error("修改用户'" + user.getUserName() + "'失败,手机号码已存在"); public AjaxResult<Void> updateProfile(@RequestBody SysUser user) {
} if (StringUtils.isNotEmpty(user.getPhonenumber())
if (StringUtils.isNotEmpty(user.getEmail()) && UserConstants.NOT_UNIQUE.equals(userService.checkPhoneUnique(user))) {
&& UserConstants.NOT_UNIQUE.equals(userService.checkEmailUnique(user))) return AjaxResult.error("修改用户'" + user.getUserName() + "'失败,手机号码已存在");
{ }
return AjaxResult.error("修改用户'" + user.getUserName() + "'失败,邮箱账号已存在"); if (StringUtils.isNotEmpty(user.getEmail())
} && UserConstants.NOT_UNIQUE.equals(userService.checkEmailUnique(user))) {
if (userService.updateUserProfile(user) > 0) return AjaxResult.error("修改用户'" + user.getUserName() + "'失败,邮箱账号已存在");
{ }
LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest()); LoginUser loginUser = getLoginUser();
// 更新缓存用户信息 SysUser sysUser = userService.selectUserById(loginUser.getUserId());
loginUser.getUser().setNickName(user.getNickName()); user.setUserId(sysUser.getUserId());
loginUser.getUser().setPhonenumber(user.getPhonenumber()); user.setUserName(null);
loginUser.getUser().setEmail(user.getEmail()); user.setPassword(null);
loginUser.getUser().setSex(user.getSex()); if (userService.updateUserProfile(user) > 0) {
tokenService.setLoginUser(loginUser); return AjaxResult.success();
return AjaxResult.success(); }
} return AjaxResult.error("修改个人信息异常,请联系管理员");
return AjaxResult.error("修改个人信息异常,请联系管理员"); }
}
/**
/** * 重置密码
* 重置密码 */
*/ @ApiOperation("重置密码")
@Log(title = "个人信息", businessType = BusinessType.UPDATE) @ApiImplicitParams({
@PutMapping("/updatePwd") @ApiImplicitParam(name = "oldPassword", value = "旧密码", paramType = "query", dataTypeClass = String.class),
public AjaxResult updatePwd(String oldPassword, String newPassword) @ApiImplicitParam(name = "newPassword", value = "新密码", paramType = "query", dataTypeClass = String.class)
{ })
LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest()); @Log(title = "个人信息", businessType = BusinessType.UPDATE)
String userName = loginUser.getUsername(); @PutMapping("/updatePwd")
String password = loginUser.getPassword(); public AjaxResult<Void> updatePwd(String oldPassword, String newPassword) {
if (!SecurityUtils.matchesPassword(oldPassword, password)) SysUser user = userService.selectUserById(SecurityUtils.getUserId());
{ String userName = user.getUserName();
return AjaxResult.error("修改密码失败,旧密码错误"); String password = user.getPassword();
} if (!SecurityUtils.matchesPassword(oldPassword, password)) {
if (SecurityUtils.matchesPassword(newPassword, password)) return AjaxResult.error("修改密码失败,旧密码错误");
{ }
return AjaxResult.error("新密码不能与旧密码相同"); if (SecurityUtils.matchesPassword(newPassword, password)) {
} return AjaxResult.error("新密码不能与旧密码相同");
if (userService.resetUserPwd(userName, SecurityUtils.encryptPassword(newPassword)) > 0) }
{ if (userService.resetUserPwd(userName, SecurityUtils.encryptPassword(newPassword)) > 0) {
// 更新缓存用户密码 return AjaxResult.success();
loginUser.getUser().setPassword(SecurityUtils.encryptPassword(newPassword)); }
tokenService.setLoginUser(loginUser); return AjaxResult.error("修改密码异常,请联系管理员");
return AjaxResult.success(); }
}
return AjaxResult.error("修改密码异常,请联系管理员"); /**
} * 头像上传
*/
/** @ApiOperation("头像上传")
* 头像上传 @ApiImplicitParams({
*/ @ApiImplicitParam(name = "avatarfile", value = "用户头像", dataTypeClass = File.class, required = true),
@Log(title = "用户头像", businessType = BusinessType.UPDATE) })
@PostMapping("/avatar") @Log(title = "用户头像", businessType = BusinessType.UPDATE)
public AjaxResult avatar(@RequestParam("avatarfile") MultipartFile file) throws IOException @PostMapping("/avatar")
{ public AjaxResult<Map<String, Object>> avatar(@RequestPart("avatarfile") MultipartFile file) {
if (!file.isEmpty()) Map<String, Object> ajax = new HashMap<>();
{ if (!file.isEmpty()) {
LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest()); LoginUser loginUser = getLoginUser();
String avatar = FileUploadUtils.upload(RuoYiConfig.getAvatarPath(), file); SysOss oss = iSysOssService.upload(file);
if (userService.updateUserAvatar(loginUser.getUsername(), avatar)) String avatar = oss.getUrl();
{ if (userService.updateUserAvatar(loginUser.getUsername(), avatar)) {
AjaxResult ajax = AjaxResult.success(); ajax.put("imgUrl", avatar);
ajax.put("imgUrl", avatar); return AjaxResult.success(ajax);
// 更新缓存用户头像 }
loginUser.getUser().setAvatar(avatar); }
tokenService.setLoginUser(loginUser); return AjaxResult.error("上传图片异常,请联系管理员", ajax);
return ajax; }
} }
}
return AjaxResult.error("上传图片异常,请联系管理员");
}
}

View File

@ -0,0 +1,41 @@
package com.ruoyi.web.controller.system;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.domain.model.RegisterBody;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.system.service.ISysConfigService;
import com.ruoyi.system.service.SysRegisterService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
/**
* 注册验证
*
* @author Lion Li
*/
@Validated
@Api(value = "注册验证控制器", tags = {"注册验证管理"})
@RequiredArgsConstructor(onConstructor_ = @Autowired)
@RestController
public class SysRegisterController extends BaseController {
private final SysRegisterService registerService;
private final ISysConfigService configService;
@ApiOperation("用户注册")
@PostMapping("/register")
public AjaxResult<Void> register(@RequestBody RegisterBody user) {
if (!("true".equals(configService.selectConfigByKey("sys.account.registerUser")))) {
return error("当前系统没有开启注册功能!");
}
String msg = registerService.register(user);
return StringUtils.isEmpty(msg) ? success() : error(msg);
}
}

View File

@ -1,182 +1,224 @@
package com.ruoyi.web.controller.system; package com.ruoyi.web.controller.system;
import java.util.List; import com.ruoyi.common.annotation.Log;
import org.springframework.beans.factory.annotation.Autowired; import com.ruoyi.common.constant.UserConstants;
import org.springframework.security.access.prepost.PreAuthorize; import com.ruoyi.common.core.controller.BaseController;
import org.springframework.validation.annotation.Validated; import com.ruoyi.common.core.domain.AjaxResult;
import org.springframework.web.bind.annotation.DeleteMapping; import com.ruoyi.common.core.domain.PageQuery;
import org.springframework.web.bind.annotation.GetMapping; import com.ruoyi.common.core.domain.entity.SysRole;
import org.springframework.web.bind.annotation.PathVariable; import com.ruoyi.common.core.domain.entity.SysUser;
import org.springframework.web.bind.annotation.PostMapping; import com.ruoyi.common.core.domain.model.LoginUser;
import org.springframework.web.bind.annotation.PutMapping; import com.ruoyi.common.core.page.TableDataInfo;
import org.springframework.web.bind.annotation.RequestBody; import com.ruoyi.common.core.service.TokenService;
import org.springframework.web.bind.annotation.RequestMapping; import com.ruoyi.common.enums.BusinessType;
import org.springframework.web.bind.annotation.RestController; import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.annotation.Log; import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.common.constant.UserConstants; import com.ruoyi.system.domain.SysUserRole;
import com.ruoyi.common.core.controller.BaseController; import com.ruoyi.system.service.ISysRoleService;
import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.system.service.ISysUserService;
import com.ruoyi.common.core.domain.entity.SysRole; import com.ruoyi.system.service.SysPermissionService;
import com.ruoyi.common.core.domain.model.LoginUser; import io.swagger.annotations.*;
import com.ruoyi.common.core.page.TableDataInfo; import lombok.RequiredArgsConstructor;
import com.ruoyi.common.enums.BusinessType; import org.springframework.beans.factory.annotation.Autowired;
import com.ruoyi.common.utils.SecurityUtils; import org.springframework.security.access.prepost.PreAuthorize;
import com.ruoyi.common.utils.ServletUtils; import org.springframework.validation.annotation.Validated;
import com.ruoyi.common.utils.StringUtils; import org.springframework.web.bind.annotation.*;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.framework.web.service.SysPermissionService; import javax.servlet.http.HttpServletResponse;
import com.ruoyi.framework.web.service.TokenService; import java.util.List;
import com.ruoyi.system.service.ISysRoleService;
import com.ruoyi.system.service.ISysUserService; /**
* 角色信息
/** *
* 角色信息 * @author Lion Li
* */
* @author ruoyi @Validated
*/ @Api(value = "角色信息控制器", tags = {"角色信息管理"})
@RestController @RequiredArgsConstructor(onConstructor_ = @Autowired)
@RequestMapping("/system/role") @RestController
public class SysRoleController extends BaseController @RequestMapping("/system/role")
{ public class SysRoleController extends BaseController {
@Autowired
private ISysRoleService roleService; private final ISysRoleService roleService;
private final TokenService tokenService;
@Autowired private final ISysUserService userService;
private TokenService tokenService; private final SysPermissionService permissionService;
@Autowired @ApiOperation("查询角色信息列表")
private SysPermissionService permissionService; @PreAuthorize("@ss.hasPermi('system:role:list')")
@GetMapping("/list")
@Autowired public TableDataInfo<SysRole> list(SysRole role, PageQuery pageQuery) {
private ISysUserService userService; return roleService.selectPageRoleList(role, pageQuery);
}
@PreAuthorize("@ss.hasPermi('system:role:list')")
@GetMapping("/list") @ApiOperation("导出角色信息列表")
public TableDataInfo list(SysRole role) @Log(title = "角色管理", businessType = BusinessType.EXPORT)
{ @PreAuthorize("@ss.hasPermi('system:role:export')")
startPage(); @PostMapping("/export")
List<SysRole> list = roleService.selectRoleList(role); public void export(SysRole role, HttpServletResponse response) {
return getDataTable(list); List<SysRole> list = roleService.selectRoleList(role);
} ExcelUtil.exportExcel(list, "角色数据", SysRole.class, response);
}
@Log(title = "角色管理", businessType = BusinessType.EXPORT)
@PreAuthorize("@ss.hasPermi('system:role:export')") /**
@GetMapping("/export") * 根据角色编号获取详细信息
public AjaxResult export(SysRole role) */
{ @ApiOperation("根据角色编号获取详细信息")
List<SysRole> list = roleService.selectRoleList(role); @PreAuthorize("@ss.hasPermi('system:role:query')")
ExcelUtil<SysRole> util = new ExcelUtil<SysRole>(SysRole.class); @GetMapping(value = "/{roleId}")
return util.exportExcel(list, "角色数据"); public AjaxResult<SysRole> getInfo(@ApiParam("角色ID") @PathVariable Long roleId) {
} roleService.checkRoleDataScope(roleId);
return AjaxResult.success(roleService.selectRoleById(roleId));
/** }
* 根据角色编号获取详细信息
*/ /**
@PreAuthorize("@ss.hasPermi('system:role:query')") * 新增角色
@GetMapping(value = "/{roleId}") */
public AjaxResult getInfo(@PathVariable Long roleId) @ApiOperation("新增角色")
{ @PreAuthorize("@ss.hasPermi('system:role:add')")
return AjaxResult.success(roleService.selectRoleById(roleId)); @Log(title = "角色管理", businessType = BusinessType.INSERT)
} @PostMapping
public AjaxResult<Void> add(@Validated @RequestBody SysRole role) {
/** if (UserConstants.NOT_UNIQUE.equals(roleService.checkRoleNameUnique(role))) {
* 新增角色 return AjaxResult.error("新增角色'" + role.getRoleName() + "'失败,角色名称已存在");
*/ } else if (UserConstants.NOT_UNIQUE.equals(roleService.checkRoleKeyUnique(role))) {
@PreAuthorize("@ss.hasPermi('system:role:add')") return AjaxResult.error("新增角色'" + role.getRoleName() + "'失败,角色权限已存在");
@Log(title = "角色管理", businessType = BusinessType.INSERT) }
@PostMapping return toAjax(roleService.insertRole(role));
public AjaxResult add(@Validated @RequestBody SysRole role)
{ }
if (UserConstants.NOT_UNIQUE.equals(roleService.checkRoleNameUnique(role)))
{ /**
return AjaxResult.error("新增角色'" + role.getRoleName() + "'失败,角色名称已存在"); * 修改保存角色
} */
else if (UserConstants.NOT_UNIQUE.equals(roleService.checkRoleKeyUnique(role))) @ApiOperation("修改保存角色")
{ @PreAuthorize("@ss.hasPermi('system:role:edit')")
return AjaxResult.error("新增角色'" + role.getRoleName() + "'失败,角色权限已存在"); @Log(title = "角色管理", businessType = BusinessType.UPDATE)
} @PutMapping
role.setCreateBy(SecurityUtils.getUsername()); public AjaxResult<Void> edit(@Validated @RequestBody SysRole role) {
return toAjax(roleService.insertRole(role)); roleService.checkRoleAllowed(role);
if (UserConstants.NOT_UNIQUE.equals(roleService.checkRoleNameUnique(role))) {
} return AjaxResult.error("修改角色'" + role.getRoleName() + "'失败,角色名称已存在");
} else if (UserConstants.NOT_UNIQUE.equals(roleService.checkRoleKeyUnique(role))) {
/** return AjaxResult.error("修改角色'" + role.getRoleName() + "'失败,角色权限已存在");
* 修改保存角色 }
*/
@PreAuthorize("@ss.hasPermi('system:role:edit')") if (roleService.updateRole(role) > 0) {
@Log(title = "角色管理", businessType = BusinessType.UPDATE) // 更新缓存用户权限
@PutMapping LoginUser loginUser = getLoginUser();
public AjaxResult edit(@Validated @RequestBody SysRole role) SysUser sysUser = userService.selectUserById(loginUser.getUserId());
{ if (StringUtils.isNotNull(sysUser) && !sysUser.isAdmin()) {
roleService.checkRoleAllowed(role); loginUser.setMenuPermissions(permissionService.getMenuPermission(sysUser));
if (UserConstants.NOT_UNIQUE.equals(roleService.checkRoleNameUnique(role))) tokenService.setLoginUser(loginUser);
{ }
return AjaxResult.error("修改角色'" + role.getRoleName() + "'失败,角色名称已存在"); return AjaxResult.success();
} }
else if (UserConstants.NOT_UNIQUE.equals(roleService.checkRoleKeyUnique(role))) return AjaxResult.error("修改角色'" + role.getRoleName() + "'失败,请联系管理员");
{ }
return AjaxResult.error("修改角色'" + role.getRoleName() + "'失败,角色权限已存在");
} /**
role.setUpdateBy(SecurityUtils.getUsername()); * 修改保存数据权限
*/
if (roleService.updateRole(role) > 0) @ApiOperation("修改保存数据权限")
{ @PreAuthorize("@ss.hasPermi('system:role:edit')")
// 更新缓存用户权限 @Log(title = "角色管理", businessType = BusinessType.UPDATE)
LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest()); @PutMapping("/dataScope")
if (StringUtils.isNotNull(loginUser.getUser()) && !loginUser.getUser().isAdmin()) public AjaxResult<Void> dataScope(@RequestBody SysRole role) {
{ roleService.checkRoleAllowed(role);
loginUser.setPermissions(permissionService.getMenuPermission(loginUser.getUser())); return toAjax(roleService.authDataScope(role));
loginUser.setUser(userService.selectUserByUserName(loginUser.getUser().getUserName())); }
tokenService.setLoginUser(loginUser);
} /**
return AjaxResult.success(); * 状态修改
} */
return AjaxResult.error("修改角色'" + role.getRoleName() + "'失败,请联系管理员"); @ApiOperation("状态修改")
} @PreAuthorize("@ss.hasPermi('system:role:edit')")
@Log(title = "角色管理", businessType = BusinessType.UPDATE)
/** @PutMapping("/changeStatus")
* 修改保存数据权限 public AjaxResult<Void> changeStatus(@RequestBody SysRole role) {
*/ roleService.checkRoleAllowed(role);
@PreAuthorize("@ss.hasPermi('system:role:edit')") return toAjax(roleService.updateRoleStatus(role));
@Log(title = "角色管理", businessType = BusinessType.UPDATE) }
@PutMapping("/dataScope")
public AjaxResult dataScope(@RequestBody SysRole role) /**
{ * 删除角色
roleService.checkRoleAllowed(role); */
return toAjax(roleService.authDataScope(role)); @ApiOperation("删除角色")
} @PreAuthorize("@ss.hasPermi('system:role:remove')")
@Log(title = "角色管理", businessType = BusinessType.DELETE)
/** @DeleteMapping("/{roleIds}")
* 状态修改 public AjaxResult<Void> remove(@ApiParam("岗位ID串") @PathVariable Long[] roleIds) {
*/ return toAjax(roleService.deleteRoleByIds(roleIds));
@PreAuthorize("@ss.hasPermi('system:role:edit')") }
@Log(title = "角色管理", businessType = BusinessType.UPDATE)
@PutMapping("/changeStatus") /**
public AjaxResult changeStatus(@RequestBody SysRole role) * 获取角色选择框列表
{ */
roleService.checkRoleAllowed(role); @ApiOperation("获取角色选择框列表")
role.setUpdateBy(SecurityUtils.getUsername()); @PreAuthorize("@ss.hasPermi('system:role:query')")
return toAjax(roleService.updateRoleStatus(role)); @GetMapping("/optionselect")
} public AjaxResult<List<SysRole>> optionselect() {
return AjaxResult.success(roleService.selectRoleAll());
/** }
* 删除角色
*/ /**
@PreAuthorize("@ss.hasPermi('system:role:remove')") * 查询已分配用户角色列表
@Log(title = "角色管理", businessType = BusinessType.DELETE) */
@DeleteMapping("/{roleIds}") @ApiOperation("查询已分配用户角色列表")
public AjaxResult remove(@PathVariable Long[] roleIds) @PreAuthorize("@ss.hasPermi('system:role:list')")
{ @GetMapping("/authUser/allocatedList")
return toAjax(roleService.deleteRoleByIds(roleIds)); public TableDataInfo<SysUser> allocatedList(SysUser user, PageQuery pageQuery) {
} return userService.selectAllocatedList(user, pageQuery);
}
/**
* 获取角色选择框列表 /**
*/ * 查询未分配用户角色列表
@PreAuthorize("@ss.hasPermi('system:role:query')") */
@GetMapping("/optionselect") @ApiOperation("查询未分配用户角色列表")
public AjaxResult optionselect() @PreAuthorize("@ss.hasPermi('system:role:list')")
{ @GetMapping("/authUser/unallocatedList")
return AjaxResult.success(roleService.selectRoleAll()); public TableDataInfo<SysUser> unallocatedList(SysUser user, PageQuery pageQuery) {
} return userService.selectUnallocatedList(user, pageQuery);
} }
/**
* 取消授权用户
*/
@ApiOperation("取消授权用户")
@PreAuthorize("@ss.hasPermi('system:role:edit')")
@Log(title = "角色管理", businessType = BusinessType.GRANT)
@PutMapping("/authUser/cancel")
public AjaxResult<Void> cancelAuthUser(@RequestBody SysUserRole userRole) {
return toAjax(roleService.deleteAuthUser(userRole));
}
/**
* 批量取消授权用户
*/
@ApiOperation("批量取消授权用户")
@ApiImplicitParams({
@ApiImplicitParam(name = "roleId", value = "角色ID", paramType = "query", dataTypeClass = String.class),
@ApiImplicitParam(name = "userIds", value = "用户ID串", paramType = "query", dataTypeClass = String.class)
})
@PreAuthorize("@ss.hasPermi('system:role:edit')")
@Log(title = "角色管理", businessType = BusinessType.GRANT)
@PutMapping("/authUser/cancelAll")
public AjaxResult<Void> cancelAuthUserAll(Long roleId, Long[] userIds) {
return toAjax(roleService.deleteAuthUsers(roleId, userIds));
}
/**
* 批量选择用户授权
*/
@ApiOperation("批量选择用户授权")
@ApiImplicitParams({
@ApiImplicitParam(name = "roleId", value = "角色ID", paramType = "query", dataTypeClass = String.class),
@ApiImplicitParam(name = "userIds", value = "用户ID串", paramType = "query", dataTypeClass = String.class)
})
@PreAuthorize("@ss.hasPermi('system:role:edit')")
@Log(title = "角色管理", businessType = BusinessType.GRANT)
@PutMapping("/authUser/selectAll")
public AjaxResult<Void> selectAuthUserAll(Long roleId, Long[] userIds) {
return toAjax(roleService.insertAuthUsers(roleId, userIds));
}
}

View File

@ -1,205 +1,232 @@
package com.ruoyi.web.controller.system; package com.ruoyi.web.controller.system;
import java.util.List; import cn.hutool.core.bean.BeanUtil;
import java.util.stream.Collectors; import cn.hutool.core.util.ArrayUtil;
import org.springframework.beans.factory.annotation.Autowired; import cn.hutool.core.util.ObjectUtil;
import org.springframework.security.access.prepost.PreAuthorize; import com.ruoyi.common.annotation.Log;
import org.springframework.validation.annotation.Validated; import com.ruoyi.common.constant.UserConstants;
import org.springframework.web.bind.annotation.DeleteMapping; import com.ruoyi.common.core.controller.BaseController;
import org.springframework.web.bind.annotation.GetMapping; import com.ruoyi.common.core.domain.AjaxResult;
import org.springframework.web.bind.annotation.PathVariable; import com.ruoyi.common.core.domain.PageQuery;
import org.springframework.web.bind.annotation.PostMapping; import com.ruoyi.common.core.domain.entity.SysDept;
import org.springframework.web.bind.annotation.PutMapping; import com.ruoyi.common.core.domain.entity.SysRole;
import org.springframework.web.bind.annotation.RequestBody; import com.ruoyi.common.core.domain.entity.SysUser;
import org.springframework.web.bind.annotation.RequestMapping; import com.ruoyi.common.core.page.TableDataInfo;
import org.springframework.web.bind.annotation.RestController; import com.ruoyi.common.enums.BusinessType;
import org.springframework.web.multipart.MultipartFile; import com.ruoyi.common.excel.ExcelResult;
import com.ruoyi.common.annotation.Log; import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.constant.UserConstants; import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.core.controller.BaseController; import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.system.domain.vo.SysUserExportVo;
import com.ruoyi.common.core.domain.entity.SysRole; import com.ruoyi.system.domain.vo.SysUserImportVo;
import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.system.listener.SysUserImportListener;
import com.ruoyi.common.core.domain.model.LoginUser; import com.ruoyi.system.service.ISysPostService;
import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.system.service.ISysRoleService;
import com.ruoyi.common.enums.BusinessType; import com.ruoyi.system.service.ISysUserService;
import com.ruoyi.common.utils.SecurityUtils; import io.swagger.annotations.*;
import com.ruoyi.common.utils.ServletUtils; import lombok.RequiredArgsConstructor;
import com.ruoyi.common.utils.StringUtils; import org.springframework.beans.factory.annotation.Autowired;
import com.ruoyi.common.utils.poi.ExcelUtil; import org.springframework.security.access.prepost.PreAuthorize;
import com.ruoyi.framework.web.service.TokenService; import org.springframework.validation.annotation.Validated;
import com.ruoyi.system.service.ISysPostService; import org.springframework.web.bind.annotation.*;
import com.ruoyi.system.service.ISysRoleService; import org.springframework.web.multipart.MultipartFile;
import com.ruoyi.system.service.ISysUserService;
import javax.servlet.http.HttpServletResponse;
/** import java.util.ArrayList;
* 用户信息 import java.util.HashMap;
* import java.util.List;
* @author ruoyi import java.util.Map;
*/ import java.util.stream.Collectors;
@RestController
@RequestMapping("/system/user") /**
public class SysUserController extends BaseController * 用户信息
{ *
@Autowired * @author Lion Li
private ISysUserService userService; */
@Validated
@Autowired @Api(value = "用户信息控制器", tags = {"用户信息管理"})
private ISysRoleService roleService; @RequiredArgsConstructor(onConstructor_ = @Autowired)
@RestController
@Autowired @RequestMapping("/system/user")
private ISysPostService postService; public class SysUserController extends BaseController {
@Autowired private final ISysUserService userService;
private TokenService tokenService; private final ISysRoleService roleService;
private final ISysPostService postService;
/**
* 获取用户列表 /**
*/ * 获取用户列表
@PreAuthorize("@ss.hasPermi('system:user:list')") */
@GetMapping("/list") @ApiOperation("获取用户列表")
public TableDataInfo list(SysUser user) @PreAuthorize("@ss.hasPermi('system:user:list')")
{ @GetMapping("/list")
startPage(); public TableDataInfo<SysUser> list(SysUser user, PageQuery pageQuery) {
List<SysUser> list = userService.selectUserList(user); return userService.selectPageUserList(user, pageQuery);
return getDataTable(list); }
}
@ApiOperation("导出用户列表")
@Log(title = "用户管理", businessType = BusinessType.EXPORT) @Log(title = "用户管理", businessType = BusinessType.EXPORT)
@PreAuthorize("@ss.hasPermi('system:user:export')") @PreAuthorize("@ss.hasPermi('system:user:export')")
@GetMapping("/export") @PostMapping("/export")
public AjaxResult export(SysUser user) public void export(SysUser user, HttpServletResponse response) {
{ List<SysUser> list = userService.selectUserList(user);
List<SysUser> list = userService.selectUserList(user); List<SysUserExportVo> listVo = BeanUtil.copyToList(list, SysUserExportVo.class);
ExcelUtil<SysUser> util = new ExcelUtil<SysUser>(SysUser.class); for (int i = 0; i < list.size(); i++) {
return util.exportExcel(list, "用户数据"); SysDept dept = list.get(i).getDept();
} SysUserExportVo vo = listVo.get(i);
if (ObjectUtil.isNotEmpty(dept)) {
@Log(title = "用户管理", businessType = BusinessType.IMPORT) vo.setDeptName(dept.getDeptName());
@PreAuthorize("@ss.hasPermi('system:user:import')") vo.setLeader(dept.getLeader());
@PostMapping("/importData") }
public AjaxResult importData(MultipartFile file, boolean updateSupport) throws Exception }
{ ExcelUtil.exportExcel(listVo, "用户数据", SysUserExportVo.class, response);
ExcelUtil<SysUser> util = new ExcelUtil<SysUser>(SysUser.class); }
List<SysUser> userList = util.importExcel(file.getInputStream());
LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest()); @ApiOperation("导入用户列表")
String operName = loginUser.getUsername(); @ApiImplicitParams({
String message = userService.importUser(userList, updateSupport, operName); @ApiImplicitParam(name = "file", value = "导入文件", dataType = "java.io.File", required = true),
return AjaxResult.success(message); })
} @Log(title = "用户管理", businessType = BusinessType.IMPORT)
@PreAuthorize("@ss.hasPermi('system:user:import')")
@GetMapping("/importTemplate") @PostMapping("/importData")
public AjaxResult importTemplate() public AjaxResult<Void> importData(@RequestPart("file") MultipartFile file, boolean updateSupport) throws Exception {
{ ExcelResult<SysUserImportVo> result = ExcelUtil.importExcel(file.getInputStream(), SysUserImportVo.class, new SysUserImportListener(updateSupport));
ExcelUtil<SysUser> util = new ExcelUtil<SysUser>(SysUser.class); return AjaxResult.success(result.getAnalysis());
return util.importTemplateExcel("用户数据"); }
}
@ApiOperation("下载导入模板")
/** @PostMapping("/importTemplate")
* 根据用户编号获取详细信息 public void importTemplate(HttpServletResponse response) {
*/ ExcelUtil.exportExcel(new ArrayList<>(), "用户数据", SysUserImportVo.class, response);
@PreAuthorize("@ss.hasPermi('system:user:query')") }
@GetMapping(value = { "/", "/{userId}" })
public AjaxResult getInfo(@PathVariable(value = "userId", required = false) Long userId) /**
{ * 根据用户编号获取详细信息
AjaxResult ajax = AjaxResult.success(); */
List<SysRole> roles = roleService.selectRoleAll(); @ApiOperation("根据用户编号获取详细信息")
ajax.put("roles", SysUser.isAdmin(userId) ? roles : roles.stream().filter(r -> !r.isAdmin()).collect(Collectors.toList())); @PreAuthorize("@ss.hasPermi('system:user:query')")
ajax.put("posts", postService.selectPostAll()); @GetMapping(value = {"/", "/{userId}"})
if (StringUtils.isNotNull(userId)) public AjaxResult<Map<String, Object>> getInfo(@ApiParam("用户ID") @PathVariable(value = "userId", required = false) Long userId) {
{ userService.checkUserDataScope(userId);
ajax.put(AjaxResult.DATA_TAG, userService.selectUserById(userId)); Map<String, Object> ajax = new HashMap<>();
ajax.put("postIds", postService.selectPostListByUserId(userId)); List<SysRole> roles = roleService.selectRoleAll();
ajax.put("roleIds", roleService.selectRoleListByUserId(userId)); ajax.put("roles", SysUser.isAdmin(userId) ? roles : roles.stream().filter(r -> !r.isAdmin()).collect(Collectors.toList()));
} ajax.put("posts", postService.selectPostAll());
return ajax; if (StringUtils.isNotNull(userId)) {
} ajax.put("user", userService.selectUserById(userId));
ajax.put("postIds", postService.selectPostListByUserId(userId));
/** ajax.put("roleIds", roleService.selectRoleListByUserId(userId));
* 新增用户 }
*/ return AjaxResult.success(ajax);
@PreAuthorize("@ss.hasPermi('system:user:add')") }
@Log(title = "用户管理", businessType = BusinessType.INSERT)
@PostMapping /**
public AjaxResult add(@Validated @RequestBody SysUser user) * 新增用户
{ */
if (UserConstants.NOT_UNIQUE.equals(userService.checkUserNameUnique(user.getUserName()))) @ApiOperation("新增用户")
{ @PreAuthorize("@ss.hasPermi('system:user:add')")
return AjaxResult.error("新增用户'" + user.getUserName() + "'失败,登录账号已存在"); @Log(title = "用户管理", businessType = BusinessType.INSERT)
} @PostMapping
else if (StringUtils.isNotEmpty(user.getPhonenumber()) public AjaxResult<Void> add(@Validated @RequestBody SysUser user) {
&& UserConstants.NOT_UNIQUE.equals(userService.checkPhoneUnique(user))) if (UserConstants.NOT_UNIQUE.equals(userService.checkUserNameUnique(user.getUserName()))) {
{ return AjaxResult.error("新增用户'" + user.getUserName() + "'失败,登录账号已存在");
return AjaxResult.error("新增用户'" + user.getUserName() + "'失败,手机号码已存在"); } else if (StringUtils.isNotEmpty(user.getPhonenumber())
} && UserConstants.NOT_UNIQUE.equals(userService.checkPhoneUnique(user))) {
else if (StringUtils.isNotEmpty(user.getEmail()) return AjaxResult.error("新增用户'" + user.getUserName() + "'失败,手机号码已存在");
&& UserConstants.NOT_UNIQUE.equals(userService.checkEmailUnique(user))) } else if (StringUtils.isNotEmpty(user.getEmail())
{ && UserConstants.NOT_UNIQUE.equals(userService.checkEmailUnique(user))) {
return AjaxResult.error("新增用户'" + user.getUserName() + "'失败,邮箱账号已存在"); return AjaxResult.error("新增用户'" + user.getUserName() + "'失败,邮箱账号已存在");
} }
user.setCreateBy(SecurityUtils.getUsername()); user.setPassword(SecurityUtils.encryptPassword(user.getPassword()));
user.setPassword(SecurityUtils.encryptPassword(user.getPassword())); return toAjax(userService.insertUser(user));
return toAjax(userService.insertUser(user)); }
}
/**
/** * 修改用户
* 修改用户 */
*/ @ApiOperation("修改用户")
@PreAuthorize("@ss.hasPermi('system:user:edit')") @PreAuthorize("@ss.hasPermi('system:user:edit')")
@Log(title = "用户管理", businessType = BusinessType.UPDATE) @Log(title = "用户管理", businessType = BusinessType.UPDATE)
@PutMapping @PutMapping
public AjaxResult edit(@Validated @RequestBody SysUser user) public AjaxResult<Void> edit(@Validated @RequestBody SysUser user) {
{ userService.checkUserAllowed(user);
userService.checkUserAllowed(user); if (StringUtils.isNotEmpty(user.getPhonenumber())
if (StringUtils.isNotEmpty(user.getPhonenumber()) && UserConstants.NOT_UNIQUE.equals(userService.checkPhoneUnique(user))) {
&& UserConstants.NOT_UNIQUE.equals(userService.checkPhoneUnique(user))) return AjaxResult.error("修改用户'" + user.getUserName() + "'失败,手机号码已存在");
{ } else if (StringUtils.isNotEmpty(user.getEmail())
return AjaxResult.error("修改用户'" + user.getUserName() + "'失败,手机号码已存在"); && UserConstants.NOT_UNIQUE.equals(userService.checkEmailUnique(user))) {
} return AjaxResult.error("修改用户'" + user.getUserName() + "'失败,邮箱账号已存在");
else if (StringUtils.isNotEmpty(user.getEmail()) }
&& UserConstants.NOT_UNIQUE.equals(userService.checkEmailUnique(user))) return toAjax(userService.updateUser(user));
{ }
return AjaxResult.error("修改用户'" + user.getUserName() + "'失败,邮箱账号已存在");
} /**
user.setUpdateBy(SecurityUtils.getUsername()); * 删除用户
return toAjax(userService.updateUser(user)); */
} @ApiOperation("删除用户")
@PreAuthorize("@ss.hasPermi('system:user:remove')")
/** @Log(title = "用户管理", businessType = BusinessType.DELETE)
* 删除用户 @DeleteMapping("/{userIds}")
*/ public AjaxResult<Void> remove(@ApiParam("角色ID串") @PathVariable Long[] userIds) {
@PreAuthorize("@ss.hasPermi('system:user:remove')") if (ArrayUtil.contains(userIds, getUserId())) {
@Log(title = "用户管理", businessType = BusinessType.DELETE) return error("当前用户不能删除");
@DeleteMapping("/{userIds}") }
public AjaxResult remove(@PathVariable Long[] userIds) return toAjax(userService.deleteUserByIds(userIds));
{ }
return toAjax(userService.deleteUserByIds(userIds));
} /**
* 重置密码
/** */
* 重置密码 @ApiOperation("重置密码")
*/ @PreAuthorize("@ss.hasPermi('system:user:resetPwd')")
@PreAuthorize("@ss.hasPermi('system:user:resetPwd')") @Log(title = "用户管理", businessType = BusinessType.UPDATE)
@Log(title = "用户管理", businessType = BusinessType.UPDATE) @PutMapping("/resetPwd")
@PutMapping("/resetPwd") public AjaxResult<Void> resetPwd(@RequestBody SysUser user) {
public AjaxResult resetPwd(@RequestBody SysUser user) userService.checkUserAllowed(user);
{ user.setPassword(SecurityUtils.encryptPassword(user.getPassword()));
userService.checkUserAllowed(user); return toAjax(userService.resetPwd(user));
user.setPassword(SecurityUtils.encryptPassword(user.getPassword())); }
user.setUpdateBy(SecurityUtils.getUsername());
return toAjax(userService.resetPwd(user)); /**
} * 状态修改
*/
/** @ApiOperation("状态修改")
* 状态修改 @PreAuthorize("@ss.hasPermi('system:user:edit')")
*/ @Log(title = "用户管理", businessType = BusinessType.UPDATE)
@PreAuthorize("@ss.hasPermi('system:user:edit')") @PutMapping("/changeStatus")
@Log(title = "用户管理", businessType = BusinessType.UPDATE) public AjaxResult<Void> changeStatus(@RequestBody SysUser user) {
@PutMapping("/changeStatus") userService.checkUserAllowed(user);
public AjaxResult changeStatus(@RequestBody SysUser user) return toAjax(userService.updateUserStatus(user));
{ }
userService.checkUserAllowed(user);
user.setUpdateBy(SecurityUtils.getUsername()); /**
return toAjax(userService.updateUserStatus(user)); * 根据用户编号获取授权角色
} */
} @ApiOperation("根据用户编号获取授权角色")
@PreAuthorize("@ss.hasPermi('system:user:query')")
@GetMapping("/authRole/{userId}")
public AjaxResult<Map<String, Object>> authRole(@ApiParam("用户ID") @PathVariable("userId") Long userId) {
SysUser user = userService.selectUserById(userId);
List<SysRole> roles = roleService.selectRolesByUserId(userId);
Map<String, Object> ajax = new HashMap<>();
ajax.put("user", user);
ajax.put("roles", SysUser.isAdmin(userId) ? roles : roles.stream().filter(r -> !r.isAdmin()).collect(Collectors.toList()));
return AjaxResult.success(ajax);
}
/**
* 用户授权角色
*/
@ApiOperation("用户授权角色")
@ApiImplicitParams({
@ApiImplicitParam(name = "userId", value = "用户Id", paramType = "query", dataTypeClass = String.class),
@ApiImplicitParam(name = "roleIds", value = "角色ID串", paramType = "query", dataTypeClass = String.class)
})
@PreAuthorize("@ss.hasPermi('system:user:edit')")
@Log(title = "用户管理", businessType = BusinessType.GRANT)
@PutMapping("/authRole")
public AjaxResult<Void> insertAuthRole(Long userId, Long[] roleIds) {
userService.insertUserAuth(userId, roleIds);
return success();
}
}

View File

@ -1,24 +0,0 @@
package com.ruoyi.web.controller.tool;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import com.ruoyi.common.core.controller.BaseController;
/**
* swagger 接口
*
* @author ruoyi
*/
@Controller
@RequestMapping("/tool/swagger")
public class SwaggerController extends BaseController
{
@PreAuthorize("@ss.hasPermi('tool:swagger:view')")
@GetMapping()
public String index()
{
return redirect("/swagger-ui.html");
}
}

View File

@ -1,175 +0,0 @@
package com.ruoyi.web.controller.tool;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.utils.StringUtils;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import io.swagger.annotations.ApiOperation;
/**
* swagger 用户测试方法
*
* @author ruoyi
*/
@Api("用户信息管理")
@RestController
@RequestMapping("/test/user")
public class TestController extends BaseController
{
private final static Map<Integer, UserEntity> users = new LinkedHashMap<Integer, UserEntity>();
{
users.put(1, new UserEntity(1, "admin", "admin123", "15888888888"));
users.put(2, new UserEntity(2, "ry", "admin123", "15666666666"));
}
@ApiOperation("获取用户列表")
@GetMapping("/list")
public AjaxResult userList()
{
List<UserEntity> userList = new ArrayList<UserEntity>(users.values());
return AjaxResult.success(userList);
}
@ApiOperation("获取用户详细")
@ApiImplicitParam(name = "userId", value = "用户ID", required = true, dataType = "int", paramType = "path")
@GetMapping("/{userId}")
public AjaxResult getUser(@PathVariable Integer userId)
{
if (!users.isEmpty() && users.containsKey(userId))
{
return AjaxResult.success(users.get(userId));
}
else
{
return AjaxResult.error("用户不存在");
}
}
@ApiOperation("新增用户")
@ApiImplicitParam(name = "userEntity", value = "新增用户信息", dataType = "UserEntity")
@PostMapping("/save")
public AjaxResult save(UserEntity user)
{
if (StringUtils.isNull(user) || StringUtils.isNull(user.getUserId()))
{
return AjaxResult.error("用户ID不能为空");
}
return AjaxResult.success(users.put(user.getUserId(), user));
}
@ApiOperation("更新用户")
@ApiImplicitParam(name = "userEntity", value = "新增用户信息", dataType = "UserEntity")
@PutMapping("/update")
public AjaxResult update(UserEntity user)
{
if (StringUtils.isNull(user) || StringUtils.isNull(user.getUserId()))
{
return AjaxResult.error("用户ID不能为空");
}
if (users.isEmpty() || !users.containsKey(user.getUserId()))
{
return AjaxResult.error("用户不存在");
}
users.remove(user.getUserId());
return AjaxResult.success(users.put(user.getUserId(), user));
}
@ApiOperation("删除用户信息")
@ApiImplicitParam(name = "userId", value = "用户ID", required = true, dataType = "int", paramType = "path")
@DeleteMapping("/{userId}")
public AjaxResult delete(@PathVariable Integer userId)
{
if (!users.isEmpty() && users.containsKey(userId))
{
users.remove(userId);
return AjaxResult.success();
}
else
{
return AjaxResult.error("用户不存在");
}
}
}
@ApiModel("用户实体")
class UserEntity
{
@ApiModelProperty("用户ID")
private Integer userId;
@ApiModelProperty("用户名称")
private String username;
@ApiModelProperty("用户密码")
private String password;
@ApiModelProperty("用户手机")
private String mobile;
public UserEntity()
{
}
public UserEntity(Integer userId, String username, String password, String mobile)
{
this.userId = userId;
this.username = username;
this.password = password;
this.mobile = mobile;
}
public Integer getUserId()
{
return userId;
}
public void setUserId(Integer userId)
{
this.userId = userId;
}
public String getUsername()
{
return username;
}
public void setUsername(String username)
{
this.username = username;
}
public String getPassword()
{
return password;
}
public void setPassword(String password)
{
this.password = password;
}
public String getMobile()
{
return mobile;
}
public void setMobile(String mobile)
{
this.mobile = mobile;
}
}

View File

@ -1,125 +0,0 @@
package com.ruoyi.web.core.config;
import java.util.ArrayList;
import java.util.List;
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 com.ruoyi.common.config.RuoYiConfig;
import io.swagger.annotations.ApiOperation;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.ApiKey;
import springfox.documentation.service.AuthorizationScope;
import springfox.documentation.service.Contact;
import springfox.documentation.service.SecurityReference;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spi.service.contexts.SecurityContext;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
/**
* Swagger2的接口配置
*
* @author ruoyi
*/
@Configuration
@EnableSwagger2
public class SwaggerConfig
{
/** 系统基础配置 */
@Autowired
private RuoYiConfig ruoyiConfig;
/** 是否开启swagger */
@Value("${swagger.enabled}")
private boolean enabled;
/** 设置请求的统一前缀 */
@Value("${swagger.pathMapping}")
private String pathMapping;
/**
* 创建API
*/
@Bean
public Docket createRestApi()
{
return new Docket(DocumentationType.SWAGGER_2)
// 是否启用Swagger
.enable(enabled)
// 用来创建该API的基本信息展示在文档的页面中自定义展示的信息
.apiInfo(apiInfo())
// 设置哪些接口暴露给Swagger展示
.select()
// 扫描所有有注解的api用这种方式更灵活
.apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
// 扫描指定包中的swagger注解
// .apis(RequestHandlerSelectors.basePackage("com.ruoyi.project.tool.swagger"))
// 扫描所有 .apis(RequestHandlerSelectors.any())
.paths(PathSelectors.any())
.build()
/* 设置安全模式swagger可以设置访问token */
.securitySchemes(securitySchemes())
.securityContexts(securityContexts())
.pathMapping(pathMapping);
}
/**
* 安全模式这里指定token通过Authorization头请求头传递
*/
private List<ApiKey> securitySchemes()
{
List<ApiKey> apiKeyList = new ArrayList<ApiKey>();
apiKeyList.add(new ApiKey("Authorization", "Authorization", "header"));
return apiKeyList;
}
/**
* 安全上下文
*/
private List<SecurityContext> securityContexts()
{
List<SecurityContext> securityContexts = new ArrayList<>();
securityContexts.add(
SecurityContext.builder()
.securityReferences(defaultAuth())
.forPaths(PathSelectors.regex("^(?!auth).*$"))
.build());
return securityContexts;
}
/**
* 默认的安全上引用
*/
private List<SecurityReference> defaultAuth()
{
AuthorizationScope authorizationScope = new AuthorizationScope("global", "accessEverything");
AuthorizationScope[] authorizationScopes = new AuthorizationScope[1];
authorizationScopes[0] = authorizationScope;
List<SecurityReference> securityReferences = new ArrayList<>();
securityReferences.add(new SecurityReference("Authorization", authorizationScopes));
return securityReferences;
}
/**
* 添加摘要信息
*/
private ApiInfo apiInfo()
{
// 用ApiInfoBuilder进行定制
return new ApiInfoBuilder()
// 设置标题
.title("标题若依管理系统_接口文档")
// 描述
.description("描述:用于管理集团旗下公司的人员信息,具体包括XXX,XXX模块...")
// 作者信息
.contact(new Contact(ruoyiConfig.getName(), null, null))
// 版本
.version("版本号:" + ruoyiConfig.getVersion())
.build();
}
}

View File

@ -1 +0,0 @@
restart.include.json=/com.alibaba.fastjson.*.jar

View File

@ -0,0 +1,160 @@
--- # 监控配置
spring:
boot:
admin:
# Spring Boot Admin Client 客户端的相关配置
client:
# 增加客户端开关
enabled: true
# 设置 Spring Boot Admin Server 地址
url: http://localhost:9090/admin
instance:
prefer-ip: true # 注册实例时,优先使用 IP
username: ruoyi
password: 123456
--- # xxl-job 配置
xxl:
job:
# 执行器开关
enabled: true
# 调度中心地址:如调度中心集群部署存在多个地址则用逗号分隔。
admin-addresses: http://localhost:9100/xxl-job-admin
# 执行器通讯TOKEN非空时启用
access-token: xxl-job
# 执行器配置
executor:
# 执行器AppName执行器心跳注册分组依据为空则关闭自动注册
appname: xxl-job-executor
# 执行器端口号 执行器从9101开始往后写
port: 9101
# 执行器注册默认IP:PORT
address:
# 执行器IP默认自动获取IP
ip:
# 执行器运行日志文件存储磁盘路径
logpath: ./logs/xxl-job
# 执行器日志文件保存天数大于3生效
logretentiondays: 30
--- # 数据源配置
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
# 动态数据源文档 https://www.kancloud.cn/tracy5546/dynamic-datasource/content
dynamic:
# 性能分析插件(有性能损耗 不建议生产环境使用)
p6spy: true
# 设置默认的数据源或者数据源组,默认值即为 master
primary: master
datasource:
# 主库数据源
master:
driverClassName: com.mysql.cj.jdbc.Driver
# jdbc 所有参数配置参考 https://lionli.blog.csdn.net/article/details/122018562
# rewriteBatchedStatements=true 批处理优化 大幅提升批量插入更新删除性能(对数据库有性能损耗 使用批量操作应考虑性能问题)
url: jdbc:mysql://localhost:3306/ry-vue?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true
username: root
password: root
# 从库数据源
slave:
lazy: true
driverClassName: com.mysql.cj.jdbc.Driver
url:
username:
password:
druid:
# 初始连接数
initialSize: 5
# 最小连接池数量
minIdle: 10
# 最大连接池数量
maxActive: 20
# 配置获取连接等待超时的时间
maxWait: 60000
# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
timeBetweenEvictionRunsMillis: 60000
# 配置一个连接在池中最小生存的时间,单位是毫秒
minEvictableIdleTimeMillis: 300000
# 配置一个连接在池中最大生存的时间,单位是毫秒
maxEvictableIdleTimeMillis: 900000
# 配置检测连接是否有效
validationQuery: SELECT 1 FROM DUAL
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
# 注意这个值和druid原生不一致默认启动了stat
filters: stat
--- # druid 配置
spring:
datasource:
druid:
webStatFilter:
enabled: true
statViewServlet:
enabled: true
# 设置白名单,不填则允许所有访问
allow:
url-pattern: /druid/*
# 控制台管理用户名和密码
login-username: ruoyi
login-password: 123456
filter:
stat:
enabled: true
# 慢SQL记录
log-slow-sql: true
slow-sql-millis: 1000
merge-sql: true
wall:
config:
multi-statement-allow: true
--- # redis 单机配置(单机与集群只能开启一个另一个需要注释掉)
spring:
redis:
# 地址
host: localhost
# 端口默认为6379
port: 6379
# 数据库索引
database: 0
# 密码
password:
# 连接超时时间
timeout: 10s
# 是否开启ssl
ssl: false
redisson:
# 线程池数量
threads: 16
# Netty线程池数量
nettyThreads: 32
# 传输模式
transportMode: "NIO"
# 单节点配置
singleServerConfig:
# 客户端名称
clientName: ${ruoyi.name}
# 最小空闲连接数
connectionMinimumIdleSize: 32
# 连接池大小
connectionPoolSize: 64
# 连接空闲超时,单位:毫秒
idleConnectionTimeout: 10000
# 命令等待超时,单位:毫秒
timeout: 3000
# 如果尝试在此限制之内发送成功,则开始启用 timeout 计时。
retryAttempts: 3
# 命令重试发送时间间隔,单位:毫秒
retryInterval: 1500
# 发布和订阅连接的最小空闲连接数
subscriptionConnectionMinimumIdleSize: 1
# 发布和订阅连接池大小
subscriptionConnectionPoolSize: 50
# 单个连接最大订阅数量
subscriptionsPerConnection: 5
# DNS监测时间间隔单位毫秒
dnsMonitoringInterval: 5000

View File

@ -1,57 +0,0 @@
# 数据源配置
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driverClassName: com.mysql.cj.jdbc.Driver
druid:
# 主库数据源
master:
url: jdbc:mysql://localhost:3306/ry-vue?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
username: root
password: password
# 从库数据源
slave:
# 从数据源开关/默认关闭
enabled: false
url:
username:
password:
# 初始连接数
initialSize: 5
# 最小连接池数量
minIdle: 10
# 最大连接池数量
maxActive: 20
# 配置获取连接等待超时的时间
maxWait: 60000
# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
timeBetweenEvictionRunsMillis: 60000
# 配置一个连接在池中最小生存的时间,单位是毫秒
minEvictableIdleTimeMillis: 300000
# 配置一个连接在池中最大生存的时间,单位是毫秒
maxEvictableIdleTimeMillis: 900000
# 配置检测连接是否有效
validationQuery: SELECT 1 FROM DUAL
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
webStatFilter:
enabled: true
statViewServlet:
enabled: true
# 设置白名单,不填则允许所有访问
allow:
url-pattern: /druid/*
# 控制台管理用户名和密码
login-username: ruoyi
login-password: 123456
filter:
stat:
enabled: true
# 慢SQL记录
log-slow-sql: true
slow-sql-millis: 1000
merge-sql: true
wall:
config:
multi-statement-allow: true

View File

@ -0,0 +1,167 @@
--- # 配置临时路径存储
spring:
servlet:
multipart:
# 临时文件存储位置 避免临时文件被系统清理报错
location: /ruoyi/server/temp
--- # 监控配置
spring:
boot:
admin:
# Spring Boot Admin Client 客户端的相关配置
client:
# 增加客户端开关
enabled: true
# 设置 Spring Boot Admin Server 地址
url: http://172.30.0.90:9090/admin
instance:
prefer-ip: true # 注册实例时,优先使用 IP
username: ruoyi
password: 123456
--- # xxl-job 配置
xxl:
job:
# 执行器开关
enabled: true
# 调度中心地址:如调度中心集群部署存在多个地址则用逗号分隔。
admin-addresses: http://172.30.0.92:9100/xxl-job-admin
# 执行器通讯TOKEN非空时启用
access-token: xxl-job
# 执行器配置
executor:
# 执行器AppName执行器心跳注册分组依据为空则关闭自动注册
appname: xxl-job-executor
# 执行器端口号 执行器从9101开始往后写
port: 9101
# 执行器注册默认IP:PORT
address:
# 执行器IP默认自动获取IP
ip:
# 执行器运行日志文件存储磁盘路径
logpath: ./logs/xxl-job
# 执行器日志文件保存天数大于3生效
logretentiondays: 30
--- # 数据源配置
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
# 动态数据源文档 https://www.kancloud.cn/tracy5546/dynamic-datasource/content
dynamic:
# 性能分析插件(有性能损耗 不建议生产环境使用)
p6spy: false
# 设置默认的数据源或者数据源组,默认值即为 master
primary: master
datasource:
# 主库数据源
master:
driverClassName: com.mysql.cj.jdbc.Driver
# jdbc 所有参数配置参考 https://lionli.blog.csdn.net/article/details/122018562
# rewriteBatchedStatements=true 批处理优化 大幅提升批量插入更新删除性能(对数据库有性能损耗 使用批量操作应考虑性能问题)
url: jdbc:mysql://172.30.0.36:3306/ry-vue?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true
username: root
password: root
# 从库数据源
slave:
lazy: true
driverClassName: com.mysql.cj.jdbc.Driver
url:
username:
password:
druid:
# 初始连接数
initialSize: 5
# 最小连接池数量
minIdle: 10
# 最大连接池数量
maxActive: 20
# 配置获取连接等待超时的时间
maxWait: 60000
# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
timeBetweenEvictionRunsMillis: 60000
# 配置一个连接在池中最小生存的时间,单位是毫秒
minEvictableIdleTimeMillis: 300000
# 配置一个连接在池中最大生存的时间,单位是毫秒
maxEvictableIdleTimeMillis: 900000
# 配置检测连接是否有效
validationQuery: SELECT 1 FROM DUAL
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
# 注意这个值和druid原生不一致默认启动了stat
filters: stat
--- # druid 配置
spring:
datasource:
druid:
webStatFilter:
enabled: true
statViewServlet:
enabled: true
# 设置白名单,不填则允许所有访问
allow:
url-pattern: /druid/*
# 控制台管理用户名和密码
login-username: ruoyi
login-password: 123456
filter:
stat:
enabled: true
# 慢SQL记录
log-slow-sql: true
slow-sql-millis: 1000
merge-sql: true
wall:
config:
multi-statement-allow: true
--- # redis 单机配置(单机与集群只能开启一个另一个需要注释掉)
spring:
redis:
# 地址
host: 172.30.0.48
# 端口默认为6379
port: 6379
# 数据库索引
database: 0
# 密码
password:
# 连接超时时间
timeout: 10s
# 是否开启ssl
ssl: false
redisson:
# 线程池数量
threads: 16
# Netty线程池数量
nettyThreads: 32
# 传输模式
transportMode: "NIO"
# 单节点配置
singleServerConfig:
# 客户端名称
clientName: ${ruoyi.name}
# 最小空闲连接数
connectionMinimumIdleSize: 32
# 连接池大小
connectionPoolSize: 64
# 连接空闲超时,单位:毫秒
idleConnectionTimeout: 10000
# 命令等待超时,单位:毫秒
timeout: 3000
# 如果尝试在此限制之内发送成功,则开始启用 timeout 计时。
retryAttempts: 3
# 命令重试发送时间间隔,单位:毫秒
retryInterval: 1500
# 发布和订阅连接的最小空闲连接数
subscriptionConnectionMinimumIdleSize: 1
# 发布和订阅连接池大小
subscriptionConnectionPoolSize: 50
# 单个连接最大订阅数量
subscriptionsPerConnection: 5
# DNS监测时间间隔单位毫秒
dnsMonitoringInterval: 5000

View File

@ -1,121 +1,293 @@
# 项目相关配置 # 项目相关配置
ruoyi: ruoyi:
# 名称 # 名称
name: RuoYi name: RuoYi-Vue-Plus
# 版本 # 版本
version: 3.4.0 version: ${ruoyi-vue-plus.version}
# 版权年份 # 版权年份
copyrightYear: 2021 copyrightYear: 2021
# 实例演示开关 # 实例演示开关
demoEnabled: true demoEnabled: true
# 文件路径 示例( Windows配置D:/ruoyi/uploadPathLinux配置 /home/ruoyi/uploadPath # 获取ip地址开关
profile: D:/ruoyi/uploadPath addressEnabled: true
# 获取ip地址开关 # 缓存懒加载
addressEnabled: false cacheLazy: false
# 验证码类型 math 数组计算 char 字符验证
captchaType: math captcha:
# 页面 <参数设置> 可开启关闭 验证码校验
# 开发环境配置 # 验证码类型 math 数组计算 char 字符验证
server: type: MATH
# 服务器的HTTP端口默认为8080 # line 线段干扰 circle 圆圈干扰 shear 扭曲干扰
port: 8080 category: CIRCLE
servlet: # 数字验证码位数
# 应用的访问路径 numberLength: 1
context-path: / # 字符验证码长度
tomcat: charLength: 4
# tomcat的URI编码
uri-encoding: UTF-8 # 开发环境配置
# tomcat最大线程数默认为200 server:
max-threads: 800 # 服务器的HTTP端口默认为8080
# Tomcat启动初始化的线程数默认值25 port: 8080
min-spare-threads: 30 servlet:
# 应用的访问路径
# 日志配置 context-path: /
logging: # undertow 配置
level: undertow:
com.ruoyi: debug # HTTP post内容的最大大小。当值为-1时默认值为大小是无限的
org.springframework: warn max-http-post-size: -1
# 以下的配置会影响buffer,这些buffer会用于服务器连接的IO操作,有点类似netty的池化内存管理
# Spring配置 # 每块buffer的空间大小,越小的空间被利用越充分
spring: buffer-size: 512
# 资源信息 # 是否分配的直接内存
messages: direct-buffers: true
# 国际化资源文件路径 threads:
basename: i18n/messages # 设置IO线程数, 它主要执行非阻塞的任务,它们会负责多个连接, 默认设置每个CPU核心一个线程
profiles: io: 8
active: druid # 阻塞任务线程池, 当执行类似servlet请求阻塞操作, undertow会从这个线程池中取得线程,它的值设置取决于系统的负载
# 文件上传 worker: 256
servlet:
multipart: # 日志配置
# 单个文件大小 logging:
max-file-size: 10MB level:
# 设置总上传的文件大小 com.ruoyi: @logging.level@
max-request-size: 20MB org.springframework: warn
# 服务模块 config: classpath:logback.xml
devtools:
restart: # Spring配置
# 热部署开关 spring:
enabled: true application:
# redis 配置 name: ${ruoyi.name}
redis: # 资源信息
# 地址 messages:
host: localhost # 国际化资源文件路径
# 端口默认为6379 basename: i18n/messages
port: 6379 profiles:
# 数据库索引 active: @profiles.active@
database: 0 # 文件上传
# 密码 servlet:
password: multipart:
# 连接超时时间 # 单个文件大小
timeout: 10s max-file-size: 10MB
lettuce: # 设置总上传的文件大小
pool: max-request-size: 20MB
# 连接池中的最小空闲连接 # 服务模块
min-idle: 0 devtools:
# 连接池中的最大空闲连接 restart:
max-idle: 8 # 热部署开关
# 连接池的最大数据库连接数 enabled: true
max-active: 8 # 与vue整合部署使用
# #连接池最大阻塞等待时间(使用负值表示没有限制) thymeleaf:
max-wait: -1ms # 将系统模板放置到最前面 否则会与 springboot-admin 页面冲突
template-resolver-order: 1
# token配置 jackson:
token: # 日期格式化
# 令牌自定义标识 date-format: yyyy-MM-dd HH:mm:ss
header: Authorization serialization:
# 令牌密钥 # 格式化输出
secret: abcdefghijklmnopqrstuvwxyz indent_output: false
# 令牌有效期默认30分钟 # 忽略无法转换的对象
expireTime: 30 fail_on_empty_beans: false
deserialization:
# MyBatis配置 # 允许对象忽略json中不存在的属性
mybatis: fail_on_unknown_properties: false
# 搜索指定包别名
typeAliasesPackage: com.ruoyi.**.domain # token配置
# 配置mapper的扫描找到所有的mapper.xml映射文件 token:
mapperLocations: classpath*:mapper/**/*Mapper.xml # 令牌自定义标识
# 加载全局的配置文件 header: Authorization
configLocation: classpath:mybatis/mybatis-config.xml # 令牌密钥
secret: abcdefghijklmnopqrstuvwxyz
# PageHelper分页插件 # 令牌有效期默认30分钟
pagehelper: expireTime: 30
helperDialect: mysql
reasonable: true # security配置
supportMethodsArguments: true security:
params: count=countSql # 登出路径
logout-url: /logout
# Swagger配置 # 匿名路径
swagger: anonymous:
# 是否开启swagger - /login
enabled: true - /register
# 请求前缀 - /captchaImage
pathMapping: /dev-api # swagger 文档配置
- /doc.html
# 防止XSS攻击 - /swagger-resources/**
xss: - /webjars/**
# 过滤开关 - /*/api-docs
enabled: true # druid 监控配置
# 排除链接(多个用逗号分隔) - /druid/**
excludes: /system/notice/* # 用户放行
# 匹配链接 permit-all:
urlPatterns: /system/*,/monitor/*,/tool/* # actuator 监控配置
- /actuator
- /actuator/**
# 重复提交
repeat-submit:
# 全局间隔时间(毫秒)
interval: 5000
# MyBatisPlus配置
# https://baomidou.com/config/
mybatis-plus:
# 不支持多包, 如有需要可在注解配置 或 提升扫包等级
# 例如 com.**.**.mapper
mapperPackage: com.ruoyi.**.mapper
# 对应的 XML 文件位置
mapperLocations: classpath*:mapper/**/*Mapper.xml
# 实体扫描多个package用逗号或者分号分隔
typeAliasesPackage: com.ruoyi.**.domain
# 启动时是否检查 MyBatis XML 文件的存在,默认不检查
checkConfigLocation: false
# 通过该属性可指定 MyBatis 的执行器MyBatis 的执行器总共有三种:
# SIMPLE每个语句创建新的预处理器 REUSE会复用预处理器 BATCH批量执行所有的更新
executorType: SIMPLE
configuration:
# 自动驼峰命名规则camel case映射
mapUnderscoreToCamelCase: true
# 当设置为 true 的时候,懒加载的对象可能被任何懒属性全部加载,否则,每个属性都按需加载。需要和 lazyLoadingEnabled 一起使用。
aggressiveLazyLoading: true
# MyBatis 自动映射策略
# NONE不启用 PARTIAL只对非嵌套 resultMap 自动映射 FULL对所有 resultMap 自动映射
autoMappingBehavior: PARTIAL
# MyBatis 自动映射时未知列或未知属性处理策
# NONE不做处理 WARNING打印相关警告 FAILING抛出异常和详细信息
autoMappingUnknownColumnBehavior: NONE
# Mybatis一级缓存默认为 SESSION
# SESSION session级别缓存 STATEMENT 关闭一级缓存
localCacheScope: SESSION
# 开启Mybatis二级缓存默认为 true
cacheEnabled: false
# 更详细的日志输出 会有性能损耗 org.apache.ibatis.logging.stdout.StdOutImpl
# 关闭日志记录 (可单纯使用 p6spy 分析) org.apache.ibatis.logging.nologging.NoLoggingImpl
# 默认日志输出 org.apache.ibatis.logging.slf4j.Slf4jImpl
logImpl: org.apache.ibatis.logging.nologging.NoLoggingImpl
global-config:
# 是否打印 Logo banner
banner: true
# 是否初始化 SqlRunner
enableSqlRunner: false
dbConfig:
# 主键类型
# AUTO 自增 NONE 空 INPUT 用户输入 ASSIGN_ID 雪花 ASSIGN_UUID 唯一 UUID
idType: AUTO
# 表名是否使用驼峰转下划线命名,只对表名生效
tableUnderline: true
# 大写命名,对表名和字段名均生效
capitalMode: false
# 逻辑已删除值
logicDeleteValue: 2
# 逻辑未删除值
logicNotDeleteValue: 0
# 字段验证策略之 insert,在 insert 的时候的字段验证策略
# IGNORED 忽略 NOT_NULL 非NULL NOT_EMPTY 非空 DEFAULT 默认 NEVER 不加入 SQL
insertStrategy: NOT_NULL
# 字段验证策略之 update,在 update 的时候的字段验证策略
updateStrategy: NOT_NULL
# 字段验证策略之 select,在 select 的时候的字段验证策略既 wrapper 根据内部 entity 生成的 where 条件
where-strategy: NOT_NULL
# Swagger配置
swagger:
# 是否开启swagger
enabled: true
# 请求前缀
pathMapping: /dev-api
# 标题
title: '标题:${ruoyi.name}后台管理系统_接口文档'
# 描述
description: '描述:用于管理集团旗下公司的人员信息,具体包括XXX,XXX模块...'
# 版本
version: '版本号: ${ruoyi-vue-plus.version}'
# 作者信息
contact:
name: Lion Li
email: crazylionli@163.com
url: https://gitee.com/JavaLionLi/RuoYi-Vue-Plus
groups:
- name: 1.演示案例
basePackage: com.ruoyi.demo
- name: 2.系统模块
basePackage: com.ruoyi.web
- name: 3.代码生成模块
basePackage: com.ruoyi.generator
knife4j:
# 是否开启Knife4j增强模式
enable: true
# 是否开启生产环境保护策略
production: @knife4j.production@
# 前端Ui的个性化配置属性
setting:
# 默认语言
language: zh-CN
# 是否显示Footer
enableFooter: false
# 是否开启动态参数调试功能
enableDynamicParameter: true
# 是否在每个Debug调试栏后显示刷新变量按钮
enableReloadCacheParameter: true
# 防止XSS攻击
xss:
# 过滤开关
enabled: true
# 排除链接(多个用逗号分隔)
excludes: /system/notice
# 匹配链接
urlPatterns: /system/*,/monitor/*,/tool/*
# 全局线程池相关配置
thread-pool:
# 是否开启线程池
enabled: false
# 核心线程池大小
corePoolSize: 8
# 最大可创建的线程数
maxPoolSize: 16
# 队列最大长度
queueCapacity: 128
# 线程池维护线程所允许的空闲时间
keepAliveSeconds: 300
# 线程池对拒绝任务(无线程可用)的处理策略
# CALLER_RUNS_POLICY 调用方执行
# DISCARD_OLDEST_POLICY 放弃最旧的
# DISCARD_POLICY 丢弃
# ABORT_POLICY 中止
rejectedExecutionHandler: CALLER_RUNS_POLICY
--- # redisson 缓存配置
redisson:
cacheGroup:
# 用例: @Cacheable(cacheNames="groupId", key="#XXX") 方可使用缓存组配置
- groupId: redissonCacheMap
# 组过期时间(脚本监控)
ttl: 60000
# 组最大空闲时间(脚本监控)
maxIdleTime: 60000
# 组最大长度
maxSize: 0
- groupId: testCache
ttl: 1000
maxIdleTime: 500
--- # 分布式锁 lock4j 全局配置
lock4j:
# 获取分布式锁超时时间,默认为 3000 毫秒
acquire-timeout: 3000
# 分布式锁的超时时间,默认为 30 毫秒
expire: 30000
--- # Actuator 监控端点的配置项
management:
endpoints:
web:
# Actuator 提供的 API 接口的根目录。默认为 /actuator
base-path: /actuator
exposure:
# 需要开放的端点。默认值只打开 health 和 info 两个端点。通过设置 * ,可以开放所有端点。
# 生产环境不建议放开所有 根据项目需求放开即可
include: @endpoints.include@
endpoint:
logfile:
external-file: ./logs/sys-console.log

View File

@ -1,24 +1,8 @@
Application Version: ${ruoyi.version} Application Version: ${ruoyi-vue-plus.version}
Spring Boot Version: ${spring-boot.version} Spring Boot Version: ${spring-boot.version}
//////////////////////////////////////////////////////////////////// __________ _____.___.__ ____ ____ __________.__
// _ooOoo_ // \______ \__ __ ____\__ | |__| \ \ / /_ __ ____ \______ \ | __ __ ______
// o8888888o // | _/ | \/ _ \/ | | | ______ \ Y / | \_/ __ \ ______ | ___/ | | | \/ ___/
// 88" . "88 // | | \ | ( <_> )____ | | /_____/ \ /| | /\ ___/ /_____/ | | | |_| | /\___ \
// (| ^_^ |) // |____|_ /____/ \____// ______|__| \___/ |____/ \___ > |____| |____/____//____ >
// O\ = /O // \/ \/ \/ \/
// ____/`---'\____ //
// .' \\| |// `. //
// / \\||| : |||// \ //
// / _||||| -:- |||||- \ //
// | | \\\ - /// | | //
// | \_| ''\---/'' | | //
// \ .-\__ `-` ___/-. / //
// ___`. .' /--.--\ `. . ___ //
// ."" '< `.___\_<|>_/___.' >'"". //
// | | : `- \`.;`\ _ /`;.`/ - ` : | | //
// \ \ `-. \_ __\ /__ _/ .-` / / //
// ========`-.____`-.___\_____/___.-`____.-'======== //
// `=---=' //
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ //
// 佛祖保佑 永不宕机 永无BUG //
////////////////////////////////////////////////////////////////////

View File

@ -1,36 +1,32 @@
#错误消息 #错误消息
not.null=* 必须填写 not.null=* 必须填写
user.jcaptcha.error=验证码错误 user.jcaptcha.error=验证码错误
user.jcaptcha.expire=验证码已失效 user.jcaptcha.expire=验证码已失效
user.not.exists=用户不存在/密码错误 user.not.exists=对不起, 您的账号:{0} 不存在.
user.password.not.match=用户不存在/密码错误 user.password.not.match=用户不存在/密码错误
user.password.retry.limit.count=密码输入错误{0}次 user.password.retry.limit.count=密码输入错误{0}次
user.password.retry.limit.exceed=密码输入错误{0}次,帐户锁定10分钟 user.password.retry.limit.exceed=密码错误次数过多,帐户锁定{0}分钟
user.password.delete=对不起,您的账号已被删除 user.password.delete=对不起,您的账号{0} 已被删除
user.blocked=户已封禁,请联系管理员 user.blocked=对不起,您的账号:{0} 已禁用,请联系管理员
role.blocked=角色已封禁,请联系管理员 role.blocked=角色已封禁,请联系管理员
user.logout.success=退出成功 user.logout.success=退出成功
length.not.valid=长度必须在{min}到{max}个字符之间
length.not.valid=长度必须在{min}到{max}个字符之间 user.username.not.valid=* 2到20个汉字、字母、数字或下划线组成且必须以非数字开头
user.password.not.valid=* 5-50个字符
user.username.not.valid=* 2到20个汉字、字母、数字或下划线组成且必须以非数字开头 user.email.not.valid=邮箱格式错误
user.password.not.valid=* 5-50个字符 user.mobile.phone.number.not.valid=手机号格式错误
user.login.success=登录成功
user.email.not.valid=邮箱格式错误 user.register.success=注册成功
user.mobile.phone.number.not.valid=手机号格式错误 user.notfound=请重新登录
user.login.success=登录成功 user.forcelogout=管理员强制退出,请重新登录
user.notfound=请重新登录 user.unknown.error=未知错误,请重新登录
user.forcelogout=管理员强制退出,请重新登录 ##文件上传消息
user.unknown.error=未知错误,请重新登录 upload.exceed.maxSize=上传的文件大小超出限制的文件大小!<br/>允许的文件最大大小是:{0}MB
upload.filename.exceed.length=上传的文件名最长{0}个字符
##文件上传消息 ##权限
upload.exceed.maxSize=上传的文件大小超出限制的文件大小!<br/>允许的文件最大大小是:{0}MB no.permission=您没有数据的权限,请联系管理员添加权限 [{0}]
upload.filename.exceed.length=上传的文件名最长{0}个字符 no.create.permission=您没有创建数据的权限,请联系管理员添加权限 [{0}]
no.update.permission=您没有修改数据的权限,请联系管理员添加权限 [{0}]
##权限 no.delete.permission=您没有删除数据的权限,请联系管理员添加权限 [{0}]
no.permission=您没有数据的权限,请联系管理员添加权限 [{0}] no.export.permission=您没有导出数据的权限,请联系管理员添加权限 [{0}]
no.create.permission=您没有创建数据的权限,请联系管理员添加权限 [{0}] no.view.permission=您没有查看数据的权限,请联系管理员添加权限 [{0}]
no.update.permission=您没有修改数据的权限,请联系管理员添加权限 [{0}]
no.delete.permission=您没有删除数据的权限,请联系管理员添加权限 [{0}]
no.export.permission=您没有导出数据的权限,请联系管理员添加权限 [{0}]
no.view.permission=您没有查看数据的权限,请联系管理员添加权限 [{0}]

View File

@ -0,0 +1,32 @@
#错误消息
not.null=* Required fill in
user.jcaptcha.error=Captcha error
user.jcaptcha.expire=Captcha invalid
user.not.exists=Sorry, your account: {0} does not exist
user.password.not.match=User does not exist/Password error
user.password.retry.limit.count=Password input error {0} times
user.password.retry.limit.exceed=Too many password errors, account locked for {0} minutes
user.password.delete=Sorry, your account{0} has been deleted
user.blocked=Sorry, your account: {0} has been disabled. Please contact the administrator
role.blocked=Role disabledplease contact administrators
user.logout.success=Exit successful
length.not.valid=The length must be between {min} and {max} characters
user.username.not.valid=* 2 to 20 chinese characters, letters, numbers or underscores, and must start with a non number
user.password.not.valid=* 5-50 characters
user.email.not.valid=Mailbox format error
user.mobile.phone.number.not.valid=Phone number format error
user.login.success=Login successful
user.register.success=Register successful
user.notfound=Please login again
user.forcelogout=The administrator is forced to exitplease login again
user.unknown.error=Unknown error, please login again
##文件上传消息
upload.exceed.maxSize=The uploaded file size exceeds the limit file size<br/>the maximum allowed file size is{0}MB
upload.filename.exceed.length=The maximum length of uploaded file name is {0} characters
##权限
no.permission=You do not have permission to the dataplease contact your administrator to add permissions [{0}]
no.create.permission=You do not have permission to create dataplease contact your administrator to add permissions [{0}]
no.update.permission=You do not have permission to modify dataplease contact your administrator to add permissions [{0}]
no.delete.permission=You do not have permission to delete dataplease contact your administrator to add permissions [{0}]
no.export.permission=You do not have permission to export dataplease contact your administrator to add permissions [{0}]
no.view.permission=You do not have permission to view dataplease contact your administrator to add permissions [{0}]

View File

@ -0,0 +1,32 @@
#错误消息
not.null=* 必须填写
user.jcaptcha.error=验证码错误
user.jcaptcha.expire=验证码已失效
user.not.exists=对不起, 您的账号:{0} 不存在.
user.password.not.match=用户不存在/密码错误
user.password.retry.limit.count=密码输入错误{0}次
user.password.retry.limit.exceed=密码错误次数过多,帐户锁定{0}分钟
user.password.delete=对不起,您的账号:{0} 已被删除
user.blocked=对不起,您的账号:{0} 已禁用,请联系管理员
role.blocked=角色已封禁,请联系管理员
user.logout.success=退出成功
length.not.valid=长度必须在{min}到{max}个字符之间
user.username.not.valid=* 2到20个汉字、字母、数字或下划线组成且必须以非数字开头
user.password.not.valid=* 5-50个字符
user.email.not.valid=邮箱格式错误
user.mobile.phone.number.not.valid=手机号格式错误
user.login.success=登录成功
user.register.success=注册成功
user.notfound=请重新登录
user.forcelogout=管理员强制退出,请重新登录
user.unknown.error=未知错误,请重新登录
##文件上传消息
upload.exceed.maxSize=上传的文件大小超出限制的文件大小!<br/>允许的文件最大大小是:{0}MB
upload.filename.exceed.length=上传的文件名最长{0}个字符
##权限
no.permission=您没有数据的权限,请联系管理员添加权限 [{0}]
no.create.permission=您没有创建数据的权限,请联系管理员添加权限 [{0}]
no.update.permission=您没有修改数据的权限,请联系管理员添加权限 [{0}]
no.delete.permission=您没有删除数据的权限,请联系管理员添加权限 [{0}]
no.export.permission=您没有导出数据的权限,请联系管理员添加权限 [{0}]
no.view.permission=您没有查看数据的权限,请联系管理员添加权限 [{0}]

View File

@ -1,93 +1,96 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<configuration> <configuration>
<!-- 日志存放路径 --> <property name="log.path" value="./logs"/>
<property name="log.path" value="/home/ruoyi/logs" /> <property name="console.log.pattern"
<!-- 日志输出格式 --> value="%red(%d{yyyy-MM-dd HH:mm:ss}) %green([%thread]) %highlight(%-5level) %boldMagenta(%logger{36}%n) - %msg%n"/>
<property name="log.pattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{20} - [%method,%line] - %msg%n" /> <property name="log.pattern" value="%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n"/>
<!-- 控制台输出 --> <!-- 控制台输出 -->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender"> <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<encoder> <encoder class="com.yomahub.tlog.core.enhance.logback.AspectLogbackEncoder">
<pattern>${log.pattern}</pattern> <pattern>${console.log.pattern}</pattern>
</encoder> <charset>utf-8</charset>
</appender> </encoder>
</appender>
<!-- 系统日志输出 -->
<appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!-- 控制台输出 -->
<file>${log.path}/sys-info.log</file> <appender name="file_console" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 循环政策:基于时间创建日志文件 --> <file>${log.path}/sys-console.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 日志文件名格式 --> <!-- 日志文件名格式 -->
<fileNamePattern>${log.path}/sys-info.%d{yyyy-MM-dd}.log</fileNamePattern> <fileNamePattern>${log.path}/sys-console.%d{yyyy-MM-dd}.log</fileNamePattern>
<!-- 日志最大的历史 60--> <!-- 日志最大 1-->
<maxHistory>60</maxHistory> <maxHistory>1</maxHistory>
</rollingPolicy> </rollingPolicy>
<encoder> <encoder class="com.yomahub.tlog.core.enhance.logback.AspectLogbackEncoder">
<pattern>${log.pattern}</pattern> <pattern>${log.pattern}</pattern>
</encoder> <charset>utf-8</charset>
<filter class="ch.qos.logback.classic.filter.LevelFilter"> </encoder>
<!-- 过滤的级别 --> <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>INFO</level> <!-- 过滤的级别 -->
<!-- 匹配时的操作:接收(记录) --> <level>INFO</level>
<onMatch>ACCEPT</onMatch> </filter>
<!-- 不匹配时的操作:拒绝(不记录) --> </appender>
<onMismatch>DENY</onMismatch>
</filter> <!-- 系统日志输出 -->
</appender> <appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.path}/sys-info.log</file>
<appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!-- 循环政策:基于时间创建日志文件 -->
<file>${log.path}/sys-error.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 循环政策:基于时间创建日志文件 --> <!-- 日志文件名格式 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${log.path}/sys-info.%d{yyyy-MM-dd}.log</fileNamePattern>
<!-- 日志文件名格式 --> <!-- 日志最大的历史 60天 -->
<fileNamePattern>${log.path}/sys-error.%d{yyyy-MM-dd}.log</fileNamePattern> <maxHistory>60</maxHistory>
<!-- 日志最大的历史 60天 --> </rollingPolicy>
<maxHistory>60</maxHistory> <encoder class="com.yomahub.tlog.core.enhance.logback.AspectLogbackEncoder">
</rollingPolicy> <pattern>${log.pattern}</pattern>
<encoder> </encoder>
<pattern>${log.pattern}</pattern> <filter class="ch.qos.logback.classic.filter.LevelFilter">
</encoder> <!-- 过滤的级别 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>INFO</level>
<!-- 过滤的级别 --> <!-- 匹配时的操作:接收(记录) -->
<level>ERROR</level> <onMatch>ACCEPT</onMatch>
<!-- 匹配时的操作:接收(记录) --> <!-- 匹配时的操作:拒绝(不记录) -->
<onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch>
<!-- 不匹配时的操作:拒绝(不记录) --> </filter>
<onMismatch>DENY</onMismatch> </appender>
</filter>
</appender> <appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.path}/sys-error.log</file>
<!-- 用户访问日志输出 --> <!-- 循环政策:基于时间创建日志文件 -->
<appender name="sys-user" class="ch.qos.logback.core.rolling.RollingFileAppender"> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<file>${log.path}/sys-user.log</file> <!-- 日志文件名格式 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${log.path}/sys-error.%d{yyyy-MM-dd}.log</fileNamePattern>
<!-- 按天回滚 daily --> <!-- 日志最大的历史 60天 -->
<fileNamePattern>${log.path}/sys-user.%d{yyyy-MM-dd}.log</fileNamePattern> <maxHistory>60</maxHistory>
<!-- 日志最大的历史 60天 --> </rollingPolicy>
<maxHistory>60</maxHistory> <encoder class="com.yomahub.tlog.core.enhance.logback.AspectLogbackEncoder">
</rollingPolicy> <pattern>${log.pattern}</pattern>
<encoder> </encoder>
<pattern>${log.pattern}</pattern> <filter class="ch.qos.logback.classic.filter.LevelFilter">
</encoder> <!-- 过滤的级别 -->
</appender> <level>ERROR</level>
<!-- 匹配时的操作:接收(记录) -->
<!-- 系统模块日志级别控制 --> <onMatch>ACCEPT</onMatch>
<logger name="com.ruoyi" level="info" /> <!-- 不匹配时的操作:拒绝(不记录) -->
<!-- Spring日志级别控制 --> <onMismatch>DENY</onMismatch>
<logger name="org.springframework" level="warn" /> </filter>
</appender>
<root level="info">
<appender-ref ref="console" /> <!-- 系统模块日志级别控制 -->
</root> <logger name="com.ruoyi" level="info" />
<!-- Spring日志级别控制 -->
<!--系统操作日志--> <logger name="org.springframework" level="warn" />
<root level="info">
<appender-ref ref="file_info" /> <root level="info">
<appender-ref ref="file_error" /> <appender-ref ref="console" />
</root> </root>
<!--系统用户操作日志--> <!--系统操作日志-->
<logger name="sys-user" level="info"> <root level="info">
<appender-ref ref="sys-user"/> <appender-ref ref="file_info" />
</logger> <appender-ref ref="file_error" />
</configuration> <appender-ref ref="file_console" />
</root>
</configuration>

View File

@ -1,15 +0,0 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<settings>
<setting name="cacheEnabled" value="true" /> <!-- 全局映射器启用缓存 -->
<setting name="useGeneratedKeys" value="true" /> <!-- 允许 JDBC 支持自动生成主键 -->
<setting name="defaultExecutorType" value="REUSE" /> <!-- 配置默认的执行器 -->
<setting name="logImpl" value="SLF4J" /> <!-- 指定 MyBatis 所用日志的具体实现 -->
<!-- <setting name="mapUnderscoreToCamelCase" value="true"/> 驼峰式命名 -->
</settings>
</configuration>

View File

@ -0,0 +1,24 @@
# p6spy 性能分析插件配置文件
modulelist=com.baomidou.mybatisplus.extension.p6spy.MybatisPlusLogFactory,com.p6spy.engine.outage.P6OutageFactory
# 自定义日志打印
logMessageFormat=com.baomidou.mybatisplus.extension.p6spy.P6SpyLogger
#日志输出到控制台
appender=com.baomidou.mybatisplus.extension.p6spy.StdoutLogger
# 使用日志系统记录 sql
#appender=com.p6spy.engine.spy.appender.Slf4JLogger
# 设置 p6spy driver 代理
#deregisterdrivers=true
# 取消JDBC URL前缀
useprefix=true
# 配置记录 Log 例外,可去掉的结果集有error,info,batch,debug,statement,commit,rollback,result,resultset.
excludecategories=info,debug,result,commit,resultset
# 日期格式
dateformat=yyyy-MM-dd HH:mm:ss
# 实际驱动可多个
#driverlist=org.h2.Driver
# 是否开启慢SQL记录
outagedetection=true
# 慢SQL记录标准 2 秒
outagedetectioninterval=2
# 是否过滤 Log
filter=true

View File

@ -1,124 +1,164 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" <project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent> <parent>
<artifactId>ruoyi</artifactId> <artifactId>ruoyi-vue-plus</artifactId>
<groupId>com.ruoyi</groupId> <groupId>com.ruoyi</groupId>
<version>3.4.0</version> <version>3.5.0</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<artifactId>ruoyi-common</artifactId> <artifactId>ruoyi-common</artifactId>
<description> <description>
common通用工具 common通用工具
</description> </description>
<dependencies> <dependencies>
<!-- Spring框架基本的核心工具 --> <!-- Spring框架基本的核心工具 -->
<dependency> <dependency>
<groupId>org.springframework</groupId> <groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId> <artifactId>spring-context-support</artifactId>
</dependency> </dependency>
<!-- SpringWeb模块 --> <!-- SpringWeb模块 -->
<dependency> <dependency>
<groupId>org.springframework</groupId> <groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId> <artifactId>spring-web</artifactId>
</dependency> </dependency>
<!-- spring security 安全认证 --> <!-- spring security 安全认证 -->
<dependency> <dependency>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId> <artifactId>spring-boot-starter-security</artifactId>
</dependency> </dependency>
<!-- pagehelper 分页插件 --> <!-- 自定义验证注解 -->
<dependency> <dependency>
<groupId>com.github.pagehelper</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId> <artifactId>spring-boot-starter-validation</artifactId>
</dependency> </dependency>
<!-- 自定义验证注解 --> <!--常用工具类 -->
<dependency> <dependency>
<groupId>javax.validation</groupId> <groupId>org.apache.commons</groupId>
<artifactId>validation-api</artifactId> <artifactId>commons-lang3</artifactId>
</dependency> </dependency>
<!--常用工具类 --> <!-- JSON工具类 -->
<dependency> <dependency>
<groupId>org.apache.commons</groupId> <groupId>com.fasterxml.jackson.core</groupId>
<artifactId>commons-lang3</artifactId> <artifactId>jackson-databind</artifactId>
</dependency> </dependency>
<!-- JSON工具 --> <!-- excel工具 -->
<dependency> <dependency>
<groupId>com.fasterxml.jackson.core</groupId> <groupId>org.apache.poi</groupId>
<artifactId>jackson-databind</artifactId> <artifactId>poi-ooxml</artifactId>
</dependency> </dependency>
<!-- 阿里JSON解析器 --> <dependency>
<dependency> <groupId>com.alibaba</groupId>
<groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId>
<artifactId>fastjson</artifactId> </dependency>
</dependency>
<dependency>
<!-- io常用工具类 --> <groupId>cglib</groupId>
<dependency> <artifactId>cglib</artifactId>
<groupId>commons-io</groupId> </dependency>
<artifactId>commons-io</artifactId>
</dependency> <!-- yml解析器 -->
<dependency>
<!-- 文件上传工具类 --> <groupId>org.yaml</groupId>
<dependency> <artifactId>snakeyaml</artifactId>
<groupId>commons-fileupload</groupId> </dependency>
<artifactId>commons-fileupload</artifactId>
</dependency> <!-- jdk11 缺失依赖 jaxb-->
<dependency>
<!-- excel工具 --> <groupId>com.sun.xml.bind</groupId>
<dependency> <artifactId>jaxb-impl</artifactId>
<groupId>org.apache.poi</groupId> </dependency>
<artifactId>poi-ooxml</artifactId>
</dependency> <!-- servlet包 -->
<dependency>
<!-- yml解析器 --> <groupId>javax.servlet</groupId>
<dependency> <artifactId>javax.servlet-api</artifactId>
<groupId>org.yaml</groupId> </dependency>
<artifactId>snakeyaml</artifactId>
</dependency> <dependency>
<groupId>com.baomidou</groupId>
<!--Token生成与解析--> <artifactId>mybatis-plus-boot-starter</artifactId>
<dependency> </dependency>
<groupId>io.jsonwebtoken</groupId> <dependency>
<artifactId>jjwt</artifactId> <groupId>com.baomidou</groupId>
</dependency> <artifactId>mybatis-plus-extension</artifactId>
</dependency>
<!-- redis 缓存操作 -->
<dependency> <!-- dynamic-datasource 多数据源-->
<groupId>org.springframework.boot</groupId> <dependency>
<artifactId>spring-boot-starter-data-redis</artifactId> <groupId>com.baomidou</groupId>
</dependency> <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
</dependency>
<!-- pool 对象池 -->
<dependency> <dependency>
<groupId>org.apache.commons</groupId> <groupId>cn.hutool</groupId>
<artifactId>commons-pool2</artifactId> <artifactId>hutool-core</artifactId>
</dependency> </dependency>
<!-- 解析客户端操作系统、浏览器等 --> <dependency>
<dependency> <groupId>cn.hutool</groupId>
<groupId>eu.bitwalker</groupId> <artifactId>hutool-http</artifactId>
<artifactId>UserAgentUtils</artifactId> </dependency>
</dependency>
<dependency>
<!-- servlet包 --> <groupId>cn.hutool</groupId>
<dependency> <artifactId>hutool-captcha</artifactId>
<groupId>javax.servlet</groupId> </dependency>
<artifactId>javax.servlet-api</artifactId>
</dependency> <dependency>
<groupId>cn.hutool</groupId>
</dependencies> <artifactId>hutool-jwt</artifactId>
</dependency>
</project>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-extra</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>knife4j-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>io.swagger</groupId>
<artifactId>swagger-annotations</artifactId>
</dependency>
<!-- 自动生成YML配置关联JSON文件 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
</dependency>
<!--redisson-->
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>lock4j-redisson-spring-boot-starter</artifactId>
</dependency>
</dependencies>
</project>

View File

@ -0,0 +1,26 @@
package com.ruoyi.common.annotation;
import java.lang.annotation.*;
/**
* 数据权限
*
* @author Lion Li
* @version 3.5.0
*/
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface DataColumn {
/**
* 占位符关键字
*/
String key() default "deptName";
/**
* 占位符替换值
*/
String value() default "dept_id";
}

View File

@ -0,0 +1,18 @@
package com.ruoyi.common.annotation;
import java.lang.annotation.*;
/**
* 数据权限组
*
* @author Lion Li
* @version 3.5.0
*/
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface DataPermission {
DataColumn[] value();
}

View File

@ -1,28 +1,32 @@
package com.ruoyi.common.annotation; package com.ruoyi.common.annotation;
import java.lang.annotation.Documented; import java.lang.annotation.*;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention; /**
import java.lang.annotation.RetentionPolicy; * 数据权限过滤注解
import java.lang.annotation.Target; *
* @author ruoyi
/** * @deprecated 3.6.0 移除 {@link com.ruoyi.common.annotation.DataPermission}
* 数据权限过滤注解 */
* @Target(ElementType.METHOD)
* @author ruoyi @Retention(RetentionPolicy.RUNTIME)
*/ @Documented
@Target(ElementType.METHOD) @Deprecated
@Retention(RetentionPolicy.RUNTIME) public @interface DataScope {
@Documented
public @interface DataScope /**
{ * 部门表的别名
/** */
* 部门表的别名 String deptAlias() default "";
*/
public String deptAlias() default ""; /**
* 用户表的别名
/** */
* 用户表的别名 String userAlias() default "";
*/
public String userAlias() default ""; /**
} * 是否过滤用户权限
*/
boolean isUser() default false;
}

View File

@ -1,28 +1,25 @@
package com.ruoyi.common.annotation; package com.ruoyi.common.annotation;
import java.lang.annotation.Documented; import com.ruoyi.common.enums.DataSourceType;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited; import java.lang.annotation.*;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy; /**
import java.lang.annotation.Target; * 自定义多数据源切换注解
import com.ruoyi.common.enums.DataSourceType; * <p>
* 优先级:先方法,后类,如果方法覆盖了类上的数据源类型,以方法的为准,否则以类上的为准
/** *
* 自定义多数据源切换注解 * @author ruoyi
* * @deprecated 3.6.0 移除 使用原生注解处理 方法更全 {@link com.baomidou.dynamic.datasource.annotation.DS}
* 优先级:先方法,后类,如果方法覆盖了类上的数据源类型,以方法的为准,否则以类上的为准 */
* @Target({ElementType.METHOD, ElementType.TYPE})
* @author ruoyi @Retention(RetentionPolicy.RUNTIME)
*/ @Documented
@Target({ ElementType.METHOD, ElementType.TYPE }) @Inherited
@Retention(RetentionPolicy.RUNTIME) @Deprecated
@Documented public @interface DataSource {
@Inherited /**
public @interface DataSource * 切换数据源名称
{ */
/** DataSourceType value() default DataSourceType.MASTER;
* 切换数据源名称 }
*/
public DataSourceType value() default DataSourceType.MASTER;
}

View File

@ -1,165 +0,0 @@
package com.ruoyi.common.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.math.BigDecimal;
/**
* 自定义导出Excel数据注解
*
* @author ruoyi
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface Excel
{
/**
* 导出时在excel中排序
*/
public int sort() default Integer.MAX_VALUE;
/**
* 导出到Excel中的名字.
*/
public String name() default "";
/**
* 日期格式, 如: yyyy-MM-dd
*/
public String dateFormat() default "";
/**
* 如果是字典类型请设置字典的type值 (如: sys_user_sex)
*/
public String dictType() default "";
/**
* 读取内容转表达式 (如: 0=男,1=女,2=未知)
*/
public String readConverterExp() default "";
/**
* 分隔符,读取字符串组内容
*/
public String separator() default ",";
/**
* BigDecimal 精度 默认:-1(默认不开启BigDecimal格式化)
*/
public int scale() default -1;
/**
* BigDecimal 舍入规则 默认:BigDecimal.ROUND_HALF_EVEN
*/
public int roundingMode() default BigDecimal.ROUND_HALF_EVEN;
/**
* 导出类型0数字 1字符串
*/
public ColumnType cellType() default ColumnType.STRING;
/**
* 导出时在excel中每个列的高度 单位为字符
*/
public double height() default 14;
/**
* 导出时在excel中每个列的宽 单位为字符
*/
public double width() default 16;
/**
* 文字后缀,如% 90 变成90%
*/
public String suffix() default "";
/**
* 当值为空时,字段的默认值
*/
public String defaultValue() default "";
/**
* 提示信息
*/
public String prompt() default "";
/**
* 设置只能选择不能输入的列内容.
*/
public String[] combo() default {};
/**
* 是否导出数据,应对需求:有时我们需要导出一份模板,这是标题需要但内容需要用户手工填写.
*/
public boolean isExport() default true;
/**
* 另一个类中的属性名称,支持多级获取,以小数点隔开
*/
public String targetAttr() default "";
/**
* 是否自动统计数据,在最后追加一行统计数据总和
*/
public boolean isStatistics() default false;
/**
* 导出字段对齐方式0默认1靠左2居中3靠右
*/
Align align() default Align.AUTO;
public enum Align
{
AUTO(0), LEFT(1), CENTER(2), RIGHT(3);
private final int value;
Align(int value)
{
this.value = value;
}
public int value()
{
return this.value;
}
}
/**
* 字段类型0导出导入1仅导出2仅导入
*/
Type type() default Type.ALL;
public enum Type
{
ALL(0), EXPORT(1), IMPORT(2);
private final int value;
Type(int value)
{
this.value = value;
}
public int value()
{
return this.value;
}
}
public enum ColumnType
{
NUMERIC(0), STRING(1), IMAGE(2);
private final int value;
ColumnType(int value)
{
this.value = value;
}
public int value()
{
return this.value;
}
}
}

View File

@ -0,0 +1,30 @@
package com.ruoyi.common.annotation;
import java.lang.annotation.*;
/**
* 字典格式化
*
* @author Lion Li
*/
@Target({ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
public @interface ExcelDictFormat {
/**
* 如果是字典类型请设置字典的type值 (如: sys_user_sex)
*/
String dictType() default "";
/**
* 读取内容转表达式 (如: 0=男,1=女,2=未知)
*/
String readConverterExp() default "";
/**
* 分隔符,读取字符串组内容
*/
String separator() default ",";
}

View File

@ -1,18 +0,0 @@
package com.ruoyi.common.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* Excel注解集
*
* @author ruoyi
*/
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Excels
{
Excel[] value();
}

View File

@ -1,41 +1,41 @@
package com.ruoyi.common.annotation; package com.ruoyi.common.annotation;
import java.lang.annotation.Documented; import com.ruoyi.common.enums.BusinessType;
import java.lang.annotation.ElementType; import com.ruoyi.common.enums.OperatorType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy; import java.lang.annotation.*;
import java.lang.annotation.Target;
import com.ruoyi.common.enums.BusinessType; /**
import com.ruoyi.common.enums.OperatorType; * 自定义操作日志记录注解
*
/** * @author ruoyi
* 自定义操作日志记录注解 */
* @Target({ElementType.PARAMETER, ElementType.METHOD})
* @author ruoyi @Retention(RetentionPolicy.RUNTIME)
* @Documented
*/ public @interface Log {
@Target({ ElementType.PARAMETER, ElementType.METHOD }) /**
@Retention(RetentionPolicy.RUNTIME) * 模块
@Documented */
public @interface Log String title() default "";
{
/** /**
* 模块 * 功能
*/ */
public String title() default ""; BusinessType businessType() default BusinessType.OTHER;
/** /**
* 功能 * 操作人类别
*/ */
public BusinessType businessType() default BusinessType.OTHER; OperatorType operatorType() default OperatorType.MANAGE;
/** /**
* 操作人类别 * 是否保存请求的参数
*/ */
public OperatorType operatorType() default OperatorType.MANAGE; boolean isSaveRequestData() default true;
/** /**
* 是否保存请求的参数 * 是否保存响应的参数
*/ */
public boolean isSaveRequestData() default true; boolean isSaveResponseData() default true;
} }

View File

@ -0,0 +1,36 @@
package com.ruoyi.common.annotation;
import com.ruoyi.common.constant.Constants;
import com.ruoyi.common.enums.LimitType;
import java.lang.annotation.*;
/**
* 限流注解
*
* @author Lion Li
*/
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface RateLimiter {
/**
* 限流key
*/
String key() default Constants.RATE_LIMIT_KEY;
/**
* 限流时间,单位秒
*/
int time() default 60;
/**
* 限流次数
*/
int count() default 100;
/**
* 限流类型
*/
LimitType limitType() default LimitType.DEFAULT;
}

View File

@ -1,23 +1,29 @@
package com.ruoyi.common.annotation; package com.ruoyi.common.annotation;
import java.lang.annotation.Documented; import java.lang.annotation.*;
import java.lang.annotation.ElementType; import java.util.concurrent.TimeUnit;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention; /**
import java.lang.annotation.RetentionPolicy; * 自定义注解防止表单重复提交
import java.lang.annotation.Target; *
* @author Lion Li
/** */
* 自定义注解防止表单重复提交 @Inherited
* @Target(ElementType.METHOD)
* @author ruoyi @Retention(RetentionPolicy.RUNTIME)
* @Documented
*/ public @interface RepeatSubmit {
@Inherited
@Target(ElementType.METHOD) /**
@Retention(RetentionPolicy.RUNTIME) * 间隔时间(ms),小于此时间视为重复提交
@Documented */
public @interface RepeatSubmit int interval() default 5000;
{
TimeUnit timeUnit() default TimeUnit.MILLISECONDS;
}
/**
* 提示消息
*/
String message() default "不允许重复提交,请稍候再试";
}

View File

@ -0,0 +1,85 @@
package com.ruoyi.common.captcha;
import cn.hutool.captcha.generator.CodeGenerator;
import cn.hutool.core.math.Calculator;
import cn.hutool.core.util.CharUtil;
import cn.hutool.core.util.RandomUtil;
import com.ruoyi.common.utils.StringUtils;
/**
* 无符号计算生成器
*
* @author Lion Li
*/
public class UnsignedMathGenerator implements CodeGenerator {
private static final long serialVersionUID = -5514819971774091076L;
private static final String operators = "+-*";
/**
* 参与计算数字最大长度
*/
private final int numberLength;
/**
* 构造
*/
public UnsignedMathGenerator() {
this(2);
}
/**
* 构造
*
* @param numberLength 参与计算最大数字位数
*/
public UnsignedMathGenerator(int numberLength) {
this.numberLength = numberLength;
}
@Override
public String generate() {
final int limit = getLimit();
int min = RandomUtil.randomInt(limit);
int max = RandomUtil.randomInt(min, limit);
String number1 = Integer.toString(max);
String number2 = Integer.toString(min);
number1 = StringUtils.rightPad(number1, this.numberLength, CharUtil.SPACE);
number2 = StringUtils.rightPad(number2, this.numberLength, CharUtil.SPACE);
return number1 + RandomUtil.randomChar(operators) + number2 + '=';
}
@Override
public boolean verify(String code, String userInputCode) {
int result;
try {
result = Integer.parseInt(userInputCode);
} catch (NumberFormatException e) {
// 用户输入非数字
return false;
}
final int calculateResult = (int) Calculator.conversion(code);
return result == calculateResult;
}
/**
* 获取验证码长度
*
* @return 验证码长度
*/
public int getLength() {
return this.numberLength * 2 + 2;
}
/**
* 根据长度获取参与计算数字最大值
*
* @return 最大值
*/
private int getLimit() {
return Integer.parseInt("1" + StringUtils.repeat('0', this.numberLength));
}
}

View File

@ -1,116 +1,56 @@
package com.ruoyi.common.config; package com.ruoyi.common.config;
import org.springframework.boot.context.properties.ConfigurationProperties; import lombok.Data;
import org.springframework.stereotype.Component; import lombok.Getter;
import lombok.experimental.Accessors;
/** import org.springframework.boot.context.properties.ConfigurationProperties;
* 读取项目相关配置 import org.springframework.stereotype.Component;
*
* @author ruoyi /**
*/ * 读取项目相关配置
@Component *
@ConfigurationProperties(prefix = "ruoyi") * @author Lion Li
public class RuoYiConfig */
{
/** 项目名称 */ @Data
private String name; @Accessors(chain = true)
@Component
/** 版本 */ @ConfigurationProperties(prefix = "ruoyi")
private String version; public class RuoYiConfig {
/** 版权年份 */ /**
private String copyrightYear; * 项目名称
*/
/** 实例演示开关 */ private String name;
private boolean demoEnabled;
/**
/** 上传路径 */ * 版本
private static String profile; */
private String version;
/** 获取地址开关 */
private static boolean addressEnabled; /**
* 版权年份
public String getName() */
{ private String copyrightYear;
return name;
} /**
* 实例演示开关
public void setName(String name) */
{ private boolean demoEnabled;
this.name = name;
} /**
* 缓存懒加载
public String getVersion() */
{ private boolean cacheLazy;
return version;
} /**
* 获取地址开关
public void setVersion(String version) */
{ @Getter
this.version = version; private static boolean addressEnabled;
}
public void setAddressEnabled(boolean addressEnabled) {
public String getCopyrightYear() RuoYiConfig.addressEnabled = addressEnabled;
{ }
return copyrightYear;
} }
public void setCopyrightYear(String copyrightYear)
{
this.copyrightYear = copyrightYear;
}
public boolean isDemoEnabled()
{
return demoEnabled;
}
public void setDemoEnabled(boolean demoEnabled)
{
this.demoEnabled = demoEnabled;
}
public static String getProfile()
{
return profile;
}
public void setProfile(String profile)
{
RuoYiConfig.profile = profile;
}
public static boolean isAddressEnabled()
{
return addressEnabled;
}
public void setAddressEnabled(boolean addressEnabled)
{
RuoYiConfig.addressEnabled = addressEnabled;
}
/**
* 获取头像上传路径
*/
public static String getAvatarPath()
{
return getProfile() + "/avatar";
}
/**
* 获取下载路径
*/
public static String getDownloadPath()
{
return getProfile() + "/download/";
}
/**
* 获取上传路径
*/
public static String getUploadPath()
{
return getProfile() + "/upload";
}
}

View File

@ -1,129 +1,151 @@
package com.ruoyi.common.constant; package com.ruoyi.common.constant;
/**
* 通用常量信息 /**
* * 通用常量信息
* @author ruoyi *
*/ * @author ruoyi
public class Constants */
{ public interface Constants {
/**
* UTF-8 字符集 /**
*/ * UTF-8 字符集
public static final String UTF8 = "UTF-8"; */
String UTF8 = "UTF-8";
/**
* GBK 字符集 /**
*/ * GBK 字符集
public static final String GBK = "GBK"; */
String GBK = "GBK";
/**
* http请求 /**
*/ * http请求
public static final String HTTP = "http://"; */
String HTTP = "http://";
/**
* https请求 /**
*/ * https请求
public static final String HTTPS = "https://"; */
String HTTPS = "https://";
/**
* 通用成功标识 /**
*/ * 通用成功标识
public static final String SUCCESS = "0"; */
String SUCCESS = "0";
/**
* 通用失败标识 /**
*/ * 通用失败标识
public static final String FAIL = "1"; */
String FAIL = "1";
/**
* 登录成功 /**
*/ * 登录成功
public static final String LOGIN_SUCCESS = "Success"; */
String LOGIN_SUCCESS = "Success";
/**
* 注销 /**
*/ * 注销
public static final String LOGOUT = "Logout"; */
String LOGOUT = "Logout";
/**
* 登录失败 /**
*/ * 注册
public static final String LOGIN_FAIL = "Error"; */
String REGISTER = "Register";
/**
* 验证码 redis key /**
*/ * 登录失败
public static final String CAPTCHA_CODE_KEY = "captcha_codes:"; */
String LOGIN_FAIL = "Error";
/**
* 登录用户 redis key /**
*/ * 验证码 redis key
public static final String LOGIN_TOKEN_KEY = "login_tokens:"; */
String CAPTCHA_CODE_KEY = "captcha_codes:";
/**
* 防重提交 redis key /**
*/ * 登录用户 redis key
public static final String REPEAT_SUBMIT_KEY = "repeat_submit:"; */
String LOGIN_TOKEN_KEY = "login_tokens:";
/**
* 验证码有效期(分钟) /**
*/ * 防重提交 redis key
public static final Integer CAPTCHA_EXPIRATION = 2; */
String REPEAT_SUBMIT_KEY = "repeat_submit:";
/**
* 令牌 /**
*/ * 限流 redis key
public static final String TOKEN = "token"; */
String RATE_LIMIT_KEY = "rate_limit:";
/**
* 令牌前缀 /**
*/ * 验证码有效期(分钟)
public static final String TOKEN_PREFIX = "Bearer "; */
Integer CAPTCHA_EXPIRATION = 2;
/**
* 令牌前缀 /**
*/ * 登陆错误 redis key
public static final String LOGIN_USER_KEY = "login_user_key"; */
String LOGIN_ERROR = "login_error:";
/**
* 用户ID /**
*/ * 登录错误次数
public static final String JWT_USERID = "userid"; */
Integer LOGIN_ERROR_NUMBER = 5;
/**
* 用户名称 /**
*/ * 登录错误限制时间(分钟)
public static final String JWT_USERNAME = "sub"; */
Integer LOGIN_ERROR_LIMIT_TIME = 10;
/**
* 用户头像 /**
*/ * 令牌
public static final String JWT_AVATAR = "avatar"; */
String TOKEN = "token";
/**
* 创建时间 /**
*/ * 令牌前缀
public static final String JWT_CREATED = "created"; */
String TOKEN_PREFIX = "Bearer ";
/**
* 用户权限 /**
*/ * 令牌前缀
public static final String JWT_AUTHORITIES = "authorities"; */
String LOGIN_USER_KEY = "login_user_key";
/**
* 参数管理 cache key /**
*/ * 用户ID
public static final String SYS_CONFIG_KEY = "sys_config:"; */
String JWT_USERID = "userid";
/**
* 字典管理 cache key /**
*/ * 用户名称
public static final String SYS_DICT_KEY = "sys_dict:"; */
String JWT_USERNAME = "sub";
/**
* 资源映射路径 前缀 /**
*/ * 用户头像
public static final String RESOURCE_PREFIX = "/profile"; */
} String JWT_AVATAR = "avatar";
/**
* 创建时间
*/
String JWT_CREATED = "created";
/**
* 用户权限
*/
String JWT_AUTHORITIES = "authorities";
/**
* 参数管理 cache key
*/
String SYS_CONFIG_KEY = "sys_config:";
/**
* 字典管理 cache key
*/
String SYS_DICT_KEY = "sys_dict:";
}

View File

@ -1,114 +1,188 @@
package com.ruoyi.common.constant; package com.ruoyi.common.constant;
/** /**
* 代码生成通用常量 * 代码生成通用常量
* *
* @author ruoyi * @author ruoyi
*/ */
public class GenConstants public interface GenConstants {
{ /**
/** 单表(增删改查) */ * 单表(增删改查)
public static final String TPL_CRUD = "crud"; */
String TPL_CRUD = "crud";
/** 树表(增删改查) */
public static final String TPL_TREE = "tree"; /**
* 树表(增删改查)
/** 主子表(增删改查) */ */
public static final String TPL_SUB = "sub"; String TPL_TREE = "tree";
/** 树编码字段 */ /**
public static final String TREE_CODE = "treeCode"; * 主子表(增删改查)
*/
/** 树父编码字段 */ String TPL_SUB = "sub";
public static final String TREE_PARENT_CODE = "treeParentCode";
/**
/** 树名称字段 */ * 树编码字段
public static final String TREE_NAME = "treeName"; */
String TREE_CODE = "treeCode";
/** 上级菜单ID字段 */
public static final String PARENT_MENU_ID = "parentMenuId"; /**
* 树父编码字段
/** 上级菜单名称字段 */ */
public static final String PARENT_MENU_NAME = "parentMenuName"; String TREE_PARENT_CODE = "treeParentCode";
/** 数据库字符串类型 */ /**
public static final String[] COLUMNTYPE_STR = { "char", "varchar", "nvarchar", "varchar2" }; * 树名称字段
*/
/** 数据库文本类型 */ String TREE_NAME = "treeName";
public static final String[] COLUMNTYPE_TEXT = { "tinytext", "text", "mediumtext", "longtext" };
/**
/** 数据库时间类型 */ * 上级菜单ID字段
public static final String[] COLUMNTYPE_TIME = { "datetime", "time", "date", "timestamp" }; */
String PARENT_MENU_ID = "parentMenuId";
/** 数据库数字类型 */
public static final String[] COLUMNTYPE_NUMBER = { "tinyint", "smallint", "mediumint", "int", "number", "integer", /**
"bit", "bigint", "float", "double", "decimal" }; * 上级菜单名称字段
*/
/** 页面不需要编辑字段 */ String PARENT_MENU_NAME = "parentMenuName";
public static final String[] COLUMNNAME_NOT_EDIT = { "id", "create_by", "create_time", "del_flag" };
/**
/** 页面不需要显示的列表字段 */ * 数据库字符串类型
public static final String[] COLUMNNAME_NOT_LIST = { "id", "create_by", "create_time", "del_flag", "update_by", */
"update_time" }; String[] COLUMNTYPE_STR = {"char", "varchar", "nvarchar", "varchar2"};
/** 页面不需要查询字段 */ /**
public static final String[] COLUMNNAME_NOT_QUERY = { "id", "create_by", "create_time", "del_flag", "update_by", * 数据库文本类型
"update_time", "remark" }; */
String[] COLUMNTYPE_TEXT = {"tinytext", "text", "mediumtext", "longtext"};
/** Entity基类字段 */
public static final String[] BASE_ENTITY = { "createBy", "createTime", "updateBy", "updateTime", "remark" }; /**
* 数据库时间类型
/** Tree基类字段 */ */
public static final String[] TREE_ENTITY = { "parentName", "parentId", "orderNum", "ancestors", "children" }; String[] COLUMNTYPE_TIME = {"datetime", "time", "date", "timestamp"};
/** 文本框 */ /**
public static final String HTML_INPUT = "input"; * 数据库数字类型
*/
/** 文本域 */ String[] COLUMNTYPE_NUMBER = {"tinyint", "smallint", "mediumint", "int", "number", "integer",
public static final String HTML_TEXTAREA = "textarea"; "bit", "bigint", "float", "double", "decimal"};
/** 下拉框 */ /**
public static final String HTML_SELECT = "select"; * BO对象 不需要添加字段
*/
/** 单选框 */ String[] COLUMNNAME_NOT_ADD = {"create_by", "create_time", "del_flag", "update_by",
public static final String HTML_RADIO = "radio"; "update_time", "version"};
/** 复选框 */ /**
public static final String HTML_CHECKBOX = "checkbox"; * BO对象 不需要编辑字段
*/
/** 日期控件 */ String[] COLUMNNAME_NOT_EDIT = {"create_by", "create_time", "del_flag", "update_by",
public static final String HTML_DATETIME = "datetime"; "update_time", "version"};
/** 图片上传控件 */ /**
public static final String HTML_IMAGE_UPLOAD = "imageUpload"; * VO对象 不需要返回字段
*/
/** 文件上传控件 */ String[] COLUMNNAME_NOT_LIST = {"create_by", "create_time", "del_flag", "update_by",
public static final String HTML_FILE_UPLOAD = "fileUpload"; "update_time", "version"};
/** 富文本控件 */ /**
public static final String HTML_EDITOR = "editor"; * BO对象 不需要查询字段
*/
/** 字符串类型 */ String[] COLUMNNAME_NOT_QUERY = {"id", "create_by", "create_time", "del_flag", "update_by",
public static final String TYPE_STRING = "String"; "update_time", "remark", "version"};
/** 整型 */ /**
public static final String TYPE_INTEGER = "Integer"; * Entity基类字段
*/
/** 长整型 */ String[] BASE_ENTITY = {"createBy", "createTime", "updateBy", "updateTime"};
public static final String TYPE_LONG = "Long";
/**
/** 浮点型 */ * Tree基类字段
public static final String TYPE_DOUBLE = "Double"; */
String[] TREE_ENTITY = {"parentName", "parentId", "children"};
/** 高精度计算类型 */
public static final String TYPE_BIGDECIMAL = "BigDecimal"; /**
* 文本框
/** 时间类型 */ */
public static final String TYPE_DATE = "Date"; String HTML_INPUT = "input";
/** 模糊查询 */ /**
public static final String QUERY_LIKE = "LIKE"; * 文本域
*/
/** 需要 */ String HTML_TEXTAREA = "textarea";
public static final String REQUIRE = "1";
} /**
* 下拉框
*/
String HTML_SELECT = "select";
/**
* 单选框
*/
String HTML_RADIO = "radio";
/**
* 复选框
*/
String HTML_CHECKBOX = "checkbox";
/**
* 日期控件
*/
String HTML_DATETIME = "datetime";
/**
* 图片上传控件
*/
String HTML_IMAGE_UPLOAD = "imageUpload";
/**
* 文件上传控件
*/
String HTML_FILE_UPLOAD = "fileUpload";
/**
* 富文本控件
*/
String HTML_EDITOR = "editor";
/**
* 字符串类型
*/
String TYPE_STRING = "String";
/**
* 整型
*/
String TYPE_INTEGER = "Integer";
/**
* 长整型
*/
String TYPE_LONG = "Long";
/**
* 浮点型
*/
String TYPE_DOUBLE = "Double";
/**
* 高精度计算类型
*/
String TYPE_BIGDECIMAL = "BigDecimal";
/**
* 时间类型
*/
String TYPE_DATE = "Date";
/**
* 模糊查询
*/
String QUERY_LIKE = "LIKE";
/**
* 需要
*/
String REQUIRE = "1";
}

View File

@ -1,89 +0,0 @@
package com.ruoyi.common.constant;
/**
* 返回状态码
*
* @author ruoyi
*/
public class HttpStatus
{
/**
* 操作成功
*/
public static final int SUCCESS = 200;
/**
* 对象创建成功
*/
public static final int CREATED = 201;
/**
* 请求已经被接受
*/
public static final int ACCEPTED = 202;
/**
* 操作已经执行成功,但是没有返回数据
*/
public static final int NO_CONTENT = 204;
/**
* 资源已被移除
*/
public static final int MOVED_PERM = 301;
/**
* 重定向
*/
public static final int SEE_OTHER = 303;
/**
* 资源没有被修改
*/
public static final int NOT_MODIFIED = 304;
/**
* 参数列表错误(缺少,格式不匹配)
*/
public static final int BAD_REQUEST = 400;
/**
* 未授权
*/
public static final int UNAUTHORIZED = 401;
/**
* 访问受限,授权过期
*/
public static final int FORBIDDEN = 403;
/**
* 资源,服务未找到
*/
public static final int NOT_FOUND = 404;
/**
* 不允许的http方法
*/
public static final int BAD_METHOD = 405;
/**
* 资源冲突,或者资源被锁
*/
public static final int CONFLICT = 409;
/**
* 不支持的数据,媒体类型
*/
public static final int UNSUPPORTED_TYPE = 415;
/**
* 系统内部错误
*/
public static final int ERROR = 500;
/**
* 接口未实现
*/
public static final int NOT_IMPLEMENTED = 501;
}

View File

@ -1,50 +0,0 @@
package com.ruoyi.common.constant;
/**
* 任务调度通用常量
*
* @author ruoyi
*/
public class ScheduleConstants
{
public static final String TASK_CLASS_NAME = "TASK_CLASS_NAME";
/** 执行目标key */
public static final String TASK_PROPERTIES = "TASK_PROPERTIES";
/** 默认 */
public static final String MISFIRE_DEFAULT = "0";
/** 立即触发执行 */
public static final String MISFIRE_IGNORE_MISFIRES = "1";
/** 触发一次执行 */
public static final String MISFIRE_FIRE_AND_PROCEED = "2";
/** 不触发立即执行 */
public static final String MISFIRE_DO_NOTHING = "3";
public enum Status
{
/**
* 正常
*/
NORMAL("0"),
/**
* 暂停
*/
PAUSE("1");
private String value;
private Status(String value)
{
this.value = value;
}
public String getValue()
{
return value;
}
}
}

View File

@ -1,63 +1,112 @@
package com.ruoyi.common.constant; package com.ruoyi.common.constant;
/** /**
* 用户常量信息 * 用户常量信息
* *
* @author ruoyi * @author ruoyi
*/ */
public class UserConstants public interface UserConstants {
{
/** /**
* 平台内系统用户的唯一标志 * 平台内系统用户的唯一标志
*/ */
public static final String SYS_USER = "SYS_USER"; String SYS_USER = "SYS_USER";
/** 正常状态 */ /**
public static final String NORMAL = "0"; * 正常状态
*/
/** 异常状态 */ String NORMAL = "0";
public static final String EXCEPTION = "1";
/**
/** 用户封禁状态 */ * 异常状态
public static final String USER_DISABLE = "1"; */
String EXCEPTION = "1";
/** 角色封禁状态 */
public static final String ROLE_DISABLE = "1"; /**
* 用户封禁状态
/** 部门正常状态 */ */
public static final String DEPT_NORMAL = "0"; String USER_DISABLE = "1";
/** 部门停用状态 */ /**
public static final String DEPT_DISABLE = "1"; * 角色封禁状态
*/
/** 字典正常状态 */ String ROLE_DISABLE = "1";
public static final String DICT_NORMAL = "0";
/**
/** 是否为系统默认(是) */ * 部门正常状态
public static final String YES = "Y"; */
String DEPT_NORMAL = "0";
/** 是否菜单外链(是) */
public static final String YES_FRAME = "0"; /**
* 部门停用状态
/** 是否菜单外链(否) */ */
public static final String NO_FRAME = "1"; String DEPT_DISABLE = "1";
/** 菜单类型(目录) */ /**
public static final String TYPE_DIR = "M"; * 字典正常状态
*/
/** 菜单类型(菜单) */ String DICT_NORMAL = "0";
public static final String TYPE_MENU = "C";
/**
/** 菜单类型(按钮) */ * 是否为系统默认(是)
public static final String TYPE_BUTTON = "F"; */
String YES = "Y";
/** Layout组件标识 */
public final static String LAYOUT = "Layout"; /**
* 是否菜单外链(是)
/** ParentView组件标识 */ */
public final static String PARENT_VIEW = "ParentView"; String YES_FRAME = "0";
/** 校验返回结果码 */ /**
public final static String UNIQUE = "0"; * 是否菜单外链(否)
public final static String NOT_UNIQUE = "1"; */
} String NO_FRAME = "1";
/**
* 菜单类型(目录)
*/
String TYPE_DIR = "M";
/**
* 菜单类型(菜单)
*/
String TYPE_MENU = "C";
/**
* 菜单类型(按钮)
*/
String TYPE_BUTTON = "F";
/**
* Layout组件标识
*/
String LAYOUT = "Layout";
/**
* ParentView组件标识
*/
String PARENT_VIEW = "ParentView";
/**
* InnerLink组件标识
*/
String INNER_LINK = "InnerLink";
/**
* 校验返回结果码
*/
String UNIQUE = "0";
String NOT_UNIQUE = "1";
/**
* 用户名长度限制
*/
int USERNAME_MIN_LENGTH = 2;
int USERNAME_MAX_LENGTH = 20;
/**
* 密码长度限制
*/
int PASSWORD_MIN_LENGTH = 5;
int PASSWORD_MAX_LENGTH = 20;
}

View File

@ -0,0 +1,51 @@
package com.ruoyi.common.convert;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.excel.converters.Converter;
import com.alibaba.excel.enums.CellDataTypeEnum;
import com.alibaba.excel.metadata.CellData;
import com.alibaba.excel.metadata.GlobalConfiguration;
import com.alibaba.excel.metadata.property.ExcelContentProperty;
import lombok.extern.slf4j.Slf4j;
import java.math.BigDecimal;
/**
* 大数值转换
* Excel 数值长度位15位 大于15位的数值转换位字符串
*
* @author Lion Li
*/
@Slf4j
public class ExcelBigNumberConvert implements Converter<Long> {
@Override
public Class<Long> supportJavaTypeKey() {
return Long.class;
}
@Override
public CellDataTypeEnum supportExcelTypeKey() {
return CellDataTypeEnum.STRING;
}
@Override
public Long convertToJavaData(CellData cellData, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) {
return Convert.toLong(cellData.getData());
}
@Override
public CellData<Object> convertToExcelData(Long object, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) {
if (ObjectUtil.isNotNull(object)) {
String str = Convert.toStr(object);
if (str.length() > 15) {
return new CellData<>(str);
}
}
CellData<Object> cellData = new CellData<>(new BigDecimal(object));
cellData.setType(CellDataTypeEnum.NUMBER);
return cellData;
}
}

View File

@ -0,0 +1,71 @@
package com.ruoyi.common.convert;
import cn.hutool.core.annotation.AnnotationUtil;
import cn.hutool.core.convert.Convert;
import com.alibaba.excel.converters.Converter;
import com.alibaba.excel.enums.CellDataTypeEnum;
import com.alibaba.excel.metadata.CellData;
import com.alibaba.excel.metadata.GlobalConfiguration;
import com.alibaba.excel.metadata.property.ExcelContentProperty;
import com.ruoyi.common.annotation.ExcelDictFormat;
import com.ruoyi.common.core.service.DictService;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.common.utils.spring.SpringUtils;
import lombok.extern.slf4j.Slf4j;
import java.lang.reflect.Field;
/**
* 字典格式化转换处理
*
* @author Lion Li
*/
@Slf4j
public class ExcelDictConvert implements Converter<Object> {
@Override
public Class<Object> supportJavaTypeKey() {
return Object.class;
}
@Override
public CellDataTypeEnum supportExcelTypeKey() {
return null;
}
@Override
public Object convertToJavaData(CellData cellData, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) {
ExcelDictFormat anno = getAnnotation(contentProperty.getField());
String type = anno.dictType();
String label = cellData.getStringValue();
String value;
if (StringUtils.isBlank(type)) {
value = ExcelUtil.reverseByExp(label, anno.readConverterExp(), anno.separator());
} else {
value = SpringUtils.getBean(DictService.class).getDictValue(type, label, anno.separator());
}
return Convert.convert(contentProperty.getField().getType(), value);
}
@Override
public CellData<String> convertToExcelData(Object object, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) {
if (StringUtils.isNull(object)) {
return new CellData<>("");
}
ExcelDictFormat anno = getAnnotation(contentProperty.getField());
String type = anno.dictType();
String value = Convert.toStr(object);
String label;
if (StringUtils.isBlank(type)) {
label = ExcelUtil.convertByExp(value, anno.readConverterExp(), anno.separator());
} else {
label = SpringUtils.getBean(DictService.class).getDictLabel(type, value, anno.separator());
}
return new CellData<>(label);
}
private ExcelDictFormat getAnnotation(Field field) {
return AnnotationUtil.getAnnotation(field, ExcelDictFormat.class);
}
}

View File

@ -1,137 +1,97 @@
package com.ruoyi.common.core.controller; package com.ruoyi.common.core.controller;
import java.beans.PropertyEditorSupport; import com.ruoyi.common.core.domain.AjaxResult;
import java.util.Date; import com.ruoyi.common.core.domain.model.LoginUser;
import java.util.List; import com.ruoyi.common.utils.SecurityUtils;
import org.slf4j.Logger; import com.ruoyi.common.utils.StringUtils;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.WebDataBinder; /**
import org.springframework.web.bind.annotation.InitBinder; * web层通用数据处理
import com.github.pagehelper.PageHelper; *
import com.github.pagehelper.PageInfo; * @author ruoyi
import com.ruoyi.common.constant.HttpStatus; */
import com.ruoyi.common.core.domain.AjaxResult; public class BaseController {
import com.ruoyi.common.core.page.PageDomain;
import com.ruoyi.common.core.page.TableDataInfo; /**
import com.ruoyi.common.core.page.TableSupport; * 返回成功
import com.ruoyi.common.utils.DateUtils; */
import com.ruoyi.common.utils.StringUtils; public AjaxResult<Void> success() {
import com.ruoyi.common.utils.sql.SqlUtil; return AjaxResult.success();
}
/**
* web层通用数据处理 /**
* * 返回失败消息
* @author ruoyi */
*/ public AjaxResult<Void> error() {
public class BaseController return AjaxResult.error();
{ }
protected final Logger logger = LoggerFactory.getLogger(this.getClass());
/**
/** * 返回成功消息
* 将前台传递过来的日期格式的字符串自动转化为Date类型 */
*/ public AjaxResult<Void> success(String message) {
@InitBinder return AjaxResult.success(message);
public void initBinder(WebDataBinder binder) }
{
// Date 类型转换 /**
binder.registerCustomEditor(Date.class, new PropertyEditorSupport() * 返回失败消息
{ */
@Override public AjaxResult<Void> error(String message) {
public void setAsText(String text) return AjaxResult.error(message);
{ }
setValue(DateUtils.parseDate(text));
} /**
}); * 响应返回结果
} *
* @param rows 影响行数
/** * @return 操作结果
* 设置请求分页数据 */
*/ protected AjaxResult<Void> toAjax(int rows) {
protected void startPage() return rows > 0 ? AjaxResult.success() : AjaxResult.error();
{ }
PageDomain pageDomain = TableSupport.buildPageRequest();
Integer pageNum = pageDomain.getPageNum(); /**
Integer pageSize = pageDomain.getPageSize(); * 响应返回结果
if (StringUtils.isNotNull(pageNum) && StringUtils.isNotNull(pageSize)) *
{ * @param result 结果
String orderBy = SqlUtil.escapeOrderBySql(pageDomain.getOrderBy()); * @return 操作结果
PageHelper.startPage(pageNum, pageSize, orderBy); */
} protected AjaxResult<Void> toAjax(boolean result) {
} return result ? success() : error();
}
/**
* 响应请求分页数据 /**
*/ * 页面跳转
@SuppressWarnings({ "rawtypes", "unchecked" }) */
protected TableDataInfo getDataTable(List<?> list) public String redirect(String url) {
{ return StringUtils.format("redirect:{}", url);
TableDataInfo rspData = new TableDataInfo(); }
rspData.setCode(HttpStatus.SUCCESS);
rspData.setMsg("查询成功"); /**
rspData.setRows(list); * 获取用户缓存信息
rspData.setTotal(new PageInfo(list).getTotal()); */
return rspData; public LoginUser getLoginUser() {
} return SecurityUtils.getLoginUser();
}
/**
* 响应返回结果 /**
* * 获取登录用户id
* @param rows 影响行数 */
* @return 操作结果 public Long getUserId() {
*/ return getLoginUser().getUserId();
protected AjaxResult toAjax(int rows) }
{
return rows > 0 ? AjaxResult.success() : AjaxResult.error(); /**
} * 获取登录部门id
*/
/** public Long getDeptId() {
* 响应返回结果 return getLoginUser().getDeptId();
* }
* @param result 结果
* @return 操作结果 /**
*/ * 获取登录用户名
protected AjaxResult toAjax(boolean result) */
{ public String getUsername() {
return result ? success() : error(); return getLoginUser().getUsername();
} }
}
/**
* 返回成功
*/
public AjaxResult success()
{
return AjaxResult.success();
}
/**
* 返回失败消息
*/
public AjaxResult error()
{
return AjaxResult.error();
}
/**
* 返回成功消息
*/
public AjaxResult success(String message)
{
return AjaxResult.success(message);
}
/**
* 返回失败消息
*/
public AjaxResult error(String message)
{
return AjaxResult.error(message);
}
/**
* 页面跳转
*/
public String redirect(String url)
{
return StringUtils.format("redirect:{}", url);
}
}

View File

@ -1,148 +1,134 @@
package com.ruoyi.common.core.domain; package com.ruoyi.common.core.domain;
import java.util.HashMap; import cn.hutool.http.HttpStatus;
import com.ruoyi.common.constant.HttpStatus; import io.swagger.annotations.ApiModel;
import com.ruoyi.common.utils.StringUtils; import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
/** import lombok.Data;
* 操作消息提醒 import lombok.NoArgsConstructor;
* import lombok.experimental.Accessors;
* @author ruoyi
*/ /**
public class AjaxResult extends HashMap<String, Object> * 操作消息提醒
{ *
private static final long serialVersionUID = 1L; * @author Lion Li
*/
/** 状态码 */ @Data
public static final String CODE_TAG = "code"; @NoArgsConstructor
@AllArgsConstructor
/** 返回内容 */ @Accessors(chain = true)
public static final String MSG_TAG = "msg"; @ApiModel("请求响应对象")
public class AjaxResult<T> {
/** 数据对象 */
public static final String DATA_TAG = "data"; private static final long serialVersionUID = 1L;
/** /**
* 初始化一个新创建的 AjaxResult 对象,使其表示一个空消息。 * 状态码
*/ */
public AjaxResult() @ApiModelProperty("消息状态码")
{ private int code;
}
/**
/** * 返回内容
* 初始化一个新创建的 AjaxResult 对象 */
* @ApiModelProperty("消息内容")
* @param code 状态码 private String msg;
* @param msg 返回内容
*/ /**
public AjaxResult(int code, String msg) * 数据对象
{ */
super.put(CODE_TAG, code); @ApiModelProperty("数据对象")
super.put(MSG_TAG, msg); private T data;
}
/**
/** * 初始化一个新创建的 AjaxResult 对象
* 初始化一个新创建的 AjaxResult 对象 *
* * @param code 状态码
* @param code 状态码 * @param msg 返回内容
* @param msg 返回内容 */
* @param data 数据对象 public AjaxResult(int code, String msg) {
*/ this.code = code;
public AjaxResult(int code, String msg, Object data) this.msg = msg;
{ }
super.put(CODE_TAG, code);
super.put(MSG_TAG, msg); /**
if (StringUtils.isNotNull(data)) * 返回成功消息
{ *
super.put(DATA_TAG, data); * @return 成功消息
} */
} public static AjaxResult<Void> success() {
return AjaxResult.success("操作成功");
/** }
* 返回成功消息
* /**
* @return 成功消息 * 返回成功数据
*/ *
public static AjaxResult success() * @return 成功消息
{ */
return AjaxResult.success("操作成功"); public static <T> AjaxResult<T> success(T data) {
} return AjaxResult.success("操作成功", data);
}
/**
* 返回成功数据 /**
* * 返回成功消息
* @return 成功消息 *
*/ * @param msg 返回内容
public static AjaxResult success(Object data) * @return 成功消息
{ */
return AjaxResult.success("操作成功", data); public static AjaxResult<Void> success(String msg) {
} return AjaxResult.success(msg, null);
}
/**
* 返回成功消息 /**
* * 返回成功消息
* @param msg 返回内容 *
* @return 成功消息 * @param msg 返回内容
*/ * @param data 数据对象
public static AjaxResult success(String msg) * @return 成功消息
{ */
return AjaxResult.success(msg, null); public static <T> AjaxResult<T> success(String msg, T data) {
} return new AjaxResult<>(HttpStatus.HTTP_OK, msg, data);
}
/**
* 返回成功消息 /**
* * 返回错误消息
* @param msg 返回内容 *
* @param data 数据对象 * @return
* @return 成功消息 */
*/ public static AjaxResult<Void> error() {
public static AjaxResult success(String msg, Object data) return AjaxResult.error("操作失败");
{ }
return new AjaxResult(HttpStatus.SUCCESS, msg, data);
} /**
* 返回错误消息
/** *
* 返回错误消息 * @param msg 返回内容
* * @return 警告消息
* @return */
*/ public static AjaxResult<Void> error(String msg) {
public static AjaxResult error() return AjaxResult.error(msg, null);
{ }
return AjaxResult.error("操作失败");
} /**
* 返回错误消息
/** *
* 返回错误消息 * @param msg 返回内容
* * @param data 数据对象
* @param msg 返回内容 * @return 警告消息
* @return 警告消息 */
*/ public static <T> AjaxResult<T> error(String msg, T data) {
public static AjaxResult error(String msg) return new AjaxResult<>(HttpStatus.HTTP_INTERNAL_ERROR, msg, data);
{ }
return AjaxResult.error(msg, null);
} /**
* 返回错误消息
/** *
* 返回错误消息 * @param code 状态码
* * @param msg 返回内容
* @param msg 返回内容 * @return 警告消息
* @param data 数据对象 */
* @return 警告消息 public static AjaxResult<Void> error(int code, String msg) {
*/ return new AjaxResult<>(code, msg, null);
public static AjaxResult error(String msg, Object data) }
{
return new AjaxResult(HttpStatus.ERROR, msg, data); }
}
/**
* 返回错误消息
*
* @param code 状态码
* @param msg 返回内容
* @return 警告消息
*/
public static AjaxResult error(int code, String msg)
{
return new AjaxResult(code, msg, null);
}
}

View File

@ -1,114 +1,68 @@
package com.ruoyi.common.core.domain; package com.ruoyi.common.core.domain;
import java.io.Serializable; import com.baomidou.mybatisplus.annotation.FieldFill;
import java.util.Date; import com.baomidou.mybatisplus.annotation.TableField;
import java.util.HashMap; import io.swagger.annotations.ApiModelProperty;
import java.util.Map; import lombok.Data;
import com.fasterxml.jackson.annotation.JsonFormat; import lombok.experimental.Accessors;
/** import java.io.Serializable;
* Entity基类 import java.util.Date;
* import java.util.HashMap;
* @author ruoyi import java.util.Map;
*/
public class BaseEntity implements Serializable /**
{ * Entity基类
private static final long serialVersionUID = 1L; *
* @author Lion Li
/** 搜索值 */ */
private String searchValue;
@Data
/** 创建者 */ @Accessors(chain = true)
private String createBy; public class BaseEntity implements Serializable {
/** 创建时间 */ private static final long serialVersionUID = 1L;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date createTime; /**
* 搜索值
/** 更新者 */ */
private String updateBy; @ApiModelProperty(value = "搜索值")
@TableField(exist = false)
/** 更新时间 */ private String searchValue;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date updateTime; /**
* 创建者
/** 备注 */ */
private String remark; @ApiModelProperty(value = "创建者")
@TableField(fill = FieldFill.INSERT)
/** 请求参数 */ private String createBy;
private Map<String, Object> params;
/**
public String getSearchValue() * 创建时间
{ */
return searchValue; @ApiModelProperty(value = "创建时间")
} @TableField(fill = FieldFill.INSERT)
private Date createTime;
public void setSearchValue(String searchValue)
{ /**
this.searchValue = searchValue; * 更新者
} */
@ApiModelProperty(value = "更新者")
public String getCreateBy() @TableField(fill = FieldFill.INSERT_UPDATE)
{ private String updateBy;
return createBy;
} /**
* 更新时间
public void setCreateBy(String createBy) */
{ @ApiModelProperty(value = "更新时间")
this.createBy = createBy; @TableField(fill = FieldFill.INSERT_UPDATE)
} private Date updateTime;
public Date getCreateTime() /**
{ * 请求参数
return createTime; */
} @ApiModelProperty(value = "请求参数")
@TableField(exist = false)
public void setCreateTime(Date createTime) private Map<String, Object> params = new HashMap<>();
{
this.createTime = createTime; }
}
public String getUpdateBy()
{
return updateBy;
}
public void setUpdateBy(String updateBy)
{
this.updateBy = updateBy;
}
public Date getUpdateTime()
{
return updateTime;
}
public void setUpdateTime(Date updateTime)
{
this.updateTime = updateTime;
}
public String getRemark()
{
return remark;
}
public void setRemark(String remark)
{
this.remark = remark;
}
public Map<String, Object> getParams()
{
if (params == null)
{
params = new HashMap<>();
}
return params;
}
public void setParams(Map<String, Object> params)
{
this.params = params;
}
}

View File

@ -0,0 +1,93 @@
package com.ruoyi.common.core.domain;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.metadata.OrderItem;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.sql.SqlUtil;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.experimental.Accessors;
import java.io.Serializable;
/**
* 分页查询实体类
*
* @author Lion Li
*/
@Data
@Accessors(chain = true)
public class PageQuery implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 分页大小
*/
@ApiModelProperty("分页大小")
private Integer pageSize;
/**
* 当前页数
*/
@ApiModelProperty("当前页数")
private Integer pageNum;
/**
* 排序列
*/
@ApiModelProperty("排序列")
private String orderByColumn;
/**
* 排序的方向desc或者asc
*/
@ApiModelProperty(value = "排序的方向", example = "asc,desc")
private String isAsc;
/**
* 当前记录起始索引 默认值
*/
public static final int DEFAULT_PAGE_NUM = 1;
/**
* 每页显示记录数 默认值 默认查全部
*/
public static final int DEFAULT_PAGE_SIZE = Integer.MAX_VALUE;
public <T> Page<T> build() {
Integer pageNum = ObjectUtil.defaultIfNull(getPageNum(), DEFAULT_PAGE_NUM);
Integer pageSize = ObjectUtil.defaultIfNull(getPageSize(), DEFAULT_PAGE_SIZE);
if (pageNum <= 0) {
pageNum = DEFAULT_PAGE_NUM;
}
Page<T> page = new Page<>(pageNum, pageSize);
OrderItem orderItem = buildOrderItem();
if (ObjectUtil.isNotNull(orderItem)) {
page.addOrder(orderItem);
}
return page;
}
private OrderItem buildOrderItem() {
// 兼容前端排序类型
if ("ascending".equals(isAsc)) {
isAsc = "asc";
} else if ("descending".equals(isAsc)) {
isAsc = "desc";
}
if (StringUtils.isNotBlank(orderByColumn)) {
String orderBy = SqlUtil.escapeOrderBySql(orderByColumn);
orderBy = StringUtils.toUnderScoreCase(orderBy);
if ("asc".equals(isAsc)) {
return OrderItem.asc(orderBy);
} else if ("desc".equals(isAsc)) {
return OrderItem.desc(orderBy);
}
}
return null;
}
}

View File

@ -1,79 +1,45 @@
package com.ruoyi.common.core.domain; package com.ruoyi.common.core.domain;
import java.util.ArrayList; import com.baomidou.mybatisplus.annotation.TableField;
import java.util.List; import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/** import lombok.EqualsAndHashCode;
* Tree基类 import lombok.experimental.Accessors;
*
* @author ruoyi import java.util.ArrayList;
*/ import java.util.List;
public class TreeEntity extends BaseEntity
{ /**
private static final long serialVersionUID = 1L; * Tree基类
*
/** 父菜单名称 */ * @author Lion Li
private String parentName; */
/** 父菜单ID */ @Data
private Long parentId; @EqualsAndHashCode(callSuper = true)
@Accessors(chain = true)
/** 显示顺序 */ public class TreeEntity extends BaseEntity {
private Integer orderNum;
private static final long serialVersionUID = 1L;
/** 祖级列表 */
private String ancestors; /**
* 父菜单名称
/** 子部门 */ */
private List<?> children = new ArrayList<>(); @TableField(exist = false)
@ApiModelProperty(value = "父菜单名称")
public String getParentName() private String parentName;
{
return parentName; /**
} * 父菜单ID
*/
public void setParentName(String parentName) @ApiModelProperty(value = "父菜单ID")
{ private Long parentId;
this.parentName = parentName;
} /**
* 子部门
public Long getParentId() */
{ @TableField(exist = false)
return parentId; @ApiModelProperty(value = "子部门")
} private List<?> children = new ArrayList<>();
public void setParentId(Long parentId) }
{
this.parentId = parentId;
}
public Integer getOrderNum()
{
return orderNum;
}
public void setOrderNum(Integer orderNum)
{
this.orderNum = orderNum;
}
public String getAncestors()
{
return ancestors;
}
public void setAncestors(String ancestors)
{
this.ancestors = ancestors;
}
public List<?> getChildren()
{
return children;
}
public void setChildren(List<?> children)
{
this.children = children;
}
}

View File

@ -1,77 +0,0 @@
package com.ruoyi.common.core.domain;
import java.io.Serializable;
import java.util.List;
import java.util.stream.Collectors;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.ruoyi.common.core.domain.entity.SysDept;
import com.ruoyi.common.core.domain.entity.SysMenu;
/**
* Treeselect树结构实体类
*
* @author ruoyi
*/
public class TreeSelect implements Serializable
{
private static final long serialVersionUID = 1L;
/** 节点ID */
private Long id;
/** 节点名称 */
private String label;
/** 子节点 */
@JsonInclude(JsonInclude.Include.NON_EMPTY)
private List<TreeSelect> children;
public TreeSelect()
{
}
public TreeSelect(SysDept dept)
{
this.id = dept.getDeptId();
this.label = dept.getDeptName();
this.children = dept.getChildren().stream().map(TreeSelect::new).collect(Collectors.toList());
}
public TreeSelect(SysMenu menu)
{
this.id = menu.getMenuId();
this.label = menu.getMenuName();
this.children = menu.getChildren().stream().map(TreeSelect::new).collect(Collectors.toList());
}
public Long getId()
{
return id;
}
public void setId(Long id)
{
this.id = id;
}
public String getLabel()
{
return label;
}
public void setLabel(String label)
{
this.label = label;
}
public List<TreeSelect> getChildren()
{
return children;
}
public void setChildren(List<TreeSelect> children)
{
this.children = children;
}
}

View File

@ -0,0 +1,108 @@
package com.ruoyi.common.core.domain.dto;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import java.io.Serializable;
import java.util.Date;
/**
* 通用操作日志实体
*
* @author Lion Li
*/
@Data
@NoArgsConstructor
@Accessors(chain = true)
public class OperLogDTO implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 日志主键
*/
private Long operId;
/**
* 操作模块
*/
private String title;
/**
* 业务类型0其它 1新增 2修改 3删除
*/
private Integer businessType;
/**
* 业务类型数组
*/
private Integer[] businessTypes;
/**
* 请求方法
*/
private String method;
/**
* 请求方式
*/
private String requestMethod;
/**
* 操作类别0其它 1后台用户 2手机端用户
*/
private Integer operatorType;
/**
* 操作人员
*/
private String operName;
/**
* 部门名称
*/
private String deptName;
/**
* 请求url
*/
private String operUrl;
/**
* 操作地址
*/
private String operIp;
/**
* 操作地点
*/
private String operLocation;
/**
* 请求参数
*/
private String operParam;
/**
* 返回参数
*/
private String jsonResult;
/**
* 操作状态0正常 1异常
*/
private Integer status;
/**
* 错误消息
*/
private String errorMsg;
/**
* 操作时间
*/
private Date operTime;
}

View File

@ -1,202 +1,93 @@
package com.ruoyi.common.core.domain.entity; package com.ruoyi.common.core.domain.entity;
import java.util.ArrayList; import com.baomidou.mybatisplus.annotation.TableId;
import java.util.List; import com.baomidou.mybatisplus.annotation.TableLogic;
import javax.validation.constraints.Email; import com.baomidou.mybatisplus.annotation.TableName;
import javax.validation.constraints.NotBlank; import com.ruoyi.common.core.domain.TreeEntity;
import javax.validation.constraints.Size; import io.swagger.annotations.ApiModel;
import org.apache.commons.lang3.builder.ToStringBuilder; import io.swagger.annotations.ApiModelProperty;
import org.apache.commons.lang3.builder.ToStringStyle; import lombok.Data;
import com.ruoyi.common.core.domain.BaseEntity; import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
/**
* 部门表 sys_dept import javax.validation.constraints.Email;
* import javax.validation.constraints.NotBlank;
* @author ruoyi import javax.validation.constraints.Size;
*/
public class SysDept extends BaseEntity /**
{ * 部门表 sys_dept
private static final long serialVersionUID = 1L; *
* @author Lion Li
/** 部门ID */ */
private Long deptId;
@Data
/** 父部门ID */ @EqualsAndHashCode(callSuper = true)
private Long parentId; @Accessors(chain = true)
@TableName("sys_dept")
/** 祖级列表 */ @ApiModel("部门业务对象")
private String ancestors; public class SysDept extends TreeEntity {
private static final long serialVersionUID = 1L;
/** 部门名称 */
private String deptName; /**
* 部门ID
/** 显示顺序 */ */
private String orderNum; @ApiModelProperty(value = "部门id")
@TableId(value = "dept_id")
/** 负责人 */ private Long deptId;
private String leader;
/**
/** 联系电话 */ * 部门名称
private String phone; */
@ApiModelProperty(value = "部门名称")
/** 邮箱 */ @NotBlank(message = "部门名称不能为空")
private String email; @Size(min = 0, max = 30, message = "部门名称长度不能超过30个字符")
private String deptName;
/** 部门状态:0正常,1停用 */
private String status; /**
* 显示顺序
/** 删除标志0代表存在 2代表删除 */ */
private String delFlag; @ApiModelProperty(value = "显示顺序")
@NotBlank(message = "显示顺序不能为空")
/** 父部门名称 */ private String orderNum;
private String parentName;
/**
/** 子部门 */ * 负责人
private List<SysDept> children = new ArrayList<SysDept>(); */
@ApiModelProperty(value = "负责人")
public Long getDeptId() private String leader;
{
return deptId; /**
} * 联系电话
*/
public void setDeptId(Long deptId) @ApiModelProperty(value = "联系电话")
{ @Size(min = 0, max = 11, message = "联系电话长度不能超过11个字符")
this.deptId = deptId; private String phone;
}
/**
public Long getParentId() * 邮箱
{ */
return parentId; @ApiModelProperty(value = "邮箱")
} @Email(message = "邮箱格式不正确")
@Size(min = 0, max = 50, message = "邮箱长度不能超过50个字符")
public void setParentId(Long parentId) private String email;
{
this.parentId = parentId; /**
} * 部门状态:0正常,1停用
*/
public String getAncestors() @ApiModelProperty(value = "部门状态:0正常,1停用")
{ private String status;
return ancestors;
} /**
* 删除标志0代表存在 2代表删除
public void setAncestors(String ancestors) */
{ @ApiModelProperty(value = "删除标志0代表存在 2代表删除")
this.ancestors = ancestors; @TableLogic
} private String delFlag;
@NotBlank(message = "部门名称不能为空") /**
@Size(min = 0, max = 30, message = "部门名称长度不能超过30个字符") * 祖级列表
public String getDeptName() */
{ @ApiModelProperty(value = "祖级列表")
return deptName; private String ancestors;
}
}
public void setDeptName(String deptName)
{
this.deptName = deptName;
}
@NotBlank(message = "显示顺序不能为空")
public String getOrderNum()
{
return orderNum;
}
public void setOrderNum(String orderNum)
{
this.orderNum = orderNum;
}
public String getLeader()
{
return leader;
}
public void setLeader(String leader)
{
this.leader = leader;
}
@Size(min = 0, max = 11, message = "联系电话长度不能超过11个字符")
public String getPhone()
{
return phone;
}
public void setPhone(String phone)
{
this.phone = phone;
}
@Email(message = "邮箱格式不正确")
@Size(min = 0, max = 50, message = "邮箱长度不能超过50个字符")
public String getEmail()
{
return email;
}
public void setEmail(String email)
{
this.email = email;
}
public String getStatus()
{
return status;
}
public void setStatus(String status)
{
this.status = status;
}
public String getDelFlag()
{
return delFlag;
}
public void setDelFlag(String delFlag)
{
this.delFlag = delFlag;
}
public String getParentName()
{
return parentName;
}
public void setParentName(String parentName)
{
this.parentName = parentName;
}
public List<SysDept> getChildren()
{
return children;
}
public void setChildren(List<SysDept> children)
{
this.children = children;
}
@Override
public String toString() {
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
.append("deptId", getDeptId())
.append("parentId", getParentId())
.append("ancestors", getAncestors())
.append("deptName", getDeptName())
.append("orderNum", getOrderNum())
.append("leader", getLeader())
.append("phone", getPhone())
.append("email", getEmail())
.append("status", getStatus())
.append("delFlag", getDelFlag())
.append("createBy", getCreateBy())
.append("createTime", getCreateTime())
.append("updateBy", getUpdateBy())
.append("updateTime", getUpdateTime())
.toString();
}
}

View File

@ -1,176 +1,115 @@
package com.ruoyi.common.core.domain.entity; package com.ruoyi.common.core.domain.entity;
import javax.validation.constraints.NotBlank; import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import javax.validation.constraints.Size; import com.alibaba.excel.annotation.ExcelProperty;
import org.apache.commons.lang3.builder.ToStringBuilder; import com.baomidou.mybatisplus.annotation.TableId;
import org.apache.commons.lang3.builder.ToStringStyle; import com.baomidou.mybatisplus.annotation.TableName;
import com.ruoyi.common.annotation.Excel; import com.ruoyi.common.annotation.ExcelDictFormat;
import com.ruoyi.common.annotation.Excel.ColumnType; import com.ruoyi.common.constant.UserConstants;
import com.ruoyi.common.constant.UserConstants; import com.ruoyi.common.convert.ExcelDictConvert;
import com.ruoyi.common.core.domain.BaseEntity; import com.ruoyi.common.core.domain.BaseEntity;
import io.swagger.annotations.ApiModel;
/** import io.swagger.annotations.ApiModelProperty;
* 字典数据表 sys_dict_data import lombok.Data;
* import lombok.EqualsAndHashCode;
* @author ruoyi import lombok.experimental.Accessors;
*/
public class SysDictData extends BaseEntity import javax.validation.constraints.NotBlank;
{ import javax.validation.constraints.Size;
private static final long serialVersionUID = 1L;
/**
/** 字典编码 */ * 字典数据表 sys_dict_data
@Excel(name = "字典编码", cellType = ColumnType.NUMERIC) *
private Long dictCode; * @author Lion Li
*/
/** 字典排序 */
@Excel(name = "字典排序", cellType = ColumnType.NUMERIC) @Data
private Long dictSort; @EqualsAndHashCode(callSuper = true)
@Accessors(chain = true)
/** 字典标签 */ @TableName("sys_dict_data")
@Excel(name = "字典标签") @ExcelIgnoreUnannotated
private String dictLabel; @ApiModel("字典数据业务对象")
public class SysDictData extends BaseEntity {
/** 字典键值 */
@Excel(name = "字典键值") /**
private String dictValue; * 字典编码
*/
/** 字典类型 */ @ApiModelProperty(value = "字典编码")
@Excel(name = "字典类型") @ExcelProperty(value = "字典编码")
private String dictType; @TableId(value = "dict_code")
private Long dictCode;
/** 样式属性(其他样式扩展) */
private String cssClass; /**
* 字典排序
/** 表格字典样式 */ */
private String listClass; @ApiModelProperty(value = "字典排序")
@ExcelProperty(value = "字典排序")
/** 是否默认Y是 N否 */ private Long dictSort;
@Excel(name = "是否默认", readConverterExp = "Y=是,N=否")
private String isDefault; /**
* 字典标签
/** 状态0正常 1停用 */ */
@Excel(name = "状态", readConverterExp = "0=正常,1=停用") @ApiModelProperty(value = "字典标签")
private String status; @ExcelProperty(value = "字典标签")
@NotBlank(message = "字典标签不能为空")
public Long getDictCode() @Size(min = 0, max = 100, message = "字典标签长度不能超过100个字符")
{ private String dictLabel;
return dictCode;
} /**
* 字典键值
public void setDictCode(Long dictCode) */
{ @ApiModelProperty(value = "字典键值")
this.dictCode = dictCode; @ExcelProperty(value = "字典键值")
} @NotBlank(message = "字典键值不能为空")
@Size(min = 0, max = 100, message = "字典键值长度不能超过100个字符")
public Long getDictSort() private String dictValue;
{
return dictSort; /**
} * 字典类型
*/
public void setDictSort(Long dictSort) @ApiModelProperty(value = "字典类型")
{ @ExcelProperty(value = "字典类型")
this.dictSort = dictSort; @NotBlank(message = "字典类型不能为空")
} @Size(min = 0, max = 100, message = "字典类型长度不能超过100个字符")
private String dictType;
@NotBlank(message = "字典标签不能为空")
@Size(min = 0, max = 100, message = "字典标签长度不能超过100个字符") /**
public String getDictLabel() * 样式属性(其他样式扩展)
{ */
return dictLabel; @ApiModelProperty(value = "样式属性(其他样式扩展)")
} @Size(min = 0, max = 100, message = "样式属性长度不能超过100个字符")
private String cssClass;
public void setDictLabel(String dictLabel)
{ /**
this.dictLabel = dictLabel; * 表格字典样式
} */
@ApiModelProperty(value = "表格字典样式")
@NotBlank(message = "字典键值不能为空") private String listClass;
@Size(min = 0, max = 100, message = "字典键值长度不能超过100个字符")
public String getDictValue() /**
{ * 是否默认Y是 N否
return dictValue; */
} @ApiModelProperty(value = "是否默认Y是 N否")
@ExcelProperty(value = "是否默认", converter = ExcelDictConvert.class)
public void setDictValue(String dictValue) @ExcelDictFormat(dictType = "sys_yes_no")
{ private String isDefault;
this.dictValue = dictValue;
} /**
* 状态0正常 1停用
@NotBlank(message = "字典类型不能为空") */
@Size(min = 0, max = 100, message = "字典类型长度不能超过100个字符") @ApiModelProperty(value = "状态0正常 1停用")
public String getDictType() @ExcelProperty(value = "状态", converter = ExcelDictConvert.class)
{ @ExcelDictFormat(dictType = "sys_normal_disable")
return dictType; private String status;
}
/**
public void setDictType(String dictType) * 备注
{ */
this.dictType = dictType; @ApiModelProperty(value = "备注")
} private String remark;
@Size(min = 0, max = 100, message = "样式属性长度不能超过100个字符") public boolean getDefault() {
public String getCssClass() return UserConstants.YES.equals(this.isDefault);
{ }
return cssClass;
} }
public void setCssClass(String cssClass)
{
this.cssClass = cssClass;
}
public String getListClass()
{
return listClass;
}
public void setListClass(String listClass)
{
this.listClass = listClass;
}
public boolean getDefault()
{
return UserConstants.YES.equals(this.isDefault) ? true : false;
}
public String getIsDefault()
{
return isDefault;
}
public void setIsDefault(String isDefault)
{
this.isDefault = isDefault;
}
public String getStatus()
{
return status;
}
public void setStatus(String status)
{
this.status = status;
}
@Override
public String toString() {
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
.append("dictCode", getDictCode())
.append("dictSort", getDictSort())
.append("dictLabel", getDictLabel())
.append("dictValue", getDictValue())
.append("dictType", getDictType())
.append("cssClass", getCssClass())
.append("listClass", getListClass())
.append("isDefault", getIsDefault())
.append("status", getStatus())
.append("createBy", getCreateBy())
.append("createTime", getCreateTime())
.append("updateBy", getUpdateBy())
.append("updateTime", getUpdateTime())
.append("remark", getRemark())
.toString();
}
}

View File

@ -1,94 +1,73 @@
package com.ruoyi.common.core.domain.entity; package com.ruoyi.common.core.domain.entity;
import javax.validation.constraints.NotBlank; import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import javax.validation.constraints.Size; import com.alibaba.excel.annotation.ExcelProperty;
import org.apache.commons.lang3.builder.ToStringBuilder; import com.baomidou.mybatisplus.annotation.TableId;
import org.apache.commons.lang3.builder.ToStringStyle; import com.baomidou.mybatisplus.annotation.TableName;
import com.ruoyi.common.annotation.Excel; import com.ruoyi.common.annotation.ExcelDictFormat;
import com.ruoyi.common.annotation.Excel.ColumnType; import com.ruoyi.common.convert.ExcelDictConvert;
import com.ruoyi.common.core.domain.BaseEntity; import com.ruoyi.common.core.domain.BaseEntity;
import io.swagger.annotations.ApiModel;
/** import io.swagger.annotations.ApiModelProperty;
* 字典类型表 sys_dict_type import lombok.Data;
* import lombok.EqualsAndHashCode;
* @author ruoyi import lombok.experimental.Accessors;
*/
public class SysDictType extends BaseEntity import javax.validation.constraints.NotBlank;
{ import javax.validation.constraints.Size;
private static final long serialVersionUID = 1L;
/**
/** 字典主键 */ * 字典类型表 sys_dict_type
@Excel(name = "字典主键", cellType = ColumnType.NUMERIC) *
private Long dictId; * @author Lion Li
*/
/** 字典名称 */
@Excel(name = "字典名称") @Data
private String dictName; @EqualsAndHashCode(callSuper = true)
@Accessors(chain = true)
/** 字典类型 */ @TableName("sys_dict_type")
@Excel(name = "字典类型") @ExcelIgnoreUnannotated
private String dictType; @ApiModel("字典类型业务对象")
public class SysDictType extends BaseEntity {
/** 状态0正常 1停用 */
@Excel(name = "状态", readConverterExp = "0=正常,1=停用") /**
private String status; * 字典主键
*/
public Long getDictId() @ApiModelProperty(value = "字典主键")
{ @ExcelProperty(value = "字典主键")
return dictId; @TableId(value = "dict_id")
} private Long dictId;
public void setDictId(Long dictId) /**
{ * 字典名称
this.dictId = dictId; */
} @ApiModelProperty(value = "字典名称")
@ExcelProperty(value = "字典名称")
@NotBlank(message = "字典名称不能为空") @NotBlank(message = "字典名称不能为空")
@Size(min = 0, max = 100, message = "字典类型名称长度不能超过100个字符") @Size(min = 0, max = 100, message = "字典类型名称长度不能超过100个字符")
public String getDictName() private String dictName;
{
return dictName; /**
} * 字典类型
*/
public void setDictName(String dictName) @ApiModelProperty(value = "字典类型")
{ @ExcelProperty(value = "字典类型")
this.dictName = dictName; @NotBlank(message = "字典类型不能为空")
} @Size(min = 0, max = 100, message = "字典类型类型长度不能超过100个字符")
private String dictType;
@NotBlank(message = "字典类型不能为空")
@Size(min = 0, max = 100, message = "字典类型类型长度不能超过100个字符") /**
public String getDictType() * 状态0正常 1停用
{ */
return dictType; @ApiModelProperty(value = "状态0正常 1停用")
} @ExcelProperty(value = "状态", converter = ExcelDictConvert.class)
@ExcelDictFormat(dictType = "sys_normal_disable")
public void setDictType(String dictType) private String status;
{
this.dictType = dictType; /**
} * 备注
*/
public String getStatus() @ApiModelProperty(value = "备注")
{ private String remark;
return status;
} }
public void setStatus(String status)
{
this.status = status;
}
@Override
public String toString() {
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
.append("dictId", getDictId())
.append("dictName", getDictName())
.append("dictType", getDictType())
.append("status", getStatus())
.append("createBy", getCreateBy())
.append("createTime", getCreateTime())
.append("updateBy", getUpdateBy())
.append("updateTime", getUpdateTime())
.append("remark", getRemark())
.toString();
}
}

View File

@ -1,245 +1,122 @@
package com.ruoyi.common.core.domain.entity; package com.ruoyi.common.core.domain.entity;
import java.util.ArrayList; import com.baomidou.mybatisplus.annotation.TableField;
import java.util.List; import com.baomidou.mybatisplus.annotation.TableId;
import javax.validation.constraints.NotBlank; import com.baomidou.mybatisplus.annotation.TableName;
import javax.validation.constraints.Size; import com.ruoyi.common.core.domain.TreeEntity;
import org.apache.commons.lang3.builder.ToStringBuilder; import io.swagger.annotations.ApiModel;
import org.apache.commons.lang3.builder.ToStringStyle; import io.swagger.annotations.ApiModelProperty;
import com.ruoyi.common.core.domain.BaseEntity; import lombok.Data;
import lombok.EqualsAndHashCode;
/** import lombok.experimental.Accessors;
* 菜单权限表 sys_menu
* import javax.validation.constraints.NotBlank;
* @author ruoyi import javax.validation.constraints.Size;
*/
public class SysMenu extends BaseEntity /**
{ * 菜单权限表 sys_menu
private static final long serialVersionUID = 1L; *
* @author Lion Li
/** 菜单ID */ */
private Long menuId;
@Data
/** 菜单名称 */ @EqualsAndHashCode(callSuper = true)
private String menuName; @Accessors(chain = true)
@TableName("sys_menu")
/** 父菜单名称 */ @ApiModel("菜单权限业务对象")
private String parentName; public class SysMenu extends TreeEntity {
/** 父菜单ID */ /**
private Long parentId; * 菜单ID
*/
/** 显示顺序 */ @ApiModelProperty(value = "菜单ID")
private String orderNum; @TableId(value = "menu_id")
private Long menuId;
/** 路由地址 */
private String path; /**
* 菜单名称
/** 组件路径 */ */
private String component; @ApiModelProperty(value = "菜单名称")
@NotBlank(message = "菜单名称不能为空")
/** 是否为外链0是 1否 */ @Size(min = 0, max = 50, message = "菜单名称长度不能超过50个字符")
private String isFrame; private String menuName;
/** 是否缓存0缓存 1不缓存 */ /**
private String isCache; * 显示顺序
*/
/** 类型M目录 C菜单 F按钮 */ @ApiModelProperty(value = "显示顺序")
private String menuType; @NotBlank(message = "显示顺序不能为空")
private String orderNum;
/** 显示状态0显示 1隐藏 */
private String visible; /**
* 路由地址
/** 菜单状态0显示 1隐藏 */ */
private String status; @ApiModelProperty(value = "路由地址")
@Size(min = 0, max = 200, message = "路由地址不能超过200个字符")
/** 权限字符串 */ private String path;
private String perms;
/**
/** 菜单图标 */ * 组件路径
private String icon; */
@ApiModelProperty(value = "组件路径")
/** 子菜单 */ @Size(min = 0, max = 200, message = "组件路径不能超过255个字符")
private List<SysMenu> children = new ArrayList<SysMenu>(); private String component;
public Long getMenuId() /**
{ * 路由参数
return menuId; */
} @ApiModelProperty(value = "路由参数")
@TableField("`query`")
public void setMenuId(Long menuId) private String query;
{
this.menuId = menuId; /**
} * 是否为外链0是 1否
*/
@NotBlank(message = "菜单名称不能为空") @ApiModelProperty(value = "是否为外链0是 1否")
@Size(min = 0, max = 50, message = "菜单名称长度不能超过50个字符") private String isFrame;
public String getMenuName()
{ /**
return menuName; * 是否缓存0缓存 1不缓存
} */
@ApiModelProperty(value = "是否缓存0缓存 1不缓存")
public void setMenuName(String menuName) private String isCache;
{
this.menuName = menuName; /**
} * 类型M目录 C菜单 F按钮
*/
public String getParentName() @ApiModelProperty(value = "类型M目录 C菜单 F按钮")
{ @NotBlank(message = "菜单类型不能为空")
return parentName; private String menuType;
}
/**
public void setParentName(String parentName) * 显示状态0显示 1隐藏
{ */
this.parentName = parentName; @ApiModelProperty(value = "显示状态0显示 1隐藏")
} private String visible;
public Long getParentId() /**
{ * 菜单状态0显示 1隐藏
return parentId; */
} @ApiModelProperty(value = "菜单状态0显示 1隐藏")
private String status;
public void setParentId(Long parentId)
{ /**
this.parentId = parentId; * 权限字符串
} */
@ApiModelProperty(value = "权限字符串")
@NotBlank(message = "显示顺序不能为空") @Size(min = 0, max = 100, message = "权限标识长度不能超过100个字符")
public String getOrderNum() private String perms;
{
return orderNum; /**
} * 菜单图标
*/
public void setOrderNum(String orderNum) @ApiModelProperty(value = "菜单图标")
{ private String icon;
this.orderNum = orderNum;
} /**
* 备注
@Size(min = 0, max = 200, message = "路由地址不能超过200个字符") */
public String getPath() @ApiModelProperty(value = "备注")
{ private String remark;
return path;
} }
public void setPath(String path)
{
this.path = path;
}
@Size(min = 0, max = 200, message = "组件路径不能超过255个字符")
public String getComponent()
{
return component;
}
public void setComponent(String component)
{
this.component = component;
}
public String getIsFrame()
{
return isFrame;
}
public void setIsFrame(String isFrame)
{
this.isFrame = isFrame;
}
public String getIsCache()
{
return isCache;
}
public void setIsCache(String isCache)
{
this.isCache = isCache;
}
@NotBlank(message = "菜单类型不能为空")
public String getMenuType()
{
return menuType;
}
public void setMenuType(String menuType)
{
this.menuType = menuType;
}
public String getVisible()
{
return visible;
}
public void setVisible(String visible)
{
this.visible = visible;
}
public String getStatus()
{
return status;
}
public void setStatus(String status)
{
this.status = status;
}
@Size(min = 0, max = 100, message = "权限标识长度不能超过100个字符")
public String getPerms()
{
return perms;
}
public void setPerms(String perms)
{
this.perms = perms;
}
public String getIcon()
{
return icon;
}
public void setIcon(String icon)
{
this.icon = icon;
}
public List<SysMenu> getChildren()
{
return children;
}
public void setChildren(List<SysMenu> children)
{
this.children = children;
}
@Override
public String toString() {
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
.append("menuId", getMenuId())
.append("menuName", getMenuName())
.append("parentId", getParentId())
.append("orderNum", getOrderNum())
.append("path", getPath())
.append("component", getComponent())
.append("isFrame", getIsFrame())
.append("IsCache", getIsCache())
.append("menuType", getMenuType())
.append("visible", getVisible())
.append("status ", getStatus())
.append("perms", getPerms())
.append("icon", getIcon())
.append("createBy", getCreateBy())
.append("createTime", getCreateTime())
.append("updateBy", getUpdateBy())
.append("updateTime", getUpdateTime())
.append("remark", getRemark())
.toString();
}
}

View File

@ -1,226 +1,144 @@
package com.ruoyi.common.core.domain.entity; package com.ruoyi.common.core.domain.entity;
import javax.validation.constraints.NotBlank; import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import javax.validation.constraints.Size; import com.alibaba.excel.annotation.ExcelProperty;
import org.apache.commons.lang3.builder.ToStringBuilder; import com.baomidou.mybatisplus.annotation.TableField;
import org.apache.commons.lang3.builder.ToStringStyle; import com.baomidou.mybatisplus.annotation.TableId;
import com.ruoyi.common.annotation.Excel; import com.baomidou.mybatisplus.annotation.TableLogic;
import com.ruoyi.common.annotation.Excel.ColumnType; import com.baomidou.mybatisplus.annotation.TableName;
import com.ruoyi.common.core.domain.BaseEntity; import com.ruoyi.common.annotation.ExcelDictFormat;
import com.ruoyi.common.convert.ExcelDictConvert;
/** import com.ruoyi.common.core.domain.BaseEntity;
* 角色表 sys_role import io.swagger.annotations.ApiModelProperty;
* import lombok.Data;
* @author ruoyi import lombok.EqualsAndHashCode;
*/ import lombok.NoArgsConstructor;
public class SysRole extends BaseEntity import lombok.experimental.Accessors;
{
private static final long serialVersionUID = 1L; import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Size;
/** 角色ID */
@Excel(name = "角色序号", cellType = ColumnType.NUMERIC) /**
private Long roleId; * 角色表 sys_role
*
/** 角色名称 */ * @author Lion Li
@Excel(name = "角色名称") */
private String roleName;
@Data
/** 角色权限 */ @NoArgsConstructor
@Excel(name = "角色权限") @EqualsAndHashCode(callSuper = true)
private String roleKey; @Accessors(chain = true)
@TableName("sys_role")
/** 角色排序 */ @ExcelIgnoreUnannotated
@Excel(name = "角色排序") public class SysRole extends BaseEntity {
private String roleSort;
/**
/** 数据范围1所有数据权限2自定义数据权限3本部门数据权限4本部门及以下数据权限 */ * 角色ID
@Excel(name = "数据范围", readConverterExp = "1=所有数据权限,2=自定义数据权限,3=本部门数据权限,4=本部门及以下数据权限") */
private String dataScope; @ApiModelProperty(value = "角色ID")
@ExcelProperty(value = "角色序号")
/** 菜单树选择项是否关联显示( 0父子不互相关联显示 1父子互相关联显示 */ @TableId(value = "role_id")
private boolean menuCheckStrictly; private Long roleId;
/** 部门树选择项是否关联显示0父子不互相关联显示 1父子互相关联显示 */ /**
private boolean deptCheckStrictly; * 角色名称
*/
/** 角色状态0正常 1停用 */ @ApiModelProperty(value = "角色名称")
@Excel(name = "角色状态", readConverterExp = "0=正常,1=停用") @ExcelProperty(value = "角色名称")
private String status; @NotBlank(message = "角色名称不能为空")
@Size(min = 0, max = 30, message = "角色名称长度不能超过30个字符")
/** 删除标志0代表存在 2代表删除 */ private String roleName;
private String delFlag;
/**
/** 用户是否存在此角色标识 默认不存在 */ * 角色权限
private boolean flag = false; */
@ApiModelProperty(value = "角色权限")
/** 菜单组 */ @ExcelProperty(value = "角色权限")
private Long[] menuIds; @NotBlank(message = "权限字符不能为空")
@Size(min = 0, max = 100, message = "权限字符长度不能超过100个字符")
/** 部门组(数据权限) */ private String roleKey;
private Long[] deptIds;
/**
public SysRole() * 角色排序
{ */
@ApiModelProperty(value = "角色排序")
} @ExcelProperty(value = "角色排序")
@NotBlank(message = "显示顺序不能为空")
public SysRole(Long roleId) private String roleSort;
{
this.roleId = roleId; /**
} * 数据范围1所有数据权限2自定义数据权限3本部门数据权限4本部门及以下数据权限5仅本人数据权限
*/
public Long getRoleId() @ApiModelProperty(value = "数据范围1所有数据权限2自定义数据权限3本部门数据权限4本部门及以下数据权限5仅本人数据权限")
{ @ExcelProperty(value = "数据范围", converter = ExcelDictConvert.class)
return roleId; @ExcelDictFormat(readConverterExp = "1=所有数据权限,2=自定义数据权限,3=本部门数据权限,4=本部门及以下数据权限,5=仅本人数据权限")
} private String dataScope;
public void setRoleId(Long roleId) /**
{ * 菜单树选择项是否关联显示( 0父子不互相关联显示 1父子互相关联显示
this.roleId = roleId; */
} @ApiModelProperty(value = "菜单树选择项是否关联显示( 0父子不互相关联显示 1父子互相关联显示")
private boolean menuCheckStrictly;
public boolean isAdmin()
{ /**
return isAdmin(this.roleId); * 部门树选择项是否关联显示0父子不互相关联显示 1父子互相关联显示
} */
@ApiModelProperty(value = "部门树选择项是否关联显示0父子不互相关联显示 1父子互相关联显示 ")
public static boolean isAdmin(Long roleId) private boolean deptCheckStrictly;
{
return roleId != null && 1L == roleId; /**
} * 角色状态0正常 1停用
*/
@NotBlank(message = "角色名称不能为空") @ApiModelProperty(value = "角色状态0正常 1停用")
@Size(min = 0, max = 30, message = "角色名称长度不能超过30个字符") @ExcelProperty(value = "角色状态", converter = ExcelDictConvert.class)
public String getRoleName() @ExcelDictFormat(dictType = "sys_common_status")
{ private String status;
return roleName;
} /**
* 删除标志0代表存在 2代表删除
public void setRoleName(String roleName) */
{ @ApiModelProperty(value = "删除标志0代表存在 2代表删除")
this.roleName = roleName; @TableLogic
} private String delFlag;
@NotBlank(message = "权限字符不能为空") /**
@Size(min = 0, max = 100, message = "权限字符长度不能超过100个字符") * 备注
public String getRoleKey() */
{ @ApiModelProperty(value = "备注")
return roleKey; private String remark;
}
/**
public void setRoleKey(String roleKey) * 用户是否存在此角色标识 默认不存在
{ */
this.roleKey = roleKey; @ApiModelProperty(value = "用户是否存在此角色标识 默认不存在")
} @TableField(exist = false)
private boolean flag = false;
@NotBlank(message = "显示顺序不能为空")
public String getRoleSort() /**
{ * 菜单组
return roleSort; */
} @ApiModelProperty(value = "菜单组")
@TableField(exist = false)
public void setRoleSort(String roleSort) private Long[] menuIds;
{
this.roleSort = roleSort; /**
} * 部门组(数据权限)
*/
public String getDataScope() @ApiModelProperty(value = "部门组(数据权限)")
{ @TableField(exist = false)
return dataScope; private Long[] deptIds;
}
public SysRole(Long roleId) {
public void setDataScope(String dataScope) this.roleId = roleId;
{ }
this.dataScope = dataScope;
} @ApiModelProperty(value = "是否管理员")
public boolean isAdmin() {
public boolean isMenuCheckStrictly() return isAdmin(this.roleId);
{ }
return menuCheckStrictly;
} public static boolean isAdmin(Long roleId) {
return roleId != null && 1L == roleId;
public void setMenuCheckStrictly(boolean menuCheckStrictly) }
{
this.menuCheckStrictly = menuCheckStrictly; }
}
public boolean isDeptCheckStrictly()
{
return deptCheckStrictly;
}
public void setDeptCheckStrictly(boolean deptCheckStrictly)
{
this.deptCheckStrictly = deptCheckStrictly;
}
public String getStatus()
{
return status;
}
public void setStatus(String status)
{
this.status = status;
}
public String getDelFlag()
{
return delFlag;
}
public void setDelFlag(String delFlag)
{
this.delFlag = delFlag;
}
public boolean isFlag()
{
return flag;
}
public void setFlag(boolean flag)
{
this.flag = flag;
}
public Long[] getMenuIds()
{
return menuIds;
}
public void setMenuIds(Long[] menuIds)
{
this.menuIds = menuIds;
}
public Long[] getDeptIds()
{
return deptIds;
}
public void setDeptIds(Long[] deptIds)
{
this.deptIds = deptIds;
}
@Override
public String toString() {
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
.append("roleId", getRoleId())
.append("roleName", getRoleName())
.append("roleKey", getRoleKey())
.append("roleSort", getRoleSort())
.append("dataScope", getDataScope())
.append("menuCheckStrictly", isMenuCheckStrictly())
.append("deptCheckStrictly", isDeptCheckStrictly())
.append("status", getStatus())
.append("delFlag", getDelFlag())
.append("createBy", getCreateBy())
.append("createTime", getCreateTime())
.append("updateBy", getUpdateBy())
.append("updateTime", getUpdateTime())
.append("remark", getRemark())
.toString();
}
}

View File

@ -1,328 +1,187 @@
package com.ruoyi.common.core.domain.entity; package com.ruoyi.common.core.domain.entity;
import java.util.Date; import com.baomidou.mybatisplus.annotation.*;
import java.util.List; import com.fasterxml.jackson.annotation.JsonIgnore;
import javax.validation.constraints.Email; import com.fasterxml.jackson.annotation.JsonProperty;
import javax.validation.constraints.NotBlank; import com.ruoyi.common.core.domain.BaseEntity;
import javax.validation.constraints.Size; import com.ruoyi.common.xss.Xss;
import org.apache.commons.lang3.builder.ToStringBuilder; import io.swagger.annotations.ApiModel;
import org.apache.commons.lang3.builder.ToStringStyle; import io.swagger.annotations.ApiModelProperty;
import com.fasterxml.jackson.annotation.JsonIgnore; import lombok.Data;
import com.fasterxml.jackson.annotation.JsonProperty; import lombok.EqualsAndHashCode;
import com.ruoyi.common.annotation.Excel; import lombok.NoArgsConstructor;
import com.ruoyi.common.annotation.Excel.ColumnType; import lombok.experimental.Accessors;
import com.ruoyi.common.annotation.Excel.Type;
import com.ruoyi.common.annotation.Excels; import javax.validation.constraints.Email;
import com.ruoyi.common.core.domain.BaseEntity; import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Size;
/** import java.util.Date;
* 用户对象 sys_user import java.util.List;
*
* @author ruoyi /**
*/ * 用户对象 sys_user
public class SysUser extends BaseEntity *
{ * @author Lion Li
private static final long serialVersionUID = 1L; */
/** 用户ID */ @Data
@Excel(name = "用户序号", cellType = ColumnType.NUMERIC, prompt = "用户编号") @NoArgsConstructor
private Long userId; @EqualsAndHashCode(callSuper = true)
@Accessors(chain = true)
/** 部门ID */ @TableName("sys_user")
@Excel(name = "部门编号", type = Type.IMPORT) @ApiModel("用户信息业务对象")
private Long deptId; public class SysUser extends BaseEntity {
/** 用户账号 */ /**
@Excel(name = "登录名称") * 用户ID
private String userName; */
@ApiModelProperty(value = "用户ID")
/** 用户昵称 */ @TableId(value = "user_id")
@Excel(name = "用户名称") private Long userId;
private String nickName;
/**
/** 用户邮箱 */ * 部门ID
@Excel(name = "用户邮箱") */
private String email; @ApiModelProperty(value = "部门ID")
private Long deptId;
/** 手机号码 */
@Excel(name = "手机号码") /**
private String phonenumber; * 用户账号
*/
/** 用户性别 */ @ApiModelProperty(value = "用户账号")
@Excel(name = "用户性别", readConverterExp = "0=男,1=女,2=未知") @Xss(message = "用户账号不能包含脚本字符")
private String sex; @NotBlank(message = "用户账号不能为空")
@Size(min = 0, max = 30, message = "用户账号长度不能超过30个字符")
/** 用户头像 */ private String userName;
private String avatar;
/**
/** 密码 */ * 用户昵称
private String password; */
@ApiModelProperty(value = "用户昵称")
/** 盐加密 */ @Xss(message = "用户昵称不能包含脚本字符")
private String salt; @Size(min = 0, max = 30, message = "用户昵称长度不能超过30个字符")
private String nickName;
/** 帐号状态0正常 1停用 */
@Excel(name = "帐号状态", readConverterExp = "0=正常,1=停用") /**
private String status; * 用户邮箱
*/
/** 删除标志0代表存在 2代表删除 */ @ApiModelProperty(value = "用户邮箱")
private String delFlag; @Email(message = "邮箱格式不正确")
@Size(min = 0, max = 50, message = "邮箱长度不能超过50个字符")
/** 最后登录IP */ private String email;
@Excel(name = "最后登录IP", type = Type.EXPORT)
private String loginIp; /**
* 手机号码
/** 最后登录时间 */ */
@Excel(name = "最后登录时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss", type = Type.EXPORT) @ApiModelProperty(value = "手机号码")
private Date loginDate; private String phonenumber;
/** 部门对象 */ /**
@Excels({ * 用户性别
@Excel(name = "部门名称", targetAttr = "deptName", type = Type.EXPORT), */
@Excel(name = "部门负责人", targetAttr = "leader", type = Type.EXPORT) @ApiModelProperty(value = "用户性别")
}) private String sex;
private SysDept dept;
/**
/** 角色对象 */ * 用户头像
private List<SysRole> roles; */
@ApiModelProperty(value = "用户头像")
/** 角色组 */ private String avatar;
private Long[] roleIds;
/**
/** 岗位组 */ * 密码
private Long[] postIds; */
@ApiModelProperty(value = "密码")
public SysUser() @TableField(
{ insertStrategy = FieldStrategy.NOT_EMPTY,
updateStrategy = FieldStrategy.NOT_EMPTY,
} whereStrategy = FieldStrategy.NOT_EMPTY
)
public SysUser(Long userId) private String password;
{
this.userId = userId; @JsonIgnore
} @JsonProperty
public String getPassword() {
public Long getUserId() return password;
{ }
return userId;
} /**
* 帐号状态0正常 1停用
public void setUserId(Long userId) */
{ @ApiModelProperty(value = "帐号状态0正常 1停用")
this.userId = userId; private String status;
}
/**
public boolean isAdmin() * 删除标志0代表存在 2代表删除
{ */
return isAdmin(this.userId); @ApiModelProperty(value = "删除标志0代表存在 2代表删除")
} @TableLogic
private String delFlag;
public static boolean isAdmin(Long userId)
{ /**
return userId != null && 1L == userId; * 最后登录IP
} */
@ApiModelProperty(value = "最后登录IP")
public Long getDeptId() private String loginIp;
{
return deptId; /**
} * 最后登录时间
*/
public void setDeptId(Long deptId) @ApiModelProperty(value = "最后登录时间")
{ private Date loginDate;
this.deptId = deptId;
} /**
* 备注
@Size(min = 0, max = 30, message = "用户昵称长度不能超过30个字符") */
public String getNickName() @ApiModelProperty(value = "备注")
{ private String remark;
return nickName;
} /**
* 部门对象
public void setNickName(String nickName) */
{ @ApiModelProperty(value = "部门对象")
this.nickName = nickName; @TableField(exist = false)
} private SysDept dept;
@NotBlank(message = "用户账号不能为空") /**
@Size(min = 0, max = 30, message = "用户账号长度不能超过30个字符") * 角色对象
public String getUserName() */
{ @ApiModelProperty(value = "角色对象")
return userName; @TableField(exist = false)
} private List<SysRole> roles;
public void setUserName(String userName) /**
{ * 角色组
this.userName = userName; */
} @ApiModelProperty(value = "角色组")
@TableField(exist = false)
@Email(message = "邮箱格式不正确") private Long[] roleIds;
@Size(min = 0, max = 50, message = "邮箱长度不能超过50个字符")
public String getEmail() /**
{ * 岗位组
return email; */
} @ApiModelProperty(value = "岗位组")
@TableField(exist = false)
public void setEmail(String email) private Long[] postIds;
{
this.email = email; /**
} * 数据权限 当前角色ID
*/
@Size(min = 0, max = 11, message = "手机号码长度不能超过11个字符") @ApiModelProperty(value = "角色ID")
public String getPhonenumber() @TableField(exist = false)
{ private Long roleId;
return phonenumber;
} public SysUser(Long userId) {
this.userId = userId;
public void setPhonenumber(String phonenumber) }
{
this.phonenumber = phonenumber; @ApiModelProperty(value = "是否管理员")
} public boolean isAdmin() {
return isAdmin(this.userId);
public String getSex() }
{
return sex; public static boolean isAdmin(Long userId) {
} return userId != null && 1L == userId;
}
public void setSex(String sex)
{ }
this.sex = sex;
}
public String getAvatar()
{
return avatar;
}
public void setAvatar(String avatar)
{
this.avatar = avatar;
}
@JsonIgnore
@JsonProperty
public String getPassword()
{
return password;
}
public void setPassword(String password)
{
this.password = password;
}
public String getSalt()
{
return salt;
}
public void setSalt(String salt)
{
this.salt = salt;
}
public String getStatus()
{
return status;
}
public void setStatus(String status)
{
this.status = status;
}
public String getDelFlag()
{
return delFlag;
}
public void setDelFlag(String delFlag)
{
this.delFlag = delFlag;
}
public String getLoginIp()
{
return loginIp;
}
public void setLoginIp(String loginIp)
{
this.loginIp = loginIp;
}
public Date getLoginDate()
{
return loginDate;
}
public void setLoginDate(Date loginDate)
{
this.loginDate = loginDate;
}
public SysDept getDept()
{
return dept;
}
public void setDept(SysDept dept)
{
this.dept = dept;
}
public List<SysRole> getRoles()
{
return roles;
}
public void setRoles(List<SysRole> roles)
{
this.roles = roles;
}
public Long[] getRoleIds()
{
return roleIds;
}
public void setRoleIds(Long[] roleIds)
{
this.roleIds = roleIds;
}
public Long[] getPostIds()
{
return postIds;
}
public void setPostIds(Long[] postIds)
{
this.postIds = postIds;
}
@Override
public String toString() {
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
.append("userId", getUserId())
.append("deptId", getDeptId())
.append("userName", getUserName())
.append("nickName", getNickName())
.append("email", getEmail())
.append("phonenumber", getPhonenumber())
.append("sex", getSex())
.append("avatar", getAvatar())
.append("password", getPassword())
.append("salt", getSalt())
.append("status", getStatus())
.append("delFlag", getDelFlag())
.append("loginIp", getLoginIp())
.append("loginDate", getLoginDate())
.append("createBy", getCreateBy())
.append("createTime", getCreateTime())
.append("updateBy", getUpdateBy())
.append("updateTime", getUpdateTime())
.append("remark", getRemark())
.append("dept", getDept())
.toString();
}
}

View File

@ -1,69 +1,43 @@
package com.ruoyi.common.core.domain.model; package com.ruoyi.common.core.domain.model;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.experimental.Accessors;
/** /**
* 用户登录对象 * 用户登录对象
* *
* @author ruoyi * @author Lion Li
*/ */
public class LoginBody
{ @Data
@Accessors(chain = true)
@ApiModel("用户登录对象")
public class LoginBody {
/** /**
* 用户名 * 用户名
*/ */
@ApiModelProperty(value = "用户名")
private String username; private String username;
/** /**
* 用户密码 * 用户密码
*/ */
@ApiModelProperty(value = "用户密码")
private String password; private String password;
/** /**
* 验证码 * 验证码
*/ */
@ApiModelProperty(value = "验证码")
private String code; private String code;
/** /**
* 唯一标识 * 唯一标识
*/ */
@ApiModelProperty(value = "唯一标识")
private String uuid = ""; private String uuid = "";
public String getUsername()
{
return username;
}
public void setUsername(String username)
{
this.username = username;
}
public String getPassword()
{
return password;
}
public void setPassword(String password)
{
this.password = password;
}
public String getCode()
{
return code;
}
public void setCode(String code)
{
this.code = code;
}
public String getUuid()
{
return uuid;
}
public void setUuid(String uuid)
{
this.uuid = uuid;
}
} }

View File

@ -1,228 +1,142 @@
package com.ruoyi.common.core.domain.model; package com.ruoyi.common.core.domain.model;
import java.util.Collection; import com.fasterxml.jackson.annotation.JsonIgnore;
import java.util.Set; import lombok.Data;
import org.springframework.security.core.GrantedAuthority; import lombok.NoArgsConstructor;
import org.springframework.security.core.userdetails.UserDetails; import lombok.experimental.Accessors;
import com.fasterxml.jackson.annotation.JsonIgnore; import org.springframework.security.core.GrantedAuthority;
import com.ruoyi.common.core.domain.entity.SysUser; import org.springframework.security.core.userdetails.UserDetails;
/** import java.util.Collection;
* 登录用户身份权限 import java.util.Set;
*
* @author ruoyi /**
*/ * 登录用户身份权限
public class LoginUser implements UserDetails *
{ * @author Lion Li
private static final long serialVersionUID = 1L; */
/** @Data
* 用户唯一标识 @NoArgsConstructor
*/ @Accessors(chain = true)
private String token; public class LoginUser implements UserDetails {
/** private static final long serialVersionUID = 1L;
* 登录时间
*/ /**
private Long loginTime; * 用户ID
*/
/** private Long userId;
* 过期时间
*/ /**
private Long expireTime; * 部门ID
*/
/** private Long deptId;
* 登录IP地址
*/ /**
private String ipaddr; * 用户唯一标识
*/
/** private String token;
* 登录地点
*/ /**
private String loginLocation; * 登录时间
*/
/** private Long loginTime;
* 浏览器类型
*/ /**
private String browser; * 过期时间
*/
/** private Long expireTime;
* 操作系统
*/ /**
private String os; * 登录IP地址
*/
/** private String ipaddr;
* 权限列表
*/ /**
private Set<String> permissions; * 登录地点
*/
/** private String loginLocation;
* 用户信息
*/ /**
private SysUser user; * 浏览器类型
*/
public String getToken() private String browser;
{
return token; /**
} * 操作系统
*/
public void setToken(String token) private String os;
{
this.token = token; /**
} * 菜单权限
*/
public LoginUser() private Set<String> menuPermissions;
{
} /**
* 角色权限
public LoginUser(SysUser user, Set<String> permissions) */
{ private Set<String> rolePermissions;
this.user = user;
this.permissions = permissions; /**
} * 用户名
*/
@JsonIgnore private String username;
@Override
public String getPassword() /**
{ * 密码
return user.getPassword(); */
} private String password;
@Override @JsonIgnore
public String getUsername() @Override
{ public String getPassword() {
return user.getUserName(); return password;
} }
/** @Override
* 账户是否未过期,过期无法验证 public String getUsername() {
*/ return username;
@JsonIgnore }
@Override
public boolean isAccountNonExpired() /**
{ * 账户是否未过期,过期无法验证
return true; */
} @JsonIgnore
@Override
/** public boolean isAccountNonExpired() {
* 指定用户是否解锁,锁定的用户无法进行身份验证 return true;
* }
* @return
*/ /**
@JsonIgnore * 指定用户是否解锁,锁定的用户无法进行身份验证
@Override */
public boolean isAccountNonLocked() @JsonIgnore
{ @Override
return true; public boolean isAccountNonLocked() {
} return true;
}
/**
* 指示是否已过期的用户的凭据(密码),过期的凭据防止认证 /**
* * 指示是否已过期的用户的凭据(密码),过期的凭据防止认证
* @return */
*/ @JsonIgnore
@JsonIgnore @Override
@Override public boolean isCredentialsNonExpired() {
public boolean isCredentialsNonExpired() return true;
{ }
return true;
} /**
* 是否可用 ,禁用的用户不能身份验证
/** */
* 是否可用 ,禁用的用户不能身份验证 @JsonIgnore
* @Override
* @return public boolean isEnabled() {
*/ return true;
@JsonIgnore }
@Override
public boolean isEnabled() @Override
{ public Collection<? extends GrantedAuthority> getAuthorities() {
return true; return null;
} }
}
public Long getLoginTime()
{
return loginTime;
}
public void setLoginTime(Long loginTime)
{
this.loginTime = loginTime;
}
public String getIpaddr()
{
return ipaddr;
}
public void setIpaddr(String ipaddr)
{
this.ipaddr = ipaddr;
}
public String getLoginLocation()
{
return loginLocation;
}
public void setLoginLocation(String loginLocation)
{
this.loginLocation = loginLocation;
}
public String getBrowser()
{
return browser;
}
public void setBrowser(String browser)
{
this.browser = browser;
}
public String getOs()
{
return os;
}
public void setOs(String os)
{
this.os = os;
}
public Long getExpireTime()
{
return expireTime;
}
public void setExpireTime(Long expireTime)
{
this.expireTime = expireTime;
}
public Set<String> getPermissions()
{
return permissions;
}
public void setPermissions(Set<String> permissions)
{
this.permissions = permissions;
}
public SysUser getUser()
{
return user;
}
public void setUser(SysUser user)
{
this.user = user;
}
@Override
public Collection<? extends GrantedAuthority> getAuthorities()
{
return null;
}
}

View File

@ -0,0 +1,13 @@
package com.ruoyi.common.core.domain.model;
import io.swagger.annotations.ApiModel;
/**
* 用户注册对象
*
* @author Lion Li
*/
@ApiModel("用户注册对象")
public class RegisterBody extends LoginBody {
}

View File

@ -0,0 +1,98 @@
package com.ruoyi.common.core.mybatisplus.core;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.common.utils.BeanCopyUtils;
import org.apache.ibatis.annotations.Param;
import java.io.Serializable;
import java.util.Collection;
import java.util.List;
import java.util.Map;
/**
* 自定义 Mapper 接口, 实现 自定义扩展
*
* @author Lion Li
* @since 2021-05-13
*/
public interface BaseMapperPlus<T> extends BaseMapper<T> {
/**
* 单sql批量插入( 全量填充 )
*/
int insertAll(@Param("list") Collection<T> batchList);
/**
* 根据 ID 查询
*/
default <V> V selectVoById(Serializable id, Class<V> voClass){
T obj = this.selectById(id);
if (ObjectUtil.isNull(obj)) {
return null;
}
return BeanCopyUtils.copy(obj, voClass);
}
/**
* 查询根据ID 批量查询)
*/
default <V> List<V> selectVoBatchIds(Collection<? extends Serializable> idList, Class<V> voClass){
List<T> list = this.selectBatchIds(idList);
if (CollUtil.isEmpty(list)) {
return CollUtil.newArrayList();
}
return BeanCopyUtils.copyList(list, voClass);
}
/**
* 查询(根据 columnMap 条件)
*/
default <V> List<V> selectVoByMap(Map<String, Object> map, Class<V> voClass){
List<T> list = this.selectByMap(map);
if (CollUtil.isEmpty(list)) {
return CollUtil.newArrayList();
}
return BeanCopyUtils.copyList(list, voClass);
}
/**
* 根据 entity 条件,查询一条记录
*/
default <V> V selectVoOne(Wrapper<T> wrapper, Class<V> voClass) {
T obj = this.selectOne(wrapper);
if (ObjectUtil.isNull(obj)) {
return null;
}
return BeanCopyUtils.copy(obj, voClass);
}
/**
* 根据 entity 条件,查询全部记录
*/
default <V> List<V> selectVoList(Wrapper<T> wrapper, Class<V> voClass) {
List<T> list = this.selectList(wrapper);
if (CollUtil.isEmpty(list)) {
return CollUtil.newArrayList();
}
return BeanCopyUtils.copyList(list, voClass);
}
/**
* 分页查询VO
*/
default <V, P extends IPage<V>> P selectVoPage(IPage<T> page, Wrapper<T> wrapper, Class<V> voClass) {
IPage<T> pageData = this.selectPage(page, wrapper);
IPage<V> voPage = new Page<>(pageData.getCurrent(), pageData.getSize(), pageData.getTotal());
if (CollUtil.isEmpty(pageData.getRecords())) {
return (P) voPage;
}
voPage.setRecords(BeanCopyUtils.copyList(pageData.getRecords(), voClass));
return (P) voPage;
}
}

View File

@ -0,0 +1,155 @@
package com.ruoyi.common.core.mybatisplus.core;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.common.core.page.PagePlus;
import java.io.Serializable;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.function.Function;
/**
* 自定义 Service 接口, 实现 数据库实体与 vo 对象转换返回
*
* @param <T> 数据实体类
* @param <V> vo类
* @author Lion Li
*/
public interface IServicePlus<T, V> extends IService<T> {
/**
* @param id 主键id
* @return V对象
*/
V getVoById(Serializable id);
/**
* @param convertor 自定义转换器
*/
default V getVoById(Serializable id, Function<T, V> convertor) {
return convertor.apply(getById(id));
}
/**
* @param idList id列表
* @return V对象
*/
List<V> listVoByIds(Collection<? extends Serializable> idList);
/**
* @param convertor 自定义转换器
*/
default List<V> listVoByIds(Collection<? extends Serializable> idList,
Function<Collection<T>, List<V>> convertor) {
List<T> list = getBaseMapper().selectBatchIds(idList);
if (list == null) {
return null;
}
return convertor.apply(list);
}
/**
* @param columnMap 表字段 map 对象
* @return V对象
*/
List<V> listVoByMap(Map<String, Object> columnMap);
/**
* @param convertor 自定义转换器
*/
default List<V> listVoByMap(Map<String, Object> columnMap,
Function<Collection<T>, List<V>> convertor) {
List<T> list = getBaseMapper().selectByMap(columnMap);
if (list == null) {
return null;
}
return convertor.apply(list);
}
/**
* @param queryWrapper 查询条件
* @return V对象
*/
V getVoOne(Wrapper<T> queryWrapper);
/**
* @param convertor 自定义转换器
*/
default V getVoOne(Wrapper<T> queryWrapper, Function<T, V> convertor) {
return convertor.apply(getOne(queryWrapper, true));
}
/**
* @param queryWrapper 查询条件
* @return V对象
*/
List<V> listVo(Wrapper<T> queryWrapper);
/**
* @param convertor 自定义转换器
*/
default List<V> listVo(Wrapper<T> queryWrapper, Function<Collection<T>, List<V>> convertor) {
List<T> list = getBaseMapper().selectList(queryWrapper);
if (list == null) {
return null;
}
return convertor.apply(list);
}
default List<V> listVo() {
return listVo(Wrappers.emptyWrapper());
}
/**
* @param convertor 自定义转换器
*/
default List<V> listVo(Function<Collection<T>, List<V>> convertor) {
return listVo(Wrappers.emptyWrapper(), convertor);
}
/**
* @param page 分页对象
* @param queryWrapper 查询条件
* @return V对象
* @deprecated 3.6.0 移除 请使用 {@link ServicePlusImpl#pageVo(IPage, Wrapper)}
*/
@Deprecated
PagePlus<T, V> pageVo(PagePlus<T, V> page, Wrapper<T> queryWrapper);
/**
* @param convertor 自定义转换器
* @deprecated 3.6.0 移除 请使用 {@link ServicePlusImpl#pageVo(IPage, Wrapper)}
*/
@Deprecated
default PagePlus<T, V> pageVo(PagePlus<T, V> page, Wrapper<T> queryWrapper,
Function<Collection<T>, List<V>> convertor) {
PagePlus<T, V> result = getBaseMapper().selectPage(page, queryWrapper);
return result.setRecordsVo(convertor.apply(result.getRecords()));
}
/**
* @deprecated 3.6.0 移除 请使用 {@link ServicePlusImpl#pageVo(IPage, Wrapper)}
*/
@Deprecated
default PagePlus<T, V> pageVo(PagePlus<T, V> page) {
return pageVo(page, Wrappers.emptyWrapper());
}
/**
* @param convertor 自定义转换器
* @deprecated 3.6.0 移除 请使用 {@link ServicePlusImpl#pageVo(IPage, Wrapper)}
*/
@Deprecated
default PagePlus<T, V> pageVo(PagePlus<T, V> page, Function<Collection<T>, List<V>> convertor) {
return pageVo(page, Wrappers.emptyWrapper(), convertor);
}
boolean saveAll(Collection<T> entityList);
boolean saveOrUpdateAll(Collection<T> entityList);
}

View File

@ -0,0 +1,226 @@
package com.ruoyi.common.core.mybatisplus.core;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.metadata.TableInfo;
import com.baomidou.mybatisplus.core.metadata.TableInfoHelper;
import com.baomidou.mybatisplus.core.toolkit.Assert;
import com.baomidou.mybatisplus.core.toolkit.ReflectionKit;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.common.core.page.PagePlus;
import com.ruoyi.common.utils.BeanCopyUtils;
import com.ruoyi.common.utils.reflect.ReflectUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Map;
/**
* IServicePlus 实现类
*
* @param <M> Mapper类
* @param <T> 数据实体类
* @param <V> vo类
* @author Lion Li
*/
@Slf4j
@SuppressWarnings("unchecked")
public class ServicePlusImpl<M extends BaseMapperPlus<T>, T, V> extends ServiceImpl<M, T> implements IServicePlus<T, V> {
@Autowired
protected M baseMapper;
@Override
public M getBaseMapper() {
return baseMapper;
}
protected Class<T> entityClass = currentModelClass();
@Override
public Class<T> getEntityClass() {
return entityClass;
}
protected Class<M> mapperClass = currentMapperClass();
protected Class<V> voClass = currentVoClass();
public Class<V> getVoClass() {
return voClass;
}
@Override
protected Class<M> currentMapperClass() {
return (Class<M>) ReflectionKit.getSuperClassGenericType(this.getClass(), ServicePlusImpl.class, 0);
}
@Override
protected Class<T> currentModelClass() {
return (Class<T>) ReflectionKit.getSuperClassGenericType(this.getClass(), ServicePlusImpl.class, 1);
}
protected Class<V> currentVoClass() {
return (Class<V>) ReflectionKit.getSuperClassGenericType(this.getClass(), ServicePlusImpl.class, 2);
}
/**
* 单条执行性能差 适用于列表对象内容不确定
*/
@Override
public boolean saveBatch(Collection<T> entityList, int batchSize) {
return super.saveBatch(entityList, batchSize);
}
@Override
public boolean saveOrUpdate(T entity) {
return super.saveOrUpdate(entity);
}
/**
* 单条执行性能差 适用于列表对象内容不确定
*/
@Override
public boolean saveOrUpdateBatch(Collection<T> entityList, int batchSize) {
return super.saveOrUpdateBatch(entityList, batchSize);
}
@Override
public boolean updateBatchById(Collection<T> entityList, int batchSize) {
return super.updateBatchById(entityList, batchSize);
}
/**
* 单sql批量插入( 全量填充 无视数据库默认值 )
* 适用于无脑插入
*/
@Override
public boolean saveBatch(Collection<T> entityList) {
return saveBatch(entityList, DEFAULT_BATCH_SIZE);
}
@Override
public boolean saveOrUpdateBatch(Collection<T> entityList) {
return saveOrUpdateBatch(entityList, DEFAULT_BATCH_SIZE);
}
@Override
public boolean updateBatchById(Collection<T> entityList) {
return updateBatchById(entityList, DEFAULT_BATCH_SIZE);
}
/**
* 单sql批量插入( 全量填充 )
*/
@Override
public boolean saveAll(Collection<T> entityList) {
if (CollUtil.isEmpty(entityList)) {
return false;
}
return baseMapper.insertAll(entityList) == entityList.size();
}
/**
* 全量保存或更新 ( 按主键区分 )
*/
@Override
public boolean saveOrUpdateAll(Collection<T> entityList) {
if (CollUtil.isEmpty(entityList)) {
return false;
}
TableInfo tableInfo = TableInfoHelper.getTableInfo(entityClass);
Assert.notNull(tableInfo, "error: can not execute. because can not find cache of TableInfo for entity!");
String keyProperty = tableInfo.getKeyProperty();
Assert.notEmpty(keyProperty, "error: can not execute. because can not find column for id from entity!");
List<T> addList = new ArrayList<>();
List<T> updateList = new ArrayList<>();
int row = 0;
for (T entity : entityList) {
Object id = ReflectUtils.invokeGetter(entity, keyProperty);
if (ObjectUtil.isNull(id)) {
addList.add(entity);
} else {
updateList.add(entity);
}
}
if (CollUtil.isNotEmpty(updateList) && updateBatchById(updateList)) {
row += updateList.size();
}
if (CollUtil.isNotEmpty(addList)) {
row += baseMapper.insertAll(addList);
}
return row == entityList.size();
}
/**
* 根据 ID 查询
*/
@Override
public V getVoById(Serializable id) {
return getBaseMapper().selectVoById(id, voClass);
}
/**
* 查询根据ID 批量查询)
*/
@Override
public List<V> listVoByIds(Collection<? extends Serializable> idList) {
return getBaseMapper().selectVoBatchIds(idList, voClass);
}
/**
* 查询(根据 columnMap 条件)
*/
@Override
public List<V> listVoByMap(Map<String, Object> columnMap) {
return getBaseMapper().selectVoByMap(columnMap, voClass);
}
/**
* 根据 Wrapper查询一条记录 <br/>
* <p>结果集,如果是多个会抛出异常,随机取一条加上限制条件 wrapper.last("LIMIT 1")</p>
*/
@Override
public V getVoOne(Wrapper<T> queryWrapper) {
return getBaseMapper().selectVoOne(queryWrapper, voClass);
}
/**
* 查询列表
*/
@Override
public List<V> listVo(Wrapper<T> queryWrapper) {
return getBaseMapper().selectVoList(queryWrapper, voClass);
}
/**
* 翻页查询
* @deprecated 3.6.0 移除 请使用 {@link #pageVo(IPage, Wrapper)}
*/
@Override
@Deprecated
public PagePlus<T, V> pageVo(PagePlus<T, V> page, Wrapper<T> queryWrapper) {
PagePlus<T, V> result = getBaseMapper().selectPage(page, queryWrapper);
List<V> volist = BeanCopyUtils.copyList(result.getRecords(), voClass);
result.setRecordsVo(volist);
return result;
}
/**
* 翻页查询
*
* @param page 翻页对象
* @param queryWrapper 实体对象封装操作类
*/
public <P extends IPage<V>> P pageVo(IPage<T> page, Wrapper<T> queryWrapper) {
return getBaseMapper().selectVoPage(page, queryWrapper, voClass);
}
}

View File

@ -0,0 +1,101 @@
package com.ruoyi.common.core.mybatisplus.methods;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.core.injector.AbstractMethod;
import com.baomidou.mybatisplus.core.metadata.TableFieldInfo;
import com.baomidou.mybatisplus.core.metadata.TableInfo;
import com.baomidou.mybatisplus.core.metadata.TableInfoHelper;
import com.ruoyi.common.utils.StringUtils;
import org.apache.ibatis.executor.keygen.Jdbc3KeyGenerator;
import org.apache.ibatis.executor.keygen.KeyGenerator;
import org.apache.ibatis.executor.keygen.NoKeyGenerator;
import org.apache.ibatis.mapping.MappedStatement;
import org.apache.ibatis.mapping.SqlSource;
import java.util.List;
/**
* 单sql批量插入( 全量填充 )
*
* @author Lion Li
*/
public class InsertAll extends AbstractMethod {
private final static String[] FILL_PROPERTY = {"createTime", "createBy", "updateTime", "updateBy"};
@Override
public MappedStatement injectMappedStatement(Class<?> mapperClass, Class<?> modelClass, TableInfo tableInfo) {
final String sql = "<script>insert into %s %s values %s</script>";
final String fieldSql = prepareFieldSql(tableInfo);
final String valueSql = prepareValuesSqlForMysqlBatch(tableInfo);
KeyGenerator keyGenerator = new NoKeyGenerator();
String sqlMethod = "insertAll";
String keyProperty = null;
String keyColumn = null;
// 表包含主键处理逻辑,如果不包含主键当普通字段处理
if (StringUtils.isNotBlank(tableInfo.getKeyProperty())) {
if (tableInfo.getIdType() == IdType.AUTO) {
/** 自增主键 */
keyGenerator = new Jdbc3KeyGenerator();
keyProperty = tableInfo.getKeyProperty();
keyColumn = tableInfo.getKeyColumn();
} else {
if (null != tableInfo.getKeySequence()) {
keyGenerator = TableInfoHelper.genKeyGenerator(sqlMethod, tableInfo, builderAssistant);
keyProperty = tableInfo.getKeyProperty();
keyColumn = tableInfo.getKeyColumn();
}
}
}
final String sqlResult = String.format(sql, tableInfo.getTableName(), fieldSql, valueSql);
SqlSource sqlSource = languageDriver.createSqlSource(configuration, sqlResult, modelClass);
return this.addInsertMappedStatement(mapperClass, modelClass, sqlMethod, sqlSource, keyGenerator, keyProperty, keyColumn);
}
private String prepareFieldSql(TableInfo tableInfo) {
StringBuilder fieldSql = new StringBuilder();
if (StringUtils.isNotBlank(tableInfo.getKeyColumn())) {
fieldSql.append(tableInfo.getKeyColumn()).append(",");
}
tableInfo.getFieldList().forEach(x -> fieldSql.append(x.getColumn()).append(","));
fieldSql.delete(fieldSql.length() - 1, fieldSql.length());
fieldSql.insert(0, "(");
fieldSql.append(")");
return fieldSql.toString();
}
private String prepareValuesSqlForMysqlBatch(TableInfo tableInfo) {
final StringBuilder valueSql = new StringBuilder();
valueSql.append("<foreach collection=\"list\" item=\"item\" index=\"index\" open=\"(\" separator=\"),(\" close=\")\">");
if (StringUtils.isNotBlank(tableInfo.getKeyColumn())) {
valueSql.append("\n#{item.").append(tableInfo.getKeyProperty()).append("},\n");
}
List<TableFieldInfo> fieldList = tableInfo.getFieldList();
int last = fieldList.size() - 1;
for (int i = 0; i < fieldList.size(); i++) {
String property = fieldList.get(i).getProperty();
if (!StringUtils.equalsAny(property, FILL_PROPERTY)) {
valueSql.append("<if test=\"item.").append(property).append(" != null\">");
valueSql.append("#{item.").append(property).append("}");
if (i != last) {
valueSql.append(",");
}
valueSql.append("</if>");
valueSql.append("<if test=\"item.").append(property).append(" == null\">");
valueSql.append("DEFAULT");
if (i != last) {
valueSql.append(",");
}
valueSql.append("</if>");
} else {
valueSql.append("#{item.").append(property).append("}");
if (i != last) {
valueSql.append(",");
}
}
}
valueSql.append("</foreach>");
return valueSql.toString();
}
}

View File

@ -1,72 +0,0 @@
package com.ruoyi.common.core.page;
import com.ruoyi.common.utils.StringUtils;
/**
* 分页数据
*
* @author ruoyi
*/
public class PageDomain
{
/** 当前记录起始索引 */
private Integer pageNum;
/** 每页显示记录数 */
private Integer pageSize;
/** 排序列 */
private String orderByColumn;
/** 排序的方向desc或者asc */
private String isAsc = "asc";
public String getOrderBy()
{
if (StringUtils.isEmpty(orderByColumn))
{
return "";
}
return StringUtils.toUnderScoreCase(orderByColumn) + " " + isAsc;
}
public Integer getPageNum()
{
return pageNum;
}
public void setPageNum(Integer pageNum)
{
this.pageNum = pageNum;
}
public Integer getPageSize()
{
return pageSize;
}
public void setPageSize(Integer pageSize)
{
this.pageSize = pageSize;
}
public String getOrderByColumn()
{
return orderByColumn;
}
public void setOrderByColumn(String orderByColumn)
{
this.orderByColumn = orderByColumn;
}
public String getIsAsc()
{
return isAsc;
}
public void setIsAsc(String isAsc)
{
this.isAsc = isAsc;
}
}

View File

@ -0,0 +1,158 @@
package com.ruoyi.common.core.page;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.metadata.OrderItem;
import lombok.Data;
import lombok.experimental.Accessors;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
/**
* 分页 Page 增强对象
*
* @param <T> 数据库实体
* @param <K> vo实体
* @author Lion Li
* @deprecated 3.6.0 删除 请使用 {@link com.ruoyi.common.core.domain.PageQuery#build()}
*/
@Data
@Accessors(chain = true)
@Deprecated
public class PagePlus<T,K> implements IPage<T> {
/**
* domain实体列表
*/
private List<T> records = Collections.emptyList();
/**
* vo实体列表
*/
private List<K> recordsVo = Collections.emptyList();
/**
* 总数
*/
private long total = 0L;
/**
* 页长度
*/
private long size = 10L;
/**
* 当前页
*/
private long current = 1L;
/**
* 排序字段信息
*/
private List<OrderItem> orders = new ArrayList<>();
/**
* 自动优化 COUNT SQL
*/
private boolean optimizeCountSql = true;
/**
* 是否进行 count 查询
*/
private boolean isSearchCount = true;
/**
* 是否命中count缓存
*/
private boolean hitCount = false;
/**
* countId
*/
private String countId;
/**
* 最大limit
*/
private Long maxLimit;
public PagePlus() {
}
public PagePlus(long current, long size) {
this(current, size, 0L);
}
public PagePlus(long current, long size, long total) {
this(current, size, total, true);
}
public PagePlus(long current, long size, boolean isSearchCount) {
this(current, size, 0L, isSearchCount);
}
public PagePlus(long current, long size, long total, boolean isSearchCount) {
if (current > 1L) {
this.current = current;
}
this.size = size;
this.total = total;
this.isSearchCount = isSearchCount;
}
@Override
public String countId() {
return this.getCountId();
}
@Override
public Long maxLimit() {
return this.getMaxLimit();
}
public PagePlus<T, K> addOrder(OrderItem... items) {
this.orders.addAll(Arrays.asList(items));
return this;
}
public PagePlus<T, K> addOrder(List<OrderItem> items) {
this.orders.addAll(items);
return this;
}
@Override
public List<OrderItem> orders() {
return this.getOrders();
}
@Override
public boolean optimizeCountSql() {
return this.optimizeCountSql;
}
@Override
public long getPages() {
// 解决 github issues/3208
return IPage.super.getPages();
}
public static <T,K> PagePlus<T,K> of(long current, long size) {
return of(current, size, 0);
}
public static <T,K> PagePlus<T,K> of(long current, long size, long total) {
return of(current, size, total, true);
}
public static <T,K> PagePlus<T,K> of(long current, long size, boolean searchCount) {
return of(current, size, 0, searchCount);
}
public static <T,K> PagePlus<T,K> of(long current, long size, long total, boolean searchCount) {
return new PagePlus<>(current, size, total, searchCount);
}
}

View File

@ -1,85 +1,87 @@
package com.ruoyi.common.core.page; package com.ruoyi.common.core.page;
import java.io.Serializable; import cn.hutool.http.HttpStatus;
import java.util.List; import com.baomidou.mybatisplus.core.metadata.IPage;
import io.swagger.annotations.ApiModel;
/** import io.swagger.annotations.ApiModelProperty;
* 表格分页数据对象 import lombok.Data;
* import lombok.NoArgsConstructor;
* @author ruoyi import lombok.experimental.Accessors;
*/
public class TableDataInfo implements Serializable import java.io.Serializable;
{ import java.util.List;
private static final long serialVersionUID = 1L;
/**
/** 总记录数 */ * 表格分页数据对象
private long total; *
* @author Lion Li
/** 列表数据 */ */
private List<?> rows;
@Data
/** 消息状态码 */ @NoArgsConstructor
private int code; @Accessors(chain = true)
@ApiModel("分页响应对象")
/** 消息内容 */ public class TableDataInfo<T> implements Serializable {
private String msg; private static final long serialVersionUID = 1L;
/** /**
* 表格数据对象 * 总记录数
*/ */
public TableDataInfo() @ApiModelProperty("总记录数")
{ private long total;
}
/**
/** * 列表数据
* 分页 */
* @ApiModelProperty("列表数据")
* @param list 列表数据 private List<T> rows;
* @param total 总记录数
*/ /**
public TableDataInfo(List<?> list, int total) * 消息状态码
{ */
this.rows = list; @ApiModelProperty("消息状态码")
this.total = total; private int code;
}
/**
public long getTotal() * 消息内容
{ */
return total; @ApiModelProperty("消息内容")
} private String msg;
public void setTotal(long total) /**
{ * 分页
this.total = total; *
} * @param list 列表数据
* @param total 总记录数
public List<?> getRows() */
{ public TableDataInfo(List<T> list, long total) {
return rows; this.rows = list;
} this.total = total;
}
public void setRows(List<?> rows)
{ public static <T> TableDataInfo<T> build(IPage<T> page) {
this.rows = rows; TableDataInfo<T> rspData = new TableDataInfo<>();
} rspData.setCode(HttpStatus.HTTP_OK);
rspData.setMsg("查询成功");
public int getCode() rspData.setRows(page.getRecords());
{ rspData.setTotal(page.getTotal());
return code; return rspData;
} }
public void setCode(int code) public static <T> TableDataInfo<T> build(List<T> list) {
{ TableDataInfo<T> rspData = new TableDataInfo<>();
this.code = code; rspData.setCode(HttpStatus.HTTP_OK);
} rspData.setMsg("查询成功");
rspData.setRows(list);
public String getMsg() rspData.setTotal(list.size());
{ return rspData;
return msg; }
}
public static <T> TableDataInfo<T> build() {
public void setMsg(String msg) TableDataInfo<T> rspData = new TableDataInfo<>();
{ rspData.setCode(HttpStatus.HTTP_OK);
this.msg = msg; rspData.setMsg("查询成功");
} return rspData;
} }
}

View File

@ -1,49 +0,0 @@
package com.ruoyi.common.core.page;
import com.ruoyi.common.utils.ServletUtils;
/**
* 表格数据处理
*
* @author ruoyi
*/
public class TableSupport
{
/**
* 当前记录起始索引
*/
public static final String PAGE_NUM = "pageNum";
/**
* 每页显示记录数
*/
public static final String PAGE_SIZE = "pageSize";
/**
* 排序列
*/
public static final String ORDER_BY_COLUMN = "orderByColumn";
/**
* 排序的方向 "desc" 或者 "asc".
*/
public static final String IS_ASC = "isAsc";
/**
* 封装分页对象
*/
public static PageDomain getPageDomain()
{
PageDomain pageDomain = new PageDomain();
pageDomain.setPageNum(ServletUtils.getParameterToInt(PAGE_NUM));
pageDomain.setPageSize(ServletUtils.getParameterToInt(PAGE_SIZE));
pageDomain.setOrderByColumn(ServletUtils.getParameter(ORDER_BY_COLUMN));
pageDomain.setIsAsc(ServletUtils.getParameter(IS_ASC));
return pageDomain;
}
public static PageDomain buildPageRequest()
{
return getPageDomain();
}
}

View File

@ -1,234 +0,0 @@
package com.ruoyi.common.core.redis;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.TimeUnit;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.BoundSetOperations;
import org.springframework.data.redis.core.HashOperations;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.ValueOperations;
import org.springframework.stereotype.Component;
/**
* spring redis 工具类
*
* @author ruoyi
**/
@SuppressWarnings(value = { "unchecked", "rawtypes" })
@Component
public class RedisCache
{
@Autowired
public RedisTemplate redisTemplate;
/**
* 缓存基本的对象Integer、String、实体类等
*
* @param key 缓存的键值
* @param value 缓存的值
*/
public <T> void setCacheObject(final String key, final T value)
{
redisTemplate.opsForValue().set(key, value);
}
/**
* 缓存基本的对象Integer、String、实体类等
*
* @param key 缓存的键值
* @param value 缓存的值
* @param timeout 时间
* @param timeUnit 时间颗粒度
*/
public <T> void setCacheObject(final String key, final T value, final Integer timeout, final TimeUnit timeUnit)
{
redisTemplate.opsForValue().set(key, value, timeout, timeUnit);
}
/**
* 设置有效时间
*
* @param key Redis键
* @param timeout 超时时间
* @return true=设置成功false=设置失败
*/
public boolean expire(final String key, final long timeout)
{
return expire(key, timeout, TimeUnit.SECONDS);
}
/**
* 设置有效时间
*
* @param key Redis键
* @param timeout 超时时间
* @param unit 时间单位
* @return true=设置成功false=设置失败
*/
public boolean expire(final String key, final long timeout, final TimeUnit unit)
{
return redisTemplate.expire(key, timeout, unit);
}
/**
* 获得缓存的基本对象。
*
* @param key 缓存键值
* @return 缓存键值对应的数据
*/
public <T> T getCacheObject(final String key)
{
ValueOperations<String, T> operation = redisTemplate.opsForValue();
return operation.get(key);
}
/**
* 删除单个对象
*
* @param key
*/
public boolean deleteObject(final String key)
{
return redisTemplate.delete(key);
}
/**
* 删除集合对象
*
* @param collection 多个对象
* @return
*/
public long deleteObject(final Collection collection)
{
return redisTemplate.delete(collection);
}
/**
* 缓存List数据
*
* @param key 缓存的键值
* @param dataList 待缓存的List数据
* @return 缓存的对象
*/
public <T> long setCacheList(final String key, final List<T> dataList)
{
Long count = redisTemplate.opsForList().rightPushAll(key, dataList);
return count == null ? 0 : count;
}
/**
* 获得缓存的list对象
*
* @param key 缓存的键值
* @return 缓存键值对应的数据
*/
public <T> List<T> getCacheList(final String key)
{
return redisTemplate.opsForList().range(key, 0, -1);
}
/**
* 缓存Set
*
* @param key 缓存键值
* @param dataSet 缓存的数据
* @return 缓存数据的对象
*/
public <T> BoundSetOperations<String, T> setCacheSet(final String key, final Set<T> dataSet)
{
BoundSetOperations<String, T> setOperation = redisTemplate.boundSetOps(key);
Iterator<T> it = dataSet.iterator();
while (it.hasNext())
{
setOperation.add(it.next());
}
return setOperation;
}
/**
* 获得缓存的set
*
* @param key
* @return
*/
public <T> Set<T> getCacheSet(final String key)
{
return redisTemplate.opsForSet().members(key);
}
/**
* 缓存Map
*
* @param key
* @param dataMap
*/
public <T> void setCacheMap(final String key, final Map<String, T> dataMap)
{
if (dataMap != null) {
redisTemplate.opsForHash().putAll(key, dataMap);
}
}
/**
* 获得缓存的Map
*
* @param key
* @return
*/
public <T> Map<String, T> getCacheMap(final String key)
{
return redisTemplate.opsForHash().entries(key);
}
/**
* 往Hash中存入数据
*
* @param key Redis键
* @param hKey Hash键
* @param value 值
*/
public <T> void setCacheMapValue(final String key, final String hKey, final T value)
{
redisTemplate.opsForHash().put(key, hKey, value);
}
/**
* 获取Hash中的数据
*
* @param key Redis键
* @param hKey Hash键
* @return Hash中的对象
*/
public <T> T getCacheMapValue(final String key, final String hKey)
{
HashOperations<String, String, T> opsForHash = redisTemplate.opsForHash();
return opsForHash.get(key, hKey);
}
/**
* 获取多个Hash中的数据
*
* @param key Redis键
* @param hKeys Hash键集合
* @return Hash对象集合
*/
public <T> List<T> getMultiCacheMapValue(final String key, final Collection<Object> hKeys)
{
return redisTemplate.opsForHash().multiGet(key, hKeys);
}
/**
* 获得缓存的基本对象列表
*
* @param pattern 字符串前缀
* @return 对象列表
*/
public Collection<String> keys(final String pattern)
{
return redisTemplate.keys(pattern);
}
}

View File

@ -0,0 +1,18 @@
package com.ruoyi.common.core.service;
/**
* 通用 参数配置服务
*
* @author Lion Li
*/
public interface ConfigService {
/**
* 根据参数 key 获取参数值
*
* @param configKey 参数 key
* @return 参数值
*/
String getConfigValue(String configKey);
}

View File

@ -0,0 +1,57 @@
package com.ruoyi.common.core.service;
/**
* 通用 字典服务
*
* @author Lion Li
*/
public interface DictService {
/**
* 分隔符
*/
String SEPARATOR = ",";
/**
* 根据字典类型和字典值获取字典标签
*
* @param dictType 字典类型
* @param dictValue 字典值
* @return 字典标签
*/
default String getDictLabel(String dictType, String dictValue) {
return getDictLabel(dictType, dictValue, SEPARATOR);
}
/**
* 根据字典类型和字典标签获取字典值
*
* @param dictType 字典类型
* @param dictLabel 字典标签
* @return 字典值
*/
default String getDictValue(String dictType, String dictLabel) {
return getDictValue(dictType, dictLabel, SEPARATOR);
}
/**
* 根据字典类型和字典值获取字典标签
*
* @param dictType 字典类型
* @param dictValue 字典值
* @param separator 分隔符
* @return 字典标签
*/
String getDictLabel(String dictType, String dictValue, String separator);
/**
* 根据字典类型和字典标签获取字典值
*
* @param dictType 字典类型
* @param dictLabel 字典标签
* @param separator 分隔符
* @return 字典值
*/
String getDictValue(String dictType, String dictLabel, String separator);
}

View File

@ -0,0 +1,14 @@
package com.ruoyi.common.core.service;
import javax.servlet.http.HttpServletRequest;
/**
* 通用 系统访问日志
*
* @author Lion Li
*/
public interface LogininforService {
void recordLogininfor(String username, String status, String message,
HttpServletRequest request, Object... args);
}

View File

@ -0,0 +1,15 @@
package com.ruoyi.common.core.service;
import com.ruoyi.common.core.domain.dto.OperLogDTO;
import org.springframework.scheduling.annotation.Async;
/**
* 通用 操作日志
*
* @author Lion Li
*/
public interface OperLogService {
@Async
void recordOper(OperLogDTO operLogDTO);
}

View File

@ -0,0 +1,69 @@
package com.ruoyi.common.core.service;
import com.ruoyi.common.core.domain.model.LoginUser;
import javax.servlet.http.HttpServletRequest;
/**
* token验证处理
*
* @author Lion Li
*/
public interface TokenService {
/**
* 获取用户身份信息
*
* @return 用户信息
*/
LoginUser getLoginUser(HttpServletRequest request);
/**
* 设置用户身份信息
*/
void setLoginUser(LoginUser loginUser);
/**
* 删除用户身份信息
*/
void delLoginUser(String token);
/**
* 创建令牌
*
* @param loginUser 用户信息
* @return 令牌
*/
String createToken(LoginUser loginUser);
/**
* 验证令牌有效期相差不足20分钟自动刷新缓存
*
* @param loginUser
* @return 令牌
*/
void verifyToken(LoginUser loginUser);
/**
* 刷新令牌有效期
*
* @param loginUser 登录信息
*/
void refreshToken(LoginUser loginUser);
/**
* 设置用户代理信息
*
* @param loginUser 登录信息
*/
void setUserAgent(LoginUser loginUser);
/**
* 从令牌中获取用户名
*
* @param token 令牌
* @return 用户名
*/
String getUsernameFromToken(String token);
}

Some files were not shown because too many files have changed in this diff Show More