Merge remote-tracking branch 'origin/2.0.x' into dev
# Conflicts: # README.md # continew-admin-common/src/main/java/top/charles7c/cnadmin/common/base/BaseReq.java # continew-admin-common/src/main/java/top/charles7c/cnadmin/common/base/BaseServiceImpl.java # continew-admin-common/src/main/java/top/charles7c/cnadmin/common/handler/GlobalExceptionHandler.java # continew-admin-common/src/main/java/top/charles7c/cnadmin/common/util/ExceptionUtils.java # continew-admin-common/src/main/java/top/charles7c/cnadmin/common/util/helper/QueryHelper.java # continew-admin-monitor/src/main/java/top/charles7c/cnadmin/monitor/interceptor/LogInterceptor.java # continew-admin-system/src/main/java/top/charles7c/cnadmin/system/model/req/DeptReq.java # continew-admin-system/src/main/java/top/charles7c/cnadmin/system/model/req/MenuReq.java # continew-admin-system/src/main/java/top/charles7c/cnadmin/system/model/req/RoleReq.java # continew-admin-system/src/main/java/top/charles7c/cnadmin/system/service/impl/DeptServiceImpl.java # continew-admin-system/src/main/java/top/charles7c/cnadmin/system/service/impl/RoleServiceImpl.java # continew-admin-system/src/main/java/top/charles7c/cnadmin/system/service/impl/UserServiceImpl.java # continew-admin-ui/src/components/footer/index.vue # continew-admin-webapi/src/main/java/top/charles7c/cnadmin/webapi/controller/common/CommonController.java # continew-admin-webapi/src/main/java/top/charles7c/cnadmin/webapi/controller/system/UserCenterController.java # continew-admin-webapi/src/main/resources/config/application-dev.yml # continew-admin-webapi/src/main/resources/config/application-prod.yml # pom.xml
This commit is contained in:
commit
51e1cd9307
@ -80,7 +80,7 @@ limitations under the License.
|
||||
<!-- Sa-Token(轻量级 Java 权限认证框架,让鉴权变得简单、优雅) -->
|
||||
<dependency>
|
||||
<groupId>cn.dev33</groupId>
|
||||
<artifactId>sa-token-spring-boot-starter</artifactId>
|
||||
<artifactId>sa-token-spring-boot3-starter</artifactId>
|
||||
</dependency>
|
||||
|
||||
<!-- Sa-Token 整合 JWT -->
|
||||
@ -146,7 +146,7 @@ limitations under the License.
|
||||
<!-- Knife4j(前身是 swagger-bootstrap-ui,集 Swagger2 和 OpenAPI3 为一体的增强解决方案) -->
|
||||
<dependency>
|
||||
<groupId>com.github.xiaoymin</groupId>
|
||||
<artifactId>knife4j-openapi3-spring-boot-starter</artifactId>
|
||||
<artifactId>knife4j-openapi3-jakarta-spring-boot-starter</artifactId>
|
||||
</dependency>
|
||||
|
||||
<!-- Redisson(不仅仅是一个 Redis Java 客户端) -->
|
||||
|
@ -20,7 +20,7 @@ import static top.charles7c.cnadmin.common.annotation.CrudRequestMapping.Api;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
|
@ -16,6 +16,7 @@
|
||||
|
||||
package top.charles7c.cnadmin.common.base;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
@ -34,6 +35,7 @@ import com.baomidou.mybatisplus.annotation.TableId;
|
||||
@Data
|
||||
public class BaseDO implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
|
@ -16,6 +16,7 @@
|
||||
|
||||
package top.charles7c.cnadmin.common.base;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
import lombok.Data;
|
||||
@ -34,6 +35,7 @@ import com.fasterxml.jackson.annotation.JsonIgnore;
|
||||
@Data
|
||||
public class BaseDetailResp extends BaseResp {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
|
@ -16,8 +16,11 @@
|
||||
|
||||
package top.charles7c.cnadmin.common.base;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
|
||||
import jakarta.validation.groups.Default;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
@ -29,5 +32,6 @@ import lombok.Data;
|
||||
@Data
|
||||
public class BaseReq implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
}
|
||||
|
@ -16,6 +16,7 @@
|
||||
|
||||
package top.charles7c.cnadmin.common.base;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
@ -36,6 +37,7 @@ import com.fasterxml.jackson.annotation.JsonInclude;
|
||||
@Data
|
||||
public class BaseResp implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
|
@ -18,7 +18,7 @@ package top.charles7c.cnadmin.common.base;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
|
||||
import cn.hutool.core.lang.tree.Tree;
|
||||
|
||||
|
@ -20,7 +20,7 @@ import java.lang.reflect.Field;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.data.domain.Sort;
|
||||
@ -156,7 +156,7 @@ public abstract class BaseServiceImpl<M extends BaseMapper<T>, T extends BaseDO,
|
||||
|
||||
/**
|
||||
* 设置排序
|
||||
*
|
||||
*
|
||||
* @param queryWrapper
|
||||
* 查询 Wrapper
|
||||
* @param sortQuery
|
||||
@ -231,8 +231,7 @@ public abstract class BaseServiceImpl<M extends BaseMapper<T>, T extends BaseDO,
|
||||
* 待填充列表信息
|
||||
*/
|
||||
protected void fill(Object baseObj) {
|
||||
if (baseObj instanceof BaseResp) {
|
||||
BaseResp baseResp = (BaseResp)baseObj;
|
||||
if (baseObj instanceof BaseResp baseResp) {
|
||||
Long createUser = baseResp.getCreateUser();
|
||||
if (null == createUser) {
|
||||
return;
|
||||
@ -249,8 +248,7 @@ public abstract class BaseServiceImpl<M extends BaseMapper<T>, T extends BaseDO,
|
||||
* 待填充详情信息
|
||||
*/
|
||||
public void fillDetail(Object detailObj) {
|
||||
if (detailObj instanceof BaseDetailResp) {
|
||||
BaseDetailResp detail = (BaseDetailResp)detailObj;
|
||||
if (detailObj instanceof BaseDetailResp detail) {
|
||||
this.fill(detail);
|
||||
|
||||
Long updateUser = detail.getUpdateUser();
|
||||
|
@ -60,9 +60,8 @@ public class MyBatisPlusMetaObjectHandler implements MetaObjectHandler {
|
||||
|
||||
Long createUser = LoginHelper.getUserId();
|
||||
LocalDateTime createTime = LocalDateTime.now();
|
||||
if (metaObject.getOriginalObject() instanceof BaseDO) {
|
||||
if (metaObject.getOriginalObject()instanceof BaseDO baseDO) {
|
||||
// 继承了 BaseDO 的类,填充创建信息
|
||||
BaseDO baseDO = (BaseDO)metaObject.getOriginalObject();
|
||||
baseDO.setCreateUser(ObjectUtil.defaultIfNull(baseDO.getCreateUser(), createUser));
|
||||
baseDO.setCreateTime(ObjectUtil.defaultIfNull(baseDO.getCreateTime(), createTime));
|
||||
} else {
|
||||
@ -90,9 +89,8 @@ public class MyBatisPlusMetaObjectHandler implements MetaObjectHandler {
|
||||
|
||||
Long updateUser = LoginHelper.getUserId();
|
||||
LocalDateTime updateTime = LocalDateTime.now();
|
||||
if (metaObject.getOriginalObject() instanceof BaseDO) {
|
||||
if (metaObject.getOriginalObject()instanceof BaseDO baseDO) {
|
||||
// 继承了 BaseDO 的类,填充修改信息
|
||||
BaseDO baseDO = (BaseDO)metaObject.getOriginalObject();
|
||||
baseDO.setUpdateUser(updateUser);
|
||||
baseDO.setUpdateTime(updateTime);
|
||||
} else {
|
||||
|
@ -16,20 +16,19 @@
|
||||
|
||||
package top.charles7c.cnadmin.common.handler;
|
||||
|
||||
import static top.charles7c.cnadmin.common.annotation.CrudRequestMapping.Api;
|
||||
|
||||
import java.lang.reflect.Method;
|
||||
|
||||
import cn.hutool.core.util.ArrayUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import org.springframework.lang.NonNull;
|
||||
import org.springframework.web.servlet.mvc.method.RequestMappingInfo;
|
||||
import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping;
|
||||
|
||||
import cn.hutool.core.util.ArrayUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
|
||||
import org.springframework.web.util.pattern.PathPatternParser;
|
||||
import top.charles7c.cnadmin.common.annotation.CrudRequestMapping;
|
||||
import top.charles7c.cnadmin.common.util.ExceptionUtils;
|
||||
|
||||
import java.lang.reflect.Method;
|
||||
|
||||
import static top.charles7c.cnadmin.common.annotation.CrudRequestMapping.Api;
|
||||
|
||||
/**
|
||||
* CRUD 请求映射器处理器映射器
|
||||
*
|
||||
@ -55,7 +54,14 @@ public class CrudRequestMappingHandlerMapping extends RequestMappingHandlerMappi
|
||||
// 拼接路径前缀(合并了 @RequestMapping 的部分能力)
|
||||
String pathPrefix = crudRequestMapping.value();
|
||||
if (StrUtil.isNotBlank(pathPrefix)) {
|
||||
requestMappingInfo = RequestMappingInfo.paths(pathPrefix).build().combine(requestMappingInfo);
|
||||
/*
|
||||
* 问题:RequestMappingInfo.paths(pathPrefix) 返回的 RequestMappingInfo 对象里 pathPatternsCondition = null
|
||||
* 导致 combine() 方法抛出断言异常! 修复:创建 options 对象,并设置 PatternParser
|
||||
*/
|
||||
RequestMappingInfo.BuilderConfiguration options = new RequestMappingInfo.BuilderConfiguration();
|
||||
options.setPatternParser(PathPatternParser.defaultInstance);
|
||||
requestMappingInfo =
|
||||
RequestMappingInfo.paths(pathPrefix).options(options).build().combine(requestMappingInfo);
|
||||
}
|
||||
|
||||
// 过滤 API
|
||||
|
@ -18,9 +18,9 @@ package top.charles7c.cnadmin.common.handler;
|
||||
|
||||
import java.util.Objects;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.validation.ConstraintViolation;
|
||||
import javax.validation.ConstraintViolationException;
|
||||
import jakarta.servlet.http.HttpServletRequest;
|
||||
import jakarta.validation.ConstraintViolation;
|
||||
import jakarta.validation.ConstraintViolationException;
|
||||
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
@ -132,18 +132,11 @@ public class GlobalExceptionHandler {
|
||||
@ExceptionHandler(NotLoginException.class)
|
||||
public R handleNotLoginException(NotLoginException e, HttpServletRequest request) {
|
||||
log.error("请求地址 [{}],认证失败,无法访问系统资源。", request.getRequestURI(), e);
|
||||
String errorMsg;
|
||||
switch (e.getType()) {
|
||||
case NotLoginException.KICK_OUT:
|
||||
errorMsg = "您已被踢下线。";
|
||||
break;
|
||||
case NotLoginException.BE_REPLACED_MESSAGE:
|
||||
errorMsg = "您已被顶下线。";
|
||||
break;
|
||||
default:
|
||||
errorMsg = "您的登录状态已过期,请重新登录。";
|
||||
break;
|
||||
}
|
||||
String errorMsg = switch (e.getType()) {
|
||||
case NotLoginException.KICK_OUT -> "您已被踢下线。";
|
||||
case NotLoginException.BE_REPLACED_MESSAGE -> "您已被顶下线。";
|
||||
default -> "您的登录状态已过期,请重新登录。";
|
||||
};
|
||||
LogContextHolder.setErrorMsg(errorMsg);
|
||||
return R.fail(HttpStatus.UNAUTHORIZED.value(), errorMsg);
|
||||
}
|
||||
|
@ -16,6 +16,7 @@
|
||||
|
||||
package top.charles7c.cnadmin.common.model.dto;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
@ -30,6 +31,7 @@ import lombok.Data;
|
||||
@Data
|
||||
public class LogContext implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
|
@ -16,6 +16,7 @@
|
||||
|
||||
package top.charles7c.cnadmin.common.model.dto;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.Set;
|
||||
@ -35,6 +36,7 @@ import top.charles7c.cnadmin.common.constant.SysConsts;
|
||||
@Data
|
||||
public class LoginUser implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
|
@ -16,6 +16,7 @@
|
||||
|
||||
package top.charles7c.cnadmin.common.model.dto;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
|
||||
import lombok.Data;
|
||||
@ -31,6 +32,7 @@ import top.charles7c.cnadmin.common.enums.DataScopeEnum;
|
||||
@Data
|
||||
public class RoleDTO implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
|
@ -16,7 +16,9 @@
|
||||
|
||||
package top.charles7c.cnadmin.common.model.query;
|
||||
|
||||
import javax.validation.constraints.Min;
|
||||
import java.io.Serial;
|
||||
|
||||
import jakarta.validation.constraints.Min;
|
||||
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
@ -24,7 +26,7 @@ import lombok.NoArgsConstructor;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
|
||||
import org.hibernate.validator.constraints.Range;
|
||||
import org.springdoc.api.annotations.ParameterObject;
|
||||
import org.springdoc.core.annotations.ParameterObject;
|
||||
import org.springframework.data.domain.Sort;
|
||||
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
@ -46,6 +48,7 @@ import cn.hutool.core.util.StrUtil;
|
||||
@Schema(description = "分页查询条件")
|
||||
public class PageQuery extends SortQuery {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
/** 默认页码:1 */
|
||||
private static final int DEFAULT_PAGE = 1;
|
||||
|
@ -16,9 +16,10 @@
|
||||
|
||||
package top.charles7c.cnadmin.common.model.req;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
|
||||
import javax.validation.constraints.NotNull;
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
@ -36,6 +37,7 @@ import top.charles7c.cnadmin.common.enums.DisEnableStatusEnum;
|
||||
@Schema(description = "修改状态信息")
|
||||
public class UpdateStatusReq implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
|
@ -16,6 +16,7 @@
|
||||
|
||||
package top.charles7c.cnadmin.common.model.resp;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
|
||||
import lombok.Builder;
|
||||
@ -34,6 +35,7 @@ import io.swagger.v3.oas.annotations.media.Schema;
|
||||
@Schema(description = "验证码信息")
|
||||
public class CaptchaResp implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
|
@ -16,6 +16,7 @@
|
||||
|
||||
package top.charles7c.cnadmin.common.model.resp;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
|
||||
import lombok.Data;
|
||||
@ -37,6 +38,7 @@ import com.fasterxml.jackson.annotation.JsonInclude;
|
||||
@Schema(description = "键值对信息")
|
||||
public class LabelValueResp<T> implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
|
@ -16,6 +16,7 @@
|
||||
|
||||
package top.charles7c.cnadmin.common.model.resp;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
@ -41,6 +42,7 @@ import cn.hutool.core.collection.CollUtil;
|
||||
@Schema(description = "分页信息")
|
||||
public class PageDataResp<L> implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
|
@ -16,6 +16,7 @@
|
||||
|
||||
package top.charles7c.cnadmin.common.model.resp;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
|
||||
import lombok.AccessLevel;
|
||||
@ -39,6 +40,7 @@ import cn.hutool.core.date.DateUtil;
|
||||
@Schema(description = "响应信息")
|
||||
public class R<T> implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/** 是否成功 */
|
||||
|
@ -19,7 +19,7 @@ package top.charles7c.cnadmin.common.util;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
|
||||
import lombok.AccessLevel;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
@ -46,9 +46,8 @@ public class ExceptionUtils {
|
||||
* 异常
|
||||
*/
|
||||
public static void printException(Runnable runnable, Throwable throwable) {
|
||||
if (null == throwable && runnable instanceof Future<?>) {
|
||||
if (null == throwable && runnable instanceof Future<?> future) {
|
||||
try {
|
||||
Future<?> future = (Future<?>)runnable;
|
||||
if (future.isDone()) {
|
||||
future.get();
|
||||
}
|
||||
|
@ -22,8 +22,8 @@ import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
import javax.mail.MessagingException;
|
||||
import javax.mail.internet.MimeMessage;
|
||||
import jakarta.mail.MessagingException;
|
||||
import jakarta.mail.internet.MimeMessage;
|
||||
|
||||
import lombok.AccessLevel;
|
||||
import lombok.Data;
|
||||
@ -200,14 +200,14 @@ public class MailUtils {
|
||||
// 设置收信人
|
||||
// 抄送人
|
||||
if (CollUtil.isNotEmpty(ccs)) {
|
||||
messageHelper.setCc(ccs.toArray(new String[0]));
|
||||
messageHelper.setCc(ccs.toArray(String[]::new));
|
||||
}
|
||||
// 密送人
|
||||
if (CollUtil.isNotEmpty(bccs)) {
|
||||
messageHelper.setBcc(bccs.toArray(new String[0]));
|
||||
messageHelper.setBcc(bccs.toArray(String[]::new));
|
||||
}
|
||||
// 收件人
|
||||
messageHelper.setTo(tos.toArray(new String[0]));
|
||||
messageHelper.setTo(tos.toArray(String[]::new));
|
||||
|
||||
// 设置附件
|
||||
if (ArrayUtil.isNotEmpty(files)) {
|
||||
|
@ -18,8 +18,8 @@ package top.charles7c.cnadmin.common.util;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import jakarta.servlet.http.HttpServletRequest;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
|
||||
import lombok.AccessLevel;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
@ -18,7 +18,7 @@ package top.charles7c.cnadmin.common.util.helper;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import jakarta.servlet.http.HttpServletRequest;
|
||||
|
||||
import lombok.AccessLevel;
|
||||
import lombok.NoArgsConstructor;
|
||||
@ -26,7 +26,7 @@ import lombok.NoArgsConstructor;
|
||||
import cn.dev33.satoken.context.SaHolder;
|
||||
import cn.dev33.satoken.session.SaSession;
|
||||
import cn.dev33.satoken.stp.StpUtil;
|
||||
import cn.hutool.extra.servlet.ServletUtil;
|
||||
import cn.hutool.extra.servlet.JakartaServletUtil;
|
||||
import cn.hutool.extra.spring.SpringUtil;
|
||||
|
||||
import top.charles7c.cnadmin.common.constant.CacheConsts;
|
||||
@ -58,7 +58,7 @@ public class LoginHelper {
|
||||
public static String login(LoginUser loginUser) {
|
||||
// 记录登录信息
|
||||
HttpServletRequest request = ServletUtils.getRequest();
|
||||
loginUser.setClientIp(ServletUtil.getClientIP(request));
|
||||
loginUser.setClientIp(JakartaServletUtil.getClientIP(request));
|
||||
loginUser.setLocation(IpUtils.getCityInfo(loginUser.getClientIp()));
|
||||
loginUser.setBrowser(ServletUtils.getBrowser(request));
|
||||
LogContext logContext = LogContextHolder.get();
|
||||
|
@ -20,6 +20,7 @@ import java.lang.reflect.Field;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import lombok.AccessLevel;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
@ -86,7 +87,7 @@ public class QueryHelper {
|
||||
* 查询数据类型
|
||||
*/
|
||||
private static <Q, R> void buildQuery(Q query, Field field, QueryWrapper<R> queryWrapper) {
|
||||
boolean accessible = field.isAccessible();
|
||||
boolean accessible = field.canAccess(null);
|
||||
try {
|
||||
field.setAccessible(true);
|
||||
// 没有 @Query,直接返回
|
||||
@ -149,54 +150,31 @@ public class QueryHelper {
|
||||
String columnName = StrUtil.toUnderlineCase(StrUtil.blankToDefault(property, fieldName));
|
||||
QueryTypeEnum queryType = queryAnnotation.type();
|
||||
switch (queryType) {
|
||||
case EQUAL:
|
||||
queryWrapper.eq(columnName, fieldValue);
|
||||
break;
|
||||
case NOT_EQUAL:
|
||||
queryWrapper.ne(columnName, fieldValue);
|
||||
break;
|
||||
case GREATER_THAN:
|
||||
queryWrapper.gt(columnName, fieldValue);
|
||||
break;
|
||||
case LESS_THAN:
|
||||
queryWrapper.lt(columnName, fieldValue);
|
||||
break;
|
||||
case GREATER_THAN_OR_EQUAL:
|
||||
queryWrapper.ge(columnName, fieldValue);
|
||||
break;
|
||||
case LESS_THAN_OR_EQUAL:
|
||||
queryWrapper.le(columnName, fieldValue);
|
||||
break;
|
||||
case BETWEEN:
|
||||
case EQUAL -> queryWrapper.eq(columnName, fieldValue);
|
||||
case NOT_EQUAL -> queryWrapper.ne(columnName, fieldValue);
|
||||
case GREATER_THAN -> queryWrapper.gt(columnName, fieldValue);
|
||||
case LESS_THAN -> queryWrapper.lt(columnName, fieldValue);
|
||||
case GREATER_THAN_OR_EQUAL -> queryWrapper.ge(columnName, fieldValue);
|
||||
case LESS_THAN_OR_EQUAL -> queryWrapper.le(columnName, fieldValue);
|
||||
case BETWEEN -> {
|
||||
List<Object> between = new ArrayList<>((List<Object>)fieldValue);
|
||||
ValidationUtils.throwIf(between.size() != 2, "[{}] 必须是一个范围", fieldName);
|
||||
queryWrapper.between(columnName, between.get(0), between.get(1));
|
||||
break;
|
||||
case LEFT_LIKE:
|
||||
queryWrapper.likeLeft(columnName, fieldValue);
|
||||
break;
|
||||
case INNER_LIKE:
|
||||
queryWrapper.like(columnName, fieldValue);
|
||||
break;
|
||||
case RIGHT_LIKE:
|
||||
queryWrapper.likeRight(columnName, fieldValue);
|
||||
break;
|
||||
case IN:
|
||||
}
|
||||
case LEFT_LIKE -> queryWrapper.likeLeft(columnName, fieldValue);
|
||||
case INNER_LIKE -> queryWrapper.like(columnName, fieldValue);
|
||||
case RIGHT_LIKE -> queryWrapper.likeRight(columnName, fieldValue);
|
||||
case IN -> {
|
||||
ValidationUtils.throwIfEmpty(fieldValue, "[{}] 不能为空", fieldName);
|
||||
queryWrapper.in(columnName, (List<Object>)fieldValue);
|
||||
break;
|
||||
case NOT_IN:
|
||||
}
|
||||
case NOT_IN -> {
|
||||
ValidationUtils.throwIfEmpty(fieldValue, "[{}] 不能为空", fieldName);
|
||||
queryWrapper.notIn(columnName, (List<Object>)fieldValue);
|
||||
break;
|
||||
case IS_NULL:
|
||||
queryWrapper.isNull(columnName);
|
||||
break;
|
||||
case IS_NOT_NULL:
|
||||
queryWrapper.isNotNull(columnName);
|
||||
break;
|
||||
default:
|
||||
throw new IllegalArgumentException(String.format("暂不支持 [%s] 查询类型", queryType));
|
||||
}
|
||||
case IS_NULL -> queryWrapper.isNull(columnName);
|
||||
case IS_NOT_NULL -> queryWrapper.isNotNull(columnName);
|
||||
default -> throw new IllegalArgumentException(String.format("暂不支持 [%s] 查询类型", queryType));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -19,10 +19,10 @@ package top.charles7c.cnadmin.monitor.filter;
|
||||
import java.io.IOException;
|
||||
import java.util.Objects;
|
||||
|
||||
import javax.servlet.FilterChain;
|
||||
import javax.servlet.ServletException;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import jakarta.servlet.FilterChain;
|
||||
import jakarta.servlet.ServletException;
|
||||
import jakarta.servlet.http.HttpServletRequest;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
|
||||
import org.springframework.core.Ordered;
|
||||
import org.springframework.lang.NonNull;
|
||||
|
@ -21,8 +21,8 @@ import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import jakarta.servlet.http.HttpServletRequest;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
@ -43,7 +43,7 @@ import cn.hutool.core.date.LocalDateTimeUtil;
|
||||
import cn.hutool.core.exceptions.ExceptionUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import cn.hutool.extra.servlet.ServletUtil;
|
||||
import cn.hutool.extra.servlet.JakartaServletUtil;
|
||||
import cn.hutool.extra.spring.SpringUtil;
|
||||
import cn.hutool.http.HttpStatus;
|
||||
import cn.hutool.json.JSONArray;
|
||||
@ -217,7 +217,7 @@ public class LogInterceptor implements HandlerInterceptor {
|
||||
: request.getRequestURL().append(StringConsts.QUESTION_MARK).append(request.getQueryString()).toString());
|
||||
String method = request.getMethod();
|
||||
logDO.setRequestMethod(method);
|
||||
logDO.setRequestHeaders(this.desensitize(ServletUtil.getHeaderMap(request)));
|
||||
logDO.setRequestHeaders(this.desensitize(JakartaServletUtil.getHeaderMap(request)));
|
||||
String requestBody = this.getRequestBody(request);
|
||||
logDO.setCreateUser(ObjectUtil.defaultIfNull(logDO.getCreateUser(), LoginHelper.getUserId()));
|
||||
String requestURI = request.getRequestURI();
|
||||
@ -241,13 +241,13 @@ public class LogInterceptor implements HandlerInterceptor {
|
||||
}
|
||||
requestBody = JSONUtil.toJsonStr(requestBodyJsonObjList);
|
||||
} else {
|
||||
requestBody = this.desensitize(ServletUtil.getParamMap(request));
|
||||
requestBody = this.desensitize(JakartaServletUtil.getParamMap(request));
|
||||
}
|
||||
logDO.setRequestBody(requestBody);
|
||||
}
|
||||
logDO.setClientIp(ServletUtil.getClientIP(request));
|
||||
logDO.setClientIp(JakartaServletUtil.getClientIP(request));
|
||||
logDO.setLocation(IpUtils.getCityInfo(logDO.getClientIp()));
|
||||
logDO.setBrowser(ServletUtils.getBrowser(request));
|
||||
logDO.setBrowser(JakartaServletUtil.getBrowser(request));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -262,7 +262,7 @@ public class LogInterceptor implements HandlerInterceptor {
|
||||
int status = response.getStatus();
|
||||
logDO.setStatusCode(status);
|
||||
logDO.setStatus(status >= HttpStatus.HTTP_BAD_REQUEST ? LogStatusEnum.FAILURE : logDO.getStatus());
|
||||
logDO.setResponseHeaders(this.desensitize(ServletUtil.getHeadersMap(response)));
|
||||
logDO.setResponseHeaders(this.desensitize(JakartaServletUtil.getHeadersMap(response)));
|
||||
// 响应体(不记录非 JSON 响应数据)
|
||||
String responseBody = this.getResponseBody(response);
|
||||
if (StrUtil.isNotBlank(responseBody) && JSONUtil.isTypeJSON(responseBody)) {
|
||||
@ -350,7 +350,7 @@ public class LogInterceptor implements HandlerInterceptor {
|
||||
return false;
|
||||
}
|
||||
// 2、检查是否需要记录内网 IP 操作
|
||||
boolean isInnerIp = IpUtils.isInnerIp(ServletUtil.getClientIP(request));
|
||||
boolean isInnerIp = IpUtils.isInnerIp(JakartaServletUtil.getClientIP(request));
|
||||
if (isInnerIp && Boolean.FALSE.equals(operationLogProperties.getIncludeInnerIp())) {
|
||||
return false;
|
||||
}
|
||||
|
@ -16,6 +16,7 @@
|
||||
|
||||
package top.charles7c.cnadmin.monitor.model.entity;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
@ -36,6 +37,7 @@ import top.charles7c.cnadmin.monitor.enums.LogStatusEnum;
|
||||
@TableName("sys_log")
|
||||
public class LogDO implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
|
@ -16,6 +16,7 @@
|
||||
|
||||
package top.charles7c.cnadmin.monitor.model.query;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
@ -41,6 +42,7 @@ import top.charles7c.cnadmin.common.enums.QueryTypeEnum;
|
||||
@Schema(description = "登录日志查询条件")
|
||||
public class LoginLogQuery implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
|
@ -16,6 +16,7 @@
|
||||
|
||||
package top.charles7c.cnadmin.monitor.model.query;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
@ -41,6 +42,7 @@ import top.charles7c.cnadmin.common.enums.QueryTypeEnum;
|
||||
@Schema(description = "操作日志查询条件")
|
||||
public class OperationLogQuery implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
|
@ -16,6 +16,7 @@
|
||||
|
||||
package top.charles7c.cnadmin.monitor.model.query;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
@ -41,6 +42,7 @@ import top.charles7c.cnadmin.common.enums.QueryTypeEnum;
|
||||
@Schema(description = "系统日志查询条件")
|
||||
public class SystemLogQuery implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
|
@ -16,6 +16,7 @@
|
||||
|
||||
package top.charles7c.cnadmin.monitor.model.resp;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
@ -34,6 +35,7 @@ import com.fasterxml.jackson.annotation.JsonIgnore;
|
||||
@Data
|
||||
public class LogResp implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
|
@ -16,6 +16,8 @@
|
||||
|
||||
package top.charles7c.cnadmin.monitor.model.resp;
|
||||
|
||||
import java.io.Serial;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
@ -32,6 +34,7 @@ import top.charles7c.cnadmin.monitor.enums.LogStatusEnum;
|
||||
@Schema(description = "登录日志信息")
|
||||
public class LoginLogResp extends LogResp {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
|
@ -16,6 +16,8 @@
|
||||
|
||||
package top.charles7c.cnadmin.monitor.model.resp;
|
||||
|
||||
import java.io.Serial;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
@ -32,6 +34,7 @@ import top.charles7c.cnadmin.monitor.enums.LogStatusEnum;
|
||||
@Schema(description = "操作日志信息")
|
||||
public class OperationLogResp extends LogResp {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
|
@ -16,6 +16,8 @@
|
||||
|
||||
package top.charles7c.cnadmin.monitor.model.resp;
|
||||
|
||||
import java.io.Serial;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
@ -30,6 +32,7 @@ import io.swagger.v3.oas.annotations.media.Schema;
|
||||
@Schema(description = "系统日志详情信息")
|
||||
public class SystemLogDetailResp extends LogResp {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
|
@ -16,6 +16,8 @@
|
||||
|
||||
package top.charles7c.cnadmin.monitor.model.resp;
|
||||
|
||||
import java.io.Serial;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
@ -30,6 +32,7 @@ import io.swagger.v3.oas.annotations.media.Schema;
|
||||
@Schema(description = "系统日志信息")
|
||||
public class SystemLogResp extends LogResp {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
|
@ -16,6 +16,7 @@
|
||||
|
||||
package top.charles7c.cnadmin.auth.model.query;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
@ -38,6 +39,7 @@ import cn.hutool.core.date.DatePattern;
|
||||
@Schema(description = "在线用户查询条件")
|
||||
public class OnlineUserQuery implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
|
@ -16,9 +16,10 @@
|
||||
|
||||
package top.charles7c.cnadmin.auth.model.req;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
|
||||
import javax.validation.constraints.NotBlank;
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
@ -34,6 +35,7 @@ import io.swagger.v3.oas.annotations.media.Schema;
|
||||
@Schema(description = "账号登录信息")
|
||||
public class AccountLoginReq implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
|
@ -16,6 +16,7 @@
|
||||
|
||||
package top.charles7c.cnadmin.auth.model.resp;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
|
||||
import lombok.Data;
|
||||
@ -32,6 +33,7 @@ import io.swagger.v3.oas.annotations.media.Schema;
|
||||
@Schema(description = "元数据信息")
|
||||
public class MetaResp implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
|
@ -16,6 +16,7 @@
|
||||
|
||||
package top.charles7c.cnadmin.auth.model.resp;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
@ -33,6 +34,7 @@ import io.swagger.v3.oas.annotations.media.Schema;
|
||||
@Schema(description = "在线用户信息")
|
||||
public class OnlineUserResp implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
|
@ -16,6 +16,7 @@
|
||||
|
||||
package top.charles7c.cnadmin.auth.model.resp;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
import java.util.List;
|
||||
|
||||
@ -36,6 +37,7 @@ import com.fasterxml.jackson.annotation.JsonInclude;
|
||||
@JsonInclude(JsonInclude.Include.NON_EMPTY)
|
||||
public class RouteResp implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
|
@ -16,6 +16,7 @@
|
||||
|
||||
package top.charles7c.cnadmin.auth.model.resp;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
import java.time.LocalDate;
|
||||
import java.time.LocalDateTime;
|
||||
@ -41,6 +42,7 @@ import top.charles7c.cnadmin.common.enums.GenderEnum;
|
||||
@Schema(description = "用户信息")
|
||||
public class UserInfoResp implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
|
@ -16,6 +16,8 @@
|
||||
|
||||
package top.charles7c.cnadmin.system.model.entity;
|
||||
|
||||
import java.io.Serial;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
@ -33,6 +35,7 @@ import top.charles7c.cnadmin.common.enums.DisEnableStatusEnum;
|
||||
@TableName("sys_dept")
|
||||
public class DeptDO extends BaseDO {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
|
@ -16,6 +16,8 @@
|
||||
|
||||
package top.charles7c.cnadmin.system.model.entity;
|
||||
|
||||
import java.io.Serial;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
@ -34,6 +36,7 @@ import top.charles7c.cnadmin.common.enums.MenuTypeEnum;
|
||||
@TableName("sys_menu")
|
||||
public class MenuDO extends BaseDO {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
|
@ -16,6 +16,8 @@
|
||||
|
||||
package top.charles7c.cnadmin.system.model.entity;
|
||||
|
||||
import java.io.Serial;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
@ -34,6 +36,7 @@ import top.charles7c.cnadmin.common.enums.DisEnableStatusEnum;
|
||||
@TableName("sys_role")
|
||||
public class RoleDO extends BaseDO {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
|
@ -16,6 +16,7 @@
|
||||
|
||||
package top.charles7c.cnadmin.system.model.entity;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
|
||||
import lombok.Data;
|
||||
@ -34,6 +35,7 @@ import com.baomidou.mybatisplus.annotation.TableName;
|
||||
@TableName("sys_role_dept")
|
||||
public class RoleDeptDO implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
|
@ -16,6 +16,7 @@
|
||||
|
||||
package top.charles7c.cnadmin.system.model.entity;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
|
||||
import lombok.Data;
|
||||
@ -34,6 +35,7 @@ import com.baomidou.mybatisplus.annotation.TableName;
|
||||
@TableName("sys_role_menu")
|
||||
public class RoleMenuDO implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
|
@ -16,6 +16,7 @@
|
||||
|
||||
package top.charles7c.cnadmin.system.model.entity;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
import lombok.Data;
|
||||
@ -36,6 +37,7 @@ import top.charles7c.cnadmin.common.enums.GenderEnum;
|
||||
@TableName("sys_user")
|
||||
public class UserDO extends BaseDO {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
|
@ -16,6 +16,7 @@
|
||||
|
||||
package top.charles7c.cnadmin.system.model.entity;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
|
||||
import lombok.Data;
|
||||
@ -34,6 +35,7 @@ import com.baomidou.mybatisplus.annotation.TableName;
|
||||
@TableName("sys_user_role")
|
||||
public class UserRoleDO implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
|
@ -16,6 +16,7 @@
|
||||
|
||||
package top.charles7c.cnadmin.system.model.query;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
|
||||
import lombok.Data;
|
||||
@ -35,6 +36,7 @@ import top.charles7c.cnadmin.common.enums.QueryTypeEnum;
|
||||
@Schema(description = "部门查询条件")
|
||||
public class DeptQuery implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
|
@ -16,6 +16,7 @@
|
||||
|
||||
package top.charles7c.cnadmin.system.model.query;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
|
||||
import lombok.Data;
|
||||
@ -35,6 +36,7 @@ import top.charles7c.cnadmin.common.enums.QueryTypeEnum;
|
||||
@Schema(description = "菜单查询条件")
|
||||
public class MenuQuery implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
|
@ -16,6 +16,7 @@
|
||||
|
||||
package top.charles7c.cnadmin.system.model.query;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
|
||||
import lombok.Data;
|
||||
@ -34,6 +35,7 @@ import top.charles7c.cnadmin.common.annotation.Query;
|
||||
@Schema(description = "角色查询条件")
|
||||
public class RoleQuery implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
|
@ -16,6 +16,7 @@
|
||||
|
||||
package top.charles7c.cnadmin.system.model.query;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
@ -41,6 +42,7 @@ import top.charles7c.cnadmin.common.enums.QueryTypeEnum;
|
||||
@Schema(description = "用户查询条件")
|
||||
public class UserQuery implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
|
@ -16,10 +16,12 @@
|
||||
|
||||
package top.charles7c.cnadmin.system.model.req;
|
||||
|
||||
import javax.validation.constraints.Min;
|
||||
import javax.validation.constraints.NotBlank;
|
||||
import javax.validation.constraints.NotNull;
|
||||
import javax.validation.constraints.Pattern;
|
||||
import java.io.Serial;
|
||||
|
||||
import jakarta.validation.constraints.Min;
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
import jakarta.validation.constraints.Pattern;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
@ -42,6 +44,7 @@ import top.charles7c.cnadmin.common.enums.DisEnableStatusEnum;
|
||||
@Schema(description = "创建或修改部门信息")
|
||||
public class DeptReq extends BaseReq {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
|
@ -16,10 +16,12 @@
|
||||
|
||||
package top.charles7c.cnadmin.system.model.req;
|
||||
|
||||
import javax.validation.constraints.Min;
|
||||
import javax.validation.constraints.NotBlank;
|
||||
import javax.validation.constraints.NotNull;
|
||||
import javax.validation.constraints.Pattern;
|
||||
import java.io.Serial;
|
||||
|
||||
import jakarta.validation.constraints.Min;
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
import jakarta.validation.constraints.Pattern;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
@ -42,6 +44,7 @@ import top.charles7c.cnadmin.common.enums.MenuTypeEnum;
|
||||
@Schema(description = "创建或修改菜单信息")
|
||||
public class MenuReq extends BaseReq {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
|
@ -16,12 +16,13 @@
|
||||
|
||||
package top.charles7c.cnadmin.system.model.req;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import javax.validation.constraints.Min;
|
||||
import javax.validation.constraints.NotBlank;
|
||||
import javax.validation.constraints.Pattern;
|
||||
import jakarta.validation.constraints.Min;
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import jakarta.validation.constraints.Pattern;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
@ -44,6 +45,7 @@ import top.charles7c.cnadmin.common.enums.DisEnableStatusEnum;
|
||||
@Schema(description = "创建或修改角色信息")
|
||||
public class RoleReq extends BaseReq {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
|
@ -16,11 +16,12 @@
|
||||
|
||||
package top.charles7c.cnadmin.system.model.req;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
|
||||
import javax.validation.constraints.NotBlank;
|
||||
import javax.validation.constraints.NotNull;
|
||||
import javax.validation.constraints.Pattern;
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
import jakarta.validation.constraints.Pattern;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
@ -39,6 +40,7 @@ import top.charles7c.cnadmin.common.enums.GenderEnum;
|
||||
@Schema(description = "用户基础信息修改信息")
|
||||
public class UserBasicInfoUpdateReq implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
|
@ -16,10 +16,11 @@
|
||||
|
||||
package top.charles7c.cnadmin.system.model.req;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
|
||||
import javax.validation.constraints.NotBlank;
|
||||
import javax.validation.constraints.Pattern;
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import jakarta.validation.constraints.Pattern;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
@ -39,6 +40,7 @@ import top.charles7c.cnadmin.common.constant.RegexConsts;
|
||||
@Schema(description = "用户邮箱修改信息")
|
||||
public class UserEmailUpdateRequest implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
|
@ -16,9 +16,10 @@
|
||||
|
||||
package top.charles7c.cnadmin.system.model.req;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
|
||||
import javax.validation.constraints.NotBlank;
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
@ -34,6 +35,7 @@ import io.swagger.v3.oas.annotations.media.Schema;
|
||||
@Schema(description = "用户密码修改信息")
|
||||
public class UserPasswordUpdateReq implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
|
@ -16,12 +16,13 @@
|
||||
|
||||
package top.charles7c.cnadmin.system.model.req;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.util.List;
|
||||
|
||||
import javax.validation.constraints.NotBlank;
|
||||
import javax.validation.constraints.NotEmpty;
|
||||
import javax.validation.constraints.NotNull;
|
||||
import javax.validation.constraints.Pattern;
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import jakarta.validation.constraints.NotEmpty;
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
import jakarta.validation.constraints.Pattern;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
@ -44,6 +45,7 @@ import top.charles7c.cnadmin.common.enums.GenderEnum;
|
||||
@Schema(description = "创建或修改用户信息")
|
||||
public class UserReq extends BaseReq {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
|
@ -16,10 +16,11 @@
|
||||
|
||||
package top.charles7c.cnadmin.system.model.req;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
import java.util.List;
|
||||
|
||||
import javax.validation.constraints.NotEmpty;
|
||||
import jakarta.validation.constraints.NotEmpty;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
@ -35,6 +36,7 @@ import io.swagger.v3.oas.annotations.media.Schema;
|
||||
@Schema(description = "用户角色修改信息")
|
||||
public class UserRoleUpdateReq implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
|
@ -16,6 +16,7 @@
|
||||
|
||||
package top.charles7c.cnadmin.system.model.resp;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
|
||||
import lombok.Builder;
|
||||
@ -34,6 +35,7 @@ import io.swagger.v3.oas.annotations.media.Schema;
|
||||
@Schema(description = "头像信息")
|
||||
public class AvatarResp implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
|
@ -16,6 +16,8 @@
|
||||
|
||||
package top.charles7c.cnadmin.system.model.resp;
|
||||
|
||||
import java.io.Serial;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
@ -39,6 +41,7 @@ import top.charles7c.cnadmin.common.enums.DisEnableStatusEnum;
|
||||
@Schema(description = "部门详情信息")
|
||||
public class DeptDetailResp extends BaseDetailResp {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
|
@ -16,6 +16,8 @@
|
||||
|
||||
package top.charles7c.cnadmin.system.model.resp;
|
||||
|
||||
import java.io.Serial;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
@ -35,6 +37,7 @@ import top.charles7c.cnadmin.common.enums.DisEnableStatusEnum;
|
||||
@Schema(description = "部门信息")
|
||||
public class DeptResp extends BaseResp {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
|
@ -16,6 +16,8 @@
|
||||
|
||||
package top.charles7c.cnadmin.system.model.resp;
|
||||
|
||||
import java.io.Serial;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
@ -41,6 +43,7 @@ import top.charles7c.cnadmin.common.enums.MenuTypeEnum;
|
||||
@Schema(description = "菜单信息")
|
||||
public class MenuResp extends BaseResp {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
|
@ -16,6 +16,7 @@
|
||||
|
||||
package top.charles7c.cnadmin.system.model.resp;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.util.List;
|
||||
|
||||
import lombok.Data;
|
||||
@ -41,6 +42,7 @@ import top.charles7c.cnadmin.common.enums.DisEnableStatusEnum;
|
||||
@Schema(description = "角色详情信息")
|
||||
public class RoleDetailResp extends BaseDetailResp {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
|
@ -16,6 +16,8 @@
|
||||
|
||||
package top.charles7c.cnadmin.system.model.resp;
|
||||
|
||||
import java.io.Serial;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
@ -34,6 +36,7 @@ import top.charles7c.cnadmin.common.enums.DisEnableStatusEnum;
|
||||
@Schema(description = "角色信息")
|
||||
public class RoleResp extends BaseResp {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
|
@ -16,6 +16,7 @@
|
||||
|
||||
package top.charles7c.cnadmin.system.model.resp;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
@ -44,6 +45,7 @@ import top.charles7c.cnadmin.common.util.helper.LoginHelper;
|
||||
@Schema(description = "用户详情信息")
|
||||
public class UserDetailResp extends BaseDetailResp {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
|
@ -16,6 +16,7 @@
|
||||
|
||||
package top.charles7c.cnadmin.system.model.resp;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.util.Objects;
|
||||
|
||||
import lombok.Data;
|
||||
@ -39,6 +40,7 @@ import top.charles7c.cnadmin.common.util.helper.LoginHelper;
|
||||
@Schema(description = "用户信息")
|
||||
public class UserResp extends BaseResp {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
|
@ -21,7 +21,7 @@ import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.Optional;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import jakarta.annotation.Resource;
|
||||
|
||||
import lombok.RequiredArgsConstructor;
|
||||
|
||||
@ -127,8 +127,7 @@ public class DeptServiceImpl extends BaseServiceImpl<DeptMapper, DeptDO, DeptRes
|
||||
@Override
|
||||
public void fillDetail(Object detailObj) {
|
||||
super.fillDetail(detailObj);
|
||||
if (detailObj instanceof DeptDetailResp) {
|
||||
DeptDetailResp detail = (DeptDetailResp)detailObj;
|
||||
if (detailObj instanceof DeptDetailResp detail) {
|
||||
if (Objects.equals(SysConsts.SUPER_PARENT_ID, detail.getParentId())) {
|
||||
return;
|
||||
}
|
||||
|
@ -134,17 +134,16 @@ public class RoleServiceImpl extends BaseServiceImpl<RoleMapper, RoleDO, RoleRes
|
||||
@Override
|
||||
public void fillDetail(Object detailObj) {
|
||||
super.fillDetail(detailObj);
|
||||
if (detailObj instanceof RoleDetailResp) {
|
||||
RoleDetailResp detailVO = (RoleDetailResp)detailObj;
|
||||
Long roleId = detailVO.getId();
|
||||
if (SysConsts.ADMIN_ROLE_CODE.equals(detailVO.getCode())) {
|
||||
if (detailObj instanceof RoleDetailResp detail) {
|
||||
Long roleId = detail.getId();
|
||||
if (SysConsts.ADMIN_ROLE_CODE.equals(detail.getCode())) {
|
||||
List<MenuResp> list = menuService.list(null, null);
|
||||
List<Long> menuIds = list.stream().map(MenuResp::getId).collect(Collectors.toList());
|
||||
detailVO.setMenuIds(menuIds);
|
||||
detail.setMenuIds(menuIds);
|
||||
} else {
|
||||
detailVO.setMenuIds(roleMenuService.listMenuIdByRoleIds(CollUtil.newArrayList(roleId)));
|
||||
detail.setMenuIds(roleMenuService.listMenuIdByRoleIds(CollUtil.newArrayList(roleId)));
|
||||
}
|
||||
detailVO.setDeptIds(roleDeptService.listDeptIdByRoleId(roleId));
|
||||
detail.setDeptIds(roleDeptService.listDeptIdByRoleId(roleId));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -20,7 +20,7 @@ import java.io.File;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.*;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import jakarta.annotation.Resource;
|
||||
|
||||
import lombok.RequiredArgsConstructor;
|
||||
|
||||
@ -152,12 +152,12 @@ public class UserServiceImpl extends BaseServiceImpl<UserMapper, UserDO, UserRes
|
||||
@Override
|
||||
public void fillDetail(Object detailObj) {
|
||||
super.fillDetail(detailObj);
|
||||
if (detailObj instanceof UserDetailResp) {
|
||||
UserDetailResp detailVO = (UserDetailResp)detailObj;
|
||||
detailVO.setDeptName(ExceptionUtils.exToNull(() -> deptService.get(detailVO.getDeptId()).getName()));
|
||||
List<Long> roleIdList = userRoleService.listRoleIdByUserId(detailVO.getId());
|
||||
detailVO.setRoleIds(roleIdList);
|
||||
detailVO.setRoleNames(String.join(StringConsts.CHINESE_COMMA, roleService.listNameByIds(roleIdList)));
|
||||
if (detailObj instanceof UserDetailResp detail) {
|
||||
UserDetailResp detail = (UserDetailResp)detailObj;
|
||||
detail.setDeptName(ExceptionUtils.exToNull(() -> deptService.get(detail.getDeptId()).getName()));
|
||||
List<Long> roleIdList = userRoleService.listRoleIdByUserId(detail.getId());
|
||||
detail.setRoleIds(roleIdList);
|
||||
detail.setRoleNames(String.join(StringConsts.CHINESE_COMMA, roleService.listNameByIds(roleIdList)));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -16,6 +16,7 @@
|
||||
|
||||
package top.charles7c.cnadmin.tool.model.query;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
|
||||
import lombok.Data;
|
||||
@ -32,6 +33,7 @@ import io.swagger.v3.oas.annotations.media.Schema;
|
||||
@Schema(description = "表信息查询条件")
|
||||
public class TableQuery implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
|
@ -20,9 +20,9 @@ import java.time.Duration;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import javax.mail.MessagingException;
|
||||
import javax.validation.constraints.NotBlank;
|
||||
import javax.validation.constraints.Pattern;
|
||||
import jakarta.mail.MessagingException;
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import jakarta.validation.constraints.Pattern;
|
||||
|
||||
import lombok.RequiredArgsConstructor;
|
||||
|
||||
|
@ -19,7 +19,7 @@ package top.charles7c.cnadmin.webapi.controller.system;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import javax.validation.constraints.NotNull;
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
|
||||
import lombok.RequiredArgsConstructor;
|
||||
|
||||
|
@ -1,8 +1,3 @@
|
||||
--- ### 项目配置
|
||||
project:
|
||||
# URL
|
||||
url: http://localhost:5173
|
||||
|
||||
--- ### 服务器配置
|
||||
server:
|
||||
# HTTP 端口(默认 8080)
|
||||
@ -56,7 +51,7 @@ spring.liquibase:
|
||||
change-log: classpath:/db/changelog/db.changelog-master.yaml
|
||||
|
||||
--- ### Redis 配置(单机版)
|
||||
spring:
|
||||
spring.data:
|
||||
redis:
|
||||
# 地址
|
||||
host: ${REDIS_HOST:127.0.0.1}
|
||||
|
@ -58,7 +58,7 @@ spring.liquibase:
|
||||
change-log: classpath:/db/changelog/db.changelog-master.yaml
|
||||
|
||||
--- ### Redis 配置(单机版)
|
||||
spring:
|
||||
spring.data:
|
||||
redis:
|
||||
# 地址
|
||||
host: ${REDIS_HOST:127.0.0.1}
|
||||
|
20
pom.xml
20
pom.xml
@ -39,7 +39,7 @@ limitations under the License.
|
||||
<parent>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-parent</artifactId>
|
||||
<version>2.7.16</version>
|
||||
<version>3.0.5</version>
|
||||
<relativePath/> <!-- lookup parent from repository -->
|
||||
</parent>
|
||||
|
||||
@ -63,10 +63,7 @@ limitations under the License.
|
||||
|
||||
<!-- ### 基础环境相关 ### -->
|
||||
<revision>2.0.0-SNAPSHOT</revision>
|
||||
<java.version>1.8</java.version>
|
||||
<spotless.version>2.30.0</spotless.version>
|
||||
<maven.compiler.source>8</maven.compiler.source>
|
||||
<maven.compiler.target>8</maven.compiler.target>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
</properties>
|
||||
|
||||
@ -77,7 +74,7 @@ limitations under the License.
|
||||
<!-- Sa-Token(轻量级 Java 权限认证框架,让鉴权变得简单、优雅) -->
|
||||
<dependency>
|
||||
<groupId>cn.dev33</groupId>
|
||||
<artifactId>sa-token-spring-boot-starter</artifactId>
|
||||
<artifactId>sa-token-spring-boot3-starter</artifactId>
|
||||
<version>${sa-token.version}</version>
|
||||
</dependency>
|
||||
|
||||
@ -174,17 +171,6 @@ limitations under the License.
|
||||
<groupId>org.redisson</groupId>
|
||||
<artifactId>redisson-spring-boot-starter</artifactId>
|
||||
<version>${redisson.version}</version>
|
||||
<exclusions>
|
||||
<exclusion>
|
||||
<groupId>org.redisson</groupId>
|
||||
<artifactId>redisson-spring-data-30</artifactId>
|
||||
</exclusion>
|
||||
</exclusions>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.redisson</groupId>
|
||||
<artifactId>redisson-spring-data-27</artifactId>
|
||||
<version>${redisson.version}</version>
|
||||
</dependency>
|
||||
|
||||
<!-- Easy Captcha(Java 图形验证码,支持 gif、中文、算术等类型,可用于 Java Web、JavaSE 等项目) -->
|
||||
@ -278,7 +264,7 @@ limitations under the License.
|
||||
<configuration>
|
||||
<java>
|
||||
<importOrder>
|
||||
<order>java,javax,lombok,io,org,com,cn,top.charles7c,</order>
|
||||
<order>java,jakarta,lombok,io,org,com,cn,top.charles7c,</order>
|
||||
</importOrder>
|
||||
<removeUnusedImports/>
|
||||
<eclipse>
|
||||
|
Loading…
Reference in New Issue
Block a user