diff --git a/README.md b/README.md
index c103879eb..fad886f41 100644
--- a/README.md
+++ b/README.md
@@ -4,7 +4,7 @@
[](https://gitee.com/JavaLionLi/RuoYi-Vue-Plus/blob/master/LICENSE)
[](https://www.jetbrains.com/?from=RuoYi-Vue-Plus)
-[](https://gitee.com/JavaLionLi/RuoYi-Vue-Plus)
+[](https://gitee.com/JavaLionLi/RuoYi-Vue-Plus)
[]()
[]()
[]()
@@ -33,6 +33,7 @@ RuoYi-Vue-Plus 是基于 RuoYi-Vue 针对 `分布式集群` 场景升级(不兼
| 分布式限流 | Redisson | [Redisson文档](https://github.com/redisson/redisson/wiki/%E7%9B%AE%E5%BD%95) | 全局、请求IP、集群ID 多种限流 |
| 分布式锁 | Lock4j | [Lock4j官网](https://gitee.com/baomidou/lock4j) | 注解锁、工具锁 多种多样 |
| 分布式幂等 | Lock4j | [Lock4j文档](https://gitee.com/baomidou/lock4j) | 基于分布式锁实现 |
+| 分布式日志 | TLog | [TLog文档](https://yomahub.com/tlog/docs) | 支持跟踪链路日志记录、性能分析、链路排查 |
| 文件存储 | Minio | [Minio文档](https://docs.min.io/) | 本地存储 |
| 文件存储 | 七牛、阿里、腾讯 | [OSS使用文档](https://gitee.com/JavaLionLi/RuoYi-Vue-Plus/wikis/pages?sort_id=4359146&doc_id=1469725) | 云存储 |
| 监控框架 | SpringBoot-Admin | [SpringBoot-Admin文档](https://codecentric.github.io/spring-boot-admin/current/) | 全方位服务监控 |
diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml
index 1535f3d6f..e676d5607 100644
--- a/docker/docker-compose.yml
+++ b/docker/docker-compose.yml
@@ -103,7 +103,7 @@ services:
ipv4_address: 172.30.0.54
ruoyi-server1:
- image: "ruoyi/ruoyi-server:3.1.0"
+ image: "ruoyi/ruoyi-server:3.2.0"
container_name: ruoyi-server1
environment:
# 时区上海
@@ -118,7 +118,7 @@ services:
ipv4_address: 172.30.0.60
ruoyi-server2:
- image: "ruoyi/ruoyi-server:3.1.0"
+ image: "ruoyi/ruoyi-server:3.2.0"
container_name: ruoyi-server2
environment:
# 时区上海
@@ -133,7 +133,7 @@ services:
ipv4_address: 172.30.0.61
ruoyi-monitor-admin:
- image: "ruoyi/ruoyi-monitor-admin:3.1.0"
+ image: "ruoyi/ruoyi-monitor-admin:3.2.0"
container_name: ruoyi-monitor-admin
environment:
# 时区上海
diff --git a/pom.xml b/pom.xml
index f124949d4..ab8fe420c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -6,20 +6,20 @@
com.ruoyi
ruoyi-vue-plus
- 3.1.0
+ 3.2.0
RuoYi-Vue-Plus
https://gitee.com/JavaLionLi/RuoYi-Vue-Plus
RuoYi-Vue-Plus后台管理系统
- 3.1.0
+ 3.2.0
2.5.5
UTF-8
UTF-8
1.8
3.2.0
- 1.2.6
+ 1.2.8
3.0.3
1.5.22
4.1.2
@@ -32,10 +32,11 @@
3.0.3
11.6
4.9.1
- 2.5.1
+ 2.5.2
3.16.3
2.2.1
3.4.1
+ 1.3.2
3.0.1
@@ -158,6 +159,7 @@
${hutool.version}
+
org.springframework.cloud
spring-cloud-starter-openfeign
@@ -169,7 +171,7 @@
-
+
io.github.openfeign
feign-okhttp
@@ -204,7 +206,36 @@
lock4j-redisson-spring-boot-starter
${lock4j.version}
-
+
+
+ com.yomahub
+ tlog-spring-boot-configuration
+ ${tlog.version}
+
+
+
+ com.yomahub
+ tlog-webroot
+ ${tlog.version}
+
+
+ javassist
+ org.javassist
+
+
+ guava
+ com.google.guava
+
+
+
+
+
+ com.yomahub
+ tlog-feign
+ ${tlog.version}
+
+
+
com.ruoyi
ruoyi-quartz
diff --git a/ruoyi-admin/pom.xml b/ruoyi-admin/pom.xml
index 37cc33b11..560051b1b 100644
--- a/ruoyi-admin/pom.xml
+++ b/ruoyi-admin/pom.xml
@@ -5,7 +5,7 @@
ruoyi-vue-plus
com.ruoyi
- 3.1.0
+ 3.2.0
4.0.0
jar
@@ -41,7 +41,7 @@
ruoyi-system
-
+
com.ruoyi
ruoyi-quartz
@@ -87,7 +87,7 @@
org.apache.maven.plugins
maven-war-plugin
- 3.1.0
+ 3.2.0
false
${project.artifactId}
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java b/ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java
index 3a1a4aef0..f389ff437 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java
@@ -10,12 +10,12 @@ import org.springframework.boot.autoconfigure.SpringBootApplication;
*/
@SpringBootApplication
-public class RuoYiApplication
-{
- public static void main(String[] args)
- {
+public class RuoYiApplication {
+
+ public static void main(String[] args) {
System.setProperty("spring.devtools.restart.enabled", "false");
SpringApplication.run(RuoYiApplication.class, args);
System.out.println("(♥◠‿◠)ノ゙ RuoYi-Vue-Plus启动成功 ლ(´ڡ`ლ)゙");
}
+
}
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/RuoYiServletInitializer.java b/ruoyi-admin/src/main/java/com/ruoyi/RuoYiServletInitializer.java
index 6de67dc76..dd0562684 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/RuoYiServletInitializer.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/RuoYiServletInitializer.java
@@ -5,14 +5,14 @@ import org.springframework.boot.web.servlet.support.SpringBootServletInitializer
/**
* web容器中进行部署
- *
+ *
* @author ruoyi
*/
-public class RuoYiServletInitializer extends SpringBootServletInitializer
-{
+public class RuoYiServletInitializer extends SpringBootServletInitializer {
+
@Override
- protected SpringApplicationBuilder configure(SpringApplicationBuilder application)
- {
+ protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(RuoYiApplication.class);
}
+
}
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/CaptchaController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/CaptchaController.java
index b6f8a5087..4a2bf30d7 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/CaptchaController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/CaptchaController.java
@@ -13,6 +13,9 @@ import com.ruoyi.common.utils.reflect.ReflectUtils;
import com.ruoyi.common.utils.spring.SpringUtils;
import com.ruoyi.framework.config.properties.CaptchaProperties;
import com.ruoyi.system.service.ISysConfigService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@@ -24,61 +27,61 @@ import java.util.concurrent.TimeUnit;
/**
* 验证码操作处理
*
- * @author ruoyi
+ * @author Lion Li
*/
+@Api(value = "验证码操作处理", tags = {"验证码管理"})
+@RequiredArgsConstructor(onConstructor_ = @Autowired)
@RestController
public class CaptchaController {
- @Autowired
- private CaptchaProperties captchaProperties;
+ private final CaptchaProperties captchaProperties;
+ private final ISysConfigService configService;
- @Autowired
- private ISysConfigService configService;
+ /**
+ * 生成验证码
+ */
+ @ApiOperation("生成验证码")
+ @GetMapping("/captchaImage")
+ public AjaxResult
+
org.springframework.cloud
spring-cloud-starter-openfeign
+
io.github.openfeign
feign-okhttp
@@ -156,6 +158,21 @@
com.baomidou
lock4j-redisson-spring-boot-starter
+
+
+ com.yomahub
+ tlog-spring-boot-configuration
+
+
+
+ com.yomahub
+ tlog-webroot
+
+
+
+ com.yomahub
+ tlog-feign
+
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/config/RuoYiConfig.java b/ruoyi-common/src/main/java/com/ruoyi/common/config/RuoYiConfig.java
index 408295a36..9343a4a08 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/config/RuoYiConfig.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/config/RuoYiConfig.java
@@ -2,7 +2,6 @@ package com.ruoyi.common.config;
import lombok.Data;
import lombok.Getter;
-import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@@ -10,34 +9,42 @@ import org.springframework.stereotype.Component;
/**
* 读取项目相关配置
*
- * @author ruoyi
+ * @author Lion Li
*/
@Data
-@NoArgsConstructor
@Accessors(chain = true)
@Component
@ConfigurationProperties(prefix = "ruoyi")
-public class RuoYiConfig
-{
- /** 项目名称 */
+public class RuoYiConfig {
+
+ /**
+ * 项目名称
+ */
private String name;
- /** 版本 */
+ /**
+ * 版本
+ */
private String version;
- /** 版权年份 */
+ /**
+ * 版权年份
+ */
private String copyrightYear;
- /** 实例演示开关 */
+ /**
+ * 实例演示开关
+ */
private boolean demoEnabled;
- /** 获取地址开关 */
+ /**
+ * 获取地址开关
+ */
@Getter
private static boolean addressEnabled;
- public void setAddressEnabled(boolean addressEnabled)
- {
+ public void setAddressEnabled(boolean addressEnabled) {
RuoYiConfig.addressEnabled = addressEnabled;
}
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/constant/GenConstants.java b/ruoyi-common/src/main/java/com/ruoyi/common/constant/GenConstants.java
index 072fb403c..27c57035a 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/constant/GenConstants.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/constant/GenConstants.java
@@ -44,27 +44,27 @@ public class GenConstants
public static final String[] COLUMNTYPE_NUMBER = { "tinyint", "smallint", "mediumint", "int", "number", "integer",
"bit", "bigint", "float", "double", "decimal" };
- /** 页面不需要添加字段 */
+ /** BO对象 不需要添加字段 */
public static final String[] COLUMNNAME_NOT_ADD = { "create_by", "create_time", "del_flag", "update_by",
"update_time", "version" };
- /** 页面不需要编辑字段 */
+ /** BO对象 不需要编辑字段 */
public static final String[] COLUMNNAME_NOT_EDIT = { "create_by", "create_time", "del_flag", "update_by",
"update_time", "version" };
- /** 页面不需要显示的列表字段 */
- public static final String[] COLUMNNAME_NOT_LIST = { "id", "create_by", "create_time", "del_flag", "update_by",
+ /** VO对象 不需要返回字段 */
+ public static final String[] COLUMNNAME_NOT_LIST = { "create_by", "create_time", "del_flag", "update_by",
"update_time", "version" };
- /** 页面不需要查询字段 */
+ /** BO对象 不需要查询字段 */
public static final String[] COLUMNNAME_NOT_QUERY = { "id", "create_by", "create_time", "del_flag", "update_by",
"update_time", "remark", "version" };
/** Entity基类字段 */
- public static final String[] BASE_ENTITY = { "createBy", "createTime", "updateBy", "updateTime", "remark" };
+ public static final String[] BASE_ENTITY = { "createBy", "createTime", "updateBy", "updateTime" };
/** Tree基类字段 */
- public static final String[] TREE_ENTITY = { "parentName", "parentId", "orderNum", "ancestors", "children" };
+ public static final String[] TREE_ENTITY = { "parentName", "parentId", "children" };
/** 文本框 */
public static final String HTML_INPUT = "input";
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/constant/ScheduleConstants.java b/ruoyi-common/src/main/java/com/ruoyi/common/constant/ScheduleConstants.java
index 8318b8f5f..ba4986cfe 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/constant/ScheduleConstants.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/constant/ScheduleConstants.java
@@ -2,7 +2,8 @@ package com.ruoyi.common.constant;
/**
* 任务调度通用常量
- *
+ *
+ * @deprecated 3.5.0删除 迁移至xxl-job
* @author ruoyi
*/
public class ScheduleConstants
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/BaseEntity.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/BaseEntity.java
index a5a92f4d3..18a8d66e9 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/BaseEntity.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/BaseEntity.java
@@ -1,9 +1,10 @@
package com.ruoyi.common.core.domain;
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.TableField;
import com.fasterxml.jackson.annotation.JsonIgnore;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
-import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import java.io.Serializable;
@@ -14,11 +15,10 @@ import java.util.Map;
/**
* Entity基类
*
- * @author ruoyi
+ * @author Lion Li
*/
@Data
-@NoArgsConstructor
@Accessors(chain = true)
public class BaseEntity implements Serializable {
@@ -28,43 +28,43 @@ public class BaseEntity implements Serializable {
* 搜索值
*/
@ApiModelProperty(value = "搜索值")
+ @TableField(exist = false)
private String searchValue;
/**
* 创建者
*/
@ApiModelProperty(value = "创建者")
+ @TableField(fill = FieldFill.INSERT)
private String createBy;
/**
* 创建时间
*/
@ApiModelProperty(value = "创建时间")
+ @TableField(fill = FieldFill.INSERT)
private Date createTime;
/**
* 更新者
*/
@ApiModelProperty(value = "更新者")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
private String updateBy;
/**
* 更新时间
*/
@ApiModelProperty(value = "更新时间")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
private Date updateTime;
- /**
- * 备注
- */
- @ApiModelProperty(value = "备注")
- private String remark;
-
/**
* 请求参数
*/
@JsonIgnore
@ApiModelProperty(value = "请求参数")
+ @TableField(exist = false)
private Map params = new HashMap<>();
}
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/TreeEntity.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/TreeEntity.java
index 8db10aa2b..c0e62c710 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/TreeEntity.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/TreeEntity.java
@@ -1,9 +1,9 @@
package com.ruoyi.common.core.domain;
+import com.baomidou.mybatisplus.annotation.TableField;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
-import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import java.util.ArrayList;
@@ -12,12 +12,11 @@ import java.util.List;
/**
* Tree基类
*
- * @author ruoyi
+ * @author Lion Li
*/
-@EqualsAndHashCode(callSuper = true)
@Data
-@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
@Accessors(chain = true)
public class TreeEntity extends BaseEntity {
@@ -26,6 +25,7 @@ public class TreeEntity extends BaseEntity {
/**
* 父菜单名称
*/
+ @TableField(exist = false)
@ApiModelProperty(value = "父菜单名称")
private String parentName;
@@ -35,21 +35,10 @@ public class TreeEntity extends BaseEntity {
@ApiModelProperty(value = "父菜单ID")
private Long parentId;
- /**
- * 显示顺序
- */
- @ApiModelProperty(value = "显示顺序")
- private Integer orderNum;
-
- /**
- * 祖级列表
- */
- @ApiModelProperty(value = "祖级列表")
- private String ancestors;
-
/**
* 子部门
*/
+ @TableField(exist = false)
@ApiModelProperty(value = "子部门")
private List> children = new ArrayList<>();
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/TreeSelect.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/TreeSelect.java
index 2049486fc..963ac5c4d 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/TreeSelect.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/TreeSelect.java
@@ -3,7 +3,10 @@ package com.ruoyi.common.core.domain;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.ruoyi.common.core.domain.entity.SysDept;
import com.ruoyi.common.core.domain.entity.SysMenu;
-import lombok.*;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import java.io.Serializable;
@@ -12,39 +15,53 @@ import java.util.stream.Collectors;
/**
* Treeselect树结构实体类
- *
- * @author ruoyi
+ *
+ * @author Lion Li
*/
@Data
@NoArgsConstructor
@Accessors(chain = true)
-public class TreeSelect implements Serializable
-{
+@ApiModel("树结构实体类")
+public class TreeSelect implements Serializable {
+
private static final long serialVersionUID = 1L;
- /** 节点ID */
+ /**
+ * 节点ID
+ */
+ @ApiModelProperty(value = "节点ID")
private Long id;
- /** 节点名称 */
+ /**
+ * 节点名称
+ */
+ @ApiModelProperty(value = "节点名称")
private String label;
- /** 子节点 */
+ /**
+ * 子节点
+ */
+ @ApiModelProperty(value = "子节点")
@JsonInclude(JsonInclude.Include.NON_EMPTY)
private List children;
- public TreeSelect(SysDept dept)
- {
+ public TreeSelect(SysDept dept) {
this.id = dept.getDeptId();
this.label = dept.getDeptName();
- this.children = dept.getChildren().stream().map(TreeSelect::new).collect(Collectors.toList());
+ this.children = dept.getChildren()
+ .stream()
+ .map(d -> new TreeSelect((SysDept) d))
+ .collect(Collectors.toList());
}
- public TreeSelect(SysMenu menu)
- {
+ public TreeSelect(SysMenu menu) {
this.id = menu.getMenuId();
this.label = menu.getMenuName();
- this.children = menu.getChildren().stream().map(TreeSelect::new).collect(Collectors.toList());
+ this.children = menu.getChildren()
+ .stream()
+ .map(d -> new TreeSelect((SysMenu) d))
+ .collect(Collectors.toList());
}
}
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/dto/OperLogDTO.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/dto/OperLogDTO.java
index f5132efe6..773858f64 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/dto/OperLogDTO.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/dto/OperLogDTO.java
@@ -8,15 +8,16 @@ import java.io.Serializable;
import java.util.Date;
/**
- * 操作日志记录表 oper_log
+ * 通用操作日志实体
*
- * @author ruoyi
+ * @author Lion Li
*/
@Data
@NoArgsConstructor
@Accessors(chain = true)
public class OperLogDTO implements Serializable {
+
private static final long serialVersionUID = 1L;
/**
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysDept.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysDept.java
index 62056e027..17ff6606e 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysDept.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysDept.java
@@ -1,48 +1,44 @@
package com.ruoyi.common.core.domain.entity;
-import com.baomidou.mybatisplus.annotation.*;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.ruoyi.common.core.domain.TreeEntity;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
-import lombok.NoArgsConstructor;
+import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import javax.validation.constraints.Email;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Size;
-import java.io.Serializable;
-import java.util.*;
/**
* 部门表 sys_dept
*
- * @author ruoyi
+ * @author Lion Li
*/
@Data
-@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
@Accessors(chain = true)
@TableName("sys_dept")
-public class SysDept implements Serializable {
+@ApiModel("部门业务对象")
+public class SysDept extends TreeEntity {
private static final long serialVersionUID = 1L;
/**
* 部门ID
*/
- @TableId(value = "dept_id", type = IdType.AUTO)
+ @ApiModelProperty(value = "部门id")
+ @TableId(value = "dept_id")
private Long deptId;
- /**
- * 父部门ID
- */
- private Long parentId;
-
- /**
- * 祖级列表
- */
- private String ancestors;
-
/**
* 部门名称
*/
+ @ApiModelProperty(value = "部门名称")
@NotBlank(message = "部门名称不能为空")
@Size(min = 0, max = 30, message = "部门名称长度不能超过30个字符")
private String deptName;
@@ -50,23 +46,27 @@ public class SysDept implements Serializable {
/**
* 显示顺序
*/
+ @ApiModelProperty(value = "显示顺序")
@NotBlank(message = "显示顺序不能为空")
private String orderNum;
/**
* 负责人
*/
+ @ApiModelProperty(value = "负责人")
private String leader;
/**
* 联系电话
*/
+ @ApiModelProperty(value = "联系电话")
@Size(min = 0, max = 11, message = "联系电话长度不能超过11个字符")
private String phone;
/**
* 邮箱
*/
+ @ApiModelProperty(value = "邮箱")
@Email(message = "邮箱格式不正确")
@Size(min = 0, max = 50, message = "邮箱长度不能超过50个字符")
private String email;
@@ -74,54 +74,20 @@ public class SysDept implements Serializable {
/**
* 部门状态:0正常,1停用
*/
+ @ApiModelProperty(value = "部门状态:0正常,1停用")
private String status;
/**
* 删除标志(0代表存在 2代表删除)
*/
+ @ApiModelProperty(value = "删除标志(0代表存在 2代表删除)")
@TableLogic
private String delFlag;
/**
- * 父部门名称
+ * 祖级列表
*/
- @TableField(exist = false)
- private String parentName;
-
- /**
- * 创建者
- */
- @TableField(fill = FieldFill.INSERT)
- private String createBy;
-
- /**
- * 创建时间
- */
- @TableField(fill = FieldFill.INSERT)
- private Date createTime;
-
- /**
- * 更新者
- */
- @TableField(fill = FieldFill.INSERT_UPDATE)
- private String updateBy;
-
- /**
- * 更新时间
- */
- @TableField(fill = FieldFill.INSERT_UPDATE)
- private Date updateTime;
-
- /**
- * 子部门
- */
- @TableField(exist = false)
- private List children = new ArrayList();
-
- /**
- * 请求参数
- */
- @TableField(exist = false)
- private Map params = new HashMap<>();
+ @ApiModelProperty(value = "祖级列表")
+ private String ancestors;
}
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysDictData.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysDictData.java
index 89ee1c1bc..3c572bd27 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysDictData.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysDictData.java
@@ -2,51 +2,54 @@ package com.ruoyi.common.core.domain.entity;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
-import com.baomidou.mybatisplus.annotation.*;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
import com.ruoyi.common.annotation.ExcelDictFormat;
import com.ruoyi.common.constant.UserConstants;
import com.ruoyi.common.convert.ExcelDictConvert;
+import com.ruoyi.common.core.domain.BaseEntity;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
-import lombok.NoArgsConstructor;
+import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Size;
-import java.io.Serializable;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.Map;
/**
* 字典数据表 sys_dict_data
*
- * @author ruoyi
+ * @author Lion Li
*/
@Data
-@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
@Accessors(chain = true)
@TableName("sys_dict_data")
@ExcelIgnoreUnannotated
-public class SysDictData implements Serializable {
- private static final long serialVersionUID = 1L;
+@ApiModel("字典数据业务对象")
+public class SysDictData extends BaseEntity {
/**
* 字典编码
*/
+ @ApiModelProperty(value = "字典编码")
@ExcelProperty(value = "字典编码")
- @TableId(value = "dict_code", type = IdType.AUTO)
+ @TableId(value = "dict_code")
private Long dictCode;
/**
* 字典排序
*/
+ @ApiModelProperty(value = "字典排序")
@ExcelProperty(value = "字典排序")
private Long dictSort;
/**
* 字典标签
*/
+ @ApiModelProperty(value = "字典标签")
@ExcelProperty(value = "字典标签")
@NotBlank(message = "字典标签不能为空")
@Size(min = 0, max = 100, message = "字典标签长度不能超过100个字符")
@@ -55,6 +58,7 @@ public class SysDictData implements Serializable {
/**
* 字典键值
*/
+ @ApiModelProperty(value = "字典键值")
@ExcelProperty(value = "字典键值")
@NotBlank(message = "字典键值不能为空")
@Size(min = 0, max = 100, message = "字典键值长度不能超过100个字符")
@@ -63,6 +67,7 @@ public class SysDictData implements Serializable {
/**
* 字典类型
*/
+ @ApiModelProperty(value = "字典类型")
@ExcelProperty(value = "字典类型")
@NotBlank(message = "字典类型不能为空")
@Size(min = 0, max = 100, message = "字典类型长度不能超过100个字符")
@@ -71,17 +76,20 @@ public class SysDictData implements Serializable {
/**
* 样式属性(其他样式扩展)
*/
+ @ApiModelProperty(value = "样式属性(其他样式扩展)")
@Size(min = 0, max = 100, message = "样式属性长度不能超过100个字符")
private String cssClass;
/**
* 表格字典样式
*/
+ @ApiModelProperty(value = "表格字典样式")
private String listClass;
/**
* 是否默认(Y是 N否)
*/
+ @ApiModelProperty(value = "是否默认(Y是 N否)")
@ExcelProperty(value = "是否默认", converter = ExcelDictConvert.class)
@ExcelDictFormat(dictType = "sys_yes_no")
private String isDefault;
@@ -89,47 +97,19 @@ public class SysDictData implements Serializable {
/**
* 状态(0正常 1停用)
*/
+ @ApiModelProperty(value = "状态(0正常 1停用)")
@ExcelProperty(value = "状态", converter = ExcelDictConvert.class)
@ExcelDictFormat(dictType = "sys_normal_disable")
private String status;
- /**
- * 创建者
- */
- @TableField(fill = FieldFill.INSERT)
- private String createBy;
-
- /**
- * 创建时间
- */
- @TableField(fill = FieldFill.INSERT)
- private Date createTime;
-
- /**
- * 更新者
- */
- @TableField(fill = FieldFill.INSERT_UPDATE)
- private String updateBy;
-
- /**
- * 更新时间
- */
- @TableField(fill = FieldFill.INSERT_UPDATE)
- private Date updateTime;
-
/**
* 备注
*/
+ @ApiModelProperty(value = "备注")
private String remark;
- /**
- * 请求参数
- */
- @TableField(exist = false)
- private Map params = new HashMap<>();
-
public boolean getDefault() {
- return UserConstants.YES.equals(this.isDefault) ? true : false;
+ return UserConstants.YES.equals(this.isDefault);
}
}
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysDictType.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysDictType.java
index 35d9a60fe..c6c9b1a29 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysDictType.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysDictType.java
@@ -2,44 +2,46 @@ package com.ruoyi.common.core.domain.entity;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
-import com.baomidou.mybatisplus.annotation.*;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
import com.ruoyi.common.annotation.ExcelDictFormat;
import com.ruoyi.common.convert.ExcelDictConvert;
+import com.ruoyi.common.core.domain.BaseEntity;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
-import lombok.NoArgsConstructor;
+import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Size;
-import java.io.Serializable;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.Map;
/**
* 字典类型表 sys_dict_type
*
- * @author ruoyi
+ * @author Lion Li
*/
@Data
-@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
@Accessors(chain = true)
@TableName("sys_dict_type")
@ExcelIgnoreUnannotated
-public class SysDictType implements Serializable {
- private static final long serialVersionUID = 1L;
+@ApiModel("字典类型业务对象")
+public class SysDictType extends BaseEntity {
/**
* 字典主键
*/
+ @ApiModelProperty(value = "字典主键")
@ExcelProperty(value = "字典主键")
- @TableId(value = "dict_id", type = IdType.AUTO)
+ @TableId(value = "dict_id")
private Long dictId;
/**
* 字典名称
*/
+ @ApiModelProperty(value = "字典名称")
@ExcelProperty(value = "字典名称")
@NotBlank(message = "字典名称不能为空")
@Size(min = 0, max = 100, message = "字典类型名称长度不能超过100个字符")
@@ -48,6 +50,7 @@ public class SysDictType implements Serializable {
/**
* 字典类型
*/
+ @ApiModelProperty(value = "字典类型")
@ExcelProperty(value = "字典类型")
@NotBlank(message = "字典类型不能为空")
@Size(min = 0, max = 100, message = "字典类型类型长度不能超过100个字符")
@@ -56,43 +59,15 @@ public class SysDictType implements Serializable {
/**
* 状态(0正常 1停用)
*/
+ @ApiModelProperty(value = "状态(0正常 1停用)")
@ExcelProperty(value = "状态", converter = ExcelDictConvert.class)
@ExcelDictFormat(dictType = "sys_normal_disable")
private String status;
- /**
- * 创建者
- */
- @TableField(fill = FieldFill.INSERT)
- private String createBy;
-
- /**
- * 创建时间
- */
- @TableField(fill = FieldFill.INSERT)
- private Date createTime;
-
- /**
- * 更新者
- */
- @TableField(fill = FieldFill.INSERT_UPDATE)
- private String updateBy;
-
- /**
- * 更新时间
- */
- @TableField(fill = FieldFill.INSERT_UPDATE)
- private Date updateTime;
-
/**
* 备注
*/
+ @ApiModelProperty(value = "备注")
private String remark;
- /**
- * 请求参数
- */
- @TableField(exist = false)
- private Map params = new HashMap<>();
-
}
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysMenu.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysMenu.java
index d2c5bbf94..30d074b75 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysMenu.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysMenu.java
@@ -1,154 +1,120 @@
package com.ruoyi.common.core.domain.entity;
-import com.baomidou.mybatisplus.annotation.*;
-import com.fasterxml.jackson.annotation.JsonFormat;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.ruoyi.common.core.domain.TreeEntity;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
-import lombok.NoArgsConstructor;
+import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Size;
-import java.io.Serializable;
-import java.util.*;
/**
* 菜单权限表 sys_menu
*
- * @author ruoyi
+ * @author Lion Li
*/
@Data
-@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
@Accessors(chain = true)
@TableName("sys_menu")
-public class SysMenu implements Serializable {
- private static final long serialVersionUID = 1L;
+@ApiModel("菜单权限业务对象")
+public class SysMenu extends TreeEntity {
/**
* 菜单ID
*/
- @TableId(value = "menu_id", type = IdType.AUTO)
+ @ApiModelProperty(value = "菜单ID")
+ @TableId(value = "menu_id")
private Long menuId;
/**
* 菜单名称
*/
+ @ApiModelProperty(value = "菜单名称")
@NotBlank(message = "菜单名称不能为空")
@Size(min = 0, max = 50, message = "菜单名称长度不能超过50个字符")
private String menuName;
- /**
- * 父菜单名称
- */
- @TableField(exist = false)
- private String parentName;
-
- /**
- * 父菜单ID
- */
- private Long parentId;
-
/**
* 显示顺序
*/
+ @ApiModelProperty(value = "显示顺序")
@NotBlank(message = "显示顺序不能为空")
private String orderNum;
/**
* 路由地址
*/
+ @ApiModelProperty(value = "路由地址")
@Size(min = 0, max = 200, message = "路由地址不能超过200个字符")
private String path;
/**
* 组件路径
*/
+ @ApiModelProperty(value = "组件路径")
@Size(min = 0, max = 200, message = "组件路径不能超过255个字符")
private String component;
/**
* 路由参数
*/
+ @ApiModelProperty(value = "路由参数")
private String query;
/**
* 是否为外链(0是 1否)
*/
+ @ApiModelProperty(value = "是否为外链(0是 1否)")
private String isFrame;
/**
* 是否缓存(0缓存 1不缓存)
*/
+ @ApiModelProperty(value = "是否缓存(0缓存 1不缓存)")
private String isCache;
/**
* 类型(M目录 C菜单 F按钮)
*/
+ @ApiModelProperty(value = "类型(M目录 C菜单 F按钮)")
@NotBlank(message = "菜单类型不能为空")
private String menuType;
/**
* 显示状态(0显示 1隐藏)
*/
+ @ApiModelProperty(value = "显示状态(0显示 1隐藏)")
private String visible;
/**
* 菜单状态(0显示 1隐藏)
*/
+ @ApiModelProperty(value = "菜单状态(0显示 1隐藏)")
private String status;
/**
* 权限字符串
*/
+ @ApiModelProperty(value = "权限字符串")
@Size(min = 0, max = 100, message = "权限标识长度不能超过100个字符")
private String perms;
/**
* 菜单图标
*/
+ @ApiModelProperty(value = "菜单图标")
private String icon;
- /**
- * 创建者
- */
- @TableField(fill = FieldFill.INSERT)
- private String createBy;
-
- /**
- * 创建时间
- */
- @TableField(fill = FieldFill.INSERT)
- @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
- private Date createTime;
-
- /**
- * 更新者
- */
- @TableField(fill = FieldFill.INSERT_UPDATE)
- private String updateBy;
-
- /**
- * 更新时间
- */
- @TableField(fill = FieldFill.INSERT_UPDATE)
- @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
- private Date updateTime;
-
/**
* 备注
*/
+ @ApiModelProperty(value = "备注")
private String remark;
- /**
- * 请求参数
- */
- @TableField(exist = false)
- private Map params = new HashMap<>();
-
- /**
- * 子菜单
- */
- @TableField(exist = false)
- private List children = new ArrayList();
-
}
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysRole.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysRole.java
index 516352458..1d186db52 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysRole.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysRole.java
@@ -2,44 +2,48 @@ package com.ruoyi.common.core.domain.entity;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
-import com.baomidou.mybatisplus.annotation.*;
+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.annotation.ExcelDictFormat;
import com.ruoyi.common.convert.ExcelDictConvert;
+import com.ruoyi.common.core.domain.BaseEntity;
+import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
+import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Size;
-import java.io.Serializable;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.Map;
/**
* 角色表 sys_role
*
- * @author ruoyi
+ * @author Lion Li
*/
@Data
@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
@Accessors(chain = true)
@TableName("sys_role")
@ExcelIgnoreUnannotated
-public class SysRole implements Serializable {
- private static final long serialVersionUID = 1L;
+public class SysRole extends BaseEntity {
/**
* 角色ID
*/
+ @ApiModelProperty(value = "角色ID")
@ExcelProperty(value = "角色序号")
- @TableId(value = "role_id", type = IdType.AUTO)
+ @TableId(value = "role_id")
private Long roleId;
/**
* 角色名称
*/
+ @ApiModelProperty(value = "角色名称")
@ExcelProperty(value = "角色名称")
@NotBlank(message = "角色名称不能为空")
@Size(min = 0, max = 30, message = "角色名称长度不能超过30个字符")
@@ -48,6 +52,7 @@ public class SysRole implements Serializable {
/**
* 角色权限
*/
+ @ApiModelProperty(value = "角色权限")
@ExcelProperty(value = "角色权限")
@NotBlank(message = "权限字符不能为空")
@Size(min = 0, max = 100, message = "权限字符长度不能超过100个字符")
@@ -56,6 +61,7 @@ public class SysRole implements Serializable {
/**
* 角色排序
*/
+ @ApiModelProperty(value = "角色排序")
@ExcelProperty(value = "角色排序")
@NotBlank(message = "显示顺序不能为空")
private String roleSort;
@@ -63,6 +69,7 @@ public class SysRole implements Serializable {
/**
* 数据范围(1:所有数据权限;2:自定义数据权限;3:本部门数据权限;4:本部门及以下数据权限;5:仅本人数据权限)
*/
+ @ApiModelProperty(value = "数据范围(1:所有数据权限;2:自定义数据权限;3:本部门数据权限;4:本部门及以下数据权限;5:仅本人数据权限)")
@ExcelProperty(value = "数据范围", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "1=所有数据权限,2=自定义数据权限,3=本部门数据权限,4=本部门及以下数据权限,5=仅本人数据权限")
private String dataScope;
@@ -70,16 +77,19 @@ public class SysRole implements Serializable {
/**
* 菜单树选择项是否关联显示( 0:父子不互相关联显示 1:父子互相关联显示)
*/
+ @ApiModelProperty(value = "菜单树选择项是否关联显示( 0:父子不互相关联显示 1:父子互相关联显示)")
private boolean menuCheckStrictly;
/**
* 部门树选择项是否关联显示(0:父子不互相关联显示 1:父子互相关联显示 )
*/
+ @ApiModelProperty(value = "部门树选择项是否关联显示(0:父子不互相关联显示 1:父子互相关联显示 )")
private boolean deptCheckStrictly;
/**
* 角色状态(0正常 1停用)
*/
+ @ApiModelProperty(value = "角色状态(0正常 1停用)")
@ExcelProperty(value = "角色状态", converter = ExcelDictConvert.class)
@ExcelDictFormat(dictType = "sys_common_status")
private String status;
@@ -87,59 +97,34 @@ public class SysRole implements Serializable {
/**
* 删除标志(0代表存在 2代表删除)
*/
+ @ApiModelProperty(value = "删除标志(0代表存在 2代表删除)")
@TableLogic
private String delFlag;
- /**
- * 创建者
- */
- @TableField(fill = FieldFill.INSERT)
- private String createBy;
-
- /**
- * 创建时间
- */
- @TableField(fill = FieldFill.INSERT)
- private Date createTime;
-
- /**
- * 更新者
- */
- @TableField(fill = FieldFill.INSERT_UPDATE)
- private String updateBy;
-
- /**
- * 更新时间
- */
- @TableField(fill = FieldFill.INSERT_UPDATE)
- private Date updateTime;
-
/**
* 备注
*/
+ @ApiModelProperty(value = "备注")
private String remark;
- /**
- * 请求参数
- */
- @TableField(exist = false)
- private Map params = new HashMap<>();
-
/**
* 用户是否存在此角色标识 默认不存在
*/
+ @ApiModelProperty(value = "用户是否存在此角色标识 默认不存在")
@TableField(exist = false)
private boolean flag = false;
/**
* 菜单组
*/
+ @ApiModelProperty(value = "菜单组")
@TableField(exist = false)
private Long[] menuIds;
/**
* 部门组(数据权限)
*/
+ @ApiModelProperty(value = "部门组(数据权限)")
@TableField(exist = false)
private Long[] deptIds;
@@ -147,6 +132,7 @@ public class SysRole implements Serializable {
this.roleId = roleId;
}
+ @ApiModelProperty(value = "是否管理员")
public boolean isAdmin() {
return isAdmin(this.roleId);
}
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java
index 770998126..2fa57f5ca 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java
@@ -3,46 +3,51 @@ package com.ruoyi.common.core.domain.entity;
import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
+import com.ruoyi.common.core.domain.BaseEntity;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
+import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import javax.validation.constraints.Email;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Size;
-import java.io.Serializable;
import java.util.Date;
-import java.util.HashMap;
import java.util.List;
-import java.util.Map;
/**
* 用户对象 sys_user
*
- * @author ruoyi
+ * @author Lion Li
*/
@Data
@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
@Accessors(chain = true)
@TableName("sys_user")
-public class SysUser implements Serializable {
- private static final long serialVersionUID = 1L;
+@ApiModel("用户信息业务对象")
+public class SysUser extends BaseEntity {
/**
* 用户ID
*/
- @TableId(value = "user_id", type = IdType.AUTO)
+ @ApiModelProperty(value = "用户ID")
+ @TableId(value = "user_id")
private Long userId;
/**
* 部门ID
*/
+ @ApiModelProperty(value = "部门ID")
private Long deptId;
/**
* 用户账号
*/
+ @ApiModelProperty(value = "用户账号")
@NotBlank(message = "用户账号不能为空")
@Size(min = 0, max = 30, message = "用户账号长度不能超过30个字符")
private String userName;
@@ -50,12 +55,14 @@ public class SysUser implements Serializable {
/**
* 用户昵称
*/
+ @ApiModelProperty(value = "用户昵称")
@Size(min = 0, max = 30, message = "用户昵称长度不能超过30个字符")
private String nickName;
/**
* 用户邮箱
*/
+ @ApiModelProperty(value = "用户邮箱")
@Email(message = "邮箱格式不正确")
@Size(min = 0, max = 50, message = "邮箱长度不能超过50个字符")
private String email;
@@ -63,21 +70,25 @@ public class SysUser implements Serializable {
/**
* 手机号码
*/
+ @ApiModelProperty(value = "手机号码")
private String phonenumber;
/**
* 用户性别
*/
+ @ApiModelProperty(value = "用户性别")
private String sex;
/**
* 用户头像
*/
+ @ApiModelProperty(value = "用户头像")
private String avatar;
/**
* 密码
*/
+ @ApiModelProperty(value = "密码")
@TableField(
insertStrategy = FieldStrategy.NOT_EMPTY,
updateStrategy = FieldStrategy.NOT_EMPTY,
@@ -94,86 +105,66 @@ public class SysUser implements Serializable {
/**
* 帐号状态(0正常 1停用)
*/
+ @ApiModelProperty(value = "帐号状态(0正常 1停用)")
private String status;
/**
* 删除标志(0代表存在 2代表删除)
*/
+ @ApiModelProperty(value = "删除标志(0代表存在 2代表删除)")
@TableLogic
private String delFlag;
/**
* 最后登录IP
*/
+ @ApiModelProperty(value = "最后登录IP")
private String loginIp;
/**
* 最后登录时间
*/
+ @ApiModelProperty(value = "最后登录时间")
private Date loginDate;
- /**
- * 创建者
- */
- @TableField(fill = FieldFill.INSERT)
- private String createBy;
-
- /**
- * 创建时间
- */
- @TableField(fill = FieldFill.INSERT)
- private Date createTime;
-
- /**
- * 更新者
- */
- @TableField(fill = FieldFill.INSERT_UPDATE)
- private String updateBy;
-
- /**
- * 更新时间
- */
- @TableField(fill = FieldFill.INSERT_UPDATE)
- private Date updateTime;
-
/**
* 备注
*/
+ @ApiModelProperty(value = "备注")
private String remark;
- /**
- * 请求参数
- */
- @TableField(exist = false)
- private Map params = new HashMap<>();
-
/**
* 部门对象
*/
+ @ApiModelProperty(value = "部门对象")
@TableField(exist = false)
private SysDept dept;
/**
* 角色对象
*/
+ @ApiModelProperty(value = "角色对象")
@TableField(exist = false)
private List roles;
/**
* 角色组
*/
+ @ApiModelProperty(value = "角色组")
@TableField(exist = false)
private Long[] roleIds;
/**
* 岗位组
*/
+ @ApiModelProperty(value = "岗位组")
@TableField(exist = false)
private Long[] postIds;
/**
* 角色ID
*/
+ @ApiModelProperty(value = "角色ID")
@TableField(exist = false)
private Long roleId;
@@ -181,6 +172,7 @@ public class SysUser implements Serializable {
this.userId = userId;
}
+ @ApiModelProperty(value = "是否管理员")
public boolean isAdmin() {
return isAdmin(this.userId);
}
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/model/LoginBody.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/model/LoginBody.java
index ae2c9e252..d47053694 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/model/LoginBody.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/model/LoginBody.java
@@ -1,37 +1,43 @@
package com.ruoyi.common.core.domain.model;
-import lombok.*;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
import lombok.experimental.Accessors;
/**
* 用户登录对象
- *
- * @author ruoyi
+ *
+ * @author Lion Li
*/
@Data
-@NoArgsConstructor
@Accessors(chain = true)
-public class LoginBody
-{
+@ApiModel("用户登录对象")
+public class LoginBody {
+
/**
* 用户名
*/
+ @ApiModelProperty(value = "用户名")
private String username;
/**
* 用户密码
*/
+ @ApiModelProperty(value = "用户密码")
private String password;
/**
* 验证码
*/
+ @ApiModelProperty(value = "验证码")
private String code;
/**
* 唯一标识
*/
+ @ApiModelProperty(value = "唯一标识")
private String uuid = "";
}
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/model/LoginUser.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/model/LoginUser.java
index 7bc072af7..9f7727abb 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/model/LoginUser.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/model/LoginUser.java
@@ -2,7 +2,8 @@ package com.ruoyi.common.core.domain.model;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.ruoyi.common.core.domain.entity.SysUser;
-import lombok.*;
+import lombok.Data;
+import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;
@@ -13,14 +14,14 @@ import java.util.Set;
/**
* 登录用户身份权限
*
- * @author ruoyi
+ * @author Lion Li
*/
@Data
@NoArgsConstructor
@Accessors(chain = true)
-public class LoginUser implements UserDetails
-{
+public class LoginUser implements UserDetails {
+
private static final long serialVersionUID = 1L;
/**
@@ -78,14 +79,12 @@ public class LoginUser implements UserDetails
*/
private SysUser user;
- public LoginUser(SysUser user, Set permissions)
- {
+ public LoginUser(SysUser user, Set permissions) {
this.user = user;
this.permissions = permissions;
}
- public LoginUser(Long userId, Long deptId, SysUser user, Set permissions)
- {
+ public LoginUser(Long userId, Long deptId, SysUser user, Set permissions) {
this.userId = userId;
this.deptId = deptId;
this.user = user;
@@ -94,14 +93,12 @@ public class LoginUser implements UserDetails
@JsonIgnore
@Override
- public String getPassword()
- {
+ public String getPassword() {
return user.getPassword();
}
@Override
- public String getUsername()
- {
+ public String getUsername() {
return user.getUserName();
}
@@ -110,50 +107,39 @@ public class LoginUser implements UserDetails
*/
@JsonIgnore
@Override
- public boolean isAccountNonExpired()
- {
+ public boolean isAccountNonExpired() {
return true;
}
/**
* 指定用户是否解锁,锁定的用户无法进行身份验证
- *
- * @return
*/
@JsonIgnore
@Override
- public boolean isAccountNonLocked()
- {
+ public boolean isAccountNonLocked() {
return true;
}
/**
* 指示是否已过期的用户的凭据(密码),过期的凭据防止认证
- *
- * @return
*/
@JsonIgnore
@Override
- public boolean isCredentialsNonExpired()
- {
+ public boolean isCredentialsNonExpired() {
return true;
}
/**
* 是否可用 ,禁用的用户不能身份验证
- *
- * @return
*/
@JsonIgnore
@Override
- public boolean isEnabled()
- {
+ public boolean isEnabled() {
return true;
}
@Override
- public Collection extends GrantedAuthority> getAuthorities()
- {
+ public Collection extends GrantedAuthority> getAuthorities() {
return null;
}
}
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/model/RegisterBody.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/model/RegisterBody.java
index 5baa88781..ce6c385ae 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/model/RegisterBody.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/model/RegisterBody.java
@@ -1,11 +1,13 @@
package com.ruoyi.common.core.domain.model;
+import io.swagger.annotations.ApiModel;
+
/**
* 用户注册对象
- *
- * @author ruoyi
+ *
+ * @author Lion Li
*/
-public class RegisterBody extends LoginBody
-{
+@ApiModel("用户注册对象")
+public class RegisterBody extends LoginBody {
}
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/mybatisplus/cache/MybatisPlusRedisCache.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/mybatisplus/cache/MybatisPlusRedisCache.java
index 51b9ec38e..8f7379fcd 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/core/mybatisplus/cache/MybatisPlusRedisCache.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/mybatisplus/cache/MybatisPlusRedisCache.java
@@ -18,6 +18,7 @@ import java.util.concurrent.locks.ReentrantReadWriteLock;
* 使用方法 配置文件开启 mybatis-plus 二级缓存
* 在 XxxMapper.java 类上添加注解 @CacheNamespace(implementation = MybatisPlusRedisCache.class, eviction = MybatisPlusRedisCache.class)
*
+ * @deprecated 3.5.0删除 推荐使用spirng-cache
* @author Lion Li
*/
@Slf4j
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/exception/job/TaskException.java b/ruoyi-common/src/main/java/com/ruoyi/common/exception/job/TaskException.java
index 14b2361d0..adba5a464 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/exception/job/TaskException.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/exception/job/TaskException.java
@@ -2,7 +2,8 @@ package com.ruoyi.common.exception.job;
/**
* 计划策略异常
- *
+ *
+ * @deprecated 3.5.0删除 迁移至xxl-job
* @author ruoyi
*/
public class TaskException extends Exception
diff --git a/ruoyi-demo/pom.xml b/ruoyi-demo/pom.xml
index 2eff3c2db..339cbde44 100644
--- a/ruoyi-demo/pom.xml
+++ b/ruoyi-demo/pom.xml
@@ -5,7 +5,7 @@
ruoyi-vue-plus
com.ruoyi
- 3.1.0
+ 3.2.0
4.0.0
diff --git a/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/FeignTestController.java b/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/FeignTestController.java
index f8bec9f9c..2f833e33e 100644
--- a/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/FeignTestController.java
+++ b/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/FeignTestController.java
@@ -15,6 +15,7 @@ import org.springframework.web.bind.annotation.RestController;
* feign测试controller
*
* @author Lion Li
+ * @deprecated 由于使用人数较少 决定与 3.4.0 版本移除
*/
@Api(value = "feign测试", tags = {"feign测试"})
@RequiredArgsConstructor(onConstructor_ = @Autowired)
diff --git a/ruoyi-demo/src/main/java/com/ruoyi/demo/domain/TestDemo.java b/ruoyi-demo/src/main/java/com/ruoyi/demo/domain/TestDemo.java
index 21149d80d..74b57d991 100644
--- a/ruoyi-demo/src/main/java/com/ruoyi/demo/domain/TestDemo.java
+++ b/ruoyi-demo/src/main/java/com/ruoyi/demo/domain/TestDemo.java
@@ -1,13 +1,11 @@
package com.ruoyi.demo.domain;
import com.baomidou.mybatisplus.annotation.*;
+import com.ruoyi.common.core.domain.BaseEntity;
import lombok.Data;
-import lombok.NoArgsConstructor;
+import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
-import java.io.Serializable;
-import java.util.Date;
-
/**
* 测试单表对象 test_demo
*
@@ -15,10 +13,10 @@ import java.util.Date;
* @date 2021-07-26
*/
@Data
-@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
@Accessors(chain = true)
@TableName("test_demo")
-public class TestDemo implements Serializable {
+public class TestDemo extends BaseEntity {
private static final long serialVersionUID=1L;
@@ -42,7 +40,7 @@ public class TestDemo implements Serializable {
/**
* 排序号
*/
- @OrderBy(isDesc = false, sort = 1)
+ @OrderBy(asc = false, sort = 1)
private Long orderNum;
/**
@@ -61,30 +59,6 @@ public class TestDemo implements Serializable {
@Version
private Long version;
- /**
- * 创建时间
- */
- @TableField(fill = FieldFill.INSERT)
- private Date createTime;
-
- /**
- * 创建人
- */
- @TableField(fill = FieldFill.INSERT)
- private String createBy;
-
- /**
- * 更新时间
- */
- @TableField(fill = FieldFill.INSERT_UPDATE)
- private Date updateTime;
-
- /**
- * 更新人
- */
- @TableField(fill = FieldFill.INSERT_UPDATE)
- private String updateBy;
-
/**
* 删除标志
*/
diff --git a/ruoyi-demo/src/main/java/com/ruoyi/demo/domain/TestTree.java b/ruoyi-demo/src/main/java/com/ruoyi/demo/domain/TestTree.java
index 799a6d415..92e005b85 100644
--- a/ruoyi-demo/src/main/java/com/ruoyi/demo/domain/TestTree.java
+++ b/ruoyi-demo/src/main/java/com/ruoyi/demo/domain/TestTree.java
@@ -1,13 +1,14 @@
package com.ruoyi.demo.domain;
-import com.baomidou.mybatisplus.annotation.*;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.Version;
+import com.ruoyi.common.core.domain.TreeEntity;
import lombok.Data;
-import lombok.NoArgsConstructor;
+import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
-import java.io.Serializable;
-import java.util.Date;
-
/**
* 测试树表对象 test_tree
*
@@ -15,10 +16,10 @@ import java.util.Date;
* @date 2021-07-26
*/
@Data
-@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
@Accessors(chain = true)
@TableName("test_tree")
-public class TestTree implements Serializable {
+public class TestTree extends TreeEntity {
private static final long serialVersionUID=1L;
@@ -29,11 +30,6 @@ public class TestTree implements Serializable {
@TableId(value = "id")
private Long id;
- /**
- * 父id
- */
- private Long parentId;
-
/**
* 部门id
*/
@@ -55,30 +51,6 @@ public class TestTree implements Serializable {
@Version
private Long version;
- /**
- * 创建时间
- */
- @TableField(fill = FieldFill.INSERT)
- private Date createTime;
-
- /**
- * 创建人
- */
- @TableField(fill = FieldFill.INSERT)
- private String createBy;
-
- /**
- * 更新时间
- */
- @TableField(fill = FieldFill.INSERT_UPDATE)
- private Date updateTime;
-
- /**
- * 更新人
- */
- @TableField(fill = FieldFill.INSERT_UPDATE)
- private String updateBy;
-
/**
* 删除标志
*/
diff --git a/ruoyi-demo/src/main/java/com/ruoyi/demo/feign/FeignTestService.java b/ruoyi-demo/src/main/java/com/ruoyi/demo/feign/FeignTestService.java
index afda66cfb..50eb4ebf6 100644
--- a/ruoyi-demo/src/main/java/com/ruoyi/demo/feign/FeignTestService.java
+++ b/ruoyi-demo/src/main/java/com/ruoyi/demo/feign/FeignTestService.java
@@ -14,6 +14,7 @@ import org.springframework.web.bind.annotation.RequestParam;
* 增加 feign 的目的为使 http 请求接口化
*
* @author Lion Li
+ * @deprecated 由于使用人数较少 决定与 3.4.0 版本移除
*/
@FeignClient(
name = FeignTestConstant.BAIDU_NAME,
diff --git a/ruoyi-demo/src/main/java/com/ruoyi/demo/feign/constant/FeignTestConstant.java b/ruoyi-demo/src/main/java/com/ruoyi/demo/feign/constant/FeignTestConstant.java
index 7a5b3fb81..28dfa8adb 100644
--- a/ruoyi-demo/src/main/java/com/ruoyi/demo/feign/constant/FeignTestConstant.java
+++ b/ruoyi-demo/src/main/java/com/ruoyi/demo/feign/constant/FeignTestConstant.java
@@ -1,5 +1,9 @@
package com.ruoyi.demo.feign.constant;
+/**
+ * @deprecated 由于使用人数较少 决定与 3.4.0 版本移除
+ */
+@Deprecated
public class FeignTestConstant {
public static final String BAIDU_NAME = "baidu";
diff --git a/ruoyi-demo/src/main/java/com/ruoyi/demo/feign/fallback/FeignTestFallback.java b/ruoyi-demo/src/main/java/com/ruoyi/demo/feign/fallback/FeignTestFallback.java
index b7e4a1931..8e81ad7ad 100644
--- a/ruoyi-demo/src/main/java/com/ruoyi/demo/feign/fallback/FeignTestFallback.java
+++ b/ruoyi-demo/src/main/java/com/ruoyi/demo/feign/fallback/FeignTestFallback.java
@@ -14,6 +14,7 @@ import org.springframework.stereotype.Component;
*
* @see {com.ruoyi.framework.config.FeignConfig#errorDecoder()}
* @author Lion Li
+ * @deprecated 由于使用人数较少 决定与 3.4.0 版本移除
*/
@Slf4j
@Component
diff --git a/ruoyi-demo/src/main/java/com/ruoyi/demo/service/impl/TestTreeServiceImpl.java b/ruoyi-demo/src/main/java/com/ruoyi/demo/service/impl/TestTreeServiceImpl.java
index 349e96857..e793a86fe 100644
--- a/ruoyi-demo/src/main/java/com/ruoyi/demo/service/impl/TestTreeServiceImpl.java
+++ b/ruoyi-demo/src/main/java/com/ruoyi/demo/service/impl/TestTreeServiceImpl.java
@@ -1,11 +1,11 @@
package com.ruoyi.demo.service.impl;
import cn.hutool.core.bean.BeanUtil;
-import com.ruoyi.common.utils.StringUtils;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.ruoyi.common.annotation.DataScope;
import com.ruoyi.common.core.mybatisplus.core.ServicePlusImpl;
+import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.demo.domain.TestTree;
import com.ruoyi.demo.domain.bo.TestTreeBo;
import com.ruoyi.demo.domain.vo.TestTreeVo;
@@ -23,6 +23,7 @@ import java.util.Map;
* @author Lion Li
* @date 2021-07-26
*/
+//@DataSource(DataSourceType.SLAVE) // 切换从库查询
@Service
public class TestTreeServiceImpl extends ServicePlusImpl implements ITestTreeService {
diff --git a/ruoyi-extend/pom.xml b/ruoyi-extend/pom.xml
index 2a348af4a..6378eb9b8 100644
--- a/ruoyi-extend/pom.xml
+++ b/ruoyi-extend/pom.xml
@@ -5,7 +5,7 @@
ruoyi-vue-plus
com.ruoyi
- 3.1.0
+ 3.2.0
4.0.0
ruoyi-extend
diff --git a/ruoyi-extend/ruoyi-monitor-admin/pom.xml b/ruoyi-extend/ruoyi-monitor-admin/pom.xml
index dc0830373..d63b110b9 100644
--- a/ruoyi-extend/ruoyi-monitor-admin/pom.xml
+++ b/ruoyi-extend/ruoyi-monitor-admin/pom.xml
@@ -5,7 +5,7 @@
ruoyi-extend
com.ruoyi
- 3.1.0
+ 3.2.0
4.0.0
jar
diff --git a/ruoyi-extend/ruoyi-monitor-admin/src/main/java/com/ruoyi/monitor/admin/config/SecurityConfig.java b/ruoyi-extend/ruoyi-monitor-admin/src/main/java/com/ruoyi/monitor/admin/config/SecurityConfig.java
index 98834a9bc..ca9072c78 100644
--- a/ruoyi-extend/ruoyi-monitor-admin/src/main/java/com/ruoyi/monitor/admin/config/SecurityConfig.java
+++ b/ruoyi-extend/ruoyi-monitor-admin/src/main/java/com/ruoyi/monitor/admin/config/SecurityConfig.java
@@ -9,9 +9,9 @@ import org.springframework.security.config.annotation.web.configuration.WebSecur
import org.springframework.security.web.authentication.SavedRequestAwareAuthenticationSuccessHandler;
/**
- * spring security配置
+ * admin 监控 安全配置
*
- * @author ruoyi
+ * @author Lion Li
*/
@Configuration
@EnableWebSecurity
@@ -29,7 +29,7 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter {
SavedRequestAwareAuthenticationSuccessHandler successHandler = new SavedRequestAwareAuthenticationSuccessHandler();
successHandler.setTargetUrlParameter("redirectTo");
successHandler.setDefaultTargetUrl(adminContextPath + "/");
-
+ // admin监控 用户鉴权
httpSecurity.authorizeRequests()
//授予对所有静态资产和登录页面的公共访问权限。
.antMatchers(adminContextPath + "/assets/**").permitAll()
diff --git a/ruoyi-framework/pom.xml b/ruoyi-framework/pom.xml
index 7010724b1..20176a0be 100644
--- a/ruoyi-framework/pom.xml
+++ b/ruoyi-framework/pom.xml
@@ -5,7 +5,7 @@
ruoyi-vue-plus
com.ruoyi
- 3.1.0
+ 3.2.0
4.0.0
diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/Interceptor/PlusWebInvokeTimeInterceptor.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/Interceptor/PlusWebInvokeTimeInterceptor.java
new file mode 100644
index 000000000..e2120bf00
--- /dev/null
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/Interceptor/PlusWebInvokeTimeInterceptor.java
@@ -0,0 +1,85 @@
+package com.ruoyi.framework.Interceptor;
+
+import cn.hutool.core.map.MapUtil;
+import com.alibaba.ttl.TransmittableThreadLocal;
+import com.ruoyi.common.utils.JsonUtils;
+import com.ruoyi.common.utils.StringUtils;
+import com.yomahub.tlog.context.TLogContext;
+import com.yomahub.tlog.web.interceptor.AbsTLogWebHandlerMethodInterceptor;
+import com.yomahub.tlog.web.wrapper.RequestWrapper;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.time.StopWatch;
+import org.springframework.http.MediaType;
+import org.springframework.web.servlet.ModelAndView;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.util.Map;
+
+/**
+ * 重写Tlog web的调用时间统计拦截器
+ *
+ * @author Lion Li
+ * @since 3.3.0
+ */
+@Slf4j
+public class PlusWebInvokeTimeInterceptor extends AbsTLogWebHandlerMethodInterceptor {
+
+ private final TransmittableThreadLocal invokeTimeTL = new TransmittableThreadLocal<>();
+
+ @Override
+ public boolean preHandleByHandlerMethod(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
+ if (TLogContext.enableInvokeTimePrint()) {
+ String url = request.getMethod() + " " + request.getRequestURI();
+
+ // 打印请求参数
+ if (isJsonRequest(request)) {
+ String jsonParam = new RequestWrapper(request).getBodyString();
+ log.info("[PLUS]开始请求 => URL[{}],参数类型[json],参数:[{}]", url, jsonParam);
+ } else {
+ Map parameterMap = request.getParameterMap();
+ if (MapUtil.isNotEmpty(parameterMap)) {
+ String parameters = JsonUtils.toJsonString(parameterMap);
+ log.info("[PLUS]开始请求 => URL[{}],参数类型[param],参数:[{}]", url, parameters);
+ } else {
+ log.info("[PLUS]开始请求 => URL[{}],无参数", url);
+ }
+ }
+
+ StopWatch stopWatch = new StopWatch();
+ invokeTimeTL.set(stopWatch);
+ stopWatch.start();
+ }
+ return true;
+ }
+
+ @Override
+ public void postHandleByHandlerMethod(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
+
+ }
+
+ @Override
+ public void afterCompletionByHandlerMethod(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
+ if (TLogContext.enableInvokeTimePrint()) {
+ StopWatch stopWatch = invokeTimeTL.get();
+ stopWatch.stop();
+ log.info("[PLUS]结束请求 => URL[{}],耗时:[{}]毫秒", request.getMethod() + " " + request.getRequestURI(), stopWatch.getTime());
+ invokeTimeTL.remove();
+ }
+ }
+
+ /**
+ * 判断本次请求的数据类型是否为json
+ *
+ * @param request request
+ * @return boolean
+ */
+ private boolean isJsonRequest(HttpServletRequest request) {
+ String contentType = request.getContentType();
+ if (contentType != null) {
+ return StringUtils.startsWithIgnoreCase(contentType, MediaType.APPLICATION_JSON_VALUE);
+ }
+ return false;
+ }
+
+}
diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/DataSourceAspect.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/DataSourceAspect.java
index 55ec84595..45ffe3bca 100644
--- a/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/DataSourceAspect.java
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/DataSourceAspect.java
@@ -6,9 +6,14 @@ import com.ruoyi.common.utils.StringUtils;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
+import org.aspectj.lang.annotation.Pointcut;
+import org.aspectj.lang.reflect.MethodSignature;
+import org.springframework.core.annotation.AnnotationUtils;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
+import java.util.Objects;
+
/**
* 多数据源处理
*
@@ -19,8 +24,15 @@ import org.springframework.stereotype.Component;
@Component
public class DataSourceAspect {
- @Around("@annotation(dataSource) || @within(dataSource)")
- public Object around(ProceedingJoinPoint point, DataSource dataSource) throws Throwable {
+ @Pointcut("@annotation(com.ruoyi.common.annotation.DataSource)"
+ + "|| @within(com.ruoyi.common.annotation.DataSource)")
+ public void dsPointCut() {
+ }
+
+ @Around("dsPointCut()")
+ public Object around(ProceedingJoinPoint point) throws Throwable {
+ DataSource dataSource = getDataSource(point);
+
if (StringUtils.isNotNull(dataSource)) {
DynamicDataSourceContextHolder.poll();
String source = dataSource.value().getSource();
@@ -35,4 +47,17 @@ public class DataSourceAspect {
}
}
+ /**
+ * 获取需要切换的数据源
+ */
+ public DataSource getDataSource(ProceedingJoinPoint point) {
+ MethodSignature signature = (MethodSignature) point.getSignature();
+ DataSource dataSource = AnnotationUtils.findAnnotation(signature.getMethod(), DataSource.class);
+ if (Objects.nonNull(dataSource)) {
+ return dataSource;
+ }
+
+ return AnnotationUtils.findAnnotation(signature.getDeclaringType(), DataSource.class);
+ }
+
}
diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/FeignConfig.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/FeignConfig.java
index 14db1c95b..8b432ad89 100644
--- a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/FeignConfig.java
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/FeignConfig.java
@@ -17,7 +17,9 @@ import java.util.concurrent.TimeUnit;
* openfeign配置类
*
* @author Lion Li
+ * @deprecated 由于使用人数较少 决定与 3.4.0 版本移除
*/
+@Deprecated
@EnableFeignClients("${feign.package}")
@Configuration
@ConditionalOnClass(Feign.class)
diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/MybatisPlusConfig.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/MybatisPlusConfig.java
index 2d3cdbf35..57388ec3a 100644
--- a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/MybatisPlusConfig.java
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/MybatisPlusConfig.java
@@ -9,7 +9,7 @@ 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.core.mybatisplus.methods.InsertAll;
-import com.ruoyi.framework.mybatisplus.CreateAndUpdateMetaObjectHandler;
+import com.ruoyi.framework.handler.CreateAndUpdateMetaObjectHandler;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/ResourcesConfig.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/ResourcesConfig.java
index ddf4c70b3..f4e2b5fab 100644
--- a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/ResourcesConfig.java
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/ResourcesConfig.java
@@ -1,10 +1,13 @@
package com.ruoyi.framework.config;
+import com.ruoyi.framework.Interceptor.PlusWebInvokeTimeInterceptor;
+import com.yomahub.tlog.web.interceptor.TLogWebInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;
+import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@@ -20,12 +23,19 @@ public class ResourcesConfig implements WebMvcConfigurer {
public void addResourceHandlers(ResourceHandlerRegistry registry) {
}
+ @Override
+ public void addInterceptors(InterceptorRegistry registry) {
+ // 全局链路跟踪拦截器
+ registry.addInterceptor(new TLogWebInterceptor());
+ // 全局访问性能拦截
+ registry.addInterceptor(new PlusWebInvokeTimeInterceptor());
+ }
+
/**
* 跨域配置
*/
@Bean
public CorsFilter corsFilter() {
- UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
CorsConfiguration config = new CorsConfiguration();
config.setAllowCredentials(true);
// 设置访问源地址
@@ -34,8 +44,12 @@ public class ResourcesConfig implements WebMvcConfigurer {
config.addAllowedHeader("*");
// 设置访问源请求方法
config.addAllowedMethod("*");
- // 对接口配置跨域设置
+ // 有效期 1800秒
+ config.setMaxAge(1800L);
+ // 添加映射路径,拦截一切请求
+ UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
source.registerCorsConfiguration("/**", config);
+ // 返回新的CorsFilter
return new CorsFilter(source);
}
-}
+}
\ No newline at end of file
diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/TLogConfig.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/TLogConfig.java
new file mode 100644
index 000000000..68bc425d6
--- /dev/null
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/TLogConfig.java
@@ -0,0 +1,49 @@
+package com.ruoyi.framework.config;
+
+import com.yomahub.tlog.core.aop.AspectLogAop;
+import com.yomahub.tlog.feign.filter.TLogFeignFilter;
+import com.yomahub.tlog.spring.TLogPropertyInit;
+import com.yomahub.tlog.spring.TLogSpringAware;
+import com.yomahub.tlog.springboot.property.TLogProperty;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Import;
+import org.springframework.core.annotation.Order;
+
+/**
+ * 整合 TLog 框架配置
+ *
+ * @author Lion Li
+ * @since 3.3.0
+ */
+@Order(-999)
+@Configuration
+@Import(TLogProperty.class)
+public class TLogConfig {
+
+ @Bean
+ public TLogPropertyInit tLogPropertyInit(TLogProperty tLogProperty) {
+ TLogPropertyInit tLogPropertyInit = new TLogPropertyInit();
+ tLogPropertyInit.setPattern(tLogProperty.getPattern());
+ tLogPropertyInit.setEnableInvokeTimePrint(tLogProperty.enableInvokeTimePrint());
+ tLogPropertyInit.setIdGenerator(tLogProperty.getIdGenerator());
+ tLogPropertyInit.setMdcEnable(tLogProperty.getMdcEnable());
+ return tLogPropertyInit;
+ }
+
+ @Bean
+ public TLogSpringAware tLogSpringAware(){
+ return new TLogSpringAware();
+ }
+
+ @Bean
+ public AspectLogAop aspectLogAop() {
+ return new AspectLogAop();
+ }
+
+ @Bean
+ public TLogFeignFilter tLogFeignFilter() {
+ return new TLogFeignFilter();
+ }
+
+}
diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/handler/CreateAndUpdateMetaObjectHandler.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/handler/CreateAndUpdateMetaObjectHandler.java
new file mode 100644
index 000000000..d662ae9fa
--- /dev/null
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/handler/CreateAndUpdateMetaObjectHandler.java
@@ -0,0 +1,92 @@
+package com.ruoyi.framework.handler;
+
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.http.HttpStatus;
+import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
+import com.ruoyi.common.core.domain.BaseEntity;
+import com.ruoyi.common.core.domain.model.LoginUser;
+import com.ruoyi.common.exception.ServiceException;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.common.utils.StringUtils;
+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();
+ // 更新时间为空 则填充
+ if (ObjectUtil.isNull(baseEntity.getUpdateTime())) {
+ baseEntity.setUpdateTime(current);
+ }
+ String username = getLoginUsername();
+ // 当前已登录 且 更信任为空 则填充
+ if (StringUtils.isNotBlank(username)
+ && StringUtils.isBlank(baseEntity.getUpdateBy())) {
+ 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();
+ }
+
+}
diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/mybatisplus/CreateAndUpdateMetaObjectHandler.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/mybatisplus/CreateAndUpdateMetaObjectHandler.java
deleted file mode 100644
index feb73a458..000000000
--- a/ruoyi-framework/src/main/java/com/ruoyi/framework/mybatisplus/CreateAndUpdateMetaObjectHandler.java
+++ /dev/null
@@ -1,66 +0,0 @@
-package com.ruoyi.framework.mybatisplus;
-
-import cn.hutool.http.HttpStatus;
-import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
-import com.ruoyi.common.core.domain.model.LoginUser;
-import com.ruoyi.common.exception.ServiceException;
-import com.ruoyi.common.utils.SecurityUtils;
-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 (metaObject.hasGetter("createTime")) {
- this.setFieldValByName("createTime", new Date(), metaObject);
- }
- if (metaObject.hasGetter("createBy")) {
- this.setFieldValByName("createBy", getLoginUsername(), metaObject);
- }
- } catch (Exception e) {
- throw new ServiceException("自动注入异常 => " + e.getMessage(), HttpStatus.HTTP_UNAUTHORIZED);
- }
- updateFill(metaObject);
- }
-
- @Override
- public void updateFill(MetaObject metaObject) {
- try {
- if (metaObject.hasGetter("updateBy")) {
- this.setFieldValByName("updateBy", getLoginUsername(), metaObject);
- }
- if (metaObject.hasGetter("updateTime")) {
- this.setFieldValByName("updateTime", new Date(), metaObject);
- }
- } 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();
- }
-
-}
diff --git a/ruoyi-generator/pom.xml b/ruoyi-generator/pom.xml
index d5bdc7e53..e19cbb293 100644
--- a/ruoyi-generator/pom.xml
+++ b/ruoyi-generator/pom.xml
@@ -5,7 +5,7 @@
ruoyi-vue-plus
com.ruoyi
- 3.1.0
+ 3.2.0
4.0.0
diff --git a/ruoyi-generator/src/main/java/com/ruoyi/generator/config/GenConfig.java b/ruoyi-generator/src/main/java/com/ruoyi/generator/config/GenConfig.java
index cc4cd14c8..92c522f0b 100644
--- a/ruoyi-generator/src/main/java/com/ruoyi/generator/config/GenConfig.java
+++ b/ruoyi-generator/src/main/java/com/ruoyi/generator/config/GenConfig.java
@@ -7,67 +7,67 @@ import org.springframework.stereotype.Component;
/**
* 读取代码生成相关配置
- *
+ *
* @author ruoyi
*/
@Component
@ConfigurationProperties(prefix = "gen")
-@PropertySource(value = { "classpath:generator.yml" })
-public class GenConfig
-{
- /** 作者 */
+@PropertySource(value = {"classpath:generator.yml"})
+public class GenConfig {
+
+ /**
+ * 作者
+ */
public static String author;
- /** 生成包路径 */
+ /**
+ * 生成包路径
+ */
public static String packageName;
- /** 自动去除表前缀,默认是false */
+ /**
+ * 自动去除表前缀,默认是false
+ */
public static boolean autoRemovePre;
- /** 表前缀(类名不会包含表前缀) */
+ /**
+ * 表前缀(类名不会包含表前缀)
+ */
public static String tablePrefix;
- public static String getAuthor()
- {
+ public static String getAuthor() {
return author;
}
@Value("${author}")
- public void setAuthor(String author)
- {
+ public void setAuthor(String author) {
GenConfig.author = author;
}
- public static String getPackageName()
- {
+ public static String getPackageName() {
return packageName;
}
@Value("${packageName}")
- public void setPackageName(String packageName)
- {
+ public void setPackageName(String packageName) {
GenConfig.packageName = packageName;
}
- public static boolean getAutoRemovePre()
- {
+ public static boolean getAutoRemovePre() {
return autoRemovePre;
}
@Value("${autoRemovePre}")
- public void setAutoRemovePre(boolean autoRemovePre)
- {
+ public void setAutoRemovePre(boolean autoRemovePre) {
GenConfig.autoRemovePre = autoRemovePre;
}
- public static String getTablePrefix()
- {
+ public static String getTablePrefix() {
return tablePrefix;
}
@Value("${tablePrefix}")
- public void setTablePrefix(String tablePrefix)
- {
+ public void setTablePrefix(String tablePrefix) {
GenConfig.tablePrefix = tablePrefix;
}
}
diff --git a/ruoyi-generator/src/main/java/com/ruoyi/generator/controller/GenController.java b/ruoyi-generator/src/main/java/com/ruoyi/generator/controller/GenController.java
index 53438343a..649d1dc67 100644
--- a/ruoyi-generator/src/main/java/com/ruoyi/generator/controller/GenController.java
+++ b/ruoyi-generator/src/main/java/com/ruoyi/generator/controller/GenController.java
@@ -10,6 +10,9 @@ import com.ruoyi.generator.domain.GenTable;
import com.ruoyi.generator.domain.GenTableColumn;
import com.ruoyi.generator.service.IGenTableColumnService;
import com.ruoyi.generator.service.IGenTableService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
import org.apache.commons.io.IOUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
@@ -24,36 +27,36 @@ import java.util.Map;
/**
* 代码生成 操作处理
- *
- * @author ruoyi
+ *
+ * @author Lion Li
*/
+@Validated
+@Api(value = "代码生成", tags = {"代码生成管理"})
+@RequiredArgsConstructor(onConstructor_ = @Autowired)
@RestController
@RequestMapping("/tool/gen")
-public class GenController extends BaseController
-{
- @Autowired
- private IGenTableService genTableService;
+public class GenController extends BaseController {
- @Autowired
- private IGenTableColumnService genTableColumnService;
+ private final IGenTableService genTableService;
+ private final IGenTableColumnService genTableColumnService;
/**
* 查询代码生成列表
*/
+ @ApiOperation("查询代码生成列表")
@PreAuthorize("@ss.hasPermi('tool:gen:list')")
@GetMapping("/list")
- public TableDataInfo genList(GenTable genTable)
- {
+ public TableDataInfo genList(GenTable genTable) {
return genTableService.selectPageGenTableList(genTable);
}
/**
* 修改代码生成业务
*/
+ @ApiOperation("修改代码生成业务")
@PreAuthorize("@ss.hasPermi('tool:gen:query')")
@GetMapping(value = "/{talbleId}")
- public AjaxResult getInfo(@PathVariable Long talbleId)
- {
+ public AjaxResult