[重大更新] 增加mybatis-plus扩展工具 大幅简化整体业务代码写法 优雅舒适

This commit is contained in:
疯狂的狮子Li
2026-05-15 11:39:20 +08:00
parent fdf9e4ae39
commit 7a5d6b4723
44 changed files with 1535 additions and 483 deletions
@@ -1,7 +1,6 @@
package org.dromara.web.service; package org.dromara.web.service;
import cn.hutool.crypto.digest.BCrypt; import cn.hutool.crypto.digest.BCrypt;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.dromara.common.core.constant.Constants; import org.dromara.common.core.constant.Constants;
import org.dromara.common.core.constant.GlobalConstants; import org.dromara.common.core.constant.GlobalConstants;
@@ -58,8 +57,9 @@ public class SysRegisterService {
sysUser.setPassword(BCrypt.hashpw(password)); sysUser.setPassword(BCrypt.hashpw(password));
sysUser.setUserType(userType); sysUser.setUserType(userType);
boolean exist = userMapper.exists(new LambdaQueryWrapper<SysUser>() boolean exist = userMapper.lambda()
.eq(SysUser::getUserName, sysUser.getUserName())); .eq(SysUser::getUserName, sysUser.getUserName())
.exists();
if (exist) { if (exist) {
throw new UserException("user.register.save.error", username); throw new UserException("user.register.save.error", username);
} }
@@ -3,7 +3,6 @@ package org.dromara.web.service.impl;
import cn.dev33.satoken.stp.StpUtil; import cn.dev33.satoken.stp.StpUtil;
import cn.dev33.satoken.stp.parameter.SaLoginParameter; import cn.dev33.satoken.stp.parameter.SaLoginParameter;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.dromara.common.core.constant.Constants; import org.dromara.common.core.constant.Constants;
@@ -95,7 +94,9 @@ public class EmailAuthStrategy implements IAuthStrategy {
* @return 用户信息 * @return 用户信息
*/ */
private SysUserVo loadUserByEmail(String email) { private SysUserVo loadUserByEmail(String email) {
SysUserVo user = userMapper.selectVoOne(new LambdaQueryWrapper<SysUser>().eq(SysUser::getEmail, email)); SysUserVo user = userMapper.lambda()
.eq(SysUser::getEmail, email)
.voOne();
if (ObjectUtil.isNull(user)) { if (ObjectUtil.isNull(user)) {
log.info("登录用户:{} 不存在.", email); log.info("登录用户:{} 不存在.", email);
throw new UserException("user.not.exists", email); throw new UserException("user.not.exists", email);
@@ -4,7 +4,6 @@ import cn.dev33.satoken.stp.StpUtil;
import cn.dev33.satoken.stp.parameter.SaLoginParameter; import cn.dev33.satoken.stp.parameter.SaLoginParameter;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import cn.hutool.crypto.digest.BCrypt; import cn.hutool.crypto.digest.BCrypt;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.dromara.common.core.constant.Constants; import org.dromara.common.core.constant.Constants;
@@ -112,7 +111,9 @@ public class PasswordAuthStrategy implements IAuthStrategy {
* @return 用户信息 * @return 用户信息
*/ */
private SysUserVo loadUserByUsername(String username) { private SysUserVo loadUserByUsername(String username) {
SysUserVo user = userMapper.selectVoOne(new LambdaQueryWrapper<SysUser>().eq(SysUser::getUserName, username)); SysUserVo user = userMapper.lambda()
.eq(SysUser::getUserName, username)
.voOne();
if (ObjectUtil.isNull(user)) { if (ObjectUtil.isNull(user)) {
log.info("登录用户:{} 不存在.", username); log.info("登录用户:{} 不存在.", username);
throw new UserException("user.not.exists", username); throw new UserException("user.not.exists", username);
@@ -3,7 +3,6 @@ package org.dromara.web.service.impl;
import cn.dev33.satoken.stp.StpUtil; import cn.dev33.satoken.stp.StpUtil;
import cn.dev33.satoken.stp.parameter.SaLoginParameter; import cn.dev33.satoken.stp.parameter.SaLoginParameter;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.dromara.common.core.constant.Constants; import org.dromara.common.core.constant.Constants;
@@ -95,7 +94,9 @@ public class SmsAuthStrategy implements IAuthStrategy {
* @return 用户信息 * @return 用户信息
*/ */
private SysUserVo loadUserByPhoneNumber(String phoneNumber) { private SysUserVo loadUserByPhoneNumber(String phoneNumber) {
SysUserVo user = userMapper.selectVoOne(new LambdaQueryWrapper<SysUser>().eq(SysUser::getPhoneNumber, phoneNumber)); SysUserVo user = userMapper.lambda()
.eq(SysUser::getPhoneNumber, phoneNumber)
.voOne();
if (ObjectUtil.isNull(user)) { if (ObjectUtil.isNull(user)) {
log.info("登录用户:{} 不存在.", phoneNumber); log.info("登录用户:{} 不存在.", phoneNumber);
throw new UserException("user.not.exists", phoneNumber); throw new UserException("user.not.exists", phoneNumber);
@@ -7,7 +7,9 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.reflect.GenericTypeUtils; import com.baomidou.mybatisplus.core.toolkit.reflect.GenericTypeUtils;
import com.baomidou.mybatisplus.extension.conditions.update.LambdaUpdateChainWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.toolkit.ChainWrappers;
import com.baomidou.mybatisplus.extension.toolkit.Db; import com.baomidou.mybatisplus.extension.toolkit.Db;
import org.apache.ibatis.logging.Log; import org.apache.ibatis.logging.Log;
import org.apache.ibatis.logging.LogFactory; import org.apache.ibatis.logging.LogFactory;
@@ -60,6 +62,24 @@ public interface BaseMapperPlus<T, V> extends BaseMapper<T> {
return this.selectList(new QueryWrapper<>()); return this.selectList(new QueryWrapper<>());
} }
/**
* 创建当前 Mapper 绑定的 Lambda CRUD 链式操作。
*
* @return Lambda CRUD 链式包装器
*/
default LambdaCrudChainWrapper<T, V> lambda() {
return new LambdaCrudChainWrapper<>(this);
}
/**
* 创建当前 Mapper 绑定的 Lambda 链式更新。
*
* @return Lambda 链式更新包装器
*/
default LambdaUpdateChainWrapper<T> lambdaUpdate() {
return ChainWrappers.lambdaUpdateChain(this);
}
/** /**
* 批量插入实体对象集合 * 批量插入实体对象集合
* *
@@ -0,0 +1,399 @@
package org.dromara.common.mybatis.core.mapper;
import com.baomidou.mybatisplus.core.conditions.AbstractLambdaWrapper;
import com.baomidou.mybatisplus.core.conditions.SharedString;
import com.baomidou.mybatisplus.core.conditions.query.Query;
import com.baomidou.mybatisplus.core.conditions.segments.MergeSegments;
import com.baomidou.mybatisplus.core.conditions.update.Update;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.metadata.TableFieldInfo;
import com.baomidou.mybatisplus.core.metadata.TableInfoHelper;
import com.baomidou.mybatisplus.core.toolkit.Assert;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.core.toolkit.support.SFunction;
import org.dromara.common.mybatis.core.query.LambdaQueryCondition;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.function.Function;
import java.util.function.Predicate;
/**
* Mapper 级 Lambda CRUD 链式包装器。
*
* @param <T> table 泛型
* @param <V> vo 泛型
* @author Lion Li
*/
public class LambdaCrudChainWrapper<T, V> extends AbstractLambdaWrapper<T, LambdaCrudChainWrapper<T, V>>
implements Query<LambdaCrudChainWrapper<T, V>, T, SFunction<T, ?>>,
Update<LambdaCrudChainWrapper<T, V>, SFunction<T, ?>>,
LambdaQueryCondition<T, LambdaCrudChainWrapper<T, V>> {
private final BaseMapperPlus<T, V> baseMapper;
private final List<String> sqlSet;
private SharedString sqlSelect = new SharedString();
public LambdaCrudChainWrapper(BaseMapperPlus<T, V> baseMapper) {
this.baseMapper = baseMapper;
super.setEntityClass(baseMapper.currentModelClass());
super.initNeed();
this.sqlSet = new ArrayList<>();
}
LambdaCrudChainWrapper(BaseMapperPlus<T, V> baseMapper, T entity, Class<T> entityClass, SharedString sqlSelect,
List<String> sqlSet, AtomicInteger paramNameSeq, Map<String, Object> paramNameValuePairs,
MergeSegments mergeSegments, SharedString paramAlias, SharedString lastSql,
SharedString sqlComment, SharedString sqlFirst) {
this.baseMapper = baseMapper;
super.setEntity(entity);
super.setEntityClass(entityClass);
this.sqlSelect = sqlSelect == null ? new SharedString() : sqlSelect;
this.sqlSet = sqlSet == null ? new ArrayList<>() : sqlSet;
this.paramNameSeq = paramNameSeq;
this.paramNameValuePairs = paramNameValuePairs;
this.expression = mergeSegments;
this.paramAlias = paramAlias;
this.lastSql = lastSql;
this.sqlComment = sqlComment;
this.sqlFirst = sqlFirst;
}
@Override
public LambdaCrudChainWrapper<T, V> select(boolean condition, List<SFunction<T, ?>> columns) {
if (condition && CollectionUtils.isNotEmpty(columns)) {
this.sqlSelect.setStringValue(columnsToString(false, columns));
}
return typedThis;
}
@SafeVarargs
public final LambdaCrudChainWrapper<T, V> select(SFunction<T, ?>... columns) {
return select(true, CollectionUtils.toList(columns));
}
@SafeVarargs
public final LambdaCrudChainWrapper<T, V> select(boolean condition, SFunction<T, ?>... columns) {
return select(condition, CollectionUtils.toList(columns));
}
@Override
public LambdaCrudChainWrapper<T, V> select(Class<T> entityClass, Predicate<TableFieldInfo> predicate) {
if (entityClass == null) {
entityClass = getEntityClass();
} else {
setEntityClass(entityClass);
}
Assert.notNull(entityClass, "entityClass can not be null");
this.sqlSelect.setStringValue(TableInfoHelper.getTableInfo(entityClass).chooseSelect(predicate));
return typedThis;
}
@Override
public String getSqlSelect() {
return sqlSelect.getStringValue();
}
@Override
public LambdaCrudChainWrapper<T, V> set(boolean condition, SFunction<T, ?> column, Object val, String mapping) {
return maybeDo(condition, () -> {
String sql = formatParam(mapping, val);
sqlSet.add(columnToString(column) + Constants.EQUALS + sql);
});
}
/**
* 值不为 null 时设置更新字段。
*
* @param column 字段
* @param value 值
* @return this
*/
public LambdaCrudChainWrapper<T, V> setIfPresent(SFunction<T, ?> column, Object value) {
return set(value != null, column, value);
}
/**
* 文本不为空时设置更新字段。
*
* @param column 字段
* @param value 值
* @return this
*/
public LambdaCrudChainWrapper<T, V> setIfText(SFunction<T, ?> column, String value) {
return set(org.dromara.common.core.utils.StringUtils.isNotBlank(value), column, value);
}
@Override
public LambdaCrudChainWrapper<T, V> setSql(boolean condition, String setSql, Object... params) {
return maybeDo(condition && StringUtils.isNotBlank(setSql), () -> sqlSet.add(formatSqlMaybeWithParam(setSql, params)));
}
@Override
public LambdaCrudChainWrapper<T, V> setIncrBy(boolean condition, SFunction<T, ?> column, Number val) {
return maybeDo(condition, () -> {
String realColumn = columnToString(column);
String realVal = val instanceof BigDecimal ? ((BigDecimal) val).toPlainString() : String.valueOf(val);
sqlSet.add(String.format("%s=%s + %s", realColumn, realColumn, realVal));
});
}
@Override
public LambdaCrudChainWrapper<T, V> setDecrBy(boolean condition, SFunction<T, ?> column, Number val) {
return maybeDo(condition, () -> {
String realColumn = columnToString(column);
String realVal = val instanceof BigDecimal ? ((BigDecimal) val).toPlainString() : String.valueOf(val);
sqlSet.add(String.format("%s=%s - %s", realColumn, realColumn, realVal));
});
}
@Override
public String getSqlSet() {
if (CollectionUtils.isEmpty(sqlSet)) {
return null;
}
return String.join(Constants.COMMA, sqlSet);
}
/**
* 获取查询条件 Wrapper。
*
* @return this
*/
public LambdaCrudChainWrapper<T, V> getWrapper() {
return typedThis;
}
public LambdaCrudChainWrapper<T, V> findInSet(Object value, SFunction<T, ?> column) {
return findInSet(true, value, column);
}
public LambdaCrudChainWrapper<T, V> findInSet(boolean condition, Object value, SFunction<T, ?> column) {
return findInSet(condition, value, columnToString(column));
}
public LambdaCrudChainWrapper<T, V> findInSetIfPresent(Object value, SFunction<T, ?> column) {
return findInSet(value != null, value, column);
}
/**
* 获取当前 Wrapper。
*
* @return this
*/
public LambdaCrudChainWrapper<T, V> build() {
return typedThis;
}
/**
* 查询实体列表。
*
* @return 实体列表
*/
public List<T> list() {
return baseMapper.selectList(typedThis);
}
/**
* 查询实体分页记录。
*
* @param page 分页条件
* @return 实体分页记录
*/
public List<T> list(IPage<T> page) {
return baseMapper.selectList(page, typedThis);
}
/**
* 查询 VO 列表。
*
* @return VO 列表
*/
public List<V> voList() {
return baseMapper.selectVoList(typedThis);
}
/**
* 查询单列对象列表。
*
* @return 单列对象列表
*/
public List<Object> objs() {
return baseMapper.selectObjs(typedThis);
}
/**
* 查询单列对象列表并转换类型。
*
* @param mapper 转换函数
* @param <C> 转换后的类型
* @return 单列对象列表
*/
public <C> List<C> objs(Function<? super Object, C> mapper) {
return baseMapper.selectObjs(typedThis, mapper);
}
/**
* 查询单个实体。
*
* @return 实体
*/
public T one() {
return baseMapper.selectOne(typedThis);
}
/**
* 查询单个实体。
*
* @param throwEx 查询到多条时是否抛异常
* @return 实体
*/
public T one(boolean throwEx) {
return baseMapper.selectOne(typedThis, throwEx);
}
/**
* 查询单个实体 Optional。
*
* @return Optional 实体
*/
public Optional<T> oneOpt() {
return Optional.ofNullable(one());
}
/**
* 查询单个 VO。
*
* @return VO
*/
public V voOne() {
return baseMapper.selectVoOne(typedThis);
}
/**
* 查询单个 VO。
*
* @param throwEx 查询到多条时是否抛异常
* @return VO
*/
public V voOne(boolean throwEx) {
return baseMapper.selectVoOne(typedThis, throwEx);
}
/**
* 查询数量。
*
* @return 数量
*/
public Long count() {
return baseMapper.selectCount(typedThis);
}
/**
* 判断是否存在。
*
* @return 是否存在
*/
public boolean exists() {
return baseMapper.exists(typedThis);
}
/**
* 查询实体分页。
*
* @param page 分页条件
* @param <P> 分页类型
* @return 实体分页
*/
public <P extends IPage<T>> P page(P page) {
return baseMapper.selectPage(page, typedThis);
}
/**
* 查询 VO 分页。
*
* @param page 分页条件
* @param <P> 分页类型
* @return VO 分页
*/
public <P extends IPage<V>> P voPage(IPage<T> page) {
return baseMapper.selectVoPage(page, typedThis);
}
/**
* 删除数据。
*
* @return 是否删除成功
*/
public boolean delete() {
return deleteCount() > 0;
}
/**
* 删除数据。
*
* @return 影响行数
*/
public int deleteCount() {
return baseMapper.delete(typedThis);
}
/**
* 使用 set 片段更新数据。
*
* @return 是否更新成功
*/
public boolean update() {
return updateCount() > 0;
}
/**
* 使用实体和查询条件更新数据。
*
* @param entity 实体
* @return 是否更新成功
*/
public boolean update(T entity) {
return updateCount(entity) > 0;
}
/**
* 使用 set 片段更新数据。
*
* @return 影响行数
*/
public int updateCount() {
return baseMapper.update(typedThis);
}
/**
* 使用实体和查询条件更新数据。
*
* @param entity 实体
* @return 影响行数
*/
public int updateCount(T entity) {
return baseMapper.update(entity, typedThis);
}
@Override
protected LambdaCrudChainWrapper<T, V> instance() {
return new LambdaCrudChainWrapper<>(baseMapper, getEntity(), getEntityClass(), null, null, paramNameSeq,
paramNameValuePairs, new MergeSegments(), paramAlias, SharedString.emptyString(), SharedString.emptyString(),
SharedString.emptyString());
}
@Override
public void clear() {
super.clear();
sqlSelect.toNull();
sqlSet.clear();
}
}
@@ -0,0 +1,422 @@
package org.dromara.common.mybatis.core.query;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.support.SFunction;
import java.util.Arrays;
import java.util.Collection;
import java.util.Map;
import java.util.function.BiPredicate;
import java.util.function.Consumer;
/**
* LambdaQueryWrapper 条件构造辅助类。
*
* @param <T> 实体类型
* @author Lion Li
*/
public final class LambdaQueryBuilder<T> implements LambdaQueryCondition<T, LambdaQueryBuilder<T>> {
private final LambdaQueryWrapper<T> wrapper;
LambdaQueryBuilder(LambdaQueryWrapper<T> wrapper) {
this.wrapper = wrapper;
}
@SafeVarargs
public final LambdaQueryBuilder<T> select(SFunction<T, ?>... columns) {
wrapper.select(columns);
return this;
}
public LambdaQueryBuilder<T> eq(SFunction<T, ?> column, Object value) {
wrapper.eq(column, value);
return this;
}
public LambdaQueryBuilder<T> eq(boolean condition, SFunction<T, ?> column, Object value) {
wrapper.eq(condition, column, value);
return this;
}
public LambdaQueryBuilder<T> ne(SFunction<T, ?> column, Object value) {
wrapper.ne(column, value);
return this;
}
public LambdaQueryBuilder<T> ne(boolean condition, SFunction<T, ?> column, Object value) {
wrapper.ne(condition, column, value);
return this;
}
public LambdaQueryBuilder<T> gt(SFunction<T, ?> column, Object value) {
wrapper.gt(column, value);
return this;
}
public LambdaQueryBuilder<T> gt(boolean condition, SFunction<T, ?> column, Object value) {
wrapper.gt(condition, column, value);
return this;
}
public LambdaQueryBuilder<T> ge(SFunction<T, ?> column, Object value) {
wrapper.ge(column, value);
return this;
}
public LambdaQueryBuilder<T> ge(boolean condition, SFunction<T, ?> column, Object value) {
wrapper.ge(condition, column, value);
return this;
}
public LambdaQueryBuilder<T> lt(SFunction<T, ?> column, Object value) {
wrapper.lt(column, value);
return this;
}
public LambdaQueryBuilder<T> lt(boolean condition, SFunction<T, ?> column, Object value) {
wrapper.lt(condition, column, value);
return this;
}
public LambdaQueryBuilder<T> le(SFunction<T, ?> column, Object value) {
wrapper.le(column, value);
return this;
}
public LambdaQueryBuilder<T> le(boolean condition, SFunction<T, ?> column, Object value) {
wrapper.le(condition, column, value);
return this;
}
public LambdaQueryBuilder<T> like(SFunction<T, ?> column, Object value) {
wrapper.like(column, value);
return this;
}
public LambdaQueryBuilder<T> like(boolean condition, SFunction<T, ?> column, Object value) {
wrapper.like(condition, column, value);
return this;
}
public LambdaQueryBuilder<T> notLike(SFunction<T, ?> column, Object value) {
wrapper.notLike(column, value);
return this;
}
public LambdaQueryBuilder<T> notLike(boolean condition, SFunction<T, ?> column, Object value) {
wrapper.notLike(condition, column, value);
return this;
}
public LambdaQueryBuilder<T> likeLeft(SFunction<T, ?> column, Object value) {
wrapper.likeLeft(column, value);
return this;
}
public LambdaQueryBuilder<T> likeLeft(boolean condition, SFunction<T, ?> column, Object value) {
wrapper.likeLeft(condition, column, value);
return this;
}
public LambdaQueryBuilder<T> likeRight(SFunction<T, ?> column, Object value) {
wrapper.likeRight(column, value);
return this;
}
public LambdaQueryBuilder<T> likeRight(boolean condition, SFunction<T, ?> column, Object value) {
wrapper.likeRight(condition, column, value);
return this;
}
public LambdaQueryBuilder<T> between(SFunction<T, ?> column, Object begin, Object end) {
wrapper.between(column, begin, end);
return this;
}
public LambdaQueryBuilder<T> between(boolean condition, SFunction<T, ?> column, Object begin, Object end) {
wrapper.between(condition, column, begin, end);
return this;
}
public LambdaQueryBuilder<T> notBetween(SFunction<T, ?> column, Object begin, Object end) {
wrapper.notBetween(column, begin, end);
return this;
}
public LambdaQueryBuilder<T> notBetween(boolean condition, SFunction<T, ?> column, Object begin, Object end) {
wrapper.notBetween(condition, column, begin, end);
return this;
}
public LambdaQueryBuilder<T> allEq(Map<?, ?> params, boolean null2IsNull) {
wrapper.allEq(true, (Map) params, null2IsNull);
return this;
}
public LambdaQueryBuilder<T> allEq(boolean condition, Map<?, ?> params, boolean null2IsNull) {
wrapper.allEq(condition, (Map) params, null2IsNull);
return this;
}
public LambdaQueryBuilder<T> allEq(BiPredicate<SFunction<T, ?>, Object> filter, Map<?, ?> params, boolean null2IsNull) {
wrapper.allEq(true, (BiPredicate) filter, (Map) params, null2IsNull);
return this;
}
public LambdaQueryBuilder<T> allEq(boolean condition, BiPredicate<SFunction<T, ?>, Object> filter, Map<?, ?> params, boolean null2IsNull) {
wrapper.allEq(condition, (BiPredicate) filter, (Map) params, null2IsNull);
return this;
}
public LambdaQueryBuilder<T> isNull(SFunction<T, ?> column) {
wrapper.isNull(column);
return this;
}
public LambdaQueryBuilder<T> isNull(boolean condition, SFunction<T, ?> column) {
wrapper.isNull(condition, column);
return this;
}
public LambdaQueryBuilder<T> isNotNull(SFunction<T, ?> column) {
wrapper.isNotNull(column);
return this;
}
public LambdaQueryBuilder<T> isNotNull(boolean condition, SFunction<T, ?> column) {
wrapper.isNotNull(condition, column);
return this;
}
public LambdaQueryBuilder<T> in(SFunction<T, ?> column, Collection<?> values) {
wrapper.in(column, values);
return this;
}
public LambdaQueryBuilder<T> in(boolean condition, SFunction<T, ?> column, Collection<?> values) {
wrapper.in(condition, column, values);
return this;
}
public LambdaQueryBuilder<T> in(SFunction<T, ?> column, Object... values) {
wrapper.in(column, values);
return this;
}
public LambdaQueryBuilder<T> in(boolean condition, SFunction<T, ?> column, Object... values) {
wrapper.in(condition, column, values);
return this;
}
public LambdaQueryBuilder<T> notIn(SFunction<T, ?> column, Collection<?> values) {
wrapper.notIn(column, values);
return this;
}
public LambdaQueryBuilder<T> notIn(boolean condition, SFunction<T, ?> column, Collection<?> values) {
wrapper.notIn(condition, column, values);
return this;
}
public LambdaQueryBuilder<T> notIn(SFunction<T, ?> column, Object... values) {
wrapper.notIn(column, values);
return this;
}
public LambdaQueryBuilder<T> notIn(boolean condition, SFunction<T, ?> column, Object... values) {
wrapper.notIn(condition, column, values);
return this;
}
@SafeVarargs
public final LambdaQueryBuilder<T> groupBy(SFunction<T, ?>... columns) {
wrapper.groupBy(Arrays.asList(columns));
return this;
}
@SafeVarargs
public final LambdaQueryBuilder<T> groupBy(boolean condition, SFunction<T, ?>... columns) {
wrapper.groupBy(condition, Arrays.asList(columns));
return this;
}
public LambdaQueryBuilder<T> orderBy(boolean condition, boolean isAsc, SFunction<T, ?> column) {
wrapper.orderBy(condition, isAsc, column);
return this;
}
@SafeVarargs
public final LambdaQueryBuilder<T> orderByAsc(SFunction<T, ?>... columns) {
wrapper.orderByAsc(Arrays.asList(columns));
return this;
}
@SafeVarargs
public final LambdaQueryBuilder<T> orderByAsc(boolean condition, SFunction<T, ?>... columns) {
wrapper.orderByAsc(condition, Arrays.asList(columns));
return this;
}
@SafeVarargs
public final LambdaQueryBuilder<T> orderByDesc(SFunction<T, ?>... columns) {
wrapper.orderByDesc(Arrays.asList(columns));
return this;
}
@SafeVarargs
public final LambdaQueryBuilder<T> orderByDesc(boolean condition, SFunction<T, ?>... columns) {
wrapper.orderByDesc(condition, Arrays.asList(columns));
return this;
}
public LambdaQueryBuilder<T> having(String sqlHaving, Object... params) {
wrapper.having(sqlHaving, params);
return this;
}
public LambdaQueryBuilder<T> having(boolean condition, String sqlHaving, Object... params) {
wrapper.having(condition, sqlHaving, params);
return this;
}
public LambdaQueryBuilder<T> and(Consumer<LambdaQueryWrapper<T>> consumer) {
wrapper.and(consumer);
return this;
}
public LambdaQueryBuilder<T> and(boolean condition, Consumer<LambdaQueryWrapper<T>> consumer) {
wrapper.and(condition, consumer);
return this;
}
public LambdaQueryBuilder<T> or() {
wrapper.or();
return this;
}
public LambdaQueryBuilder<T> or(Consumer<LambdaQueryWrapper<T>> consumer) {
wrapper.or(consumer);
return this;
}
public LambdaQueryBuilder<T> or(boolean condition, Consumer<LambdaQueryWrapper<T>> consumer) {
wrapper.or(condition, consumer);
return this;
}
public LambdaQueryBuilder<T> nested(Consumer<LambdaQueryWrapper<T>> consumer) {
wrapper.nested(consumer);
return this;
}
public LambdaQueryBuilder<T> nested(boolean condition, Consumer<LambdaQueryWrapper<T>> consumer) {
wrapper.nested(condition, consumer);
return this;
}
public LambdaQueryBuilder<T> exists(String existsSql, Object... values) {
wrapper.exists(existsSql, values);
return this;
}
public LambdaQueryBuilder<T> exists(boolean condition, String existsSql, Object... values) {
wrapper.exists(condition, existsSql, values);
return this;
}
public LambdaQueryBuilder<T> eqSql(SFunction<T, ?> column, String inValue) {
wrapper.eqSql(true, column, inValue);
return this;
}
public LambdaQueryBuilder<T> eqSql(boolean condition, SFunction<T, ?> column, String inValue) {
wrapper.eqSql(condition, column, inValue);
return this;
}
public LambdaQueryBuilder<T> inSql(SFunction<T, ?> column, String inValue) {
wrapper.inSql(true, column, inValue);
return this;
}
public LambdaQueryBuilder<T> inSql(boolean condition, SFunction<T, ?> column, String inValue) {
wrapper.inSql(condition, column, inValue);
return this;
}
public LambdaQueryBuilder<T> notInSql(SFunction<T, ?> column, String inValue) {
wrapper.notInSql(true, column, inValue);
return this;
}
public LambdaQueryBuilder<T> notInSql(boolean condition, SFunction<T, ?> column, String inValue) {
wrapper.notInSql(condition, column, inValue);
return this;
}
public LambdaQueryBuilder<T> notExists(String existsSql, Object... values) {
wrapper.notExists(existsSql, values);
return this;
}
public LambdaQueryBuilder<T> notExists(boolean condition, String existsSql, Object... values) {
wrapper.notExists(condition, existsSql, values);
return this;
}
public LambdaQueryBuilder<T> apply(String applySql, Object... values) {
wrapper.apply(applySql, values);
return this;
}
public LambdaQueryBuilder<T> apply(boolean condition, String applySql, Object... values) {
wrapper.apply(condition, applySql, values);
return this;
}
public LambdaQueryBuilder<T> apply(Consumer<LambdaQueryWrapper<T>> consumer) {
consumer.accept(wrapper);
return this;
}
public LambdaQueryBuilder<T> func(Consumer<LambdaQueryWrapper<T>> consumer) {
wrapper.func(true, consumer);
return this;
}
public LambdaQueryBuilder<T> func(boolean condition, Consumer<LambdaQueryWrapper<T>> consumer) {
wrapper.func(condition, consumer);
return this;
}
public LambdaQueryBuilder<T> not(Consumer<LambdaQueryWrapper<T>> consumer) {
wrapper.not(true, consumer);
return this;
}
public LambdaQueryBuilder<T> not(boolean condition, Consumer<LambdaQueryWrapper<T>> consumer) {
wrapper.not(condition, consumer);
return this;
}
public LambdaQueryBuilder<T> comment(String comment) {
wrapper.comment(true, comment);
return this;
}
public LambdaQueryBuilder<T> comment(boolean condition, String comment) {
wrapper.comment(condition, comment);
return this;
}
public LambdaQueryBuilder<T> last(String lastSql) {
wrapper.last(lastSql);
return this;
}
public LambdaQueryWrapper<T> build() {
return wrapper;
}
}
@@ -0,0 +1,146 @@
package org.dromara.common.mybatis.core.query;
import com.baomidou.mybatisplus.core.toolkit.support.SFunction;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.helper.DataBaseHelper;
import java.util.Collection;
import java.util.Map;
/**
* Lambda 查询常用条件扩展。
*
* @param <T> 实体类型
* @param <Children> 链式返回类型
* @author Lion Li
*/
public interface LambdaQueryCondition<T, Children> {
Children eq(boolean condition, SFunction<T, ?> column, Object value);
Children ne(boolean condition, SFunction<T, ?> column, Object value);
Children gt(boolean condition, SFunction<T, ?> column, Object value);
Children ge(boolean condition, SFunction<T, ?> column, Object value);
Children lt(boolean condition, SFunction<T, ?> column, Object value);
Children le(boolean condition, SFunction<T, ?> column, Object value);
Children like(boolean condition, SFunction<T, ?> column, Object value);
Children notLike(boolean condition, SFunction<T, ?> column, Object value);
Children likeLeft(boolean condition, SFunction<T, ?> column, Object value);
Children likeRight(boolean condition, SFunction<T, ?> column, Object value);
Children between(boolean condition, SFunction<T, ?> column, Object begin, Object end);
Children notBetween(boolean condition, SFunction<T, ?> column, Object begin, Object end);
Children in(boolean condition, SFunction<T, ?> column, Collection<?> values);
Children in(boolean condition, SFunction<T, ?> column, Object... values);
Children notIn(boolean condition, SFunction<T, ?> column, Collection<?> values);
Children notIn(boolean condition, SFunction<T, ?> column, Object... values);
Children apply(boolean condition, String applySql, Object... values);
default Children eqIfPresent(SFunction<T, ?> column, Object value) {
return eq(value != null, column, value);
}
default Children eqIfText(SFunction<T, ?> column, String value) {
return eq(StringUtils.isNotBlank(value), column, value);
}
default Children neIfPresent(SFunction<T, ?> column, Object value) {
return ne(value != null, column, value);
}
default Children neIfText(SFunction<T, ?> column, String value) {
return ne(StringUtils.isNotBlank(value), column, value);
}
default Children gtIfPresent(SFunction<T, ?> column, Object value) {
return gt(value != null, column, value);
}
default Children geIfPresent(SFunction<T, ?> column, Object value) {
return ge(value != null, column, value);
}
default Children ltIfPresent(SFunction<T, ?> column, Object value) {
return lt(value != null, column, value);
}
default Children leIfPresent(SFunction<T, ?> column, Object value) {
return le(value != null, column, value);
}
default Children likeIfText(SFunction<T, ?> column, String value) {
return like(StringUtils.isNotBlank(value), column, value);
}
default Children notLikeIfText(SFunction<T, ?> column, String value) {
return notLike(StringUtils.isNotBlank(value), column, value);
}
default Children likeLeftIfText(SFunction<T, ?> column, String value) {
return likeLeft(StringUtils.isNotBlank(value), column, value);
}
default Children likeRightIfText(SFunction<T, ?> column, String value) {
return likeRight(StringUtils.isNotBlank(value), column, value);
}
default Children betweenIfPresent(SFunction<T, ?> column, Object begin, Object end) {
return between(begin != null && end != null, column, begin, end);
}
default Children betweenParams(SFunction<T, ?> column, Map<String, Object> params, String beginKey, String endKey) {
if (params == null) {
return between(false, column, null, null);
}
Object begin = params.get(beginKey);
Object end = params.get(endKey);
return between(begin != null && end != null, column, begin, end);
}
default Children notBetweenIfPresent(SFunction<T, ?> column, Object begin, Object end) {
return notBetween(begin != null && end != null, column, begin, end);
}
default Children inIfNotEmpty(SFunction<T, ?> column, Collection<?> values) {
return in(values != null && !values.isEmpty(), column, values);
}
default Children inIfNotEmpty(SFunction<T, ?> column, Object... values) {
return in(values != null && values.length > 0, column, values);
}
default Children notInIfNotEmpty(SFunction<T, ?> column, Collection<?> values) {
return notIn(values != null && !values.isEmpty(), column, values);
}
default Children notInIfNotEmpty(SFunction<T, ?> column, Object... values) {
return notIn(values != null && values.length > 0, column, values);
}
default Children findInSet(Object value, String column) {
return findInSet(true, value, column);
}
default Children findInSet(boolean condition, Object value, String column) {
return apply(condition, DataBaseHelper.findInSet(value, column));
}
default Children findInSetIfPresent(Object value, String column) {
return findInSet(value != null, value, column);
}
}
@@ -0,0 +1,19 @@
package org.dromara.common.mybatis.core.query;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
/**
* MyBatis-Plus 查询构造器入口。
*
* @author Lion Li
*/
public final class QueryBuilder {
private QueryBuilder() {
}
public static <T> LambdaQueryBuilder<T> lambda(Class<T> entityClass) {
return new LambdaQueryBuilder<>(Wrappers.lambdaQuery(entityClass));
}
}
@@ -1,11 +1,10 @@
package org.dromara.demo.controller; package org.dromara.demo.controller;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import lombok.RequiredArgsConstructor;
import org.dromara.common.core.domain.R; import org.dromara.common.core.domain.R;
import org.dromara.common.web.core.BaseController; import org.dromara.common.web.core.BaseController;
import org.dromara.demo.domain.TestDemo; import org.dromara.demo.domain.TestDemo;
import org.dromara.demo.mapper.TestDemoMapper; import org.dromara.demo.mapper.TestDemoMapper;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
@@ -83,8 +82,9 @@ public class TestBatchController extends BaseController {
@DeleteMapping() @DeleteMapping()
// @DS("slave") // @DS("slave")
public R<Void> remove() { public R<Void> remove() {
return toAjax(testDemoMapper.delete(new LambdaQueryWrapper<TestDemo>() return toAjax(testDemoMapper.lambda()
.eq(TestDemo::getOrderNum, -1L))); .eq(TestDemo::getOrderNum, -1L)
.deleteCount());
} }
} }
@@ -8,7 +8,6 @@ import cn.hutool.core.lang.Dict;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import com.baomidou.dynamic.datasource.annotation.DS; import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.dynamic.datasource.annotation.DSTransactional; import com.baomidou.dynamic.datasource.annotation.DSTransactional;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -66,9 +65,10 @@ public class GenTableServiceImpl implements IGenTableService {
*/ */
@Override @Override
public List<GenTableColumn> selectGenTableColumnListByTableId(Long tableId) { public List<GenTableColumn> selectGenTableColumnListByTableId(Long tableId) {
return genTableColumnMapper.selectList(new LambdaQueryWrapper<GenTableColumn>() return genTableColumnMapper.lambda()
.eq(GenTableColumn::getTableId, tableId) .eq(GenTableColumn::getTableId, tableId)
.orderByAsc(GenTableColumn::getSort)); .orderByAsc(GenTableColumn::getSort)
.list();
} }
/** /**
@@ -246,7 +246,9 @@ public class GenTableServiceImpl implements IGenTableService {
public void deleteGenTableByIds(Long[] tableIds) { public void deleteGenTableByIds(Long[] tableIds) {
List<Long> ids = Arrays.asList(tableIds); List<Long> ids = Arrays.asList(tableIds);
baseMapper.deleteByIds(ids); baseMapper.deleteByIds(ids);
genTableColumnMapper.delete(new LambdaQueryWrapper<GenTableColumn>().in(GenTableColumn::getTableId, ids)); genTableColumnMapper.lambda()
.in(GenTableColumn::getTableId, ids)
.deleteCount();
} }
/** /**
@@ -551,10 +553,11 @@ public class GenTableServiceImpl implements IGenTableService {
return tables; return tables;
} }
List<Long> tableIds = StreamUtils.toList(tables, GenTable::getTableId); List<Long> tableIds = StreamUtils.toList(tables, GenTable::getTableId);
List<GenTableColumn> columns = genTableColumnMapper.selectList(new LambdaQueryWrapper<GenTableColumn>() List<GenTableColumn> columns = genTableColumnMapper.lambda()
.in(GenTableColumn::getTableId, tableIds) .in(GenTableColumn::getTableId, tableIds)
.orderByAsc(GenTableColumn::getTableId) .orderByAsc(GenTableColumn::getTableId)
.orderByAsc(GenTableColumn::getSort)); .orderByAsc(GenTableColumn::getSort)
.list();
Map<Long, List<GenTableColumn>> columnMap = StreamUtils.groupByKey(columns, GenTableColumn::getTableId); Map<Long, List<GenTableColumn>> columnMap = StreamUtils.groupByKey(columns, GenTableColumn::getTableId);
tables.forEach(table -> table.setColumns(columnMap.getOrDefault(table.getTableId(), new ArrayList<>()))); tables.forEach(table -> table.setColumns(columnMap.getOrDefault(table.getTableId(), new ArrayList<>())));
return tables; return tables;
@@ -8,11 +8,11 @@ import org.dromara.common.core.domain.PageResult;
import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.PageQuery;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
#end #end
#if($enableStatus || $enableSort)
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
#end
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
#if($enableUnique)
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
#end
import org.dromara.common.mybatis.core.query.QueryBuilder;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@@ -134,7 +134,7 @@ public class ${ClassName}ServiceImpl implements I${ClassName}Service {
#if($hasBetween) #if($hasBetween)
Map<String, Object> params = bo.getParams(); Map<String, Object> params = bo.getParams();
#end #end
LambdaQueryWrapper<${ClassName}> lqw = Wrappers.lambdaQuery(); return QueryBuilder.lambda(${ClassName}.class)
#foreach($column in $columns) #foreach($column in $columns)
#if($column.query) #if($column.query)
#set($queryType=$column.queryType) #set($queryType=$column.queryType)
@@ -144,29 +144,47 @@ public class ${ClassName}ServiceImpl implements I${ClassName}Service {
#if($queryType != 'BETWEEN') #if($queryType != 'BETWEEN')
#if($javaType == 'String') #if($javaType == 'String')
#set($condition='StringUtils.isNotBlank(bo.get'+$AttrName+'())') #set($condition='StringUtils.isNotBlank(bo.get'+$AttrName+'())')
#if($queryType == 'LIKE')
.likeIfText(${ClassName}::get$AttrName, bo.get$AttrName())
#elseif($queryType == 'EQ')
.eqIfText(${ClassName}::get$AttrName, bo.get$AttrName())
#elseif($queryType == 'NE')
.neIfText(${ClassName}::get$AttrName, bo.get$AttrName())
#else
.$mpMethod($condition, ${ClassName}::get$AttrName, bo.get$AttrName())
#end
#else #else
#set($condition='bo.get'+$AttrName+'() != null') #set($condition='bo.get'+$AttrName+'() != null')
#end #if($queryType == 'EQ')
lqw.$mpMethod($condition, ${ClassName}::get$AttrName, bo.get$AttrName()); .eqIfPresent(${ClassName}::get$AttrName, bo.get$AttrName())
#elseif($queryType == 'NE')
.neIfPresent(${ClassName}::get$AttrName, bo.get$AttrName())
#elseif($queryType == 'GT')
.gtIfPresent(${ClassName}::get$AttrName, bo.get$AttrName())
#elseif($queryType == 'LT')
.ltIfPresent(${ClassName}::get$AttrName, bo.get$AttrName())
#else #else
lqw.between(params.get("begin$AttrName") != null && params.get("end$AttrName") != null, .$mpMethod($condition, ${ClassName}::get$AttrName, bo.get$AttrName())
${ClassName}::get$AttrName, params.get("begin$AttrName"), params.get("end$AttrName")); #end
#end
#else
.betweenParams(${ClassName}::get$AttrName, params, "begin$AttrName", "end$AttrName")
#end #end
#end #end
#end #end
#if($table.tree && "" != $treeAncestorsField) #if($table.tree && "" != $treeAncestorsField)
lqw.orderByAsc(${ClassName}::get${TreeAncestorsCap}); .orderByAsc(${ClassName}::get${TreeAncestorsCap})
#end #end
#if($table.tree && "" != $treeParentCode) #if($table.tree && "" != $treeParentCode)
lqw.orderByAsc(${ClassName}::get${TreeParentCap}); .orderByAsc(${ClassName}::get${TreeParentCap})
#end #end
#if($table.tree && "" != $treeOrderField) #if($table.tree && "" != $treeOrderField)
lqw.orderByAsc(${ClassName}::get${TreeOrderCap}); .orderByAsc(${ClassName}::get${TreeOrderCap})
#elseif($enableSort) #elseif($enableSort)
lqw.orderByAsc(${ClassName}::get${sortColumn.capJavaField}); .orderByAsc(${ClassName}::get${sortColumn.capJavaField})
#end #end
lqw.orderByAsc(${ClassName}::get${pkColumn.capJavaField}); .orderByAsc(${ClassName}::get${pkColumn.capJavaField})
return lqw; .build();
} }
/** /**
@@ -215,9 +233,10 @@ public class ${ClassName}ServiceImpl implements I${ClassName}Service {
*/ */
@Override @Override
public Boolean updateStatus(${pkColumn.javaType} ${pkColumn.javaField}, ${statusColumn.javaType} status) { public Boolean updateStatus(${pkColumn.javaType} ${pkColumn.javaField}, ${statusColumn.javaType} status) {
return baseMapper.update(null, new LambdaUpdateWrapper<${ClassName}>() return baseMapper.lambda()
.set(${ClassName}::get${statusColumn.capJavaField}, status) .set(${ClassName}::get${statusColumn.capJavaField}, status)
.eq(${ClassName}::get${pkColumn.capJavaField}, ${pkColumn.javaField})) > 0; .eq(${ClassName}::get${pkColumn.capJavaField}, ${pkColumn.javaField})
.update();
} }
#end #end
@@ -231,9 +250,10 @@ public class ${ClassName}ServiceImpl implements I${ClassName}Service {
*/ */
@Override @Override
public Boolean updateSort(${pkColumn.javaType} ${pkColumn.javaField}, ${sortColumn.javaType} sortValue) { public Boolean updateSort(${pkColumn.javaType} ${pkColumn.javaField}, ${sortColumn.javaType} sortValue) {
return baseMapper.update(null, new LambdaUpdateWrapper<${ClassName}>() return baseMapper.lambda()
.set(${ClassName}::get${sortColumn.capJavaField}, sortValue) .set(${ClassName}::get${sortColumn.capJavaField}, sortValue)
.eq(${ClassName}::get${pkColumn.capJavaField}, ${pkColumn.javaField})) > 0; .eq(${ClassName}::get${pkColumn.capJavaField}, ${pkColumn.javaField})
.update();
} }
#end #end
@@ -296,12 +316,14 @@ public class ${ClassName}ServiceImpl implements I${ClassName}Service {
} }
private void updateChildrenAncestors(${pkColumn.javaType} currentId, String newAncestors, String oldAncestors) { private void updateChildrenAncestors(${pkColumn.javaType} currentId, String newAncestors, String oldAncestors) {
List<${ClassName}> children = baseMapper.selectList(new LambdaQueryWrapper<${ClassName}>() List<${ClassName}> children = baseMapper.lambda()
.select(${ClassName}::get${pkColumn.capJavaField}, ${ClassName}::get${TreeAncestorsCap}())); .select(${ClassName}::get${pkColumn.capJavaField}, ${ClassName}::get${TreeAncestorsCap})
.findInSet(currentId, ${ClassName}::get${TreeAncestorsCap})
.list();
List<${ClassName}> updateList = new ArrayList<>(); List<${ClassName}> updateList = new ArrayList<>();
for (${ClassName} child : children) { for (${ClassName} child : children) {
String ancestors = child.get${TreeAncestorsCap}(); String ancestors = child.get${TreeAncestorsCap}();
if (StringUtils.isBlank(ancestors) || !containsAncestor(ancestors, currentId)) { if (StringUtils.isBlank(ancestors)) {
continue; continue;
} }
${ClassName} update = new ${ClassName}(); ${ClassName} update = new ${ClassName}();
@@ -1,7 +1,6 @@
package org.dromara.system.mapper; package org.dromara.system.mapper;
import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.github.yulichang.base.MPJBaseMapper; import com.github.yulichang.base.MPJBaseMapper;
import com.github.yulichang.toolkit.JoinWrappers; import com.github.yulichang.toolkit.JoinWrappers;
@@ -9,7 +8,6 @@ import org.dromara.common.core.utils.StreamUtils;
import org.dromara.common.mybatis.annotation.DataColumn; import org.dromara.common.mybatis.annotation.DataColumn;
import org.dromara.common.mybatis.annotation.DataPermission; import org.dromara.common.mybatis.annotation.DataPermission;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
import org.dromara.common.mybatis.helper.DataBaseHelper;
import org.dromara.system.domain.SysDept; import org.dromara.system.domain.SysDept;
import org.dromara.system.domain.SysRole; import org.dromara.system.domain.SysRole;
import org.dromara.system.domain.SysRoleDept; import org.dromara.system.domain.SysRoleDept;
@@ -66,7 +64,7 @@ public interface SysDeptMapper extends BaseMapperPlus<SysDept, SysDeptVo>, MPJBa
@DataColumn(key = "deptName", value = "dept_id") @DataColumn(key = "deptName", value = "dept_id")
}) })
default long countDeptById(Long deptId) { default long countDeptById(Long deptId) {
return this.selectCount(new LambdaQueryWrapper<SysDept>().eq(SysDept::getDeptId, deptId)); return this.lambda().eq(SysDept::getDeptId, deptId).count();
} }
/** /**
@@ -76,9 +74,10 @@ public interface SysDeptMapper extends BaseMapperPlus<SysDept, SysDeptVo>, MPJBa
* @return 包含子部门的列表 * @return 包含子部门的列表
*/ */
default List<SysDept> selectListByParentId(Long parentId) { default List<SysDept> selectListByParentId(Long parentId) {
return this.selectList(new LambdaQueryWrapper<SysDept>() return this.lambda()
.select(SysDept::getDeptId) .select(SysDept::getDeptId)
.apply(DataBaseHelper.findInSet(parentId, "ancestors"))); .findInSet(parentId, SysDept::getAncestors)
.list();
} }
/** /**
@@ -1,6 +1,5 @@
package org.dromara.system.mapper; package org.dromara.system.mapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
import org.dromara.system.domain.SysDictData; import org.dromara.system.domain.SysDictData;
import org.dromara.system.domain.vo.SysDictDataVo; import org.dromara.system.domain.vo.SysDictDataVo;
@@ -21,9 +20,9 @@ public interface SysDictDataMapper extends BaseMapperPlus<SysDictData, SysDictDa
* @return 符合条件的字典数据列表 * @return 符合条件的字典数据列表
*/ */
default List<SysDictDataVo> selectDictDataByType(String dictType) { default List<SysDictDataVo> selectDictDataByType(String dictType) {
return selectVoList( return this.lambda()
new LambdaQueryWrapper<SysDictData>() .eq(SysDictData::getDictType, dictType)
.eq(SysDictData::getDictType, dictType) .orderByAsc(SysDictData::getDictSort)
.orderByAsc(SysDictData::getDictSort)); .voList();
} }
} }
@@ -1,7 +1,6 @@
package org.dromara.system.mapper; package org.dromara.system.mapper;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.github.yulichang.base.MPJBaseMapper; import com.github.yulichang.base.MPJBaseMapper;
import com.github.yulichang.toolkit.JoinWrappers; import com.github.yulichang.toolkit.JoinWrappers;
import org.dromara.common.core.constant.SystemConstants; import org.dromara.common.core.constant.SystemConstants;
@@ -97,12 +96,12 @@ public interface SysMenuMapper extends BaseMapperPlus<SysMenu, SysMenuVo>, MPJBa
* @return 菜单列表 * @return 菜单列表
*/ */
default List<SysMenu> selectMenuTreeAll() { default List<SysMenu> selectMenuTreeAll() {
LambdaQueryWrapper<SysMenu> lqw = new LambdaQueryWrapper<SysMenu>() return this.lambda()
.in(SysMenu::getMenuType, SystemConstants.TYPE_DIR, SystemConstants.TYPE_MENU) .in(SysMenu::getMenuType, SystemConstants.TYPE_DIR, SystemConstants.TYPE_MENU)
.eq(SysMenu::getStatus, SystemConstants.NORMAL) .eq(SysMenu::getStatus, SystemConstants.NORMAL)
.orderByAsc(SysMenu::getParentId) .orderByAsc(SysMenu::getParentId)
.orderByAsc(SysMenu::getOrderNum); .orderByAsc(SysMenu::getOrderNum)
return this.selectList(lqw); .list();
} }
/** /**
@@ -1,7 +1,6 @@
package org.dromara.system.mapper; package org.dromara.system.mapper;
import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.github.yulichang.base.MPJBaseMapper; import com.github.yulichang.base.MPJBaseMapper;
import com.github.yulichang.toolkit.JoinWrappers; import com.github.yulichang.toolkit.JoinWrappers;
@@ -62,7 +61,7 @@ public interface SysPostMapper extends BaseMapperPlus<SysPost, SysPostVo>, MPJBa
@DataColumn(key = "userName", value = "create_by") @DataColumn(key = "userName", value = "create_by")
}) })
default long selectPostCount(Collection<Long> postIds) { default long selectPostCount(Collection<Long> postIds) {
return this.selectCount(new LambdaQueryWrapper<SysPost>().in(SysPost::getPostId, postIds)); return this.lambda().in(SysPost::getPostId, postIds).count();
} }
/** /**
@@ -1,7 +1,6 @@
package org.dromara.system.mapper; package org.dromara.system.mapper;
import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Constants; import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.github.yulichang.base.MPJBaseMapper; import com.github.yulichang.base.MPJBaseMapper;
@@ -64,7 +63,7 @@ public interface SysRoleMapper extends BaseMapperPlus<SysRole, SysRoleVo>, MPJBa
@DataColumn(key = "userName", value = "create_by") @DataColumn(key = "userName", value = "create_by")
}) })
default long selectRoleCount(Collection<Long> roleIds) { default long selectRoleCount(Collection<Long> roleIds) {
return this.selectCount(new LambdaQueryWrapper<SysRole>().in(SysRole::getRoleId, roleIds)); return this.lambda().in(SysRole::getRoleId, roleIds).count();
} }
/** /**
@@ -1,6 +1,5 @@
package org.dromara.system.mapper; package org.dromara.system.mapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
import org.dromara.system.domain.SysRoleMenu; import org.dromara.system.domain.SysRoleMenu;
@@ -20,7 +19,7 @@ public interface SysRoleMenuMapper extends BaseMapperPlus<SysRoleMenu, SysRoleMe
* @return 结果 * @return 结果
*/ */
default int deleteByMenuIds(Collection<Long> menuIds) { default int deleteByMenuIds(Collection<Long> menuIds) {
return this.delete(new LambdaUpdateWrapper<SysRoleMenu>().in(SysRoleMenu::getMenuId, menuIds)); return this.lambda().in(SysRoleMenu::getMenuId, menuIds).deleteCount();
} }
} }
@@ -1,7 +1,6 @@
package org.dromara.system.mapper; package org.dromara.system.mapper;
import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Constants; import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.github.yulichang.base.MPJBaseMapper; import com.github.yulichang.base.MPJBaseMapper;
@@ -136,7 +135,7 @@ public interface SysUserMapper extends BaseMapperPlus<SysUser, SysUserVo>, MPJBa
@DataColumn(key = "userName", value = "create_by") @DataColumn(key = "userName", value = "create_by")
}) })
default long countUserById(Long userId) { default long countUserById(Long userId) {
return this.selectCount(new LambdaQueryWrapper<SysUser>().eq(SysUser::getUserId, userId)); return lambda().eq(SysUser::getUserId, userId).count();
} }
/** /**
@@ -1,6 +1,6 @@
package org.dromara.system.mapper; package org.dromara.system.mapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import cn.hutool.core.convert.Convert;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
import org.dromara.system.domain.SysUserRole; import org.dromara.system.domain.SysUserRole;
@@ -20,9 +20,10 @@ public interface SysUserRoleMapper extends BaseMapperPlus<SysUserRole, SysUserRo
* @return 关联到指定角色的用户ID列表 * @return 关联到指定角色的用户ID列表
*/ */
default List<Long> selectUserIdsByRoleId(Long roleId) { default List<Long> selectUserIdsByRoleId(Long roleId) {
return this.selectObjs(new LambdaQueryWrapper<SysUserRole>() return this.lambda()
.select(SysUserRole::getUserId).eq(SysUserRole::getRoleId, roleId) .select(SysUserRole::getUserId)
); .eq(SysUserRole::getRoleId, roleId)
.objs(Convert::toLong);
} }
} }
@@ -4,8 +4,6 @@ import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import cn.hutool.crypto.SecureUtil; import cn.hutool.crypto.SecureUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@@ -14,6 +12,7 @@ import org.dromara.common.core.domain.PageResult;
import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils; import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.query.QueryBuilder;
import org.dromara.system.domain.SysClient; import org.dromara.system.domain.SysClient;
import org.dromara.system.domain.bo.SysClientBo; import org.dromara.system.domain.bo.SysClientBo;
import org.dromara.system.domain.vo.SysClientVo; import org.dromara.system.domain.vo.SysClientVo;
@@ -64,7 +63,7 @@ public class SysClientServiceImpl implements ISysClientService {
@Cacheable(cacheNames = CacheNames.SYS_CLIENT, key = "#clientId") @Cacheable(cacheNames = CacheNames.SYS_CLIENT, key = "#clientId")
@Override @Override
public SysClientVo queryByClientId(String clientId) { public SysClientVo queryByClientId(String clientId) {
SysClientVo vo = baseMapper.selectVoOne(new LambdaQueryWrapper<SysClient>().eq(SysClient::getClientId, clientId)); SysClientVo vo = baseMapper.lambda().eq(SysClient::getClientId, clientId).voOne();
fillClientRuleFields(vo); fillClientRuleFields(vo);
return vo; return vo;
} }
@@ -105,13 +104,13 @@ public class SysClientServiceImpl implements ISysClientService {
* @return 包含 clientId、clientKey、状态等条件的查询包装器 * @return 包含 clientId、clientKey、状态等条件的查询包装器
*/ */
private LambdaQueryWrapper<SysClient> buildQueryWrapper(SysClientBo bo) { private LambdaQueryWrapper<SysClient> buildQueryWrapper(SysClientBo bo) {
LambdaQueryWrapper<SysClient> lqw = Wrappers.lambdaQuery(); return QueryBuilder.lambda(SysClient.class)
lqw.eq(StringUtils.isNotBlank(bo.getClientId()), SysClient::getClientId, bo.getClientId()); .eqIfText(SysClient::getClientId, bo.getClientId())
lqw.eq(StringUtils.isNotBlank(bo.getClientKey()), SysClient::getClientKey, bo.getClientKey()); .eqIfText(SysClient::getClientKey, bo.getClientKey())
lqw.eq(StringUtils.isNotBlank(bo.getClientSecret()), SysClient::getClientSecret, bo.getClientSecret()); .eqIfText(SysClient::getClientSecret, bo.getClientSecret())
lqw.eq(StringUtils.isNotBlank(bo.getStatus()), SysClient::getStatus, bo.getStatus()); .eqIfText(SysClient::getStatus, bo.getStatus())
lqw.orderByAsc(SysClient::getId); .orderByAsc(SysClient::getId)
return lqw; .build();
} }
/** /**
@@ -163,10 +162,10 @@ public class SysClientServiceImpl implements ISysClientService {
@CacheEvict(cacheNames = CacheNames.SYS_CLIENT, key = "#clientId") @CacheEvict(cacheNames = CacheNames.SYS_CLIENT, key = "#clientId")
@Override @Override
public int updateClientStatus(String clientId, String status) { public int updateClientStatus(String clientId, String status) {
return baseMapper.update(null, return baseMapper.lambda()
new LambdaUpdateWrapper<SysClient>() .set(SysClient::getStatus, status)
.set(SysClient::getStatus, status) .eq(SysClient::getClientId, clientId)
.eq(SysClient::getClientId, clientId)); .updateCount();
} }
/** /**
@@ -190,9 +189,10 @@ public class SysClientServiceImpl implements ISysClientService {
*/ */
@Override @Override
public boolean checkClickKeyUnique(SysClientBo client) { public boolean checkClickKeyUnique(SysClientBo client) {
boolean exist = baseMapper.exists(new LambdaQueryWrapper<SysClient>() boolean exist = baseMapper.lambda()
.eq(SysClient::getClientKey, client.getClientKey()) .eq(SysClient::getClientKey, client.getClientKey())
.ne(ObjectUtil.isNotNull(client.getId()), SysClient::getId, client.getId())); .neIfPresent(SysClient::getId, client.getId())
.exists();
return !exist; return !exist;
} }
@@ -4,7 +4,6 @@ import cn.hutool.core.convert.Convert;
import cn.hutool.core.lang.Dict; import cn.hutool.core.lang.Dict;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.dromara.common.core.constant.CacheNames; import org.dromara.common.core.constant.CacheNames;
@@ -17,6 +16,7 @@ import org.dromara.common.core.utils.SpringUtils;
import org.dromara.common.core.utils.StringUtils; import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.json.utils.JsonUtils; import org.dromara.common.json.utils.JsonUtils;
import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.query.QueryBuilder;
import org.dromara.common.redis.utils.CacheUtils; import org.dromara.common.redis.utils.CacheUtils;
import org.dromara.system.api.ConfigService; import org.dromara.system.api.ConfigService;
import org.dromara.system.domain.SysConfig; import org.dromara.system.domain.SysConfig;
@@ -77,8 +77,7 @@ public class SysConfigServiceImpl implements ISysConfigService, ConfigService {
@Cacheable(cacheNames = CacheNames.SYS_CONFIG, key = "#configKey") @Cacheable(cacheNames = CacheNames.SYS_CONFIG, key = "#configKey")
@Override @Override
public String selectConfigByKey(String configKey) { public String selectConfigByKey(String configKey) {
SysConfig retConfig = baseMapper.selectOne(new LambdaQueryWrapper<SysConfig>() SysConfig retConfig = baseMapper.lambda().eq(SysConfig::getConfigKey, configKey).one();
.eq(SysConfig::getConfigKey, configKey));
return ObjectUtils.notNullGetter(retConfig, SysConfig::getConfigValue, StringUtils.EMPTY); return ObjectUtils.notNullGetter(retConfig, SysConfig::getConfigValue, StringUtils.EMPTY);
} }
@@ -112,14 +111,13 @@ public class SysConfigServiceImpl implements ISysConfigService, ConfigService {
*/ */
private LambdaQueryWrapper<SysConfig> buildQueryWrapper(SysConfigBo bo) { private LambdaQueryWrapper<SysConfig> buildQueryWrapper(SysConfigBo bo) {
Map<String, Object> params = bo.getParams(); Map<String, Object> params = bo.getParams();
LambdaQueryWrapper<SysConfig> lqw = Wrappers.lambdaQuery(); return QueryBuilder.lambda(SysConfig.class)
lqw.like(StringUtils.isNotBlank(bo.getConfigName()), SysConfig::getConfigName, bo.getConfigName()); .likeIfText(SysConfig::getConfigName, bo.getConfigName())
lqw.eq(StringUtils.isNotBlank(bo.getConfigType()), SysConfig::getConfigType, bo.getConfigType()); .eqIfText(SysConfig::getConfigType, bo.getConfigType())
lqw.like(StringUtils.isNotBlank(bo.getConfigKey()), SysConfig::getConfigKey, bo.getConfigKey()); .likeIfText(SysConfig::getConfigKey, bo.getConfigKey())
lqw.between(params.get("beginTime") != null && params.get("endTime") != null, .betweenParams(SysConfig::getCreateTime, params, "beginTime", "endTime")
SysConfig::getCreateTime, params.get("beginTime"), params.get("endTime")); .orderByAsc(SysConfig::getConfigId)
lqw.orderByAsc(SysConfig::getConfigId); .build();
return lqw;
} }
/** /**
@@ -158,8 +156,9 @@ public class SysConfigServiceImpl implements ISysConfigService, ConfigService {
row = baseMapper.updateById(config); row = baseMapper.updateById(config);
} else { } else {
CacheUtils.evict(CacheNames.SYS_CONFIG, config.getConfigKey()); CacheUtils.evict(CacheNames.SYS_CONFIG, config.getConfigKey());
row = baseMapper.update(config, new LambdaQueryWrapper<SysConfig>() row = baseMapper.lambda()
.eq(SysConfig::getConfigKey, config.getConfigKey())); .eq(SysConfig::getConfigKey, config.getConfigKey())
.updateCount(config);
} }
if (row > 0) { if (row > 0) {
return config.getConfigValue(); return config.getConfigValue();
@@ -200,9 +199,10 @@ public class SysConfigServiceImpl implements ISysConfigService, ConfigService {
*/ */
@Override @Override
public boolean checkConfigKeyUnique(SysConfigBo config) { public boolean checkConfigKeyUnique(SysConfigBo config) {
boolean exist = baseMapper.exists(new LambdaQueryWrapper<SysConfig>() boolean exist = baseMapper.lambda()
.eq(SysConfig::getConfigKey, config.getConfigKey()) .eq(SysConfig::getConfigKey, config.getConfigKey())
.ne(ObjectUtil.isNotNull(config.getConfigId()), SysConfig::getConfigId, config.getConfigId())); .neIfPresent(SysConfig::getConfigId, config.getConfigId())
.exists();
return !exist; return !exist;
} }
@@ -3,7 +3,6 @@ package org.dromara.system.service.impl;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.convert.Convert; import cn.hutool.core.convert.Convert;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.dromara.common.core.constant.CacheNames; import org.dromara.common.core.constant.CacheNames;
import org.dromara.common.core.utils.StreamUtils; import org.dromara.common.core.utils.StreamUtils;
@@ -44,10 +43,10 @@ public class SysDataScopeServiceImpl implements ISysDataScopeService {
if (ObjectUtil.isNull(roleId)) { if (ObjectUtil.isNull(roleId)) {
return "-1"; return "-1";
} }
List<SysRoleDept> list = roleDeptMapper.selectList( List<SysRoleDept> list = roleDeptMapper.lambda()
new LambdaQueryWrapper<SysRoleDept>() .select(SysRoleDept::getDeptId)
.select(SysRoleDept::getDeptId) .eq(SysRoleDept::getRoleId, roleId)
.eq(SysRoleDept::getRoleId, roleId)); .list();
if (CollUtil.isNotEmpty(list)) { if (CollUtil.isNotEmpty(list)) {
return StreamUtils.join(list, rd -> Convert.toStr(rd.getDeptId())); return StreamUtils.join(list, rd -> Convert.toStr(rd.getDeptId()));
} }
@@ -6,8 +6,6 @@ import cn.hutool.core.convert.Convert;
import cn.hutool.core.lang.tree.Tree; import cn.hutool.core.lang.tree.Tree;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.dromara.common.core.constant.CacheNames; import org.dromara.common.core.constant.CacheNames;
@@ -16,7 +14,8 @@ import org.dromara.common.core.domain.PageResult;
import org.dromara.common.core.exception.ServiceException; import org.dromara.common.core.exception.ServiceException;
import org.dromara.common.core.utils.*; import org.dromara.common.core.utils.*;
import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.helper.DataBaseHelper; import org.dromara.common.mybatis.core.query.LambdaQueryBuilder;
import org.dromara.common.mybatis.core.query.QueryBuilder;
import org.dromara.common.redis.utils.CacheUtils; import org.dromara.common.redis.utils.CacheUtils;
import org.dromara.common.satoken.utils.LoginHelper; import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.system.api.DeptService; import org.dromara.system.api.DeptService;
@@ -97,27 +96,23 @@ public class SysDeptServiceImpl implements ISysDeptService, DeptService {
*/ */
private LambdaQueryWrapper<SysDept> buildQueryWrapper(SysDeptBo bo) { private LambdaQueryWrapper<SysDept> buildQueryWrapper(SysDeptBo bo) {
Map<String, Object> params = bo.getParams(); Map<String, Object> params = bo.getParams();
LambdaQueryWrapper<SysDept> lqw = Wrappers.lambdaQuery(); LambdaQueryBuilder<SysDept> builder = QueryBuilder.lambda(SysDept.class)
lqw.eq(SysDept::getDelFlag, SystemConstants.NORMAL); .eq(SysDept::getDelFlag, SystemConstants.NORMAL)
lqw.eq(ObjectUtil.isNotNull(bo.getDeptId()), SysDept::getDeptId, bo.getDeptId()); .eqIfPresent(SysDept::getDeptId, bo.getDeptId())
lqw.eq(ObjectUtil.isNotNull(bo.getParentId()), SysDept::getParentId, bo.getParentId()); .eqIfPresent(SysDept::getParentId, bo.getParentId())
lqw.like(StringUtils.isNotBlank(bo.getDeptName()), SysDept::getDeptName, bo.getDeptName()); .likeIfText(SysDept::getDeptName, bo.getDeptName())
lqw.like(StringUtils.isNotBlank(bo.getDeptCategory()), SysDept::getDeptCategory, bo.getDeptCategory()); .likeIfText(SysDept::getDeptCategory, bo.getDeptCategory())
lqw.eq(StringUtils.isNotBlank(bo.getStatus()), SysDept::getStatus, bo.getStatus()); .eqIfText(SysDept::getStatus, bo.getStatus())
lqw.between(params.get("beginTime") != null && params.get("endTime") != null, .betweenParams(SysDept::getCreateTime, params, "beginTime", "endTime")
SysDept::getCreateTime, params.get("beginTime"), params.get("endTime")); .orderByAsc(SysDept::getAncestors, SysDept::getParentId, SysDept::getOrderNum, SysDept::getDeptId);
lqw.orderByAsc(SysDept::getAncestors);
lqw.orderByAsc(SysDept::getParentId);
lqw.orderByAsc(SysDept::getOrderNum);
lqw.orderByAsc(SysDept::getDeptId);
if (ObjectUtil.isNotNull(bo.getBelongDeptId())) { if (ObjectUtil.isNotNull(bo.getBelongDeptId())) {
//部门树搜索 //部门树搜索
lqw.and(x -> { builder.and(x -> {
List<Long> deptIds = baseMapper.selectDeptAndChildById(bo.getBelongDeptId()); List<Long> deptIds = baseMapper.selectDeptAndChildById(bo.getBelongDeptId());
x.in(SysDept::getDeptId, deptIds); x.in(SysDept::getDeptId, deptIds);
}); });
} }
return lqw; return builder.build();
} }
/** /**
@@ -169,8 +164,10 @@ public class SysDeptServiceImpl implements ISysDeptService, DeptService {
if (ObjectUtil.isNull(dept)) { if (ObjectUtil.isNull(dept)) {
return null; return null;
} }
SysDeptVo parentDept = baseMapper.selectVoOne(new LambdaQueryWrapper<SysDept>() SysDeptVo parentDept = baseMapper.lambda()
.select(SysDept::getDeptName).eq(SysDept::getDeptId, dept.getParentId())); .select(SysDept::getDeptName)
.eq(SysDept::getDeptId, dept.getParentId())
.voOne();
dept.setParentName(ObjectUtils.notNullGetter(parentDept, SysDeptVo::getDeptName)); dept.setParentName(ObjectUtils.notNullGetter(parentDept, SysDeptVo::getDeptName));
return dept; return dept;
} }
@@ -183,10 +180,11 @@ public class SysDeptServiceImpl implements ISysDeptService, DeptService {
*/ */
@Override @Override
public List<SysDeptVo> selectDeptByIds(Collection<Long> deptIds) { public List<SysDeptVo> selectDeptByIds(Collection<Long> deptIds) {
return baseMapper.selectDeptList(new LambdaQueryWrapper<SysDept>() return baseMapper.selectDeptList(baseMapper.lambda()
.select(SysDept::getDeptId, SysDept::getDeptName, SysDept::getLeader) .select(SysDept::getDeptId, SysDept::getDeptName, SysDept::getLeader)
.eq(SysDept::getStatus, SystemConstants.NORMAL) .eq(SysDept::getStatus, SystemConstants.NORMAL)
.in(CollUtil.isNotEmpty(deptIds), SysDept::getDeptId, deptIds)); .in(CollUtil.isNotEmpty(deptIds), SysDept::getDeptId, deptIds)
.build());
} }
/** /**
@@ -226,9 +224,10 @@ public class SysDeptServiceImpl implements ISysDeptService, DeptService {
*/ */
@Override @Override
public List<DeptDTO> selectDeptsByList() { public List<DeptDTO> selectDeptsByList() {
List<SysDeptVo> list = baseMapper.selectDeptList(new LambdaQueryWrapper<SysDept>() List<SysDeptVo> list = baseMapper.selectDeptList(baseMapper.lambda()
.select(SysDept::getDeptId, SysDept::getDeptName, SysDept::getParentId) .select(SysDept::getDeptId, SysDept::getDeptName, SysDept::getParentId)
.eq(SysDept::getStatus, SystemConstants.NORMAL)); .eq(SysDept::getStatus, SystemConstants.NORMAL)
.build());
return BeanUtil.copyToList(list, DeptDTO.class); return BeanUtil.copyToList(list, DeptDTO.class);
} }
@@ -240,9 +239,10 @@ public class SysDeptServiceImpl implements ISysDeptService, DeptService {
*/ */
@Override @Override
public long selectNormalChildrenDeptById(Long deptId) { public long selectNormalChildrenDeptById(Long deptId) {
return baseMapper.selectCount(new LambdaQueryWrapper<SysDept>() return baseMapper.lambda()
.eq(SysDept::getStatus, SystemConstants.NORMAL) .eq(SysDept::getStatus, SystemConstants.NORMAL)
.apply(DataBaseHelper.findInSet(deptId, "ancestors"))); .findInSet(deptId, SysDept::getAncestors)
.count();
} }
/** /**
@@ -253,8 +253,7 @@ public class SysDeptServiceImpl implements ISysDeptService, DeptService {
*/ */
@Override @Override
public boolean hasChildByDeptId(Long deptId) { public boolean hasChildByDeptId(Long deptId) {
return baseMapper.exists(new LambdaQueryWrapper<SysDept>() return baseMapper.lambda().eq(SysDept::getParentId, deptId).exists();
.eq(SysDept::getParentId, deptId));
} }
/** /**
@@ -265,8 +264,7 @@ public class SysDeptServiceImpl implements ISysDeptService, DeptService {
*/ */
@Override @Override
public boolean checkDeptExistUser(Long deptId) { public boolean checkDeptExistUser(Long deptId) {
return userMapper.exists(new LambdaQueryWrapper<SysUser>() return userMapper.lambda().eq(SysUser::getDeptId, deptId).exists();
.eq(SysUser::getDeptId, deptId));
} }
/** /**
@@ -277,10 +275,11 @@ public class SysDeptServiceImpl implements ISysDeptService, DeptService {
*/ */
@Override @Override
public boolean checkDeptNameUnique(SysDeptBo dept) { public boolean checkDeptNameUnique(SysDeptBo dept) {
boolean exist = baseMapper.exists(new LambdaQueryWrapper<SysDept>() boolean exist = baseMapper.lambda()
.eq(SysDept::getDeptName, dept.getDeptName()) .eq(SysDept::getDeptName, dept.getDeptName())
.eq(SysDept::getParentId, dept.getParentId()) .eq(SysDept::getParentId, dept.getParentId())
.ne(ObjectUtil.isNotNull(dept.getDeptId()), SysDept::getDeptId, dept.getDeptId())); .neIfPresent(SysDept::getDeptId, dept.getDeptId())
.exists();
return !exist; return !exist;
} }
@@ -374,9 +373,10 @@ public class SysDeptServiceImpl implements ISysDeptService, DeptService {
private void updateParentDeptStatusNormal(SysDept dept) { private void updateParentDeptStatusNormal(SysDept dept) {
String ancestors = dept.getAncestors(); String ancestors = dept.getAncestors();
Long[] deptIds = Convert.toLongArray(ancestors); Long[] deptIds = Convert.toLongArray(ancestors);
baseMapper.update(null, new LambdaUpdateWrapper<SysDept>() baseMapper.lambda()
.set(SysDept::getStatus, SystemConstants.NORMAL) .set(SysDept::getStatus, SystemConstants.NORMAL)
.in(SysDept::getDeptId, Arrays.asList(deptIds))); .in(SysDept::getDeptId, Arrays.asList(deptIds))
.update();
} }
/** /**
@@ -387,8 +387,7 @@ public class SysDeptServiceImpl implements ISysDeptService, DeptService {
* @param oldAncestors 旧的父ID集合 * @param oldAncestors 旧的父ID集合
*/ */
private void updateDeptChildren(Long deptId, String newAncestors, String oldAncestors) { private void updateDeptChildren(Long deptId, String newAncestors, String oldAncestors) {
List<SysDept> children = baseMapper.selectList(new LambdaQueryWrapper<SysDept>() List<SysDept> children = baseMapper.lambda().findInSet(deptId, SysDept::getAncestors).list();
.apply(DataBaseHelper.findInSet(deptId, "ancestors")));
List<SysDept> list = new ArrayList<>(); List<SysDept> list = new ArrayList<>();
for (SysDept child : children) { for (SysDept child : children) {
SysDept dept = new SysDept(); SysDept dept = new SysDept();
@@ -430,11 +429,10 @@ public class SysDeptServiceImpl implements ISysDeptService, DeptService {
if (CollUtil.isEmpty(deptIds)) { if (CollUtil.isEmpty(deptIds)) {
return Collections.emptyMap(); return Collections.emptyMap();
} }
List<SysDept> list = baseMapper.selectList( List<SysDept> list = baseMapper.lambda()
new LambdaQueryWrapper<SysDept>() .select(SysDept::getDeptId, SysDept::getDeptName)
.select(SysDept::getDeptId, SysDept::getDeptName) .in(SysDept::getDeptId, deptIds)
.in(SysDept::getDeptId, deptIds) .list();
);
return StreamUtils.toMap(list, SysDept::getDeptId, SysDept::getDeptName); return StreamUtils.toMap(list, SysDept::getDeptId, SysDept::getDeptName);
} }
@@ -1,16 +1,14 @@
package org.dromara.system.service.impl; package org.dromara.system.service.impl;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.dromara.common.core.constant.CacheNames; import org.dromara.common.core.constant.CacheNames;
import org.dromara.common.core.domain.PageResult; import org.dromara.common.core.domain.PageResult;
import org.dromara.common.core.exception.ServiceException; import org.dromara.common.core.exception.ServiceException;
import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.query.QueryBuilder;
import org.dromara.common.redis.utils.CacheUtils; import org.dromara.common.redis.utils.CacheUtils;
import org.dromara.system.domain.SysDictData; import org.dromara.system.domain.SysDictData;
import org.dromara.system.domain.bo.SysDictDataBo; import org.dromara.system.domain.bo.SysDictDataBo;
@@ -67,12 +65,12 @@ public class SysDictDataServiceImpl implements ISysDictDataService {
* @return 包含排序号标签和字典类型条件的查询包装器 * @return 包含排序号标签和字典类型条件的查询包装器
*/ */
private LambdaQueryWrapper<SysDictData> buildQueryWrapper(SysDictDataBo bo) { private LambdaQueryWrapper<SysDictData> buildQueryWrapper(SysDictDataBo bo) {
LambdaQueryWrapper<SysDictData> lqw = Wrappers.lambdaQuery(); return QueryBuilder.lambda(SysDictData.class)
lqw.eq(bo.getDictSort() != null, SysDictData::getDictSort, bo.getDictSort()); .eqIfPresent(SysDictData::getDictSort, bo.getDictSort())
lqw.like(StringUtils.isNotBlank(bo.getDictLabel()), SysDictData::getDictLabel, bo.getDictLabel()); .likeIfText(SysDictData::getDictLabel, bo.getDictLabel())
lqw.eq(StringUtils.isNotBlank(bo.getDictType()), SysDictData::getDictType, bo.getDictType()); .eqIfText(SysDictData::getDictType, bo.getDictType())
lqw.orderByAsc(SysDictData::getDictSort, SysDictData::getDictCode); .orderByAsc(SysDictData::getDictSort, SysDictData::getDictCode)
return lqw; .build();
} }
/** /**
@@ -84,10 +82,11 @@ public class SysDictDataServiceImpl implements ISysDictDataService {
*/ */
@Override @Override
public String selectDictLabel(String dictType, String dictValue) { public String selectDictLabel(String dictType, String dictValue) {
return baseMapper.selectOne(new LambdaQueryWrapper<SysDictData>() return baseMapper.lambda()
.select(SysDictData::getDictLabel) .select(SysDictData::getDictLabel)
.eq(SysDictData::getDictType, dictType) .eq(SysDictData::getDictType, dictType)
.eq(SysDictData::getDictValue, dictValue)) .eq(SysDictData::getDictValue, dictValue)
.one()
.getDictLabel(); .getDictLabel();
} }
@@ -156,10 +155,11 @@ public class SysDictDataServiceImpl implements ISysDictDataService {
*/ */
@Override @Override
public boolean checkDictDataUnique(SysDictDataBo dict) { public boolean checkDictDataUnique(SysDictDataBo dict) {
boolean exist = baseMapper.exists(new LambdaQueryWrapper<SysDictData>() boolean exist = baseMapper.lambda()
.eq(SysDictData::getDictType, dict.getDictType()) .eq(SysDictData::getDictType, dict.getDictType())
.eq(SysDictData::getDictValue, dict.getDictValue()) .eq(SysDictData::getDictValue, dict.getDictValue())
.ne(ObjectUtil.isNotNull(dict.getDictCode()), SysDictData::getDictCode, dict.getDictCode())); .neIfPresent(SysDictData::getDictCode, dict.getDictCode())
.exists();
return !exist; return !exist;
} }
@@ -4,8 +4,6 @@ import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.dromara.common.core.constant.CacheNames; import org.dromara.common.core.constant.CacheNames;
@@ -19,6 +17,7 @@ import org.dromara.common.core.utils.SpringUtils;
import org.dromara.common.core.utils.StreamUtils; import org.dromara.common.core.utils.StreamUtils;
import org.dromara.common.core.utils.StringUtils; import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.query.QueryBuilder;
import org.dromara.common.redis.utils.CacheUtils; import org.dromara.common.redis.utils.CacheUtils;
import org.dromara.system.domain.SysDictData; import org.dromara.system.domain.SysDictData;
import org.dromara.system.domain.SysDictType; import org.dromara.system.domain.SysDictType;
@@ -81,11 +80,11 @@ public class SysDictTypeServiceImpl implements ISysDictTypeService, DictService
* @return 包含名称类型与创建时间区间的查询包装器 * @return 包含名称类型与创建时间区间的查询包装器
*/ */
private LambdaQueryWrapper<SysDictType> buildQueryWrapper(SysDictTypeBo bo) { private LambdaQueryWrapper<SysDictType> buildQueryWrapper(SysDictTypeBo bo) {
LambdaQueryWrapper<SysDictType> lqw = Wrappers.lambdaQuery(); return QueryBuilder.lambda(SysDictType.class)
lqw.like(StringUtils.isNotBlank(bo.getDictName()), SysDictType::getDictName, bo.getDictName()); .likeIfText(SysDictType::getDictName, bo.getDictName())
lqw.like(StringUtils.isNotBlank(bo.getDictType()), SysDictType::getDictType, bo.getDictType()); .likeIfText(SysDictType::getDictType, bo.getDictType())
lqw.orderByAsc(SysDictType::getDictId); .orderByAsc(SysDictType::getDictId)
return lqw; .build();
} }
/** /**
@@ -131,7 +130,7 @@ public class SysDictTypeServiceImpl implements ISysDictTypeService, DictService
@Cacheable(cacheNames = CacheNames.SYS_DICT_TYPE, key = "#dictType") @Cacheable(cacheNames = CacheNames.SYS_DICT_TYPE, key = "#dictType")
@Override @Override
public SysDictTypeVo selectDictTypeByType(String dictType) { public SysDictTypeVo selectDictTypeByType(String dictType) {
return baseMapper.selectVoOne(new LambdaQueryWrapper<SysDictType>().eq(SysDictType::getDictType, dictType)); return baseMapper.lambda().eq(SysDictType::getDictType, dictType).voOne();
} }
/** /**
@@ -143,8 +142,7 @@ public class SysDictTypeServiceImpl implements ISysDictTypeService, DictService
public void deleteDictTypeByIds(Collection<Long> dictIds) { public void deleteDictTypeByIds(Collection<Long> dictIds) {
List<SysDictType> list = baseMapper.selectByIds(dictIds); List<SysDictType> list = baseMapper.selectByIds(dictIds);
list.forEach(x -> { list.forEach(x -> {
boolean assigned = dictDataMapper.exists(new LambdaQueryWrapper<SysDictData>() boolean assigned = dictDataMapper.lambda().eq(SysDictData::getDictType, x.getDictType()).exists();
.eq(SysDictData::getDictType, x.getDictType()));
if (assigned) { if (assigned) {
throw new ServiceException("{}已分配,不能删除", x.getDictName()); throw new ServiceException("{}已分配,不能删除", x.getDictName());
} }
@@ -195,9 +193,10 @@ public class SysDictTypeServiceImpl implements ISysDictTypeService, DictService
public List<SysDictDataVo> updateDictType(SysDictTypeBo bo) { public List<SysDictDataVo> updateDictType(SysDictTypeBo bo) {
SysDictType dict = MapstructUtils.convert(bo, SysDictType.class); SysDictType dict = MapstructUtils.convert(bo, SysDictType.class);
SysDictType oldDict = baseMapper.selectById(dict.getDictId()); SysDictType oldDict = baseMapper.selectById(dict.getDictId());
dictDataMapper.update(null, new LambdaUpdateWrapper<SysDictData>() dictDataMapper.lambda()
.set(SysDictData::getDictType, dict.getDictType()) .set(SysDictData::getDictType, dict.getDictType())
.eq(SysDictData::getDictType, oldDict.getDictType())); .eq(SysDictData::getDictType, oldDict.getDictType())
.update();
int row = baseMapper.updateById(dict); int row = baseMapper.updateById(dict);
if (row > 0) { if (row > 0) {
CacheUtils.evict(CacheNames.SYS_DICT, oldDict.getDictType()); CacheUtils.evict(CacheNames.SYS_DICT, oldDict.getDictType());
@@ -215,9 +214,10 @@ public class SysDictTypeServiceImpl implements ISysDictTypeService, DictService
*/ */
@Override @Override
public boolean checkDictTypeUnique(SysDictTypeBo dictType) { public boolean checkDictTypeUnique(SysDictTypeBo dictType) {
boolean exist = baseMapper.exists(new LambdaQueryWrapper<SysDictType>() boolean exist = baseMapper.lambda()
.eq(SysDictType::getDictType, dictType.getDictType()) .eq(SysDictType::getDictType, dictType.getDictType())
.ne(ObjectUtil.isNotNull(dictType.getDictId()), SysDictType::getDictId, dictType.getDictId())); .neIfPresent(SysDictType::getDictId, dictType.getDictId())
.exists();
return !exist; return !exist;
} }
@@ -3,7 +3,6 @@ package org.dromara.system.service.impl;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import cn.hutool.http.useragent.UserAgent; import cn.hutool.http.useragent.UserAgent;
import cn.hutool.http.useragent.UserAgentUtil; import cn.hutool.http.useragent.UserAgentUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletRequest;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
@@ -16,6 +15,7 @@ import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.core.utils.ip.AddressUtils; import org.dromara.common.core.utils.ip.AddressUtils;
import org.dromara.common.log.event.LoginInfoEvent; import org.dromara.common.log.event.LoginInfoEvent;
import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.mapper.LambdaCrudChainWrapper;
import org.dromara.common.satoken.utils.LoginHelper; import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.system.domain.SysLoginInfo; import org.dromara.system.domain.SysLoginInfo;
import org.dromara.system.domain.bo.SysLoginInfoBo; import org.dromara.system.domain.bo.SysLoginInfoBo;
@@ -122,13 +122,7 @@ public class SysLoginInfoServiceImpl implements ISysLoginInfoService {
*/ */
@Override @Override
public PageResult<SysLoginInfoVo> selectPageLoginInfoList(SysLoginInfoBo loginInfo, PageQuery pageQuery) { public PageResult<SysLoginInfoVo> selectPageLoginInfoList(SysLoginInfoBo loginInfo, PageQuery pageQuery) {
Map<String, Object> params = loginInfo.getParams(); LambdaCrudChainWrapper<SysLoginInfo, SysLoginInfoVo> lqw = buildQueryWrapper(loginInfo);
LambdaQueryWrapper<SysLoginInfo> lqw = new LambdaQueryWrapper<SysLoginInfo>()
.like(StringUtils.isNotBlank(loginInfo.getIpaddr()), SysLoginInfo::getIpaddr, loginInfo.getIpaddr())
.eq(StringUtils.isNotBlank(loginInfo.getStatus()), SysLoginInfo::getStatus, loginInfo.getStatus())
.like(StringUtils.isNotBlank(loginInfo.getUserName()), SysLoginInfo::getUserName, loginInfo.getUserName())
.between(params.get("beginTime") != null && params.get("endTime") != null,
SysLoginInfo::getLoginTime, params.get("beginTime"), params.get("endTime"));
if (StringUtils.isBlank(pageQuery.getOrderByColumn())) { if (StringUtils.isBlank(pageQuery.getOrderByColumn())) {
lqw.orderByDesc(SysLoginInfo::getInfoId); lqw.orderByDesc(SysLoginInfo::getInfoId);
} }
@@ -156,16 +150,25 @@ public class SysLoginInfoServiceImpl implements ISysLoginInfoService {
*/ */
@Override @Override
public List<SysLoginInfoVo> selectLoginInfoList(SysLoginInfoBo loginInfo) { public List<SysLoginInfoVo> selectLoginInfoList(SysLoginInfoBo loginInfo) {
Map<String, Object> params = loginInfo.getParams(); return baseMapper.selectVoList(buildQueryWrapper(loginInfo)
return baseMapper.selectVoList(new LambdaQueryWrapper<SysLoginInfo>()
.like(StringUtils.isNotBlank(loginInfo.getIpaddr()), SysLoginInfo::getIpaddr, loginInfo.getIpaddr())
.eq(StringUtils.isNotBlank(loginInfo.getStatus()), SysLoginInfo::getStatus, loginInfo.getStatus())
.like(StringUtils.isNotBlank(loginInfo.getUserName()), SysLoginInfo::getUserName, loginInfo.getUserName())
.between(params.get("beginTime") != null && params.get("endTime") != null,
SysLoginInfo::getLoginTime, params.get("beginTime"), params.get("endTime"))
.orderByDesc(SysLoginInfo::getInfoId)); .orderByDesc(SysLoginInfo::getInfoId));
} }
/**
* 构造登录日志列表查询条件
*
* @param loginInfo 登录日志筛选条件
* @return 登录日志查询包装器
*/
private LambdaCrudChainWrapper<SysLoginInfo, SysLoginInfoVo> buildQueryWrapper(SysLoginInfoBo loginInfo) {
Map<String, Object> params = loginInfo.getParams();
return baseMapper.lambda()
.likeIfText(SysLoginInfo::getIpaddr, loginInfo.getIpaddr())
.eqIfText(SysLoginInfo::getStatus, loginInfo.getStatus())
.likeIfText(SysLoginInfo::getUserName, loginInfo.getUserName())
.betweenParams(SysLoginInfo::getLoginTime, params, "beginTime", "endTime");
}
/** /**
* 批量删除系统登录日志 * 批量删除系统登录日志
* *
@@ -182,6 +185,6 @@ public class SysLoginInfoServiceImpl implements ISysLoginInfoService {
*/ */
@Override @Override
public void cleanLoginInfo() { public void cleanLoginInfo() {
baseMapper.delete(new LambdaQueryWrapper<>()); baseMapper.lambda().delete();
} }
} }
@@ -3,7 +3,6 @@ package org.dromara.system.service.impl;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.lang.tree.Tree; import cn.hutool.core.lang.tree.Tree;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.dromara.common.core.constant.Constants; import org.dromara.common.core.constant.Constants;
@@ -64,15 +63,15 @@ public class SysMenuServiceImpl implements ISysMenuService {
public List<SysMenuVo> selectMenuList(SysMenuBo menu, Long userId) { public List<SysMenuVo> selectMenuList(SysMenuBo menu, Long userId) {
// 管理员显示所有菜单信息 不是管理员 按用户id过滤菜单 // 管理员显示所有菜单信息 不是管理员 按用户id过滤菜单
if (LoginHelper.isSuperAdmin(userId)) { if (LoginHelper.isSuperAdmin(userId)) {
return baseMapper.selectVoList( return baseMapper.lambda()
new LambdaQueryWrapper<SysMenu>() .likeIfText(SysMenu::getMenuName, menu.getMenuName())
.like(StringUtils.isNotBlank(menu.getMenuName()), SysMenu::getMenuName, menu.getMenuName()) .eqIfText(SysMenu::getVisible, menu.getVisible())
.eq(StringUtils.isNotBlank(menu.getVisible()), SysMenu::getVisible, menu.getVisible()) .eqIfText(SysMenu::getStatus, menu.getStatus())
.eq(StringUtils.isNotBlank(menu.getStatus()), SysMenu::getStatus, menu.getStatus()) .eqIfText(SysMenu::getMenuType, menu.getMenuType())
.eq(StringUtils.isNotBlank(menu.getMenuType()), SysMenu::getMenuType, menu.getMenuType()) .eqIfPresent(SysMenu::getParentId, menu.getParentId())
.eq(ObjectUtil.isNotNull(menu.getParentId()), SysMenu::getParentId, menu.getParentId()) .orderByAsc(SysMenu::getParentId)
.orderByAsc(SysMenu::getParentId) .orderByAsc(SysMenu::getOrderNum)
.orderByAsc(SysMenu::getOrderNum)); .voList();
} }
return baseMapper.selectMenuListByUserId(menu, userId); return baseMapper.selectMenuListByUserId(menu, userId);
} }
@@ -246,7 +245,7 @@ public class SysMenuServiceImpl implements ISysMenuService {
*/ */
@Override @Override
public boolean hasChildByMenuId(Long menuId) { public boolean hasChildByMenuId(Long menuId) {
return baseMapper.exists(new LambdaQueryWrapper<SysMenu>().eq(SysMenu::getParentId, menuId)); return baseMapper.lambda().eq(SysMenu::getParentId, menuId).exists();
} }
/** /**
@@ -257,7 +256,10 @@ public class SysMenuServiceImpl implements ISysMenuService {
*/ */
@Override @Override
public boolean hasChildByMenuId(Collection<Long> menuIds) { public boolean hasChildByMenuId(Collection<Long> menuIds) {
return baseMapper.exists(new LambdaQueryWrapper<SysMenu>().in(SysMenu::getParentId, menuIds).notIn(SysMenu::getMenuId, menuIds)); return baseMapper.lambda()
.in(SysMenu::getParentId, menuIds)
.notIn(SysMenu::getMenuId, menuIds)
.exists();
} }
/** /**
@@ -268,7 +270,7 @@ public class SysMenuServiceImpl implements ISysMenuService {
*/ */
@Override @Override
public boolean checkMenuExistRole(Long menuId) { public boolean checkMenuExistRole(Long menuId) {
return roleMenuMapper.exists(new LambdaQueryWrapper<SysRoleMenu>().eq(SysRoleMenu::getMenuId, menuId)); return roleMenuMapper.lambda().eq(SysRoleMenu::getMenuId, menuId).exists();
} }
/** /**
@@ -326,10 +328,11 @@ public class SysMenuServiceImpl implements ISysMenuService {
*/ */
@Override @Override
public boolean checkMenuNameUnique(SysMenuBo menu) { public boolean checkMenuNameUnique(SysMenuBo menu) {
boolean exist = baseMapper.exists(new LambdaQueryWrapper<SysMenu>() boolean exist = baseMapper.lambda()
.eq(SysMenu::getMenuName, menu.getMenuName()) .eq(SysMenu::getMenuName, menu.getMenuName())
.eq(SysMenu::getParentId, menu.getParentId()) .eq(SysMenu::getParentId, menu.getParentId())
.ne(ObjectUtil.isNotNull(menu.getMenuId()), SysMenu::getMenuId, menu.getMenuId())); .neIfPresent(SysMenu::getMenuId, menu.getMenuId())
.exists();
return !exist; return !exist;
} }
@@ -349,12 +352,11 @@ public class SysMenuServiceImpl implements ISysMenuService {
Long parentId = menu.getParentId(); Long parentId = menu.getParentId();
String path = menu.getPath(); String path = menu.getPath();
String routeName = StringUtils.isEmpty(menu.getRouteName()) ? path : menu.getRouteName(); String routeName = StringUtils.isEmpty(menu.getRouteName()) ? path : menu.getRouteName();
List<SysMenu> sysMenuList = baseMapper.selectList( List<SysMenu> sysMenuList = baseMapper.lambda()
new LambdaQueryWrapper<SysMenu>() .in(SysMenu::getMenuType, SystemConstants.TYPE_DIR, SystemConstants.TYPE_MENU)
.in(SysMenu::getMenuType, SystemConstants.TYPE_DIR, SystemConstants.TYPE_MENU) .and(w -> {
.and(w -> w.eq(SysMenu::getPath, path).or().eq(SysMenu::getPath, routeName);
w.eq(SysMenu::getPath, path).or().eq(SysMenu::getPath, routeName) }).list();
));
for (SysMenu sysMenu : sysMenuList) { for (SysMenu sysMenu : sysMenuList) {
if (!sysMenu.getMenuId().equals(menuId)) { if (!sysMenu.getMenuId().equals(menuId)) {
Long dbParentId = sysMenu.getParentId(); Long dbParentId = sysMenu.getParentId();
@@ -2,8 +2,6 @@ package org.dromara.system.service.impl;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.convert.Convert; import cn.hutool.core.convert.Convert;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.dromara.common.core.enums.PushSourceEnum; import org.dromara.common.core.enums.PushSourceEnum;
@@ -11,7 +9,6 @@ import org.dromara.common.core.enums.PushTypeEnum;
import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils; import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.json.utils.JsonUtils; import org.dromara.common.json.utils.JsonUtils;
import org.dromara.common.mybatis.helper.DataBaseHelper;
import org.dromara.common.mybatis.utils.IdGeneratorUtil; import org.dromara.common.mybatis.utils.IdGeneratorUtil;
import org.dromara.common.push.helper.PushHelper; import org.dromara.common.push.helper.PushHelper;
import org.dromara.system.api.MessageService; import org.dromara.system.api.MessageService;
@@ -207,20 +204,19 @@ public class SysMessageServiceImpl implements ISysMessageService, MessageService
* @return 消息VO列表 * @return 消息VO列表
*/ */
private List<SysMessageVo> selectMessageList(String category, Long userId) { private List<SysMessageVo> selectMessageList(String category, Long userId) {
LambdaQueryWrapper<SysMessage> lqw = Wrappers.lambdaQuery(); List<SysMessage> list = baseMapper.lambda()
// 分类匹配 .eq(SysMessage::getCategory, category)
lqw.eq(SysMessage::getCategory, category); // 仅查询30天内消息
// 仅查询30天内消息 .ge(SysMessage::getCreateTime, LocalDateTime.now().minusDays(BOX_DAYS))
lqw.ge(SysMessage::getCreateTime, LocalDateTime.now().minusDays(BOX_DAYS)); // 全局消息 当前用户在接收人范围内
// 全局消息 当前用户在接收人范围内 .and(wrapper -> {
lqw.and(wrapper -> wrapper.eq(SysMessage::getSendUserIds, GLOBAL_USER_IDS) wrapper.eq(SysMessage::getSendUserIds, GLOBAL_USER_IDS)
.or() .or()
.apply(DataBaseHelper.findInSet(userId, "send_user_ids"))); .findInSet(userId, SysMessage::getSendUserIds);
// 按创建时间+消息ID倒序 })
lqw.orderByDesc(SysMessage::getCreateTime, SysMessage::getMessageId); .orderByDesc(SysMessage::getCreateTime, SysMessage::getMessageId)
// 分页查询只查第一页最多100条 // 分页查询只查第一页最多100条
List<SysMessage> list = baseMapper.selectList(new Page<>(1, BOX_LIMIT, false), lqw); .list(new Page<>(1, BOX_LIMIT, false));
// 转换为VO并返回
return list.stream().map(this::buildVo).toList(); return list.stream().map(this::buildVo).toList();
} }
@@ -1,7 +1,6 @@
package org.dromara.system.service.impl; package org.dromara.system.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.dromara.common.core.domain.PageResult; import org.dromara.common.core.domain.PageResult;
@@ -9,6 +8,8 @@ import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.ObjectUtils; import org.dromara.common.core.utils.ObjectUtils;
import org.dromara.common.core.utils.StringUtils; import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.query.LambdaQueryBuilder;
import org.dromara.common.mybatis.core.query.QueryBuilder;
import org.dromara.system.domain.SysNotice; import org.dromara.system.domain.SysNotice;
import org.dromara.system.domain.SysUser; import org.dromara.system.domain.SysUser;
import org.dromara.system.domain.bo.SysNoticeBo; import org.dromara.system.domain.bo.SysNoticeBo;
@@ -78,15 +79,14 @@ public class SysNoticeServiceImpl implements ISysNoticeService {
* @return 包含标题类型创建人和排序条件的查询包装器 * @return 包含标题类型创建人和排序条件的查询包装器
*/ */
private LambdaQueryWrapper<SysNotice> buildQueryWrapper(SysNoticeBo bo) { private LambdaQueryWrapper<SysNotice> buildQueryWrapper(SysNoticeBo bo) {
LambdaQueryWrapper<SysNotice> lqw = Wrappers.lambdaQuery(); LambdaQueryBuilder<SysNotice> builder = QueryBuilder.lambda(SysNotice.class)
lqw.like(StringUtils.isNotBlank(bo.getNoticeTitle()), SysNotice::getNoticeTitle, bo.getNoticeTitle()); .likeIfText(SysNotice::getNoticeTitle, bo.getNoticeTitle())
lqw.eq(StringUtils.isNotBlank(bo.getNoticeType()), SysNotice::getNoticeType, bo.getNoticeType()); .eqIfText(SysNotice::getNoticeType, bo.getNoticeType());
if (StringUtils.isNotBlank(bo.getCreateByName())) { if (StringUtils.isNotBlank(bo.getCreateByName())) {
SysUserVo sysUser = userMapper.selectVoOne(new LambdaQueryWrapper<SysUser>().eq(SysUser::getUserName, bo.getCreateByName())); SysUserVo sysUser = userMapper.lambda().eq(SysUser::getUserName, bo.getCreateByName()).voOne();
lqw.eq(SysNotice::getCreateBy, ObjectUtils.notNullGetter(sysUser, SysUserVo::getUserId)); builder.eq(SysNotice::getCreateBy, ObjectUtils.notNullGetter(sysUser, SysUserVo::getUserId));
} }
lqw.orderByAsc(SysNotice::getNoticeId); return builder.orderByAsc(SysNotice::getNoticeId).build();
return lqw;
} }
/** /**
@@ -10,6 +10,7 @@ import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.core.utils.ip.AddressUtils; import org.dromara.common.core.utils.ip.AddressUtils;
import org.dromara.common.log.event.OperLogEvent; import org.dromara.common.log.event.OperLogEvent;
import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.query.QueryBuilder;
import org.dromara.system.domain.SysOperLog; import org.dromara.system.domain.SysOperLog;
import org.dromara.system.domain.bo.SysOperLogBo; import org.dromara.system.domain.bo.SysOperLogBo;
import org.dromara.system.domain.vo.SysOperLogVo; import org.dromara.system.domain.vo.SysOperLogVo;
@@ -74,9 +75,9 @@ public class SysOperLogServiceImpl implements ISysOperLogService {
*/ */
private LambdaQueryWrapper<SysOperLog> buildQueryWrapper(SysOperLogBo operLog) { private LambdaQueryWrapper<SysOperLog> buildQueryWrapper(SysOperLogBo operLog) {
Map<String, Object> params = operLog.getParams(); Map<String, Object> params = operLog.getParams();
return new LambdaQueryWrapper<SysOperLog>() return QueryBuilder.lambda(SysOperLog.class)
.like(StringUtils.isNotBlank(operLog.getOperIp()), SysOperLog::getOperIp, operLog.getOperIp()) .likeIfText(SysOperLog::getOperIp, operLog.getOperIp())
.like(StringUtils.isNotBlank(operLog.getTitle()), SysOperLog::getTitle, operLog.getTitle()) .likeIfText(SysOperLog::getTitle, operLog.getTitle())
.eq(operLog.getBusinessType() != null && operLog.getBusinessType() > 0, .eq(operLog.getBusinessType() != null && operLog.getBusinessType() > 0,
SysOperLog::getBusinessType, operLog.getBusinessType()) SysOperLog::getBusinessType, operLog.getBusinessType())
.func(f -> { .func(f -> {
@@ -84,17 +85,16 @@ public class SysOperLogServiceImpl implements ISysOperLogService {
f.in(SysOperLog::getBusinessType, Arrays.asList(operLog.getBusinessTypes())); f.in(SysOperLog::getBusinessType, Arrays.asList(operLog.getBusinessTypes()));
} }
}) })
.eq(operLog.getStatus() != null, .eqIfPresent(SysOperLog::getStatus, operLog.getStatus())
SysOperLog::getStatus, operLog.getStatus()) .likeIfText(SysOperLog::getOperName, operLog.getOperName())
.like(StringUtils.isNotBlank(operLog.getOperName()), SysOperLog::getOperName, operLog.getOperName()) .eqIfPresent(SysOperLog::getUserId, operLog.getUserId())
.eq(operLog.getUserId() != null, SysOperLog::getUserId, operLog.getUserId()) .eqIfPresent(SysOperLog::getDeptId, operLog.getDeptId())
.eq(operLog.getDeptId() != null, SysOperLog::getDeptId, operLog.getDeptId()) .eqIfText(SysOperLog::getClientKey, operLog.getClientKey())
.eq(StringUtils.isNotBlank(operLog.getClientKey()), SysOperLog::getClientKey, operLog.getClientKey()) .eqIfText(SysOperLog::getDeviceType, operLog.getDeviceType())
.eq(StringUtils.isNotBlank(operLog.getDeviceType()), SysOperLog::getDeviceType, operLog.getDeviceType()) .likeIfText(SysOperLog::getBrowser, operLog.getBrowser())
.like(StringUtils.isNotBlank(operLog.getBrowser()), SysOperLog::getBrowser, operLog.getBrowser()) .likeIfText(SysOperLog::getOs, operLog.getOs())
.like(StringUtils.isNotBlank(operLog.getOs()), SysOperLog::getOs, operLog.getOs()) .betweenParams(SysOperLog::getOperTime, params, "beginTime", "endTime")
.between(params.get("beginTime") != null && params.get("endTime") != null, .build();
SysOperLog::getOperTime, params.get("beginTime"), params.get("endTime"));
} }
/** /**
@@ -148,6 +148,6 @@ public class SysOperLogServiceImpl implements ISysOperLogService {
*/ */
@Override @Override
public void cleanOperLog() { public void cleanOperLog() {
baseMapper.delete(new LambdaQueryWrapper<>()); baseMapper.lambda().delete();
} }
} }
@@ -3,8 +3,6 @@ package org.dromara.system.service.impl;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@@ -17,6 +15,7 @@ import org.dromara.common.core.utils.ObjectUtils;
import org.dromara.common.core.utils.StringUtils; import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.json.utils.JsonUtils; import org.dromara.common.json.utils.JsonUtils;
import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.query.QueryBuilder;
import org.dromara.common.oss.constant.OssConstant; import org.dromara.common.oss.constant.OssConstant;
import org.dromara.common.redis.utils.CacheUtils; import org.dromara.common.redis.utils.CacheUtils;
import org.dromara.common.redis.utils.RedisUtils; import org.dromara.common.redis.utils.RedisUtils;
@@ -94,12 +93,12 @@ public class SysOssConfigServiceImpl implements ISysOssConfigService {
* @return 包含配置标识桶名称和状态条件的查询包装器 * @return 包含配置标识桶名称和状态条件的查询包装器
*/ */
private LambdaQueryWrapper<SysOssConfig> buildQueryWrapper(SysOssConfigBo bo) { private LambdaQueryWrapper<SysOssConfig> buildQueryWrapper(SysOssConfigBo bo) {
LambdaQueryWrapper<SysOssConfig> lqw = Wrappers.lambdaQuery(); return QueryBuilder.lambda(SysOssConfig.class)
lqw.eq(StringUtils.isNotBlank(bo.getConfigKey()), SysOssConfig::getConfigKey, bo.getConfigKey()); .eqIfText(SysOssConfig::getConfigKey, bo.getConfigKey())
lqw.like(StringUtils.isNotBlank(bo.getBucketName()), SysOssConfig::getBucketName, bo.getBucketName()); .likeIfText(SysOssConfig::getBucketName, bo.getBucketName())
lqw.eq(StringUtils.isNotBlank(bo.getStatus()), SysOssConfig::getStatus, bo.getStatus()); .eqIfText(SysOssConfig::getStatus, bo.getStatus())
lqw.orderByAsc(SysOssConfig::getOssConfigId); .orderByAsc(SysOssConfig::getOssConfigId)
return lqw; .build();
} }
/** /**
@@ -131,13 +130,13 @@ public class SysOssConfigServiceImpl implements ISysOssConfigService {
public Boolean updateByBo(SysOssConfigBo bo) { public Boolean updateByBo(SysOssConfigBo bo) {
SysOssConfig config = MapstructUtils.convert(bo, SysOssConfig.class); SysOssConfig config = MapstructUtils.convert(bo, SysOssConfig.class);
validEntityBeforeSave(config); validEntityBeforeSave(config);
LambdaUpdateWrapper<SysOssConfig> luw = new LambdaUpdateWrapper<>(); boolean flag = baseMapper.lambda()
luw.set(ObjectUtil.isNull(config.getPrefix()), SysOssConfig::getPrefix, ""); .set(ObjectUtil.isNull(config.getPrefix()), SysOssConfig::getPrefix, "")
luw.set(ObjectUtil.isNull(config.getRegion()), SysOssConfig::getRegion, ""); .set(ObjectUtil.isNull(config.getRegion()), SysOssConfig::getRegion, "")
luw.set(ObjectUtil.isNull(config.getExt1()), SysOssConfig::getExt1, ""); .set(ObjectUtil.isNull(config.getExt1()), SysOssConfig::getExt1, "")
luw.set(ObjectUtil.isNull(config.getRemark()), SysOssConfig::getRemark, ""); .set(ObjectUtil.isNull(config.getRemark()), SysOssConfig::getRemark, "")
luw.eq(SysOssConfig::getOssConfigId, config.getOssConfigId()); .eq(SysOssConfig::getOssConfigId, config.getOssConfigId())
boolean flag = baseMapper.update(config, luw) > 0; .update(config);
if (flag) { if (flag) {
// 从数据库查询完整的数据做缓存 // 从数据库查询完整的数据做缓存
config = baseMapper.selectById(config.getOssConfigId()); config = baseMapper.selectById(config.getOssConfigId());
@@ -193,9 +192,10 @@ public class SysOssConfigServiceImpl implements ISysOssConfigService {
*/ */
private boolean checkConfigKeyUnique(SysOssConfig sysOssConfig) { private boolean checkConfigKeyUnique(SysOssConfig sysOssConfig) {
long ossConfigId = ObjectUtils.notNull(sysOssConfig.getOssConfigId(), -1L); long ossConfigId = ObjectUtils.notNull(sysOssConfig.getOssConfigId(), -1L);
SysOssConfig info = baseMapper.selectOne(new LambdaQueryWrapper<SysOssConfig>() SysOssConfig info = baseMapper.lambda()
.select(SysOssConfig::getOssConfigId, SysOssConfig::getConfigKey) .select(SysOssConfig::getOssConfigId, SysOssConfig::getConfigKey)
.eq(SysOssConfig::getConfigKey, sysOssConfig.getConfigKey())); .eq(SysOssConfig::getConfigKey, sysOssConfig.getConfigKey())
.one();
if (ObjectUtil.isNotNull(info) && info.getOssConfigId() != ossConfigId) { if (ObjectUtil.isNotNull(info) && info.getOssConfigId() != ossConfigId) {
return false; return false;
} }
@@ -212,8 +212,7 @@ public class SysOssConfigServiceImpl implements ISysOssConfigService {
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public int updateOssConfigStatus(SysOssConfigBo bo) { public int updateOssConfigStatus(SysOssConfigBo bo) {
SysOssConfig sysOssConfig = MapstructUtils.convert(bo, SysOssConfig.class); SysOssConfig sysOssConfig = MapstructUtils.convert(bo, SysOssConfig.class);
int row = baseMapper.update(null, new LambdaUpdateWrapper<SysOssConfig>() int row = baseMapper.lambda().set(SysOssConfig::getStatus, SystemConstants.NO).updateCount();
.set(SysOssConfig::getStatus, SystemConstants.NO));
row += baseMapper.updateById(sysOssConfig); row += baseMapper.updateById(sysOssConfig);
if (row > 0) { if (row > 0) {
RedisUtils.setCacheObject(OssConstant.DEFAULT_CONFIG_KEY, sysOssConfig.getConfigKey()); RedisUtils.setCacheObject(OssConstant.DEFAULT_CONFIG_KEY, sysOssConfig.getConfigKey());
@@ -5,7 +5,6 @@ import cn.hutool.core.convert.Convert;
import cn.hutool.core.io.IoUtil; import cn.hutool.core.io.IoUtil;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@@ -19,6 +18,7 @@ import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.core.utils.file.FileUtils; import org.dromara.common.core.utils.file.FileUtils;
import org.dromara.common.json.utils.JsonUtils; import org.dromara.common.json.utils.JsonUtils;
import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.query.QueryBuilder;
import org.dromara.common.oss.client.OssClient; import org.dromara.common.oss.client.OssClient;
import org.dromara.common.oss.enums.AccessPolicy; import org.dromara.common.oss.enums.AccessPolicy;
import org.dromara.common.oss.factory.OssFactory; import org.dromara.common.oss.factory.OssFactory;
@@ -157,17 +157,16 @@ public class SysOssServiceImpl implements ISysOssService, OssService {
*/ */
private LambdaQueryWrapper<SysOss> buildQueryWrapper(SysOssBo bo) { private LambdaQueryWrapper<SysOss> buildQueryWrapper(SysOssBo bo) {
Map<String, Object> params = bo.getParams(); Map<String, Object> params = bo.getParams();
LambdaQueryWrapper<SysOss> lqw = Wrappers.lambdaQuery(); return QueryBuilder.lambda(SysOss.class)
lqw.like(StringUtils.isNotBlank(bo.getFileName()), SysOss::getFileName, bo.getFileName()); .likeIfText(SysOss::getFileName, bo.getFileName())
lqw.like(StringUtils.isNotBlank(bo.getOriginalName()), SysOss::getOriginalName, bo.getOriginalName()); .likeIfText(SysOss::getOriginalName, bo.getOriginalName())
lqw.eq(StringUtils.isNotBlank(bo.getFileSuffix()), SysOss::getFileSuffix, bo.getFileSuffix()); .eqIfText(SysOss::getFileSuffix, bo.getFileSuffix())
lqw.eq(StringUtils.isNotBlank(bo.getUrl()), SysOss::getUrl, bo.getUrl()); .eqIfText(SysOss::getUrl, bo.getUrl())
lqw.between(params.get("beginCreateTime") != null && params.get("endCreateTime") != null, .betweenParams(SysOss::getCreateTime, params, "beginCreateTime", "endCreateTime")
SysOss::getCreateTime, params.get("beginCreateTime"), params.get("endCreateTime")); .eqIfPresent(SysOss::getCreateBy, bo.getCreateBy())
lqw.eq(ObjectUtil.isNotNull(bo.getCreateBy()), SysOss::getCreateBy, bo.getCreateBy()); .eqIfText(SysOss::getService, bo.getService())
lqw.eq(StringUtils.isNotBlank(bo.getService()), SysOss::getService, bo.getService()); .orderByAsc(SysOss::getOssId)
lqw.orderByAsc(SysOss::getOssId); .build();
return lqw;
} }
/** /**
@@ -2,8 +2,7 @@ package org.dromara.system.service.impl;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.dromara.common.core.constant.SystemConstants; import org.dromara.common.core.constant.SystemConstants;
@@ -11,7 +10,6 @@ import org.dromara.common.core.domain.PageResult;
import org.dromara.common.core.exception.ServiceException; import org.dromara.common.core.exception.ServiceException;
import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StreamUtils; import org.dromara.common.core.utils.StreamUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.system.api.PostService; import org.dromara.system.api.PostService;
import org.dromara.system.domain.SysPost; import org.dromara.system.domain.SysPost;
@@ -83,15 +81,14 @@ public class SysPostServiceImpl implements ISysPostService, PostService {
* @param bo 查询条件对象 * @param bo 查询条件对象
* @return 构建好的查询包装器 * @return 构建好的查询包装器
*/ */
private LambdaQueryWrapper<SysPost> buildQueryWrapper(SysPostBo bo) { private Wrapper<SysPost> buildQueryWrapper(SysPostBo bo) {
Map<String, Object> params = bo.getParams(); Map<String, Object> params = bo.getParams();
LambdaQueryWrapper<SysPost> wrapper = new LambdaQueryWrapper<>(); var wrapper = baseMapper.lambda()
wrapper.like(StringUtils.isNotBlank(bo.getPostCode()), SysPost::getPostCode, bo.getPostCode()) .likeIfText(SysPost::getPostCode, bo.getPostCode())
.like(StringUtils.isNotBlank(bo.getPostCategory()), SysPost::getPostCategory, bo.getPostCategory()) .likeIfText(SysPost::getPostCategory, bo.getPostCategory())
.like(StringUtils.isNotBlank(bo.getPostName()), SysPost::getPostName, bo.getPostName()) .likeIfText(SysPost::getPostName, bo.getPostName())
.eq(StringUtils.isNotBlank(bo.getStatus()), SysPost::getStatus, bo.getStatus()) .eqIfText(SysPost::getStatus, bo.getStatus())
.between(params.get("beginTime") != null && params.get("endTime") != null, .betweenParams(SysPost::getCreateTime, params, "beginTime", "endTime")
SysPost::getCreateTime, params.get("beginTime"), params.get("endTime"))
.orderByAsc(SysPost::getPostSort); .orderByAsc(SysPost::getPostSort);
if (ObjectUtil.isNotNull(bo.getDeptId())) { if (ObjectUtil.isNotNull(bo.getDeptId())) {
//优先单部门搜索 //优先单部门搜索
@@ -113,7 +110,7 @@ public class SysPostServiceImpl implements ISysPostService, PostService {
*/ */
@Override @Override
public List<SysPostVo> selectPostAll() { public List<SysPostVo> selectPostAll() {
return baseMapper.selectVoList(new QueryWrapper<>()); return baseMapper.lambda().voList();
} }
/** /**
@@ -147,10 +144,11 @@ public class SysPostServiceImpl implements ISysPostService, PostService {
*/ */
@Override @Override
public List<SysPostVo> selectPostByIds(Collection<Long> postIds) { public List<SysPostVo> selectPostByIds(Collection<Long> postIds) {
return baseMapper.selectVoList(new LambdaQueryWrapper<SysPost>() return baseMapper.lambda()
.select(SysPost::getPostId, SysPost::getPostName, SysPost::getPostCode) .select(SysPost::getPostId, SysPost::getPostName, SysPost::getPostCode)
.eq(SysPost::getStatus, SystemConstants.NORMAL) .eq(SysPost::getStatus, SystemConstants.NORMAL)
.in(CollUtil.isNotEmpty(postIds), SysPost::getPostId, postIds)); .in(CollUtil.isNotEmpty(postIds), SysPost::getPostId, postIds)
.voList();
} }
/** /**
@@ -161,10 +159,11 @@ public class SysPostServiceImpl implements ISysPostService, PostService {
*/ */
@Override @Override
public boolean checkPostNameUnique(SysPostBo post) { public boolean checkPostNameUnique(SysPostBo post) {
boolean exist = baseMapper.exists(new LambdaQueryWrapper<SysPost>() boolean exist = baseMapper.lambda()
.eq(SysPost::getPostName, post.getPostName()) .eq(SysPost::getPostName, post.getPostName())
.eq(SysPost::getDeptId, post.getDeptId()) .eq(SysPost::getDeptId, post.getDeptId())
.ne(ObjectUtil.isNotNull(post.getPostId()), SysPost::getPostId, post.getPostId())); .neIfPresent(SysPost::getPostId, post.getPostId())
.exists();
return !exist; return !exist;
} }
@@ -176,9 +175,10 @@ public class SysPostServiceImpl implements ISysPostService, PostService {
*/ */
@Override @Override
public boolean checkPostCodeUnique(SysPostBo post) { public boolean checkPostCodeUnique(SysPostBo post) {
boolean exist = baseMapper.exists(new LambdaQueryWrapper<SysPost>() boolean exist = baseMapper.lambda()
.eq(SysPost::getPostCode, post.getPostCode()) .eq(SysPost::getPostCode, post.getPostCode())
.ne(ObjectUtil.isNotNull(post.getPostId()), SysPost::getPostId, post.getPostId())); .neIfPresent(SysPost::getPostId, post.getPostId())
.exists();
return !exist; return !exist;
} }
@@ -190,7 +190,7 @@ public class SysPostServiceImpl implements ISysPostService, PostService {
*/ */
@Override @Override
public long countUserPostById(Long postId) { public long countUserPostById(Long postId) {
return userPostMapper.selectCount(new LambdaQueryWrapper<SysUserPost>().eq(SysUserPost::getPostId, postId)); return userPostMapper.lambda().eq(SysUserPost::getPostId, postId).count();
} }
/** /**
@@ -201,7 +201,7 @@ public class SysPostServiceImpl implements ISysPostService, PostService {
*/ */
@Override @Override
public long countPostByDeptId(Long deptId) { public long countPostByDeptId(Long deptId) {
return baseMapper.selectCount(new LambdaQueryWrapper<SysPost>().eq(SysPost::getDeptId, deptId)); return baseMapper.lambda().eq(SysPost::getDeptId, deptId).count();
} }
/** /**
@@ -267,11 +267,10 @@ public class SysPostServiceImpl implements ISysPostService, PostService {
if (CollUtil.isEmpty(postIds)) { if (CollUtil.isEmpty(postIds)) {
return Collections.emptyMap(); return Collections.emptyMap();
} }
List<SysPost> list = baseMapper.selectList( List<SysPost> list = baseMapper.lambda()
new LambdaQueryWrapper<SysPost>() .select(SysPost::getPostId, SysPost::getPostName)
.select(SysPost::getPostId, SysPost::getPostName) .in(SysPost::getPostId, postIds)
.in(SysPost::getPostId, postIds) .list();
);
return StreamUtils.toMap(list, SysPost::getPostId, SysPost::getPostName); return StreamUtils.toMap(list, SysPost::getPostId, SysPost::getPostName);
} }
@@ -6,9 +6,6 @@ import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.dromara.common.core.constant.CacheNames; import org.dromara.common.core.constant.CacheNames;
@@ -19,6 +16,7 @@ import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StreamUtils; import org.dromara.common.core.utils.StreamUtils;
import org.dromara.common.core.utils.StringUtils; import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.query.QueryBuilder;
import org.dromara.common.satoken.utils.LoginHelper; import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.system.api.RoleService; import org.dromara.system.api.RoleService;
import org.dromara.system.api.model.LoginUser; import org.dromara.system.api.model.LoginUser;
@@ -85,15 +83,14 @@ public class SysRoleServiceImpl implements ISysRoleService, RoleService {
*/ */
private Wrapper<SysRole> buildQueryWrapper(SysRoleBo bo) { private Wrapper<SysRole> buildQueryWrapper(SysRoleBo bo) {
Map<String, Object> params = bo.getParams(); Map<String, Object> params = bo.getParams();
LambdaQueryWrapper<SysRole> wrapper = Wrappers.lambdaQuery(); return QueryBuilder.lambda(SysRole.class)
wrapper.eq(ObjectUtil.isNotNull(bo.getRoleId()), SysRole::getRoleId, bo.getRoleId()) .eqIfPresent(SysRole::getRoleId, bo.getRoleId())
.like(StringUtils.isNotBlank(bo.getRoleName()), SysRole::getRoleName, bo.getRoleName()) .likeIfText(SysRole::getRoleName, bo.getRoleName())
.eq(StringUtils.isNotBlank(bo.getStatus()), SysRole::getStatus, bo.getStatus()) .eqIfText(SysRole::getStatus, bo.getStatus())
.like(StringUtils.isNotBlank(bo.getRoleKey()), SysRole::getRoleKey, bo.getRoleKey()) .likeIfText(SysRole::getRoleKey, bo.getRoleKey())
.between(params.get("beginTime") != null && params.get("endTime") != null, .betweenParams(SysRole::getCreateTime, params, "beginTime", "endTime")
SysRole::getCreateTime, params.get("beginTime"), params.get("endTime")) .orderByAsc(SysRole::getRoleSort, SysRole::getCreateTime)
.orderByAsc(SysRole::getRoleSort).orderByAsc(SysRole::getCreateTime); .build();
return wrapper;
} }
/** /**
@@ -186,9 +183,10 @@ public class SysRoleServiceImpl implements ISysRoleService, RoleService {
*/ */
@Override @Override
public List<SysRoleVo> selectRoleByIds(Collection<Long> roleIds) { public List<SysRoleVo> selectRoleByIds(Collection<Long> roleIds) {
return baseMapper.selectRoleList(new LambdaQueryWrapper<SysRole>() return baseMapper.selectRoleList(baseMapper.lambda()
.eq(SysRole::getStatus, SystemConstants.NORMAL) .eq(SysRole::getStatus, SystemConstants.NORMAL)
.in(CollUtil.isNotEmpty(roleIds), SysRole::getRoleId, roleIds)); .inIfNotEmpty(SysRole::getRoleId, roleIds)
.build());
} }
/** /**
@@ -199,9 +197,10 @@ public class SysRoleServiceImpl implements ISysRoleService, RoleService {
*/ */
@Override @Override
public boolean checkRoleNameUnique(SysRoleBo role) { public boolean checkRoleNameUnique(SysRoleBo role) {
boolean exist = baseMapper.exists(new LambdaQueryWrapper<SysRole>() boolean exist = baseMapper.lambda()
.eq(SysRole::getRoleName, role.getRoleName()) .eq(SysRole::getRoleName, role.getRoleName())
.ne(ObjectUtil.isNotNull(role.getRoleId()), SysRole::getRoleId, role.getRoleId())); .neIfPresent(SysRole::getRoleId, role.getRoleId())
.exists();
return !exist; return !exist;
} }
@@ -213,9 +212,10 @@ public class SysRoleServiceImpl implements ISysRoleService, RoleService {
*/ */
@Override @Override
public boolean checkRoleKeyUnique(SysRoleBo role) { public boolean checkRoleKeyUnique(SysRoleBo role) {
boolean exist = baseMapper.exists(new LambdaQueryWrapper<SysRole>() boolean exist = baseMapper.lambda()
.eq(SysRole::getRoleKey, role.getRoleKey()) .eq(SysRole::getRoleKey, role.getRoleKey())
.ne(ObjectUtil.isNotNull(role.getRoleId()), SysRole::getRoleId, role.getRoleId())); .neIfPresent(SysRole::getRoleId, role.getRoleId())
.exists();
return !exist; return !exist;
} }
@@ -286,7 +286,7 @@ public class SysRoleServiceImpl implements ISysRoleService, RoleService {
*/ */
@Override @Override
public long countUserRoleByRoleId(Long roleId) { public long countUserRoleByRoleId(Long roleId) {
return userRoleMapper.selectCount(new LambdaQueryWrapper<SysUserRole>().eq(SysUserRole::getRoleId, roleId)); return userRoleMapper.lambda().eq(SysUserRole::getRoleId, roleId).count();
} }
/** /**
@@ -337,10 +337,10 @@ public class SysRoleServiceImpl implements ISysRoleService, RoleService {
// 更新权限相关配置字段数据范围树联动 // 更新权限相关配置字段数据范围树联动
baseMapper.updateById(role); baseMapper.updateById(role);
// 先清理旧菜单权限再重建 // 先清理旧菜单权限再重建
roleMenuMapper.delete(new LambdaQueryWrapper<SysRoleMenu>().eq(SysRoleMenu::getRoleId, role.getRoleId())); roleMenuMapper.lambda().eq(SysRoleMenu::getRoleId, role.getRoleId()).delete();
insertRoleMenu(bo); insertRoleMenu(bo);
// 先清理旧数据权限再按当前配置重建 // 先清理旧数据权限再按当前配置重建
roleDeptMapper.delete(new LambdaQueryWrapper<SysRoleDept>().eq(SysRoleDept::getRoleId, role.getRoleId())); roleDeptMapper.lambda().eq(SysRoleDept::getRoleId, role.getRoleId()).delete();
return insertRoleDept(bo); return insertRoleDept(bo);
} }
@@ -356,10 +356,10 @@ public class SysRoleServiceImpl implements ISysRoleService, RoleService {
if (SystemConstants.DISABLE.equals(status) && this.countUserRoleByRoleId(roleId) > 0) { if (SystemConstants.DISABLE.equals(status) && this.countUserRoleByRoleId(roleId) > 0) {
throw new ServiceException("角色已分配,不能禁用!"); throw new ServiceException("角色已分配,不能禁用!");
} }
return baseMapper.update(null, return baseMapper.lambda()
new LambdaUpdateWrapper<SysRole>() .set(SysRole::getStatus, status)
.set(SysRole::getStatus, status) .eq(SysRole::getRoleId, roleId)
.eq(SysRole::getRoleId, roleId)); .updateCount();
} }
@@ -417,9 +417,9 @@ public class SysRoleServiceImpl implements ISysRoleService, RoleService {
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public int deleteRoleById(Long roleId) { public int deleteRoleById(Long roleId) {
// 删除角色与菜单关联 // 删除角色与菜单关联
roleMenuMapper.delete(new LambdaQueryWrapper<SysRoleMenu>().eq(SysRoleMenu::getRoleId, roleId)); roleMenuMapper.lambda().eq(SysRoleMenu::getRoleId, roleId).delete();
// 删除角色与部门关联 // 删除角色与部门关联
roleDeptMapper.delete(new LambdaQueryWrapper<SysRoleDept>().eq(SysRoleDept::getRoleId, roleId)); roleDeptMapper.lambda().eq(SysRoleDept::getRoleId, roleId).delete();
return baseMapper.deleteById(roleId); return baseMapper.deleteById(roleId);
} }
@@ -442,9 +442,9 @@ public class SysRoleServiceImpl implements ISysRoleService, RoleService {
} }
} }
// 删除角色与菜单关联 // 删除角色与菜单关联
roleMenuMapper.delete(new LambdaQueryWrapper<SysRoleMenu>().in(SysRoleMenu::getRoleId, roleIds)); roleMenuMapper.lambda().in(SysRoleMenu::getRoleId, roleIds).delete();
// 删除角色与部门关联 // 删除角色与部门关联
roleDeptMapper.delete(new LambdaQueryWrapper<SysRoleDept>().in(SysRoleDept::getRoleId, roleIds)); roleDeptMapper.lambda().in(SysRoleDept::getRoleId, roleIds).delete();
return baseMapper.deleteByIds(roleIds); return baseMapper.deleteByIds(roleIds);
} }
@@ -459,9 +459,10 @@ public class SysRoleServiceImpl implements ISysRoleService, RoleService {
if (LoginHelper.getUserId().equals(userRole.getUserId())) { if (LoginHelper.getUserId().equals(userRole.getUserId())) {
throw new ServiceException("不允许修改当前用户角色!"); throw new ServiceException("不允许修改当前用户角色!");
} }
int rows = userRoleMapper.delete(new LambdaQueryWrapper<SysUserRole>() int rows = userRoleMapper.lambda()
.eq(SysUserRole::getRoleId, userRole.getRoleId()) .eq(SysUserRole::getRoleId, userRole.getRoleId())
.eq(SysUserRole::getUserId, userRole.getUserId())); .eq(SysUserRole::getUserId, userRole.getUserId())
.deleteCount();
if (rows > 0) { if (rows > 0) {
cleanOnlineUser(List.of(userRole.getUserId())); cleanOnlineUser(List.of(userRole.getUserId()));
} }
@@ -480,9 +481,10 @@ public class SysRoleServiceImpl implements ISysRoleService, RoleService {
if (userIds.contains(LoginHelper.getUserId())) { if (userIds.contains(LoginHelper.getUserId())) {
throw new ServiceException("不允许修改当前用户角色!"); throw new ServiceException("不允许修改当前用户角色!");
} }
int rows = userRoleMapper.delete(new LambdaQueryWrapper<SysUserRole>() int rows = userRoleMapper.lambda()
.eq(SysUserRole::getRoleId, roleId) .eq(SysUserRole::getRoleId, roleId)
.in(SysUserRole::getUserId, userIds)); .in(SysUserRole::getUserId, userIds)
.deleteCount();
if (rows > 0) { if (rows > 0) {
cleanOnlineUser(userIds); cleanOnlineUser(userIds);
} }
@@ -532,7 +534,7 @@ public class SysRoleServiceImpl implements ISysRoleService, RoleService {
@Override @Override
public void cleanOnlineUserByRole(Long roleId) { public void cleanOnlineUserByRole(Long roleId) {
// 如果角色未绑定用户 直接返回 // 如果角色未绑定用户 直接返回
Long num = userRoleMapper.selectCount(new LambdaQueryWrapper<SysUserRole>().eq(SysUserRole::getRoleId, roleId)); Long num = userRoleMapper.lambda().eq(SysUserRole::getRoleId, roleId).count();
if (num == 0) { if (num == 0) {
return; return;
} }
@@ -607,11 +609,10 @@ public class SysRoleServiceImpl implements ISysRoleService, RoleService {
if (CollUtil.isEmpty(roleIds)) { if (CollUtil.isEmpty(roleIds)) {
return Collections.emptyMap(); return Collections.emptyMap();
} }
List<SysRole> list = baseMapper.selectList( List<SysRole> list = baseMapper.lambda()
new LambdaQueryWrapper<SysRole>() .select(SysRole::getRoleId, SysRole::getRoleName)
.select(SysRole::getRoleId, SysRole::getRoleName) .in(SysRole::getRoleId, roleIds)
.in(SysRole::getRoleId, roleIds) .list();
);
return StreamUtils.toMap(list, SysRole::getRoleId, SysRole::getRoleName); return StreamUtils.toMap(list, SysRole::getRoleId, SysRole::getRoleName);
} }
@@ -1,10 +1,7 @@
package org.dromara.system.service.impl; package org.dromara.system.service.impl;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.system.domain.SysSocial; import org.dromara.system.domain.SysSocial;
import org.dromara.system.domain.bo.SysSocialBo; import org.dromara.system.domain.bo.SysSocialBo;
import org.dromara.system.domain.vo.SysSocialVo; import org.dromara.system.domain.vo.SysSocialVo;
@@ -46,11 +43,11 @@ public class SysSocialServiceImpl implements ISysSocialService {
*/ */
@Override @Override
public List<SysSocialVo> queryList(SysSocialBo bo) { public List<SysSocialVo> queryList(SysSocialBo bo) {
LambdaQueryWrapper<SysSocial> lqw = new LambdaQueryWrapper<SysSocial>() return baseMapper.lambda()
.eq(ObjectUtil.isNotNull(bo.getUserId()), SysSocial::getUserId, bo.getUserId()) .eqIfPresent(SysSocial::getUserId, bo.getUserId())
.eq(StringUtils.isNotBlank(bo.getAuthId()), SysSocial::getAuthId, bo.getAuthId()) .eqIfText(SysSocial::getAuthId, bo.getAuthId())
.eq(StringUtils.isNotBlank(bo.getSource()), SysSocial::getSource, bo.getSource()); .eqIfText(SysSocial::getSource, bo.getSource())
return baseMapper.selectVoList(lqw); .voList();
} }
/** /**
@@ -61,7 +58,7 @@ public class SysSocialServiceImpl implements ISysSocialService {
*/ */
@Override @Override
public List<SysSocialVo> queryListByUserId(Long userId) { public List<SysSocialVo> queryListByUserId(Long userId) {
return baseMapper.selectVoList(new LambdaQueryWrapper<SysSocial>().eq(SysSocial::getUserId, userId)); return baseMapper.lambda().eq(SysSocial::getUserId, userId).voList();
} }
@@ -129,7 +126,7 @@ public class SysSocialServiceImpl implements ISysSocialService {
*/ */
@Override @Override
public List<SysSocialVo> selectByAuthId(String authId) { public List<SysSocialVo> selectByAuthId(String authId) {
return baseMapper.selectVoList(new LambdaQueryWrapper<SysSocial>().eq(SysSocial::getAuthId, authId)); return baseMapper.lambda().eq(SysSocial::getAuthId, authId).voList();
} }
} }
@@ -7,8 +7,6 @@ import cn.hutool.core.util.ArrayUtil;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@@ -18,6 +16,7 @@ import org.dromara.common.core.domain.PageResult;
import org.dromara.common.core.exception.ServiceException; import org.dromara.common.core.exception.ServiceException;
import org.dromara.common.core.utils.*; import org.dromara.common.core.utils.*;
import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.query.QueryBuilder;
import org.dromara.common.satoken.utils.LoginHelper; import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.system.api.UserService; import org.dromara.system.api.UserService;
import org.dromara.system.api.domain.UserDTO; import org.dromara.system.api.domain.UserDTO;
@@ -88,20 +87,21 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
*/ */
private Wrapper<SysUser> buildQueryWrapper(SysUserBo user) { private Wrapper<SysUser> buildQueryWrapper(SysUserBo user) {
Map<String, Object> params = user.getParams(); Map<String, Object> params = user.getParams();
LambdaQueryWrapper<SysUser> wrapper = Wrappers.lambdaQuery(); LambdaQueryWrapper<SysUser> wrapper = QueryBuilder.lambda(SysUser.class)
wrapper.eq(SysUser::getDelFlag, SystemConstants.NORMAL) .eq(SysUser::getDelFlag, SystemConstants.NORMAL)
.eq(ObjectUtil.isNotNull(user.getUserId()), SysUser::getUserId, user.getUserId()) .eqIfPresent(SysUser::getUserId, user.getUserId())
.in(StringUtils.isNotBlank(user.getUserIds()), SysUser::getUserId, StringUtils.splitTo(user.getUserIds(), Convert::toLong)) .in(StringUtils.isNotBlank(user.getUserIds()), SysUser::getUserId, StringUtils.splitTo(user.getUserIds(), Convert::toLong))
.like(StringUtils.isNotBlank(user.getUserName()), SysUser::getUserName, user.getUserName()) .likeIfText(SysUser::getUserName, user.getUserName())
.like(StringUtils.isNotBlank(user.getNickName()), SysUser::getNickName, user.getNickName()) .likeIfText(SysUser::getNickName, user.getNickName())
.eq(StringUtils.isNotBlank(user.getStatus()), SysUser::getStatus, user.getStatus()) .eqIfText(SysUser::getStatus, user.getStatus())
.like(StringUtils.isNotBlank(user.getPhoneNumber()), SysUser::getPhoneNumber, user.getPhoneNumber()) .likeIfText(SysUser::getPhoneNumber, user.getPhoneNumber())
.between(params.get("beginTime") != null && params.get("endTime") != null, .betweenParams(SysUser::getCreateTime, params, "beginTime", "endTime")
SysUser::getCreateTime, params.get("beginTime"), params.get("endTime"))
.and(ObjectUtil.isNotNull(user.getDeptId()), w -> { .and(ObjectUtil.isNotNull(user.getDeptId()), w -> {
List<Long> ids = deptMapper.selectDeptAndChildById(user.getDeptId()); List<Long> ids = deptMapper.selectDeptAndChildById(user.getDeptId());
w.in(SysUser::getDeptId, ids); w.in(SysUser::getDeptId, ids);
}).orderByAsc(SysUser::getUserId); })
.orderByAsc(SysUser::getUserId)
.build();
if (StringUtils.isNotBlank(user.getExcludeUserIds())) { if (StringUtils.isNotBlank(user.getExcludeUserIds())) {
wrapper.notIn(SysUser::getUserId, StringUtils.splitTo(user.getExcludeUserIds(), Convert::toLong)); wrapper.notIn(SysUser::getUserId, StringUtils.splitTo(user.getExcludeUserIds(), Convert::toLong));
} }
@@ -141,7 +141,7 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
*/ */
@Override @Override
public SysUserVo selectUserByUserName(String userName) { public SysUserVo selectUserByUserName(String userName) {
return baseMapper.selectVoOne(new LambdaQueryWrapper<SysUser>().eq(SysUser::getUserName, userName)); return baseMapper.lambda().eq(SysUser::getUserName, userName).voOne();
} }
/** /**
@@ -152,7 +152,7 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
*/ */
@Override @Override
public SysUserVo selectUserByPhoneNumber(String phoneNumber) { public SysUserVo selectUserByPhoneNumber(String phoneNumber) {
return baseMapper.selectVoOne(new LambdaQueryWrapper<SysUser>().eq(SysUser::getPhoneNumber, phoneNumber)); return baseMapper.lambda().eq(SysUser::getPhoneNumber, phoneNumber).voOne();
} }
/** /**
@@ -180,11 +180,12 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
*/ */
@Override @Override
public List<SysUserVo> selectUserByIds(Collection<Long> userIds, Long deptId) { public List<SysUserVo> selectUserByIds(Collection<Long> userIds, Long deptId) {
return baseMapper.selectUserList(new LambdaQueryWrapper<SysUser>() return baseMapper.selectUserList(baseMapper.lambda()
.select(SysUser::getUserId, SysUser::getUserName, SysUser::getNickName) .select(SysUser::getUserId, SysUser::getUserName, SysUser::getNickName)
.eq(SysUser::getStatus, SystemConstants.NORMAL) .eq(SysUser::getStatus, SystemConstants.NORMAL)
.eq(ObjectUtil.isNotNull(deptId), SysUser::getDeptId, deptId) .eqIfPresent(SysUser::getDeptId, deptId)
.in(CollUtil.isNotEmpty(userIds), SysUser::getUserId, userIds)); .inIfNotEmpty(SysUser::getUserId, userIds)
.build());
} }
/** /**
@@ -225,9 +226,10 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
*/ */
@Override @Override
public boolean checkUserNameUnique(SysUserBo user) { public boolean checkUserNameUnique(SysUserBo user) {
boolean exist = baseMapper.exists(new LambdaQueryWrapper<SysUser>() boolean exist = baseMapper.lambda()
.eq(SysUser::getUserName, user.getUserName()) .eq(SysUser::getUserName, user.getUserName())
.ne(ObjectUtil.isNotNull(user.getUserId()), SysUser::getUserId, user.getUserId())); .neIfPresent(SysUser::getUserId, user.getUserId())
.exists();
return !exist; return !exist;
} }
@@ -238,9 +240,10 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
*/ */
@Override @Override
public boolean checkPhoneUnique(SysUserBo user) { public boolean checkPhoneUnique(SysUserBo user) {
boolean exist = baseMapper.exists(new LambdaQueryWrapper<SysUser>() boolean exist = baseMapper.lambda()
.eq(SysUser::getPhoneNumber, user.getPhoneNumber()) .eq(SysUser::getPhoneNumber, user.getPhoneNumber())
.ne(ObjectUtil.isNotNull(user.getUserId()), SysUser::getUserId, user.getUserId())); .neIfPresent(SysUser::getUserId, user.getUserId())
.exists();
return !exist; return !exist;
} }
@@ -251,9 +254,10 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
*/ */
@Override @Override
public boolean checkEmailUnique(SysUserBo user) { public boolean checkEmailUnique(SysUserBo user) {
boolean exist = baseMapper.exists(new LambdaQueryWrapper<SysUser>() boolean exist = baseMapper.lambda()
.eq(SysUser::getEmail, user.getEmail()) .eq(SysUser::getEmail, user.getEmail())
.ne(ObjectUtil.isNotNull(user.getUserId()), SysUser::getUserId, user.getUserId())); .neIfPresent(SysUser::getUserId, user.getUserId())
.exists();
return !exist; return !exist;
} }
@@ -365,10 +369,10 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
*/ */
@Override @Override
public int updateUserStatus(Long userId, String status) { public int updateUserStatus(Long userId, String status) {
return baseMapper.update(null, return baseMapper.lambda()
new LambdaUpdateWrapper<SysUser>() .set(SysUser::getStatus, status)
.set(SysUser::getStatus, status) .eq(SysUser::getUserId, userId)
.eq(SysUser::getUserId, userId)); .updateCount();
} }
/** /**
@@ -380,13 +384,13 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
@CacheEvict(cacheNames = CacheNames.SYS_NICKNAME, key = "#user.userId") @CacheEvict(cacheNames = CacheNames.SYS_NICKNAME, key = "#user.userId")
@Override @Override
public int updateUserProfile(SysUserBo user) { public int updateUserProfile(SysUserBo user) {
return baseMapper.update(null, return baseMapper.lambda()
new LambdaUpdateWrapper<SysUser>() .setIfPresent(SysUser::getNickName, user.getNickName())
.set(ObjectUtil.isNotNull(user.getNickName()), SysUser::getNickName, user.getNickName()) .set(SysUser::getPhoneNumber, user.getPhoneNumber())
.set(SysUser::getPhoneNumber, user.getPhoneNumber()) .set(SysUser::getEmail, user.getEmail())
.set(SysUser::getEmail, user.getEmail()) .set(SysUser::getGender, user.getGender())
.set(SysUser::getGender, user.getGender()) .eq(SysUser::getUserId, user.getUserId())
.eq(SysUser::getUserId, user.getUserId())); .updateCount();
} }
/** /**
@@ -398,10 +402,10 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
*/ */
@Override @Override
public boolean updateUserAvatar(Long userId, Long avatar) { public boolean updateUserAvatar(Long userId, Long avatar) {
return baseMapper.update(null, return baseMapper.lambda()
new LambdaUpdateWrapper<SysUser>() .set(SysUser::getAvatar, avatar)
.set(SysUser::getAvatar, avatar) .eq(SysUser::getUserId, userId)
.eq(SysUser::getUserId, userId)) > 0; .update();
} }
/** /**
@@ -413,10 +417,10 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
*/ */
@Override @Override
public int resetUserPwd(Long userId, String password) { public int resetUserPwd(Long userId, String password) {
return baseMapper.update(null, return baseMapper.lambda()
new LambdaUpdateWrapper<SysUser>() .set(SysUser::getPassword, password)
.set(SysUser::getPassword, password) .eq(SysUser::getUserId, userId)
.eq(SysUser::getUserId, userId)); .updateCount();
} }
/** /**
@@ -449,7 +453,7 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
// 是否清除旧的用户岗位绑定 // 是否清除旧的用户岗位绑定
if (clear) { if (clear) {
userPostMapper.delete(new LambdaQueryWrapper<SysUserPost>().eq(SysUserPost::getUserId, user.getUserId())); userPostMapper.lambda().eq(SysUserPost::getUserId, user.getUserId()).delete();
} }
// 构建用户岗位关联列表并批量插入 // 构建用户岗位关联列表并批量插入
@@ -494,7 +498,7 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
// 是否清除原有绑定 // 是否清除原有绑定
if (clear) { if (clear) {
userRoleMapper.delete(new LambdaQueryWrapper<SysUserRole>().eq(SysUserRole::getUserId, userId)); userRoleMapper.lambda().eq(SysUserRole::getUserId, userId).delete();
} }
// 批量插入用户-角色关联 // 批量插入用户-角色关联
@@ -518,9 +522,9 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public int deleteUserById(Long userId) { public int deleteUserById(Long userId) {
// 删除用户与角色关联 // 删除用户与角色关联
userRoleMapper.delete(new LambdaQueryWrapper<SysUserRole>().eq(SysUserRole::getUserId, userId)); userRoleMapper.lambda().eq(SysUserRole::getUserId, userId).delete();
// 删除用户与岗位表 // 删除用户与岗位表
userPostMapper.delete(new LambdaQueryWrapper<SysUserPost>().eq(SysUserPost::getUserId, userId)); userPostMapper.lambda().eq(SysUserPost::getUserId, userId).delete();
// 防止更新失败导致的数据删除 // 防止更新失败导致的数据删除
int flag = baseMapper.deleteById(userId); int flag = baseMapper.deleteById(userId);
if (flag < 1) { if (flag < 1) {
@@ -544,9 +548,9 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
} }
List<Long> ids = List.of(userIds); List<Long> ids = List.of(userIds);
// 删除用户与角色关联 // 删除用户与角色关联
userRoleMapper.delete(new LambdaQueryWrapper<SysUserRole>().in(SysUserRole::getUserId, ids)); userRoleMapper.lambda().in(SysUserRole::getUserId, ids).delete();
// 删除用户与岗位表 // 删除用户与岗位表
userPostMapper.delete(new LambdaQueryWrapper<SysUserPost>().in(SysUserPost::getUserId, ids)); userPostMapper.lambda().in(SysUserPost::getUserId, ids).delete();
// 防止更新失败导致的数据删除 // 防止更新失败导致的数据删除
int flag = baseMapper.deleteByIds(ids); int flag = baseMapper.deleteByIds(ids);
if (flag < 1) { if (flag < 1) {
@@ -563,10 +567,10 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
*/ */
@Override @Override
public List<SysUserVo> selectUserListByDept(Long deptId) { public List<SysUserVo> selectUserListByDept(Long deptId) {
LambdaQueryWrapper<SysUser> lqw = Wrappers.lambdaQuery(); return baseMapper.lambda()
lqw.eq(SysUser::getDeptId, deptId); .eq(SysUser::getDeptId, deptId)
lqw.orderByAsc(SysUser::getUserId); .orderByAsc(SysUser::getUserId)
return baseMapper.selectVoList(lqw); .voList();
} }
/** /**
@@ -578,8 +582,10 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
@Cacheable(cacheNames = CacheNames.SYS_USER_NAME, key = "#userId") @Cacheable(cacheNames = CacheNames.SYS_USER_NAME, key = "#userId")
@Override @Override
public String selectUserNameById(Long userId) { public String selectUserNameById(Long userId) {
SysUser sysUser = baseMapper.selectOne(new LambdaQueryWrapper<SysUser>() SysUser sysUser = baseMapper.lambda()
.select(SysUser::getUserName).eq(SysUser::getUserId, userId)); .select(SysUser::getUserName)
.eq(SysUser::getUserId, userId)
.one();
return ObjectUtils.notNullGetter(sysUser, SysUser::getUserName); return ObjectUtils.notNullGetter(sysUser, SysUser::getUserName);
} }
@@ -592,8 +598,10 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
@Override @Override
@Cacheable(cacheNames = CacheNames.SYS_NICKNAME, key = "#userId") @Cacheable(cacheNames = CacheNames.SYS_NICKNAME, key = "#userId")
public String selectNicknameById(Long userId) { public String selectNicknameById(Long userId) {
SysUser sysUser = baseMapper.selectOne(new LambdaQueryWrapper<SysUser>() SysUser sysUser = baseMapper.lambda()
.select(SysUser::getNickName).eq(SysUser::getUserId, userId)); .select(SysUser::getNickName)
.eq(SysUser::getUserId, userId)
.one();
return ObjectUtils.notNullGetter(sysUser, SysUser::getNickName); return ObjectUtils.notNullGetter(sysUser, SysUser::getNickName);
} }
@@ -623,8 +631,10 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
*/ */
@Override @Override
public String selectPhonenumberById(Long userId) { public String selectPhonenumberById(Long userId) {
SysUser sysUser = baseMapper.selectOne(new LambdaQueryWrapper<SysUser>() SysUser sysUser = baseMapper.lambda()
.select(SysUser::getPhoneNumber).eq(SysUser::getUserId, userId)); .select(SysUser::getPhoneNumber)
.eq(SysUser::getUserId, userId)
.one();
return ObjectUtils.notNullGetter(sysUser, SysUser::getPhoneNumber); return ObjectUtils.notNullGetter(sysUser, SysUser::getPhoneNumber);
} }
@@ -636,8 +646,10 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
*/ */
@Override @Override
public String selectEmailById(Long userId) { public String selectEmailById(Long userId) {
SysUser sysUser = baseMapper.selectOne(new LambdaQueryWrapper<SysUser>() SysUser sysUser = baseMapper.lambda()
.select(SysUser::getEmail).eq(SysUser::getUserId, userId)); .select(SysUser::getEmail)
.eq(SysUser::getUserId, userId)
.one();
return ObjectUtils.notNullGetter(sysUser, SysUser::getEmail); return ObjectUtils.notNullGetter(sysUser, SysUser::getEmail);
} }
@@ -649,13 +661,14 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
*/ */
@Override @Override
public UserDTO selectById(Long userId) { public UserDTO selectById(Long userId) {
SysUserVo vo = baseMapper.selectVoOne(new LambdaQueryWrapper<SysUser>() SysUserVo vo = baseMapper.lambda()
.select(SysUser::getUserId, SysUser::getDeptId, SysUser::getUserName, .select(SysUser::getUserId, SysUser::getDeptId, SysUser::getUserName,
SysUser::getNickName, SysUser::getUserType, SysUser::getEmail, SysUser::getNickName, SysUser::getUserType, SysUser::getEmail,
SysUser::getPhoneNumber, SysUser::getGender, SysUser::getStatus, SysUser::getPhoneNumber, SysUser::getGender, SysUser::getStatus,
SysUser::getCreateTime) SysUser::getCreateTime)
.eq(SysUser::getStatus, SystemConstants.NORMAL) .eq(SysUser::getStatus, SystemConstants.NORMAL)
.eq(SysUser::getUserId, userId)); .eq(SysUser::getUserId, userId)
.voOne();
return BeanUtil.copyProperties(vo, UserDTO.class); return BeanUtil.copyProperties(vo, UserDTO.class);
} }
@@ -670,13 +683,14 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
if (CollUtil.isEmpty(userIds)) { if (CollUtil.isEmpty(userIds)) {
return List.of(); return List.of();
} }
List<SysUserVo> list = baseMapper.selectVoList(new LambdaQueryWrapper<SysUser>() List<SysUserVo> list = baseMapper.lambda()
.select(SysUser::getUserId, SysUser::getDeptId, SysUser::getUserName, .select(SysUser::getUserId, SysUser::getDeptId, SysUser::getUserName,
SysUser::getNickName, SysUser::getUserType, SysUser::getEmail, SysUser::getNickName, SysUser::getUserType, SysUser::getEmail,
SysUser::getPhoneNumber, SysUser::getGender, SysUser::getStatus, SysUser::getPhoneNumber, SysUser::getGender, SysUser::getStatus,
SysUser::getCreateTime) SysUser::getCreateTime)
.eq(SysUser::getStatus, SystemConstants.NORMAL) .eq(SysUser::getStatus, SystemConstants.NORMAL)
.in(SysUser::getUserId, userIds)); .in(SysUser::getUserId, userIds)
.voList();
return BeanUtil.copyToList(list, UserDTO.class); return BeanUtil.copyToList(list, UserDTO.class);
} }
@@ -691,8 +705,7 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
if (CollUtil.isEmpty(roleIds)) { if (CollUtil.isEmpty(roleIds)) {
return List.of(); return List.of();
} }
List<SysUserRole> userRoles = userRoleMapper.selectList( List<SysUserRole> userRoles = userRoleMapper.lambda().in(SysUserRole::getRoleId, roleIds).list();
new LambdaQueryWrapper<SysUserRole>().in(SysUserRole::getRoleId, roleIds));
return StreamUtils.toList(userRoles, SysUserRole::getUserId); return StreamUtils.toList(userRoles, SysUserRole::getUserId);
} }
@@ -709,8 +722,7 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
} }
// 通过角色ID获取用户角色信息 // 通过角色ID获取用户角色信息
List<SysUserRole> userRoles = userRoleMapper.selectList( List<SysUserRole> userRoles = userRoleMapper.lambda().in(SysUserRole::getRoleId, roleIds).list();
new LambdaQueryWrapper<SysUserRole>().in(SysUserRole::getRoleId, roleIds));
// 获取用户ID列表 // 获取用户ID列表
Set<Long> userIds = StreamUtils.toSet(userRoles, SysUserRole::getUserId); Set<Long> userIds = StreamUtils.toSet(userRoles, SysUserRole::getUserId);
@@ -729,10 +741,11 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
if (CollUtil.isEmpty(deptIds)) { if (CollUtil.isEmpty(deptIds)) {
return List.of(); return List.of();
} }
List<SysUserVo> list = baseMapper.selectVoList(new LambdaQueryWrapper<SysUser>() List<SysUserVo> list = baseMapper.lambda()
.select(SysUser::getUserId, SysUser::getUserName, SysUser::getNickName, SysUser::getEmail, SysUser::getPhoneNumber) .select(SysUser::getUserId, SysUser::getUserName, SysUser::getNickName, SysUser::getEmail, SysUser::getPhoneNumber)
.eq(SysUser::getStatus, SystemConstants.NORMAL) .eq(SysUser::getStatus, SystemConstants.NORMAL)
.in(SysUser::getDeptId, deptIds)); .in(SysUser::getDeptId, deptIds)
.voList();
return BeanUtil.copyToList(list, UserDTO.class); return BeanUtil.copyToList(list, UserDTO.class);
} }
@@ -749,8 +762,7 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
} }
// 通过岗位ID获取用户岗位信息 // 通过岗位ID获取用户岗位信息
List<SysUserPost> userPosts = userPostMapper.selectList( List<SysUserPost> userPosts = userPostMapper.lambda().in(SysUserPost::getPostId, postIds).list();
new LambdaQueryWrapper<SysUserPost>().in(SysUserPost::getPostId, postIds));
// 获取用户ID列表 // 获取用户ID列表
Set<Long> userIds = StreamUtils.toSet(userPosts, SysUserPost::getUserId); Set<Long> userIds = StreamUtils.toSet(userPosts, SysUserPost::getUserId);
@@ -769,11 +781,10 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
if (CollUtil.isEmpty(userIds)) { if (CollUtil.isEmpty(userIds)) {
return Collections.emptyMap(); return Collections.emptyMap();
} }
List<SysUser> list = baseMapper.selectList( List<SysUser> list = baseMapper.lambda()
new LambdaQueryWrapper<SysUser>() .select(SysUser::getUserId, SysUser::getNickName)
.select(SysUser::getUserId, SysUser::getNickName) .in(SysUser::getUserId, userIds)
.in(SysUser::getUserId, userIds) .list();
);
return StreamUtils.toMap(list, SysUser::getUserId, SysUser::getNickName); return StreamUtils.toMap(list, SysUser::getUserId, SysUser::getNickName);
} }
@@ -1,8 +1,6 @@
package org.dromara.workflow.mapper; package org.dromara.workflow.mapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
import org.dromara.common.mybatis.helper.DataBaseHelper;
import org.dromara.workflow.domain.FlowCategory; import org.dromara.workflow.domain.FlowCategory;
import org.dromara.workflow.domain.vo.FlowCategoryVo; import org.dromara.workflow.domain.vo.FlowCategoryVo;
@@ -25,9 +23,10 @@ public interface FlwCategoryMapper extends BaseMapperPlus<FlowCategory, FlowCate
* @return 包含子流程分类的列表 * @return 包含子流程分类的列表
*/ */
default List<FlowCategory> selectListByParentId(Long parentId) { default List<FlowCategory> selectListByParentId(Long parentId) {
return this.selectList(new LambdaQueryWrapper<FlowCategory>() return this.lambda()
.select(FlowCategory::getCategoryId) .select(FlowCategory::getCategoryId)
.apply(DataBaseHelper.findInSet(parentId, "ancestors"))); .findInSet(parentId, FlowCategory::getAncestors)
.list();
} }
/** /**
@@ -1,7 +1,6 @@
package org.dromara.workflow.mapper; package org.dromara.workflow.mapper;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
import org.dromara.workflow.domain.FlowInstanceBizExt; import org.dromara.workflow.domain.FlowInstanceBizExt;
@@ -23,8 +22,9 @@ public interface FlwInstanceBizExtMapper extends BaseMapperPlus<FlowInstanceBizE
*/ */
default int saveOrUpdateByInstanceId(FlowInstanceBizExt entity) { default int saveOrUpdateByInstanceId(FlowInstanceBizExt entity) {
// 查询是否存在 // 查询是否存在
FlowInstanceBizExt exist = this.selectOne(new LambdaQueryWrapper<FlowInstanceBizExt>() FlowInstanceBizExt exist = this.lambda()
.eq(FlowInstanceBizExt::getInstanceId, entity.getInstanceId())); .eq(FlowInstanceBizExt::getInstanceId, entity.getInstanceId())
.one();
if (ObjectUtil.isNotNull(exist)) { if (ObjectUtil.isNotNull(exist)) {
// 存在就带上主键更新 // 存在就带上主键更新
@@ -43,8 +43,7 @@ public interface FlwInstanceBizExtMapper extends BaseMapperPlus<FlowInstanceBizE
* @return 删除的行数 * @return 删除的行数
*/ */
default int deleteByInstId(Long instanceId) { default int deleteByInstId(Long instanceId) {
return this.delete(new LambdaQueryWrapper<FlowInstanceBizExt>() return this.lambda().eq(FlowInstanceBizExt::getInstanceId, instanceId).deleteCount();
.eq(FlowInstanceBizExt::getInstanceId, instanceId));
} }
/** /**
@@ -54,8 +53,7 @@ public interface FlwInstanceBizExtMapper extends BaseMapperPlus<FlowInstanceBizE
* @return 删除的行数 * @return 删除的行数
*/ */
default int deleteByInstIds(Collection<Long> instanceIds) { default int deleteByInstIds(Collection<Long> instanceIds) {
return this.delete(new LambdaQueryWrapper<FlowInstanceBizExt>() return this.lambda().in(FlowInstanceBizExt::getInstanceId, instanceIds).deleteCount();
.in(FlowInstanceBizExt::getInstanceId, instanceIds));
} }
} }
@@ -10,7 +10,6 @@ import lombok.RequiredArgsConstructor;
import org.dromara.common.core.constant.SystemConstants; import org.dromara.common.core.constant.SystemConstants;
import org.dromara.common.core.exception.ServiceException; import org.dromara.common.core.exception.ServiceException;
import org.dromara.common.core.utils.*; import org.dromara.common.core.utils.*;
import org.dromara.common.mybatis.helper.DataBaseHelper;
import org.dromara.warm.flow.core.service.DefService; import org.dromara.warm.flow.core.service.DefService;
import org.dromara.warm.flow.orm.entity.FlowDefinition; import org.dromara.warm.flow.orm.entity.FlowDefinition;
import org.dromara.warm.flow.ui.service.CategoryService; import org.dromara.warm.flow.ui.service.CategoryService;
@@ -64,8 +63,10 @@ public class FlwCategoryServiceImpl implements IFlwCategoryService, CategoryServ
if (ObjectUtil.isNull(categoryId)) { if (ObjectUtil.isNull(categoryId)) {
return null; return null;
} }
FlowCategory category = baseMapper.selectOne(new LambdaQueryWrapper<FlowCategory>() FlowCategory category = baseMapper.lambda()
.select(FlowCategory::getCategoryName).eq(FlowCategory::getCategoryId, categoryId)); .select(FlowCategory::getCategoryName)
.eq(FlowCategory::getCategoryId, categoryId)
.one();
return ObjectUtils.notNullGetter(category, FlowCategory::getCategoryName); return ObjectUtils.notNullGetter(category, FlowCategory::getCategoryName);
} }
@@ -80,9 +81,10 @@ public class FlwCategoryServiceImpl implements IFlwCategoryService, CategoryServ
if (CollUtil.isEmpty(categoryIds)) { if (CollUtil.isEmpty(categoryIds)) {
return Collections.emptyMap(); return Collections.emptyMap();
} }
List<FlowCategory> list = baseMapper.selectList(new LambdaQueryWrapper<FlowCategory>() List<FlowCategory> list = baseMapper.lambda()
.select(FlowCategory::getCategoryId, FlowCategory::getCategoryName) .select(FlowCategory::getCategoryId, FlowCategory::getCategoryName)
.in(FlowCategory::getCategoryId, categoryIds)); .in(FlowCategory::getCategoryId, categoryIds)
.list();
return StreamUtils.toMap(list, FlowCategory::getCategoryId, FlowCategory::getCategoryName); return StreamUtils.toMap(list, FlowCategory::getCategoryId, FlowCategory::getCategoryName);
} }
@@ -145,10 +147,11 @@ public class FlwCategoryServiceImpl implements IFlwCategoryService, CategoryServ
*/ */
@Override @Override
public boolean checkCategoryNameUnique(FlowCategoryBo category) { public boolean checkCategoryNameUnique(FlowCategoryBo category) {
boolean exist = baseMapper.exists(new LambdaQueryWrapper<FlowCategory>() boolean exist = baseMapper.lambda()
.eq(FlowCategory::getCategoryName, category.getCategoryName()) .eq(FlowCategory::getCategoryName, category.getCategoryName())
.eq(FlowCategory::getParentId, category.getParentId()) .eq(FlowCategory::getParentId, category.getParentId())
.ne(ObjectUtil.isNotNull(category.getCategoryId()), FlowCategory::getCategoryId, category.getCategoryId())); .neIfPresent(FlowCategory::getCategoryId, category.getCategoryId())
.exists();
return !exist; return !exist;
} }
@@ -173,8 +176,7 @@ public class FlwCategoryServiceImpl implements IFlwCategoryService, CategoryServ
*/ */
@Override @Override
public boolean hasChildByCategoryId(Long categoryId) { public boolean hasChildByCategoryId(Long categoryId) {
return baseMapper.exists(new LambdaQueryWrapper<FlowCategory>() return baseMapper.lambda().eq(FlowCategory::getParentId, categoryId).exists();
.eq(FlowCategory::getParentId, categoryId));
} }
/** /**
@@ -255,8 +257,9 @@ public class FlwCategoryServiceImpl implements IFlwCategoryService, CategoryServ
* @param oldAncestors 旧的父ID集合 * @param oldAncestors 旧的父ID集合
*/ */
private void updateCategoryChildren(Long categoryId, String newAncestors, String oldAncestors) { private void updateCategoryChildren(Long categoryId, String newAncestors, String oldAncestors) {
List<FlowCategory> children = baseMapper.selectList(new LambdaQueryWrapper<FlowCategory>() List<FlowCategory> children = baseMapper.lambda()
.apply(DataBaseHelper.findInSet(categoryId, "ancestors"))); .findInSet(categoryId, FlowCategory::getAncestors)
.list();
List<FlowCategory> list = new ArrayList<>(); List<FlowCategory> list = new ArrayList<>();
for (FlowCategory child : children) { for (FlowCategory child : children) {
FlowCategory category = new FlowCategory(); FlowCategory category = new FlowCategory();
@@ -16,6 +16,7 @@ import org.dromara.common.core.utils.StreamUtils;
import org.dromara.common.core.utils.StringUtils; import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.json.utils.JsonUtils; import org.dromara.common.json.utils.JsonUtils;
import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.query.QueryBuilder;
import org.dromara.warm.flow.core.dto.DefJson; import org.dromara.warm.flow.core.dto.DefJson;
import org.dromara.warm.flow.core.enums.NodeType; import org.dromara.warm.flow.core.enums.NodeType;
import org.dromara.warm.flow.core.enums.PublishStatus; import org.dromara.warm.flow.core.enums.PublishStatus;
@@ -121,7 +122,8 @@ public class FlwDefinitionServiceImpl implements IFlwDefinitionService {
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public boolean publish(Long id) { public boolean publish(Long id) {
List<FlowNode> flowNodes = flowNodeMapper.selectList(new LambdaQueryWrapper<FlowNode>().eq(FlowNode::getDefinitionId, id)); List<FlowNode> flowNodes = flowNodeMapper.selectList(
QueryBuilder.lambda(FlowNode.class).eq(FlowNode::getDefinitionId, id).build());
List<String> errorMsg = new ArrayList<>(); List<String> errorMsg = new ArrayList<>();
if (CollUtil.isNotEmpty(flowNodes)) { if (CollUtil.isNotEmpty(flowNodes)) {
String applyNodeCode = flwCommonService.applyNodeCode(id); String applyNodeCode = flwCommonService.applyNodeCode(id);
@@ -4,8 +4,7 @@ import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.convert.Convert; import cn.hutool.core.convert.Convert;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.github.yulichang.toolkit.JoinWrappers; import com.github.yulichang.toolkit.JoinWrappers;
import com.github.yulichang.wrapper.MPJLambdaWrapper; import com.github.yulichang.wrapper.MPJLambdaWrapper;
@@ -17,6 +16,7 @@ import org.dromara.common.core.exception.ServiceException;
import org.dromara.common.core.utils.StreamUtils; import org.dromara.common.core.utils.StreamUtils;
import org.dromara.common.core.utils.StringUtils; import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.query.QueryBuilder;
import org.dromara.common.satoken.utils.LoginHelper; import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.warm.flow.core.FlowEngine; import org.dromara.warm.flow.core.FlowEngine;
import org.dromara.warm.flow.core.constant.ExceptionCons; import org.dromara.warm.flow.core.constant.ExceptionCons;
@@ -185,7 +185,10 @@ public class FlwInstanceServiceImpl implements IFlwInstanceService {
*/ */
@Override @Override
public FlowInstance selectInstByBusinessId(String businessId) { public FlowInstance selectInstByBusinessId(String businessId) {
return flowInstanceMapper.selectOne(new LambdaQueryWrapper<FlowInstance>().eq(FlowInstance::getBusinessId, businessId)); return flowInstanceMapper.selectOne(
QueryBuilder.lambda(FlowInstance.class)
.eq(FlowInstance::getBusinessId, businessId)
.build());
} }
/** /**
@@ -219,7 +222,10 @@ public class FlwInstanceServiceImpl implements IFlwInstanceService {
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public boolean deleteByBusinessIds(List<String> businessIds) { public boolean deleteByBusinessIds(List<String> businessIds) {
List<FlowInstance> flowInstances = flowInstanceMapper.selectList(new LambdaQueryWrapper<FlowInstance>().in(FlowInstance::getBusinessId, businessIds)); List<FlowInstance> flowInstances = flowInstanceMapper.selectList(
QueryBuilder.lambda(FlowInstance.class)
.in(FlowInstance::getBusinessId, businessIds)
.build());
if (CollUtil.isEmpty(flowInstances)) { if (CollUtil.isEmpty(flowInstances)) {
log.warn("未找到对应的流程实例信息,无法执行删除操作。"); log.warn("未找到对应的流程实例信息,无法执行删除操作。");
return false; return false;
@@ -393,10 +399,11 @@ public class FlwInstanceServiceImpl implements IFlwInstanceService {
// 再组装历史任务已处理任务 // 再组装历史任务已处理任务
List<FlowHisTaskVo> hisTaskVos = new ArrayList<>(); List<FlowHisTaskVo> hisTaskVos = new ArrayList<>();
List<FlowHisTask> hisTasks = flowHisTaskMapper.selectList( List<FlowHisTask> hisTasks = flowHisTaskMapper.selectList(
new LambdaQueryWrapper<FlowHisTask>() QueryBuilder.lambda(FlowHisTask.class)
.eq(FlowHisTask::getInstanceId, instanceId) .eq(FlowHisTask::getInstanceId, instanceId)
.eq(FlowHisTask::getNodeType, NodeType.BETWEEN.getKey()) .eq(FlowHisTask::getNodeType, NodeType.BETWEEN.getKey())
.orderByDesc(FlowHisTask::getUpdateTime) .orderByDesc(FlowHisTask::getUpdateTime)
.build()
); );
if (CollUtil.isNotEmpty(hisTasks)) { if (CollUtil.isNotEmpty(hisTasks)) {
hisTaskVos = BeanUtil.copyToList(hisTasks, FlowHisTaskVo.class); hisTaskVos = BeanUtil.copyToList(hisTasks, FlowHisTaskVo.class);
@@ -418,10 +425,9 @@ public class FlwInstanceServiceImpl implements IFlwInstanceService {
*/ */
@Override @Override
public void updateStatus(Long instanceId, String status) { public void updateStatus(Long instanceId, String status) {
LambdaUpdateWrapper<FlowInstance> wrapper = new LambdaUpdateWrapper<>(); flowInstanceMapper.update(Wrappers.lambdaUpdate(FlowInstance.class)
wrapper.set(FlowInstance::getFlowStatus, status); .set(FlowInstance::getFlowStatus, status)
wrapper.eq(FlowInstance::getId, instanceId); .eq(FlowInstance::getId, instanceId));
flowInstanceMapper.update(wrapper);
} }
/** /**
@@ -1,7 +1,6 @@
package org.dromara.workflow.service.impl; package org.dromara.workflow.service.impl;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -135,9 +134,10 @@ public class FlwSpelServiceImpl implements IFlwSpelService {
*/ */
private void validEntityBeforeSave(FlowSpel entity){ private void validEntityBeforeSave(FlowSpel entity){
if (StringUtils.isNotBlank(entity.getViewSpel())) { if (StringUtils.isNotBlank(entity.getViewSpel())) {
boolean exists = baseMapper.exists(new LambdaQueryWrapper<FlowSpel>() boolean exists = baseMapper.lambda()
.eq(FlowSpel::getViewSpel, entity.getViewSpel()) .eq(FlowSpel::getViewSpel, entity.getViewSpel())
.ne(ObjectUtil.isNotNull(entity.getId()), FlowSpel::getId, entity.getId())); .neIfPresent(FlowSpel::getId, entity.getId())
.exists();
if (exists) { if (exists) {
throw new ServiceException("SpEL表达式已存在,请勿重复添加"); throw new ServiceException("SpEL表达式已存在,请勿重复添加");
} }
@@ -193,11 +193,10 @@ public class FlwSpelServiceImpl implements IFlwSpelService {
if (CollUtil.isEmpty(viewSpels)) { if (CollUtil.isEmpty(viewSpels)) {
return Collections.emptyMap(); return Collections.emptyMap();
} }
List<FlowSpel> list = baseMapper.selectList( List<FlowSpel> list = baseMapper.lambda()
new LambdaQueryWrapper<FlowSpel>() .select(FlowSpel::getViewSpel, FlowSpel::getRemark)
.select(FlowSpel::getViewSpel, FlowSpel::getRemark) .in(FlowSpel::getViewSpel, viewSpels)
.in(FlowSpel::getViewSpel, viewSpels) .list();
);
return StreamUtils.toMap(list, FlowSpel::getViewSpel, x -> return StreamUtils.toMap(list, FlowSpel::getViewSpel, x ->
StringUtils.isEmpty(x.getRemark()) ? "" : x.getRemark() StringUtils.isEmpty(x.getRemark()) ? "" : x.getRemark()
); );
@@ -7,7 +7,6 @@ import cn.hutool.core.lang.Dict;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import com.baomidou.lock.annotation.Lock4j; import com.baomidou.lock.annotation.Lock4j;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@@ -21,6 +20,7 @@ import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup; import org.dromara.common.core.validate.EditGroup;
import org.dromara.common.json.utils.JsonUtils; import org.dromara.common.json.utils.JsonUtils;
import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.query.QueryBuilder;
import org.dromara.common.mybatis.utils.IdGeneratorUtil; import org.dromara.common.mybatis.utils.IdGeneratorUtil;
import org.dromara.common.satoken.utils.LoginHelper; import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.system.api.domain.UserDTO; import org.dromara.system.api.domain.UserDTO;
@@ -121,8 +121,9 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
FlowInstanceBizExt bizExt = startProcessBo.getBizExt(); FlowInstanceBizExt bizExt = startProcessBo.getBizExt();
// 获取已有流程实例 // 获取已有流程实例
FlowInstance flowInstance = flowInstanceMapper.selectOne(new LambdaQueryWrapper<>(FlowInstance.class) FlowInstance flowInstance = flowInstanceMapper.selectOne(QueryBuilder.lambda(FlowInstance.class)
.eq(FlowInstance::getBusinessId, businessId)); .eq(FlowInstance::getBusinessId, businessId)
.build());
if (ObjectUtil.isNotNull(flowInstance)) { if (ObjectUtil.isNotNull(flowInstance)) {
// 已存在流程 // 已存在流程
@@ -339,8 +340,9 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
} }
// 添加抄送人记录 // 添加抄送人记录
FlowHisTask flowHisTask = flowHisTaskMapper.selectList( FlowHisTask flowHisTask = flowHisTaskMapper.selectList(
new LambdaQueryWrapper<>(FlowHisTask.class) QueryBuilder.lambda(FlowHisTask.class)
.eq(FlowHisTask::getTaskId, task.getId())).get(0); .eq(FlowHisTask::getTaskId, task.getId())
.build()).get(0);
FlowNode flowNode = new FlowNode(); FlowNode flowNode = new FlowNode();
flowNode.setNodeCode(flowHisTask.getTargetNodeCode()); flowNode.setNodeCode(flowHisTask.getTargetNodeCode());
flowNode.setNodeName(flowHisTask.getTargetNodeName()); flowNode.setNodeName(flowHisTask.getTargetNodeName());
@@ -599,7 +601,9 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
*/ */
@Override @Override
public List<FlowTask> selectByIdList(Collection<Long> taskIdList) { public List<FlowTask> selectByIdList(Collection<Long> taskIdList) {
return flowTaskMapper.selectList(new LambdaQueryWrapper<>(FlowTask.class).in(FlowTask::getId, taskIdList)); return flowTaskMapper.selectList(QueryBuilder.lambda(FlowTask.class)
.in(FlowTask::getId, taskIdList)
.build());
} }
/** /**
@@ -713,7 +717,9 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
*/ */
@Override @Override
public FlowHisTask selectHisTaskById(Long taskId) { public FlowHisTask selectHisTaskById(Long taskId) {
return flowHisTaskMapper.selectOne(new LambdaQueryWrapper<>(FlowHisTask.class).eq(FlowHisTask::getId, taskId)); return flowHisTaskMapper.selectOne(QueryBuilder.lambda(FlowHisTask.class)
.eq(FlowHisTask::getId, taskId)
.build());
} }
/** /**
@@ -724,7 +730,9 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
*/ */
@Override @Override
public List<FlowTask> selectByInstId(Long instanceId) { public List<FlowTask> selectByInstId(Long instanceId) {
return flowTaskMapper.selectList(new LambdaQueryWrapper<>(FlowTask.class).eq(FlowTask::getInstanceId, instanceId)); return flowTaskMapper.selectList(QueryBuilder.lambda(FlowTask.class)
.eq(FlowTask::getInstanceId, instanceId)
.build());
} }
/** /**
@@ -735,7 +743,9 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
*/ */
@Override @Override
public List<FlowTask> selectByInstIds(Collection<Long> instanceIds) { public List<FlowTask> selectByInstIds(Collection<Long> instanceIds) {
return flowTaskMapper.selectList(new LambdaQueryWrapper<>(FlowTask.class).in(FlowTask::getInstanceId, instanceIds)); return flowTaskMapper.selectList(QueryBuilder.lambda(FlowTask.class)
.in(FlowTask::getInstanceId, instanceIds)
.build());
} }
/** /**
@@ -746,7 +756,9 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
*/ */
@Override @Override
public boolean isTaskEnd(Long instanceId) { public boolean isTaskEnd(Long instanceId) {
boolean exists = flowTaskMapper.exists(new LambdaQueryWrapper<FlowTask>().eq(FlowTask::getInstanceId, instanceId)); boolean exists = flowTaskMapper.exists(QueryBuilder.lambda(FlowTask.class)
.eq(FlowTask::getInstanceId, instanceId)
.build());
return !exists; return !exists;
} }
@@ -897,9 +909,10 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
*/ */
@Override @Override
public FlowNode getByNodeCode(String nodeCode, Long definitionId) { public FlowNode getByNodeCode(String nodeCode, Long definitionId) {
return flowNodeMapper.selectOne(new LambdaQueryWrapper<FlowNode>() return flowNodeMapper.selectOne(QueryBuilder.lambda(FlowNode.class)
.eq(FlowNode::getNodeCode, nodeCode) .eq(FlowNode::getNodeCode, nodeCode)
.eq(FlowNode::getDefinitionId, definitionId)); .eq(FlowNode::getDefinitionId, definitionId)
.build());
} }
/** /**