Ver Fonte

!34 同步dev分支
Merge pull request !34 from 疯狂的狮子li/dev

疯狂的狮子li há 4 anos atrás
pai
commit
590f4e07af
88 ficheiros alterados com 1258 adições e 689 exclusões
  1. 41 21
      README.md
  2. 3 16
      pom.xml
  3. 6 11
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/SysLogininforController.java
  4. 6 11
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/SysOperlogController.java
  5. 2 1
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/SysUserOnlineController.java
  6. 7 15
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysConfigController.java
  7. 1 3
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDictDataController.java
  8. 7 15
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDictTypeController.java
  9. 1 3
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysNoticeController.java
  10. 1 3
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysPostController.java
  11. 1 3
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRoleController.java
  12. 1 3
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java
  13. 76 76
      ruoyi-admin/src/main/resources/application-dev.yml
  14. 76 76
      ruoyi-admin/src/main/resources/application-prod.yml
  15. 84 54
      ruoyi-admin/src/main/resources/application.yml
  16. 0 6
      ruoyi-common/pom.xml
  17. 0 38
      ruoyi-common/src/main/java/com/ruoyi/common/core/controller/BaseController.java
  18. 12 0
      ruoyi-common/src/main/java/com/ruoyi/common/core/page/BaseMapperPlus.java
  19. 126 0
      ruoyi-common/src/main/java/com/ruoyi/common/core/page/IServicePlus.java
  20. 0 39
      ruoyi-common/src/main/java/com/ruoyi/common/core/page/PageDomain.java
  21. 128 0
      ruoyi-common/src/main/java/com/ruoyi/common/core/page/PagePlus.java
  22. 3 2
      ruoyi-common/src/main/java/com/ruoyi/common/core/page/TableDataInfo.java
  23. 0 49
      ruoyi-common/src/main/java/com/ruoyi/common/core/page/TableSupport.java
  24. 101 0
      ruoyi-common/src/main/java/com/ruoyi/common/utils/PageUtils.java
  25. 6 0
      ruoyi-framework/pom.xml
  26. 14 24
      ruoyi-generator/src/main/java/com/ruoyi/generator/controller/GenController.java
  27. 2 2
      ruoyi-generator/src/main/java/com/ruoyi/generator/mapper/GenTableColumnMapper.java
  28. 10 2
      ruoyi-generator/src/main/java/com/ruoyi/generator/mapper/GenTableMapper.java
  29. 12 0
      ruoyi-generator/src/main/java/com/ruoyi/generator/service/GenTableServiceImpl.java
  30. 2 2
      ruoyi-generator/src/main/java/com/ruoyi/generator/service/IGenTableColumnService.java
  31. 10 2
      ruoyi-generator/src/main/java/com/ruoyi/generator/service/IGenTableService.java
  32. 40 2
      ruoyi-generator/src/main/resources/mapper/generator/GenTableMapper.xml
  33. 6 0
      ruoyi-generator/src/main/resources/vm/java/addBo.java.vm
  34. 13 18
      ruoyi-generator/src/main/resources/vm/java/controller.java.vm
  35. 6 0
      ruoyi-generator/src/main/resources/vm/java/editBo.java.vm
  36. 2 2
      ruoyi-generator/src/main/resources/vm/java/mapper.java.vm
  37. 1 2
      ruoyi-generator/src/main/resources/vm/java/queryBo.java.vm
  38. 11 2
      ruoyi-generator/src/main/resources/vm/java/service.java.vm
  39. 27 36
      ruoyi-generator/src/main/resources/vm/java/serviceImpl.java.vm
  40. 2 2
      ruoyi-quartz/pom.xml
  41. 3 47
      ruoyi-quartz/src/main/java/com/ruoyi/quartz/config/ScheduleConfig.java
  42. 7 15
      ruoyi-quartz/src/main/java/com/ruoyi/quartz/controller/SysJobController.java
  43. 6 11
      ruoyi-quartz/src/main/java/com/ruoyi/quartz/controller/SysJobLogController.java
  44. 2 2
      ruoyi-quartz/src/main/java/com/ruoyi/quartz/mapper/SysJobLogMapper.java
  45. 2 2
      ruoyi-quartz/src/main/java/com/ruoyi/quartz/mapper/SysJobMapper.java
  46. 7 2
      ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/ISysJobLogService.java
  47. 5 2
      ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/ISysJobService.java
  48. 19 0
      ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/impl/SysJobLogServiceImpl.java
  49. 12 0
      ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/impl/SysJobServiceImpl.java
  50. 2 2
      ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysConfigMapper.java
  51. 2 2
      ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysDeptMapper.java
  52. 2 2
      ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysDictDataMapper.java
  53. 2 2
      ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysDictTypeMapper.java
  54. 2 2
      ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysLogininforMapper.java
  55. 2 2
      ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysMenuMapper.java
  56. 2 2
      ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysNoticeMapper.java
  57. 2 2
      ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysOperLogMapper.java
  58. 2 2
      ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysPostMapper.java
  59. 2 2
      ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleDeptMapper.java
  60. 6 2
      ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleMapper.java
  61. 2 2
      ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleMenuMapper.java
  62. 7 2
      ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java
  63. 2 2
      ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserPostMapper.java
  64. 2 2
      ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserRoleMapper.java
  65. 7 2
      ruoyi-system/src/main/java/com/ruoyi/system/service/ISysConfigService.java
  66. 2 2
      ruoyi-system/src/main/java/com/ruoyi/system/service/ISysDeptService.java
  67. 7 2
      ruoyi-system/src/main/java/com/ruoyi/system/service/ISysDictDataService.java
  68. 7 2
      ruoyi-system/src/main/java/com/ruoyi/system/service/ISysDictTypeService.java
  69. 7 2
      ruoyi-system/src/main/java/com/ruoyi/system/service/ISysLogininforService.java
  70. 2 2
      ruoyi-system/src/main/java/com/ruoyi/system/service/ISysMenuService.java
  71. 7 2
      ruoyi-system/src/main/java/com/ruoyi/system/service/ISysNoticeService.java
  72. 6 2
      ruoyi-system/src/main/java/com/ruoyi/system/service/ISysOperLogService.java
  73. 7 2
      ruoyi-system/src/main/java/com/ruoyi/system/service/ISysPostService.java
  74. 7 2
      ruoyi-system/src/main/java/com/ruoyi/system/service/ISysRoleService.java
  75. 7 2
      ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java
  76. 28 10
      ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysConfigServiceImpl.java
  77. 14 1
      ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDictDataServiceImpl.java
  78. 18 0
      ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDictTypeServiceImpl.java
  79. 19 0
      ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysLogininforServiceImpl.java
  80. 11 0
      ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysNoticeServiceImpl.java
  81. 27 0
      ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOperLogServiceImpl.java
  82. 11 0
      ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysPostServiceImpl.java
  83. 8 1
      ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java
  84. 8 0
      ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java
  85. 23 0
      ruoyi-system/src/main/resources/mapper/system/SysRoleMapper.xml
  86. 29 0
      ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml
  87. 1 1
      ruoyi-ui/package.json
  88. 46 2
      ruoyi-ui/src/views/index.vue

+ 41 - 21
README.md

@@ -1,36 +1,52 @@
+## 平台简介
+
+基于 RuoYi-Vue 集成 Mybatis-Plus Lombok Hutool 等便捷开发工具 适配重写相关业务 便于开发 定期与 RuoYi-Vue 同步
+* 前端开发框架 Vue、Element UI
+* 后端开发框架 Spring Boot、Redis
+* 容器框架 Undertow 基于 Netty 的高性能容器
+* 权限认证框架 Spring Security、Jwt,支持多终端认证系统
+* 关系数据库 MySQL 适配 8.X 
+* 缓存数据库 Redis 适配 6.X
+* 数据库开发框架 Mybatis-Plus 快速 CRUD 增加开发效率 插件化支持各类需求
+* 网络框架 Feign、OkHttp3 接口化管理 HTTP 请求
+* 工具类框架 Hutool、Lombok 减少代码冗余 增加安全性
+* 监控框架 spring-boot-admin 全方位服务监控
+* 校验框架 validation 增强接口安全性 严谨性
+* 文档框架 knife4j 美化接口文档
+* 代码生成器 一键生成前后端代码
+
 ## 修改RuoYi功能
 
-* ORM框架 使用 Mybatis-Plus 简化CRUD (目前支持单表生成与树表 不支持主子表)
+### 依赖改动
+
+* ORM框架 使用 Mybatis-Plus 3.4.2 简化CRUD (不支持主子表)
 * Bean简化 使用 Lombok 简化 get set toString 等等
 * 容器改动 Tomcat 改为 并发性能更好的 undertow
+* 分页移除 pagehelper 改为 Mybatis-Plus 分页
+* 升级 swagger 为 knife4j
+* 集成 Hutool 5.X 并重写RuoYi部分功能
+* 集成 Feign 接口化管理 Http 请求(如三方请求 支付,短信,推送等)
+* 集成 spring-boot-admin 全方位监控
+* 增加 demo 模块示例(给不会增加模块的小伙伴做参考)
+
+### 代码改动
+
 * 所有原生功能使用 Mybatis-Plus 与 Lombok 重写
+* 增加 IServicePlus 与 BaseMapperPlus 可自定义通用方法
 * 代码生成模板 改为适配 Mybatis-Plus 的代码
-* 代码生成模板 拆分出Vo,QueryBo,AddBo,EditBo等领域对象
+* 代码生成模板 拆分出 Vo,QueryBo,AddBo,EditBo 等领域对象
+* 代码生成模板 增加 文档注解 与 校验注解 简化通用操作
 * 项目修改为 maven多环境配置
 * 项目配置修改为 application.yml 统一管理
-* swagger 修改为 knife4j
-* 集成 Hutool 5.X 并重写RuoYi部分功能
-* 集成 Feign 接口化管理 Http 请求(如三方请求 支付,短信,推送等)
-* 集成 spring-boot-admin 全方位监控
-* 升级MybatisPlus 3.4.2
-* 增加demo模块示例(给不会增加模块的小伙伴做参考)
-* 同步升级 3.4.0
-* 单模块 fast 分支 https://gitee.com/JavaLionLi/RuoYi-Vue-Plus/tree/fast/
 
