parent
9551f322f0
commit
1551cc1263
|
@ -0,0 +1,33 @@
|
||||||
|
package com.guwan.backend.entity;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public class UserRead {
|
||||||
|
/**
|
||||||
|
* 用户id
|
||||||
|
*/
|
||||||
|
private Long userId;
|
||||||
|
/**
|
||||||
|
* 图书id
|
||||||
|
*/
|
||||||
|
private Long bookId;
|
||||||
|
/**
|
||||||
|
* 用户上次阅读节位置
|
||||||
|
*/
|
||||||
|
private Integer sectionId;
|
||||||
|
|
||||||
|
private Long thisReadingTime;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 该书累计阅读时间
|
||||||
|
*/
|
||||||
|
private Long cumulativeReadingTime;
|
||||||
|
/**
|
||||||
|
* 上次阅读时间
|
||||||
|
*/
|
||||||
|
private LocalDateTime lastReadTime;
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,135 @@
|
||||||
|
package com.guwan.backend.mybatis.query;
|
||||||
|
|
||||||
|
import cn.hutool.core.util.ArrayUtil;
|
||||||
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
|
import com.baomidou.mybatisplus.core.toolkit.support.SFunction;
|
||||||
|
import org.apache.commons.lang3.ArrayUtils;
|
||||||
|
import org.springframework.util.StringUtils;
|
||||||
|
|
||||||
|
import java.util.Collection;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 拓展 MyBatis Plus QueryWrapper 类,主要增加如下功能:
|
||||||
|
* <p>
|
||||||
|
* 1. 拼接条件的方法,增加 xxxIfPresent 方法,用于判断值不存在的时候,不要拼接到条件中。
|
||||||
|
*
|
||||||
|
* @param <T> 数据类型
|
||||||
|
*/
|
||||||
|
public class LambdaQueryWrapperX<T> extends LambdaQueryWrapper<T> {
|
||||||
|
|
||||||
|
public LambdaQueryWrapperX<T> likeIfPresent(SFunction<T, ?> column, String val) {
|
||||||
|
if (StringUtils.hasText(val)) {
|
||||||
|
return (LambdaQueryWrapperX<T>) super.like(column, val);
|
||||||
|
}
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public LambdaQueryWrapperX<T> inIfPresent(SFunction<T, ?> column, Collection<?> values) {
|
||||||
|
if (ObjectUtil.isAllNotEmpty(values) && !ArrayUtil.isEmpty(values)) {
|
||||||
|
return (LambdaQueryWrapperX<T>) super.in(column, values);
|
||||||
|
}
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public LambdaQueryWrapperX<T> inIfPresent(SFunction<T, ?> column, Object... values) {
|
||||||
|
if (ObjectUtil.isAllNotEmpty(values) && !ArrayUtil.isEmpty(values)) {
|
||||||
|
return (LambdaQueryWrapperX<T>) super.in(column, values);
|
||||||
|
}
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public LambdaQueryWrapperX<T> eqIfPresent(SFunction<T, ?> column, Object val) {
|
||||||
|
if (ObjectUtil.isNotEmpty(val)) {
|
||||||
|
return (LambdaQueryWrapperX<T>) super.eq(column, val);
|
||||||
|
}
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public LambdaQueryWrapperX<T> neIfPresent(SFunction<T, ?> column, Object val) {
|
||||||
|
if (ObjectUtil.isNotEmpty(val)) {
|
||||||
|
return (LambdaQueryWrapperX<T>) super.ne(column, val);
|
||||||
|
}
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public LambdaQueryWrapperX<T> gtIfPresent(SFunction<T, ?> column, Object val) {
|
||||||
|
if (val != null) {
|
||||||
|
return (LambdaQueryWrapperX<T>) super.gt(column, val);
|
||||||
|
}
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public LambdaQueryWrapperX<T> geIfPresent(SFunction<T, ?> column, Object val) {
|
||||||
|
if (val != null) {
|
||||||
|
return (LambdaQueryWrapperX<T>) super.ge(column, val);
|
||||||
|
}
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public LambdaQueryWrapperX<T> ltIfPresent(SFunction<T, ?> column, Object val) {
|
||||||
|
if (val != null) {
|
||||||
|
return (LambdaQueryWrapperX<T>) super.lt(column, val);
|
||||||
|
}
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public LambdaQueryWrapperX<T> leIfPresent(SFunction<T, ?> column, Object val) {
|
||||||
|
if (val != null) {
|
||||||
|
return (LambdaQueryWrapperX<T>) super.le(column, val);
|
||||||
|
}
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public LambdaQueryWrapperX<T> betweenIfPresent(SFunction<T, ?> column, Object val1, Object val2) {
|
||||||
|
if (val1 != null && val2 != null) {
|
||||||
|
return (LambdaQueryWrapperX<T>) super.between(column, val1, val2);
|
||||||
|
}
|
||||||
|
if (val1 != null) {
|
||||||
|
return (LambdaQueryWrapperX<T>) ge(column, val1);
|
||||||
|
}
|
||||||
|
if (val2 != null) {
|
||||||
|
return (LambdaQueryWrapperX<T>) le(column, val2);
|
||||||
|
}
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public LambdaQueryWrapperX<T> betweenIfPresent(SFunction<T, ?> column, Object[] values) {
|
||||||
|
Object val1 = ArrayUtils.get(values, 0);
|
||||||
|
Object val2 = ArrayUtils.get(values, 1);
|
||||||
|
return betweenIfPresent(column, val1, val2);
|
||||||
|
}
|
||||||
|
|
||||||
|
// ========== 重写父类方法,方便链式调用 ==========
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public LambdaQueryWrapperX<T> eq(boolean condition, SFunction<T, ?> column, Object val) {
|
||||||
|
super.eq(condition, column, val);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public LambdaQueryWrapperX<T> eq(SFunction<T, ?> column, Object val) {
|
||||||
|
super.eq(column, val);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public LambdaQueryWrapperX<T> orderByDesc(SFunction<T, ?> column) {
|
||||||
|
super.orderByDesc(true, column);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public LambdaQueryWrapperX<T> last(String lastSql) {
|
||||||
|
super.last(lastSql);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public LambdaQueryWrapperX<T> in(SFunction<T, ?> column, Collection<?> coll) {
|
||||||
|
super.in(column, coll);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -7,6 +7,7 @@ import com.guwan.backend.dto.user.RegisterDTO;
|
||||||
import com.guwan.backend.dto.user.UserDTO;
|
import com.guwan.backend.dto.user.UserDTO;
|
||||||
import com.guwan.backend.entity.User;
|
import com.guwan.backend.entity.User;
|
||||||
import com.guwan.backend.mapper.UserMapper;
|
import com.guwan.backend.mapper.UserMapper;
|
||||||
|
import com.guwan.backend.mybatis.query.LambdaQueryWrapperX;
|
||||||
import com.guwan.backend.service.EmailService;
|
import com.guwan.backend.service.EmailService;
|
||||||
import com.guwan.backend.service.UserService;
|
import com.guwan.backend.service.UserService;
|
||||||
import com.guwan.backend.util.JwtUtil;
|
import com.guwan.backend.util.JwtUtil;
|
||||||
|
@ -92,7 +93,7 @@ public class UserServiceImpl implements UserService {
|
||||||
System.out.println("request = " + request);
|
System.out.println("request = " + request);
|
||||||
|
|
||||||
if (request.getActiveTab().equals("account")) {
|
if (request.getActiveTab().equals("account")) {
|
||||||
user = userMapper.selectOne(new LambdaQueryWrapper<User>().eq(User::getUsername, request.getUsername()));
|
user = userMapper.selectOne(new LambdaQueryWrapperX<User>().eqIfPresent(User::getUsername, request.getUsername()));
|
||||||
if (user == null || !passwordEncoder.matches(request.getPassword(), user.getPassword())) {
|
if (user == null || !passwordEncoder.matches(request.getPassword(), user.getPassword())) {
|
||||||
throw new IllegalArgumentException("用户名或密码错误");
|
throw new IllegalArgumentException("用户名或密码错误");
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue