package com.fjhx.email.config.base; import cn.hutool.core.util.ObjectUtil; 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.core.toolkit.support.SFunction; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import java.util.List; import java.util.Map; import java.util.Objects; import java.util.function.Consumer; import java.util.stream.Collectors; @SuppressWarnings("unused") public interface BaseService extends IService { default Page page(BaseSelectDto baseSelectDto, Consumer> consumer) { return page(baseSelectDto.getPage(), Wrappers.lambdaQuery().func(consumer)); } default long count(Consumer> consumer) { return count(Wrappers.lambdaQuery().func(ObjectUtil.isNotEmpty(consumer), consumer)); } default T getOne(Consumer> consumer) { return getOne(Wrappers.lambdaQuery().func(ObjectUtil.isNotEmpty(consumer), consumer).last("limit 1")); } default List list(Consumer> consumer) { return list(Wrappers.lambdaQuery().func(ObjectUtil.isNotEmpty(consumer), consumer)); } default List> listMaps(Consumer> consumer) { return listMaps(Wrappers.lambdaQuery().func(ObjectUtil.isNotEmpty(consumer), consumer)); } default List listK(SFunction mapper, Consumer> consumer) { List list = list(Wrappers.lambdaQuery().select(mapper).func(ObjectUtil.isNotEmpty(consumer), consumer)); return list.stream().map(mapper).filter(Objects::nonNull).distinct().collect(Collectors.toList()); } default Map mapKV(SFunction kFun, SFunction vFun, Consumer> consumer) { List list = list(Wrappers.lambdaQuery().select(kFun, vFun).func(ObjectUtil.isNotEmpty(consumer), consumer)); return list.stream().collect(Collectors.toMap(kFun, vFun, (v1, v2) -> v2)); } default Map mapKEntity(SFunction kFun, Consumer> consumer) { List list = list(Wrappers.lambdaQuery().func(ObjectUtil.isNotEmpty(consumer), consumer)); return list.stream().collect(Collectors.toMap(kFun, item -> item, (v1, v2) -> v2)); } default Map> mapKGroup(SFunction kFun, Consumer> consumer) { List list = list(Wrappers.lambdaQuery().func(ObjectUtil.isNotEmpty(consumer), consumer)); return list.stream().collect(Collectors.groupingBy(kFun)); } default boolean update(Consumer> consumer) { return update(Wrappers.lambdaUpdate().func(ObjectUtil.isNotEmpty(consumer), consumer)); } default boolean remove(Consumer> consumer) { return remove(Wrappers.lambdaQuery().func(ObjectUtil.isNotEmpty(consumer), consumer)); } }