-## 关注作者(扫码加群)
-![](https://images.gitee.com/uploads/images/2021/0508/235345_5503356a_1766278.jpeg)
+### 其他
 
-## 平台简介
+* 同步升级 RuoYi-Vue 3.4.0
+* 单模块 fast 分支 [RuoYi-Vue-Plus-fast](https://gitee.com/JavaLionLi/RuoYi-Vue-Plus/tree/fast/)
 
-若依是一套全部开源的快速开发平台,毫无保留给个人及企业免费使用。
+## 关注作者(扫码请备注: "加群")
 
-* 前端采用Vue、Element UI。
-* 后端采用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)
+![](https://images.gitee.com/uploads/images/2021/0508/235345_5503356a_1766278.jpeg)
 
 ## 重点注意事项
 
@@ -51,6 +67,10 @@
 * 直接在mysql表中 添加 parentId orderNum 等字段(根据需要参考 TreeEntity类)
 * 代码生成选择树表生成即可
 
+关于数据权限
+* 参考(用户,角色,部门)列表接口用法
+* 从 bo.getParam().get("dataScope") 即可获取数据权限生成的SQL
+
 关于vue与boot整合部署  
 * [前端静态资源如何整合到后端访问](https://doc.ruoyi.vip/ruoyi-vue/other/faq.html#前端静态资源如何整合到后端访问)
 

+ 3 - 16
pom.xml

@@ -13,14 +13,14 @@
     <description>RuoYi-Vue-Plus后台管理系统</description>
     
     <properties>
-        <ruoyi-vue-plus.version>1.0.2</ruoyi-vue-plus.version>
+        <ruoyi-vue-plus.version>2.0.0</ruoyi-vue-plus.version>
+        <spring-boot.version>2.3.10.RELEASE</spring-boot.version>
         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
         <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
         <java.version>1.8</java.version>
         <maven-jar-plugin.version>3.1.1</maven-jar-plugin.version>
         <druid.version>1.2.4</druid.version>
         <knife4j.version>2.0.8</knife4j.version>
-        <pagehelper.boot.version>1.3.0</pagehelper.boot.version>
         <fastjson.version>1.2.75</fastjson.version>
         <oshi.version>5.6.0</oshi.version>
         <jna.version>5.7.0</jna.version>
@@ -42,7 +42,7 @@
             <dependency>
                 <groupId>org.springframework.boot</groupId>
                 <artifactId>spring-boot-dependencies</artifactId>
-                <version>2.2.13.RELEASE</version>
+                <version>${spring-boot.version}</version>
                 <type>pom</type>
                 <scope>import</scope>
             </dependency>
@@ -54,19 +54,6 @@
                 <version>${druid.version}</version>
             </dependency>
 
-            <!-- pagehelper 分页插件 -->
-            <dependency>
-                <groupId>com.github.pagehelper</groupId>
-                <artifactId>pagehelper-spring-boot-starter</artifactId>
-                <version>${pagehelper.boot.version}</version>
-                <exclusions>
-                    <exclusion>
-                        <groupId>org.mybatis</groupId>
-                        <artifactId>mybatis</artifactId>
-                    </exclusion>
-                </exclusions>
-            </dependency>
-
             <!-- 获取系统信息 -->
             <dependency>
                 <groupId>com.github.oshi</groupId>

+ 6 - 11
ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/SysLogininforController.java

@@ -1,13 +1,5 @@
 package com.ruoyi.web.controller.monitor;
 
-import java.util.List;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.security.access.prepost.PreAuthorize;
-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.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
 import com.ruoyi.common.annotation.Log;
 import com.ruoyi.common.core.controller.BaseController;
 import com.ruoyi.common.core.domain.AjaxResult;
@@ -16,6 +8,11 @@ import com.ruoyi.common.enums.BusinessType;
 import com.ruoyi.common.utils.poi.ExcelUtil;
 import com.ruoyi.system.domain.SysLogininfor;
 import com.ruoyi.system.service.ISysLogininforService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
 
 /**
  * 系统访问记录
@@ -33,9 +30,7 @@ public class SysLogininforController extends BaseController
     @GetMapping("/list")
     public TableDataInfo list(SysLogininfor logininfor)
     {
-        startPage();
-        List<SysLogininfor> list = logininforService.selectLogininforList(logininfor);
-        return getDataTable(list);
+        return logininforService.selectPageLogininforList(logininfor);
     }
 
     @Log(title = "登录日志", businessType = BusinessType.EXPORT)

+ 6 - 11
ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/SysOperlogController.java

@@ -1,13 +1,5 @@
 package com.ruoyi.web.controller.monitor;
 
-import java.util.List;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.security.access.prepost.PreAuthorize;
-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.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
 import com.ruoyi.common.annotation.Log;
 import com.ruoyi.common.core.controller.BaseController;
 import com.ruoyi.common.core.domain.AjaxResult;
@@ -16,6 +8,11 @@ import com.ruoyi.common.enums.BusinessType;
 import com.ruoyi.common.utils.poi.ExcelUtil;
 import com.ruoyi.system.domain.SysOperLog;
 import com.ruoyi.system.service.ISysOperLogService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
 
 /**
  * 操作日志记录
@@ -33,9 +30,7 @@ public class SysOperlogController extends BaseController
     @GetMapping("/list")
     public TableDataInfo list(SysOperLog operLog)
     {
-        startPage();
-        List<SysOperLog> list = operLogService.selectOperLogList(operLog);
-        return getDataTable(list);
+        return operLogService.selectPageOperLogList(operLog);
     }
 
     @Log(title = "操作日志", businessType = BusinessType.EXPORT)

+ 2 - 1
ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/SysUserOnlineController.java

@@ -10,6 +10,7 @@ import com.ruoyi.common.core.domain.model.LoginUser;
 import com.ruoyi.common.core.page.TableDataInfo;
 import com.ruoyi.common.core.redis.RedisCache;
 import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.utils.PageUtils;
 import com.ruoyi.system.domain.SysUserOnline;
 import com.ruoyi.system.service.ISysUserOnlineService;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -73,7 +74,7 @@ public class SysUserOnlineController extends BaseController
         }
         Collections.reverse(userOnlineList);
         userOnlineList.removeAll(Collections.singleton(null));
-        return getDataTable(userOnlineList);
+        return PageUtils.buildDataInfo(userOnlineList);
     }
 
     /**

+ 7 - 15
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysConfigController.java

@@ -1,17 +1,5 @@
 package com.ruoyi.web.controller.system;
 
-import java.util.List;
-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.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.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
 import com.ruoyi.common.annotation.Log;
 import com.ruoyi.common.annotation.RepeatSubmit;
 import com.ruoyi.common.constant.UserConstants;
@@ -23,6 +11,12 @@ import com.ruoyi.common.utils.SecurityUtils;
 import com.ruoyi.common.utils.poi.ExcelUtil;
 import com.ruoyi.system.domain.SysConfig;
 import com.ruoyi.system.service.ISysConfigService;
+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 java.util.List;
 
 /**
  * 参数配置 信息操作处理
@@ -43,9 +37,7 @@ public class SysConfigController extends BaseController
     @GetMapping("/list")
     public TableDataInfo list(SysConfig config)
     {
-        startPage();
-        List<SysConfig> list = configService.selectConfigList(config);
-        return getDataTable(list);
+        return configService.selectPageConfigList(config);
     }
 
     @Log(title = "参数管理", businessType = BusinessType.EXPORT)

+ 1 - 3
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDictDataController.java

@@ -38,9 +38,7 @@ public class SysDictDataController extends BaseController
     @GetMapping("/list")
     public TableDataInfo list(SysDictData dictData)
     {
-        startPage();
-        List<SysDictData> list = dictDataService.selectDictDataList(dictData);
-        return getDataTable(list);
+        return dictDataService.selectPageDictDataList(dictData);
     }
 
     @Log(title = "字典数据", businessType = BusinessType.EXPORT)

+ 7 - 15
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDictTypeController.java

@@ -1,17 +1,5 @@
 package com.ruoyi.web.controller.system;
 
-import java.util.List;
-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.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.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
 import com.ruoyi.common.annotation.Log;
 import com.ruoyi.common.constant.UserConstants;
 import com.ruoyi.common.core.controller.BaseController;
@@ -22,6 +10,12 @@ import com.ruoyi.common.enums.BusinessType;
 import com.ruoyi.common.utils.SecurityUtils;
 import com.ruoyi.common.utils.poi.ExcelUtil;
 import com.ruoyi.system.service.ISysDictTypeService;
+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 java.util.List;
 
 /**
  * 数据字典信息
@@ -39,9 +33,7 @@ public class SysDictTypeController extends BaseController
     @GetMapping("/list")
     public TableDataInfo list(SysDictType dictType)
     {
-        startPage();
-        List<SysDictType> list = dictTypeService.selectDictTypeList(dictType);
-        return getDataTable(list);
+        return dictTypeService.selectPageDictTypeList(dictType);
     }
 
     @Log(title = "字典类型", businessType = BusinessType.EXPORT)

+ 1 - 3
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysNoticeController.java

@@ -40,9 +40,7 @@ public class SysNoticeController extends BaseController
     @GetMapping("/list")
     public TableDataInfo list(SysNotice notice)
     {
-        startPage();
-        List<SysNotice> list = noticeService.selectNoticeList(notice);
-        return getDataTable(list);
+        return noticeService.selectPageNoticeList(notice);
     }
 
     /**

+ 1 - 3
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysPostController.java

@@ -42,9 +42,7 @@ public class SysPostController extends BaseController
     @GetMapping("/list")
     public TableDataInfo list(SysPost post)
     {
-        startPage();
-        List<SysPost> list = postService.selectPostList(post);
-        return getDataTable(list);
+        return postService.selectPagePostList(post);
     }
     
     @Log(title = "岗位管理", businessType = BusinessType.EXPORT)

+ 1 - 3
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRoleController.java

@@ -48,9 +48,7 @@ public class SysRoleController extends BaseController
     @GetMapping("/list")
     public TableDataInfo list(SysRole role)
     {
-        startPage();
-        List<SysRole> list = roleService.selectRoleList(role);
-        return getDataTable(list);
+        return roleService.selectPageRoleList(role);
     }
 
     @Log(title = "角色管理", businessType = BusinessType.EXPORT)

+ 1 - 3
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java

@@ -54,9 +54,7 @@ public class SysUserController extends BaseController
     @GetMapping("/list")
     public TableDataInfo list(SysUser user)
     {
-        startPage();
-        List<SysUser> list = userService.selectUserList(user);
-        return getDataTable(list);
+        return userService.selectPageUserList(user);
     }
 
     @Log(title = "用户管理", businessType = BusinessType.EXPORT)

+ 76 - 76
ruoyi-admin/src/main/resources/application-dev.yml

@@ -1,79 +1,79 @@
 # 数据源配置
 spring:
-    datasource:
-        type: com.alibaba.druid.pool.DruidDataSource
-        driverClassName: com.mysql.cj.jdbc.Driver
-        druid:
-            # 主库数据源
-            master:
-                url: jdbc:mysql://192.168.0.222:3306/ry-vue?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true
-                username: root
-                password: root
-            # 从库数据源
-            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
-    # redis 配置
-    redis:
-        # 地址
-        host: 192.168.0.222
-        # 端口,默认为6379
-        port: 6379
-        # 数据库索引
-        database: 0
-        # 密码
+  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&autoReconnect=true
+        username: root
+        password: root
+      # 从库数据源
+      slave:
+        # 从数据源开关/默认关闭
+        enabled: false
+        url:
+        username:
         password:
-        # 连接超时时间
-        timeout: 10s
-        lettuce:
-            pool:
-                # 连接池中的最小空闲连接
-                min-idle: 0
-                # 连接池中的最大空闲连接
-                max-idle: 8
-                # 连接池的最大数据库连接数
-                max-active: 8
-                # #连接池最大阻塞等待时间(使用负值表示没有限制)
-                max-wait: -1ms
+      # 初始连接数
+      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
+  # redis 配置
+  redis:
+    # 地址
+    host: localhost
+    # 端口,默认为6379
+    port: 6379
+    # 数据库索引
+    database: 0
+    # 密码
+    password:
+    # 连接超时时间
+    timeout: 10s
+    lettuce:
+      pool:
+        # 连接池中的最小空闲连接
+        min-idle: 0
+        # 连接池中的最大空闲连接
+        max-idle: 8
+        # 连接池的最大数据库连接数
+        max-active: 8
+        # #连接池最大阻塞等待时间(使用负值表示没有限制)
+        max-wait: -1ms

+ 76 - 76
ruoyi-admin/src/main/resources/application-prod.yml

@@ -1,79 +1,79 @@
 # 数据源配置
 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&autoReconnect=true
-                username: root
-                password: root
-            # 从库数据源
-            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
-    # redis 配置
-    redis:
-        # 地址
-        host: 192.168.0.222
-        # 端口,默认为6379
-        port: 6379
-        # 数据库索引
-        database: 0
-        # 密码
+  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&autoReconnect=true
+        username: root
+        password: root
+      # 从库数据源
+      slave:
+        # 从数据源开关/默认关闭
+        enabled: false
+        url:
+        username:
         password:
-        # 连接超时时间
-        timeout: 10s
-        lettuce:
-            pool:
-                # 连接池中的最小空闲连接
-                min-idle: 0
-                # 连接池中的最大空闲连接
-                max-idle: 8
-                # 连接池的最大数据库连接数
-                max-active: 8
-                # #连接池最大阻塞等待时间(使用负值表示没有限制)
-                max-wait: -1ms
+      # 初始连接数
+      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
+  # redis 配置
+  redis:
+    # 地址
+    host: 192.168.0.222
+    # 端口,默认为6379
+    port: 6379
+    # 数据库索引
+    database: 0
+    # 密码
+    password:
+    # 连接超时时间
+    timeout: 10s
+    lettuce:
+      pool:
+        # 连接池中的最小空闲连接
+        min-idle: 0
+        # 连接池中的最大空闲连接
+        max-idle: 8
+        # 连接池的最大数据库连接数
+        max-active: 8
+        # #连接池最大阻塞等待时间(使用负值表示没有限制)
+        max-wait: -1ms

+ 84 - 54
ruoyi-admin/src/main/resources/application.yml

@@ -37,12 +37,13 @@ server:
     # 以下的配置会影响buffer,这些buffer会用于服务器连接的IO操作,有点类似netty的池化内存管理
     # 每块buffer的空间大小,越小的空间被利用越充分
     buffer-size: 512
-    # 设置IO线程数, 它主要执行非阻塞的任务,它们会负责多个连接, 默认设置每个CPU核心一个线程
-    io-threads: 8
-    # 阻塞任务线程池, 当执行类似servlet请求阻塞操作, undertow会从这个线程池中取得线程,它的值设置取决于系统的负载
-    worker-threads: 256
     # 是否分配的直接内存
     direct-buffers: true
+    threads:
+      # 设置IO线程数, 它主要执行非阻塞的任务,它们会负责多个连接, 默认设置每个CPU核心一个线程
+      io: 8
+      # 阻塞任务线程池, 当执行类似servlet请求阻塞操作, undertow会从这个线程池中取得线程,它的值设置取决于系统的负载
+      worker: 256
 #  # tomcat 配置
 #  tomcat:
 #    # tomcat的URI编码
@@ -65,15 +66,15 @@ spring:
   messages:
     # 国际化资源文件路径
     basename: i18n/messages
-  profiles: 
+  profiles:
     active: @profiles.active@
   # 文件上传
   servlet:
-     multipart:
-       # 单个文件大小
-       max-file-size:  10MB
-       # 设置总上传的文件大小
-       max-request-size:  20MB
+    multipart:
+      # 单个文件大小
+      max-file-size: 10MB
+      # 设置总上传的文件大小
+      max-request-size: 20MB
   # 服务模块
   devtools:
     restart:
@@ -83,44 +84,17 @@ spring:
   thymeleaf:
     # 将系统模板放置到最前面 否则会与 springboot-admin 页面冲突
     template-resolver-order: 1
-  application:
-    name: ruoyi-vue-plus
-  boot:
-    admin:
-      # Spring Boot Admin Client 客户端的相关配置
-      client:
-        # 设置 Spring Boot Admin Server 地址
-        url: http://localhost:${server.port}${spring.boot.admin.context-path}
-        instance:
-          prefer-ip: true # 注册实例时,优先使用 IP
-#        username: ruoyi
-#        password: 123456
-      # Spring Boot Admin Server 服务端的相关配置
-      context-path: /admin # 配置 Spring
-
-# Actuator 监控端点的配置项
-management:
-  endpoints:
-    web:
-      # Actuator 提供的 API 接口的根目录。默认为 /actuator
-      base-path: /actuator
-      exposure:
-        # 需要开放的端点。默认值只打开 health 和 info 两个端点。通过设置 * ,可以开放所有端点。
-        include: '*'
-  endpoint:
-    logfile:
-      external-file: ./logs/sys-console.log
 
 # token配置
 token:
-    # 令牌自定义标识
-    header: Authorization
-    # 令牌密钥
-    secret: abcdefghijklmnopqrstuvwxyz
-    # 令牌有效期(默认30分钟)
-    expireTime: 30
-  
-# MyBatis配置
+  # 令牌自定义标识
+  header: Authorization
+  # 令牌密钥
+  secret: abcdefghijklmnopqrstuvwxyz
+  # 令牌有效期(默认30分钟)
+  expireTime: 30
+
+# MyBatisPlus配置
 # https://baomidou.com/config/
 mybatis-plus:
   mapperPackage: com.ruoyi.**.mapper
@@ -209,13 +183,6 @@ mybatis-plus:
       # 字段验证策略之 select,在 select 的时候的字段验证策略既 wrapper 根据内部 entity 生成的 where 条件
       selectStrategy: NOT_EMPTY
 
-# PageHelper分页插件
-pagehelper: 
-  helperDialect: mysql
-  reasonable: true
-  supportMethodsArguments: true
-  params: count=countSql 
-
 # Swagger配置
 swagger:
   # 是否开启swagger
@@ -230,7 +197,7 @@ swagger:
   version: '版本号: ${ruoyi-vue-plus.version}'
 
 # 防止XSS攻击
-xss: 
+xss:
   # 过滤开关
   enabled: true
   # 排除链接(多个用逗号分隔)
@@ -238,6 +205,7 @@ xss:
   # 匹配链接
   urlPatterns: /system/*,/monitor/*,/tool/*
 
+# 全局线程池相关配置
 threadPoolConfig:
   # 是否开启线程池
   enabled: false
@@ -256,6 +224,7 @@ threadPoolConfig:
   # AbortPolicy 中止
   rejectedExecutionHandler: CallerRunsPolicy
 
+# feign 相关配置
 feign:
   package: com.ruoyi.**.feign
   # 开启压缩
@@ -267,4 +236,65 @@ feign:
   okhttp:
     enabled: true
   hystrix:
-    enabled: true
+    enabled: true
+
+--- # 定时任务配置
+spring:
+  quartz:
+    scheduler-name: RuoyiScheduler
+    startup-delay: 1s
+    overwrite-existing-jobs: true
+    auto-startup: true
+    job-store-type: jdbc
+    properties:
+      org:
+        quartz:
+          # Scheduler 相关配置
+          scheduler:
+            instanceName: RuoyiScheduler
+            instanceId: AUTO
+          # 线程池相关配置
+          threadPool:
+            class: org.quartz.simpl.SimpleThreadPool
+            threadCount: 20
+            threadPriority: 5
+          # JobStore 集群配置
+          jobStore:
+            class: org.quartz.impl.jdbcjobstore.JobStoreTX
+            isClustered: true
+            clusterCheckinInterval: 15000
+            txIsolationLevelSerializable: true
+            misfireThreshold: 60000
+            tablePrefix: QRTZ_
+            # sqlserver 启用
+            # selectWithLockSQL: SELECT * FROM {0}LOCKS UPDLOCK WHERE LOCK_NAME = ?
+
+--- # 监控配置
+spring:
+  application:
+    name: ruoyi-vue-plus
+  boot:
+    admin:
+      # Spring Boot Admin Client 客户端的相关配置
+      client:
+        # 设置 Spring Boot Admin Server 地址
+        url: http://localhost:${server.port}${spring.boot.admin.context-path}
+        instance:
+          prefer-ip: true # 注册实例时,优先使用 IP
+      #        username: ruoyi
+      #        password: 123456
+      # Spring Boot Admin Server 服务端的相关配置
+      context-path: /admin # 配置 Spring
+
+# Actuator 监控端点的配置项
+management:
+  endpoints:
+    web:
+      # Actuator 提供的 API 接口的根目录。默认为 /actuator
+      base-path: /actuator
+      exposure:
+        # 需要开放的端点。默认值只打开 health 和 info 两个端点。通过设置 * ,可以开放所有端点。
+        include: '*'
+  endpoint:
+    logfile:
+      external-file: ./logs/sys-console.log

+ 0 - 6
ruoyi-common/pom.xml

@@ -35,12 +35,6 @@
             <artifactId>spring-boot-starter-security</artifactId>
         </dependency>
 
-        <!-- pagehelper 分页插件 -->
-        <dependency>
-            <groupId>com.github.pagehelper</groupId>
-            <artifactId>pagehelper-spring-boot-starter</artifactId>
-        </dependency>
-
         <!-- 自定义验证注解 -->
         <dependency>
             <groupId>javax.validation</groupId>

+ 0 - 38
ruoyi-common/src/main/java/com/ruoyi/common/core/controller/BaseController.java

@@ -1,16 +1,8 @@
 package com.ruoyi.common.core.controller;
 
-import cn.hutool.core.lang.Validator;
 import cn.hutool.core.util.StrUtil;
-import cn.hutool.http.HttpStatus;
-import com.github.pagehelper.PageHelper;
-import com.github.pagehelper.PageInfo;
 import com.ruoyi.common.core.domain.AjaxResult;
-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.sql.SqlUtil;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.web.bind.WebDataBinder;
@@ -18,7 +10,6 @@ import org.springframework.web.bind.annotation.InitBinder;
 
 import java.beans.PropertyEditorSupport;
 import java.util.Date;
-import java.util.List;
 
 /**
  * web层通用数据处理
@@ -46,35 +37,6 @@ public class BaseController
         });
     }
 
-    /**
-     * 设置请求分页数据
-     */
-    protected void startPage()
-    {
-        PageDomain pageDomain = TableSupport.buildPageRequest();
-        Integer pageNum = pageDomain.getPageNum();
-        Integer pageSize = pageDomain.getPageSize();
-        if (Validator.isNotNull(pageNum) && Validator.isNotNull(pageSize))
-        {
-            String orderBy = SqlUtil.escapeOrderBySql(pageDomain.getOrderBy());
-            PageHelper.startPage(pageNum, pageSize, orderBy);
-        }
-    }
-
-    /**
-     * 响应请求分页数据
-     */
-    @SuppressWarnings({ "rawtypes", "unchecked" })
-    protected <T> TableDataInfo<T> getDataTable(List<T> list)
-    {
-        TableDataInfo<T> rspData = new TableDataInfo();
-        rspData.setCode(HttpStatus.HTTP_OK);
-        rspData.setMsg("查询成功");
-        rspData.setRows(list);
-        rspData.setTotal(new PageInfo(list).getTotal());
-        return rspData;
-    }
-
     /**
      * 响应返回结果
      * 

+ 12 - 0
ruoyi-common/src/main/java/com/ruoyi/common/core/page/BaseMapperPlus.java

@@ -0,0 +1,12 @@
+package com.ruoyi.common.core.page;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * 自定义 Mapper 接口, 实现 自定义扩展
+ *
+ * @author Lion Li
+ * @since 2021-05-13
+ */
+public interface BaseMapperPlus<T> extends BaseMapper<T> {
+}

+ 126 - 0
ruoyi-common/src/main/java/com/ruoyi/common/core/page/IServicePlus.java

@@ -0,0 +1,126 @@
+package com.ruoyi.common.core.page;
+
+import cn.hutool.core.bean.BeanUtil;
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+import java.io.Serializable;
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * 自定义 Service 接口, 实现 数据库实体与 vo 对象转换返回
+ *
+ * @author Lion Li
+ * @since 2021-05-13
+ */
+public interface IServicePlus<T> extends IService<T> {
+
+    /**
+     * 根据 ID 查询
+     *
+     * @param kClass vo类型
+     * @param id     主键ID
+     */
+    default <K> K getVoById(Serializable id, Class<K> kClass) {
+        T t = getBaseMapper().selectById(id);
+        return BeanUtil.toBean(t, kClass);
+    }
+
+    /**
+     * 查询(根据ID 批量查询)
+     *
+     * @param kClass vo类型
+     * @param idList 主键ID列表
+     */
+    default <K> List<K> listVoByIds(Collection<? extends Serializable> idList, Class<K> kClass) {
+        List<T> list = getBaseMapper().selectBatchIds(idList);
+        if (list == null) {
+            return null;
+        }
+        return list.stream()
+                .map(any -> BeanUtil.toBean(any, kClass))
+                .collect(Collectors.toList());
+    }
+
+    /**
+     * 查询(根据 columnMap 条件)
+     *
+     * @param kClass    vo类型
+     * @param columnMap 表字段 map 对象
+     */
+    default <K> List<K> listVoByMap(Map<String, Object> columnMap, Class<K> kClass) {
+        List<T> list = getBaseMapper().selectByMap(columnMap);
+        if (list == null) {
+            return null;
+        }
+        return list.stream()
+                .map(any -> BeanUtil.toBean(any, kClass))
+                .collect(Collectors.toList());
+    }
+
+    /**
+     * 根据 Wrapper,查询一条记录 <br/>
+     * <p>结果集,如果是多个会抛出异常,随机取一条加上限制条件 wrapper.last("LIMIT 1")</p>
+     *
+     * @param kClass       vo类型
+     * @param queryWrapper 实体对象封装操作类 {@link com.baomidou.mybatisplus.core.conditions.query.QueryWrapper}
+     */
+    default <K> K getVoOne(Wrapper<T> queryWrapper, Class<K> kClass) {
+        return BeanUtil.toBean(getOne(queryWrapper, true), kClass);
+    }
+
+    /**
+     * 查询列表
+     *
+     * @param kClass       vo类型
+     * @param queryWrapper 实体对象封装操作类 {@link com.baomidou.mybatisplus.core.conditions.query.QueryWrapper}
+     */
+    default <K> List<K> listVo(Wrapper<T> queryWrapper, Class<K> kClass) {
+        List<T> list = getBaseMapper().selectList(queryWrapper);
+        if (list == null) {
+            return null;
+        }
+        return list.stream()
+                .map(any -> BeanUtil.toBean(any, kClass))
+                .collect(Collectors.toList());
+    }
+
+    /**
+     * 查询所有
+     *
+     * @param kClass vo类型
+     * @see Wrappers#emptyWrapper()
+     */
+    default <K> List<K> listVo(Class<K> kClass) {
+        return listVo(Wrappers.emptyWrapper(), kClass);
+    }
+
+    /**
+     * 翻页查询
+     *
+     * @param page         翻页对象
+     * @param queryWrapper 实体对象封装操作类
+     * @param kClass vo类型
+     */
+    default <K> PagePlus<T, K> pageVo(PagePlus<T, K> page, Wrapper<T> queryWrapper, Class<K> kClass) {
+        PagePlus<T, K> e = getBaseMapper().selectPage(page, queryWrapper);
+        page.recordsToVo(kClass);
+        return page;
+    }
+
+    /**
+     * 无条件翻页查询
+     *
+     * @param page 翻页对象
+     * @param kClass vo类型
+     */
+    default <K> PagePlus<T, K> pageVo(PagePlus<T, K> page, Class<K> kClass) {
+        return pageVo(page, Wrappers.emptyWrapper(), kClass);
+    }
+
+}
+

+ 0 - 39
ruoyi-common/src/main/java/com/ruoyi/common/core/page/PageDomain.java

@@ -1,39 +0,0 @@
-package com.ruoyi.common.core.page;
-
-import cn.hutool.core.util.StrUtil;
-import lombok.*;
-import lombok.experimental.Accessors;
-
-/**
- * 分页数据
- * 
- * @author ruoyi
- */
-
-@Data
-@NoArgsConstructor
-@Accessors(chain = true)
-public class PageDomain
-{
-    /** 当前记录起始索引 */
-    private Integer pageNum;
-
-    /** 每页显示记录数 */
-    private Integer pageSize;
-
-    /** 排序列 */
-    private String orderByColumn;
-
-    /** 排序的方向desc或者asc */
-    private String isAsc = "asc";
-
-    public String getOrderBy()
-    {
-        if (StrUtil.isEmpty(orderByColumn))
-        {
-            return "";
-        }
-        return StrUtil.toUnderlineCase(orderByColumn) + " " + isAsc;
-    }
-
-}

+ 128 - 0
ruoyi-common/src/main/java/com/ruoyi/common/core/page/PagePlus.java

@@ -0,0 +1,128 @@
+package com.ruoyi.common.core.page;
+
+import cn.hutool.core.bean.BeanUtil;
+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;
+import java.util.stream.Collectors;
+
+@Data
+@Accessors(chain = true)
+public class PagePlus<T,K> implements IPage<T> {
+
+    protected List<T> records;
+    protected List<K> recordsVo;
+    protected long total;
+    protected long size;
+    protected long current;
+    protected List<OrderItem> orders;
+    protected boolean optimizeCountSql;
+    protected boolean isSearchCount;
+    protected boolean hitCount;
+    protected String countId;
+    protected Long maxLimit;
+
+    public PagePlus() {
+        this.records = Collections.emptyList();
+        this.recordsVo = Collections.emptyList();
+        this.total = 0L;
+        this.size = 10L;
+        this.current = 1L;
+        this.orders = new ArrayList();
+        this.optimizeCountSql = true;
+        this.isSearchCount = true;
+        this.hitCount = false;
+    }
+
+    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) {
+        this.records = Collections.emptyList();
+        this.total = 0L;
+        this.size = 10L;
+        this.current = 1L;
+        this.orders = new ArrayList();
+        this.optimizeCountSql = true;
+        this.isSearchCount = true;
+        this.hitCount = false;
+        if (current > 1L) {
+            this.current = current;
+        }
+
+        this.size = size;
+        this.total = total;
+        this.isSearchCount = isSearchCount;
+    }
+
+    public boolean hasPrevious() {
+        return this.current > 1L;
+    }
+
+    public boolean hasNext() {
+        return this.current < this.getPages();
+    }
+
+    public void recordsToVo(Class<K> kClass) {
+        this.recordsVo = this.records.stream()
+                .map(any -> BeanUtil.toBean(any, kClass))
+                .collect(Collectors.toList());
+    }
+
+    @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 boolean isSearchCount() {
+        return this.total < 0L ? false : this.isSearchCount;
+    }
+
+    public PagePlus<T, K> setSearchCount(boolean isSearchCount) {
+        this.isSearchCount = isSearchCount;
+        return this;
+    }
+
+}
+

+ 3 - 2
ruoyi-common/src/main/java/com/ruoyi/common/core/page/TableDataInfo.java

@@ -1,6 +1,7 @@
 package com.ruoyi.common.core.page;
 
-import lombok.*;
+import lombok.Data;
+import lombok.NoArgsConstructor;
 import lombok.experimental.Accessors;
 
 import java.io.Serializable;
@@ -37,7 +38,7 @@ public class TableDataInfo<T> implements Serializable
      * @param list 列表数据
      * @param total 总记录数
      */
-    public TableDataInfo(List<T> list, int total)
+    public TableDataInfo(List<T> list, long total)
     {
         this.rows = list;
         this.total = total;

+ 0 - 49
ruoyi-common/src/main/java/com/ruoyi/common/core/page/TableSupport.java

@@ -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();
-    }
-}

+ 101 - 0
ruoyi-common/src/main/java/com/ruoyi/common/utils/PageUtils.java

@@ -0,0 +1,101 @@
+package com.ruoyi.common.utils;
+
+import cn.hutool.core.util.StrUtil;
+import cn.hutool.http.HttpStatus;
+import com.baomidou.mybatisplus.core.metadata.OrderItem;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.common.core.page.PagePlus;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.utils.sql.SqlUtil;
+
+import java.util.List;
+
+/**
+ * 分页工具
+ *
+ * @author Lion Li
+ */
+public class PageUtils {
+
+    /**
+     * 当前记录起始索引
+     */
+    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 <T, K> PagePlus<T, K> buildPagePlus() {
+        Integer pageNum = ServletUtils.getParameterToInt(PAGE_NUM);
+        Integer pageSize = ServletUtils.getParameterToInt(PAGE_SIZE);
+        String orderByColumn = ServletUtils.getParameter(ORDER_BY_COLUMN);
+        String isAsc = ServletUtils.getParameter(IS_ASC);
+        PagePlus<T, K> page = new PagePlus<>(pageNum, pageSize);
+        if (StrUtil.isNotBlank(orderByColumn)) {
+            String orderBy = SqlUtil.escapeOrderBySql(orderByColumn);
+            if ("asc".equals(isAsc)) {
+                page.addOrder(OrderItem.asc(orderBy));
+            } else if ("desc".equals(isAsc)) {
+                page.addOrder(OrderItem.desc(orderBy));
+            }
+        }
+        return page;
+    }
+
+    public static <T> Page<T> buildPage() {
+        Integer pageNum = ServletUtils.getParameterToInt(PAGE_NUM);
+        Integer pageSize = ServletUtils.getParameterToInt(PAGE_SIZE);
+        String orderByColumn = ServletUtils.getParameter(ORDER_BY_COLUMN);
+        String isAsc = ServletUtils.getParameter(IS_ASC);
+        Page<T> page = new Page<>(pageNum, pageSize);
+        if (StrUtil.isNotBlank(orderByColumn)) {
+            String orderBy = SqlUtil.escapeOrderBySql(orderByColumn);
+            if ("asc".equals(isAsc)) {
+                page.addOrder(OrderItem.asc(orderBy));
+            } else if ("desc".equals(isAsc)) {
+                page.addOrder(OrderItem.desc(orderBy));
+            }
+        }
+        return page;
+    }
+
+    public static <T, K> TableDataInfo<K> buildDataInfo(PagePlus<T, K> page) {
+        TableDataInfo<K> rspData = new TableDataInfo<>();
+        rspData.setCode(HttpStatus.HTTP_OK);
+        rspData.setMsg("查询成功");
+        rspData.setRows(page.getRecordsVo());
+        rspData.setTotal(page.getTotal());
+        return rspData;
+    }
+
+    public static <T> TableDataInfo<T> buildDataInfo(Page<T> page) {
+        TableDataInfo<T> rspData = new TableDataInfo<>();
+        rspData.setCode(HttpStatus.HTTP_OK);
+        rspData.setMsg("查询成功");
+        rspData.setRows(page.getRecords());
+        rspData.setTotal(page.getTotal());
+        return rspData;
+    }
+
+    public static <T> TableDataInfo<T> buildDataInfo(List<T> list) {
+        TableDataInfo<T> rspData = new TableDataInfo<>();
+        rspData.setCode(HttpStatus.HTTP_OK);
+        rspData.setMsg("查询成功");
+        rspData.setRows(list);
+        rspData.setTotal(list.size());
+        return rspData;
+    }
+
+}

+ 6 - 0
ruoyi-framework/pom.xml

@@ -49,6 +49,12 @@
             <artifactId>spring-boot-starter-aop</artifactId>
         </dependency>
 
+        <!-- SpringBoot 校验框架 -->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-validation</artifactId>
+        </dependency>
+
         <!-- 阿里数据库连接池 -->
         <dependency>
             <groupId>com.alibaba</groupId>

+ 14 - 24
ruoyi-generator/src/main/java/com/ruoyi/generator/controller/GenController.java

@@ -1,32 +1,26 @@
 package com.ruoyi.generator.controller;
 
-import java.io.IOException;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import javax.servlet.http.HttpServletResponse;
-import org.apache.commons.io.IOUtils;
-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.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.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import cn.hutool.core.convert.Convert;
 import com.ruoyi.common.annotation.Log;
 import com.ruoyi.common.core.controller.BaseController;
 import com.ruoyi.common.core.domain.AjaxResult;
 import com.ruoyi.common.core.page.TableDataInfo;
-import cn.hutool.core.convert.Convert;
 import com.ruoyi.common.enums.BusinessType;
 import com.ruoyi.generator.domain.GenTable;
 import com.ruoyi.generator.domain.GenTableColumn;
 import com.ruoyi.generator.service.IGenTableColumnService;
 import com.ruoyi.generator.service.IGenTableService;
+import org.apache.commons.io.IOUtils;
+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.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 
 /**
  * 代码生成 操作处理
@@ -50,9 +44,7 @@ public class GenController extends BaseController
     @GetMapping("/list")
     public TableDataInfo genList(GenTable genTable)
     {
-        startPage();
-        List<GenTable> list = genTableService.selectGenTableList(genTable);
-        return getDataTable(list);
+        return genTableService.selectPageGenTableList(genTable);
     }
 
     /**
@@ -79,9 +71,7 @@ public class GenController extends BaseController
     @GetMapping("/db/list")
     public TableDataInfo dataList(GenTable genTable)
     {
-        startPage();
-        List<GenTable> list = genTableService.selectDbTableList(genTable);
-        return getDataTable(list);
+        return genTableService.selectPageDbTableList(genTable);
     }
 
     /**

+ 2 - 2
ruoyi-generator/src/main/java/com/ruoyi/generator/mapper/GenTableColumnMapper.java

@@ -1,6 +1,6 @@
 package com.ruoyi.generator.mapper;
 
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.common.core.page.BaseMapperPlus;
 import com.ruoyi.generator.domain.GenTableColumn;
 
 import java.util.List;
@@ -10,7 +10,7 @@ import java.util.List;
  *
  * @author ruoyi
  */
-public interface GenTableColumnMapper extends BaseMapper<GenTableColumn> {
+public interface GenTableColumnMapper extends BaseMapperPlus<GenTableColumn> {
     /**
      * 根据表名称查询列信息
      *

+ 10 - 2
ruoyi-generator/src/main/java/com/ruoyi/generator/mapper/GenTableMapper.java

@@ -1,7 +1,9 @@
 package com.ruoyi.generator.mapper;
 
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.common.core.page.BaseMapperPlus;
 import com.ruoyi.generator.domain.GenTable;
+import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
 
@@ -10,7 +12,13 @@ import java.util.List;
  *
  * @author ruoyi
  */
-public interface GenTableMapper extends BaseMapper<GenTable> {
+public interface GenTableMapper extends BaseMapperPlus<GenTable> {
+
+
+    Page<GenTable> selectPageGenTableList(@Param("page") Page<GenTable> page, @Param("genTable") GenTable genTable);
+
+    Page<GenTable> selectPageDbTableList(@Param("page") Page<GenTable> page, @Param("genTable") GenTable genTable);
+
     /**
      * 查询业务列表
      *

+ 12 - 0
ruoyi-generator/src/main/java/com/ruoyi/generator/service/GenTableServiceImpl.java

@@ -10,7 +10,9 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ruoyi.common.constant.Constants;
 import com.ruoyi.common.constant.GenConstants;
+import com.ruoyi.common.core.page.TableDataInfo;
 import com.ruoyi.common.exception.CustomException;
+import com.ruoyi.common.utils.PageUtils;
 import com.ruoyi.common.utils.SecurityUtils;
 import com.ruoyi.common.utils.file.FileUtils;
 import com.ruoyi.generator.domain.GenTable;
@@ -66,6 +68,16 @@ public class GenTableServiceImpl extends ServiceImpl<GenTableMapper, GenTable> i
         return genTable;
     }
 
+    @Override
+    public TableDataInfo<GenTable> selectPageGenTableList(GenTable genTable) {
+        return PageUtils.buildDataInfo(baseMapper.selectPageGenTableList(PageUtils.buildPage(), genTable));
+    }
+
+    @Override
+    public TableDataInfo<GenTable> selectPageDbTableList(GenTable genTable) {
+        return PageUtils.buildDataInfo(baseMapper.selectPageDbTableList(PageUtils.buildPage(), genTable));
+    }
+
     /**
      * 查询业务列表
      *

+ 2 - 2
ruoyi-generator/src/main/java/com/ruoyi/generator/service/IGenTableColumnService.java

@@ -1,6 +1,6 @@
 package com.ruoyi.generator.service;
 
-import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.common.core.page.IServicePlus;
 import com.ruoyi.generator.domain.GenTableColumn;
 
 import java.util.List;
@@ -10,7 +10,7 @@ import java.util.List;
  *
  * @author ruoyi
  */
-public interface IGenTableColumnService extends IService<GenTableColumn> {
+public interface IGenTableColumnService extends IServicePlus<GenTableColumn> {
     /**
      * 查询业务字段列表
      *

+ 10 - 2
ruoyi-generator/src/main/java/com/ruoyi/generator/service/IGenTableService.java

@@ -1,6 +1,7 @@
 package com.ruoyi.generator.service;
 
-import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.common.core.page.IServicePlus;
+import com.ruoyi.common.core.page.TableDataInfo;
 import com.ruoyi.generator.domain.GenTable;
 
 import java.util.List;
@@ -11,7 +12,14 @@ import java.util.Map;
  *
  * @author ruoyi
  */
-public interface IGenTableService extends IService<GenTable> {
+public interface IGenTableService extends IServicePlus<GenTable> {
+
+
+    TableDataInfo<GenTable> selectPageGenTableList(GenTable genTable);
+
+
+    TableDataInfo<GenTable> selectPageDbTableList(GenTable genTable);
+
     /**
      * 查询业务列表
      *

+ 40 - 2
ruoyi-generator/src/main/resources/mapper/generator/GenTableMapper.xml

@@ -56,8 +56,46 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 	<sql id="selectGenTableVo">
         select table_id, table_name, table_comment, sub_table_name, sub_table_fk_name, class_name, tpl_category, package_name, module_name, business_name, function_name, function_author, gen_type, gen_path, options, create_by, create_time, update_by, update_time, remark from gen_table
     </sql>
-    
-    <select id="selectGenTableList" parameterType="GenTable" resultMap="GenTableResult">
+
+	<select id="selectPageGenTableList" parameterType="GenTable" resultMap="GenTableResult">
+		<include refid="selectGenTableVo"/>
+		<where>
+			<if test="genTable.tableName != null and genTable.tableName != ''">
+				AND lower(table_name) like lower(concat('%', #{genTable.tableName}, '%'))
+			</if>
+			<if test="genTable.tableComment != null and genTable.tableComment != ''">
+				AND lower(table_comment) like lower(concat('%', #{genTable.tableComment}, '%'))
+			</if>
+			<if test="genTable.params.beginTime != null and genTable.params.beginTime != ''"><!-- 开始时间检索 -->
+				AND date_format(create_time,'%y%m%d') &gt;= date_format(#{genTable.params.beginTime},'%y%m%d')
+			</if>
+			<if test="genTable.params.endTime != null and genTable.params.endTime != ''"><!-- 结束时间检索 -->
+				AND date_format(create_time,'%y%m%d') &lt;= date_format(#{genTable.params.endTime},'%y%m%d')
+			</if>
+		</where>
+	</select>
+
+	<select id="selectPageDbTableList" parameterType="GenTable" resultMap="GenTableResult">
+		select table_name, table_comment, create_time, update_time from information_schema.tables
+		where table_schema = (select database())
+		AND table_name NOT LIKE 'qrtz_%' AND table_name NOT LIKE 'gen_%'
+		AND table_name NOT IN (select table_name from gen_table)
+		<if test="genTable.tableName != null and genTable.tableName != ''">
+			AND lower(table_name) like lower(concat('%', #{genTable.tableName}, '%'))
+		</if>
+		<if test="genTable.tableComment != null and genTable.tableComment != ''">
+			AND lower(table_comment) like lower(concat('%', #{genTable.tableComment}, '%'))
+		</if>
+		<if test="genTable.params.beginTime != null and genTable.params.beginTime != ''"><!-- 开始时间检索 -->
+			AND date_format(create_time,'%y%m%d') &gt;= date_format(#{genTable.params.beginTime},'%y%m%d')
+		</if>
+		<if test="genTable.params.endTime != null and genTable.params.endTime != ''"><!-- 结束时间检索 -->
+			AND date_format(create_time,'%y%m%d') &lt;= date_format(#{genTable.params.endTime},'%y%m%d')
+		</if>
+	</select>
+
+
+	<select id="selectGenTableList" parameterType="GenTable" resultMap="GenTableResult">
 		<include refid="selectGenTableVo"/>
 		<where>
 			<if test="tableName != null and tableName != ''">

+ 6 - 0
ruoyi-generator/src/main/resources/vm/java/addBo.java.vm

@@ -5,6 +5,7 @@ import io.swagger.annotations.ApiModelProperty;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import lombok.Data;
 import java.util.Date;
+import javax.validation.constraints.*;
 
 
 #foreach ($import in $importList)
@@ -27,6 +28,11 @@ public class ${ClassName}AddBo {
     @ApiModelProperty("$column.columnComment")
 #if($column.javaType == 'Date')
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+#end
+#if($column.javaType == 'String')
+    @NotBlank(message = "$column.columnComment不能为空")
+#else
+    @NotNull(message = "$column.columnComment不能为空")
 #end
     private $column.javaType $column.javaField;
 #end

+ 13 - 18
ruoyi-generator/src/main/resources/vm/java/controller.java.vm

@@ -4,16 +4,11 @@ import java.util.List;
 import java.util.Arrays;
 
 import lombok.RequiredArgsConstructor;
+import javax.validation.constraints.*;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.PutMapping;
-import org.springframework.web.bind.annotation.DeleteMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.validation.annotation.Validated;
 import com.ruoyi.common.annotation.Log;
 import com.ruoyi.common.core.controller.BaseController;
 import com.ruoyi.common.core.domain.AjaxResult;
@@ -52,13 +47,11 @@ public class ${ClassName}Controller extends BaseController {
     @PreAuthorize("@ss.hasPermi('${permissionPrefix}:list')")
     @GetMapping("/list")
 #if($table.crud || $table.sub)
-    public TableDataInfo<${ClassName}Vo> list(${ClassName}QueryBo bo) {
-        startPage();
-        List<${ClassName}Vo> list = i${ClassName}Service.queryList(bo);
-        return getDataTable(list);
+    public TableDataInfo<${ClassName}Vo> list(@Validated ${ClassName}QueryBo bo) {
+        return i${ClassName}Service.queryPageList(bo);
     }
 #elseif($table.tree)
-    public AjaxResult<${ClassName}Vo> list(${ClassName}QueryBo bo) {
+    public AjaxResult<List<${ClassName}Vo>> list(@Validated ${ClassName}QueryBo bo) {
         List<${ClassName}Vo> list = i${ClassName}Service.queryList(bo);
         return AjaxResult.success(list);
     }
@@ -71,7 +64,7 @@ public class ${ClassName}Controller extends BaseController {
     @PreAuthorize("@ss.hasPermi('${permissionPrefix}:export')")
     @Log(title = "${functionName}", businessType = BusinessType.EXPORT)
     @GetMapping("/export")
-    public AjaxResult<${ClassName}Vo> export(${ClassName}QueryBo bo) {
+    public AjaxResult<${ClassName}Vo> export(@Validated ${ClassName}QueryBo bo) {
         List<${ClassName}Vo> list = i${ClassName}Service.queryList(bo);
         ExcelUtil<${ClassName}Vo> util = new ExcelUtil<${ClassName}Vo>(${ClassName}Vo.class);
         return util.exportExcel(list, "${functionName}");
@@ -83,7 +76,8 @@ public class ${ClassName}Controller extends BaseController {
     @ApiOperation("获取${functionName}详细信息")
     @PreAuthorize("@ss.hasPermi('${permissionPrefix}:query')")
     @GetMapping("/{${pkColumn.javaField}}")
-    public AjaxResult<${ClassName}Vo> getInfo(@PathVariable("${pkColumn.javaField}" ) ${pkColumn.javaType} ${pkColumn.javaField}) {
+    public AjaxResult<${ClassName}Vo> getInfo(@NotNull(message = "主键不能为空")
+                                                  @PathVariable("${pkColumn.javaField}") ${pkColumn.javaType} ${pkColumn.javaField}) {
         return AjaxResult.success(i${ClassName}Service.queryById(${pkColumn.javaField}));
     }
 
@@ -94,7 +88,7 @@ public class ${ClassName}Controller extends BaseController {
     @PreAuthorize("@ss.hasPermi('${permissionPrefix}:add')")
     @Log(title = "${functionName}", businessType = BusinessType.INSERT)
     @PostMapping()
-    public AjaxResult<Void> add(@RequestBody ${ClassName}AddBo bo) {
+    public AjaxResult<Void> add(@Validated @RequestBody ${ClassName}AddBo bo) {
         return toAjax(i${ClassName}Service.insertByAddBo(bo) ? 1 : 0);
     }
 
@@ -105,7 +99,7 @@ public class ${ClassName}Controller extends BaseController {
     @PreAuthorize("@ss.hasPermi('${permissionPrefix}:edit')")
     @Log(title = "${functionName}", businessType = BusinessType.UPDATE)
     @PutMapping()
-    public AjaxResult<Void> edit(@RequestBody ${ClassName}EditBo bo) {
+    public AjaxResult<Void> edit(@Validated @RequestBody ${ClassName}EditBo bo) {
         return toAjax(i${ClassName}Service.updateByEditBo(bo) ? 1 : 0);
     }
 
@@ -116,7 +110,8 @@ public class ${ClassName}Controller extends BaseController {
     @PreAuthorize("@ss.hasPermi('${permissionPrefix}:remove')")
     @Log(title = "${functionName}" , businessType = BusinessType.DELETE)
     @DeleteMapping("/{${pkColumn.javaField}s}")
-    public AjaxResult<Void> remove(@PathVariable ${pkColumn.javaType}[] ${pkColumn.javaField}s) {
+    public AjaxResult<Void> remove(@NotEmpty(message = "主键不能为空")
+                                       @PathVariable ${pkColumn.javaType}[] ${pkColumn.javaField}s) {
         return toAjax(i${ClassName}Service.deleteWithValidByIds(Arrays.asList(${pkColumn.javaField}s), true) ? 1 : 0);
     }
 }

+ 6 - 0
ruoyi-generator/src/main/resources/vm/java/editBo.java.vm

@@ -5,6 +5,7 @@ import io.swagger.annotations.ApiModelProperty;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import lombok.Data;
 import java.util.Date;
+import javax.validation.constraints.*;
 
 #foreach ($import in $importList)
 import ${import};
@@ -27,6 +28,11 @@ public class ${ClassName}EditBo {
     @ApiModelProperty("$column.columnComment")
 #if($column.javaType == 'Date')
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+#end
+#if($column.javaType == 'String')
+    @NotBlank(message = "$column.columnComment不能为空")
+#else
+    @NotNull(message = "$column.columnComment不能为空")
 #end
     private $column.javaType $column.javaField;
 #end

+ 2 - 2
ruoyi-generator/src/main/resources/vm/java/mapper.java.vm

@@ -1,7 +1,7 @@
 package ${packageName}.mapper;
 
 import ${packageName}.domain.${ClassName};
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.common.core.page.BaseMapperPlus;
 
 /**
  * ${functionName}Mapper接口
@@ -9,6 +9,6 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  * @author ${author}
  * @date ${datetime}
  */
-public interface ${ClassName}Mapper extends BaseMapper<${ClassName}> {
+public interface ${ClassName}Mapper extends BaseMapperPlus<${ClassName}> {
 
 }

+ 1 - 2
ruoyi-generator/src/main/resources/vm/java/queryBo.java.vm

@@ -6,8 +6,6 @@ import lombok.Data;
 import lombok.EqualsAndHashCode;
 
 import java.util.Date;
-import java.util.Map;
-import java.util.HashMap;
 
 #foreach ($import in $importList)
 import ${import};
@@ -29,6 +27,7 @@ import com.ruoyi.common.core.domain.TreeEntity;
 #elseif($table.tree)
 #set($Entity="TreeEntity")
 #end
+
 @Data
 @EqualsAndHashCode(callSuper = true)
 @ApiModel("${functionName}分页查询对象")

+ 11 - 2
ruoyi-generator/src/main/resources/vm/java/service.java.vm

@@ -5,7 +5,10 @@ import ${packageName}.vo.${ClassName}Vo;
 import ${packageName}.bo.${ClassName}QueryBo;
 import ${packageName}.bo.${ClassName}AddBo;
 import ${packageName}.bo.${ClassName}EditBo;
-import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.common.core.page.IServicePlus;
+#if($table.crud || $table.sub)
+import com.ruoyi.common.core.page.TableDataInfo;
+#end
 
 import java.util.Collection;
 import java.util.List;
@@ -16,13 +19,19 @@ import java.util.List;
  * @author ${author}
  * @date ${datetime}
  */
-public interface I${ClassName}Service extends IService<${ClassName}> {
+public interface I${ClassName}Service extends IServicePlus<${ClassName}> {
 	/**
 	 * 查询单个
 	 * @return
 	 */
 	${ClassName}Vo queryById(${pkColumn.javaType} ${pkColumn.javaField});
 
+#if($table.crud || $table.sub)
+	/**
+	 * 查询列表
+	 */
+    TableDataInfo<${ClassName}Vo> queryPageList(${ClassName}QueryBo bo);
+#end
 	/**
 	 * 查询列表
 	 */

+ 27 - 36
ruoyi-generator/src/main/resources/vm/java/serviceImpl.java.vm

@@ -2,11 +2,15 @@ package ${packageName}.service.impl;
 
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.util.StrUtil;
+#if($table.crud || $table.sub)
+import com.ruoyi.common.utils.PageUtils;
+import com.ruoyi.common.core.page.PagePlus;
+import com.ruoyi.common.core.page.TableDataInfo;
+#end
 import org.springframework.stereotype.Service;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import com.github.pagehelper.Page;
 import ${packageName}.bo.${ClassName}AddBo;
 import ${packageName}.bo.${ClassName}QueryBo;
 import ${packageName}.bo.${ClassName}EditBo;
@@ -15,10 +19,9 @@ import ${packageName}.mapper.${ClassName}Mapper;
 import ${packageName}.vo.${ClassName}Vo;
 import ${packageName}.service.I${ClassName}Service;
 
-import java.util.Collection;
-import java.util.Collections;
 import java.util.List;
-import java.util.stream.Collectors;
+import java.util.Map;
+import java.util.Collection;
 
 /**
  * ${functionName}Service业务层处理
@@ -31,12 +34,24 @@ public class ${ClassName}ServiceImpl extends ServiceImpl<${ClassName}Mapper, ${C
 
     @Override
     public ${ClassName}Vo queryById(${pkColumn.javaType} ${pkColumn.javaField}){
-        ${ClassName} db = this.baseMapper.selectById(${pkColumn.javaField});
-        return BeanUtil.toBean(db, ${ClassName}Vo.class);
+        return getVoById(${pkColumn.javaField}, ${ClassName}Vo.class);
+    }
+
+#if($table.crud || $table.sub)
+    @Override
+    public TableDataInfo<${ClassName}Vo> queryPageList(${ClassName}QueryBo bo) {
+        PagePlus<${ClassName}, ${ClassName}Vo> result = pageVo(PageUtils.buildPagePlus(), buildQueryWrapper(bo), ${ClassName}Vo.class);
+        return PageUtils.buildDataInfo(result);
     }
+#end
 
     @Override
     public List<${ClassName}Vo> queryList(${ClassName}QueryBo bo) {
+        return listVo(buildQueryWrapper(bo), ${ClassName}Vo.class);
+    }
+
+    private LambdaQueryWrapper<${ClassName}> buildQueryWrapper(${ClassName}QueryBo bo) {
+        Map<String, Object> params = bo.getParams();
         LambdaQueryWrapper<${ClassName}> lqw = Wrappers.lambdaQuery();
 #foreach($column in $columns)
 #if($column.query)
@@ -54,50 +69,26 @@ public class ${ClassName}ServiceImpl extends ServiceImpl<${ClassName}Mapper, ${C
 #end
         lqw.$mpMethod($condition, ${ClassName}::get$AttrName, bo.get$AttrName());
 #else
-        Object dataScope = bo.getParams().get("dataScope");
-        lqw.apply(dataScope != null, dataScope != null ? dataScope.toString() : null);
-        Map<String, Object> params = bo.getParams();
-        if (params.get("begin$AttrName") != null && params.get("end$AttrName") != null) {
-            lqw.between(${ClassName}::get$AttrName ,params.get("begin$AttrName"), params.get("end$AttrName"));
-        }
+        lqw.between(params.get("begin$AttrName") != null && params.get("end$AttrName") != null,
+            ${ClassName}::get$AttrName ,params.get("begin$AttrName"), params.get("end$AttrName"));
 #end
 #end
 #end
-        return entity2Vo(this.list(lqw));
-    }
-
-    /**
-    * 实体类转化成视图对象
-    *
-    * @param collection 实体类集合
-    * @return
-    */
-    private List<${ClassName}Vo> entity2Vo(Collection<${ClassName}> collection) {
-        List<${ClassName}Vo> voList = collection.stream()
-                .map(any -> BeanUtil.toBean(any, ${ClassName}Vo.class))
-                .collect(Collectors.toList());
-        if (collection instanceof Page) {
-            Page<${ClassName}> page = (Page<${ClassName}>)collection;
-            Page<${ClassName}Vo> pageVo = new Page<>();
-            BeanUtil.copyProperties(page,pageVo);
-            pageVo.addAll(voList);
-            voList = pageVo;
-        }
-        return voList;
+        return lqw;
     }
 
     @Override
     public Boolean insertByAddBo(${ClassName}AddBo bo) {
         ${ClassName} add = BeanUtil.toBean(bo, ${ClassName}.class);
         validEntityBeforeSave(add);
-        return this.save(add);
+        return save(add);
     }
 
     @Override
     public Boolean updateByEditBo(${ClassName}EditBo bo) {
         ${ClassName} update = BeanUtil.toBean(bo, ${ClassName}.class);
         validEntityBeforeSave(update);
-        return this.updateById(update);
+        return updateById(update);
     }
 
     /**
@@ -114,6 +105,6 @@ public class ${ClassName}ServiceImpl extends ServiceImpl<${ClassName}Mapper, ${C
         if(isValid){
             //TODO 做一些业务上的校验,判断是否需要校验
         }
-        return this.removeByIds(ids);
+        return removeByIds(ids);
     }
 }

+ 2 - 2
ruoyi-quartz/pom.xml

@@ -19,8 +19,8 @@
 
         <!-- 定时任务 -->
         <dependency>
-            <groupId>org.quartz-scheduler</groupId>
-            <artifactId>quartz</artifactId>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-quartz</artifactId>
             <exclusions>
                 <exclusion>
                     <groupId>com.mchange</groupId>

+ 3 - 47
ruoyi-quartz/src/main/java/com/ruoyi/quartz/config/ScheduleConfig.java

@@ -1,57 +1,13 @@
 package com.ruoyi.quartz.config;
 
-import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
-import org.springframework.scheduling.quartz.SchedulerFactoryBean;
-import javax.sql.DataSource;
-import java.util.Properties;
 
 /**
  * 定时任务配置
- * 
- * @author ruoyi
+ *
+ * @author Lion Li
  */
 @Configuration
-public class ScheduleConfig
-{
-    @Bean
-    public SchedulerFactoryBean schedulerFactoryBean(DataSource dataSource)
-    {
-        SchedulerFactoryBean factory = new SchedulerFactoryBean();
-        factory.setDataSource(dataSource);
+public class ScheduleConfig {
 
-        // quartz参数
-        Properties prop = new Properties();
-        prop.put("org.quartz.scheduler.instanceName", "RuoyiScheduler");
-        prop.put("org.quartz.scheduler.instanceId", "AUTO");
-        // 线程池配置
-        prop.put("org.quartz.threadPool.class", "org.quartz.simpl.SimpleThreadPool");
-        prop.put("org.quartz.threadPool.threadCount", "20");
-        prop.put("org.quartz.threadPool.threadPriority", "5");
-        // JobStore配置
-        prop.put("org.quartz.jobStore.class", "org.quartz.impl.jdbcjobstore.JobStoreTX");
-        // 集群配置
-        prop.put("org.quartz.jobStore.isClustered", "true");
-        prop.put("org.quartz.jobStore.clusterCheckinInterval", "15000");
-        prop.put("org.quartz.jobStore.maxMisfiresToHandleAtATime", "1");
-        prop.put("org.quartz.jobStore.txIsolationLevelSerializable", "true");
-
-        // sqlserver 启用
-        // prop.put("org.quartz.jobStore.selectWithLockSQL", "SELECT * FROM {0}LOCKS UPDLOCK WHERE LOCK_NAME = ?");
-        prop.put("org.quartz.jobStore.misfireThreshold", "12000");
-        prop.put("org.quartz.jobStore.tablePrefix", "QRTZ_");
-        factory.setQuartzProperties(prop);
-
-        factory.setSchedulerName("RuoyiScheduler");
-        // 延时启动
-        factory.setStartupDelay(1);
-        factory.setApplicationContextSchedulerContextKey("applicationContextKey");
-        // 可选,QuartzScheduler
-        // 启动时更新己存在的Job,这样就不用每次修改targetObject后删除qrtz_job_details表对应记录了
-        factory.setOverwriteExistingJobs(true);
-        // 设置自动启动,默认为true
-        factory.setAutoStartup(true);
-
-        return factory;
-    }
 }

+ 7 - 15
ruoyi-quartz/src/main/java/com/ruoyi/quartz/controller/SysJobController.java

@@ -1,17 +1,5 @@
 package com.ruoyi.quartz.controller;
 
-import java.util.List;
-import org.quartz.SchedulerException;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.security.access.prepost.PreAuthorize;
-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.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
 import com.ruoyi.common.annotation.Log;
 import com.ruoyi.common.core.controller.BaseController;
 import com.ruoyi.common.core.domain.AjaxResult;
@@ -23,6 +11,12 @@ import com.ruoyi.common.utils.poi.ExcelUtil;
 import com.ruoyi.quartz.domain.SysJob;
 import com.ruoyi.quartz.service.ISysJobService;
 import com.ruoyi.quartz.util.CronUtils;
+import org.quartz.SchedulerException;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
 
 /**
  * 调度任务信息操作处理
@@ -43,9 +37,7 @@ public class SysJobController extends BaseController
     @GetMapping("/list")
     public TableDataInfo list(SysJob sysJob)
     {
-        startPage();
-        List<SysJob> list = jobService.selectJobList(sysJob);
-        return getDataTable(list);
+        return jobService.selectPageJobList(sysJob);
     }
 
     /**

+ 6 - 11
ruoyi-quartz/src/main/java/com/ruoyi/quartz/controller/SysJobLogController.java

@@ -1,13 +1,5 @@
 package com.ruoyi.quartz.controller;
 
-import java.util.List;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.security.access.prepost.PreAuthorize;
-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.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
 import com.ruoyi.common.annotation.Log;
 import com.ruoyi.common.core.controller.BaseController;
 import com.ruoyi.common.core.domain.AjaxResult;
@@ -16,6 +8,11 @@ import com.ruoyi.common.enums.BusinessType;
 import com.ruoyi.common.utils.poi.ExcelUtil;
 import com.ruoyi.quartz.domain.SysJobLog;
 import com.ruoyi.quartz.service.ISysJobLogService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
 
 /**
  * 调度日志操作处理
@@ -36,9 +33,7 @@ public class SysJobLogController extends BaseController
     @GetMapping("/list")
     public TableDataInfo list(SysJobLog sysJobLog)
     {
-        startPage();
-        List<SysJobLog> list = jobLogService.selectJobLogList(sysJobLog);
-        return getDataTable(list);
+        return jobLogService.selectPageJobLogList(sysJobLog);
     }
 
     /**

+ 2 - 2
ruoyi-quartz/src/main/java/com/ruoyi/quartz/mapper/SysJobLogMapper.java

@@ -1,6 +1,6 @@
 package com.ruoyi.quartz.mapper;
 
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.common.core.page.BaseMapperPlus;
 import com.ruoyi.quartz.domain.SysJobLog;
 
 /**
@@ -8,6 +8,6 @@ import com.ruoyi.quartz.domain.SysJobLog;
  *
  * @author ruoyi
  */
-public interface SysJobLogMapper extends BaseMapper<SysJobLog> {
+public interface SysJobLogMapper extends BaseMapperPlus<SysJobLog> {
 
 }

+ 2 - 2
ruoyi-quartz/src/main/java/com/ruoyi/quartz/mapper/SysJobMapper.java

@@ -1,6 +1,6 @@
 package com.ruoyi.quartz.mapper;
 
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.common.core.page.BaseMapperPlus;
 import com.ruoyi.quartz.domain.SysJob;
 
 /**
@@ -8,6 +8,6 @@ import com.ruoyi.quartz.domain.SysJob;
  *
  * @author ruoyi
  */
-public interface SysJobMapper extends BaseMapper<SysJob> {
+public interface SysJobMapper extends BaseMapperPlus<SysJob> {
 
 }

+ 7 - 2
ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/ISysJobLogService.java

@@ -1,6 +1,7 @@
 package com.ruoyi.quartz.service;
 
-import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.common.core.page.IServicePlus;
+import com.ruoyi.common.core.page.TableDataInfo;
 import com.ruoyi.quartz.domain.SysJobLog;
 
 import java.util.List;
@@ -10,7 +11,11 @@ import java.util.List;
  *
  * @author ruoyi
  */
-public interface ISysJobLogService extends IService<SysJobLog> {
+public interface ISysJobLogService extends IServicePlus<SysJobLog> {
+
+
+    TableDataInfo<SysJobLog> selectPageJobLogList(SysJobLog jobLog);
+
     /**
      * 获取quartz调度器日志的计划任务
      *

+ 5 - 2
ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/ISysJobService.java

@@ -1,6 +1,7 @@
 package com.ruoyi.quartz.service;
 
-import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.common.core.page.IServicePlus;
+import com.ruoyi.common.core.page.TableDataInfo;
 import com.ruoyi.common.exception.job.TaskException;
 import com.ruoyi.quartz.domain.SysJob;
 import org.quartz.SchedulerException;
@@ -12,13 +13,15 @@ import java.util.List;
  *
  * @author ruoyi
  */
-public interface ISysJobService extends IService<SysJob> {
+public interface ISysJobService extends IServicePlus<SysJob> {
     /**
      * 获取quartz调度器的计划任务
      *
      * @param job 调度信息
      * @return 调度任务集合
      */
+    public TableDataInfo<SysJob> selectPageJobList(SysJob job);
+
     public List<SysJob> selectJobList(SysJob job);
 
     /**

+ 19 - 0
ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/impl/SysJobLogServiceImpl.java

@@ -4,6 +4,8 @@ import cn.hutool.core.lang.Validator;
 import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.utils.PageUtils;
 import com.ruoyi.quartz.domain.SysJobLog;
 import com.ruoyi.quartz.mapper.SysJobLogMapper;
 import com.ruoyi.quartz.service.ISysJobLogService;
@@ -21,6 +23,23 @@ import java.util.Map;
 @Service
 public class SysJobLogServiceImpl extends ServiceImpl<SysJobLogMapper, SysJobLog> implements ISysJobLogService {
 
+    @Override
+    public TableDataInfo<SysJobLog> selectPageJobLogList(SysJobLog jobLog) {
+        Map<String, Object> params = jobLog.getParams();
+        LambdaQueryWrapper<SysJobLog> lqw = new LambdaQueryWrapper<SysJobLog>()
+                .like(StrUtil.isNotBlank(jobLog.getJobName()), SysJobLog::getJobName, jobLog.getJobName())
+                .eq(StrUtil.isNotBlank(jobLog.getJobGroup()), SysJobLog::getJobGroup, jobLog.getJobGroup())
+                .eq(StrUtil.isNotBlank(jobLog.getStatus()), SysJobLog::getStatus, jobLog.getStatus())
+                .like(StrUtil.isNotBlank(jobLog.getInvokeTarget()), SysJobLog::getInvokeTarget, jobLog.getInvokeTarget())
+                .apply(Validator.isNotEmpty(params.get("beginTime")),
+                        "date_format(create_time,'%y%m%d') >= date_format({0},'%y%m%d')",
+                        params.get("beginTime"))
+                .apply(Validator.isNotEmpty(params.get("endTime")),
+                        "date_format(create_time,'%y%m%d') <= date_format({0},'%y%m%d')",
+                        params.get("endTime"));
+        return PageUtils.buildDataInfo(page(PageUtils.buildPage(), lqw));
+    }
+
     /**
      * 获取quartz调度器日志的计划任务
      *

+ 12 - 0
ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/impl/SysJobServiceImpl.java

@@ -4,7 +4,9 @@ import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ruoyi.common.constant.ScheduleConstants;
+import com.ruoyi.common.core.page.TableDataInfo;
 import com.ruoyi.common.exception.job.TaskException;
+import com.ruoyi.common.utils.PageUtils;
 import com.ruoyi.quartz.domain.SysJob;
 import com.ruoyi.quartz.mapper.SysJobMapper;
 import com.ruoyi.quartz.service.ISysJobService;
@@ -43,6 +45,16 @@ public class SysJobServiceImpl extends ServiceImpl<SysJobMapper, SysJob> impleme
         }
     }
 
+    @Override
+    public TableDataInfo<SysJob> selectPageJobList(SysJob job) {
+        LambdaQueryWrapper<SysJob> lqw = new LambdaQueryWrapper<SysJob>()
+                .like(StrUtil.isNotBlank(job.getJobName()), SysJob::getJobName, job.getJobName())
+                .eq(StrUtil.isNotBlank(job.getJobGroup()), SysJob::getJobGroup, job.getJobGroup())
+                .eq(StrUtil.isNotBlank(job.getStatus()), SysJob::getStatus, job.getStatus())
+                .like(StrUtil.isNotBlank(job.getInvokeTarget()), SysJob::getInvokeTarget, job.getInvokeTarget());
+        return PageUtils.buildDataInfo(page(PageUtils.buildPage(), lqw));
+    }
+
     /**
      * 获取quartz调度器的计划任务列表
      *

+ 2 - 2
ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysConfigMapper.java

@@ -1,6 +1,6 @@
 package com.ruoyi.system.mapper;
 
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.common.core.page.BaseMapperPlus;
 import com.ruoyi.system.domain.SysConfig;
 
 /**
@@ -8,6 +8,6 @@ import com.ruoyi.system.domain.SysConfig;
  *
  * @author ruoyi
  */
-public interface SysConfigMapper extends BaseMapper<SysConfig> {
+public interface SysConfigMapper extends BaseMapperPlus<SysConfig> {
 
 }

+ 2 - 2
ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysDeptMapper.java

@@ -1,7 +1,7 @@
 package com.ruoyi.system.mapper;
 
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.ruoyi.common.core.domain.entity.SysDept;
+import com.ruoyi.common.core.page.BaseMapperPlus;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
@@ -11,7 +11,7 @@ import java.util.List;
  *
  * @author ruoyi
  */
-public interface SysDeptMapper extends BaseMapper<SysDept> {
+public interface SysDeptMapper extends BaseMapperPlus<SysDept> {
 
     /**
      * 查询部门管理数据

+ 2 - 2
ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysDictDataMapper.java

@@ -1,13 +1,13 @@
 package com.ruoyi.system.mapper;
 
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.ruoyi.common.core.domain.entity.SysDictData;
+import com.ruoyi.common.core.page.BaseMapperPlus;
 
 /**
  * 字典表 数据层
  *
  * @author ruoyi
  */
-public interface SysDictDataMapper extends BaseMapper<SysDictData> {
+public interface SysDictDataMapper extends BaseMapperPlus<SysDictData> {
 
 }

+ 2 - 2
ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysDictTypeMapper.java

@@ -1,13 +1,13 @@
 package com.ruoyi.system.mapper;
 
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.ruoyi.common.core.domain.entity.SysDictType;
+import com.ruoyi.common.core.page.BaseMapperPlus;
 
 /**
  * 字典表 数据层
  *
  * @author ruoyi
  */
-public interface SysDictTypeMapper extends BaseMapper<SysDictType> {
+public interface SysDictTypeMapper extends BaseMapperPlus<SysDictType> {
 
 }

+ 2 - 2
ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysLogininforMapper.java

@@ -1,6 +1,6 @@
 package com.ruoyi.system.mapper;
 
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.common.core.page.BaseMapperPlus;
 import com.ruoyi.system.domain.SysLogininfor;
 
 /**
@@ -8,6 +8,6 @@ import com.ruoyi.system.domain.SysLogininfor;
  *
  * @author ruoyi
  */
-public interface SysLogininforMapper extends BaseMapper<SysLogininfor> {
+public interface SysLogininforMapper extends BaseMapperPlus<SysLogininfor> {
 
 }

+ 2 - 2
ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysMenuMapper.java

@@ -1,7 +1,7 @@
 package com.ruoyi.system.mapper;
 
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.ruoyi.common.core.domain.entity.SysMenu;
+import com.ruoyi.common.core.page.BaseMapperPlus;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
@@ -11,7 +11,7 @@ import java.util.List;
  *
  * @author ruoyi
  */
-public interface SysMenuMapper extends BaseMapper<SysMenu> {
+public interface SysMenuMapper extends BaseMapperPlus<SysMenu> {
 
     /**
      * 根据用户所有权限

+ 2 - 2
ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysNoticeMapper.java

@@ -1,6 +1,6 @@
 package com.ruoyi.system.mapper;
 
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.common.core.page.BaseMapperPlus;
 import com.ruoyi.system.domain.SysNotice;
 
 /**
@@ -8,6 +8,6 @@ import com.ruoyi.system.domain.SysNotice;
  *
  * @author ruoyi
  */
-public interface SysNoticeMapper extends BaseMapper<SysNotice> {
+public interface SysNoticeMapper extends BaseMapperPlus<SysNotice> {
 
 }

+ 2 - 2
ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysOperLogMapper.java

@@ -1,6 +1,6 @@
 package com.ruoyi.system.mapper;
 
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.common.core.page.BaseMapperPlus;
 import com.ruoyi.system.domain.SysOperLog;
 
 /**
@@ -8,6 +8,6 @@ import com.ruoyi.system.domain.SysOperLog;
  *
  * @author ruoyi
  */
-public interface SysOperLogMapper extends BaseMapper<SysOperLog> {
+public interface SysOperLogMapper extends BaseMapperPlus<SysOperLog> {
 
 }

+ 2 - 2
ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysPostMapper.java

@@ -1,6 +1,6 @@
 package com.ruoyi.system.mapper;
 
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.common.core.page.BaseMapperPlus;
 import com.ruoyi.system.domain.SysPost;
 
 import java.util.List;
@@ -10,7 +10,7 @@ import java.util.List;
  *
  * @author ruoyi
  */
-public interface SysPostMapper extends BaseMapper<SysPost> {
+public interface SysPostMapper extends BaseMapperPlus<SysPost> {
 
     /**
      * 根据用户ID获取岗位选择框列表

+ 2 - 2
ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleDeptMapper.java

@@ -1,6 +1,6 @@
 package com.ruoyi.system.mapper;
 
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.common.core.page.BaseMapperPlus;
 import com.ruoyi.system.domain.SysRoleDept;
 
 /**
@@ -8,6 +8,6 @@ import com.ruoyi.system.domain.SysRoleDept;
  *
  * @author ruoyi
  */
-public interface SysRoleDeptMapper extends BaseMapper<SysRoleDept> {
+public interface SysRoleDeptMapper extends BaseMapperPlus<SysRoleDept> {
 
 }

+ 6 - 2
ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleMapper.java

@@ -1,7 +1,9 @@
 package com.ruoyi.system.mapper;
 
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ruoyi.common.core.domain.entity.SysRole;
+import com.ruoyi.common.core.page.BaseMapperPlus;
+import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
 
@@ -10,7 +12,9 @@ import java.util.List;
  *
  * @author ruoyi
  */
-public interface SysRoleMapper extends BaseMapper<SysRole> {
+public interface SysRoleMapper extends BaseMapperPlus<SysRole> {
+
+    Page<SysRole> selectPageRoleList(@Param("page") Page<SysRole> page, @Param("role") SysRole role);
 
     /**
      * 根据条件分页查询角色数据

+ 2 - 2
ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleMenuMapper.java

@@ -1,6 +1,6 @@
 package com.ruoyi.system.mapper;
 
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.common.core.page.BaseMapperPlus;
 import com.ruoyi.system.domain.SysRoleMenu;
 
 /**
@@ -8,6 +8,6 @@ import com.ruoyi.system.domain.SysRoleMenu;
  *
  * @author ruoyi
  */
-public interface SysRoleMenuMapper extends BaseMapper<SysRoleMenu> {
+public interface SysRoleMenuMapper extends BaseMapperPlus<SysRoleMenu> {
 
 }

+ 7 - 2
ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java

@@ -1,7 +1,9 @@
 package com.ruoyi.system.mapper;
 
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ruoyi.common.core.domain.entity.SysUser;
+import com.ruoyi.common.core.page.BaseMapperPlus;
+import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
 
@@ -10,7 +12,10 @@ import java.util.List;
  *
  * @author ruoyi
  */
-public interface SysUserMapper extends BaseMapper<SysUser> {
+public interface SysUserMapper extends BaseMapperPlus<SysUser> {
+
+    Page<SysUser> selectPageUserList(@Param("page") Page<SysUser> page, @Param("user") SysUser user);
+
     /**
      * 根据条件分页查询用户列表
      *

+ 2 - 2
ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserPostMapper.java

@@ -1,6 +1,6 @@
 package com.ruoyi.system.mapper;
 
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.common.core.page.BaseMapperPlus;
 import com.ruoyi.system.domain.SysUserPost;
 
 /**
@@ -8,6 +8,6 @@ import com.ruoyi.system.domain.SysUserPost;
  *
  * @author ruoyi
  */
-public interface SysUserPostMapper extends BaseMapper<SysUserPost> {
+public interface SysUserPostMapper extends BaseMapperPlus<SysUserPost> {
 
 }

+ 2 - 2
ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserRoleMapper.java

@@ -1,6 +1,6 @@
 package com.ruoyi.system.mapper;
 
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.common.core.page.BaseMapperPlus;
 import com.ruoyi.system.domain.SysUserRole;
 
 /**
@@ -8,6 +8,6 @@ import com.ruoyi.system.domain.SysUserRole;
  *
  * @author ruoyi
  */
-public interface SysUserRoleMapper extends BaseMapper<SysUserRole> {
+public interface SysUserRoleMapper extends BaseMapperPlus<SysUserRole> {
 
 }

+ 7 - 2
ruoyi-system/src/main/java/com/ruoyi/system/service/ISysConfigService.java

@@ -1,6 +1,7 @@
 package com.ruoyi.system.service;
 
-import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.common.core.page.IServicePlus;
+import com.ruoyi.common.core.page.TableDataInfo;
 import com.ruoyi.system.domain.SysConfig;
 
 import java.util.List;
@@ -10,7 +11,11 @@ import java.util.List;
  *
  * @author ruoyi
  */
-public interface ISysConfigService extends IService<SysConfig> {
+public interface ISysConfigService extends IServicePlus<SysConfig> {
+
+
+    TableDataInfo<SysConfig> selectPageConfigList(SysConfig config);
+
     /**
      * 查询参数配置信息
      *

+ 2 - 2
ruoyi-system/src/main/java/com/ruoyi/system/service/ISysDeptService.java

@@ -1,8 +1,8 @@
 package com.ruoyi.system.service;
 
-import com.baomidou.mybatisplus.extension.service.IService;
 import com.ruoyi.common.core.domain.TreeSelect;
 import com.ruoyi.common.core.domain.entity.SysDept;
+import com.ruoyi.common.core.page.IServicePlus;
 
 import java.util.List;
 
@@ -11,7 +11,7 @@ import java.util.List;
  *
  * @author ruoyi
  */
-public interface ISysDeptService extends IService<SysDept> {
+public interface ISysDeptService extends IServicePlus<SysDept> {
     /**
      * 查询部门管理数据
      *

+ 7 - 2
ruoyi-system/src/main/java/com/ruoyi/system/service/ISysDictDataService.java

@@ -1,7 +1,8 @@
 package com.ruoyi.system.service;
 
-import com.baomidou.mybatisplus.extension.service.IService;
 import com.ruoyi.common.core.domain.entity.SysDictData;
+import com.ruoyi.common.core.page.IServicePlus;
+import com.ruoyi.common.core.page.TableDataInfo;
 
 import java.util.List;
 
@@ -10,7 +11,11 @@ import java.util.List;
  *
  * @author ruoyi
  */
-public interface ISysDictDataService extends IService<SysDictData> {
+public interface ISysDictDataService extends IServicePlus<SysDictData> {
+
+
+    TableDataInfo<SysDictData> selectPageDictDataList(SysDictData dictData);
+
     /**
      * 根据条件分页查询字典数据
      *

+ 7 - 2
ruoyi-system/src/main/java/com/ruoyi/system/service/ISysDictTypeService.java

@@ -1,8 +1,9 @@
 package com.ruoyi.system.service;
 
-import com.baomidou.mybatisplus.extension.service.IService;
 import com.ruoyi.common.core.domain.entity.SysDictData;
 import com.ruoyi.common.core.domain.entity.SysDictType;
+import com.ruoyi.common.core.page.IServicePlus;
+import com.ruoyi.common.core.page.TableDataInfo;
 
 import java.util.List;
 
@@ -11,7 +12,11 @@ import java.util.List;
  *
  * @author ruoyi
  */
-public interface ISysDictTypeService extends IService<SysDictType> {
+public interface ISysDictTypeService extends IServicePlus<SysDictType> {
+
+
+    TableDataInfo<SysDictType> selectPageDictTypeList(SysDictType dictType);
+
     /**
      * 根据条件分页查询字典类型
      *

+ 7 - 2
ruoyi-system/src/main/java/com/ruoyi/system/service/ISysLogininforService.java

@@ -1,6 +1,7 @@
 package com.ruoyi.system.service;
 
-import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.common.core.page.IServicePlus;
+import com.ruoyi.common.core.page.TableDataInfo;
 import com.ruoyi.system.domain.SysLogininfor;
 
 import java.util.List;
@@ -10,7 +11,11 @@ import java.util.List;
  *
  * @author ruoyi
  */
-public interface ISysLogininforService extends IService<SysLogininfor> {
+public interface ISysLogininforService extends IServicePlus<SysLogininfor> {
+
+
+    TableDataInfo<SysLogininfor> selectPageLogininforList(SysLogininfor logininfor);
+
     /**
      * 新增系统登录日志
      *

+ 2 - 2
ruoyi-system/src/main/java/com/ruoyi/system/service/ISysMenuService.java

@@ -1,8 +1,8 @@
 package com.ruoyi.system.service;
 
-import com.baomidou.mybatisplus.extension.service.IService;
 import com.ruoyi.common.core.domain.TreeSelect;
 import com.ruoyi.common.core.domain.entity.SysMenu;
+import com.ruoyi.common.core.page.IServicePlus;
 import com.ruoyi.system.domain.vo.RouterVo;
 
 import java.util.List;
@@ -13,7 +13,7 @@ import java.util.Set;
  *
  * @author ruoyi
  */
-public interface ISysMenuService extends IService<SysMenu> {
+public interface ISysMenuService extends IServicePlus<SysMenu> {
     /**
      * 根据用户查询系统菜单列表
      *

+ 7 - 2
ruoyi-system/src/main/java/com/ruoyi/system/service/ISysNoticeService.java

@@ -1,6 +1,7 @@
 package com.ruoyi.system.service;
 
-import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.common.core.page.IServicePlus;
+import com.ruoyi.common.core.page.TableDataInfo;
 import com.ruoyi.system.domain.SysNotice;
 
 import java.util.List;
@@ -10,7 +11,11 @@ import java.util.List;
  *
  * @author ruoyi
  */
-public interface ISysNoticeService extends IService<SysNotice> {
+public interface ISysNoticeService extends IServicePlus<SysNotice> {
+
+
+    TableDataInfo<SysNotice> selectPageNoticeList(SysNotice notice);
+
     /**
      * 查询公告信息
      *

+ 6 - 2
ruoyi-system/src/main/java/com/ruoyi/system/service/ISysOperLogService.java

@@ -1,6 +1,7 @@
 package com.ruoyi.system.service;
 
-import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.common.core.page.IServicePlus;
+import com.ruoyi.common.core.page.TableDataInfo;
 import com.ruoyi.system.domain.SysOperLog;
 
 import java.util.List;
@@ -10,7 +11,10 @@ import java.util.List;
  *
  * @author ruoyi
  */
-public interface ISysOperLogService extends IService<SysOperLog> {
+public interface ISysOperLogService extends IServicePlus<SysOperLog> {
+
+    TableDataInfo<SysOperLog> selectPageOperLogList(SysOperLog operLog);
+
     /**
      * 新增操作日志
      *

+ 7 - 2
ruoyi-system/src/main/java/com/ruoyi/system/service/ISysPostService.java

@@ -1,6 +1,7 @@
 package com.ruoyi.system.service;
 
-import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.common.core.page.IServicePlus;
+import com.ruoyi.common.core.page.TableDataInfo;
 import com.ruoyi.system.domain.SysPost;
 
 import java.util.List;
@@ -10,7 +11,11 @@ import java.util.List;
  *
  * @author ruoyi
  */
-public interface ISysPostService extends IService<SysPost> {
+public interface ISysPostService extends IServicePlus<SysPost> {
+
+
+    TableDataInfo<SysPost> selectPagePostList(SysPost post);
+
     /**
      * 查询岗位信息集合
      *

+ 7 - 2
ruoyi-system/src/main/java/com/ruoyi/system/service/ISysRoleService.java

@@ -1,7 +1,8 @@
 package com.ruoyi.system.service;
 
-import com.baomidou.mybatisplus.extension.service.IService;
 import com.ruoyi.common.core.domain.entity.SysRole;
+import com.ruoyi.common.core.page.IServicePlus;
+import com.ruoyi.common.core.page.TableDataInfo;
 
 import java.util.List;
 import java.util.Set;
@@ -11,7 +12,11 @@ import java.util.Set;
  *
  * @author ruoyi
  */
-public interface ISysRoleService extends IService<SysRole> {
+public interface ISysRoleService extends IServicePlus<SysRole> {
+
+
+    TableDataInfo<SysRole> selectPageRoleList(SysRole role);
+
     /**
      * 根据条件分页查询角色数据
      *

+ 7 - 2
ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java

@@ -1,7 +1,8 @@
 package com.ruoyi.system.service;
 
-import com.baomidou.mybatisplus.extension.service.IService;
 import com.ruoyi.common.core.domain.entity.SysUser;
+import com.ruoyi.common.core.page.IServicePlus;
+import com.ruoyi.common.core.page.TableDataInfo;
 
 import java.util.List;
 
@@ -10,7 +11,11 @@ import java.util.List;
  *
  * @author ruoyi
  */
-public interface ISysUserService extends IService<SysUser> {
+public interface ISysUserService extends IServicePlus<SysUser> {
+
+
+    TableDataInfo<SysUser> selectPageUserList(SysUser user);
+
     /**
      * 根据条件分页查询用户列表
      *

+ 28 - 10
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysConfigServiceImpl.java

@@ -8,9 +8,11 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ruoyi.common.annotation.DataSource;
 import com.ruoyi.common.constant.Constants;
 import com.ruoyi.common.constant.UserConstants;
+import com.ruoyi.common.core.page.TableDataInfo;
 import com.ruoyi.common.core.redis.RedisCache;
 import com.ruoyi.common.enums.DataSourceType;
 import com.ruoyi.common.exception.CustomException;
+import com.ruoyi.common.utils.PageUtils;
 import com.ruoyi.system.domain.SysConfig;
 import com.ruoyi.system.mapper.SysConfigMapper;
 import com.ruoyi.system.service.ISysConfigService;
@@ -45,6 +47,22 @@ public class SysConfigServiceImpl extends ServiceImpl<SysConfigMapper, SysConfig
         }
     }
 
+    @Override
+    public TableDataInfo<SysConfig> selectPageConfigList(SysConfig config) {
+        Map<String, Object> params = config.getParams();
+        LambdaQueryWrapper<SysConfig> lqw = new LambdaQueryWrapper<SysConfig>()
+                .like(StrUtil.isNotBlank(config.getConfigName()), SysConfig::getConfigName, config.getConfigName())
+                .eq(StrUtil.isNotBlank(config.getConfigType()), SysConfig::getConfigType, config.getConfigType())
+                .like(StrUtil.isNotBlank(config.getConfigKey()), SysConfig::getConfigKey, config.getConfigKey())
+                .apply(Validator.isNotEmpty(params.get("beginTime")),
+                        "date_format(create_time,'%y%m%d') >= date_format(#{0},'%y%m%d')",
+                        params.get("beginTime"))
+                .apply(Validator.isNotEmpty(params.get("endTime")),
+                        "date_format(create_time,'%y%m%d') <= date_format(#{0},'%y%m%d')",
+                        params.get("endTime"));
+        return PageUtils.buildDataInfo(page(PageUtils.buildPage(), lqw));
+    }
+
     /**
      * 查询参数配置信息
      *
@@ -86,17 +104,17 @@ public class SysConfigServiceImpl extends ServiceImpl<SysConfigMapper, SysConfig
      */
     @Override
     public List<SysConfig> selectConfigList(SysConfig config) {
-        LambdaQueryWrapper<SysConfig> lqw = new LambdaQueryWrapper<>();
-        lqw.like(StrUtil.isNotBlank(config.getConfigName()), SysConfig::getConfigName, config.getConfigName());
-        lqw.eq(StrUtil.isNotBlank(config.getConfigType()), SysConfig::getConfigType, config.getConfigType());
-        lqw.like(StrUtil.isNotBlank(config.getConfigKey()), SysConfig::getConfigKey, config.getConfigKey());
         Map<String, Object> params = config.getParams();
-        lqw.apply(Validator.isNotEmpty(params.get("beginTime")),
-                "date_format(create_time,'%y%m%d') >= date_format(#{0},'%y%m%d')",
-                params.get("beginTime"));
-        lqw.apply(Validator.isNotEmpty(params.get("endTime")),
-                "date_format(create_time,'%y%m%d') >= date_format(#{0},'%y%m%d')",
-                params.get("endTime"));
+        LambdaQueryWrapper<SysConfig> lqw = new LambdaQueryWrapper<SysConfig>()
+                .like(StrUtil.isNotBlank(config.getConfigName()), SysConfig::getConfigName, config.getConfigName())
+                .eq(StrUtil.isNotBlank(config.getConfigType()), SysConfig::getConfigType, config.getConfigType())
+                .like(StrUtil.isNotBlank(config.getConfigKey()), SysConfig::getConfigKey, config.getConfigKey())
+                .apply(Validator.isNotEmpty(params.get("beginTime")),
+                        "date_format(create_time,'%y%m%d') >= date_format(#{0},'%y%m%d')",
+                        params.get("beginTime"))
+                .apply(Validator.isNotEmpty(params.get("endTime")),
+                        "date_format(create_time,'%y%m%d') >= date_format(#{0},'%y%m%d')",
+                        params.get("endTime"));
         return baseMapper.selectList(lqw);
     }
 

+ 14 - 1
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDictDataServiceImpl.java

@@ -4,7 +4,9 @@ import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ruoyi.common.core.domain.entity.SysDictData;
+import com.ruoyi.common.core.page.TableDataInfo;
 import com.ruoyi.common.utils.DictUtils;
+import com.ruoyi.common.utils.PageUtils;
 import com.ruoyi.system.mapper.SysDictDataMapper;
 import com.ruoyi.system.service.ISysDictDataService;
 import org.springframework.stereotype.Service;
@@ -20,6 +22,16 @@ import java.util.List;
 @Service
 public class SysDictDataServiceImpl extends ServiceImpl<SysDictDataMapper, SysDictData> implements ISysDictDataService {
 
+    @Override
+    public TableDataInfo<SysDictData> selectPageDictDataList(SysDictData dictData) {
+        LambdaQueryWrapper<SysDictData> lqw = new LambdaQueryWrapper<SysDictData>()
+                .eq(StrUtil.isNotBlank(dictData.getDictType()), SysDictData::getDictType, dictData.getDictType())
+                .like(StrUtil.isNotBlank(dictData.getDictLabel()), SysDictData::getDictLabel, dictData.getDictLabel())
+                .eq(StrUtil.isNotBlank(dictData.getStatus()), SysDictData::getStatus, dictData.getStatus())
+                .orderByAsc(SysDictData::getDictSort);
+        return PageUtils.buildDataInfo(page(PageUtils.buildPage(),lqw));
+    }
+
     /**
      * 根据条件分页查询字典数据
      *
@@ -28,7 +40,8 @@ public class SysDictDataServiceImpl extends ServiceImpl<SysDictDataMapper, SysDi
      */
     @Override
     public List<SysDictData> selectDictDataList(SysDictData dictData) {
-        return list(new LambdaQueryWrapper<SysDictData>().eq(StrUtil.isNotBlank(dictData.getDictType()), SysDictData::getDictType, dictData.getDictType())
+        return list(new LambdaQueryWrapper<SysDictData>()
+                .eq(StrUtil.isNotBlank(dictData.getDictType()), SysDictData::getDictType, dictData.getDictType())
                 .like(StrUtil.isNotBlank(dictData.getDictLabel()), SysDictData::getDictLabel, dictData.getDictLabel())
                 .eq(StrUtil.isNotBlank(dictData.getStatus()), SysDictData::getStatus, dictData.getStatus())
                 .orderByAsc(SysDictData::getDictSort));

+ 18 - 0
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDictTypeServiceImpl.java

@@ -9,8 +9,10 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ruoyi.common.constant.UserConstants;
 import com.ruoyi.common.core.domain.entity.SysDictData;
 import com.ruoyi.common.core.domain.entity.SysDictType;
+import com.ruoyi.common.core.page.TableDataInfo;
 import com.ruoyi.common.exception.CustomException;
 import com.ruoyi.common.utils.DictUtils;
+import com.ruoyi.common.utils.PageUtils;
 import com.ruoyi.system.mapper.SysDictDataMapper;
 import com.ruoyi.system.mapper.SysDictTypeMapper;
 import com.ruoyi.system.service.ISysDictTypeService;
@@ -50,6 +52,22 @@ public class SysDictTypeServiceImpl extends ServiceImpl<SysDictTypeMapper, SysDi
         }
     }
 
+    @Override
+    public TableDataInfo<SysDictType> selectPageDictTypeList(SysDictType dictType) {
+        Map<String, Object> params = dictType.getParams();
+        LambdaQueryWrapper<SysDictType> lqw = new LambdaQueryWrapper<SysDictType>()
+                .like(StrUtil.isNotBlank(dictType.getDictName()), SysDictType::getDictName, dictType.getDictName())
+                .eq(StrUtil.isNotBlank(dictType.getStatus()), SysDictType::getStatus, dictType.getStatus())
+                .like(StrUtil.isNotBlank(dictType.getDictType()), SysDictType::getDictType, dictType.getDictType())
+                .apply(Validator.isNotEmpty(params.get("beginTime")),
+                        "date_format(create_time,'%y%m%d') >= date_format({0},'%y%m%d')",
+                        params.get("beginTime"))
+                .apply(Validator.isNotEmpty(params.get("endTime")),
+                        "date_format(create_time,'%y%m%d') <= date_format({0},'%y%m%d')",
+                        params.get("endTime"));
+        return PageUtils.buildDataInfo(page(PageUtils.buildPage(),lqw));
+    }
+
     /**
      * 根据条件分页查询字典类型
      *

+ 19 - 0
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysLogininforServiceImpl.java

@@ -4,6 +4,8 @@ import cn.hutool.core.lang.Validator;
 import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.utils.PageUtils;
 import com.ruoyi.system.domain.SysLogininfor;
 import com.ruoyi.system.mapper.SysLogininforMapper;
 import com.ruoyi.system.service.ISysLogininforService;
@@ -22,6 +24,23 @@ import java.util.Map;
 @Service
 public class SysLogininforServiceImpl extends ServiceImpl<SysLogininforMapper, SysLogininfor> implements ISysLogininforService {
 
+    @Override
+    public TableDataInfo<SysLogininfor> selectPageLogininforList(SysLogininfor logininfor) {
+        Map<String, Object> params = logininfor.getParams();
+        LambdaQueryWrapper<SysLogininfor> lqw = new LambdaQueryWrapper<SysLogininfor>()
+                .like(StrUtil.isNotBlank(logininfor.getIpaddr()), SysLogininfor::getIpaddr, logininfor.getIpaddr())
+                .eq(StrUtil.isNotBlank(logininfor.getStatus()), SysLogininfor::getStatus, logininfor.getStatus())
+                .like(StrUtil.isNotBlank(logininfor.getUserName()), SysLogininfor::getUserName, logininfor.getUserName())
+                .apply(Validator.isNotEmpty(params.get("beginTime")),
+                        "date_format(login_time,'%y%m%d') >= date_format({0},'%y%m%d')",
+                        params.get("beginTime"))
+                .apply(Validator.isNotEmpty(params.get("endTime")),
+                        "date_format(login_time,'%y%m%d') <= date_format({0},'%y%m%d')",
+                        params.get("endTime"))
+                .orderByDesc(SysLogininfor::getInfoId);
+        return PageUtils.buildDataInfo(page(PageUtils.buildPage(), lqw));
+    }
+
     /**
      * 新增系统登录日志
      *

+ 11 - 0
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysNoticeServiceImpl.java

@@ -3,6 +3,8 @@ package com.ruoyi.system.service.impl;
 import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.utils.PageUtils;
 import com.ruoyi.system.domain.SysNotice;
 import com.ruoyi.system.mapper.SysNoticeMapper;
 import com.ruoyi.system.service.ISysNoticeService;
@@ -19,6 +21,15 @@ import java.util.List;
 @Service
 public class SysNoticeServiceImpl extends ServiceImpl<SysNoticeMapper, SysNotice> implements ISysNoticeService {
 
+    @Override
+    public TableDataInfo<SysNotice> selectPageNoticeList(SysNotice notice) {
+        LambdaQueryWrapper<SysNotice> lqw = new LambdaQueryWrapper<SysNotice>()
+                .like(StrUtil.isNotBlank(notice.getNoticeTitle()), SysNotice::getNoticeTitle, notice.getNoticeTitle())
+                .eq(StrUtil.isNotBlank(notice.getNoticeType()), SysNotice::getNoticeType, notice.getNoticeType())
+                .like(StrUtil.isNotBlank(notice.getCreateBy()), SysNotice::getCreateBy, notice.getCreateBy());
+        return PageUtils.buildDataInfo(page(PageUtils.buildPage(),lqw));
+    }
+
     /**
      * 查询公告信息
      *

+ 27 - 0
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOperLogServiceImpl.java

@@ -5,6 +5,8 @@ import cn.hutool.core.util.ArrayUtil;
 import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.utils.PageUtils;
 import com.ruoyi.system.domain.SysOperLog;
 import com.ruoyi.system.mapper.SysOperLogMapper;
 import com.ruoyi.system.service.ISysOperLogService;
@@ -23,6 +25,31 @@ import java.util.Map;
 @Service
 public class SysOperLogServiceImpl extends ServiceImpl<SysOperLogMapper, SysOperLog> implements ISysOperLogService {
 
+    @Override
+    public TableDataInfo<SysOperLog> selectPageOperLogList(SysOperLog operLog) {
+        Map<String, Object> params = operLog.getParams();
+        LambdaQueryWrapper<SysOperLog> lqw = new LambdaQueryWrapper<SysOperLog>()
+                .like(StrUtil.isNotBlank(operLog.getTitle()), SysOperLog::getTitle, operLog.getTitle())
+                .eq(operLog.getBusinessType() != null && operLog.getBusinessType() > 0,
+                        SysOperLog::getBusinessType, operLog.getBusinessType())
+                .func(f -> {
+                    if (ArrayUtil.isNotEmpty(operLog.getBusinessTypes())) {
+                        f.in(SysOperLog::getBusinessType, Arrays.asList(operLog.getBusinessTypes()));
+                    }
+                })
+                .eq(operLog.getStatus() != null && operLog.getStatus() > 0,
+                        SysOperLog::getStatus, operLog.getStatus())
+                .like(StrUtil.isNotBlank(operLog.getOperName()), SysOperLog::getOperName, operLog.getOperName())
+                .apply(Validator.isNotEmpty(params.get("beginTime")),
+                        "date_format(oper_time,'%y%m%d') >= date_format({0},'%y%m%d')",
+                        params.get("beginTime"))
+                .apply(Validator.isNotEmpty(params.get("endTime")),
+                        "date_format(oper_time,'%y%m%d') <= date_format({0},'%y%m%d')",
+                        params.get("endTime"))
+                .orderByDesc(SysOperLog::getOperId);
+        return PageUtils.buildDataInfo(page(PageUtils.buildPage(), lqw));
+    }
+
     /**
      * 新增操作日志
      *

+ 11 - 0
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysPostServiceImpl.java

@@ -5,7 +5,9 @@ import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ruoyi.common.constant.UserConstants;
+import com.ruoyi.common.core.page.TableDataInfo;
 import com.ruoyi.common.exception.CustomException;
+import com.ruoyi.common.utils.PageUtils;
 import com.ruoyi.system.domain.SysPost;
 import com.ruoyi.system.domain.SysUserPost;
 import com.ruoyi.system.mapper.SysPostMapper;
@@ -28,6 +30,15 @@ public class SysPostServiceImpl extends ServiceImpl<SysPostMapper, SysPost> impl
     @Autowired
     private SysUserPostMapper userPostMapper;
 
+    @Override
+    public TableDataInfo<SysPost> selectPagePostList(SysPost post) {
+        LambdaQueryWrapper<SysPost> lqw = new LambdaQueryWrapper<SysPost>()
+                .like(StrUtil.isNotBlank(post.getPostCode()), SysPost::getPostCode, post.getPostCode())
+                .eq(StrUtil.isNotBlank(post.getStatus()), SysPost::getStatus, post.getStatus())
+                .like(StrUtil.isNotBlank(post.getPostName()), SysPost::getPostName, post.getPostName());
+        return PageUtils.buildDataInfo(page(PageUtils.buildPage(),lqw));
+    }
+
     /**
      * 查询岗位信息集合
      *

+ 8 - 1
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java

@@ -1,13 +1,14 @@
 package com.ruoyi.system.service.impl;
 
 import cn.hutool.core.lang.Validator;
-import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ruoyi.common.annotation.DataScope;
 import com.ruoyi.common.constant.UserConstants;
 import com.ruoyi.common.core.domain.entity.SysRole;
+import com.ruoyi.common.core.page.TableDataInfo;
 import com.ruoyi.common.exception.CustomException;
+import com.ruoyi.common.utils.PageUtils;
 import com.ruoyi.common.utils.spring.SpringUtils;
 import com.ruoyi.system.domain.SysRoleDept;
 import com.ruoyi.system.domain.SysRoleMenu;
@@ -40,6 +41,12 @@ public class SysRoleServiceImpl extends ServiceImpl<SysRoleMapper, SysRole> impl
     @Autowired
     private SysRoleDeptMapper roleDeptMapper;
 
+    @Override
+    @DataScope(deptAlias = "d")
+    public TableDataInfo<SysRole> selectPageRoleList(SysRole role) {
+        return PageUtils.buildDataInfo(baseMapper.selectPageRoleList(PageUtils.buildPage(), role));
+    }
+
     /**
      * 根据条件分页查询角色数据
      *

+ 8 - 0
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java

@@ -8,7 +8,9 @@ import com.ruoyi.common.annotation.DataScope;
 import com.ruoyi.common.constant.UserConstants;
 import com.ruoyi.common.core.domain.entity.SysRole;
 import com.ruoyi.common.core.domain.entity.SysUser;
+import com.ruoyi.common.core.page.TableDataInfo;
 import com.ruoyi.common.exception.CustomException;
+import com.ruoyi.common.utils.PageUtils;
 import com.ruoyi.common.utils.SecurityUtils;
 import com.ruoyi.system.domain.SysPost;
 import com.ruoyi.system.domain.SysUserPost;
@@ -49,6 +51,12 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
     @Autowired
     private ISysConfigService configService;
 
+    @Override
+    @DataScope(deptAlias = "d", userAlias = "u")
+    public TableDataInfo<SysUser> selectPageUserList(SysUser user) {
+        return PageUtils.buildDataInfo(baseMapper.selectPageUserList(PageUtils.buildPage(), user));
+    }
+
     /**
      * 根据条件分页查询用户列表
      *

+ 23 - 0
ruoyi-system/src/main/resources/mapper/system/SysRoleMapper.xml

@@ -39,6 +39,29 @@
                  left join sys_dept d on u.dept_id = d.dept_id
     </sql>
 
+    <select id="selectPageRoleList" parameterType="SysRole" resultMap="SysRoleResult">
+        <include refid="selectRoleVo"/>
+        where r.del_flag = '0'
+        <if test="role.roleName != null and role.roleName != ''">
+            AND r.role_name like concat('%', #{role.roleName}, '%')
+        </if>
+        <if test="role.status != null and role.status != ''">
+            AND r.status = #{role.status}
+        </if>
+        <if test="role.roleKey != null and role.roleKey != ''">
+            AND r.role_key like concat('%', #{role.roleKey}, '%')
+        </if>
+        <if test="role.params.beginTime != null and role.params.beginTime != ''"><!-- 开始时间检索 -->
+            and date_format(r.create_time,'%y%m%d') &gt;= date_format(#{role.params.beginTime},'%y%m%d')
+        </if>
+        <if test="role.params.endTime != null and role.params.endTime != ''"><!-- 结束时间检索 -->
+            and date_format(r.create_time,'%y%m%d') &lt;= date_format(#{role.params.endTime},'%y%m%d')
+        </if>
+        <!-- 数据范围过滤 -->
+        ${role.params.dataScope}
+        order by r.role_sort
+    </select>
+
     <select id="selectRoleList" parameterType="SysRole" resultMap="SysRoleResult">
         <include refid="selectRoleVo"/>
         where r.del_flag = '0'

+ 29 - 0
ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml

@@ -80,6 +80,35 @@
                  left join sys_role r on r.role_id = ur.role_id
     </sql>
 
+    <select id="selectPageUserList" parameterType="SysUser" resultMap="SysUserResult">
+        select u.user_id, u.dept_id, u.nick_name, u.user_name, u.email, u.avatar, u.phonenumber, u.password, u.sex,
+        u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark, d.dept_name, d.leader from
+        sys_user u
+        left join sys_dept d on u.dept_id = d.dept_id
+        where u.del_flag = '0'
+        <if test="user.userName != null and user.userName != ''">
+            AND u.user_name like concat('%', #{user.userName}, '%')
+        </if>
+        <if test="user.status != null and user.status != ''">
+            AND u.status = #{user.status}
+        </if>
+        <if test="user.phonenumber != null and user.phonenumber != ''">
+            AND u.phonenumber like concat('%', #{user.phonenumber}, '%')
+        </if>
+        <if test="user.params.beginTime != null and user.params.beginTime != ''"><!-- 开始时间检索 -->
+            AND date_format(u.create_time,'%y%m%d') &gt;= date_format(#{user.params.beginTime},'%y%m%d')
+        </if>
+        <if test="user.params.endTime != null and user.params.endTime != ''"><!-- 结束时间检索 -->
+            AND date_format(u.create_time,'%y%m%d') &lt;= date_format(#{user.params.endTime},'%y%m%d')
+        </if>
+        <if test="user.deptId != null and user.deptId != 0">
+            AND (u.dept_id = #{user.deptId} OR u.dept_id IN ( SELECT t.dept_id FROM sys_dept t WHERE find_in_set(#{user.deptId},
+            ancestors) ))
+        </if>
+        <!-- 数据范围过滤 -->
+        ${user.params.dataScope}
+    </select>
+
     <select id="selectUserList" parameterType="SysUser" resultMap="SysUserResult">
         select u.user_id, u.dept_id, u.nick_name, u.user_name, u.email, u.avatar, u.phonenumber, u.password, u.sex,
         u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark, d.dept_name, d.leader from

+ 1 - 1
ruoyi-ui/package.json

@@ -1,6 +1,6 @@
 {
   "name": "ruoyi-vue-plus",
-  "version": "1.0.2",
+  "version": "2.0.0",
   "description": "RuoYi-Vue-Plus后台管理系统",
   "author": "LionLi",
   "license": "MIT",

+ 46 - 2
ruoyi-ui/src/views/index.vue

@@ -4,7 +4,21 @@
       <el-col :sm="24" :lg="12" style="padding-left: 20px">
         <h2>RuoYi-Vue-Plus后台管理框架</h2>
         <p>
-          基于RuoYi-Vue集成 Lombok+Mybatis-Plus+Undertow+knife4j+Hutool+Feign 重写所有原生业务 定期与RuoYi-Vue同步
+          基于 RuoYi-Vue 集成 Mybatis-Plus Lombok Hutool 等便捷开发工具 适配重写相关业务 便于开发 定期与 RuoYi-Vue 同步
+          <br/>
+          * 前端开发框架 Vue、Element UI<br/>
+          * 后端开发框架 Spring Boot、Redis<br/>
+          * 容器框架 Undertow 基于 Netty 的高性能容器<br/>
+          * 权限认证框架 Spring Security、Jwt,支持多终端认证系统<br/>
+          * 关系数据库 MySQL 适配 8.X<br/>
+          * 缓存数据库 Redis 适配 6.X<br/>
+          * 数据库开发框架 Mybatis-Plus 快速 CRUD 增加开发效率 插件化支持各类需求<br/>
+          * 网络框架 Feign、OkHttp3 接口化管理 HTTP 请求<br/>
+          * 工具类框架 Hutool、Lombok 减少代码冗余 增加安全性<br/>
+          * 监控框架 spring-boot-admin 全方位服务监控<br/>
+          * 校验框架 validation 增强接口安全性 严谨性<br/>
+          * 文档框架 knife4j 美化接口文档<br/>
+          * 代码生成器 一键生成前后端代码<br/>
         </p>
         <p>
           <b>当前版本:</b> <span>v{{ version }}</span>
@@ -66,6 +80,36 @@
             <span>更新日志</span>
           </div>
           <el-collapse accordion>
+            <el-collapse-item title="v2.0.0 - 2021-5-15">
+              <ol>
+                <li>springboot 升级 2.3.10 依赖全面升级适配</li>
+                <li>add 增加分页工具</li>
+                <li>add 增加 增强Mapper 与 增强Service 重写业务适配</li>
+                <li>add 代码生成器 增加校验注解</li>
+                <li>update 代码生成器修改为MP分页</li>
+                <li>update 使用 MP 分页工具 重构业务</li>
+                <li>update 重写文档介绍</li>
+                <li>remove 移除 pagehelper 分页工具</li>
+                <li>fix 修复代码生成 数据权限问题</li>
+              </ol>
+            </el-collapse-item>
+            <el-collapse-item title="v1.0.2 - 2021-5-13">
+              <ol>
+                <li>update 更新整合打包文档 重新排版</li>
+                <li>fix vue与boot整合打包与admin页面路由冲突</li>
+              </ol>
+            </el-collapse-item>
+            <el-collapse-item title="v1.0.1 - 2021-5-11">
+              <ol>
+                <li>update 更新banner</li>
+                <li>update 配置转移到 yml 文件 统一管理</li>
+                <li>update 上传媒体类型添加视频格式</li>
+                <li>update 树级结构更新子节点使用replaceFirst</li>
+                <li>update 删除操作日志记录日志</li>
+                <li>fix 修正导入表权限标识</li>
+                <li>fix 文件上传时报错</li>
+              </ol>
+            </el-collapse-item>
             <el-collapse-item title="v1.0.0 - 2021-5-10">
               <ol>
                 <li>RuoYi-Vue-Plus 后台管理系统正式发布</li>
@@ -96,7 +140,7 @@ export default {
   data() {
     return {
       // 版本号
-      version: "1.0.0",
+      version: "2.0.0",
     };
   },
   methods: {