更新依赖;解决依赖冲突;调整、重构代码。

This commit is contained in:
2023-01-28 12:40:02 +08:00
parent 2c967a4c0d
commit c73c722b87
16 changed files with 145 additions and 159 deletions

View File

@@ -7,19 +7,18 @@ import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import xyz.zhouxy.plusone.exception.handler.BaseExceptionHandler;
import xyz.zhouxy.plusone.exception.handler.ExceptionInfoHolderFactory;
import xyz.zhouxy.plusone.system.application.exception.AccountLoginException;
import xyz.zhouxy.plusone.util.RestfulResult;
@RestControllerAdvice
public class AccountLoginExceptionHandler extends BaseExceptionHandler {
protected AccountLoginExceptionHandler(ExceptionInfoHolder exceptionInfoHolder) {
super(exceptionInfoHolder);
protected AccountLoginExceptionHandler() {
super(ExceptionInfoHolderFactory.newDefaultExceptionInfoHolder());
}
@ExceptionHandler({
AccountLoginException.class,
})
@ExceptionHandler({ AccountLoginException.class })
public ResponseEntity<RestfulResult> handleException(@Nonnull Exception e) {
return buildExceptionResponse(e);
}

View File

@@ -15,6 +15,7 @@ import cn.dev33.satoken.exception.SaTokenException;
import cn.dev33.satoken.exception.SameTokenInvalidException;
import lombok.extern.slf4j.Slf4j;
import xyz.zhouxy.plusone.exception.handler.BaseExceptionHandler;
import xyz.zhouxy.plusone.exception.handler.ExceptionInfoHolderFactory;
import xyz.zhouxy.plusone.util.RestfulResult;
/**
@@ -26,8 +27,8 @@ import xyz.zhouxy.plusone.util.RestfulResult;
@Slf4j
public class SaTokenExceptionHandler extends BaseExceptionHandler {
public SaTokenExceptionHandler(ExceptionInfoHolder exceptionInfoHolder) {
super(exceptionInfoHolder);
public SaTokenExceptionHandler() {
super(ExceptionInfoHolderFactory.newDefaultExceptionInfoHolder());
set(NotPermissionException.class, 4030103, "会话未能通过权限认证", HttpStatus.FORBIDDEN);
set(NotRoleException.class, 4030103, "会话未能通过角色认证", HttpStatus.FORBIDDEN);
set(DisableServiceException.class, 4030202, "账号指定服务已被封禁", HttpStatus.FORBIDDEN);
@@ -36,7 +37,7 @@ public class SaTokenExceptionHandler extends BaseExceptionHandler {
set(NotSafeException.class, 4020300, "会话未能通过二级认证", HttpStatus.UNAUTHORIZED);
set(NotLoginException.class,
4020400,
e -> switch (((NotLoginException) e).getType()) {
e -> switch (e.getType()) {
case NotLoginException.NOT_TOKEN -> "未提供 Token";
case NotLoginException.INVALID_TOKEN -> "Token 无效";
case NotLoginException.TOKEN_TIMEOUT -> "Token 已过期";

View File

@@ -2,12 +2,12 @@ package xyz.zhouxy.plusone.system.application.query;
import java.util.List;
import org.apache.ibatis.jdbc.SQL;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.namedparam.BeanPropertySqlParameterSource;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
import org.springframework.stereotype.Component;
import xyz.zhouxy.plusone.sql.SQL;
import xyz.zhouxy.plusone.system.application.query.params.DictQueryParams;
import xyz.zhouxy.plusone.system.application.query.result.DictOverview;
@@ -26,14 +26,21 @@ public class DictQueries {
}
public List<DictOverview> queryDictOverviewList(DictQueryParams queryParams) {
String sql = new SQL()
.SELECT("id", "dict_type", "dict_label",
"created_by", "create_time", "updated_by", "update_time", "count")
.FROM("view_sys_dict_overview")
.WHERE_IF(queryParams.getDictType() != null, "dict_type LIKE '%:dictType%'")
.WHERE_IF(queryParams.getDictLabel() != null, "dict_label LIKE '%:dictLabel%'")
.toString();
String sql = new SQL() {
{
SELECT("id", "dict_type", "dict_label",
"created_by", "create_time", "updated_by", "update_time", "count");
FROM("view_sys_dict_overview");
if (queryParams.getDictType() != null) {
WHERE("dict_type LIKE '%:dictType%'");
}
if (queryParams.getDictLabel() != null) {
WHERE("dict_label LIKE '%:dictLabel%'");
}
}
}.toString();
return this.jdbcTemplate
.query(sql, new BeanPropertySqlParameterSource(queryParams), new BeanPropertyRowMapper<>(DictOverview.class));
.query(sql, new BeanPropertySqlParameterSource(queryParams),
new BeanPropertyRowMapper<>(DictOverview.class));
}
}

View File

@@ -7,7 +7,7 @@ import org.springframework.jdbc.core.namedparam.BeanPropertySqlParameterSource;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
import org.springframework.stereotype.Repository;
import xyz.zhouxy.plusone.sql.SQL;
import org.apache.ibatis.jdbc.SQL;
import xyz.zhouxy.plusone.system.application.query.params.RoleQueryParams;
import xyz.zhouxy.plusone.system.application.query.result.RoleOverview;
@@ -35,30 +35,47 @@ public class RoleQueries {
* @return 查询结果
*/
public List<RoleOverview> query(RoleQueryParams params) {
String b = new SQL()
.SELECT("id")
.FROM("sys_role")
.WHERE_IF_NOT_NULL(params.getId(), "id = :id")
.WHERE_IF_NOT_NULL(params.getName(), "name = :name")
.WHERE_IF_NOT_NULL(params.getIdentifier(), "identifier = :identifier")
.WHERE_IF_NOT_NULL(params.getStatus(), "status = :status")
.WHERE_IF_NOT_NULL(params.getCreateTimeStart(), "create_time >= :createTimeStart")
.WHERE_IF_NOT_NULL(params.getCreateTimeEnd(), "create_time < :createTimeEnd")
.WHERE_IF_NOT_NULL(params.getUpdateTimeStart(), "update_time >= :updateTimeStart")
.WHERE_IF_NOT_NULL(params.getUpdateTimeEnd(), "update_time < :updateTimeEnd")
.LIMIT(params.getSize())
.OFFSET(params.getOffset())
.toString();
var sql = """
SELECT a.id AS id, a.name AS name, a.identifier AS identifier, a.status AS status
FROM sys_role AS a, (
""" + b + """
) AS b
WHERE a.id = b.id
""";
var sql = new SQL() {
{
SELECT("a.id AS id", "a.name AS name", "a.identifier AS identifier", "a.status AS status");
FROM("sys_role AS a", "(" +
new SQL() {
{
SELECT("id");
FROM("sys_role");
if (null != params.getId()) {
WHERE("id = :id");
}
if (null != params.getName()) {
WHERE("name = :name");
}
if (null != params.getIdentifier()) {
WHERE("identifier = :identifier");
}
if (null != params.getStatus()) {
WHERE("status = :status");
}
if (null != params.getCreateTimeStart()) {
WHERE("create_time >= :createTimeStart");
}
if (null != params.getCreateTimeEnd()) {
WHERE("create_time < :createTimeEnd");
}
if (null != params.getUpdateTimeStart()) {
WHERE("update_time >= :updateTimeStart");
}
if (null != params.getUpdateTimeEnd()) {
WHERE("update_time < :updateTimeEnd");
}
LIMIT(params.getSize());
OFFSET(params.getOffset());
}
}.toString() + ") AS b");
WHERE("a.id = b.id");
}
}.toString();
return this.jdbcTemplate
.query(sql, new BeanPropertySqlParameterSource(params),
new BeanPropertyRowMapper<>(RoleOverview.class));
}
}

View File

@@ -1,13 +1,11 @@
package xyz.zhouxy.plusone.system.application.service.command.validator;
import java.util.regex.Pattern;
import java.util.List;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;
import xyz.zhouxy.plusone.constant.RegexConsts;
import xyz.zhouxy.plusone.system.application.service.command.LoginByOtpCommand;
import xyz.zhouxy.plusone.util.RegexUtil;
import xyz.zhouxy.plusone.validator.BaseValidator;
import xyz.zhouxy.plusone.validator.DtoValidator;
@@ -15,15 +13,13 @@ import xyz.zhouxy.plusone.validator.DtoValidator;
@DtoValidator(LoginByOtpCommand.class)
public class LoginByOtpCommandValidator extends BaseValidator<LoginByOtpCommand> {
public LoginByOtpCommandValidator() {
withRule(loginCommand -> {
String principal = loginCommand.getPrincipal();
return StringUtils.hasText(principal)
&&
RegexUtil.matchesOr(principal, RegexConsts.EMAIL, RegexConsts.MOBILE_PHONE);
}, "输入邮箱地址或手机号");
withRule(loginCommand -> {
String otp = loginCommand.getOtp();
return StringUtils.hasText(otp) && Pattern.matches(RegexConsts.CAPTCHA, otp);
}, "验证码不符合要求");
ruleForString(LoginByOtpCommand::getPrincipal)
.notNull("输入邮箱地址或手机号")
.notEmpty("输入邮箱地址或手机号")
.matchesOr(List.of(RegexConsts.EMAIL, RegexConsts.MOBILE_PHONE), "输入用户名、邮箱地址或手机号");
ruleForString(LoginByOtpCommand::getOtp)
.notNull("验证码不能为空")
.notEmpty("验证码不能为空")
.matches(RegexConsts.CAPTCHA, "验证码格式不正确");
}
}

View File

@@ -1,13 +1,9 @@
package xyz.zhouxy.plusone.system.application.service.command.validator;
import java.util.regex.Pattern;
import java.util.List;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;
import xyz.zhouxy.plusone.constant.RegexConsts;
import xyz.zhouxy.plusone.system.application.service.command.LoginByPasswordCommand;
import xyz.zhouxy.plusone.util.RegexUtil;
import xyz.zhouxy.plusone.validator.BaseValidator;
import xyz.zhouxy.plusone.validator.DtoValidator;
@@ -15,17 +11,14 @@ import xyz.zhouxy.plusone.validator.DtoValidator;
@DtoValidator(LoginByPasswordCommand.class)
public class LoginByPasswordCommandValidator extends BaseValidator<LoginByPasswordCommand> {
public LoginByPasswordCommandValidator() {
withRule(loginCommand -> {
String principal = loginCommand.getPrincipal();
return StringUtils.hasText(principal)
&&
RegexUtil.matchesOr(principal, RegexConsts.USERNAME, RegexConsts.EMAIL, RegexConsts.MOBILE_PHONE, principal);
}, "输入用户名、邮箱地址或手机号");
withRule(loginCommand -> {
String password = loginCommand.getPassword();
return StringUtils.hasText(password)
&&
Pattern.matches(RegexConsts.PASSWORD, password);
}, "密码格式不正确");
ruleForString(LoginByPasswordCommand::getPrincipal)
.notNull("输入用户名、邮箱地址或手机号")
.notEmpty("输入用户名、邮箱地址或手机号")
.matchesOr(List.of(RegexConsts.USERNAME, RegexConsts.EMAIL, RegexConsts.MOBILE_PHONE),
"输入用户名、邮箱地址或手机号");
ruleForString(LoginByPasswordCommand::getPassword)
.notNull("密码不能为空")
.notEmpty("密码不能为空")
.matches(RegexConsts.PASSWORD, "密码格式不正确");
}
}