add 整合 mybatis-plus 重写所有业务

2.X
疯狂的狮子li 2022-01-26 20:33:39 +08:00
parent d3788a4d51
commit 0e9ec77392
130 changed files with 5447 additions and 5840 deletions

View File

@ -45,8 +45,8 @@
| 分布式云存储(未完成) | 七牛、阿里、腾讯 | [OSS使用文档](https://gitee.com/JavaLionLi/RuoYi-Vue-Plus/wikis/pages?sort_id=4359146&doc_id=1469725) | 云存储 | | 分布式云存储(未完成) | 七牛、阿里、腾讯 | [OSS使用文档](https://gitee.com/JavaLionLi/RuoYi-Vue-Plus/wikis/pages?sort_id=4359146&doc_id=1469725) | 云存储 |
| 分布式监控(未完成) | Prometheus、Grafana | [Prometheus文档](https://prometheus.io/docs/introduction/overview/) | 全方位性能监控 | | 分布式监控(未完成) | Prometheus、Grafana | [Prometheus文档](https://prometheus.io/docs/introduction/overview/) | 全方位性能监控 |
| 服务监控 | SpringBoot-Admin | [SpringBoot-Admin文档](https://codecentric.github.io/spring-boot-admin/current/) | 全方位服务监控 | | 服务监控 | SpringBoot-Admin | [SpringBoot-Admin文档](https://codecentric.github.io/spring-boot-admin/current/) | 全方位服务监控 |
| 数据库框架(未完成) | Mybatis-Plus | [Mybatis-Plus文档](https://baomidou.com/guide/) | 快速 CRUD 增加开发效率 | | 数据库框架 | Mybatis-Plus | [Mybatis-Plus文档](https://baomidou.com/guide/) | 快速 CRUD 增加开发效率 |
| 数据库框架(未完成) | P6spy | [p6spy官网](https://p6spy.readthedocs.io/) | 更强劲的 SQL 分析 | | 数据库框架 | P6spy | [p6spy官网](https://p6spy.readthedocs.io/) | 更强劲的 SQL 分析 |
| 多数据源框架 | Dynamic-Datasource | [dynamic-ds文档](https://www.kancloud.cn/tracy5546/dynamic-datasource/content) | 支持主从与多种类数据库异构 | | 多数据源框架 | Dynamic-Datasource | [dynamic-ds文档](https://www.kancloud.cn/tracy5546/dynamic-datasource/content) | 支持主从与多种类数据库异构 |
| 序列化框架 | Jackson | [Jackson官网](https://github.com/FasterXML/jackson) | 统一使用 jackson 高效可靠 | | 序列化框架 | Jackson | [Jackson官网](https://github.com/FasterXML/jackson) | 统一使用 jackson 高效可靠 |
| Redis客户端 | Redisson | [Redisson文档](https://github.com/redisson/redisson/wiki/%E7%9B%AE%E5%BD%95) | 支持单机、集群配置 | | Redis客户端 | Redisson | [Redisson文档](https://github.com/redisson/redisson/wiki/%E7%9B%AE%E5%BD%95) | 支持单机、集群配置 |

View File

@ -158,12 +158,61 @@ logging:
com.alibaba.nacos: warn com.alibaba.nacos: warn
config: classpath:logback.xml config: classpath:logback.xml
# mybatis配置 # MyBatisPlus配置
mybatis: # https://baomidou.com/config/
# 搜索指定包别名 mybatis-plus:
# 不支持多包, 如有需要可在注解配置 或 提升扫包等级
# 例如 com.**.**.mapper
mapperPackage: com.ruoyi.**.mapper
# 对应的 XML 文件位置
mapperLocations: classpath*:mapper/**/*Mapper.xml
# 实体扫描多个package用逗号或者分号分隔
typeAliasesPackage: com.ruoyi.**.domain typeAliasesPackage: com.ruoyi.**.domain
# 配置mapper的扫描找到所有的mapper.xml映射文件 # 启动时是否检查 MyBatis XML 文件的存在,默认不检查
mapperLocations: classpath:mapper/**/*.xml checkConfigLocation: false
# 通过该属性可指定 MyBatis 的执行器MyBatis 的执行器总共有三种:
# SIMPLE每个语句创建新的预处理器 REUSE会复用预处理器 BATCH批量执行所有的更新
executorType: SIMPLE
configuration:
# 自动驼峰命名规则camel case映射
mapUnderscoreToCamelCase: true
# 当设置为 true 的时候,懒加载的对象可能被任何懒属性全部加载,否则,每个属性都按需加载。需要和 lazyLoadingEnabled 一起使用。
aggressiveLazyLoading: true
# MyBatis 自动映射策略
# NONE不启用 PARTIAL只对非嵌套 resultMap 自动映射 FULL对所有 resultMap 自动映射
autoMappingBehavior: PARTIAL
# MyBatis 自动映射时未知列或未知属性处理策
# NONE不做处理 WARNING打印相关警告 FAILING抛出异常和详细信息
autoMappingUnknownColumnBehavior: NONE
# Mybatis一级缓存默认为 SESSION
# SESSION session级别缓存 STATEMENT 关闭一级缓存
localCacheScope: SESSION
# 开启Mybatis二级缓存默认为 true
cacheEnabled: false
# 更详细的日志输出 会有性能损耗 org.apache.ibatis.logging.stdout.StdOutImpl
# 关闭日志记录 (可单纯使用 p6spy 分析) org.apache.ibatis.logging.nologging.NoLoggingImpl
# 默认日志输出 org.apache.ibatis.logging.slf4j.Slf4jImpl
logImpl: org.apache.ibatis.logging.nologging.NoLoggingImpl
global-config:
# 是否打印 Logo banner
banner: true
# 是否初始化 SqlRunner
enableSqlRunner: false
dbConfig:
# 主键类型
# AUTO 自增 NONE 空 INPUT 用户输入 ASSIGN_ID 雪花 ASSIGN_UUID 唯一 UUID
idType: AUTO
# 表名是否使用驼峰转下划线命名,只对表名生效
tableUnderline: true
# 大写命名,对表名和字段名均生效
capitalMode: false
# 逻辑已删除值
logicDeleteValue: 2
# 逻辑未删除值
logicNotDeleteValue: 0
insertStrategy: NOT_NULL
updateStrategy: NOT_NULL
where-strategy: NOT_NULL
# swagger配置 # swagger配置
swagger: swagger:

View File

@ -20,7 +20,7 @@ spring:
# 动态数据源文档 https://www.kancloud.cn/tracy5546/dynamic-datasource/content # 动态数据源文档 https://www.kancloud.cn/tracy5546/dynamic-datasource/content
dynamic: dynamic:
# 性能分析插件(有性能损耗 不建议生产环境使用) # 性能分析插件(有性能损耗 不建议生产环境使用)
p6spy: false p6spy: true
# 开启seata代理开启后默认每个数据源都代理如果某个不需要代理可单独关闭 # 开启seata代理开启后默认每个数据源都代理如果某个不需要代理可单独关闭
seata: false seata: false
druid: druid:
@ -42,4 +42,4 @@ spring:
# seata配置 # seata配置
seata: seata:
# 关闭自动代理 # 关闭自动代理
enable-auto-data-source-proxy: false enable-auto-data-source-proxy: false

22
pom.xml
View File

@ -25,7 +25,8 @@
<spring-boot.mybatis>2.2.0</spring-boot.mybatis> <spring-boot.mybatis>2.2.0</spring-boot.mybatis>
<swagger.core.version>1.6.2</swagger.core.version> <swagger.core.version>1.6.2</swagger.core.version>
<tobato.version>1.27.2</tobato.version> <tobato.version>1.27.2</tobato.version>
<pagehelper.boot.version>1.4.1</pagehelper.boot.version> <mybatis-plus.version>3.5.1</mybatis-plus.version>
<p6spy.version>3.9.1</p6spy.version>
<druid.version>1.2.8</druid.version> <druid.version>1.2.8</druid.version>
<dynamic-ds.version>3.5.0</dynamic-ds.version> <dynamic-ds.version>3.5.0</dynamic-ds.version>
<commons.io.version>2.11.0</commons.io.version> <commons.io.version>2.11.0</commons.io.version>
@ -197,11 +198,22 @@
<version>${swagger.core.version}</version> <version>${swagger.core.version}</version>
</dependency> </dependency>
<!-- pagehelper 分页插件 -->
<dependency> <dependency>
<groupId>com.github.pagehelper</groupId> <groupId>com.baomidou</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId> <artifactId>mybatis-plus-boot-starter</artifactId>
<version>${pagehelper.boot.version}</version> <version>${mybatis-plus.version}</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-annotation</artifactId>
<version>${mybatis-plus.version}</version>
</dependency>
<!-- sql性能分析插件 -->
<dependency>
<groupId>p6spy</groupId>
<artifactId>p6spy</artifactId>
<version>${p6spy.version}</version>
</dependency> </dependency>
<!-- io常用工具类 --> <!-- io常用工具类 -->

View File

@ -1,30 +1,28 @@
package com.ruoyi.system.api; package com.ruoyi.system.api;
import com.ruoyi.system.api.domain.SysLogininfor; import com.ruoyi.system.api.domain.SysLogininfor;
import com.ruoyi.system.api.domain.SysOperLog; import com.ruoyi.system.api.domain.SysOperLog;
/** /**
* *
* *
* @author Lion Li * @author Lion Li
*/ */
public interface RemoteLogService { public interface RemoteLogService {
/** /**
* *
* *
* @param sysOperLog * @param sysOperLog
* @param source * @return
* @return */
*/ Boolean saveLog(SysOperLog sysOperLog);
Boolean saveLog(SysOperLog sysOperLog, String source);
/**
/** * 访
* 访 *
* * @param sysLogininfor 访
* @param sysLogininfor 访 * @return
* @param source */
* @return Boolean saveLogininfor(SysLogininfor sysLogininfor);
*/ }
Boolean saveLogininfor(SysLogininfor sysLogininfor, String source);
}

View File

@ -1,30 +1,28 @@
package com.ruoyi.system.api; package com.ruoyi.system.api;
import com.ruoyi.system.api.domain.SysUser; import com.ruoyi.system.api.domain.SysUser;
import com.ruoyi.system.api.model.LoginUser; import com.ruoyi.system.api.model.LoginUser;
/** /**
* *
* *
* @author Lion Li * @author Lion Li
*/ */
public interface RemoteUserService { public interface RemoteUserService {
/** /**
* *
* *
* @param username * @param username
* @param source * @return
* @return */
*/ LoginUser getUserInfo(String username);
LoginUser getUserInfo(String username, String source);
/**
/** *
* *
* * @param sysUser
* @param sysUser * @return
* @param source */
* @return Boolean registerUserInfo(SysUser sysUser);
*/ }
Boolean registerUserInfo(SysUser sysUser, String source);
}

View File

@ -1,11 +1,14 @@
package com.ruoyi.system.api.domain; package com.ruoyi.system.api.domain;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;
import com.ruoyi.common.core.web.domain.TreeEntity; import com.ruoyi.common.core.web.domain.TreeEntity;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors; import lombok.NoArgsConstructor;
import javax.validation.constraints.Email; import javax.validation.constraints.Email;
import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotBlank;
@ -20,6 +23,8 @@ import javax.validation.constraints.Size;
@Data @Data
@EqualsAndHashCode(callSuper = true) @EqualsAndHashCode(callSuper = true)
@NoArgsConstructor
@TableName("sys_dept")
@ApiModel("部门业务对象") @ApiModel("部门业务对象")
public class SysDept extends TreeEntity { public class SysDept extends TreeEntity {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
@ -28,6 +33,7 @@ public class SysDept extends TreeEntity {
* ID * ID
*/ */
@ApiModelProperty(value = "部门id") @ApiModelProperty(value = "部门id")
@TableId(value = "dept_id")
private Long deptId; private Long deptId;
/** /**
@ -76,6 +82,7 @@ public class SysDept extends TreeEntity {
* 0 2 * 0 2
*/ */
@ApiModelProperty(value = "删除标志0代表存在 2代表删除") @ApiModelProperty(value = "删除标志0代表存在 2代表删除")
@TableLogic
private String delFlag; private String delFlag;
/** /**

View File

@ -2,6 +2,8 @@ package com.ruoyi.system.api.domain;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty; import com.alibaba.excel.annotation.ExcelProperty;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.ruoyi.common.core.constant.UserConstants; import com.ruoyi.common.core.constant.UserConstants;
import com.ruoyi.common.core.web.domain.BaseEntity; import com.ruoyi.common.core.web.domain.BaseEntity;
import com.ruoyi.common.excel.annotation.ExcelDictFormat; import com.ruoyi.common.excel.annotation.ExcelDictFormat;
@ -10,6 +12,7 @@ import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Size; import javax.validation.constraints.Size;
@ -22,6 +25,8 @@ import javax.validation.constraints.Size;
@Data @Data
@EqualsAndHashCode(callSuper = true) @EqualsAndHashCode(callSuper = true)
@NoArgsConstructor
@TableName("sys_dict_data")
@ExcelIgnoreUnannotated @ExcelIgnoreUnannotated
@ApiModel("字典数据业务对象") @ApiModel("字典数据业务对象")
public class SysDictData extends BaseEntity { public class SysDictData extends BaseEntity {
@ -31,6 +36,7 @@ public class SysDictData extends BaseEntity {
*/ */
@ApiModelProperty(value = "字典编码") @ApiModelProperty(value = "字典编码")
@ExcelProperty(value = "字典编码") @ExcelProperty(value = "字典编码")
@TableId(value = "dict_code")
private Long dictCode; private Long dictCode;
/** /**

View File

@ -2,6 +2,8 @@ package com.ruoyi.system.api.domain;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty; import com.alibaba.excel.annotation.ExcelProperty;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.ruoyi.common.core.web.domain.BaseEntity; import com.ruoyi.common.core.web.domain.BaseEntity;
import com.ruoyi.common.excel.annotation.ExcelDictFormat; import com.ruoyi.common.excel.annotation.ExcelDictFormat;
import com.ruoyi.common.excel.convert.ExcelDictConvert; import com.ruoyi.common.excel.convert.ExcelDictConvert;
@ -9,7 +11,7 @@ import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors; import lombok.NoArgsConstructor;
import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Size; import javax.validation.constraints.Size;
@ -22,6 +24,8 @@ import javax.validation.constraints.Size;
@Data @Data
@EqualsAndHashCode(callSuper = true) @EqualsAndHashCode(callSuper = true)
@NoArgsConstructor
@TableName("sys_dict_type")
@ExcelIgnoreUnannotated @ExcelIgnoreUnannotated
@ApiModel("字典类型业务对象") @ApiModel("字典类型业务对象")
public class SysDictType extends BaseEntity { public class SysDictType extends BaseEntity {
@ -31,6 +35,7 @@ public class SysDictType extends BaseEntity {
*/ */
@ApiModelProperty(value = "字典主键") @ApiModelProperty(value = "字典主键")
@ExcelProperty(value = "字典主键") @ExcelProperty(value = "字典主键")
@TableId(value = "dict_id")
private Long dictId; private Long dictId;
/** /**

View File

@ -2,12 +2,15 @@ package com.ruoyi.system.api.domain;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty; import com.alibaba.excel.annotation.ExcelProperty;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.ruoyi.common.excel.annotation.ExcelDictFormat; import com.ruoyi.common.excel.annotation.ExcelDictFormat;
import com.ruoyi.common.excel.convert.ExcelDictConvert; import com.ruoyi.common.excel.convert.ExcelDictConvert;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import lombok.experimental.Accessors; import lombok.NoArgsConstructor;
import java.io.Serializable; import java.io.Serializable;
import java.util.Date; import java.util.Date;
@ -21,6 +24,8 @@ import java.util.Map;
*/ */
@Data @Data
@NoArgsConstructor
@TableName("sys_logininfor")
@ExcelIgnoreUnannotated @ExcelIgnoreUnannotated
@ApiModel("系统访问记录业务对象") @ApiModel("系统访问记录业务对象")
public class SysLogininfor implements Serializable { public class SysLogininfor implements Serializable {
@ -31,6 +36,7 @@ public class SysLogininfor implements Serializable {
*/ */
@ApiModelProperty(value = "访问ID") @ApiModelProperty(value = "访问ID")
@ExcelProperty(value = "序号") @ExcelProperty(value = "序号")
@TableId(value = "info_id")
private Long infoId; private Long infoId;
/** /**
@ -73,6 +79,7 @@ public class SysLogininfor implements Serializable {
* *
*/ */
@ApiModelProperty(value = "请求参数") @ApiModelProperty(value = "请求参数")
@TableField(exist = false)
private Map<String, Object> params = new HashMap<>(); private Map<String, Object> params = new HashMap<>();
} }

View File

@ -2,12 +2,15 @@ package com.ruoyi.system.api.domain;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty; import com.alibaba.excel.annotation.ExcelProperty;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.ruoyi.common.excel.annotation.ExcelDictFormat; import com.ruoyi.common.excel.annotation.ExcelDictFormat;
import com.ruoyi.common.excel.convert.ExcelDictConvert; import com.ruoyi.common.excel.convert.ExcelDictConvert;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import lombok.experimental.Accessors; import lombok.NoArgsConstructor;
import java.io.Serializable; import java.io.Serializable;
import java.util.Date; import java.util.Date;
@ -21,6 +24,8 @@ import java.util.Map;
*/ */
@Data @Data
@NoArgsConstructor
@TableName("sys_oper_log")
@ExcelIgnoreUnannotated @ExcelIgnoreUnannotated
@ApiModel("操作日志记录业务对象") @ApiModel("操作日志记录业务对象")
public class SysOperLog implements Serializable { public class SysOperLog implements Serializable {
@ -32,6 +37,7 @@ public class SysOperLog implements Serializable {
*/ */
@ApiModelProperty(value = "日志主键") @ApiModelProperty(value = "日志主键")
@ExcelProperty(value = "日志主键") @ExcelProperty(value = "日志主键")
@TableId(value = "oper_id")
private Long operId; private Long operId;
/** /**
@ -53,6 +59,7 @@ public class SysOperLog implements Serializable {
* *
*/ */
@ApiModelProperty(value = "业务类型数组") @ApiModelProperty(value = "业务类型数组")
@TableField(exist = false)
private Integer[] businessTypes; private Integer[] businessTypes;
/** /**
@ -145,6 +152,7 @@ public class SysOperLog implements Serializable {
* *
*/ */
@ApiModelProperty(value = "请求参数") @ApiModelProperty(value = "请求参数")
@TableField(exist = false)
private Map<String, Object> params = new HashMap<>(); private Map<String, Object> params = new HashMap<>();
} }

View File

@ -2,6 +2,10 @@ package com.ruoyi.system.api.domain;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty; import com.alibaba.excel.annotation.ExcelProperty;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;
import com.ruoyi.common.core.web.domain.BaseEntity; import com.ruoyi.common.core.web.domain.BaseEntity;
import com.ruoyi.common.excel.annotation.ExcelDictFormat; import com.ruoyi.common.excel.annotation.ExcelDictFormat;
import com.ruoyi.common.excel.convert.ExcelDictConvert; import com.ruoyi.common.excel.convert.ExcelDictConvert;
@ -9,7 +13,6 @@ import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Size; import javax.validation.constraints.Size;
@ -23,6 +26,7 @@ import javax.validation.constraints.Size;
@Data @Data
@NoArgsConstructor @NoArgsConstructor
@EqualsAndHashCode(callSuper = true) @EqualsAndHashCode(callSuper = true)
@TableName("sys_role")
@ExcelIgnoreUnannotated @ExcelIgnoreUnannotated
public class SysRole extends BaseEntity { public class SysRole extends BaseEntity {
@ -31,6 +35,7 @@ public class SysRole extends BaseEntity {
*/ */
@ApiModelProperty(value = "角色ID") @ApiModelProperty(value = "角色ID")
@ExcelProperty(value = "角色序号") @ExcelProperty(value = "角色序号")
@TableId(value = "role_id")
private Long roleId; private Long roleId;
/** /**
@ -91,6 +96,7 @@ public class SysRole extends BaseEntity {
* 0 2 * 0 2
*/ */
@ApiModelProperty(value = "删除标志0代表存在 2代表删除") @ApiModelProperty(value = "删除标志0代表存在 2代表删除")
@TableLogic
private String delFlag; private String delFlag;
/** /**
@ -103,18 +109,21 @@ public class SysRole extends BaseEntity {
* *
*/ */
@ApiModelProperty(value = "用户是否存在此角色标识 默认不存在") @ApiModelProperty(value = "用户是否存在此角色标识 默认不存在")
@TableField(exist = false)
private boolean flag = false; private boolean flag = false;
/** /**
* *
*/ */
@ApiModelProperty(value = "菜单组") @ApiModelProperty(value = "菜单组")
@TableField(exist = false)
private Long[] menuIds; private Long[] menuIds;
/** /**
* *
*/ */
@ApiModelProperty(value = "部门组(数据权限)") @ApiModelProperty(value = "部门组(数据权限)")
@TableField(exist = false)
private Long[] deptIds; private Long[] deptIds;
public SysRole(Long roleId) { public SysRole(Long roleId) {

View File

@ -1,5 +1,6 @@
package com.ruoyi.system.api.domain; package com.ruoyi.system.api.domain;
import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonProperty;
import com.ruoyi.common.core.web.domain.BaseEntity; import com.ruoyi.common.core.web.domain.BaseEntity;
@ -9,7 +10,6 @@ import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import javax.validation.constraints.Email; import javax.validation.constraints.Email;
import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotBlank;
@ -26,6 +26,7 @@ import java.util.List;
@Data @Data
@NoArgsConstructor @NoArgsConstructor
@EqualsAndHashCode(callSuper = true) @EqualsAndHashCode(callSuper = true)
@TableName("sys_user")
@ApiModel("用户信息业务对象") @ApiModel("用户信息业务对象")
public class SysUser extends BaseEntity { public class SysUser extends BaseEntity {
@ -33,6 +34,7 @@ public class SysUser extends BaseEntity {
* ID * ID
*/ */
@ApiModelProperty(value = "用户ID") @ApiModelProperty(value = "用户ID")
@TableId(value = "user_id")
private Long userId; private Long userId;
/** /**
@ -94,6 +96,11 @@ public class SysUser extends BaseEntity {
* *
*/ */
@ApiModelProperty(value = "密码") @ApiModelProperty(value = "密码")
@TableField(
insertStrategy = FieldStrategy.NOT_EMPTY,
updateStrategy = FieldStrategy.NOT_EMPTY,
whereStrategy = FieldStrategy.NOT_EMPTY
)
private String password; private String password;
@JsonIgnore @JsonIgnore
@ -112,6 +119,7 @@ public class SysUser extends BaseEntity {
* 0 2 * 0 2
*/ */
@ApiModelProperty(value = "删除标志0代表存在 2代表删除") @ApiModelProperty(value = "删除标志0代表存在 2代表删除")
@TableLogic
private String delFlag; private String delFlag;
/** /**
@ -136,30 +144,35 @@ public class SysUser extends BaseEntity {
* *
*/ */
@ApiModelProperty(value = "部门对象") @ApiModelProperty(value = "部门对象")
@TableField(exist = false)
private SysDept dept; private SysDept dept;
/** /**
* *
*/ */
@ApiModelProperty(value = "角色对象") @ApiModelProperty(value = "角色对象")
@TableField(exist = false)
private List<SysRole> roles; private List<SysRole> roles;
/** /**
* *
*/ */
@ApiModelProperty(value = "角色组") @ApiModelProperty(value = "角色组")
@TableField(exist = false)
private Long[] roleIds; private Long[] roleIds;
/** /**
* *
*/ */
@ApiModelProperty(value = "岗位组") @ApiModelProperty(value = "岗位组")
@TableField(exist = false)
private Long[] postIds; private Long[] postIds;
/** /**
* ID * ID
*/ */
@ApiModelProperty(value = "角色ID") @ApiModelProperty(value = "角色ID")
@TableField(exist = false)
private Long roleId; private Long roleId;
public SysUser(Long userId) { public SysUser(Long userId) {

View File

@ -25,7 +25,7 @@ import javax.servlet.http.HttpServletRequest;
* *
* @author ruoyi * @author ruoyi
*/ */
@RequiredArgsConstructor(onConstructor_ = @Autowired) @RequiredArgsConstructor
@RestController @RestController
public class TokenController { public class TokenController {

View File

@ -2,7 +2,6 @@ package com.ruoyi.auth.service;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import com.ruoyi.common.core.constant.Constants; import com.ruoyi.common.core.constant.Constants;
import com.ruoyi.common.core.constant.SecurityConstants;
import com.ruoyi.common.core.constant.UserConstants; import com.ruoyi.common.core.constant.UserConstants;
import com.ruoyi.common.core.enums.UserStatus; import com.ruoyi.common.core.enums.UserStatus;
import com.ruoyi.common.core.exception.ServiceException; import com.ruoyi.common.core.exception.ServiceException;
@ -52,7 +51,7 @@ public class SysLoginService {
throw new ServiceException("用户名不在指定范围"); throw new ServiceException("用户名不在指定范围");
} }
// 查询用户信息 // 查询用户信息
LoginUser userInfo = remoteUserService.getUserInfo(username, SecurityConstants.INNER); LoginUser userInfo = remoteUserService.getUserInfo(username);
if (ObjectUtil.isNull(userInfo)) { if (ObjectUtil.isNull(userInfo)) {
recordLogininfor(username, Constants.LOGIN_FAIL, "登录用户不存在"); recordLogininfor(username, Constants.LOGIN_FAIL, "登录用户不存在");
@ -101,7 +100,7 @@ public class SysLoginService {
sysUser.setUserName(username); sysUser.setUserName(username);
sysUser.setNickName(username); sysUser.setNickName(username);
sysUser.setPassword(SecurityUtils.encryptPassword(password)); sysUser.setPassword(SecurityUtils.encryptPassword(password));
remoteUserService.registerUserInfo(sysUser, SecurityConstants.INNER); remoteUserService.registerUserInfo(sysUser);
recordLogininfor(username, Constants.REGISTER, "注册成功"); recordLogininfor(username, Constants.REGISTER, "注册成功");
} }
@ -125,6 +124,6 @@ public class SysLoginService {
} else if (Constants.LOGIN_FAIL.equals(status)) { } else if (Constants.LOGIN_FAIL.equals(status)) {
logininfor.setStatus("1"); logininfor.setStatus("1");
} }
remoteLogService.saveLogininfor(logininfor, SecurityConstants.INNER); remoteLogService.saveLogininfor(logininfor);
} }
} }

View File

@ -17,9 +17,9 @@
<module>ruoyi-common-redis</module> <module>ruoyi-common-redis</module>
<module>ruoyi-common-swagger</module> <module>ruoyi-common-swagger</module>
<module>ruoyi-common-security</module> <module>ruoyi-common-security</module>
<module>ruoyi-common-datascope</module>
<module>ruoyi-common-datasource</module> <module>ruoyi-common-datasource</module>
<module>ruoyi-common-web</module> <module>ruoyi-common-web</module>
<module>ruoyi-common-mybatis</module>
<module>ruoyi-common-job</module> <module>ruoyi-common-job</module>
<module>ruoyi-common-dubbo</module> <module>ruoyi-common-dubbo</module>
<module>ruoyi-common-seata</module> <module>ruoyi-common-seata</module>

View File

@ -36,13 +36,6 @@
<version>${project.version}</version> <version>${project.version}</version>
</dependency> </dependency>
<!-- 权限范围 -->
<dependency>
<groupId>com.ruoyi</groupId>
<artifactId>ruoyi-common-datascope</artifactId>
<version>${project.version}</version>
</dependency>
<!-- 多数据源 --> <!-- 多数据源 -->
<dependency> <dependency>
<groupId>com.ruoyi</groupId> <groupId>com.ruoyi</groupId>
@ -85,6 +78,13 @@
<version>${project.version}</version> <version>${project.version}</version>
</dependency> </dependency>
<!-- 数据库服务 -->
<dependency>
<groupId>com.ruoyi</groupId>
<artifactId>ruoyi-common-mybatis</artifactId>
<version>${project.version}</version>
</dependency>
<dependency> <dependency>
<groupId>com.ruoyi</groupId> <groupId>com.ruoyi</groupId>
<artifactId>ruoyi-common-job</artifactId> <artifactId>ruoyi-common-job</artifactId>

View File

@ -35,10 +35,13 @@
<artifactId>transmittable-thread-local</artifactId> <artifactId>transmittable-thread-local</artifactId>
</dependency> </dependency>
<!-- Pagehelper -->
<dependency> <dependency>
<groupId>com.github.pagehelper</groupId> <groupId>org.mybatis.spring.boot</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId> <artifactId>mybatis-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-annotation</artifactId>
</dependency> </dependency>
<!-- Hibernate Validator --> <!-- Hibernate Validator -->

View File

@ -1,28 +0,0 @@
package com.ruoyi.common.core.utils;
import cn.hutool.core.util.ObjectUtil;
import com.github.pagehelper.PageHelper;
import com.ruoyi.common.core.utils.sql.SqlUtil;
import com.ruoyi.common.core.web.page.PageDomain;
import com.ruoyi.common.core.web.page.TableSupport;
/**
*
*
* @author ruoyi
*/
public class PageUtils extends PageHelper {
/**
*
*/
public static void startPage() {
PageDomain pageDomain = TableSupport.buildPageRequest();
Integer pageNum = pageDomain.getPageNum();
Integer pageSize = pageDomain.getPageSize();
if (ObjectUtil.isNotNull(pageNum) && ObjectUtil.isNotNull(pageSize)) {
String orderBy = SqlUtil.escapeOrderBySql(pageDomain.getOrderBy());
Boolean reasonable = pageDomain.getReasonable();
PageHelper.startPage(pageNum, pageSize, orderBy).setReasonable(reasonable);
}
}
}

View File

@ -1,87 +1,61 @@
package com.ruoyi.common.core.web.controller; package com.ruoyi.common.core.web.controller;
import com.github.pagehelper.PageInfo; import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.core.constant.HttpStatus; import lombok.extern.slf4j.Slf4j;
import com.ruoyi.common.core.utils.PageUtils;
import com.ruoyi.common.core.web.domain.AjaxResult; /**
import com.ruoyi.common.core.web.page.TableDataInfo; * web
import lombok.extern.slf4j.Slf4j; *
* @author ruoyi
import java.util.List; */
@Slf4j
/** public class BaseController {
* web
* /**
* @author ruoyi *
*/ *
@Slf4j * @param rows
public class BaseController { * @return
*/
/** protected AjaxResult toAjax(int rows) {
* return rows > 0 ? AjaxResult.success() : AjaxResult.error();
*/ }
protected void startPage() {
PageUtils.startPage(); /**
} *
*
/** * @param result
* * @return
*/ */
@SuppressWarnings({"rawtypes", "unchecked"}) protected AjaxResult toAjax(boolean result) {
protected TableDataInfo getDataTable(List<?> list) { return result ? success() : error();
TableDataInfo rspData = new TableDataInfo(); }
rspData.setCode(HttpStatus.SUCCESS);
rspData.setRows(list); /**
rspData.setMsg("查询成功"); *
rspData.setTotal(new PageInfo(list).getTotal()); */
return rspData; public AjaxResult success() {
} return AjaxResult.success();
}
/**
* /**
* *
* @param rows */
* @return public AjaxResult error() {
*/ return AjaxResult.error();
protected AjaxResult toAjax(int rows) { }
return rows > 0 ? AjaxResult.success() : AjaxResult.error();
} /**
*
/** */
* public AjaxResult success(String message) {
* return AjaxResult.success(message);
* @param result }
* @return
*/ /**
protected AjaxResult toAjax(boolean result) { *
return result ? success() : error(); */
} public AjaxResult error(String message) {
return AjaxResult.error(message);
/** }
* }
*/
public AjaxResult success() {
return AjaxResult.success();
}
/**
*
*/
public AjaxResult error() {
return AjaxResult.error();
}
/**
*
*/
public AjaxResult success(String message) {
return AjaxResult.success(message);
}
/**
*
*/
public AjaxResult error(String message) {
return AjaxResult.error(message);
}
}

View File

@ -1,8 +1,9 @@
package com.ruoyi.common.core.web.domain; package com.ruoyi.common.core.web.domain;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import lombok.experimental.Accessors;
import java.io.Serializable; import java.io.Serializable;
import java.util.Date; import java.util.Date;
@ -24,36 +25,42 @@ public class BaseEntity implements Serializable {
* *
*/ */
@ApiModelProperty(value = "搜索值") @ApiModelProperty(value = "搜索值")
@TableField(exist = false)
private String searchValue; private String searchValue;
/** /**
* *
*/ */
@ApiModelProperty(value = "创建者") @ApiModelProperty(value = "创建者")
@TableField(fill = FieldFill.INSERT)
private String createBy; private String createBy;
/** /**
* *
*/ */
@ApiModelProperty(value = "创建时间") @ApiModelProperty(value = "创建时间")
@TableField(fill = FieldFill.INSERT)
private Date createTime; private Date createTime;
/** /**
* *
*/ */
@ApiModelProperty(value = "更新者") @ApiModelProperty(value = "更新者")
@TableField(fill = FieldFill.INSERT_UPDATE)
private String updateBy; private String updateBy;
/** /**
* *
*/ */
@ApiModelProperty(value = "更新时间") @ApiModelProperty(value = "更新时间")
@TableField(fill = FieldFill.INSERT_UPDATE)
private Date updateTime; private Date updateTime;
/** /**
* *
*/ */
@ApiModelProperty(value = "请求参数") @ApiModelProperty(value = "请求参数")
@TableField(exist = false)
private Map<String, Object> params = new HashMap<>(); private Map<String, Object> params = new HashMap<>();
} }

View File

@ -1,5 +1,6 @@
package com.ruoyi.common.core.web.domain; package com.ruoyi.common.core.web.domain;
import com.baomidou.mybatisplus.annotation.TableField;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
@ -23,6 +24,7 @@ public class TreeEntity extends BaseEntity {
/** /**
* *
*/ */
@TableField(exist = false)
@ApiModelProperty(value = "父菜单名称") @ApiModelProperty(value = "父菜单名称")
private String parentName; private String parentName;
@ -35,6 +37,7 @@ public class TreeEntity extends BaseEntity {
/** /**
* *
*/ */
@TableField(exist = false)
@ApiModelProperty(value = "子部门") @ApiModelProperty(value = "子部门")
private List<?> children = new ArrayList<>(); private List<?> children = new ArrayList<>();

View File

@ -1,65 +0,0 @@
package com.ruoyi.common.core.web.page;
import cn.hutool.core.util.ObjectUtil;
import com.ruoyi.common.core.utils.StringUtils;
import lombok.Data;
/**
*
*
* @author ruoyi
*/
@Data
public class PageDomain {
/**
*
*/
private Integer pageNum;
/**
*
*/
private Integer pageSize;
/**
*
*/
private String orderByColumn;
/**
* descasc
*/
private String isAsc = "asc";
/**
*
*/
private Boolean reasonable = true;
public String getOrderBy() {
if (StringUtils.isEmpty(orderByColumn)) {
return "";
}
return StringUtils.toUnderScoreCase(orderByColumn) + " " + isAsc;
}
public void setIsAsc(String isAsc) {
if (StringUtils.isNotEmpty(isAsc)) {
// 兼容前端排序类型
if ("ascending".equals(isAsc)) {
isAsc = "asc";
} else if ("descending".equals(isAsc)) {
isAsc = "desc";
}
this.isAsc = isAsc;
}
}
public Boolean getReasonable() {
if (ObjectUtil.isNull(reasonable)) {
return Boolean.TRUE;
}
return reasonable;
}
}

View File

@ -1,50 +0,0 @@
package com.ruoyi.common.core.web.page;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.util.List;
/**
*
*
* @author ruoyi
*/
@Data
@NoArgsConstructor
public class TableDataInfo implements Serializable {
private static final long serialVersionUID = 1L;
/**
*
*/
private long total;
/**
*
*/
private List<?> rows;
/**
*
*/
private int code;
/**
*
*/
private String msg;
/**
*
*
* @param list
* @param total
*/
public TableDataInfo(List<?> list, int total) {
this.rows = list;
this.total = total;
}
}

View File

@ -1,52 +0,0 @@
package com.ruoyi.common.core.web.page;
import com.ruoyi.common.core.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 final String REASONABLE = "reasonable";
/**
*
*/
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));
pageDomain.setReasonable(ServletUtils.getParameterToBool(REASONABLE));
return pageDomain;
}
public static PageDomain buildPageRequest() {
return getPageDomain();
}
}

View File

@ -1,24 +0,0 @@
package com.ruoyi.common.datascope.annotation;
import java.lang.annotation.*;
/**
*
*
* @author ruoyi
*/
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface DataScope {
/**
*
*/
String deptAlias() default "";
/**
*
*/
String userAlias() default "";
}

View File

@ -1,128 +0,0 @@
package com.ruoyi.common.datascope.aspect;
import cn.hutool.core.util.ObjectUtil;
import com.ruoyi.common.core.utils.StringUtils;
import com.ruoyi.common.core.web.domain.BaseEntity;
import com.ruoyi.common.datascope.annotation.DataScope;
import com.ruoyi.common.security.utils.SecurityUtils;
import com.ruoyi.system.api.domain.SysRole;
import com.ruoyi.system.api.domain.SysUser;
import com.ruoyi.system.api.model.LoginUser;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.stereotype.Component;
/**
*
*
* @author ruoyi
*/
@Aspect
@Component
public class DataScopeAspect {
/**
*
*/
public static final String DATA_SCOPE_ALL = "1";
/**
*
*/
public static final String DATA_SCOPE_CUSTOM = "2";
/**
*
*/
public static final String DATA_SCOPE_DEPT = "3";
/**
*
*/
public static final String DATA_SCOPE_DEPT_AND_CHILD = "4";
/**
*
*/
public static final String DATA_SCOPE_SELF = "5";
/**
*
*/
public static final String DATA_SCOPE = "dataScope";
@Before("@annotation(controllerDataScope)")
public void doBefore(JoinPoint point, DataScope controllerDataScope) throws Throwable {
clearDataScope(point);
handleDataScope(point, controllerDataScope);
}
protected void handleDataScope(final JoinPoint joinPoint, DataScope controllerDataScope) {
// 获取当前的用户
LoginUser loginUser = SecurityUtils.getLoginUser();
if (ObjectUtil.isNotNull(loginUser)) {
SysUser currentUser = loginUser.getSysUser();
// 如果是超级管理员,则不过滤数据
if (ObjectUtil.isNotNull(currentUser) && !currentUser.isAdmin()) {
dataScopeFilter(joinPoint, currentUser, controllerDataScope.deptAlias(),
controllerDataScope.userAlias());
}
}
}
/**
*
*
* @param joinPoint
* @param user
* @param deptAlias
* @param userAlias
*/
public static void dataScopeFilter(JoinPoint joinPoint, SysUser user, String deptAlias, String userAlias) {
StringBuilder sqlString = new StringBuilder();
for (SysRole role : user.getRoles()) {
String dataScope = role.getDataScope();
if (DATA_SCOPE_ALL.equals(dataScope)) {
sqlString = new StringBuilder();
break;
} else if (DATA_SCOPE_CUSTOM.equals(dataScope)) {
sqlString.append(StringUtils.format(
" OR {}.dept_id IN ( SELECT dept_id FROM sys_role_dept WHERE role_id = {} ) ", deptAlias,
role.getRoleId()));
} else if (DATA_SCOPE_DEPT.equals(dataScope)) {
sqlString.append(StringUtils.format(" OR {}.dept_id = {} ", deptAlias, user.getDeptId()));
} else if (DATA_SCOPE_DEPT_AND_CHILD.equals(dataScope)) {
sqlString.append(StringUtils.format(
" OR {}.dept_id IN ( SELECT dept_id FROM sys_dept WHERE dept_id = {} or find_in_set( {} , ancestors ) )",
deptAlias, user.getDeptId(), user.getDeptId()));
} else if (DATA_SCOPE_SELF.equals(dataScope)) {
if (StringUtils.isNotBlank(userAlias)) {
sqlString.append(StringUtils.format(" OR {}.user_id = {} ", userAlias, user.getUserId()));
} else {
// 数据权限为仅本人且没有userAlias别名不查询任何数据
sqlString.append(" OR 1=0 ");
}
}
}
if (StringUtils.isNotBlank(sqlString.toString())) {
Object params = joinPoint.getArgs()[0];
if (ObjectUtil.isNotNull(params) && params instanceof BaseEntity) {
BaseEntity baseEntity = (BaseEntity) params;
baseEntity.getParams().put(DATA_SCOPE, " AND (" + sqlString.substring(4) + ")");
}
}
}
/**
* sqlparams.dataScope
*/
private void clearDataScope(final JoinPoint joinPoint) {
Object params = joinPoint.getArgs()[0];
if (ObjectUtil.isNotNull(params) && params instanceof BaseEntity) {
BaseEntity baseEntity = (BaseEntity) params;
baseEntity.getParams().put(DATA_SCOPE, "");
}
}
}

View File

@ -1,28 +1,27 @@
package com.ruoyi.common.log.service; package com.ruoyi.common.log.service;
import com.ruoyi.common.core.constant.SecurityConstants; import com.ruoyi.system.api.RemoteLogService;
import com.ruoyi.system.api.RemoteLogService; import com.ruoyi.system.api.domain.SysOperLog;
import com.ruoyi.system.api.domain.SysOperLog; import org.apache.dubbo.config.annotation.DubboReference;
import org.apache.dubbo.config.annotation.DubboReference; import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service;
import org.springframework.stereotype.Service;
/**
/** *
* *
* * @author ruoyi
* @author ruoyi */
*/ @Service
@Service public class AsyncLogService {
public class AsyncLogService {
@DubboReference
@DubboReference private RemoteLogService remoteLogService;
private RemoteLogService remoteLogService;
/**
/** *
* */
*/ @Async
@Async public void saveSysLog(SysOperLog sysOperLog) {
public void saveSysLog(SysOperLog sysOperLog) { remoteLogService.saveLog(sysOperLog);
remoteLogService.saveLog(sysOperLog, SecurityConstants.INNER); }
} }
}

View File

@ -9,19 +9,28 @@
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<artifactId>ruoyi-common-datascope</artifactId> <artifactId>ruoyi-common-mybatis</artifactId>
<description> <description>
ruoyi-common-datascope权限范围 ruoyi-common-mybatis 数据库服务
</description> </description>
<dependencies> <dependencies>
<!-- RuoYi Common Security -->
<dependency> <dependency>
<groupId>com.ruoyi</groupId> <groupId>com.ruoyi</groupId>
<artifactId>ruoyi-common-security</artifactId> <artifactId>ruoyi-common-security</artifactId>
<scope>provided</scope>
</dependency> </dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
</dependency>
<!-- sql性能分析插件 -->
<dependency>
<groupId>p6spy</groupId>
<artifactId>p6spy</artifactId>
</dependency>
</dependencies> </dependencies>
</project> </project>

View File

@ -0,0 +1,26 @@
package com.ruoyi.common.mybatis.annotation;
import java.lang.annotation.*;
/**
*
*
* @author Lion Li
* @version 3.5.0
*/
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface DataColumn {
/**
*
*/
String key() default "deptName";
/**
*
*/
String value() default "dept_id";
}

View File

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

View File

@ -0,0 +1,102 @@
package com.ruoyi.common.mybatis.config;
import cn.hutool.core.net.NetUtil;
import com.baomidou.mybatisplus.core.incrementer.DefaultIdentifierGenerator;
import com.baomidou.mybatisplus.core.incrementer.IdentifierGenerator;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import com.ruoyi.common.mybatis.interceptor.PlusDataPermissionInterceptor;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.transaction.annotation.EnableTransactionManagement;
/**
* mybatis-plus()
*
* @author Lion Li
*/
@EnableTransactionManagement(proxyTargetClass = true)
@Configuration
@MapperScan("${mybatis-plus.mapperPackage}")
public class MybatisPlusConfiguration {
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
// 数据权限处理
interceptor.addInnerInterceptor(dataPermissionInterceptor());
// 分页插件
interceptor.addInnerInterceptor(paginationInnerInterceptor());
// 乐观锁插件
interceptor.addInnerInterceptor(optimisticLockerInnerInterceptor());
return interceptor;
}
/**
*
*/
public PlusDataPermissionInterceptor dataPermissionInterceptor() {
return new PlusDataPermissionInterceptor();
}
/**
*
*/
public PaginationInnerInterceptor paginationInnerInterceptor() {
PaginationInnerInterceptor paginationInnerInterceptor = new PaginationInnerInterceptor();
// 设置最大单页限制数量,默认 500 条,-1 不受限制
paginationInnerInterceptor.setMaxLimit(-1L);
// 分页合理化
paginationInnerInterceptor.setOverflow(true);
return paginationInnerInterceptor;
}
/**
*
*/
public OptimisticLockerInnerInterceptor optimisticLockerInnerInterceptor() {
return new OptimisticLockerInnerInterceptor();
}
/**
*
*/
// @Bean
// public MetaObjectHandler metaObjectHandler() {
// return new CreateAndUpdateMetaObjectHandler();
// }
/**
* 使
* ID
*/
@Primary
@Bean
public IdentifierGenerator idGenerator() {
return new DefaultIdentifierGenerator(NetUtil.getLocalhost());
}
/**
* PaginationInnerInterceptor
* https://baomidou.com/pages/97710a/
* OptimisticLockerInnerInterceptor
* https://baomidou.com/pages/0d93c0/
* MetaObjectHandler
* https://baomidou.com/pages/4c6bcf/
* ISqlInjector sql
* https://baomidou.com/pages/42ea4a/
* BlockAttackInnerInterceptor
* https://baomidou.com/pages/f9a237/
* IllegalSQLInnerInterceptor sql(SQL)
* IdentifierGenerator
* https://baomidou.com/pages/568eb2/
* TenantLineInnerInterceptor
* https://baomidou.com/pages/aef2f2/
* DynamicTableNameInnerInterceptor
* https://baomidou.com/pages/2a45ff/
*/
}

View File

@ -0,0 +1,229 @@
package com.ruoyi.common.mybatis.core.mapper;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.enums.SqlMethod;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.metadata.TableInfo;
import com.baomidou.mybatisplus.core.metadata.TableInfoHelper;
import com.baomidou.mybatisplus.core.toolkit.*;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.toolkit.SqlHelper;
import com.ruoyi.common.core.utils.BeanCopyUtils;
import org.apache.ibatis.binding.MapperMethod;
import org.apache.ibatis.logging.Log;
import org.apache.ibatis.logging.LogFactory;
import java.io.Serializable;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Objects;
/**
* Mapper ,
*
* @param <M> mapper
* @param <T> table
* @param <V> vo
* @author Lion Li
* @since 2021-05-13
*/
@SuppressWarnings("unchecked")
public interface BaseMapperPlus<M, T, V> extends BaseMapper<T> {
Log log = LogFactory.getLog(BaseMapperPlus.class);
int DEFAULT_BATCH_SIZE = 1000;
default Class<V> currentVoClass() {
return (Class<V>) ReflectionKit.getSuperClassGenericType(this.getClass(), BaseMapperPlus.class, 2);
}
default Class<T> currentModelClass() {
return (Class<T>) ReflectionKit.getSuperClassGenericType(this.getClass(), BaseMapperPlus.class, 1);
}
default Class<M> currentMapperClass() {
return (Class<M>) ReflectionKit.getSuperClassGenericType(this.getClass(), BaseMapperPlus.class, 0);
}
default List<T> selectList() {
return this.selectList(new QueryWrapper<>());
}
/**
*
*/
default boolean insertBatch(Collection<T> entityList) {
return insertBatch(entityList, DEFAULT_BATCH_SIZE);
}
/**
*
*/
default boolean updateBatchById(Collection<T> entityList) {
return updateBatchById(entityList, DEFAULT_BATCH_SIZE);
}
/**
*
*/
default boolean insertOrUpdateBatch(Collection<T> entityList) {
return insertOrUpdateBatch(entityList, DEFAULT_BATCH_SIZE);
}
/**
* ()
*/
default boolean insertBatch(Collection<T> entityList, int batchSize) {
String sqlStatement = SqlHelper.getSqlStatement(this.currentMapperClass(), SqlMethod.INSERT_ONE);
return SqlHelper.executeBatch(this.currentModelClass(), log, entityList, batchSize,
(sqlSession, entity) -> sqlSession.insert(sqlStatement, entity));
}
/**
* ()
*/
default boolean updateBatchById(Collection<T> entityList, int batchSize) {
String sqlStatement = SqlHelper.getSqlStatement(this.currentMapperClass(), SqlMethod.UPDATE_BY_ID);
return SqlHelper.executeBatch(this.currentModelClass(), log, entityList, batchSize,
(sqlSession, entity) -> {
MapperMethod.ParamMap<T> param = new MapperMethod.ParamMap<>();
param.put(Constants.ENTITY, entity);
sqlSession.update(sqlStatement, param);
});
}
/**
* ()
*/
default boolean insertOrUpdateBatch(Collection<T> entityList, int batchSize) {
TableInfo tableInfo = TableInfoHelper.getTableInfo(this.currentModelClass());
Assert.notNull(tableInfo, "error: can not execute. because can not find cache of TableInfo for entity!");
String keyProperty = tableInfo.getKeyProperty();
Assert.notEmpty(keyProperty, "error: can not execute. because can not find column for id from entity!");
return SqlHelper.saveOrUpdateBatch(this.currentModelClass(), getClass(), log, entityList, batchSize, (sqlSession, entity) -> {
Object idVal = tableInfo.getPropertyValue(entity, keyProperty);
String sqlStatement = SqlHelper.getSqlStatement(this.currentMapperClass(), SqlMethod.INSERT_ONE);
return StringUtils.checkValNull(idVal)
|| CollectionUtils.isEmpty(sqlSession.selectList(sqlStatement, entity));
}, (sqlSession, entity) -> {
MapperMethod.ParamMap<T> param = new MapperMethod.ParamMap<>();
param.put(Constants.ENTITY, entity);
String sqlStatement = SqlHelper.getSqlStatement(this.currentMapperClass(), SqlMethod.UPDATE_BY_ID);
sqlSession.update(sqlStatement, param);
});
}
/**
* ()
*/
default boolean insertOrUpdate(T entity) {
if (null != entity) {
TableInfo tableInfo = TableInfoHelper.getTableInfo(this.currentModelClass());
Assert.notNull(tableInfo, "error: can not execute. because can not find cache of TableInfo for entity!");
String keyProperty = tableInfo.getKeyProperty();
Assert.notEmpty(keyProperty, "error: can not execute. because can not find column for id from entity!");
Object idVal = tableInfo.getPropertyValue(entity, tableInfo.getKeyProperty());
return StringUtils.checkValNull(idVal) || Objects.isNull(selectById((Serializable) idVal)) ? insert(entity) > 0 : updateById(entity) > 0;
}
return false;
}
default V selectVoById(Serializable id) {
return selectVoById(id, this.currentVoClass());
}
/**
* ID
*/
default <C> C selectVoById(Serializable id, Class<C> voClass) {
T obj = this.selectById(id);
if (ObjectUtil.isNull(obj)) {
return null;
}
return BeanCopyUtils.copy(obj, voClass);
}
default List<V> selectVoById(Collection<? extends Serializable> idList) {
return selectVoBatchIds(idList, this.currentVoClass());
}
/**
* ID
*/
default <C> List<C> selectVoBatchIds(Collection<? extends Serializable> idList, Class<C> voClass) {
List<T> list = this.selectBatchIds(idList);
if (CollUtil.isEmpty(list)) {
return CollUtil.newArrayList();
}
return BeanCopyUtils.copyList(list, voClass);
}
default List<V> selectVoByMap(Map<String, Object> map) {
return selectVoByMap(map, this.currentVoClass());
}
/**
* columnMap
*/
default <C> List<C> selectVoByMap(Map<String, Object> map, Class<C> voClass) {
List<T> list = this.selectByMap(map);
if (CollUtil.isEmpty(list)) {
return CollUtil.newArrayList();
}
return BeanCopyUtils.copyList(list, voClass);
}
default V selectVoOne(Wrapper<T> wrapper) {
return selectVoOne(wrapper, this.currentVoClass());
}
/**
* entity
*/
default <C> C selectVoOne(Wrapper<T> wrapper, Class<C> voClass) {
T obj = this.selectOne(wrapper);
if (ObjectUtil.isNull(obj)) {
return null;
}
return BeanCopyUtils.copy(obj, voClass);
}
default List<V> selectVoList(Wrapper<T> wrapper) {
return selectVoList(wrapper, this.currentVoClass());
}
/**
* entity
*/
default <C> List<C> selectVoList(Wrapper<T> wrapper, Class<C> voClass) {
List<T> list = this.selectList(wrapper);
if (CollUtil.isEmpty(list)) {
return CollUtil.newArrayList();
}
return BeanCopyUtils.copyList(list, voClass);
}
default <P extends IPage<V>> P selectVoPage(IPage<T> page, Wrapper<T> wrapper) {
return selectVoPage(page, wrapper, this.currentVoClass());
}
/**
* VO
*/
default <C, P extends IPage<C>> P selectVoPage(IPage<T> page, Wrapper<T> wrapper, Class<C> voClass) {
IPage<T> pageData = this.selectPage(page, wrapper);
IPage<C> voPage = new Page<>(pageData.getCurrent(), pageData.getSize(), pageData.getTotal());
if (CollUtil.isEmpty(pageData.getRecords())) {
return (P) voPage;
}
voPage.setRecords(BeanCopyUtils.copyList(pageData.getRecords(), voClass));
return (P) voPage;
}
}

View File

@ -0,0 +1,91 @@
package com.ruoyi.common.mybatis.core.page;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.metadata.OrderItem;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.common.core.utils.StringUtils;
import com.ruoyi.common.core.utils.sql.SqlUtil;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
/**
*
*
* @author Lion Li
*/
@Data
public class PageQuery implements Serializable {
private static final long serialVersionUID = 1L;
/**
*
*/
@ApiModelProperty("分页大小")
private Integer pageSize;
/**
*
*/
@ApiModelProperty("当前页数")
private Integer pageNum;
/**
*
*/
@ApiModelProperty("排序列")
private String orderByColumn;
/**
* descasc
*/
@ApiModelProperty(value = "排序的方向", example = "asc,desc")
private String isAsc;
/**
*
*/
public static final int DEFAULT_PAGE_NUM = 1;
/**
*
*/
public static final int DEFAULT_PAGE_SIZE = Integer.MAX_VALUE;
public <T> Page<T> build() {
Integer pageNum = ObjectUtil.defaultIfNull(getPageNum(), DEFAULT_PAGE_NUM);
Integer pageSize = ObjectUtil.defaultIfNull(getPageSize(), DEFAULT_PAGE_SIZE);
if (pageNum <= 0) {
pageNum = DEFAULT_PAGE_NUM;
}
Page<T> page = new Page<>(pageNum, pageSize);
OrderItem orderItem = buildOrderItem();
if (ObjectUtil.isNotNull(orderItem)) {
page.addOrder(orderItem);
}
return page;
}
private OrderItem buildOrderItem() {
// 兼容前端排序类型
if ("ascending".equals(isAsc)) {
isAsc = "asc";
} else if ("descending".equals(isAsc)) {
isAsc = "desc";
}
if (StringUtils.isNotBlank(orderByColumn)) {
String orderBy = SqlUtil.escapeOrderBySql(orderByColumn);
orderBy = StringUtils.toUnderScoreCase(orderBy);
if ("asc".equals(isAsc)) {
return OrderItem.asc(orderBy);
} else if ("desc".equals(isAsc)) {
return OrderItem.desc(orderBy);
}
}
return null;
}
}

View File

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

View File

@ -0,0 +1,72 @@
package com.ruoyi.common.mybatis.enums;
import com.ruoyi.common.core.utils.StringUtils;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
*
* <p>
* spel
* <p>
* user SysUser
* 使 {@link com.ruoyi.common.mybatis.helper.DataPermissionHelper}
* sdss SysDataScopeService
* sdss
*
* @author Lion Li
* @version 3.5.0
*/
@Getter
@AllArgsConstructor
public enum DataScopeType {
/**
*
*/
ALL("1", "", ""),
/**
*
*/
CUSTOM("2", " #{#deptName} IN ( #{@sdss.getRoleCustom( #user.roleId )} ) ", ""),
/**
*
*/
DEPT("3", " #{#deptName} = #{#user.deptId} ", ""),
/**
*
*/
DEPT_AND_CHILD("4", " #{#deptName} IN ( #{@sdss.getDeptAndChild( #user.deptId )} )", ""),
/**
*
*/
SELF("5", " #{#userName} = #{#user.userId} ", " 1 = 0 ");
private final String code;
/**
* spel
*/
private final String sqlTemplate;
/**
* sqlTemplate
*/
private final String elseSql;
public static DataScopeType findCode(String code) {
if (StringUtils.isBlank(code)) {
return null;
}
for (DataScopeType type : values()) {
if (type.getCode().equals(code)) {
return type;
}
}
return null;
}
}

View File

@ -0,0 +1,89 @@
package com.ruoyi.common.mybatis.handler;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.http.HttpStatus;
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import com.ruoyi.common.core.exception.ServiceException;
import com.ruoyi.common.core.utils.StringUtils;
import com.ruoyi.common.core.web.domain.BaseEntity;
import com.ruoyi.common.security.utils.SecurityUtils;
import com.ruoyi.system.api.model.LoginUser;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.reflection.MetaObject;
import java.util.Date;
/**
* MP
*
* @author Lion Li
* @date 2021/4/25
*/
@Slf4j
public class CreateAndUpdateMetaObjectHandler implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
try {
if (ObjectUtil.isNotNull(metaObject) && metaObject.getOriginalObject() instanceof BaseEntity) {
BaseEntity baseEntity = (BaseEntity) metaObject.getOriginalObject();
Date current = new Date();
// 创建时间为空 则填充
if (ObjectUtil.isNull(baseEntity.getCreateTime())) {
baseEntity.setCreateTime(current);
}
// 更新时间为空 则填充
if (ObjectUtil.isNull(baseEntity.getUpdateTime())) {
baseEntity.setUpdateTime(current);
}
String username = getLoginUsername();
// 当前已登录 且 创建人为空 则填充
if (StringUtils.isNotBlank(username)
&& StringUtils.isBlank(baseEntity.getCreateBy())) {
baseEntity.setCreateBy(username);
}
// 当前已登录 且 更新人为空 则填充
if (StringUtils.isNotBlank(username)
&& StringUtils.isBlank(baseEntity.getUpdateBy())) {
baseEntity.setUpdateBy(username);
}
}
} catch (Exception e) {
throw new ServiceException("自动注入异常 => " + e.getMessage(), HttpStatus.HTTP_UNAUTHORIZED);
}
}
@Override
public void updateFill(MetaObject metaObject) {
try {
if (ObjectUtil.isNotNull(metaObject) && metaObject.getOriginalObject() instanceof BaseEntity) {
BaseEntity baseEntity = (BaseEntity) metaObject.getOriginalObject();
Date current = new Date();
// 更新时间填充(不管为不为空)
baseEntity.setUpdateTime(current);
String username = getLoginUsername();
// 当前已登录 更新人填充(不管为不为空)
if (StringUtils.isNotBlank(username)) {
baseEntity.setUpdateBy(username);
}
}
} catch (Exception e) {
throw new ServiceException("自动注入异常 => " + e.getMessage(), HttpStatus.HTTP_UNAUTHORIZED);
}
}
/**
*
*/
private String getLoginUsername() {
LoginUser loginUser;
try {
loginUser = SecurityUtils.getLoginUser();
} catch (Exception e) {
log.warn("自动注入警告 => 用户未登录");
return null;
}
return loginUser.getUsername();
}
}

View File

@ -0,0 +1,191 @@
package com.ruoyi.common.mybatis.handler;
import cn.hutool.core.annotation.AnnotationUtil;
import cn.hutool.core.collection.ConcurrentHashSet;
import cn.hutool.core.util.ArrayUtil;
import cn.hutool.core.util.ClassUtil;
import cn.hutool.core.util.ObjectUtil;
import com.ruoyi.common.core.exception.ServiceException;
import com.ruoyi.common.core.utils.SpringUtils;
import com.ruoyi.common.core.utils.StringUtils;
import com.ruoyi.common.mybatis.annotation.DataColumn;
import com.ruoyi.common.mybatis.annotation.DataPermission;
import com.ruoyi.common.mybatis.enums.DataScopeType;
import com.ruoyi.common.mybatis.helper.DataPermissionHelper;
import com.ruoyi.common.security.utils.SecurityUtils;
import com.ruoyi.system.api.domain.SysRole;
import com.ruoyi.system.api.domain.SysUser;
import lombok.extern.slf4j.Slf4j;
import net.sf.jsqlparser.JSQLParserException;
import net.sf.jsqlparser.expression.Expression;
import net.sf.jsqlparser.expression.Parenthesis;
import net.sf.jsqlparser.expression.operators.conditional.AndExpression;
import net.sf.jsqlparser.parser.CCJSqlParserUtil;
import org.springframework.context.expression.BeanFactoryResolver;
import org.springframework.expression.BeanResolver;
import org.springframework.expression.ExpressionParser;
import org.springframework.expression.ParserContext;
import org.springframework.expression.common.TemplateParserContext;
import org.springframework.expression.spel.standard.SpelExpressionParser;
import org.springframework.expression.spel.support.StandardEvaluationContext;
import java.lang.reflect.Method;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.stream.Collectors;
/**
*
*
* @author Lion Li
* @version 3.5.0
*/
@Slf4j
public class PlusDataPermissionHandler {
/**
* ()
*/
private final Map<String, DataPermission> dataPermissionCacheMap = new ConcurrentHashMap<>();
/**
*
*/
private final Set<String> inavlidCacheSet = new ConcurrentHashSet<>();
/**
* spel
*/
private final ExpressionParser parser = new SpelExpressionParser();
private final ParserContext parserContext = new TemplateParserContext();
/**
* bean spel bean
*/
private final BeanResolver beanResolver = new BeanFactoryResolver(SpringUtils.getBeanFactory());
public Expression getSqlSegment(Expression where, String mappedStatementId, boolean isSelect) {
DataColumn[] dataColumns = findAnnotation(mappedStatementId);
if (ArrayUtil.isEmpty(dataColumns)) {
inavlidCacheSet.add(mappedStatementId);
return where;
}
SysUser currentUser = DataPermissionHelper.getVariable("user");
if (ObjectUtil.isNull(currentUser)) {
currentUser = SecurityUtils.getLoginUser().getSysUser();
DataPermissionHelper.setVariable("user", currentUser);
}
// 如果是超级管理员,则不过滤数据
if (ObjectUtil.isNull(currentUser) || currentUser.isAdmin()) {
return where;
}
String dataFilterSql = buildDataFilter(dataColumns, isSelect);
if (StringUtils.isBlank(dataFilterSql)) {
return where;
}
try {
Expression expression = CCJSqlParserUtil.parseExpression(dataFilterSql);
// 数据权限使用单独的括号 防止与其他条件冲突
Parenthesis parenthesis = new Parenthesis(expression);
if (ObjectUtil.isNotNull(where)) {
return new AndExpression(where, parenthesis);
} else {
return parenthesis;
}
} catch (JSQLParserException e) {
throw new ServiceException("数据权限解析异常 => " + e.getMessage());
}
}
/**
* sql
*/
private String buildDataFilter(DataColumn[] dataColumns, boolean isSelect) {
StringBuilder sqlString = new StringBuilder();
// 更新或删除需满足所有条件
String joinStr = isSelect ? " OR " : " AND ";
SysUser user = DataPermissionHelper.getVariable("user");
StandardEvaluationContext context = new StandardEvaluationContext();
context.setBeanResolver(beanResolver);
DataPermissionHelper.getContext().forEach(context::setVariable);
for (SysRole role : user.getRoles()) {
user.setRoleId(role.getRoleId());
// 获取角色权限泛型
DataScopeType type = DataScopeType.findCode(role.getDataScope());
if (ObjectUtil.isNull(type)) {
throw new ServiceException("角色数据范围异常 => " + role.getDataScope());
}
// 全部数据权限直接返回
if (type == DataScopeType.ALL) {
return "";
}
boolean isSuccess = false;
for (DataColumn dataColumn : dataColumns) {
// 不包含 key 变量 则不处理
if (!StringUtils.contains(type.getSqlTemplate(), "#" + dataColumn.key())) {
continue;
}
// 设置注解变量 key 为表达式变量 value 为变量值
context.setVariable(dataColumn.key(), dataColumn.value());
// 解析sql模板并填充
String sql = parser.parseExpression(type.getSqlTemplate(), parserContext).getValue(context, String.class);
sqlString.append(joinStr).append(sql);
isSuccess = true;
}
// 未处理成功则填充兜底方案
if (!isSuccess) {
sqlString.append(joinStr).append(type.getElseSql());
}
}
if (StringUtils.isNotBlank(sqlString.toString())) {
return sqlString.substring(joinStr.length());
}
return "";
}
private DataColumn[] findAnnotation(String mappedStatementId) {
StringBuilder sb = new StringBuilder(mappedStatementId);
int index = sb.lastIndexOf(".");
String clazzName = sb.substring(0, index);
String methodName = sb.substring(index + 1, sb.length());
Class<?> clazz = ClassUtil.loadClass(clazzName);
List<Method> methods = Arrays.stream(ClassUtil.getDeclaredMethods(clazz))
.filter(method -> method.getName().equals(methodName)).collect(Collectors.toList());
DataPermission dataPermission;
// 获取方法注解
for (Method method : methods) {
dataPermission = dataPermissionCacheMap.get(mappedStatementId);
if (ObjectUtil.isNotNull(dataPermission)) {
return dataPermission.value();
}
if (AnnotationUtil.hasAnnotation(method, DataPermission.class)) {
dataPermission = AnnotationUtil.getAnnotation(method, DataPermission.class);
dataPermissionCacheMap.put(mappedStatementId, dataPermission);
return dataPermission.value();
}
}
dataPermission = dataPermissionCacheMap.get(clazz.getName());
if (ObjectUtil.isNotNull(dataPermission)) {
return dataPermission.value();
}
// 获取类注解
if (AnnotationUtil.hasAnnotation(clazz, DataPermission.class)) {
dataPermission = AnnotationUtil.getAnnotation(clazz, DataPermission.class);
dataPermissionCacheMap.put(clazz.getName(), dataPermission);
return dataPermission.value();
}
return null;
}
/**
*
*/
public boolean isInvalid(String mappedStatementId) {
return inavlidCacheSet.contains(mappedStatementId);
}
}

View File

@ -0,0 +1,47 @@
package com.ruoyi.common.mybatis.helper;
import cn.hutool.core.util.ObjectUtil;
import com.ruoyi.common.core.utils.ServletUtils;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
import javax.servlet.http.HttpServletRequest;
import java.util.HashMap;
import java.util.Map;
/**
*
*
* @author Lion Li
* @version 3.5.0
*/
@NoArgsConstructor(access = AccessLevel.PRIVATE)
@SuppressWarnings("unchecked cast")
public class DataPermissionHelper {
private static final String DATA_PERMISSION_KEY = "data:permission";
public static <T> T getVariable(String key) {
Map<String, Object> context = getContext();
return (T) context.get(key);
}
public static void setVariable(String key, Object value) {
Map<String, Object> context = getContext();
context.put(key, value);
}
public static Map<String, Object> getContext() {
HttpServletRequest request = ServletUtils.getRequest();
Object attribute = request.getAttribute(DATA_PERMISSION_KEY);
if (ObjectUtil.isNull(attribute)) {
request.setAttribute(DATA_PERMISSION_KEY, new HashMap<>());
attribute = request.getAttribute(DATA_PERMISSION_KEY);
}
if (attribute instanceof Map) {
return (Map<String, Object>) attribute;
}
throw new NullPointerException("data permission context type exception");
}
}

View File

@ -0,0 +1,108 @@
package com.ruoyi.common.mybatis.interceptor;
import com.baomidou.mybatisplus.core.plugins.InterceptorIgnoreHelper;
import com.baomidou.mybatisplus.core.toolkit.PluginUtils;
import com.baomidou.mybatisplus.extension.parser.JsqlParserSupport;
import com.baomidou.mybatisplus.extension.plugins.inner.InnerInterceptor;
import com.ruoyi.common.mybatis.handler.PlusDataPermissionHandler;
import net.sf.jsqlparser.expression.Expression;
import net.sf.jsqlparser.statement.delete.Delete;
import net.sf.jsqlparser.statement.select.PlainSelect;
import net.sf.jsqlparser.statement.select.Select;
import net.sf.jsqlparser.statement.select.SelectBody;
import net.sf.jsqlparser.statement.select.SetOperationList;
import net.sf.jsqlparser.statement.update.Update;
import org.apache.ibatis.executor.Executor;
import org.apache.ibatis.executor.statement.StatementHandler;
import org.apache.ibatis.mapping.BoundSql;
import org.apache.ibatis.mapping.MappedStatement;
import org.apache.ibatis.mapping.SqlCommandType;
import org.apache.ibatis.session.ResultHandler;
import org.apache.ibatis.session.RowBounds;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;
/**
*
*
* @author Lion Li
* @version 3.5.0
*/
public class PlusDataPermissionInterceptor extends JsqlParserSupport implements InnerInterceptor {
private final PlusDataPermissionHandler dataPermissionHandler = new PlusDataPermissionHandler();
@Override
public void beforeQuery(Executor executor, MappedStatement ms, Object parameter, RowBounds rowBounds, ResultHandler resultHandler, BoundSql boundSql) throws SQLException {
// 检查忽略注解
if (InterceptorIgnoreHelper.willIgnoreDataPermission(ms.getId())) {
return;
}
// 检查是否无效 无数据权限注解
if (dataPermissionHandler.isInvalid(ms.getId())) {
return;
}
// 解析 sql 分配对应方法
PluginUtils.MPBoundSql mpBs = PluginUtils.mpBoundSql(boundSql);
mpBs.sql(parserSingle(mpBs.sql(), ms.getId()));
}
@Override
public void beforePrepare(StatementHandler sh, Connection connection, Integer transactionTimeout) {
PluginUtils.MPStatementHandler mpSh = PluginUtils.mpStatementHandler(sh);
MappedStatement ms = mpSh.mappedStatement();
SqlCommandType sct = ms.getSqlCommandType();
if (sct == SqlCommandType.UPDATE || sct == SqlCommandType.DELETE) {
if (InterceptorIgnoreHelper.willIgnoreDataPermission(ms.getId())) {
return;
}
PluginUtils.MPBoundSql mpBs = mpSh.mPBoundSql();
mpBs.sql(parserMulti(mpBs.sql(), ms.getId()));
}
}
@Override
protected void processSelect(Select select, int index, String sql, Object obj) {
SelectBody selectBody = select.getSelectBody();
if (selectBody instanceof PlainSelect) {
this.setWhere((PlainSelect) selectBody, (String) obj);
} else if (selectBody instanceof SetOperationList) {
SetOperationList setOperationList = (SetOperationList) selectBody;
List<SelectBody> selectBodyList = setOperationList.getSelects();
selectBodyList.forEach(s -> this.setWhere((PlainSelect) s, (String) obj));
}
}
@Override
protected void processUpdate(Update update, int index, String sql, Object obj) {
Expression sqlSegment = dataPermissionHandler.getSqlSegment(update.getWhere(), (String) obj, false);
if (null != sqlSegment) {
update.setWhere(sqlSegment);
}
}
@Override
protected void processDelete(Delete delete, int index, String sql, Object obj) {
Expression sqlSegment = dataPermissionHandler.getSqlSegment(delete.getWhere(), (String) obj, false);
if (null != sqlSegment) {
delete.setWhere(sqlSegment);
}
}
/**
* where
*
* @param plainSelect
* @param mappedStatementId id
*/
protected void setWhere(PlainSelect plainSelect, String mappedStatementId) {
Expression sqlSegment = dataPermissionHandler.getSqlSegment(plainSelect.getWhere(), mappedStatementId, true);
if (null != sqlSegment) {
plainSelect.setWhere(sqlSegment);
}
}
}

View File

@ -1,4 +1,2 @@
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.ruoyi.common.datascope.aspect.DataScopeAspect com.ruoyi.common.mybatis.config.MybatisPlusConfiguration

View File

@ -1,21 +1,20 @@
package com.ruoyi.common.security.annotation; package com.ruoyi.common.security.annotation;
import org.mybatis.spring.annotation.MapperScan; import org.springframework.context.annotation.EnableAspectJAutoProxy;
import org.springframework.context.annotation.EnableAspectJAutoProxy; import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.annotation.EnableAsync;
import java.lang.annotation.*;
import java.lang.annotation.*;
@Target(ElementType.TYPE)
@Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME)
@Retention(RetentionPolicy.RUNTIME) @Documented
@Documented @Inherited
@Inherited // 表示通过aop框架暴露该代理对象,AopContext能够访问
// 表示通过aop框架暴露该代理对象,AopContext能够访问 @EnableAspectJAutoProxy(exposeProxy = true)
@EnableAspectJAutoProxy(exposeProxy = true) //// 指定要扫描的Mapper类的包的路径
// 指定要扫描的Mapper类的包的路径 //@MapperScan("com.ruoyi.**.mapper")
@MapperScan("com.ruoyi.**.mapper") // 开启线程异步执行
// 开启线程异步执行 @EnableAsync
@EnableAsync public @interface EnableCustomConfig {
public @interface EnableCustomConfig {
}
}

View File

@ -22,6 +22,11 @@
<artifactId>spring-cloud-starter-gateway</artifactId> <artifactId>spring-cloud-starter-gateway</artifactId>
</dependency> </dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
<!-- SpringCloud Alibaba Nacos --> <!-- SpringCloud Alibaba Nacos -->
<dependency> <dependency>
<groupId>com.alibaba.cloud</groupId> <groupId>com.alibaba.cloud</groupId>

View File

@ -76,6 +76,11 @@
<artifactId>ruoyi-common-web</artifactId> <artifactId>ruoyi-common-web</artifactId>
</dependency> </dependency>
<dependency>
<groupId>com.ruoyi</groupId>
<artifactId>ruoyi-common-mybatis</artifactId>
</dependency>
<!-- RuoYi Common DataSource --> <!-- RuoYi Common DataSource -->
<dependency> <dependency>
<groupId>com.ruoyi</groupId> <groupId>com.ruoyi</groupId>

View File

@ -1,193 +1,191 @@
package com.ruoyi.gen.controller; package com.ruoyi.gen.controller;
import cn.hutool.core.convert.Convert; import cn.hutool.core.convert.Convert;
import com.ruoyi.common.core.web.controller.BaseController; import cn.hutool.core.io.IoUtil;
import com.ruoyi.common.core.web.domain.AjaxResult; import com.ruoyi.common.core.web.controller.BaseController;
import com.ruoyi.common.core.web.page.TableDataInfo; import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.log.annotation.Log; import com.ruoyi.common.log.annotation.Log;
import com.ruoyi.common.log.enums.BusinessType; import com.ruoyi.common.log.enums.BusinessType;
import com.ruoyi.common.security.annotation.RequiresPermissions; import com.ruoyi.common.mybatis.core.page.PageQuery;
import com.ruoyi.gen.domain.GenTable; import com.ruoyi.common.mybatis.core.page.TableDataInfo;
import com.ruoyi.gen.domain.GenTableColumn; import com.ruoyi.common.security.annotation.RequiresPermissions;
import com.ruoyi.gen.service.IGenTableColumnService; import com.ruoyi.gen.domain.GenTable;
import com.ruoyi.gen.service.IGenTableService; import com.ruoyi.gen.domain.GenTableColumn;
import io.swagger.annotations.Api; import com.ruoyi.gen.service.IGenTableColumnService;
import lombok.RequiredArgsConstructor; import com.ruoyi.gen.service.IGenTableService;
import org.apache.commons.io.IOUtils; import io.swagger.annotations.Api;
import org.springframework.beans.factory.annotation.Autowired; import lombok.RequiredArgsConstructor;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import java.io.IOException; import java.io.IOException;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
/** /**
* *
* *
* @author ruoyi * @author ruoyi
*/ */
@RequiredArgsConstructor(onConstructor_ = @Autowired) @RequiredArgsConstructor
@RequestMapping("/gen") @RequestMapping("/gen")
@RestController @RestController
@Api(tags = "代码生成") @Api(tags = "代码生成")
public class GenController extends BaseController { public class GenController extends BaseController {
private final IGenTableService genTableService; private final IGenTableService genTableService;
private final IGenTableColumnService genTableColumnService; private final IGenTableColumnService genTableColumnService;
/** /**
* *
*/ */
@RequiresPermissions("tool:gen:list") @RequiresPermissions("tool:gen:list")
@GetMapping("/list") @GetMapping("/list")
public TableDataInfo genList(GenTable genTable) { public TableDataInfo<GenTable> genList(GenTable genTable, PageQuery pageQuery) {
startPage(); return genTableService.selectPageGenTableList(genTable, pageQuery);
List<GenTable> list = genTableService.selectGenTableList(genTable); }
return getDataTable(list);
} /**
*
/** */
* @RequiresPermissions("tool:gen:query")
*/ @GetMapping(value = "/{talbleId}")
@RequiresPermissions("tool:gen:query") public AjaxResult getInfo(@PathVariable Long talbleId) {
@GetMapping(value = "/{talbleId}") GenTable table = genTableService.selectGenTableById(talbleId);
public AjaxResult getInfo(@PathVariable Long talbleId) { List<GenTable> tables = genTableService.selectGenTableAll();
GenTable table = genTableService.selectGenTableById(talbleId); List<GenTableColumn> list = genTableColumnService.selectGenTableColumnListByTableId(talbleId);
List<GenTable> tables = genTableService.selectGenTableAll(); Map<String, Object> map = new HashMap<String, Object>();
List<GenTableColumn> list = genTableColumnService.selectGenTableColumnListByTableId(talbleId); map.put("info", table);
Map<String, Object> map = new HashMap<String, Object>(); map.put("rows", list);
map.put("info", table); map.put("tables", tables);
map.put("rows", list); return AjaxResult.success(map);
map.put("tables", tables); }
return AjaxResult.success(map);
} /**
*
/** */
* @RequiresPermissions("tool:gen:list")
*/ @GetMapping("/db/list")
@RequiresPermissions("tool:gen:list") public TableDataInfo<GenTable> dataList(GenTable genTable, PageQuery pageQuery) {
@GetMapping("/db/list") return genTableService.selectPageDbTableList(genTable, pageQuery);
public TableDataInfo dataList(GenTable genTable) { }
startPage();
List<GenTable> list = genTableService.selectDbTableList(genTable); /**
return getDataTable(list); *
} */
@GetMapping(value = "/column/{talbleId}")
/** public TableDataInfo<GenTableColumn> columnList(Long tableId) {
* TableDataInfo<GenTableColumn> dataInfo = new TableDataInfo<>();
*/ List<GenTableColumn> list = genTableColumnService.selectGenTableColumnListByTableId(tableId);
@GetMapping(value = "/column/{talbleId}") dataInfo.setRows(list);
public TableDataInfo columnList(Long tableId) { dataInfo.setTotal(list.size());
TableDataInfo dataInfo = new TableDataInfo(); return dataInfo;
List<GenTableColumn> list = genTableColumnService.selectGenTableColumnListByTableId(tableId); }
dataInfo.setRows(list);
dataInfo.setTotal(list.size()); /**
return dataInfo; *
} */
@RequiresPermissions("tool:gen:import")
/** @Log(title = "代码生成", businessType = BusinessType.IMPORT)
* @PostMapping("/importTable")
*/ public AjaxResult importTableSave(String tables) {
@RequiresPermissions("tool:gen:import") String[] tableNames = Convert.toStrArray(tables);
@Log(title = "代码生成", businessType = BusinessType.IMPORT) // 查询表信息
@PostMapping("/importTable") List<GenTable> tableList = genTableService.selectDbTableListByNames(tableNames);
public AjaxResult importTableSave(String tables) { genTableService.importGenTable(tableList);
String[] tableNames = Convert.toStrArray(tables); return AjaxResult.success();
// 查询表信息 }
List<GenTable> tableList = genTableService.selectDbTableListByNames(tableNames);
genTableService.importGenTable(tableList); /**
return AjaxResult.success(); *
} */
@RequiresPermissions("tool:gen:edit")
/** @Log(title = "代码生成", businessType = BusinessType.UPDATE)
* @PutMapping
*/ public AjaxResult editSave(@Validated @RequestBody GenTable genTable) {
@RequiresPermissions("tool:gen:edit") genTableService.validateEdit(genTable);
@Log(title = "代码生成", businessType = BusinessType.UPDATE) genTableService.updateGenTable(genTable);
@PutMapping return AjaxResult.success();
public AjaxResult editSave(@Validated @RequestBody GenTable genTable) { }
genTableService.validateEdit(genTable);
genTableService.updateGenTable(genTable); /**
return AjaxResult.success(); *
} */
@RequiresPermissions("tool:gen:remove")
/** @Log(title = "代码生成", businessType = BusinessType.DELETE)
* @DeleteMapping("/{tableIds}")
*/ public AjaxResult remove(@PathVariable Long[] tableIds) {
@RequiresPermissions("tool:gen:remove") genTableService.deleteGenTableByIds(tableIds);
@Log(title = "代码生成", businessType = BusinessType.DELETE) return AjaxResult.success();
@DeleteMapping("/{tableIds}") }
public AjaxResult remove(@PathVariable Long[] tableIds) {
genTableService.deleteGenTableByIds(tableIds); /**
return AjaxResult.success(); *
} */
@RequiresPermissions("tool:gen:preview")
/** @GetMapping("/preview/{tableId}")
* public AjaxResult preview(@PathVariable("tableId") Long tableId) throws IOException {
*/ Map<String, String> dataMap = genTableService.previewCode(tableId);
@RequiresPermissions("tool:gen:preview") return AjaxResult.success(dataMap);
@GetMapping("/preview/{tableId}") }
public AjaxResult preview(@PathVariable("tableId") Long tableId) throws IOException {
Map<String, String> dataMap = genTableService.previewCode(tableId); /**
return AjaxResult.success(dataMap); *
} */
@RequiresPermissions("tool:gen:code")
/** @Log(title = "代码生成", businessType = BusinessType.GENCODE)
* @GetMapping("/download/{tableName}")
*/ public void download(HttpServletResponse response, @PathVariable("tableName") String tableName) throws IOException {
@RequiresPermissions("tool:gen:code") byte[] data = genTableService.downloadCode(tableName);
@Log(title = "代码生成", businessType = BusinessType.GENCODE) genCode(response, data);
@GetMapping("/download/{tableName}") }
public void download(HttpServletResponse response, @PathVariable("tableName") String tableName) throws IOException {
byte[] data = genTableService.downloadCode(tableName); /**
genCode(response, data); *
} */
@RequiresPermissions("tool:gen:code")
/** @Log(title = "代码生成", businessType = BusinessType.GENCODE)
* @GetMapping("/genCode/{tableName}")
*/ public AjaxResult genCode(@PathVariable("tableName") String tableName) {
@RequiresPermissions("tool:gen:code") genTableService.generatorCode(tableName);
@Log(title = "代码生成", businessType = BusinessType.GENCODE) return AjaxResult.success();
@GetMapping("/genCode/{tableName}") }
public AjaxResult genCode(@PathVariable("tableName") String tableName) {
genTableService.generatorCode(tableName); /**
return AjaxResult.success(); *
} */
@RequiresPermissions("tool:gen:edit")
/** @Log(title = "代码生成", businessType = BusinessType.UPDATE)
* @GetMapping("/synchDb/{tableName}")
*/ public AjaxResult synchDb(@PathVariable("tableName") String tableName) {
@RequiresPermissions("tool:gen:edit") genTableService.synchDb(tableName);
@Log(title = "代码生成", businessType = BusinessType.UPDATE) return AjaxResult.success();
@GetMapping("/synchDb/{tableName}") }
public AjaxResult synchDb(@PathVariable("tableName") String tableName) {
genTableService.synchDb(tableName); /**
return AjaxResult.success(); *
} */
@RequiresPermissions("tool:gen:code")
/** @Log(title = "代码生成", businessType = BusinessType.GENCODE)
* @GetMapping("/batchGenCode")
*/ public void batchGenCode(HttpServletResponse response, String tables) throws IOException {
@RequiresPermissions("tool:gen:code") String[] tableNames = Convert.toStrArray(tables);
@Log(title = "代码生成", businessType = BusinessType.GENCODE) byte[] data = genTableService.downloadCode(tableNames);
@GetMapping("/batchGenCode") genCode(response, data);
public void batchGenCode(HttpServletResponse response, String tables) throws IOException { }
String[] tableNames = Convert.toStrArray(tables);
byte[] data = genTableService.downloadCode(tableNames); /**
genCode(response, data); * zip
} */
private void genCode(HttpServletResponse response, byte[] data) throws IOException {
/** response.reset();
* zip response.addHeader("Access-Control-Allow-Origin", "*");
*/ response.addHeader("Access-Control-Expose-Headers", "Content-Disposition");
private void genCode(HttpServletResponse response, byte[] data) throws IOException { response.setHeader("Content-Disposition", "attachment; filename=\"ruoyi.zip\"");
response.reset(); response.addHeader("Content-Length", "" + data.length);
response.setHeader("Content-Disposition", "attachment; filename=\"ruoyi.zip\""); response.setContentType("application/octet-stream; charset=UTF-8");
response.addHeader("Content-Length", "" + data.length); IoUtil.write(response.getOutputStream(), false, data);
response.setContentType("application/octet-stream; charset=UTF-8"); }
IOUtils.write(data, response.getOutputStream()); }
}
}

View File

@ -1,12 +1,13 @@
package com.ruoyi.gen.domain; package com.ruoyi.gen.domain;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.ruoyi.common.core.constant.GenConstants; import com.ruoyi.common.core.constant.GenConstants;
import com.ruoyi.common.core.utils.StringUtils; import com.ruoyi.common.core.utils.StringUtils;
import com.ruoyi.common.core.web.domain.BaseEntity; import com.ruoyi.common.core.web.domain.BaseEntity;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import org.apache.commons.lang3.ArrayUtils; import org.apache.commons.lang3.ArrayUtils;
import javax.validation.Valid; import javax.validation.Valid;
@ -16,16 +17,18 @@ import java.util.List;
/** /**
* gen_table * gen_table
* *
* @author ruoyi * @author Lion Li
*/ */
@Data @Data
@EqualsAndHashCode(callSuper = true) @EqualsAndHashCode(callSuper = true)
@NoArgsConstructor @TableName("gen_table")
public class GenTable extends BaseEntity { public class GenTable extends BaseEntity {
/** /**
* *
*/ */
@TableId(value = "table_id")
private Long tableId; private Long tableId;
/** /**
@ -104,17 +107,20 @@ public class GenTable extends BaseEntity {
/** /**
* *
*/ */
@TableField(exist = false)
private GenTableColumn pkColumn; private GenTableColumn pkColumn;
/** /**
* *
*/ */
@TableField(exist = false)
private GenTable subTable; private GenTable subTable;
/** /**
* *
*/ */
@Valid @Valid
@TableField(exist = false)
private List<GenTableColumn> columns; private List<GenTableColumn> columns;
/** /**
@ -122,29 +128,39 @@ public class GenTable extends BaseEntity {
*/ */
private String options; private String options;
/**
*
*/
private String remark;
/** /**
* *
*/ */
@TableField(exist = false)
private String treeCode; private String treeCode;
/** /**
* *
*/ */
@TableField(exist = false)
private String treeParentCode; private String treeParentCode;
/** /**
* *
*/ */
@TableField(exist = false)
private String treeName; private String treeName;
/** /**
* ID * ID
*/ */
@TableField(exist = false)
private String parentMenuId; private String parentMenuId;
/** /**
* *
*/ */
@TableField(exist = false)
private String parentMenuName; private String parentMenuName;
public boolean isSub() { public boolean isSub() {
@ -178,7 +194,7 @@ public class GenTable extends BaseEntity {
public static boolean isSuperColumn(String tplCategory, String javaField) { public static boolean isSuperColumn(String tplCategory, String javaField) {
if (isTree(tplCategory)) { if (isTree(tplCategory)) {
return StringUtils.equalsAnyIgnoreCase(javaField, return StringUtils.equalsAnyIgnoreCase(javaField,
ArrayUtils.addAll(GenConstants.TREE_ENTITY, GenConstants.BASE_ENTITY)); ArrayUtils.addAll(GenConstants.TREE_ENTITY, GenConstants.BASE_ENTITY));
} }
return StringUtils.equalsAnyIgnoreCase(javaField, GenConstants.BASE_ENTITY); return StringUtils.equalsAnyIgnoreCase(javaField, GenConstants.BASE_ENTITY);
} }

View File

@ -1,27 +1,31 @@
package com.ruoyi.gen.domain; package com.ruoyi.gen.domain;
import com.baomidou.mybatisplus.annotation.FieldStrategy;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.ruoyi.common.core.utils.StringUtils; import com.ruoyi.common.core.utils.StringUtils;
import com.ruoyi.common.core.web.domain.BaseEntity; import com.ruoyi.common.core.web.domain.BaseEntity;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotBlank;
/** /**
* gen_table_column * gen_table_column
* *
* @author ruoyi * @author Lion Li
*/ */
@Data @Data
@EqualsAndHashCode(callSuper = true) @EqualsAndHashCode(callSuper = true)
@NoArgsConstructor @TableName("gen_table_column")
public class GenTableColumn extends BaseEntity { public class GenTableColumn extends BaseEntity {
/** /**
* *
*/ */
@TableId(value = "column_id")
private Long columnId; private Long columnId;
/** /**
@ -37,6 +41,7 @@ public class GenTableColumn extends BaseEntity {
/** /**
* *
*/ */
@TableField(updateStrategy = FieldStrategy.IGNORED)
private String columnComment; private String columnComment;
/** /**
@ -58,36 +63,43 @@ public class GenTableColumn extends BaseEntity {
/** /**
* 1 * 1
*/ */
@TableField(updateStrategy = FieldStrategy.IGNORED)
private String isPk; private String isPk;
/** /**
* 1 * 1
*/ */
@TableField(updateStrategy = FieldStrategy.IGNORED)
private String isIncrement; private String isIncrement;
/** /**
* 1 * 1
*/ */
@TableField(updateStrategy = FieldStrategy.IGNORED)
private String isRequired; private String isRequired;
/** /**
* 1 * 1
*/ */
@TableField(updateStrategy = FieldStrategy.IGNORED)
private String isInsert; private String isInsert;
/** /**
* 1 * 1
*/ */
@TableField(updateStrategy = FieldStrategy.IGNORED)
private String isEdit; private String isEdit;
/** /**
* 1 * 1
*/ */
@TableField(updateStrategy = FieldStrategy.IGNORED)
private String isList; private String isList;
/** /**
* 1 * 1
*/ */
@TableField(updateStrategy = FieldStrategy.IGNORED)
private String isQuery; private String isQuery;
/** /**
@ -111,7 +123,7 @@ public class GenTableColumn extends BaseEntity {
private Integer sort; private Integer sort;
public String getCapJavaField() { public String getCapJavaField() {
return StringUtils.capitalize(javaField); return StringUtils.uncapitalize(javaField);
} }
public boolean isPk() { public boolean isPk() {
@ -176,10 +188,10 @@ public class GenTableColumn extends BaseEntity {
public static boolean isSuperColumn(String javaField) { public static boolean isSuperColumn(String javaField) {
return StringUtils.equalsAnyIgnoreCase(javaField, return StringUtils.equalsAnyIgnoreCase(javaField,
// BaseEntity // BaseEntity
"createBy", "createTime", "updateBy", "updateTime", "remark", "createBy", "createTime", "updateBy", "updateTime",
// TreeEntity // TreeEntity
"parentName", "parentId", "orderNum", "ancestors"); "parentName", "parentId");
} }
public boolean isUsableColumn() { public boolean isUsableColumn() {

View File

@ -1,60 +1,24 @@
package com.ruoyi.gen.mapper; package com.ruoyi.gen.mapper;
import com.ruoyi.gen.domain.GenTableColumn; import com.baomidou.mybatisplus.annotation.InterceptorIgnore;
import com.ruoyi.common.mybatis.core.mapper.BaseMapperPlus;
import java.util.List; import com.ruoyi.gen.domain.GenTableColumn;
/** import java.util.List;
*
* /**
* @author ruoyi *
*/ *
public interface GenTableColumnMapper { * @author Lion Li
/** */
* @InterceptorIgnore(dataPermission = "true")
* public interface GenTableColumnMapper extends BaseMapperPlus<GenTableColumnMapper, GenTableColumn, GenTableColumn> {
* @param tableName /**
* @return *
*/ *
List<GenTableColumn> selectDbTableColumnsByName(String tableName); * @param tableName
* @return
/** */
* List<GenTableColumn> selectDbTableColumnsByName(String tableName);
*
* @param tableId }
* @return
*/
List<GenTableColumn> selectGenTableColumnListByTableId(Long tableId);
/**
*
*
* @param genTableColumn
* @return
*/
int insertGenTableColumn(GenTableColumn genTableColumn);
/**
*
*
* @param genTableColumn
* @return
*/
int updateGenTableColumn(GenTableColumn genTableColumn);
/**
*
*
* @param genTableColumns
* @return
*/
int deleteGenTableColumns(List<GenTableColumn> genTableColumns);
/**
*
*
* @param ids ID
* @return
*/
int deleteGenTableColumnByIds(Long[] ids);
}

View File

@ -1,83 +1,70 @@
package com.ruoyi.gen.mapper; package com.ruoyi.gen.mapper;
import com.ruoyi.gen.domain.GenTable; import com.baomidou.mybatisplus.annotation.InterceptorIgnore;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import java.util.List; import com.ruoyi.common.mybatis.core.mapper.BaseMapperPlus;
import com.ruoyi.gen.domain.GenTable;
/** import org.apache.ibatis.annotations.Param;
*
* import java.util.List;
* @author ruoyi
*/ /**
public interface GenTableMapper { *
/** *
* * @author Lion Li
* */
* @param genTable @InterceptorIgnore(dataPermission = "true")
* @return public interface GenTableMapper extends BaseMapperPlus<GenTableMapper, GenTable, GenTable> {
*/
List<GenTable> selectGenTableList(GenTable 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);
*
* /**
* @param genTable *
* @return *
*/ * @param genTable
List<GenTable> selectDbTableList(GenTable genTable); * @return
*/
/** List<GenTable> selectGenTableList(GenTable genTable);
*
* /**
* @param tableNames *
* @return *
*/ * @param genTable
List<GenTable> selectDbTableListByNames(String[] tableNames); * @return
*/
/** List<GenTable> selectDbTableList(GenTable genTable);
*
* /**
* @return *
*/ *
List<GenTable> selectGenTableAll(); * @param tableNames
* @return
/** */
* ID List<GenTable> selectDbTableListByNames(String[] tableNames);
*
* @param id ID /**
* @return *
*/ *
GenTable selectGenTableById(Long id); * @return
*/
/** List<GenTable> selectGenTableAll();
*
* /**
* @param tableName * ID
* @return *
*/ * @param id ID
GenTable selectGenTableByName(String tableName); * @return
*/
/** GenTable selectGenTableById(Long id);
*
* /**
* @param genTable *
* @return *
*/ * @param tableName
int insertGenTable(GenTable genTable); * @return
*/
/** GenTable selectGenTableByName(String tableName);
*
* }
* @param genTable
* @return
*/
int updateGenTable(GenTable genTable);
/**
*
*
* @param ids ID
* @return
*/
int deleteGenTableByIds(Long[] ids);
}

View File

@ -1,66 +1,69 @@
package com.ruoyi.gen.service; package com.ruoyi.gen.service;
import cn.hutool.core.convert.Convert; import cn.hutool.core.convert.Convert;
import com.ruoyi.gen.domain.GenTableColumn; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.ruoyi.gen.mapper.GenTableColumnMapper; import com.ruoyi.gen.domain.GenTableColumn;
import lombok.RequiredArgsConstructor; import com.ruoyi.gen.mapper.GenTableColumnMapper;
import org.springframework.beans.factory.annotation.Autowired; import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.List; import java.util.Arrays;
import java.util.List;
/**
* /**
* *
* @author ruoyi *
*/ * @author ruoyi
@RequiredArgsConstructor(onConstructor_ = @Autowired) */
@Service @RequiredArgsConstructor
public class GenTableColumnServiceImpl implements IGenTableColumnService { @Service
public class GenTableColumnServiceImpl implements IGenTableColumnService {
private final GenTableColumnMapper genTableColumnMapper;
private final GenTableColumnMapper baseMapper;
/**
* /**
* *
* @param tableId *
* @return * @param tableId
*/ * @return
@Override */
public List<GenTableColumn> selectGenTableColumnListByTableId(Long tableId) { @Override
return genTableColumnMapper.selectGenTableColumnListByTableId(tableId); public List<GenTableColumn> selectGenTableColumnListByTableId(Long tableId) {
} return baseMapper.selectList(new LambdaQueryWrapper<GenTableColumn>()
.eq(GenTableColumn::getTableId, tableId)
/** .orderByAsc(GenTableColumn::getSort));
* }
*
* @param genTableColumn /**
* @return *
*/ *
@Override * @param genTableColumn
public int insertGenTableColumn(GenTableColumn genTableColumn) { * @return
return genTableColumnMapper.insertGenTableColumn(genTableColumn); */
} @Override
public int insertGenTableColumn(GenTableColumn genTableColumn) {
/** return baseMapper.insert(genTableColumn);
* }
*
* @param genTableColumn /**
* @return *
*/ *
@Override * @param genTableColumn
public int updateGenTableColumn(GenTableColumn genTableColumn) { * @return
return genTableColumnMapper.updateGenTableColumn(genTableColumn); */
} @Override
public int updateGenTableColumn(GenTableColumn genTableColumn) {
/** return baseMapper.updateById(genTableColumn);
* }
*
* @param ids ID /**
* @return *
*/ *
@Override * @param ids ID
public int deleteGenTableColumnByIds(String ids) { * @return
return genTableColumnMapper.deleteGenTableColumnByIds(Convert.toLongArray(ids)); */
} @Override
} public int deleteGenTableColumnByIds(String ids) {
return baseMapper.deleteBatchIds(Arrays.asList(Convert.toLongArray(ids)));
}
}

View File

@ -1,12 +1,17 @@
package com.ruoyi.gen.service; package com.ruoyi.gen.service;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.io.IoUtil;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.common.core.constant.Constants; import com.ruoyi.common.core.constant.Constants;
import com.ruoyi.common.core.constant.GenConstants; import com.ruoyi.common.core.constant.GenConstants;
import com.ruoyi.common.core.exception.ServiceException; import com.ruoyi.common.core.exception.ServiceException;
import com.ruoyi.common.core.utils.JsonUtils; import com.ruoyi.common.core.utils.JsonUtils;
import com.ruoyi.common.core.utils.StringUtils; import com.ruoyi.common.core.utils.StringUtils;
import com.ruoyi.common.mybatis.core.page.PageQuery;
import com.ruoyi.common.mybatis.core.page.TableDataInfo;
import com.ruoyi.common.security.utils.SecurityUtils; import com.ruoyi.common.security.utils.SecurityUtils;
import com.ruoyi.gen.domain.GenTable; import com.ruoyi.gen.domain.GenTable;
import com.ruoyi.gen.domain.GenTableColumn; import com.ruoyi.gen.domain.GenTableColumn;
@ -22,7 +27,6 @@ import org.apache.commons.io.IOUtils;
import org.apache.velocity.Template; import org.apache.velocity.Template;
import org.apache.velocity.VelocityContext; import org.apache.velocity.VelocityContext;
import org.apache.velocity.app.Velocity; import org.apache.velocity.app.Velocity;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
@ -31,10 +35,8 @@ import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.io.StringWriter; import java.io.StringWriter;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
import java.util.LinkedHashMap; import java.util.*;
import java.util.function.Function; import java.util.function.Function;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import java.util.zip.ZipEntry; import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream; import java.util.zip.ZipOutputStream;
@ -45,11 +47,11 @@ import java.util.zip.ZipOutputStream;
* @author ruoyi * @author ruoyi
*/ */
@Slf4j @Slf4j
@RequiredArgsConstructor(onConstructor_ = @Autowired) @RequiredArgsConstructor
@Service @Service
public class GenTableServiceImpl implements IGenTableService { public class GenTableServiceImpl implements IGenTableService {
private final GenTableMapper genTableMapper; private final GenTableMapper baseMapper;
private final GenTableColumnMapper genTableColumnMapper; private final GenTableColumnMapper genTableColumnMapper;
/** /**
@ -60,11 +62,23 @@ public class GenTableServiceImpl implements IGenTableService {
*/ */
@Override @Override
public GenTable selectGenTableById(Long id) { public GenTable selectGenTableById(Long id) {
GenTable genTable = genTableMapper.selectGenTableById(id); GenTable genTable = baseMapper.selectGenTableById(id);
setTableFromOptions(genTable); setTableFromOptions(genTable);
return genTable; return genTable;
} }
@Override
public TableDataInfo<GenTable> selectPageGenTableList(GenTable genTable, PageQuery pageQuery) {
Page<GenTable> page = baseMapper.selectPageGenTableList(pageQuery.build(), genTable);
return TableDataInfo.build(page);
}
@Override
public TableDataInfo<GenTable> selectPageDbTableList(GenTable genTable, PageQuery pageQuery) {
Page<GenTable> page = baseMapper.selectPageDbTableList(pageQuery.build(), genTable);
return TableDataInfo.build(page);
}
/** /**
* *
* *
@ -73,7 +87,7 @@ public class GenTableServiceImpl implements IGenTableService {
*/ */
@Override @Override
public List<GenTable> selectGenTableList(GenTable genTable) { public List<GenTable> selectGenTableList(GenTable genTable) {
return genTableMapper.selectGenTableList(genTable); return baseMapper.selectGenTableList(genTable);
} }
/** /**
@ -84,7 +98,7 @@ public class GenTableServiceImpl implements IGenTableService {
*/ */
@Override @Override
public List<GenTable> selectDbTableList(GenTable genTable) { public List<GenTable> selectDbTableList(GenTable genTable) {
return genTableMapper.selectDbTableList(genTable); return baseMapper.selectDbTableList(genTable);
} }
/** /**
@ -95,7 +109,7 @@ public class GenTableServiceImpl implements IGenTableService {
*/ */
@Override @Override
public List<GenTable> selectDbTableListByNames(String[] tableNames) { public List<GenTable> selectDbTableListByNames(String[] tableNames) {
return genTableMapper.selectDbTableListByNames(tableNames); return baseMapper.selectDbTableListByNames(tableNames);
} }
/** /**
@ -105,7 +119,7 @@ public class GenTableServiceImpl implements IGenTableService {
*/ */
@Override @Override
public List<GenTable> selectGenTableAll() { public List<GenTable> selectGenTableAll() {
return genTableMapper.selectGenTableAll(); return baseMapper.selectGenTableAll();
} }
/** /**
@ -115,14 +129,14 @@ public class GenTableServiceImpl implements IGenTableService {
* @return * @return
*/ */
@Override @Override
@Transactional @Transactional(rollbackFor = Exception.class)
public void updateGenTable(GenTable genTable) { public void updateGenTable(GenTable genTable) {
String options = JsonUtils.toJsonString(genTable.getParams()); String options = JsonUtils.toJsonString(genTable.getParams());
genTable.setOptions(options); genTable.setOptions(options);
int row = genTableMapper.updateGenTable(genTable); int row = baseMapper.updateById(genTable);
if (row > 0) { if (row > 0) {
for (GenTableColumn cenTableColumn : genTable.getColumns()) { for (GenTableColumn cenTableColumn : genTable.getColumns()) {
genTableColumnMapper.updateGenTableColumn(cenTableColumn); genTableColumnMapper.updateById(cenTableColumn);
} }
} }
} }
@ -134,10 +148,11 @@ public class GenTableServiceImpl implements IGenTableService {
* @return * @return
*/ */
@Override @Override
@Transactional @Transactional(rollbackFor = Exception.class)
public void deleteGenTableByIds(Long[] tableIds) { public void deleteGenTableByIds(Long[] tableIds) {
genTableMapper.deleteGenTableByIds(tableIds); List<Long> ids = Arrays.asList(tableIds);
genTableColumnMapper.deleteGenTableColumnByIds(tableIds); baseMapper.deleteBatchIds(ids);
genTableColumnMapper.delete(new LambdaQueryWrapper<GenTableColumn>().in(GenTableColumn::getTableId, ids));
} }
/** /**
@ -146,20 +161,24 @@ public class GenTableServiceImpl implements IGenTableService {
* @param tableList * @param tableList
*/ */
@Override @Override
@Transactional @Transactional(rollbackFor = Exception.class)
public void importGenTable(List<GenTable> tableList) { public void importGenTable(List<GenTable> tableList) {
String operName = SecurityUtils.getUsername(); String operName = SecurityUtils.getUsername();
try { try {
for (GenTable table : tableList) { for (GenTable table : tableList) {
String tableName = table.getTableName(); String tableName = table.getTableName();
GenUtils.initTable(table, operName); GenUtils.initTable(table, operName);
int row = genTableMapper.insertGenTable(table); int row = baseMapper.insert(table);
if (row > 0) { if (row > 0) {
// 保存列信息 // 保存列信息
List<GenTableColumn> genTableColumns = genTableColumnMapper.selectDbTableColumnsByName(tableName); List<GenTableColumn> genTableColumns = genTableColumnMapper.selectDbTableColumnsByName(tableName);
List<GenTableColumn> saveColumns = new ArrayList<>();
for (GenTableColumn column : genTableColumns) { for (GenTableColumn column : genTableColumns) {
GenUtils.initColumnField(column, table); GenUtils.initColumnField(column, table);
genTableColumnMapper.insertGenTableColumn(column); saveColumns.add(column);
}
if (CollUtil.isNotEmpty(saveColumns)) {
genTableColumnMapper.insertBatch(saveColumns);
} }
} }
} }
@ -178,7 +197,7 @@ public class GenTableServiceImpl implements IGenTableService {
public Map<String, String> previewCode(Long tableId) { public Map<String, String> previewCode(Long tableId) {
Map<String, String> dataMap = new LinkedHashMap<>(); Map<String, String> dataMap = new LinkedHashMap<>();
// 查询表信息 // 查询表信息
GenTable table = genTableMapper.selectGenTableById(tableId); GenTable table = baseMapper.selectGenTableById(tableId);
// 设置主子表信息 // 设置主子表信息
setSubTable(table); setSubTable(table);
// 设置主键列信息 // 设置主键列信息
@ -210,7 +229,7 @@ public class GenTableServiceImpl implements IGenTableService {
ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
ZipOutputStream zip = new ZipOutputStream(outputStream); ZipOutputStream zip = new ZipOutputStream(outputStream);
generatorCode(tableName, zip); generatorCode(tableName, zip);
IOUtils.closeQuietly(zip); IoUtil.close(zip);
return outputStream.toByteArray(); return outputStream.toByteArray();
} }
@ -222,7 +241,7 @@ public class GenTableServiceImpl implements IGenTableService {
@Override @Override
public void generatorCode(String tableName) { public void generatorCode(String tableName) {
// 查询表信息 // 查询表信息
GenTable table = genTableMapper.selectGenTableByName(tableName); GenTable table = baseMapper.selectGenTableByName(tableName);
// 设置主子表信息 // 设置主子表信息
setSubTable(table); setSubTable(table);
// 设置主键列信息 // 设置主键列信息
@ -256,9 +275,9 @@ public class GenTableServiceImpl implements IGenTableService {
* @param tableName * @param tableName
*/ */
@Override @Override
@Transactional @Transactional(rollbackFor = Exception.class)
public void synchDb(String tableName) { public void synchDb(String tableName) {
GenTable table = genTableMapper.selectGenTableByName(tableName); GenTable table = baseMapper.selectGenTableByName(tableName);
List<GenTableColumn> tableColumns = table.getColumns(); List<GenTableColumn> tableColumns = table.getColumns();
Map<String, GenTableColumn> tableColumnMap = tableColumns.stream().collect(Collectors.toMap(GenTableColumn::getColumnName, Function.identity())); Map<String, GenTableColumn> tableColumnMap = tableColumns.stream().collect(Collectors.toMap(GenTableColumn::getColumnName, Function.identity()));
@ -268,6 +287,7 @@ public class GenTableServiceImpl implements IGenTableService {
} }
List<String> dbTableColumnNames = dbTableColumns.stream().map(GenTableColumn::getColumnName).collect(Collectors.toList()); List<String> dbTableColumnNames = dbTableColumns.stream().map(GenTableColumn::getColumnName).collect(Collectors.toList());
List<GenTableColumn> saveColumns = new ArrayList<>();
dbTableColumns.forEach(column -> { dbTableColumns.forEach(column -> {
GenUtils.initColumnField(column, table); GenUtils.initColumnField(column, table);
if (tableColumnMap.containsKey(column.getColumnName())) { if (tableColumnMap.containsKey(column.getColumnName())) {
@ -277,15 +297,19 @@ public class GenTableServiceImpl implements IGenTableService {
// 如果是列表,继续保留字典类型 // 如果是列表,继续保留字典类型
column.setDictType(prevColumn.getDictType()); column.setDictType(prevColumn.getDictType());
} }
genTableColumnMapper.updateGenTableColumn(column); genTableColumnMapper.updateById(column);
} else { } else {
genTableColumnMapper.insertGenTableColumn(column); genTableColumnMapper.insert(column);
} }
}); });
if (CollUtil.isNotEmpty(saveColumns)) {
genTableColumnMapper.insertBatch(saveColumns);
}
List<GenTableColumn> delColumns = tableColumns.stream().filter(column -> !dbTableColumnNames.contains(column.getColumnName())).collect(Collectors.toList()); List<GenTableColumn> delColumns = tableColumns.stream().filter(column -> !dbTableColumnNames.contains(column.getColumnName())).collect(Collectors.toList());
if (CollUtil.isNotEmpty(delColumns)) { if (CollUtil.isNotEmpty(delColumns)) {
genTableColumnMapper.deleteGenTableColumns(delColumns); List<Long> ids = delColumns.stream().map(GenTableColumn::getColumnId).collect(Collectors.toList());
genTableColumnMapper.deleteBatchIds(ids);
} }
} }
@ -302,7 +326,7 @@ public class GenTableServiceImpl implements IGenTableService {
for (String tableName : tableNames) { for (String tableName : tableNames) {
generatorCode(tableName, zip); generatorCode(tableName, zip);
} }
IOUtils.closeQuietly(zip); IoUtil.close(zip);
return outputStream.toByteArray(); return outputStream.toByteArray();
} }
@ -311,7 +335,7 @@ public class GenTableServiceImpl implements IGenTableService {
*/ */
private void generatorCode(String tableName, ZipOutputStream zip) { private void generatorCode(String tableName, ZipOutputStream zip) {
// 查询表信息 // 查询表信息
GenTable table = genTableMapper.selectGenTableByName(tableName); GenTable table = baseMapper.selectGenTableByName(tableName);
// 设置主子表信息 // 设置主子表信息
setSubTable(table); setSubTable(table);
// 设置主键列信息 // 设置主键列信息
@ -403,7 +427,7 @@ public class GenTableServiceImpl implements IGenTableService {
public void setSubTable(GenTable table) { public void setSubTable(GenTable table) {
String subTableName = table.getSubTableName(); String subTableName = table.getSubTableName();
if (StringUtils.isNotEmpty(subTableName)) { if (StringUtils.isNotEmpty(subTableName)) {
table.setSubTable(genTableMapper.selectGenTableByName(subTableName)); table.setSubTable(baseMapper.selectGenTableByName(subTableName));
} }
} }

View File

@ -1,121 +1,128 @@
package com.ruoyi.gen.service; package com.ruoyi.gen.service;
import com.ruoyi.gen.domain.GenTable; import com.ruoyi.common.mybatis.core.page.PageQuery;
import com.ruoyi.common.mybatis.core.page.TableDataInfo;
import java.util.List; import com.ruoyi.gen.domain.GenTable;
import java.util.Map;
import java.util.List;
/** import java.util.Map;
*
* /**
* @author ruoyi *
*/ *
public interface IGenTableService { * @author ruoyi
/** */
* public interface IGenTableService {
*
* @param genTable TableDataInfo<GenTable> selectPageGenTableList(GenTable genTable, PageQuery pageQuery);
* @return
*/ TableDataInfo<GenTable> selectPageDbTableList(GenTable genTable, PageQuery pageQuery);
List<GenTable> selectGenTableList(GenTable genTable);
/**
/** *
* *
* * @param genTable
* @param genTable * @return
* @return */
*/ List<GenTable> selectGenTableList(GenTable genTable);
List<GenTable> selectDbTableList(GenTable genTable);
/**
/** *
* *
* * @param genTable
* @param tableNames * @return
* @return */
*/ List<GenTable> selectDbTableList(GenTable genTable);
List<GenTable> selectDbTableListByNames(String[] tableNames);
/**
/** *
* *
* * @param tableNames
* @return * @return
*/ */
List<GenTable> selectGenTableAll(); List<GenTable> selectDbTableListByNames(String[] tableNames);
/** /**
* *
* *
* @param id ID * @return
* @return */
*/ List<GenTable> selectGenTableAll();
GenTable selectGenTableById(Long id);
/**
/** *
* *
* * @param id ID
* @param genTable * @return
* @return */
*/ GenTable selectGenTableById(Long id);
void updateGenTable(GenTable genTable);
/**
/** *
* *
* * @param genTable
* @param tableIds ID * @return
* @return */
*/ void updateGenTable(GenTable genTable);
void deleteGenTableByIds(Long[] tableIds);
/**
/** *
* *
* * @param tableIds ID
* @param tableList * @return
*/ */
void importGenTable(List<GenTable> tableList); void deleteGenTableByIds(Long[] tableIds);
/** /**
* *
* *
* @param tableId * @param tableList
* @return */
*/ void importGenTable(List<GenTable> tableList);
Map<String, String> previewCode(Long tableId);
/**
/** *
* *
* * @param tableId
* @param tableName * @return
* @return */
*/ Map<String, String> previewCode(Long tableId);
byte[] downloadCode(String tableName);
/**
/** *
* *
* * @param tableName
* @param tableName * @return
* @return */
*/ byte[] downloadCode(String tableName);
void generatorCode(String tableName);
/**
/** *
* *
* * @param tableName
* @param tableName * @return
*/ */
void synchDb(String tableName); void generatorCode(String tableName);
/** /**
* *
* *
* @param tableNames * @param tableName
* @return */
*/ void synchDb(String tableName);
byte[] downloadCode(String[] tableNames);
/**
/** *
* *
* * @param tableNames
* @param genTable * @return
*/ */
void validateEdit(GenTable genTable); byte[] downloadCode(String[] tableNames);
}
/**
*
*
* @param genTable
*/
void validateEdit(GenTable genTable);
}

View File

@ -1,127 +1,38 @@
<?xml version="1.0" encoding="UTF-8" ?> <?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper <!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd"> "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.gen.mapper.GenTableColumnMapper"> <mapper namespace="com.ruoyi.gen.mapper.GenTableColumnMapper">
<resultMap type="GenTableColumn" id="GenTableColumnResult"> <resultMap type="GenTableColumn" id="GenTableColumnResult">
<id property="columnId" column="column_id" /> <id property="columnId" column="column_id" />
<result property="tableId" column="table_id" /> <result property="tableId" column="table_id" />
<result property="columnName" column="column_name" /> <result property="columnName" column="column_name" />
<result property="columnComment" column="column_comment" /> <result property="columnComment" column="column_comment" />
<result property="columnType" column="column_type" /> <result property="columnType" column="column_type" />
<result property="javaType" column="java_type" /> <result property="javaType" column="java_type" />
<result property="javaField" column="java_field" /> <result property="javaField" column="java_field" />
<result property="isPk" column="is_pk" /> <result property="isPk" column="is_pk" />
<result property="isIncrement" column="is_increment" /> <result property="isIncrement" column="is_increment" />
<result property="isRequired" column="is_required" /> <result property="isRequired" column="is_required" />
<result property="isInsert" column="is_insert" /> <result property="isInsert" column="is_insert" />
<result property="isEdit" column="is_edit" /> <result property="isEdit" column="is_edit" />
<result property="isList" column="is_list" /> <result property="isList" column="is_list" />
<result property="isQuery" column="is_query" /> <result property="isQuery" column="is_query" />
<result property="queryType" column="query_type" /> <result property="queryType" column="query_type" />
<result property="htmlType" column="html_type" /> <result property="htmlType" column="html_type" />
<result property="dictType" column="dict_type" /> <result property="dictType" column="dict_type" />
<result property="sort" column="sort" /> <result property="sort" column="sort" />
<result property="createBy" column="create_by" /> <result property="createBy" column="create_by" />
<result property="createTime" column="create_time" /> <result property="createTime" column="create_time" />
<result property="updateBy" column="update_by" /> <result property="updateBy" column="update_by" />
<result property="updateTime" column="update_time" /> <result property="updateTime" column="update_time" />
</resultMap> </resultMap>
<sql id="selectGenTableColumnVo"> <select id="selectDbTableColumnsByName" parameterType="String" resultMap="GenTableColumnResult">
select column_id, table_id, column_name, column_comment, column_type, java_type, java_field, is_pk, is_increment, is_required, is_insert, is_edit, is_list, is_query, query_type, html_type, dict_type, sort, create_by, create_time, update_by, update_time from gen_table_column select column_name, (case when (is_nullable = 'no' <![CDATA[ && ]]> column_key != 'PRI') then '1' else null end) as is_required, (case when column_key = 'PRI' then '1' else '0' end) as is_pk, ordinal_position as sort, column_comment, (case when extra = 'auto_increment' then '1' else '0' end) as is_increment, column_type
</sql> from information_schema.columns where table_schema = (select database()) and table_name = (#{tableName})
order by ordinal_position
<select id="selectGenTableColumnListByTableId" parameterType="GenTableColumn" resultMap="GenTableColumnResult"> </select>
<include refid="selectGenTableColumnVo"/>
where table_id = #{tableId} </mapper>
order by sort
</select>
<select id="selectDbTableColumnsByName" parameterType="String" resultMap="GenTableColumnResult">
select column_name, (case when (is_nullable = 'no' <![CDATA[ && ]]> column_key != 'PRI') then '1' else null end) as is_required, (case when column_key = 'PRI' then '1' else '0' end) as is_pk, ordinal_position as sort, column_comment, (case when extra = 'auto_increment' then '1' else '0' end) as is_increment, column_type
from information_schema.columns where table_schema = (select database()) and table_name = (#{tableName})
order by ordinal_position
</select>
<insert id="insertGenTableColumn" parameterType="GenTableColumn" useGeneratedKeys="true" keyProperty="columnId">
insert into gen_table_column (
<if test="tableId != null and tableId != ''">table_id,</if>
<if test="columnName != null and columnName != ''">column_name,</if>
<if test="columnComment != null and columnComment != ''">column_comment,</if>
<if test="columnType != null and columnType != ''">column_type,</if>
<if test="javaType != null and javaType != ''">java_type,</if>
<if test="javaField != null and javaField != ''">java_field,</if>
<if test="isPk != null and isPk != ''">is_pk,</if>
<if test="isIncrement != null and isIncrement != ''">is_increment,</if>
<if test="isRequired != null and isRequired != ''">is_required,</if>
<if test="isInsert != null and isInsert != ''">is_insert,</if>
<if test="isEdit != null and isEdit != ''">is_edit,</if>
<if test="isList != null and isList != ''">is_list,</if>
<if test="isQuery != null and isQuery != ''">is_query,</if>
<if test="queryType != null and queryType != ''">query_type,</if>
<if test="htmlType != null and htmlType != ''">html_type,</if>
<if test="dictType != null and dictType != ''">dict_type,</if>
<if test="sort != null">sort,</if>
<if test="createBy != null and createBy != ''">create_by,</if>
create_time
)values(
<if test="tableId != null and tableId != ''">#{tableId},</if>
<if test="columnName != null and columnName != ''">#{columnName},</if>
<if test="columnComment != null and columnComment != ''">#{columnComment},</if>
<if test="columnType != null and columnType != ''">#{columnType},</if>
<if test="javaType != null and javaType != ''">#{javaType},</if>
<if test="javaField != null and javaField != ''">#{javaField},</if>
<if test="isPk != null and isPk != ''">#{isPk},</if>
<if test="isIncrement != null and isIncrement != ''">#{isIncrement},</if>
<if test="isRequired != null and isRequired != ''">#{isRequired},</if>
<if test="isInsert != null and isInsert != ''">#{isInsert},</if>
<if test="isEdit != null and isEdit != ''">#{isEdit},</if>
<if test="isList != null and isList != ''">#{isList},</if>
<if test="isQuery != null and isQuery != ''">#{isQuery},</if>
<if test="queryType != null and queryType != ''">#{queryType},</if>
<if test="htmlType != null and htmlType != ''">#{htmlType},</if>
<if test="dictType != null and dictType != ''">#{dictType},</if>
<if test="sort != null">#{sort},</if>
<if test="createBy != null and createBy != ''">#{createBy},</if>
sysdate()
)
</insert>
<update id="updateGenTableColumn" parameterType="GenTableColumn">
update gen_table_column
<set>
column_comment = #{columnComment},
java_type = #{javaType},
java_field = #{javaField},
is_insert = #{isInsert},
is_edit = #{isEdit},
is_list = #{isList},
is_query = #{isQuery},
is_required = #{isRequired},
query_type = #{queryType},
html_type = #{htmlType},
dict_type = #{dictType},
sort = #{sort},
update_by = #{updateBy},
update_time = sysdate()
</set>
where column_id = #{columnId}
</update>
<delete id="deleteGenTableColumnByIds" parameterType="Long">
delete from gen_table_column where table_id in
<foreach collection="array" item="tableId" open="(" separator="," close=")">
#{tableId}
</foreach>
</delete>
<delete id="deleteGenTableColumns">
delete from gen_table_column where column_id in
<foreach collection="list" item="item" open="(" separator="," close=")">
#{item.columnId}
</foreach>
</delete>
</mapper>

View File

@ -1,202 +1,175 @@
<?xml version="1.0" encoding="UTF-8" ?> <?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper <!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd"> "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.gen.mapper.GenTableMapper"> <mapper namespace="com.ruoyi.gen.mapper.GenTableMapper">
<resultMap type="GenTable" id="GenTableResult"> <resultMap type="GenTable" id="GenTableResult">
<id property="tableId" column="table_id" /> <id property="tableId" column="table_id" />
<result property="tableName" column="table_name" /> <result property="tableName" column="table_name" />
<result property="tableComment" column="table_comment" /> <result property="tableComment" column="table_comment" />
<result property="subTableName" column="sub_table_name" /> <result property="subTableName" column="sub_table_name" />
<result property="subTableFkName" column="sub_table_fk_name" /> <result property="subTableFkName" column="sub_table_fk_name" />
<result property="className" column="class_name" /> <result property="className" column="class_name" />
<result property="tplCategory" column="tpl_category" /> <result property="tplCategory" column="tpl_category" />
<result property="packageName" column="package_name" /> <result property="packageName" column="package_name" />
<result property="moduleName" column="module_name" /> <result property="moduleName" column="module_name" />
<result property="businessName" column="business_name" /> <result property="businessName" column="business_name" />
<result property="functionName" column="function_name" /> <result property="functionName" column="function_name" />
<result property="functionAuthor" column="function_author" /> <result property="functionAuthor" column="function_author" />
<result property="genType" column="gen_type" /> <result property="genType" column="gen_type" />
<result property="genPath" column="gen_path" /> <result property="genPath" column="gen_path" />
<result property="options" column="options" /> <result property="options" column="options" />
<result property="createBy" column="create_by" /> <result property="createBy" column="create_by" />
<result property="createTime" column="create_time" /> <result property="createTime" column="create_time" />
<result property="updateBy" column="update_by" /> <result property="updateBy" column="update_by" />
<result property="updateTime" column="update_time" /> <result property="updateTime" column="update_time" />
<result property="remark" column="remark" /> <result property="remark" column="remark" />
<collection property="columns" javaType="java.util.List" resultMap="GenTableColumnResult" /> <collection property="columns" javaType="java.util.List" resultMap="GenTableColumnResult" />
</resultMap> </resultMap>
<resultMap type="GenTableColumn" id="GenTableColumnResult"> <resultMap type="GenTableColumn" id="GenTableColumnResult">
<id property="columnId" column="column_id" /> <id property="columnId" column="column_id" />
<result property="tableId" column="table_id" /> <result property="tableId" column="table_id" />
<result property="columnName" column="column_name" /> <result property="columnName" column="column_name" />
<result property="columnComment" column="column_comment" /> <result property="columnComment" column="column_comment" />
<result property="columnType" column="column_type" /> <result property="columnType" column="column_type" />
<result property="javaType" column="java_type" /> <result property="javaType" column="java_type" />
<result property="javaField" column="java_field" /> <result property="javaField" column="java_field" />
<result property="isPk" column="is_pk" /> <result property="isPk" column="is_pk" />
<result property="isIncrement" column="is_increment" /> <result property="isIncrement" column="is_increment" />
<result property="isRequired" column="is_required" /> <result property="isRequired" column="is_required" />
<result property="isInsert" column="is_insert" /> <result property="isInsert" column="is_insert" />
<result property="isEdit" column="is_edit" /> <result property="isEdit" column="is_edit" />
<result property="isList" column="is_list" /> <result property="isList" column="is_list" />
<result property="isQuery" column="is_query" /> <result property="isQuery" column="is_query" />
<result property="queryType" column="query_type" /> <result property="queryType" column="query_type" />
<result property="htmlType" column="html_type" /> <result property="htmlType" column="html_type" />
<result property="dictType" column="dict_type" /> <result property="dictType" column="dict_type" />
<result property="sort" column="sort" /> <result property="sort" column="sort" />
<result property="createBy" column="create_by" /> <result property="createBy" column="create_by" />
<result property="createTime" column="create_time" /> <result property="createTime" column="create_time" />
<result property="updateBy" column="update_by" /> <result property="updateBy" column="update_by" />
<result property="updateTime" column="update_time" /> <result property="updateTime" column="update_time" />
</resultMap> </resultMap>
<sql id="selectGenTableVo"> <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 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> </sql>
<select id="selectGenTableList" parameterType="GenTable" resultMap="GenTableResult"> <select id="selectPageGenTableList" parameterType="GenTable" resultMap="GenTableResult">
<include refid="selectGenTableVo"/> <include refid="selectGenTableVo"/>
<where> <where>
<if test="tableName != null and tableName != ''"> <if test="genTable.tableName != null and genTable.tableName != ''">
AND lower(table_name) like lower(concat('%', #{tableName}, '%')) AND lower(table_name) like lower(concat('%', #{genTable.tableName}, '%'))
</if> </if>
<if test="tableComment != null and tableComment != ''"> <if test="genTable.tableComment != null and genTable.tableComment != ''">
AND lower(table_comment) like lower(concat('%', #{tableComment}, '%')) AND lower(table_comment) like lower(concat('%', #{genTable.tableComment}, '%'))
</if> </if>
<if test="params.beginTime != null and params.beginTime != ''"><!-- 开始时间检索 --> <if test="genTable.params.beginTime != null and genTable.params.beginTime != ''"><!-- 开始时间检索 -->
AND date_format(create_time,'%y%m%d') &gt;= date_format(#{params.beginTime},'%y%m%d') AND date_format(create_time,'%y%m%d') &gt;= date_format(#{genTable.params.beginTime},'%y%m%d')
</if> </if>
<if test="params.endTime != null and params.endTime != ''"><!-- 结束时间检索 --> <if test="genTable.params.endTime != null and genTable.params.endTime != ''"><!-- 结束时间检索 -->
AND date_format(create_time,'%y%m%d') &lt;= date_format(#{params.endTime},'%y%m%d') AND date_format(create_time,'%y%m%d') &lt;= date_format(#{genTable.params.endTime},'%y%m%d')
</if> </if>
</where> </where>
</select> </select>
<select id="selectDbTableList" parameterType="GenTable" resultMap="GenTableResult"> <select id="selectPageDbTableList" parameterType="GenTable" resultMap="GenTableResult">
select table_name, table_comment, create_time, update_time from information_schema.tables select table_name, table_comment, create_time, update_time from information_schema.tables
where table_schema = (select database()) where table_schema = (select database())
AND table_name NOT LIKE 'qrtz_%' AND table_name NOT LIKE 'gen_%' AND table_name NOT LIKE 'xxl_job_%' AND table_name NOT LIKE 'gen_%'
AND table_name NOT IN (select table_name from gen_table) AND table_name NOT IN (select table_name from gen_table)
<if test="tableName != null and tableName != ''"> <if test="genTable.tableName != null and genTable.tableName != ''">
AND lower(table_name) like lower(concat('%', #{tableName}, '%')) AND lower(table_name) like lower(concat('%', #{genTable.tableName}, '%'))
</if> </if>
<if test="tableComment != null and tableComment != ''"> <if test="genTable.tableComment != null and genTable.tableComment != ''">
AND lower(table_comment) like lower(concat('%', #{tableComment}, '%')) AND lower(table_comment) like lower(concat('%', #{genTable.tableComment}, '%'))
</if> </if>
<if test="params.beginTime != null and params.beginTime != ''"><!-- 开始时间检索 --> <if test="genTable.params.beginTime != null and genTable.params.beginTime != ''"><!-- 开始时间检索 -->
AND date_format(create_time,'%y%m%d') &gt;= date_format(#{params.beginTime},'%y%m%d') AND date_format(create_time,'%y%m%d') &gt;= date_format(#{genTable.params.beginTime},'%y%m%d')
</if> </if>
<if test="params.endTime != null and params.endTime != ''"><!-- 结束时间检索 --> <if test="genTable.params.endTime != null and genTable.params.endTime != ''"><!-- 结束时间检索 -->
AND date_format(create_time,'%y%m%d') &lt;= date_format(#{params.endTime},'%y%m%d') AND date_format(create_time,'%y%m%d') &lt;= date_format(#{genTable.params.endTime},'%y%m%d')
</if> </if>
order by create_time desc order by create_time desc
</select> </select>
<select id="selectDbTableListByNames" resultMap="GenTableResult"> <select id="selectGenTableList" parameterType="GenTable" resultMap="GenTableResult">
select table_name, table_comment, create_time, update_time from information_schema.tables <include refid="selectGenTableVo"/>
where table_name NOT LIKE 'qrtz_%' and table_name NOT LIKE 'gen_%' and table_schema = (select database()) <where>
and table_name in <if test="tableName != null and tableName != ''">
<foreach collection="array" item="name" open="(" separator="," close=")"> AND lower(table_name) like lower(concat('%', #{tableName}, '%'))
#{name} </if>
</foreach> <if test="tableComment != null and tableComment != ''">
</select> AND lower(table_comment) like lower(concat('%', #{tableComment}, '%'))
</if>
<select id="selectTableByName" parameterType="String" resultMap="GenTableResult"> <if test="params.beginTime != null and params.beginTime != ''"><!-- 开始时间检索 -->
select table_name, table_comment, create_time, update_time from information_schema.tables AND date_format(create_time,'%y%m%d') &gt;= date_format(#{params.beginTime},'%y%m%d')
where table_comment <![CDATA[ <> ]]> '' and table_schema = (select database()) </if>
and table_name = #{tableName} <if test="params.endTime != null and params.endTime != ''"><!-- 结束时间检索 -->
</select> AND date_format(create_time,'%y%m%d') &lt;= date_format(#{params.endTime},'%y%m%d')
</if>
<select id="selectGenTableById" parameterType="Long" resultMap="GenTableResult"> </where>
SELECT t.table_id, t.table_name, t.table_comment, t.sub_table_name, t.sub_table_fk_name, t.class_name, t.tpl_category, t.package_name, t.module_name, t.business_name, t.function_name, t.function_author, t.gen_type, t.gen_path, t.options, t.remark, </select>
c.column_id, c.column_name, c.column_comment, c.column_type, c.java_type, c.java_field, c.is_pk, c.is_increment, c.is_required, c.is_insert, c.is_edit, c.is_list, c.is_query, c.query_type, c.html_type, c.dict_type, c.sort
FROM gen_table t <select id="selectDbTableList" parameterType="GenTable" resultMap="GenTableResult">
LEFT JOIN gen_table_column c ON t.table_id = c.table_id select table_name, table_comment, create_time, update_time from information_schema.tables
where t.table_id = #{tableId} order by c.sort where table_schema = (select database())
</select> AND table_name NOT LIKE 'qrtz_%' AND table_name NOT LIKE 'gen_%'
AND table_name NOT IN (select table_name from gen_table)
<select id="selectGenTableByName" parameterType="String" resultMap="GenTableResult"> <if test="tableName != null and tableName != ''">
SELECT t.table_id, t.table_name, t.table_comment, t.sub_table_name, t.sub_table_fk_name, t.class_name, t.tpl_category, t.package_name, t.module_name, t.business_name, t.function_name, t.function_author, t.gen_type, t.gen_path, t.options, t.remark, AND lower(table_name) like lower(concat('%', #{tableName}, '%'))
c.column_id, c.column_name, c.column_comment, c.column_type, c.java_type, c.java_field, c.is_pk, c.is_increment, c.is_required, c.is_insert, c.is_edit, c.is_list, c.is_query, c.query_type, c.html_type, c.dict_type, c.sort </if>
FROM gen_table t <if test="tableComment != null and tableComment != ''">
LEFT JOIN gen_table_column c ON t.table_id = c.table_id AND lower(table_comment) like lower(concat('%', #{tableComment}, '%'))
where t.table_name = #{tableName} order by c.sort </if>
</select> <if test="params.beginTime != null and params.beginTime != ''"><!-- 开始时间检索 -->
AND date_format(create_time,'%y%m%d') &gt;= date_format(#{params.beginTime},'%y%m%d')
<select id="selectGenTableAll" parameterType="String" resultMap="GenTableResult"> </if>
SELECT t.table_id, t.table_name, t.table_comment, t.sub_table_name, t.sub_table_fk_name, t.class_name, t.tpl_category, t.package_name, t.module_name, t.business_name, t.function_name, t.function_author, t.options, t.remark, <if test="params.endTime != null and params.endTime != ''"><!-- 结束时间检索 -->
c.column_id, c.column_name, c.column_comment, c.column_type, c.java_type, c.java_field, c.is_pk, c.is_increment, c.is_required, c.is_insert, c.is_edit, c.is_list, c.is_query, c.query_type, c.html_type, c.dict_type, c.sort AND date_format(create_time,'%y%m%d') &lt;= date_format(#{params.endTime},'%y%m%d')
FROM gen_table t </if>
LEFT JOIN gen_table_column c ON t.table_id = c.table_id order by create_time desc
order by c.sort </select>
</select>
<select id="selectDbTableListByNames" resultMap="GenTableResult">
<insert id="insertGenTable" parameterType="GenTable" useGeneratedKeys="true" keyProperty="tableId"> select table_name, table_comment, create_time, update_time from information_schema.tables
insert into gen_table ( where table_name NOT LIKE 'qrtz_%' and table_name NOT LIKE 'gen_%' and table_schema = (select database())
<if test="tableName != null">table_name,</if> and table_name in
<if test="tableComment != null and tableComment != ''">table_comment,</if> <foreach collection="array" item="name" open="(" separator="," close=")">
<if test="className != null and className != ''">class_name,</if> #{name}
<if test="tplCategory != null and tplCategory != ''">tpl_category,</if> </foreach>
<if test="packageName != null and packageName != ''">package_name,</if> </select>
<if test="moduleName != null and moduleName != ''">module_name,</if>
<if test="businessName != null and businessName != ''">business_name,</if> <select id="selectTableByName" parameterType="String" resultMap="GenTableResult">
<if test="functionName != null and functionName != ''">function_name,</if> select table_name, table_comment, create_time, update_time from information_schema.tables
<if test="functionAuthor != null and functionAuthor != ''">function_author,</if> where table_comment <![CDATA[ <> ]]> '' and table_schema = (select database())
<if test="genType != null and genType != ''">gen_type,</if> and table_name = #{tableName}
<if test="genPath != null and genPath != ''">gen_path,</if> </select>
<if test="remark != null and remark != ''">remark,</if>
<if test="createBy != null and createBy != ''">create_by,</if> <select id="selectGenTableById" parameterType="Long" resultMap="GenTableResult">
create_time SELECT t.table_id, t.table_name, t.table_comment, t.sub_table_name, t.sub_table_fk_name, t.class_name, t.tpl_category, t.package_name, t.module_name, t.business_name, t.function_name, t.function_author, t.gen_type, t.gen_path, t.options, t.remark,
)values( c.column_id, c.column_name, c.column_comment, c.column_type, c.java_type, c.java_field, c.is_pk, c.is_increment, c.is_required, c.is_insert, c.is_edit, c.is_list, c.is_query, c.query_type, c.html_type, c.dict_type, c.sort
<if test="tableName != null">#{tableName},</if> FROM gen_table t
<if test="tableComment != null and tableComment != ''">#{tableComment},</if> LEFT JOIN gen_table_column c ON t.table_id = c.table_id
<if test="className != null and className != ''">#{className},</if> where t.table_id = #{tableId} order by c.sort
<if test="tplCategory != null and tplCategory != ''">#{tplCategory},</if> </select>
<if test="packageName != null and packageName != ''">#{packageName},</if>
<if test="moduleName != null and moduleName != ''">#{moduleName},</if> <select id="selectGenTableByName" parameterType="String" resultMap="GenTableResult">
<if test="businessName != null and businessName != ''">#{businessName},</if> SELECT t.table_id, t.table_name, t.table_comment, t.sub_table_name, t.sub_table_fk_name, t.class_name, t.tpl_category, t.package_name, t.module_name, t.business_name, t.function_name, t.function_author, t.gen_type, t.gen_path, t.options, t.remark,
<if test="functionName != null and functionName != ''">#{functionName},</if> c.column_id, c.column_name, c.column_comment, c.column_type, c.java_type, c.java_field, c.is_pk, c.is_increment, c.is_required, c.is_insert, c.is_edit, c.is_list, c.is_query, c.query_type, c.html_type, c.dict_type, c.sort
<if test="functionAuthor != null and functionAuthor != ''">#{functionAuthor},</if> FROM gen_table t
<if test="genType != null and genType != ''">#{genType},</if> LEFT JOIN gen_table_column c ON t.table_id = c.table_id
<if test="genPath != null and genPath != ''">#{genPath},</if> where t.table_name = #{tableName} order by c.sort
<if test="remark != null and remark != ''">#{remark},</if> </select>
<if test="createBy != null and createBy != ''">#{createBy},</if>
sysdate() <select id="selectGenTableAll" parameterType="String" resultMap="GenTableResult">
) SELECT t.table_id, t.table_name, t.table_comment, t.sub_table_name, t.sub_table_fk_name, t.class_name, t.tpl_category, t.package_name, t.module_name, t.business_name, t.function_name, t.function_author, t.options, t.remark,
</insert> c.column_id, c.column_name, c.column_comment, c.column_type, c.java_type, c.java_field, c.is_pk, c.is_increment, c.is_required, c.is_insert, c.is_edit, c.is_list, c.is_query, c.query_type, c.html_type, c.dict_type, c.sort
FROM gen_table t
<update id="updateGenTable" parameterType="GenTable"> LEFT JOIN gen_table_column c ON t.table_id = c.table_id
update gen_table order by c.sort
<set> </select>
<if test="tableName != null">table_name = #{tableName},</if>
<if test="tableComment != null and tableComment != ''">table_comment = #{tableComment},</if> </mapper>
<if test="subTableName != null">sub_table_name = #{subTableName},</if>
<if test="subTableFkName != null">sub_table_fk_name = #{subTableFkName},</if>
<if test="className != null and className != ''">class_name = #{className},</if>
<if test="functionAuthor != null and functionAuthor != ''">function_author = #{functionAuthor},</if>
<if test="genType != null and genType != ''">gen_type = #{genType},</if>
<if test="genPath != null and genPath != ''">gen_path = #{genPath},</if>
<if test="tplCategory != null and tplCategory != ''">tpl_category = #{tplCategory},</if>
<if test="packageName != null and packageName != ''">package_name = #{packageName},</if>
<if test="moduleName != null and moduleName != ''">module_name = #{moduleName},</if>
<if test="businessName != null and businessName != ''">business_name = #{businessName},</if>
<if test="functionName != null and functionName != ''">function_name = #{functionName},</if>
<if test="options != null and options != ''">options = #{options},</if>
<if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if>
<if test="remark != null">remark = #{remark},</if>
update_time = sysdate()
</set>
where table_id = #{tableId}
</update>
<delete id="deleteGenTableByIds" parameterType="Long">
delete from gen_table where table_id in
<foreach collection="array" item="tableId" open="(" separator="," close=")">
#{tableId}
</foreach>
</delete>
</mapper>

View File

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

View File

@ -53,12 +53,6 @@
<artifactId>ruoyi-common-datasource</artifactId> <artifactId>ruoyi-common-datasource</artifactId>
</dependency> </dependency>
<!-- RuoYi Common DataScope -->
<dependency>
<groupId>com.ruoyi</groupId>
<artifactId>ruoyi-common-datascope</artifactId>
</dependency>
<!-- RuoYi Common Log --> <!-- RuoYi Common Log -->
<dependency> <dependency>
<groupId>com.ruoyi</groupId> <groupId>com.ruoyi</groupId>
@ -81,6 +75,11 @@
<artifactId>ruoyi-common-web</artifactId> <artifactId>ruoyi-common-web</artifactId>
</dependency> </dependency>
<dependency>
<groupId>com.ruoyi</groupId>
<artifactId>ruoyi-common-mybatis</artifactId>
</dependency>
<dependency> <dependency>
<groupId>com.ruoyi</groupId> <groupId>com.ruoyi</groupId>
<artifactId>ruoyi-common-dubbo</artifactId> <artifactId>ruoyi-common-dubbo</artifactId>

View File

@ -3,16 +3,16 @@ package com.ruoyi.system.controller;
import com.ruoyi.common.core.constant.UserConstants; import com.ruoyi.common.core.constant.UserConstants;
import com.ruoyi.common.core.web.controller.BaseController; import com.ruoyi.common.core.web.controller.BaseController;
import com.ruoyi.common.core.web.domain.AjaxResult; import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.core.web.page.TableDataInfo;
import com.ruoyi.common.excel.utils.ExcelUtil; import com.ruoyi.common.excel.utils.ExcelUtil;
import com.ruoyi.common.log.annotation.Log; import com.ruoyi.common.log.annotation.Log;
import com.ruoyi.common.log.enums.BusinessType; import com.ruoyi.common.log.enums.BusinessType;
import com.ruoyi.common.mybatis.core.page.PageQuery;
import com.ruoyi.common.mybatis.core.page.TableDataInfo;
import com.ruoyi.common.security.annotation.RequiresPermissions; import com.ruoyi.common.security.annotation.RequiresPermissions;
import com.ruoyi.common.security.utils.SecurityUtils; import com.ruoyi.common.security.utils.SecurityUtils;
import com.ruoyi.system.domain.SysConfig; import com.ruoyi.system.domain.SysConfig;
import com.ruoyi.system.service.ISysConfigService; import com.ruoyi.system.service.ISysConfigService;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
@ -24,7 +24,7 @@ import java.util.List;
* *
* @author ruoyi * @author ruoyi
*/ */
@RequiredArgsConstructor(onConstructor_ = @Autowired) @RequiredArgsConstructor
@RestController @RestController
@RequestMapping("/config") @RequestMapping("/config")
public class SysConfigController extends BaseController { public class SysConfigController extends BaseController {
@ -36,10 +36,8 @@ public class SysConfigController extends BaseController {
*/ */
@RequiresPermissions("system:config:list") @RequiresPermissions("system:config:list")
@GetMapping("/list") @GetMapping("/list")
public TableDataInfo list(SysConfig config) { public TableDataInfo<SysConfig> list(SysConfig config, PageQuery pageQuery) {
startPage(); return configService.selectPageConfigList(config, pageQuery);
List<SysConfig> list = configService.selectConfigList(config);
return getDataTable(list);
} }
@Log(title = "参数管理", businessType = BusinessType.EXPORT) @Log(title = "参数管理", businessType = BusinessType.EXPORT)

View File

@ -1,141 +1,133 @@
package com.ruoyi.system.controller; package com.ruoyi.system.controller;
import com.ruoyi.common.core.constant.UserConstants; import cn.hutool.core.util.ArrayUtil;
import com.ruoyi.common.core.utils.StringUtils; import com.ruoyi.common.core.constant.UserConstants;
import com.ruoyi.common.core.web.controller.BaseController; import com.ruoyi.common.core.utils.StringUtils;
import com.ruoyi.common.core.web.domain.AjaxResult; import com.ruoyi.common.core.web.controller.BaseController;
import com.ruoyi.common.log.annotation.Log; import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.log.enums.BusinessType; import com.ruoyi.common.log.annotation.Log;
import com.ruoyi.common.security.annotation.RequiresPermissions; import com.ruoyi.common.log.enums.BusinessType;
import com.ruoyi.common.security.utils.SecurityUtils; import com.ruoyi.common.security.annotation.RequiresPermissions;
import com.ruoyi.system.api.domain.SysDept; import com.ruoyi.common.security.utils.SecurityUtils;
import com.ruoyi.system.service.ISysDeptService; import com.ruoyi.system.api.domain.SysDept;
import lombok.RequiredArgsConstructor; import com.ruoyi.system.service.ISysDeptService;
import org.apache.commons.lang3.ArrayUtils; import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.validation.annotation.Validated;
import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Iterator;
import java.util.List; /**
*
/** *
* * @author ruoyi
* */
* @author ruoyi @RequiredArgsConstructor
*/ @RestController
@RequiredArgsConstructor(onConstructor_ = @Autowired) @RequestMapping("/dept")
@RestController public class SysDeptController extends BaseController {
@RequestMapping("/dept")
public class SysDeptController extends BaseController { private final ISysDeptService deptService;
private final ISysDeptService deptService; /**
*
/** */
* @RequiresPermissions("system:dept:list")
*/ @GetMapping("/list")
@RequiresPermissions("system:dept:list") public AjaxResult list(SysDept dept) {
@GetMapping("/list") List<SysDept> depts = deptService.selectDeptList(dept);
public AjaxResult list(SysDept dept) { return AjaxResult.success(depts);
List<SysDept> depts = deptService.selectDeptList(dept); }
return AjaxResult.success(depts);
} /**
*
/** */
* @RequiresPermissions("system:dept:list")
*/ @GetMapping("/list/exclude/{deptId}")
@RequiresPermissions("system:dept:list") public AjaxResult excludeChild(@PathVariable(value = "deptId", required = false) Long deptId) {
@GetMapping("/list/exclude/{deptId}") List<SysDept> depts = deptService.selectDeptList(new SysDept());
public AjaxResult excludeChild(@PathVariable(value = "deptId", required = false) Long deptId) { depts.removeIf(d -> d.getDeptId().equals(deptId)
List<SysDept> depts = deptService.selectDeptList(new SysDept()); || ArrayUtil.contains(StringUtils.split(d.getAncestors(), ","), deptId + ""));
Iterator<SysDept> it = depts.iterator(); return AjaxResult.success(depts);
while (it.hasNext()) { }
SysDept d = (SysDept) it.next();
if (d.getDeptId().intValue() == deptId /**
|| ArrayUtils.contains(StringUtils.split(d.getAncestors(), ","), deptId + "")) { *
it.remove(); */
} @RequiresPermissions("system:dept:query")
} @GetMapping(value = "/{deptId}")
return AjaxResult.success(depts); public AjaxResult getInfo(@PathVariable Long deptId) {
} deptService.checkDeptDataScope(deptId);
return AjaxResult.success(deptService.selectDeptById(deptId));
/** }
*
*/ /**
@RequiresPermissions("system:dept:query") *
@GetMapping(value = "/{deptId}") */
public AjaxResult getInfo(@PathVariable Long deptId) { @GetMapping("/treeselect")
deptService.checkDeptDataScope(deptId); public AjaxResult treeselect(SysDept dept) {
return AjaxResult.success(deptService.selectDeptById(deptId)); List<SysDept> depts = deptService.selectDeptList(dept);
} return AjaxResult.success(deptService.buildDeptTreeSelect(depts));
}
/**
* /**
*/ *
@GetMapping("/treeselect") */
public AjaxResult treeselect(SysDept dept) { @GetMapping(value = "/roleDeptTreeselect/{roleId}")
List<SysDept> depts = deptService.selectDeptList(dept); public AjaxResult roleDeptTreeselect(@PathVariable("roleId") Long roleId) {
return AjaxResult.success(deptService.buildDeptTreeSelect(depts)); List<SysDept> depts = deptService.selectDeptList(new SysDept());
} AjaxResult ajax = AjaxResult.success();
ajax.put("checkedKeys", deptService.selectDeptListByRoleId(roleId));
/** ajax.put("depts", deptService.buildDeptTreeSelect(depts));
* return ajax;
*/ }
@GetMapping(value = "/roleDeptTreeselect/{roleId}")
public AjaxResult roleDeptTreeselect(@PathVariable("roleId") Long roleId) { /**
List<SysDept> depts = deptService.selectDeptList(new SysDept()); *
AjaxResult ajax = AjaxResult.success(); */
ajax.put("checkedKeys", deptService.selectDeptListByRoleId(roleId)); @RequiresPermissions("system:dept:add")
ajax.put("depts", deptService.buildDeptTreeSelect(depts)); @Log(title = "部门管理", businessType = BusinessType.INSERT)
return ajax; @PostMapping
} public AjaxResult add(@Validated @RequestBody SysDept dept) {
if (UserConstants.NOT_UNIQUE.equals(deptService.checkDeptNameUnique(dept))) {
/** return AjaxResult.error("新增部门'" + dept.getDeptName() + "'失败,部门名称已存在");
* }
*/ dept.setCreateBy(SecurityUtils.getUsername());
@RequiresPermissions("system:dept:add") return toAjax(deptService.insertDept(dept));
@Log(title = "部门管理", businessType = BusinessType.INSERT) }
@PostMapping
public AjaxResult add(@Validated @RequestBody SysDept dept) { /**
if (UserConstants.NOT_UNIQUE.equals(deptService.checkDeptNameUnique(dept))) { *
return AjaxResult.error("新增部门'" + dept.getDeptName() + "'失败,部门名称已存在"); */
} @RequiresPermissions("system:dept:edit")
dept.setCreateBy(SecurityUtils.getUsername()); @Log(title = "部门管理", businessType = BusinessType.UPDATE)
return toAjax(deptService.insertDept(dept)); @PutMapping
} public AjaxResult edit(@Validated @RequestBody SysDept dept) {
if (UserConstants.NOT_UNIQUE.equals(deptService.checkDeptNameUnique(dept))) {
/** return AjaxResult.error("修改部门'" + dept.getDeptName() + "'失败,部门名称已存在");
* } else if (dept.getParentId().equals(dept.getDeptId())) {
*/ return AjaxResult.error("修改部门'" + dept.getDeptName() + "'失败,上级部门不能是自己");
@RequiresPermissions("system:dept:edit") } else if (StringUtils.equals(UserConstants.DEPT_DISABLE, dept.getStatus())
@Log(title = "部门管理", businessType = BusinessType.UPDATE) && deptService.selectNormalChildrenDeptById(dept.getDeptId()) > 0) {
@PutMapping return AjaxResult.error("该部门包含未停用的子部门!");
public AjaxResult edit(@Validated @RequestBody SysDept dept) { }
if (UserConstants.NOT_UNIQUE.equals(deptService.checkDeptNameUnique(dept))) { dept.setUpdateBy(SecurityUtils.getUsername());
return AjaxResult.error("修改部门'" + dept.getDeptName() + "'失败,部门名称已存在"); return toAjax(deptService.updateDept(dept));
} else if (dept.getParentId().equals(dept.getDeptId())) { }
return AjaxResult.error("修改部门'" + dept.getDeptName() + "'失败,上级部门不能是自己");
} else if (StringUtils.equals(UserConstants.DEPT_DISABLE, dept.getStatus()) /**
&& deptService.selectNormalChildrenDeptById(dept.getDeptId()) > 0) { *
return AjaxResult.error("该部门包含未停用的子部门!"); */
} @RequiresPermissions("system:dept:remove")
dept.setUpdateBy(SecurityUtils.getUsername()); @Log(title = "部门管理", businessType = BusinessType.DELETE)
return toAjax(deptService.updateDept(dept)); @DeleteMapping("/{deptId}")
} public AjaxResult remove(@PathVariable Long deptId) {
if (deptService.hasChildByDeptId(deptId)) {
/** return AjaxResult.error("存在下级部门,不允许删除");
* }
*/ if (deptService.checkDeptExistUser(deptId)) {
@RequiresPermissions("system:dept:remove") return AjaxResult.error("部门存在用户,不允许删除");
@Log(title = "部门管理", businessType = BusinessType.DELETE) }
@DeleteMapping("/{deptId}") return toAjax(deptService.deleteDeptById(deptId));
public AjaxResult remove(@PathVariable Long deptId) { }
if (deptService.hasChildByDeptId(deptId)) { }
return AjaxResult.error("存在下级部门,不允许删除");
}
if (deptService.checkDeptExistUser(deptId)) {
return AjaxResult.error("部门存在用户,不允许删除");
}
return toAjax(deptService.deleteDeptById(deptId));
}
}

View File

@ -3,17 +3,17 @@ package com.ruoyi.system.controller;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import com.ruoyi.common.core.web.controller.BaseController; import com.ruoyi.common.core.web.controller.BaseController;
import com.ruoyi.common.core.web.domain.AjaxResult; import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.core.web.page.TableDataInfo;
import com.ruoyi.common.excel.utils.ExcelUtil; import com.ruoyi.common.excel.utils.ExcelUtil;
import com.ruoyi.common.log.annotation.Log; import com.ruoyi.common.log.annotation.Log;
import com.ruoyi.common.log.enums.BusinessType; import com.ruoyi.common.log.enums.BusinessType;
import com.ruoyi.common.mybatis.core.page.PageQuery;
import com.ruoyi.common.mybatis.core.page.TableDataInfo;
import com.ruoyi.common.security.annotation.RequiresPermissions; import com.ruoyi.common.security.annotation.RequiresPermissions;
import com.ruoyi.common.security.utils.SecurityUtils; import com.ruoyi.common.security.utils.SecurityUtils;
import com.ruoyi.system.api.domain.SysDictData; import com.ruoyi.system.api.domain.SysDictData;
import com.ruoyi.system.service.ISysDictDataService; import com.ruoyi.system.service.ISysDictDataService;
import com.ruoyi.system.service.ISysDictTypeService; import com.ruoyi.system.service.ISysDictTypeService;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
@ -26,7 +26,7 @@ import java.util.List;
* *
* @author ruoyi * @author ruoyi
*/ */
@RequiredArgsConstructor(onConstructor_ = @Autowired) @RequiredArgsConstructor
@RestController @RestController
@RequestMapping("/dict/data") @RequestMapping("/dict/data")
public class SysDictDataController extends BaseController { public class SysDictDataController extends BaseController {
@ -36,10 +36,8 @@ public class SysDictDataController extends BaseController {
@RequiresPermissions("system:dict:list") @RequiresPermissions("system:dict:list")
@GetMapping("/list") @GetMapping("/list")
public TableDataInfo list(SysDictData dictData) { public TableDataInfo<SysDictData> list(SysDictData dictData, PageQuery pageQuery) {
startPage(); return dictDataService.selectPageDictDataList(dictData, pageQuery);
List<SysDictData> list = dictDataService.selectDictDataList(dictData);
return getDataTable(list);
} }
@Log(title = "字典数据", businessType = BusinessType.EXPORT) @Log(title = "字典数据", businessType = BusinessType.EXPORT)

View File

@ -3,16 +3,16 @@ package com.ruoyi.system.controller;
import com.ruoyi.common.core.constant.UserConstants; import com.ruoyi.common.core.constant.UserConstants;
import com.ruoyi.common.core.web.controller.BaseController; import com.ruoyi.common.core.web.controller.BaseController;
import com.ruoyi.common.core.web.domain.AjaxResult; import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.core.web.page.TableDataInfo;
import com.ruoyi.common.excel.utils.ExcelUtil; import com.ruoyi.common.excel.utils.ExcelUtil;
import com.ruoyi.common.log.annotation.Log; import com.ruoyi.common.log.annotation.Log;
import com.ruoyi.common.log.enums.BusinessType; import com.ruoyi.common.log.enums.BusinessType;
import com.ruoyi.common.mybatis.core.page.PageQuery;
import com.ruoyi.common.mybatis.core.page.TableDataInfo;
import com.ruoyi.common.security.annotation.RequiresPermissions; import com.ruoyi.common.security.annotation.RequiresPermissions;
import com.ruoyi.common.security.utils.SecurityUtils; import com.ruoyi.common.security.utils.SecurityUtils;
import com.ruoyi.system.api.domain.SysDictType; import com.ruoyi.system.api.domain.SysDictType;
import com.ruoyi.system.service.ISysDictTypeService; import com.ruoyi.system.service.ISysDictTypeService;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
@ -24,7 +24,7 @@ import java.util.List;
* *
* @author ruoyi * @author ruoyi
*/ */
@RequiredArgsConstructor(onConstructor_ = @Autowired) @RequiredArgsConstructor
@RestController @RestController
@RequestMapping("/dict/type") @RequestMapping("/dict/type")
public class SysDictTypeController extends BaseController { public class SysDictTypeController extends BaseController {
@ -33,10 +33,8 @@ public class SysDictTypeController extends BaseController {
@RequiresPermissions("system:dict:list") @RequiresPermissions("system:dict:list")
@GetMapping("/list") @GetMapping("/list")
public TableDataInfo list(SysDictType dictType) { public TableDataInfo<SysDictType> list(SysDictType dictType, PageQuery pageQuery) {
startPage(); return dictTypeService.selectPageDictTypeList(dictType, pageQuery);
List<SysDictType> list = dictTypeService.selectDictTypeList(dictType);
return getDataTable(list);
} }
@Log(title = "字典类型", businessType = BusinessType.EXPORT) @Log(title = "字典类型", businessType = BusinessType.EXPORT)

View File

@ -2,16 +2,16 @@ package com.ruoyi.system.controller;
import com.ruoyi.common.core.web.controller.BaseController; import com.ruoyi.common.core.web.controller.BaseController;
import com.ruoyi.common.core.web.domain.AjaxResult; import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.core.web.page.TableDataInfo;
import com.ruoyi.common.excel.utils.ExcelUtil; import com.ruoyi.common.excel.utils.ExcelUtil;
import com.ruoyi.common.log.annotation.Log; import com.ruoyi.common.log.annotation.Log;
import com.ruoyi.common.log.enums.BusinessType; import com.ruoyi.common.log.enums.BusinessType;
import com.ruoyi.common.mybatis.core.page.PageQuery;
import com.ruoyi.common.mybatis.core.page.TableDataInfo;
import com.ruoyi.common.security.annotation.InnerAuth; import com.ruoyi.common.security.annotation.InnerAuth;
import com.ruoyi.common.security.annotation.RequiresPermissions; import com.ruoyi.common.security.annotation.RequiresPermissions;
import com.ruoyi.system.api.domain.SysLogininfor; import com.ruoyi.system.api.domain.SysLogininfor;
import com.ruoyi.system.service.ISysLogininforService; import com.ruoyi.system.service.ISysLogininforService;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
@ -22,7 +22,7 @@ import java.util.List;
* *
* @author ruoyi * @author ruoyi
*/ */
@RequiredArgsConstructor(onConstructor_ = @Autowired) @RequiredArgsConstructor
@RestController @RestController
@RequestMapping("/logininfor") @RequestMapping("/logininfor")
public class SysLogininforController extends BaseController { public class SysLogininforController extends BaseController {
@ -31,10 +31,8 @@ public class SysLogininforController extends BaseController {
@RequiresPermissions("system:logininfor:list") @RequiresPermissions("system:logininfor:list")
@GetMapping("/list") @GetMapping("/list")
public TableDataInfo list(SysLogininfor logininfor) { public TableDataInfo<SysLogininfor> list(SysLogininfor logininfor, PageQuery pageQuery) {
startPage(); return logininforService.selectPageLogininforList(logininfor, pageQuery);
List<SysLogininfor> list = logininforService.selectLogininforList(logininfor);
return getDataTable(list);
} }
@Log(title = "登录日志", businessType = BusinessType.EXPORT) @Log(title = "登录日志", businessType = BusinessType.EXPORT)

View File

@ -1,136 +1,135 @@
package com.ruoyi.system.controller; package com.ruoyi.system.controller;
import com.ruoyi.common.core.constant.UserConstants; import com.ruoyi.common.core.constant.UserConstants;
import com.ruoyi.common.core.utils.StringUtils; import com.ruoyi.common.core.utils.StringUtils;
import com.ruoyi.common.core.web.controller.BaseController; import com.ruoyi.common.core.web.controller.BaseController;
import com.ruoyi.common.core.web.domain.AjaxResult; import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.log.annotation.Log; import com.ruoyi.common.log.annotation.Log;
import com.ruoyi.common.log.enums.BusinessType; import com.ruoyi.common.log.enums.BusinessType;
import com.ruoyi.common.security.annotation.RequiresPermissions; import com.ruoyi.common.security.annotation.RequiresPermissions;
import com.ruoyi.common.security.utils.SecurityUtils; import com.ruoyi.common.security.utils.SecurityUtils;
import com.ruoyi.system.domain.SysMenu; import com.ruoyi.system.domain.SysMenu;
import com.ruoyi.system.service.ISysMenuService; import com.ruoyi.system.service.ISysMenuService;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.validation.annotation.Validated;
import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.List;
/**
/** *
* *
* * @author ruoyi
* @author ruoyi */
*/ @RequiredArgsConstructor
@RequiredArgsConstructor(onConstructor_ = @Autowired) @RestController
@RestController @RequestMapping("/menu")
@RequestMapping("/menu") public class SysMenuController extends BaseController {
public class SysMenuController extends BaseController {
private final ISysMenuService menuService;
private final ISysMenuService menuService;
/**
/** *
* */
*/ @RequiresPermissions("system:menu:list")
@RequiresPermissions("system:menu:list") @GetMapping("/list")
@GetMapping("/list") public AjaxResult list(SysMenu menu) {
public AjaxResult list(SysMenu menu) { Long userId = SecurityUtils.getUserId();
Long userId = SecurityUtils.getUserId(); List<SysMenu> menus = menuService.selectMenuList(menu, userId);
List<SysMenu> menus = menuService.selectMenuList(menu, userId); return AjaxResult.success(menus);
return AjaxResult.success(menus); }
}
/**
/** *
* */
*/ @RequiresPermissions("system:menu:query")
@RequiresPermissions("system:menu:query") @GetMapping(value = "/{menuId}")
@GetMapping(value = "/{menuId}") public AjaxResult getInfo(@PathVariable Long menuId) {
public AjaxResult getInfo(@PathVariable Long menuId) { return AjaxResult.success(menuService.selectMenuById(menuId));
return AjaxResult.success(menuService.selectMenuById(menuId)); }
}
/**
/** *
* */
*/ @GetMapping("/treeselect")
@GetMapping("/treeselect") public AjaxResult treeselect(SysMenu menu) {
public AjaxResult treeselect(SysMenu menu) { Long userId = SecurityUtils.getUserId();
Long userId = SecurityUtils.getUserId(); List<SysMenu> menus = menuService.selectMenuList(menu, userId);
List<SysMenu> menus = menuService.selectMenuList(menu, userId); return AjaxResult.success(menuService.buildMenuTreeSelect(menus));
return AjaxResult.success(menuService.buildMenuTreeSelect(menus)); }
}
/**
/** *
* */
*/ @GetMapping(value = "/roleMenuTreeselect/{roleId}")
@GetMapping(value = "/roleMenuTreeselect/{roleId}") public AjaxResult roleMenuTreeselect(@PathVariable("roleId") Long roleId) {
public AjaxResult roleMenuTreeselect(@PathVariable("roleId") Long roleId) { Long userId = SecurityUtils.getUserId();
Long userId = SecurityUtils.getUserId(); List<SysMenu> menus = menuService.selectMenuList(userId);
List<SysMenu> menus = menuService.selectMenuList(userId); AjaxResult ajax = AjaxResult.success();
AjaxResult ajax = AjaxResult.success(); ajax.put("checkedKeys", menuService.selectMenuListByRoleId(roleId));
ajax.put("checkedKeys", menuService.selectMenuListByRoleId(roleId)); ajax.put("menus", menuService.buildMenuTreeSelect(menus));
ajax.put("menus", menuService.buildMenuTreeSelect(menus)); return ajax;
return ajax; }
}
/**
/** *
* */
*/ @RequiresPermissions("system:menu:add")
@RequiresPermissions("system:menu:add") @Log(title = "菜单管理", businessType = BusinessType.INSERT)
@Log(title = "菜单管理", businessType = BusinessType.INSERT) @PostMapping
@PostMapping public AjaxResult add(@Validated @RequestBody SysMenu menu) {
public AjaxResult add(@Validated @RequestBody SysMenu menu) { if (UserConstants.NOT_UNIQUE.equals(menuService.checkMenuNameUnique(menu))) {
if (UserConstants.NOT_UNIQUE.equals(menuService.checkMenuNameUnique(menu))) { return AjaxResult.error("新增菜单'" + menu.getMenuName() + "'失败,菜单名称已存在");
return AjaxResult.error("新增菜单'" + menu.getMenuName() + "'失败,菜单名称已存在"); } else if (UserConstants.YES_FRAME.equals(menu.getIsFrame()) && !StringUtils.ishttp(menu.getPath())) {
} else if (UserConstants.YES_FRAME.equals(menu.getIsFrame()) && !StringUtils.ishttp(menu.getPath())) { return AjaxResult.error("新增菜单'" + menu.getMenuName() + "'失败地址必须以http(s)://开头");
return AjaxResult.error("新增菜单'" + menu.getMenuName() + "'失败地址必须以http(s)://开头"); }
} menu.setCreateBy(SecurityUtils.getUsername());
menu.setCreateBy(SecurityUtils.getUsername()); return toAjax(menuService.insertMenu(menu));
return toAjax(menuService.insertMenu(menu)); }
}
/**
/** *
* */
*/ @RequiresPermissions("system:menu:edit")
@RequiresPermissions("system:menu:edit") @Log(title = "菜单管理", businessType = BusinessType.UPDATE)
@Log(title = "菜单管理", businessType = BusinessType.UPDATE) @PutMapping
@PutMapping public AjaxResult edit(@Validated @RequestBody SysMenu menu) {
public AjaxResult edit(@Validated @RequestBody SysMenu menu) { if (UserConstants.NOT_UNIQUE.equals(menuService.checkMenuNameUnique(menu))) {
if (UserConstants.NOT_UNIQUE.equals(menuService.checkMenuNameUnique(menu))) { return AjaxResult.error("修改菜单'" + menu.getMenuName() + "'失败,菜单名称已存在");
return AjaxResult.error("修改菜单'" + menu.getMenuName() + "'失败,菜单名称已存在"); } else if (UserConstants.YES_FRAME.equals(menu.getIsFrame()) && !StringUtils.ishttp(menu.getPath())) {
} else if (UserConstants.YES_FRAME.equals(menu.getIsFrame()) && !StringUtils.ishttp(menu.getPath())) { return AjaxResult.error("修改菜单'" + menu.getMenuName() + "'失败地址必须以http(s)://开头");
return AjaxResult.error("修改菜单'" + menu.getMenuName() + "'失败地址必须以http(s)://开头"); } else if (menu.getMenuId().equals(menu.getParentId())) {
} else if (menu.getMenuId().equals(menu.getParentId())) { return AjaxResult.error("修改菜单'" + menu.getMenuName() + "'失败,上级菜单不能选择自己");
return AjaxResult.error("修改菜单'" + menu.getMenuName() + "'失败,上级菜单不能选择自己"); }
} menu.setUpdateBy(SecurityUtils.getUsername());
menu.setUpdateBy(SecurityUtils.getUsername()); return toAjax(menuService.updateMenu(menu));
return toAjax(menuService.updateMenu(menu)); }
}
/**
/** *
* */
*/ @RequiresPermissions("system:menu:remove")
@RequiresPermissions("system:menu:remove") @Log(title = "菜单管理", businessType = BusinessType.DELETE)
@Log(title = "菜单管理", businessType = BusinessType.DELETE) @DeleteMapping("/{menuId}")
@DeleteMapping("/{menuId}") public AjaxResult remove(@PathVariable("menuId") Long menuId) {
public AjaxResult remove(@PathVariable("menuId") Long menuId) { if (menuService.hasChildByMenuId(menuId)) {
if (menuService.hasChildByMenuId(menuId)) { return AjaxResult.error("存在子菜单,不允许删除");
return AjaxResult.error("存在子菜单,不允许删除"); }
} if (menuService.checkMenuExistRole(menuId)) {
if (menuService.checkMenuExistRole(menuId)) { return AjaxResult.error("菜单已分配,不允许删除");
return AjaxResult.error("菜单已分配,不允许删除"); }
} return toAjax(menuService.deleteMenuById(menuId));
return toAjax(menuService.deleteMenuById(menuId)); }
}
/**
/** *
* *
* * @return
* @return */
*/ @GetMapping("getRouters")
@GetMapping("getRouters") public AjaxResult getRouters() {
public AjaxResult getRouters() { Long userId = SecurityUtils.getUserId();
Long userId = SecurityUtils.getUserId(); List<SysMenu> menus = menuService.selectMenuTreeByUserId(userId);
List<SysMenu> menus = menuService.selectMenuTreeByUserId(userId); return AjaxResult.success(menuService.buildMenus(menus));
return AjaxResult.success(menuService.buildMenus(menus)); }
} }
}

View File

@ -1,82 +1,78 @@
package com.ruoyi.system.controller; package com.ruoyi.system.controller;
import com.ruoyi.common.core.web.controller.BaseController; import com.ruoyi.common.core.web.controller.BaseController;
import com.ruoyi.common.core.web.domain.AjaxResult; import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.core.web.page.TableDataInfo; import com.ruoyi.common.log.annotation.Log;
import com.ruoyi.common.log.annotation.Log; import com.ruoyi.common.log.enums.BusinessType;
import com.ruoyi.common.log.enums.BusinessType; import com.ruoyi.common.mybatis.core.page.PageQuery;
import com.ruoyi.common.security.annotation.RequiresPermissions; import com.ruoyi.common.mybatis.core.page.TableDataInfo;
import com.ruoyi.common.security.utils.SecurityUtils; import com.ruoyi.common.security.annotation.RequiresPermissions;
import com.ruoyi.system.domain.SysNotice; import com.ruoyi.common.security.utils.SecurityUtils;
import com.ruoyi.system.service.ISysNoticeService; import com.ruoyi.system.domain.SysNotice;
import lombok.RequiredArgsConstructor; import com.ruoyi.system.service.ISysNoticeService;
import org.springframework.beans.factory.annotation.Autowired; import lombok.RequiredArgsConstructor;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import java.util.List; /**
*
/** *
* * @author ruoyi
* */
* @author ruoyi @RequiredArgsConstructor
*/ @RestController
@RequiredArgsConstructor(onConstructor_ = @Autowired) @RequestMapping("/notice")
@RestController public class SysNoticeController extends BaseController {
@RequestMapping("/notice")
public class SysNoticeController extends BaseController { private final ISysNoticeService noticeService;
private final ISysNoticeService noticeService; /**
*
/** */
* @RequiresPermissions("system:notice:list")
*/ @GetMapping("/list")
@RequiresPermissions("system:notice:list") public TableDataInfo<SysNotice> list(SysNotice notice, PageQuery pageQuery) {
@GetMapping("/list") return noticeService.selectPageNoticeList(notice, pageQuery);
public TableDataInfo list(SysNotice notice) { }
startPage();
List<SysNotice> list = noticeService.selectNoticeList(notice); /**
return getDataTable(list); *
} */
@RequiresPermissions("system:notice:query")
/** @GetMapping(value = "/{noticeId}")
* public AjaxResult getInfo(@PathVariable Long noticeId) {
*/ return AjaxResult.success(noticeService.selectNoticeById(noticeId));
@RequiresPermissions("system:notice:query") }
@GetMapping(value = "/{noticeId}")
public AjaxResult getInfo(@PathVariable Long noticeId) { /**
return AjaxResult.success(noticeService.selectNoticeById(noticeId)); *
} */
@RequiresPermissions("system:notice:add")
/** @Log(title = "通知公告", businessType = BusinessType.INSERT)
* @PostMapping
*/ public AjaxResult add(@Validated @RequestBody SysNotice notice) {
@RequiresPermissions("system:notice:add") notice.setCreateBy(SecurityUtils.getUsername());
@Log(title = "通知公告", businessType = BusinessType.INSERT) return toAjax(noticeService.insertNotice(notice));
@PostMapping }
public AjaxResult add(@Validated @RequestBody SysNotice notice) {
notice.setCreateBy(SecurityUtils.getUsername()); /**
return toAjax(noticeService.insertNotice(notice)); *
} */
@RequiresPermissions("system:notice:edit")
/** @Log(title = "通知公告", businessType = BusinessType.UPDATE)
* @PutMapping
*/ public AjaxResult edit(@Validated @RequestBody SysNotice notice) {
@RequiresPermissions("system:notice:edit") notice.setUpdateBy(SecurityUtils.getUsername());
@Log(title = "通知公告", businessType = BusinessType.UPDATE) return toAjax(noticeService.updateNotice(notice));
@PutMapping }
public AjaxResult edit(@Validated @RequestBody SysNotice notice) {
notice.setUpdateBy(SecurityUtils.getUsername()); /**
return toAjax(noticeService.updateNotice(notice)); *
} */
@RequiresPermissions("system:notice:remove")
/** @Log(title = "通知公告", businessType = BusinessType.DELETE)
* @DeleteMapping("/{noticeIds}")
*/ public AjaxResult remove(@PathVariable Long[] noticeIds) {
@RequiresPermissions("system:notice:remove") return toAjax(noticeService.deleteNoticeByIds(noticeIds));
@Log(title = "通知公告", businessType = BusinessType.DELETE) }
@DeleteMapping("/{noticeIds}") }
public AjaxResult remove(@PathVariable Long[] noticeIds) {
return toAjax(noticeService.deleteNoticeByIds(noticeIds));
}
}

View File

@ -2,16 +2,16 @@ package com.ruoyi.system.controller;
import com.ruoyi.common.core.web.controller.BaseController; import com.ruoyi.common.core.web.controller.BaseController;
import com.ruoyi.common.core.web.domain.AjaxResult; import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.core.web.page.TableDataInfo;
import com.ruoyi.common.excel.utils.ExcelUtil; import com.ruoyi.common.excel.utils.ExcelUtil;
import com.ruoyi.common.log.annotation.Log; import com.ruoyi.common.log.annotation.Log;
import com.ruoyi.common.log.enums.BusinessType; import com.ruoyi.common.log.enums.BusinessType;
import com.ruoyi.common.mybatis.core.page.PageQuery;
import com.ruoyi.common.mybatis.core.page.TableDataInfo;
import com.ruoyi.common.security.annotation.InnerAuth; import com.ruoyi.common.security.annotation.InnerAuth;
import com.ruoyi.common.security.annotation.RequiresPermissions; import com.ruoyi.common.security.annotation.RequiresPermissions;
import com.ruoyi.system.api.domain.SysOperLog; import com.ruoyi.system.api.domain.SysOperLog;
import com.ruoyi.system.service.ISysOperLogService; import com.ruoyi.system.service.ISysOperLogService;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
@ -22,7 +22,7 @@ import java.util.List;
* *
* @author ruoyi * @author ruoyi
*/ */
@RequiredArgsConstructor(onConstructor_ = @Autowired) @RequiredArgsConstructor
@RestController @RestController
@RequestMapping("/operlog") @RequestMapping("/operlog")
public class SysOperlogController extends BaseController { public class SysOperlogController extends BaseController {
@ -30,10 +30,8 @@ public class SysOperlogController extends BaseController {
@RequiresPermissions("system:operlog:list") @RequiresPermissions("system:operlog:list")
@GetMapping("/list") @GetMapping("/list")
public TableDataInfo list(SysOperLog operLog) { public TableDataInfo<SysOperLog> list(SysOperLog operLog, PageQuery pageQuery) {
startPage(); return operLogService.selectPageOperLogList(operLog, pageQuery);
List<SysOperLog> list = operLogService.selectOperLogList(operLog);
return getDataTable(list);
} }
@Log(title = "操作日志", businessType = BusinessType.EXPORT) @Log(title = "操作日志", businessType = BusinessType.EXPORT)

View File

@ -3,16 +3,16 @@ package com.ruoyi.system.controller;
import com.ruoyi.common.core.constant.UserConstants; import com.ruoyi.common.core.constant.UserConstants;
import com.ruoyi.common.core.web.controller.BaseController; import com.ruoyi.common.core.web.controller.BaseController;
import com.ruoyi.common.core.web.domain.AjaxResult; import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.core.web.page.TableDataInfo;
import com.ruoyi.common.excel.utils.ExcelUtil; import com.ruoyi.common.excel.utils.ExcelUtil;
import com.ruoyi.common.log.annotation.Log; import com.ruoyi.common.log.annotation.Log;
import com.ruoyi.common.log.enums.BusinessType; import com.ruoyi.common.log.enums.BusinessType;
import com.ruoyi.common.mybatis.core.page.PageQuery;
import com.ruoyi.common.mybatis.core.page.TableDataInfo;
import com.ruoyi.common.security.annotation.RequiresPermissions; import com.ruoyi.common.security.annotation.RequiresPermissions;
import com.ruoyi.common.security.utils.SecurityUtils; import com.ruoyi.common.security.utils.SecurityUtils;
import com.ruoyi.system.domain.SysPost; import com.ruoyi.system.domain.SysPost;
import com.ruoyi.system.service.ISysPostService; import com.ruoyi.system.service.ISysPostService;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
@ -24,7 +24,7 @@ import java.util.List;
* *
* @author ruoyi * @author ruoyi
*/ */
@RequiredArgsConstructor(onConstructor_ = @Autowired) @RequiredArgsConstructor
@RestController @RestController
@RequestMapping("/post") @RequestMapping("/post")
public class SysPostController extends BaseController { public class SysPostController extends BaseController {
@ -36,10 +36,8 @@ public class SysPostController extends BaseController {
*/ */
@RequiresPermissions("system:post:list") @RequiresPermissions("system:post:list")
@GetMapping("/list") @GetMapping("/list")
public TableDataInfo list(SysPost post) { public TableDataInfo<SysPost> list(SysPost post, PageQuery pageQuery) {
startPage(); return postService.selectPagePostList(post, pageQuery);
List<SysPost> list = postService.selectPostList(post);
return getDataTable(list);
} }
@Log(title = "岗位管理", businessType = BusinessType.EXPORT) @Log(title = "岗位管理", businessType = BusinessType.EXPORT)

View File

@ -16,7 +16,6 @@ import com.ruoyi.system.api.model.LoginUser;
import com.ruoyi.system.service.ISysUserService; import com.ruoyi.system.service.ISysUserService;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.apache.dubbo.config.annotation.DubboReference; import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
@ -27,7 +26,7 @@ import java.io.IOException;
* *
* @author ruoyi * @author ruoyi
*/ */
@RequiredArgsConstructor(onConstructor_ = @Autowired) @RequiredArgsConstructor
@RestController @RestController
@RequestMapping("/user/profile") @RequestMapping("/user/profile")
public class SysProfileController extends BaseController { public class SysProfileController extends BaseController {

View File

@ -3,10 +3,11 @@ package com.ruoyi.system.controller;
import com.ruoyi.common.core.constant.UserConstants; import com.ruoyi.common.core.constant.UserConstants;
import com.ruoyi.common.core.web.controller.BaseController; import com.ruoyi.common.core.web.controller.BaseController;
import com.ruoyi.common.core.web.domain.AjaxResult; import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.core.web.page.TableDataInfo;
import com.ruoyi.common.excel.utils.ExcelUtil; import com.ruoyi.common.excel.utils.ExcelUtil;
import com.ruoyi.common.log.annotation.Log; import com.ruoyi.common.log.annotation.Log;
import com.ruoyi.common.log.enums.BusinessType; import com.ruoyi.common.log.enums.BusinessType;
import com.ruoyi.common.mybatis.core.page.PageQuery;
import com.ruoyi.common.mybatis.core.page.TableDataInfo;
import com.ruoyi.common.security.annotation.RequiresPermissions; import com.ruoyi.common.security.annotation.RequiresPermissions;
import com.ruoyi.common.security.utils.SecurityUtils; import com.ruoyi.common.security.utils.SecurityUtils;
import com.ruoyi.system.api.domain.SysRole; import com.ruoyi.system.api.domain.SysRole;
@ -15,7 +16,6 @@ import com.ruoyi.system.domain.SysUserRole;
import com.ruoyi.system.service.ISysRoleService; import com.ruoyi.system.service.ISysRoleService;
import com.ruoyi.system.service.ISysUserService; import com.ruoyi.system.service.ISysUserService;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
@ -27,7 +27,7 @@ import java.util.List;
* *
* @author ruoyi * @author ruoyi
*/ */
@RequiredArgsConstructor(onConstructor_ = @Autowired) @RequiredArgsConstructor
@RestController @RestController
@RequestMapping("/role") @RequestMapping("/role")
public class SysRoleController extends BaseController { public class SysRoleController extends BaseController {
@ -37,10 +37,8 @@ public class SysRoleController extends BaseController {
@RequiresPermissions("system:role:list") @RequiresPermissions("system:role:list")
@GetMapping("/list") @GetMapping("/list")
public TableDataInfo list(SysRole role) { public TableDataInfo<SysRole> list(SysRole role, PageQuery pageQuery) {
startPage(); return roleService.selectPageRoleList(role, pageQuery);
List<SysRole> list = roleService.selectRoleList(role);
return getDataTable(list);
} }
@Log(title = "角色管理", businessType = BusinessType.EXPORT) @Log(title = "角色管理", businessType = BusinessType.EXPORT)
@ -142,10 +140,8 @@ public class SysRoleController extends BaseController {
*/ */
@RequiresPermissions("system:role:list") @RequiresPermissions("system:role:list")
@GetMapping("/authUser/allocatedList") @GetMapping("/authUser/allocatedList")
public TableDataInfo allocatedList(SysUser user) { public TableDataInfo<SysUser> allocatedList(SysUser user, PageQuery pageQuery) {
startPage(); return userService.selectAllocatedList(user, pageQuery);
List<SysUser> list = userService.selectAllocatedList(user);
return getDataTable(list);
} }
/** /**
@ -153,10 +149,8 @@ public class SysRoleController extends BaseController {
*/ */
@RequiresPermissions("system:role:list") @RequiresPermissions("system:role:list")
@GetMapping("/authUser/unallocatedList") @GetMapping("/authUser/unallocatedList")
public TableDataInfo unallocatedList(SysUser user) { public TableDataInfo<SysUser> unallocatedList(SysUser user, PageQuery pageQuery) {
startPage(); return userService.selectUnallocatedList(user, pageQuery);
List<SysUser> list = userService.selectUnallocatedList(user);
return getDataTable(list);
} }
/** /**

View File

@ -6,11 +6,12 @@ import com.ruoyi.common.core.constant.UserConstants;
import com.ruoyi.common.core.utils.StringUtils; import com.ruoyi.common.core.utils.StringUtils;
import com.ruoyi.common.core.web.controller.BaseController; import com.ruoyi.common.core.web.controller.BaseController;
import com.ruoyi.common.core.web.domain.AjaxResult; import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.core.web.page.TableDataInfo;
import com.ruoyi.common.excel.core.ExcelResult; import com.ruoyi.common.excel.core.ExcelResult;
import com.ruoyi.common.excel.utils.ExcelUtil; import com.ruoyi.common.excel.utils.ExcelUtil;
import com.ruoyi.common.log.annotation.Log; import com.ruoyi.common.log.annotation.Log;
import com.ruoyi.common.log.enums.BusinessType; import com.ruoyi.common.log.enums.BusinessType;
import com.ruoyi.common.mybatis.core.page.PageQuery;
import com.ruoyi.common.mybatis.core.page.TableDataInfo;
import com.ruoyi.common.security.annotation.RequiresPermissions; import com.ruoyi.common.security.annotation.RequiresPermissions;
import com.ruoyi.common.security.utils.SecurityUtils; import com.ruoyi.common.security.utils.SecurityUtils;
import com.ruoyi.system.api.domain.SysDept; import com.ruoyi.system.api.domain.SysDept;
@ -19,10 +20,12 @@ import com.ruoyi.system.api.domain.SysUser;
import com.ruoyi.system.domain.vo.SysUserExportVo; import com.ruoyi.system.domain.vo.SysUserExportVo;
import com.ruoyi.system.domain.vo.SysUserImportVo; import com.ruoyi.system.domain.vo.SysUserImportVo;
import com.ruoyi.system.listener.SysUserImportListener; import com.ruoyi.system.listener.SysUserImportListener;
import com.ruoyi.system.service.*; import com.ruoyi.system.service.ISysPermissionService;
import com.ruoyi.system.service.ISysPostService;
import com.ruoyi.system.service.ISysRoleService;
import com.ruoyi.system.service.ISysUserService;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.apache.commons.lang3.ArrayUtils; import org.apache.commons.lang3.ArrayUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
@ -39,7 +42,7 @@ import java.util.stream.Collectors;
* *
* @author ruoyi * @author ruoyi
*/ */
@RequiredArgsConstructor(onConstructor_ = @Autowired) @RequiredArgsConstructor
@RestController @RestController
@RequestMapping("/user") @RequestMapping("/user")
public class SysUserController extends BaseController { public class SysUserController extends BaseController {
@ -48,17 +51,14 @@ public class SysUserController extends BaseController {
private final ISysRoleService roleService; private final ISysRoleService roleService;
private final ISysPostService postService; private final ISysPostService postService;
private final ISysPermissionService permissionService; private final ISysPermissionService permissionService;
private final ISysConfigService configService;
/** /**
* *
*/ */
@RequiresPermissions("system:user:list") @RequiresPermissions("system:user:list")
@GetMapping("/list") @GetMapping("/list")
public TableDataInfo list(SysUser user) { public TableDataInfo<SysUser> list(SysUser user, PageQuery pageQuery) {
startPage(); return userService.selectPageUserList(user, pageQuery);
List<SysUser> list = userService.selectUserList(user);
return getDataTable(list);
} }
@Log(title = "用户管理", businessType = BusinessType.EXPORT) @Log(title = "用户管理", businessType = BusinessType.EXPORT)

View File

@ -1,74 +1,73 @@
package com.ruoyi.system.controller; package com.ruoyi.system.controller;
import com.ruoyi.common.core.constant.CacheConstants; import com.ruoyi.common.core.constant.CacheConstants;
import com.ruoyi.common.core.utils.StringUtils; import com.ruoyi.common.core.utils.StringUtils;
import com.ruoyi.common.core.web.controller.BaseController; import com.ruoyi.common.core.web.controller.BaseController;
import com.ruoyi.common.core.web.domain.AjaxResult; import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.core.web.page.TableDataInfo; import com.ruoyi.common.log.annotation.Log;
import com.ruoyi.common.log.annotation.Log; import com.ruoyi.common.log.enums.BusinessType;
import com.ruoyi.common.log.enums.BusinessType; import com.ruoyi.common.mybatis.core.page.TableDataInfo;
import com.ruoyi.common.redis.utils.RedisUtils; import com.ruoyi.common.redis.utils.RedisUtils;
import com.ruoyi.common.security.annotation.RequiresPermissions; import com.ruoyi.common.security.annotation.RequiresPermissions;
import com.ruoyi.system.api.model.LoginUser; import com.ruoyi.system.api.model.LoginUser;
import com.ruoyi.system.domain.SysUserOnline; import com.ruoyi.system.domain.SysUserOnline;
import com.ruoyi.system.service.ISysUserOnlineService; import com.ruoyi.system.service.ISysUserOnlineService;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.ArrayList; import java.util.Collection;
import java.util.Collection; import java.util.Collections;
import java.util.Collections; import java.util.List;
import java.util.List;
/**
/** * 线
* 线 *
* * @author ruoyi
* @author ruoyi */
*/ @RequiredArgsConstructor
@RequiredArgsConstructor(onConstructor_ = @Autowired) @RestController
@RestController @RequestMapping("/online")
@RequestMapping("/online") public class SysUserOnlineController extends BaseController {
public class SysUserOnlineController extends BaseController {
private final ISysUserOnlineService userOnlineService;
private final ISysUserOnlineService userOnlineService;
@RequiresPermissions("monitor:online:list")
@RequiresPermissions("monitor:online:list") @GetMapping("/list")
@GetMapping("/list") public TableDataInfo<SysUserOnline> list(String ipaddr, String userName) {
public TableDataInfo list(String ipaddr, String userName) { Collection<String> keys = RedisUtils.keys(CacheConstants.LOGIN_TOKEN_KEY + "*");
Collection<String> keys = RedisUtils.keys(CacheConstants.LOGIN_TOKEN_KEY + "*"); List<SysUserOnline> userOnlineList = new ArrayList<SysUserOnline>();
List<SysUserOnline> userOnlineList = new ArrayList<SysUserOnline>(); for (String key : keys) {
for (String key : keys) { LoginUser user = RedisUtils.getCacheObject(key);
LoginUser user = RedisUtils.getCacheObject(key); if (StringUtils.isNotEmpty(ipaddr) && StringUtils.isNotEmpty(userName)) {
if (StringUtils.isNotEmpty(ipaddr) && StringUtils.isNotEmpty(userName)) { if (StringUtils.equals(ipaddr, user.getIpaddr()) && StringUtils.equals(userName, user.getUsername())) {
if (StringUtils.equals(ipaddr, user.getIpaddr()) && StringUtils.equals(userName, user.getUsername())) { userOnlineList.add(userOnlineService.selectOnlineByInfo(ipaddr, userName, user));
userOnlineList.add(userOnlineService.selectOnlineByInfo(ipaddr, userName, user)); }
} } else if (StringUtils.isNotEmpty(ipaddr)) {
} else if (StringUtils.isNotEmpty(ipaddr)) { if (StringUtils.equals(ipaddr, user.getIpaddr())) {
if (StringUtils.equals(ipaddr, user.getIpaddr())) { userOnlineList.add(userOnlineService.selectOnlineByIpaddr(ipaddr, user));
userOnlineList.add(userOnlineService.selectOnlineByIpaddr(ipaddr, user)); }
} } else if (StringUtils.isNotEmpty(userName)) {
} else if (StringUtils.isNotEmpty(userName)) { if (StringUtils.equals(userName, user.getUsername())) {
if (StringUtils.equals(userName, user.getUsername())) { userOnlineList.add(userOnlineService.selectOnlineByUserName(userName, user));
userOnlineList.add(userOnlineService.selectOnlineByUserName(userName, user)); }
} } else {
} else { userOnlineList.add(userOnlineService.loginUserToUserOnline(user));
userOnlineList.add(userOnlineService.loginUserToUserOnline(user)); }
} }
} Collections.reverse(userOnlineList);
Collections.reverse(userOnlineList); userOnlineList.removeAll(Collections.singleton(null));
userOnlineList.removeAll(Collections.singleton(null)); return TableDataInfo.build(userOnlineList);
return getDataTable(userOnlineList); }
}
/**
/** * 退
* 退 */
*/ @RequiresPermissions("monitor:online:forceLogout")
@RequiresPermissions("monitor:online:forceLogout") @Log(title = "在线用户", businessType = BusinessType.FORCE)
@Log(title = "在线用户", businessType = BusinessType.FORCE) @DeleteMapping("/{tokenId}")
@DeleteMapping("/{tokenId}") public AjaxResult forceLogout(@PathVariable String tokenId) {
public AjaxResult forceLogout(@PathVariable String tokenId) { RedisUtils.deleteObject(CacheConstants.LOGIN_TOKEN_KEY + tokenId);
RedisUtils.deleteObject(CacheConstants.LOGIN_TOKEN_KEY + tokenId); return AjaxResult.success();
return AjaxResult.success(); }
} }
}

View File

@ -2,6 +2,8 @@ package com.ruoyi.system.domain;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty; import com.alibaba.excel.annotation.ExcelProperty;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.ruoyi.common.core.web.domain.BaseEntity; import com.ruoyi.common.core.web.domain.BaseEntity;
import com.ruoyi.common.excel.annotation.ExcelDictFormat; import com.ruoyi.common.excel.annotation.ExcelDictFormat;
import com.ruoyi.common.excel.convert.ExcelDictConvert; import com.ruoyi.common.excel.convert.ExcelDictConvert;
@ -9,7 +11,7 @@ import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors; import lombok.NoArgsConstructor;
import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Size; import javax.validation.constraints.Size;
@ -22,6 +24,8 @@ import javax.validation.constraints.Size;
@Data @Data
@EqualsAndHashCode(callSuper = true) @EqualsAndHashCode(callSuper = true)
@NoArgsConstructor
@TableName("sys_config")
@ExcelIgnoreUnannotated @ExcelIgnoreUnannotated
@ApiModel("参数配置业务对象") @ApiModel("参数配置业务对象")
public class SysConfig extends BaseEntity { public class SysConfig extends BaseEntity {
@ -31,6 +35,7 @@ public class SysConfig extends BaseEntity {
*/ */
@ApiModelProperty(value = "参数主键") @ApiModelProperty(value = "参数主键")
@ExcelProperty(value = "参数主键") @ExcelProperty(value = "参数主键")
@TableId(value = "config_id")
private Long configId; private Long configId;
/** /**

View File

@ -1,11 +1,14 @@
package com.ruoyi.system.domain; package com.ruoyi.system.domain;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.ruoyi.common.core.web.domain.TreeEntity; import com.ruoyi.common.core.web.domain.TreeEntity;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors; import lombok.NoArgsConstructor;
import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull; import javax.validation.constraints.NotNull;
@ -19,6 +22,8 @@ import javax.validation.constraints.Size;
@Data @Data
@EqualsAndHashCode(callSuper = true) @EqualsAndHashCode(callSuper = true)
@NoArgsConstructor
@TableName("sys_menu")
@ApiModel("菜单权限业务对象") @ApiModel("菜单权限业务对象")
public class SysMenu extends TreeEntity { public class SysMenu extends TreeEntity {
@ -26,6 +31,7 @@ public class SysMenu extends TreeEntity {
* ID * ID
*/ */
@ApiModelProperty(value = "菜单ID") @ApiModelProperty(value = "菜单ID")
@TableId(value = "menu_id")
private Long menuId; private Long menuId;
/** /**
@ -61,6 +67,7 @@ public class SysMenu extends TreeEntity {
* *
*/ */
@ApiModelProperty(value = "路由参数") @ApiModelProperty(value = "路由参数")
@TableField("`query`")
private String query; private String query;
/** /**

View File

@ -1,11 +1,13 @@
package com.ruoyi.system.domain; package com.ruoyi.system.domain;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.ruoyi.common.core.web.domain.BaseEntity; import com.ruoyi.common.core.web.domain.BaseEntity;
import com.ruoyi.common.core.xss.Xss; import com.ruoyi.common.core.xss.Xss;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors; import lombok.NoArgsConstructor;
import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Size; import javax.validation.constraints.Size;
@ -18,12 +20,15 @@ import javax.validation.constraints.Size;
*/ */
@Data @Data
@EqualsAndHashCode(callSuper = true) @EqualsAndHashCode(callSuper = true)
@NoArgsConstructor
@TableName("sys_notice")
public class SysNotice extends BaseEntity { public class SysNotice extends BaseEntity {
/** /**
* ID * ID
*/ */
@ApiModelProperty(value = "公告ID") @ApiModelProperty(value = "公告ID")
@TableId(value = "notice_id")
private Long noticeId; private Long noticeId;
/** /**

View File

@ -2,6 +2,9 @@ package com.ruoyi.system.domain;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty; import com.alibaba.excel.annotation.ExcelProperty;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.ruoyi.common.core.web.domain.BaseEntity; import com.ruoyi.common.core.web.domain.BaseEntity;
import com.ruoyi.common.excel.annotation.ExcelDictFormat; import com.ruoyi.common.excel.annotation.ExcelDictFormat;
import com.ruoyi.common.excel.convert.ExcelDictConvert; import com.ruoyi.common.excel.convert.ExcelDictConvert;
@ -9,7 +12,7 @@ import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors; import lombok.NoArgsConstructor;
import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Size; import javax.validation.constraints.Size;
@ -22,6 +25,8 @@ import javax.validation.constraints.Size;
@Data @Data
@EqualsAndHashCode(callSuper = true) @EqualsAndHashCode(callSuper = true)
@NoArgsConstructor
@TableName("sys_post")
@ExcelIgnoreUnannotated @ExcelIgnoreUnannotated
@ApiModel("岗位信息业务对象") @ApiModel("岗位信息业务对象")
public class SysPost extends BaseEntity { public class SysPost extends BaseEntity {
@ -31,6 +36,7 @@ public class SysPost extends BaseEntity {
*/ */
@ApiModelProperty(value = "岗位序号") @ApiModelProperty(value = "岗位序号")
@ExcelProperty(value = "岗位序号") @ExcelProperty(value = "岗位序号")
@TableId(value = "post_id")
private Long postId; private Long postId;
/** /**
@ -77,6 +83,7 @@ public class SysPost extends BaseEntity {
* *
*/ */
@ApiModelProperty(value = "用户是否存在此岗位标识 默认不存在") @ApiModelProperty(value = "用户是否存在此岗位标识 默认不存在")
@TableField(exist = false)
private boolean flag = false; private boolean flag = false;
} }

View File

@ -1,9 +1,12 @@
package com.ruoyi.system.domain; package com.ruoyi.system.domain;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import lombok.experimental.Accessors; import lombok.NoArgsConstructor;
/** /**
* sys_role_dept * sys_role_dept
@ -12,12 +15,15 @@ import lombok.experimental.Accessors;
*/ */
@Data @Data
@NoArgsConstructor
@TableName("sys_role_dept")
@ApiModel("角色和部门关联") @ApiModel("角色和部门关联")
public class SysRoleDept { public class SysRoleDept {
/** /**
* ID * ID
*/ */
@TableId(type = IdType.INPUT)
@ApiModelProperty(value = "角色ID") @ApiModelProperty(value = "角色ID")
private Long roleId; private Long roleId;

View File

@ -1,9 +1,12 @@
package com.ruoyi.system.domain; package com.ruoyi.system.domain;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import lombok.experimental.Accessors; import lombok.NoArgsConstructor;
/** /**
* sys_role_menu * sys_role_menu
@ -12,12 +15,15 @@ import lombok.experimental.Accessors;
*/ */
@Data @Data
@NoArgsConstructor
@TableName("sys_role_menu")
@ApiModel("角色和菜单关联") @ApiModel("角色和菜单关联")
public class SysRoleMenu { public class SysRoleMenu {
/** /**
* ID * ID
*/ */
@TableId(type = IdType.INPUT)
@ApiModelProperty(value = "角色ID") @ApiModelProperty(value = "角色ID")
private Long roleId; private Long roleId;

View File

@ -3,7 +3,7 @@ package com.ruoyi.system.domain;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import lombok.experimental.Accessors; import lombok.NoArgsConstructor;
/** /**
* 线 * 线
@ -12,6 +12,7 @@ import lombok.experimental.Accessors;
*/ */
@Data @Data
@NoArgsConstructor
@ApiModel("当前在线会话业务对象") @ApiModel("当前在线会话业务对象")
public class SysUserOnline { public class SysUserOnline {

View File

@ -1,9 +1,12 @@
package com.ruoyi.system.domain; package com.ruoyi.system.domain;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import lombok.experimental.Accessors; import lombok.NoArgsConstructor;
/** /**
* sys_user_post * sys_user_post
@ -12,12 +15,15 @@ import lombok.experimental.Accessors;
*/ */
@Data @Data
@NoArgsConstructor
@TableName("sys_user_post")
@ApiModel("用户和岗位关联") @ApiModel("用户和岗位关联")
public class SysUserPost { public class SysUserPost {
/** /**
* ID * ID
*/ */
@TableId(type = IdType.INPUT)
@ApiModelProperty(value = "用户ID") @ApiModelProperty(value = "用户ID")
private Long userId; private Long userId;

View File

@ -1,9 +1,12 @@
package com.ruoyi.system.domain; package com.ruoyi.system.domain;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import lombok.experimental.Accessors; import lombok.NoArgsConstructor;
/** /**
* sys_user_role * sys_user_role
@ -12,12 +15,15 @@ import lombok.experimental.Accessors;
*/ */
@Data @Data
@NoArgsConstructor
@TableName("sys_user_role")
@ApiModel("用户和角色关联") @ApiModel("用户和角色关联")
public class SysUserRole { public class SysUserRole {
/** /**
* ID * ID
*/ */
@TableId(type = IdType.INPUT)
@ApiModelProperty(value = "用户ID") @ApiModelProperty(value = "用户ID")
private Long userId; private Long userId;

View File

@ -4,10 +4,9 @@ import cn.hutool.core.collection.CollUtil;
import com.ruoyi.common.core.utils.StringUtils; import com.ruoyi.common.core.utils.StringUtils;
import com.ruoyi.system.api.RemoteDictService; import com.ruoyi.system.api.RemoteDictService;
import com.ruoyi.system.api.domain.SysDictData; import com.ruoyi.system.api.domain.SysDictData;
import com.ruoyi.system.service.ISysDictDataService; import com.ruoyi.system.service.ISysDictTypeService;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.apache.dubbo.config.annotation.DubboService; import org.apache.dubbo.config.annotation.DubboService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.List; import java.util.List;
@ -17,18 +16,18 @@ import java.util.List;
* *
* @author Lion Li * @author Lion Li
*/ */
@RequiredArgsConstructor(onConstructor_ = @Autowired) @RequiredArgsConstructor
@Service @Service
@DubboService @DubboService
public class RemoteDictServiceImpl implements RemoteDictService { public class RemoteDictServiceImpl implements RemoteDictService {
private final ISysDictDataService sysDictDataService; private final ISysDictTypeService sysDictTypeService;
@Override @Override
public String getDictLabel(String dictType, String dictValue, String separator) { public String getDictLabel(String dictType, String dictValue, String separator) {
StringBuilder propertyString = new StringBuilder(); StringBuilder propertyString = new StringBuilder();
List<SysDictData> datas = sysDictDataService.selectDictDataByType(dictType); List<SysDictData> datas = sysDictTypeService.selectDictDataByType(dictType);
if (StringUtils.containsAny(dictValue, separator) && CollUtil.isNotEmpty(datas)) { if (StringUtils.containsAny(dictValue, separator) && CollUtil.isNotEmpty(datas)) {
for (SysDictData dict : datas) { for (SysDictData dict : datas) {
@ -52,7 +51,7 @@ public class RemoteDictServiceImpl implements RemoteDictService {
@Override @Override
public String getDictValue(String dictType, String dictLabel, String separator) { public String getDictValue(String dictType, String dictLabel, String separator) {
StringBuilder propertyString = new StringBuilder(); StringBuilder propertyString = new StringBuilder();
List<SysDictData> datas = sysDictDataService.selectDictDataByType(dictType); List<SysDictData> datas = sysDictTypeService.selectDictDataByType(dictType);
if (StringUtils.containsAny(dictLabel, separator) && CollUtil.isNotEmpty(datas)) { if (StringUtils.containsAny(dictLabel, separator) && CollUtil.isNotEmpty(datas)) {
for (SysDictData dict : datas) { for (SysDictData dict : datas) {

View File

@ -7,7 +7,6 @@ import com.ruoyi.system.service.ISysLogininforService;
import com.ruoyi.system.service.ISysOperLogService; import com.ruoyi.system.service.ISysOperLogService;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.apache.dubbo.config.annotation.DubboService; import org.apache.dubbo.config.annotation.DubboService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
/** /**
@ -15,7 +14,7 @@ import org.springframework.stereotype.Service;
* *
* @author Lion Li * @author Lion Li
*/ */
@RequiredArgsConstructor(onConstructor_ = @Autowired) @RequiredArgsConstructor
@Service @Service
@DubboService @DubboService
public class RemoteLogServiceImpl implements RemoteLogService { public class RemoteLogServiceImpl implements RemoteLogService {
@ -24,12 +23,12 @@ public class RemoteLogServiceImpl implements RemoteLogService {
private final ISysLogininforService logininforService; private final ISysLogininforService logininforService;
@Override @Override
public Boolean saveLog(SysOperLog sysOperLog, String source){ public Boolean saveLog(SysOperLog sysOperLog) {
return operLogService.insertOperlog(sysOperLog) > 0; return operLogService.insertOperlog(sysOperLog) > 0;
} }
@Override @Override
public Boolean saveLogininfor(SysLogininfor sysLogininfor, String source){ public Boolean saveLogininfor(SysLogininfor sysLogininfor) {
return logininforService.insertLogininfor(sysLogininfor) > 0; return logininforService.insertLogininfor(sysLogininfor) > 0;
} }
} }

View File

@ -11,7 +11,6 @@ import com.ruoyi.system.service.ISysPermissionService;
import com.ruoyi.system.service.ISysUserService; import com.ruoyi.system.service.ISysUserService;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.apache.dubbo.config.annotation.DubboService; import org.apache.dubbo.config.annotation.DubboService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.Set; import java.util.Set;
@ -21,7 +20,7 @@ import java.util.Set;
* *
* @author Lion Li * @author Lion Li
*/ */
@RequiredArgsConstructor(onConstructor_ = @Autowired) @RequiredArgsConstructor
@Service @Service
@DubboService @DubboService
public class RemoteUserServiceImpl implements RemoteUserService { public class RemoteUserServiceImpl implements RemoteUserService {
@ -31,7 +30,7 @@ public class RemoteUserServiceImpl implements RemoteUserService {
private final ISysConfigService configService; private final ISysConfigService configService;
@Override @Override
public LoginUser getUserInfo(String username, String source) { public LoginUser getUserInfo(String username) {
SysUser sysUser = userService.selectUserByUserName(username); SysUser sysUser = userService.selectUserByUserName(username);
if (ObjectUtil.isNull(sysUser)) { if (ObjectUtil.isNull(sysUser)) {
throw new ServiceException("用户名或密码错误"); throw new ServiceException("用户名或密码错误");
@ -48,7 +47,7 @@ public class RemoteUserServiceImpl implements RemoteUserService {
} }
@Override @Override
public Boolean registerUserInfo(SysUser sysUser, String source) { public Boolean registerUserInfo(SysUser sysUser) {
String username = sysUser.getUserName(); String username = sysUser.getUserName();
if (!("true".equals(configService.selectConfigByKey("sys.account.registerUser")))) { if (!("true".equals(configService.selectConfigByKey("sys.account.registerUser")))) {
throw new ServiceException("当前系统没有开启注册功能"); throw new ServiceException("当前系统没有开启注册功能");

View File

@ -1,68 +1,13 @@
package com.ruoyi.system.mapper; package com.ruoyi.system.mapper;
import com.ruoyi.system.domain.SysConfig; import com.ruoyi.common.mybatis.core.mapper.BaseMapperPlus;
import com.ruoyi.system.domain.SysConfig;
import java.util.List;
/**
/** *
* *
* * @author Lion Li
* @author ruoyi */
*/ public interface SysConfigMapper extends BaseMapperPlus<SysConfigMapper, SysConfig, SysConfig> {
public interface SysConfigMapper {
/** }
*
*
* @param config
* @return
*/
SysConfig selectConfig(SysConfig config);
/**
*
*
* @param config
* @return
*/
List<SysConfig> selectConfigList(SysConfig config);
/**
*
*
* @param configKey
* @return
*/
SysConfig checkConfigKeyUnique(String configKey);
/**
*
*
* @param config
* @return
*/
int insertConfig(SysConfig config);
/**
*
*
* @param config
* @return
*/
int updateConfig(SysConfig config);
/**
*
*
* @param configId ID
* @return
*/
int deleteConfigById(Long configId);
/**
*
*
* @param configIds ID
* @return
*/
int deleteConfigByIds(Long[] configIds);
}

View File

@ -1,118 +1,46 @@
package com.ruoyi.system.mapper; package com.ruoyi.system.mapper;
import com.ruoyi.system.api.domain.SysDept; import com.ruoyi.common.mybatis.annotation.DataColumn;
import org.apache.ibatis.annotations.Param; import com.ruoyi.common.mybatis.annotation.DataPermission;
import com.ruoyi.common.mybatis.core.mapper.BaseMapperPlus;
import java.util.List; import com.ruoyi.system.api.domain.SysDept;
import org.apache.ibatis.annotations.Param;
/**
* import java.util.List;
*
* @author ruoyi /**
*/ *
public interface SysDeptMapper { *
/** * @author Lion Li
* */
* public interface SysDeptMapper extends BaseMapperPlus<SysDeptMapper, SysDept, SysDept> {
* @param dept
* @return /**
*/ *
List<SysDept> selectDeptList(SysDept dept); *
* @param dept
/** * @return
* ID */
* @DataPermission({
* @param roleId ID @DataColumn(key = "deptName", value = "d.dept_id")
* @param deptCheckStrictly })
* @return List<SysDept> selectDeptList(SysDept dept);
*/
List<Long> selectDeptListByRoleId(@Param("roleId") Long roleId, @Param("deptCheckStrictly") boolean deptCheckStrictly); /**
* ID
/** *
* ID * @param roleId ID
* * @param deptCheckStrictly
* @param deptId ID * @return
* @return */
*/ List<Long> selectDeptListByRoleId(@Param("roleId") Long roleId, @Param("deptCheckStrictly") boolean deptCheckStrictly);
SysDept selectDeptById(Long deptId);
/**
/** *
* ID *
* * @param depts
* @param deptId ID * @return
* @return */
*/ int updateDeptChildren(@Param("depts") List<SysDept> depts);
List<SysDept> selectChildrenDeptById(Long deptId);
}
/**
* ID
*
* @param deptId ID
* @return
*/
int selectNormalChildrenDeptById(Long deptId);
/**
*
*
* @param deptId ID
* @return
*/
int hasChildByDeptId(Long deptId);
/**
*
*
* @param deptId ID
* @return
*/
int checkDeptExistUser(Long deptId);
/**
*
*
* @param deptName
* @param parentId ID
* @return
*/
SysDept checkDeptNameUnique(@Param("deptName") String deptName, @Param("parentId") Long parentId);
/**
*
*
* @param dept
* @return
*/
int insertDept(SysDept dept);
/**
*
*
* @param dept
* @return
*/
int updateDept(SysDept dept);
/**
*
*
* @param deptIds ID
*/
void updateDeptStatusNormal(Long[] deptIds);
/**
*
*
* @param depts
* @return
*/
int updateDeptChildren(@Param("depts") List<SysDept> depts);
/**
*
*
* @param deptId ID
* @return
*/
int deleteDeptById(Long deptId);
}

View File

@ -1,95 +1,25 @@
package com.ruoyi.system.mapper; package com.ruoyi.system.mapper;
import com.ruoyi.system.api.domain.SysDictData; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import org.apache.ibatis.annotations.Param; import com.ruoyi.common.core.constant.UserConstants;
import com.ruoyi.common.mybatis.core.mapper.BaseMapperPlus;
import java.util.List; import com.ruoyi.system.api.domain.SysDictData;
/** import java.util.List;
*
* /**
* @author ruoyi *
*/ *
public interface SysDictDataMapper { * @author Lion Li
/** */
* public interface SysDictDataMapper extends BaseMapperPlus<SysDictDataMapper, SysDictData, SysDictData> {
*
* @param dictData default List<SysDictData> selectDictDataByType(String dictType) {
* @return return selectList(
*/ new LambdaQueryWrapper<SysDictData>()
List<SysDictData> selectDictDataList(SysDictData dictData); .eq(SysDictData::getStatus, UserConstants.DICT_NORMAL)
.eq(SysDictData::getDictType, dictType)
/** .orderByAsc(SysDictData::getDictSort));
* }
*
* @param dictType }
* @return
*/
List<SysDictData> selectDictDataByType(String dictType);
/**
*
*
* @param dictType
* @param dictValue
* @return
*/
String selectDictLabel(@Param("dictType") String dictType, @Param("dictValue") String dictValue);
/**
* ID
*
* @param dictCode ID
* @return
*/
SysDictData selectDictDataById(Long dictCode);
/**
*
*
* @param dictType
* @return
*/
int countDictDataByType(String dictType);
/**
* ID
*
* @param dictCode ID
* @return
*/
int deleteDictDataById(Long dictCode);
/**
*
*
* @param dictCodes ID
* @return
*/
int deleteDictDataByIds(Long[] dictCodes);
/**
*
*
* @param dictData
* @return
*/
int insertDictData(SysDictData dictData);
/**
*
*
* @param dictData
* @return
*/
int updateDictData(SysDictData dictData);
/**
*
*
* @param oldDictType
* @param newDictType
* @return
*/
int updateDictDataType(@Param("oldDictType") String oldDictType, @Param("newDictType") String newDictType);
}

View File

@ -1,85 +1,13 @@
package com.ruoyi.system.mapper; package com.ruoyi.system.mapper;
import com.ruoyi.system.api.domain.SysDictType; import com.ruoyi.common.mybatis.core.mapper.BaseMapperPlus;
import org.apache.ibatis.annotations.Mapper; import com.ruoyi.system.api.domain.SysDictType;
import java.util.List; /**
*
/** *
* * @author Lion Li
* */
* @author ruoyi public interface SysDictTypeMapper extends BaseMapperPlus<SysDictTypeMapper, SysDictType, SysDictType> {
*/
@Mapper }
public interface SysDictTypeMapper {
/**
*
*
* @param dictType
* @return
*/
List<SysDictType> selectDictTypeList(SysDictType dictType);
/**
*
*
* @return
*/
List<SysDictType> selectDictTypeAll();
/**
* ID
*
* @param dictId ID
* @return
*/
SysDictType selectDictTypeById(Long dictId);
/**
*
*
* @param dictType
* @return
*/
SysDictType selectDictTypeByType(String dictType);
/**
* ID
*
* @param dictId ID
* @return
*/
int deleteDictTypeById(Long dictId);
/**
*
*
* @param dictIds ID
* @return
*/
int deleteDictTypeByIds(Long[] dictIds);
/**
*
*
* @param dictType
* @return
*/
int insertDictType(SysDictType dictType);
/**
*
*
* @param dictType
* @return
*/
int updateDictType(SysDictType dictType);
/**
*
*
* @param dictType
* @return
*/
SysDictType checkDictTypeUnique(String dictType);
}

View File

@ -1,42 +1,13 @@
package com.ruoyi.system.mapper; package com.ruoyi.system.mapper;
import com.ruoyi.system.api.domain.SysLogininfor; import com.ruoyi.common.mybatis.core.mapper.BaseMapperPlus;
import com.ruoyi.system.api.domain.SysLogininfor;
import java.util.List;
/**
/** * 访
* 访 *
* * @author Lion Li
* @author ruoyi */
*/ public interface SysLogininforMapper extends BaseMapperPlus<SysLogininforMapper, SysLogininfor, SysLogininfor> {
public interface SysLogininforMapper {
/** }
*
*
* @param logininfor 访
*/
int insertLogininfor(SysLogininfor logininfor);
/**
*
*
* @param logininfor 访
* @return
*/
List<SysLogininfor> selectLogininforList(SysLogininfor logininfor);
/**
*
*
* @param infoIds ID
* @return
*/
int deleteLogininforByIds(Long[] infoIds);
/**
*
*
* @return
*/
int cleanLogininfor();
}

View File

@ -1,117 +1,63 @@
package com.ruoyi.system.mapper; package com.ruoyi.system.mapper;
import com.ruoyi.system.domain.SysMenu; import com.ruoyi.common.mybatis.core.mapper.BaseMapperPlus;
import org.apache.ibatis.annotations.Param; import com.ruoyi.system.domain.SysMenu;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.List;
/**
* /**
* *
* @author ruoyi *
*/ * @author Lion Li
public interface SysMenuMapper { */
/** public interface SysMenuMapper extends BaseMapperPlus<SysMenuMapper, SysMenu, SysMenu> {
*
* /**
* @param menu *
* @return *
*/ * @return
List<SysMenu> selectMenuList(SysMenu menu); */
List<String> selectMenuPerms();
/**
* /**
* *
* @return *
*/ * @param menu
List<String> selectMenuPerms(); * @return
*/
/** List<SysMenu> selectMenuListByUserId(SysMenu menu);
*
* /**
* @param menu * ID
* @return *
*/ * @param userId ID
List<SysMenu> selectMenuListByUserId(SysMenu menu); * @return
*/
/** List<String> selectMenuPermsByUserId(Long userId);
* ID
* /**
* @param userId ID * ID
* @return *
*/ * @return
List<String> selectMenuPermsByUserId(Long userId); */
List<SysMenu> selectMenuTreeAll();
/**
* ID /**
* * ID
* @return *
*/ * @param userId ID
List<SysMenu> selectMenuTreeAll(); * @return
*/
/** List<SysMenu> selectMenuTreeByUserId(Long userId);
* ID
* /**
* @param userId ID * ID
* @return *
*/ * @param roleId ID
List<SysMenu> selectMenuTreeByUserId(Long userId); * @param menuCheckStrictly
* @return
/** */
* ID List<Long> selectMenuListByRoleId(@Param("roleId") Long roleId, @Param("menuCheckStrictly") boolean menuCheckStrictly);
*
* @param roleId ID }
* @param menuCheckStrictly
* @return
*/
List<Long> selectMenuListByRoleId(@Param("roleId") Long roleId, @Param("menuCheckStrictly") boolean menuCheckStrictly);
/**
* ID
*
* @param menuId ID
* @return
*/
SysMenu selectMenuById(Long menuId);
/**
*
*
* @param menuId ID
* @return
*/
int hasChildByMenuId(Long menuId);
/**
*
*
* @param menu
* @return
*/
int insertMenu(SysMenu menu);
/**
*
*
* @param menu
* @return
*/
int updateMenu(SysMenu menu);
/**
*
*
* @param menuId ID
* @return
*/
int deleteMenuById(Long menuId);
/**
*
*
* @param menuName
* @param parentId ID
* @return
*/
SysMenu checkMenuNameUnique(@Param("menuName") String menuName, @Param("parentId") Long parentId);
}

View File

@ -1,60 +1,13 @@
package com.ruoyi.system.mapper; package com.ruoyi.system.mapper;
import com.ruoyi.system.domain.SysNotice; import com.ruoyi.common.mybatis.core.mapper.BaseMapperPlus;
import com.ruoyi.system.domain.SysNotice;
import java.util.List;
/**
/** *
* *
* * @author Lion Li
* @author ruoyi */
*/ public interface SysNoticeMapper extends BaseMapperPlus<SysNoticeMapper, SysNotice, SysNotice> {
public interface SysNoticeMapper {
/** }
*
*
* @param noticeId ID
* @return
*/
SysNotice selectNoticeById(Long noticeId);
/**
*
*
* @param notice
* @return
*/
List<SysNotice> selectNoticeList(SysNotice notice);
/**
*
*
* @param notice
* @return
*/
int insertNotice(SysNotice notice);
/**
*
*
* @param notice
* @return
*/
int updateNotice(SysNotice notice);
/**
*
*
* @param noticeId ID
* @return
*/
int deleteNoticeById(Long noticeId);
/**
*
*
* @param noticeIds ID
* @return
*/
int deleteNoticeByIds(Long[] noticeIds);
}

View File

@ -1,48 +1,13 @@
package com.ruoyi.system.mapper; package com.ruoyi.system.mapper;
import com.ruoyi.system.api.domain.SysOperLog; import com.ruoyi.common.mybatis.core.mapper.BaseMapperPlus;
import com.ruoyi.system.api.domain.SysOperLog;
import java.util.List;
/**
/** *
* *
* * @author Lion Li
* @author ruoyi */
*/ public interface SysOperLogMapper extends BaseMapperPlus<SysOperLogMapper, SysOperLog, SysOperLog> {
public interface SysOperLogMapper {
/** }
*
*
* @param operLog
*/
int insertOperlog(SysOperLog operLog);
/**
*
*
* @param operLog
* @return
*/
List<SysOperLog> selectOperLogList(SysOperLog operLog);
/**
*
*
* @param operIds ID
* @return
*/
int deleteOperLogByIds(Long[] operIds);
/**
*
*
* @param operId ID
* @return
*/
SysOperLog selectOperLogById(Long operId);
/**
*
*/
void cleanOperLog();
}

View File

@ -1,99 +1,31 @@
package com.ruoyi.system.mapper; package com.ruoyi.system.mapper;
import com.ruoyi.system.domain.SysPost; import com.ruoyi.common.mybatis.core.mapper.BaseMapperPlus;
import com.ruoyi.system.domain.SysPost;
import java.util.List;
import java.util.List;
/**
* /**
* *
* @author ruoyi *
*/ * @author Lion Li
public interface SysPostMapper { */
/** public interface SysPostMapper extends BaseMapperPlus<SysPostMapper, SysPost, SysPost> {
*
* /**
* @param post * ID
* @return *
*/ * @param userId ID
List<SysPost> selectPostList(SysPost post); * @return ID
*/
/** List<Long> selectPostListByUserId(Long userId);
*
* /**
* @return *
*/ *
List<SysPost> selectPostAll(); * @param userName
* @return
/** */
* ID List<SysPost> selectPostsByUserName(String userName);
*
* @param postId ID }
* @return
*/
SysPost selectPostById(Long postId);
/**
* ID
*
* @param userId ID
* @return ID
*/
List<Long> selectPostListByUserId(Long userId);
/**
*
*
* @param userName
* @return
*/
List<SysPost> selectPostsByUserName(String userName);
/**
*
*
* @param postId ID
* @return
*/
int deletePostById(Long postId);
/**
*
*
* @param postIds ID
* @return
*/
int deletePostByIds(Long[] postIds);
/**
*
*
* @param post
* @return
*/
int updatePost(SysPost post);
/**
*
*
* @param post
* @return
*/
int insertPost(SysPost post);
/**
*
*
* @param postName
* @return
*/
SysPost checkPostNameUnique(String postName);
/**
*
*
* @param postCode
* @return
*/
SysPost checkPostCodeUnique(String postCode);
}

View File

@ -1,44 +1,46 @@
package com.ruoyi.system.mapper; package com.ruoyi.system.mapper;
import com.ruoyi.system.domain.SysRoleDept; import com.ruoyi.common.mybatis.core.mapper.BaseMapperPlus;
import com.ruoyi.system.domain.SysRoleDept;
import java.util.List;
import java.util.List;
/**
* /**
* *
* @author ruoyi *
*/ * @author Lion Li
public interface SysRoleDeptMapper { */
/** public interface SysRoleDeptMapper extends BaseMapperPlus<SysRoleDeptMapper, SysRoleDept, SysRoleDept> {
* ID
* /**
* @param roleId ID * ID
* @return *
*/ * @param roleId ID
int deleteRoleDeptByRoleId(Long roleId); * @return
*/
/** int deleteRoleDeptByRoleId(Long roleId);
*
* /**
* @param ids ID *
* @return *
*/ * @param ids ID
int deleteRoleDept(Long[] ids); * @return
*/
/** int deleteRoleDept(Long[] ids);
* 使
* /**
* @param deptId ID * 使
* @return *
*/ * @param deptId ID
int selectCountRoleDeptByDeptId(Long deptId); * @return
*/
/** int selectCountRoleDeptByDeptId(Long deptId);
*
* /**
* @param roleDeptList *
* @return *
*/ * @param roleDeptList
int batchRoleDept(List<SysRoleDept> roleDeptList); * @return
} */
int batchRoleDept(List<SysRoleDept> roleDeptList);
}

View File

@ -1,107 +1,60 @@
package com.ruoyi.system.mapper; package com.ruoyi.system.mapper;
import com.ruoyi.system.api.domain.SysRole; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.common.mybatis.annotation.DataColumn;
import java.util.List; import com.ruoyi.common.mybatis.annotation.DataPermission;
import com.ruoyi.common.mybatis.core.mapper.BaseMapperPlus;
/** import com.ruoyi.system.api.domain.SysRole;
* import org.apache.ibatis.annotations.Param;
*
* @author ruoyi import java.util.List;
*/
public interface SysRoleMapper { /**
/** *
* *
* * @author Lion Li
* @param role */
* @return public interface SysRoleMapper extends BaseMapperPlus<SysRoleMapper, SysRole, SysRole> {
*/
List<SysRole> selectRoleList(SysRole role); @DataPermission({
@DataColumn(key = "deptName", value = "d.dept_id")
/** })
* ID Page<SysRole> selectPageRoleList(@Param("page") Page<SysRole> page, @Param("role") SysRole role);
*
* @param userId ID /**
* @return *
*/ *
List<SysRole> selectRolePermissionByUserId(Long userId); * @param role
* @return
/** */
* @DataPermission({
* @DataColumn(key = "deptName", value = "d.dept_id")
* @return })
*/ List<SysRole> selectRoleList(SysRole role);
List<SysRole> selectRoleAll();
/**
/** * ID
* ID *
* * @param userId ID
* @param userId ID * @return
* @return ID */
*/ List<SysRole> selectRolePermissionByUserId(Long userId);
List<Long> selectRoleListByUserId(Long userId);
/** /**
* ID * ID
* *
* @param roleId ID * @param userId ID
* @return * @return ID
*/ */
SysRole selectRoleById(Long roleId); List<Long> selectRoleListByUserId(Long userId);
/** /**
* ID * ID
* *
* @param userName * @param userName
* @return * @return
*/ */
List<SysRole> selectRolesByUserName(String userName); List<SysRole> selectRolesByUserName(String userName);
/** }
*
*
* @param roleName
* @return
*/
SysRole checkRoleNameUnique(String roleName);
/**
*
*
* @param roleKey
* @return
*/
SysRole checkRoleKeyUnique(String roleKey);
/**
*
*
* @param role
* @return
*/
int updateRole(SysRole role);
/**
*
*
* @param role
* @return
*/
int insertRole(SysRole role);
/**
* ID
*
* @param roleId ID
* @return
*/
int deleteRoleById(Long roleId);
/**
*
*
* @param roleIds ID
* @return
*/
int deleteRoleByIds(Long[] roleIds);
}

View File

@ -1,44 +1,46 @@
package com.ruoyi.system.mapper; package com.ruoyi.system.mapper;
import com.ruoyi.system.domain.SysRoleMenu; import com.ruoyi.common.mybatis.core.mapper.BaseMapperPlus;
import com.ruoyi.system.domain.SysRoleMenu;
import java.util.List;
import java.util.List;
/**
* /**
* *
* @author ruoyi *
*/ * @author Lion Li
public interface SysRoleMenuMapper { */
/** public interface SysRoleMenuMapper extends BaseMapperPlus<SysRoleMenuMapper, SysRoleMenu, SysRoleMenu> {
* 使
* /**
* @param menuId ID * 使
* @return *
*/ * @param menuId ID
int checkMenuExistRole(Long menuId); * @return
*/
/** int checkMenuExistRole(Long menuId);
* ID
* /**
* @param roleId ID * ID
* @return *
*/ * @param roleId ID
int deleteRoleMenuByRoleId(Long roleId); * @return
*/
/** int deleteRoleMenuByRoleId(Long roleId);
*
* /**
* @param ids ID *
* @return *
*/ * @param ids ID
int deleteRoleMenu(Long[] ids); * @return
*/
/** int deleteRoleMenu(Long[] ids);
*
* /**
* @param roleMenuList *
* @return *
*/ * @param roleMenuList
int batchRoleMenu(List<SysRoleMenu> roleMenuList); * @return
} */
int batchRoleMenu(List<SysRoleMenu> roleMenuList);
}

View File

@ -1,127 +1,77 @@
package com.ruoyi.system.mapper; package com.ruoyi.system.mapper;
import com.ruoyi.system.api.domain.SysUser; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Param; import com.ruoyi.common.mybatis.annotation.DataColumn;
import com.ruoyi.common.mybatis.annotation.DataPermission;
import java.util.List; import com.ruoyi.common.mybatis.core.mapper.BaseMapperPlus;
import com.ruoyi.system.api.domain.SysUser;
/** import org.apache.ibatis.annotations.Param;
*
* import java.util.List;
* @author ruoyi
*/ /**
public interface SysUserMapper { *
/** *
* * @author Lion Li
* */
* @param sysUser public interface SysUserMapper extends BaseMapperPlus<SysUserMapper, SysUser, SysUser> {
* @return
*/ @DataPermission({
List<SysUser> selectUserList(SysUser sysUser); @DataColumn(key = "deptName", value = "d.dept_id"),
@DataColumn(key = "userName", value = "u.user_id")
/** })
* Page<SysUser> selectPageUserList(@Param("page") Page<SysUser> page, @Param("user") SysUser user);
*
* @param user /**
* @return *
*/ *
List<SysUser> selectAllocatedList(SysUser user); * @param sysUser
* @return
/** */
* @DataPermission({
* @DataColumn(key = "deptName", value = "d.dept_id"),
* @param user @DataColumn(key = "userName", value = "u.user_id")
* @return })
*/ List<SysUser> selectUserList(SysUser sysUser);
List<SysUser> selectUnallocatedList(SysUser user);
/**
/** *
* *
* * @param user
* @param userName * @return
* @return */
*/ @DataPermission({
SysUser selectUserByUserName(String userName); @DataColumn(key = "deptName", value = "d.dept_id"),
@DataColumn(key = "userName", value = "u.user_id")
/** })
* ID Page<SysUser> selectAllocatedList(@Param("page") Page<SysUser> page, @Param("user") SysUser user);
*
* @param userId ID /**
* @return *
*/ *
SysUser selectUserById(Long userId); * @param user
* @return
/** */
* @DataPermission({
* @DataColumn(key = "deptName", value = "d.dept_id"),
* @param user @DataColumn(key = "userName", value = "u.user_id")
* @return })
*/ Page<SysUser> selectUnallocatedList(@Param("page") Page<SysUser> page, @Param("user") SysUser user);
int insertUser(SysUser user);
/**
/** *
* *
* * @param userName
* @param user * @return
* @return */
*/ SysUser selectUserByUserName(String userName);
int updateUser(SysUser user);
/**
/** * ID
* *
* * @param userId ID
* @param userName * @return
* @param avatar */
* @return SysUser selectUserById(Long userId);
*/
int updateUserAvatar(@Param("userName") String userName, @Param("avatar") String avatar); }
/**
*
*
* @param userName
* @param password
* @return
*/
int resetUserPwd(@Param("userName") String userName, @Param("password") String password);
/**
* ID
*
* @param userId ID
* @return
*/
int deleteUserById(Long userId);
/**
*
*
* @param userIds ID
* @return
*/
int deleteUserByIds(Long[] userIds);
/**
*
*
* @param userName
* @return
*/
int checkUserNameUnique(String userName);
/**
*
*
* @param phonenumber
* @return
*/
SysUser checkPhoneUnique(String phonenumber);
/**
* email
*
* @param email
* @return
*/
SysUser checkEmailUnique(String email);
}

View File

@ -1,44 +1,46 @@
package com.ruoyi.system.mapper; package com.ruoyi.system.mapper;
import com.ruoyi.system.domain.SysUserPost; import com.ruoyi.common.mybatis.core.mapper.BaseMapperPlus;
import com.ruoyi.system.domain.SysUserPost;
import java.util.List;
import java.util.List;
/**
* /**
* *
* @author ruoyi *
*/ * @author Lion Li
public interface SysUserPostMapper { */
/** public interface SysUserPostMapper extends BaseMapperPlus<SysUserPostMapper, SysUserPost, SysUserPost> {
* ID
* /**
* @param userId ID * ID
* @return *
*/ * @param userId ID
int deleteUserPostByUserId(Long userId); * @return
*/
/** int deleteUserPostByUserId(Long userId);
* ID使
* /**
* @param postId ID * ID使
* @return *
*/ * @param postId ID
int countUserPostById(Long postId); * @return
*/
/** int countUserPostById(Long postId);
*
* /**
* @param ids ID *
* @return *
*/ * @param ids ID
int deleteUserPost(Long[] ids); * @return
*/
/** int deleteUserPost(Long[] ids);
*
* /**
* @param userPostList *
* @return *
*/ * @param userPostList
int batchUserPost(List<SysUserPost> userPostList); * @return
} */
int batchUserPost(List<SysUserPost> userPostList);
}

View File

@ -1,62 +1,64 @@
package com.ruoyi.system.mapper; package com.ruoyi.system.mapper;
import com.ruoyi.system.domain.SysUserRole; import com.ruoyi.common.mybatis.core.mapper.BaseMapperPlus;
import org.apache.ibatis.annotations.Param; import com.ruoyi.system.domain.SysUserRole;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.List;
/**
* /**
* *
* @author ruoyi *
*/ * @author Lion Li
public interface SysUserRoleMapper { */
/** public interface SysUserRoleMapper extends BaseMapperPlus<SysUserRoleMapper, SysUserRole, SysUserRole> {
* ID
* /**
* @param userId ID * ID
* @return *
*/ * @param userId ID
int deleteUserRoleByUserId(Long userId); * @return
*/
/** int deleteUserRoleByUserId(Long userId);
*
* /**
* @param ids ID *
* @return *
*/ * @param ids ID
int deleteUserRole(Long[] ids); * @return
*/
/** int deleteUserRole(Long[] ids);
* ID使
* /**
* @param roleId ID * ID使
* @return *
*/ * @param roleId ID
int countUserRoleByRoleId(Long roleId); * @return
*/
/** int countUserRoleByRoleId(Long roleId);
*
* /**
* @param userRoleList *
* @return *
*/ * @param userRoleList
int batchUserRole(List<SysUserRole> userRoleList); * @return
*/
/** int batchUserRole(List<SysUserRole> userRoleList);
*
* /**
* @param userRole *
* @return *
*/ * @param userRole
int deleteUserRoleInfo(SysUserRole userRole); * @return
*/
/** int deleteUserRoleInfo(SysUserRole userRole);
*
* /**
* @param roleId ID *
* @param userIds ID *
* @return * @param roleId ID
*/ * @param userIds ID
int deleteUserRoleInfos(@Param("roleId") Long roleId, @Param("userIds") Long[] userIds); * @return
} */
int deleteUserRoleInfos(@Param("roleId") Long roleId, @Param("userIds") Long[] userIds);
}

View File

@ -1,83 +1,88 @@
package com.ruoyi.system.service; package com.ruoyi.system.service;
import com.ruoyi.system.domain.SysConfig; import com.ruoyi.common.mybatis.core.page.PageQuery;
import com.ruoyi.common.mybatis.core.page.TableDataInfo;
import java.util.List; import com.ruoyi.system.domain.SysConfig;
/** import java.util.List;
*
* /**
* @author ruoyi *
*/ *
public interface ISysConfigService { * @author ruoyi
/** */
* public interface ISysConfigService {
*
* @param configId ID TableDataInfo<SysConfig> selectPageConfigList(SysConfig config, PageQuery pageQuery);
* @return
*/ /**
SysConfig selectConfigById(Long configId); *
*
/** * @param configId ID
* * @return
* */
* @param configKey SysConfig selectConfigById(Long configId);
* @return
*/ /**
String selectConfigByKey(String configKey); *
*
/** * @param configKey
* * @return
* */
* @param config String selectConfigByKey(String configKey);
* @return
*/ /**
List<SysConfig> selectConfigList(SysConfig config); *
*
/** * @param config
* * @return
* */
* @param config List<SysConfig> selectConfigList(SysConfig config);
* @return
*/ /**
int insertConfig(SysConfig config); *
*
/** * @param config
* * @return
* */
* @param config int insertConfig(SysConfig config);
* @return
*/ /**
int updateConfig(SysConfig config); *
*
/** * @param config
* * @return
* */
* @param configIds ID int updateConfig(SysConfig config);
* @return
*/ /**
void deleteConfigByIds(Long[] configIds); *
*
/** * @param configIds ID
* * @return
*/ */
void loadingConfigCache(); void deleteConfigByIds(Long[] configIds);
/** /**
* *
*/ */
void clearConfigCache(); void loadingConfigCache();
/** /**
* *
*/ */
void resetConfigCache(); void clearConfigCache();
/** /**
* *
* */
* @param config void resetConfigCache();
* @return
*/ /**
String checkConfigKeyUnique(SysConfig config); *
} *
* @param config
* @return
*/
String checkConfigKeyUnique(SysConfig config);
}

View File

@ -19,14 +19,6 @@ public interface ISysDeptService {
*/ */
List<SysDept> selectDeptList(SysDept dept); List<SysDept> selectDeptList(SysDept dept);
/**
*
*
* @param depts
* @return
*/
List<SysDept> buildDeptTree(List<SysDept> depts);
/** /**
* *
* *
@ -57,7 +49,7 @@ public interface ISysDeptService {
* @param deptId ID * @param deptId ID
* @return * @return
*/ */
int selectNormalChildrenDeptById(Long deptId); long selectNormalChildrenDeptById(Long deptId);
/** /**
* *

View File

@ -1,69 +1,66 @@
package com.ruoyi.system.service; package com.ruoyi.system.service;
import com.ruoyi.system.api.domain.SysDictData; import com.ruoyi.common.mybatis.core.page.PageQuery;
import com.ruoyi.common.mybatis.core.page.TableDataInfo;
import java.util.List; import com.ruoyi.system.api.domain.SysDictData;
/** import java.util.List;
*
* /**
* @author ruoyi *
*/ *
public interface ISysDictDataService { * @author ruoyi
/** */
* public interface ISysDictDataService {
*
* @param dictData TableDataInfo<SysDictData> selectPageDictDataList(SysDictData dictData, PageQuery pageQuery);
* @return
*/ /**
List<SysDictData> selectDictDataList(SysDictData dictData); *
*
/** * @param dictData
* * @return
* */
* @param dictType List<SysDictData> selectDictDataList(SysDictData dictData);
* @param dictValue
* @return /**
*/ *
String selectDictLabel(String dictType, String dictValue); *
* @param dictType
/** * @param dictValue
* * @return
* */
* @param dictType String selectDictLabel(String dictType, String dictValue);
* @return
*/ /**
List<SysDictData> selectDictDataByType(String dictType); * ID
*
/** * @param dictCode ID
* ID * @return
* */
* @param dictCode ID SysDictData selectDictDataById(Long dictCode);
* @return
*/ /**
SysDictData selectDictDataById(Long dictCode); *
*
/** * @param dictCodes ID
* * @return
* */
* @param dictCodes ID void deleteDictDataByIds(Long[] dictCodes);
* @return
*/ /**
void deleteDictDataByIds(Long[] dictCodes); *
*
/** * @param dictData
* * @return
* */
* @param dictData int insertDictData(SysDictData dictData);
* @return
*/ /**
int insertDictData(SysDictData dictData); *
*
/** * @param dictData
* * @return
* */
* @param dictData int updateDictData(SysDictData dictData);
* @return }
*/
int updateDictData(SysDictData dictData);
}

View File

@ -1,99 +1,103 @@
package com.ruoyi.system.service; package com.ruoyi.system.service;
import com.ruoyi.system.api.domain.SysDictData; import com.ruoyi.common.mybatis.core.page.PageQuery;
import com.ruoyi.system.api.domain.SysDictType; import com.ruoyi.common.mybatis.core.page.TableDataInfo;
import com.ruoyi.system.api.domain.SysDictData;
import java.util.List; import com.ruoyi.system.api.domain.SysDictType;
/** import java.util.List;
*
* /**
* @author ruoyi *
*/ *
public interface ISysDictTypeService { * @author ruoyi
/** */
* public interface ISysDictTypeService {
* TableDataInfo<SysDictType> selectPageDictTypeList(SysDictType dictType, PageQuery pageQuery);
* @param dictType
* @return /**
*/ *
List<SysDictType> selectDictTypeList(SysDictType dictType); *
* @param dictType
/** * @return
* */
* List<SysDictType> selectDictTypeList(SysDictType dictType);
* @return
*/ /**
List<SysDictType> selectDictTypeAll(); *
*
/** * @return
* */
* List<SysDictType> selectDictTypeAll();
* @param dictType
* @return /**
*/ *
List<SysDictData> selectDictDataByType(String dictType); *
* @param dictType
/** * @return
* ID */
* List<SysDictData> selectDictDataByType(String dictType);
* @param dictId ID
* @return /**
*/ * ID
SysDictType selectDictTypeById(Long dictId); *
* @param dictId ID
/** * @return
* */
* SysDictType selectDictTypeById(Long dictId);
* @param dictType
* @return /**
*/ *
SysDictType selectDictTypeByType(String dictType); *
* @param dictType
/** * @return
* */
* SysDictType selectDictTypeByType(String dictType);
* @param dictIds ID
* @return /**
*/ *
void deleteDictTypeByIds(Long[] dictIds); *
* @param dictIds ID
/** * @return
* */
*/ void deleteDictTypeByIds(Long[] dictIds);
void loadingDictCache();
/**
/** *
* */
*/ void loadingDictCache();
void clearDictCache();
/**
/** *
* */
*/ void clearDictCache();
void resetDictCache();
/**
/** *
* */
* void resetDictCache();
* @param dictType
* @return /**
*/ *
int insertDictType(SysDictType dictType); *
* @param dictType
/** * @return
* */
* int insertDictType(SysDictType dictType);
* @param dictType
* @return /**
*/ *
int updateDictType(SysDictType dictType); *
* @param dictType
/** * @return
* */
* int updateDictType(SysDictType dictType);
* @param dictType
* @return /**
*/ *
String checkDictTypeUnique(SysDictType dictType); *
} * @param dictType
* @return
*/
String checkDictTypeUnique(SysDictType dictType);
}

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