refactor(framework): 优化Bean拷贝工具类并更新相关实体类结构

This commit is contained in:
2026-01-07 16:19:08 +08:00
parent 595ab093b9
commit 1165eabb4b
95 changed files with 661 additions and 546 deletions
@@ -13,10 +13,9 @@
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*/ */
package cn.odboy.framework.mybatisplus.core; package cn.odboy.framework.mybatisplus.core;
import cn.hutool.core.bean.BeanUtil; import cn.odboy.util.KitBeanUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; 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.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -42,7 +41,7 @@ public class KitMpAnyQUtil {
if (mapperTarget == null) { if (mapperTarget == null) {
return null; return null;
} }
return BeanUtil.copyProperties(mapperTarget, mapperClazz); return KitBeanUtil.copyToClass(mapperTarget, mapperClazz);
} }
public static <T> List<T> selectList(BaseMapper<T> baseMapper, Object queryParams) { public static <T> List<T> selectList(BaseMapper<T> baseMapper, Object queryParams) {
@@ -56,7 +55,7 @@ public class KitMpAnyQUtil {
if (mapperTarget == null) { if (mapperTarget == null) {
return new ArrayList<>(); return new ArrayList<>();
} }
return BeanUtil.copyToList(mapperTarget, mapperClazz); return KitBeanUtil.copyToList(mapperTarget, mapperClazz);
} }
public static <T> Long selectCount(BaseMapper<T> baseMapper, Object queryParams) { public static <T> Long selectCount(BaseMapper<T> baseMapper, Object queryParams) {
@@ -74,7 +73,7 @@ public class KitMpAnyQUtil {
QueryWrapper<T> queryWrapper = KitMpQUtil.build(queryParams); QueryWrapper<T> queryWrapper = KitMpQUtil.build(queryParams);
Page<T> tPage = baseMapper.selectPage(page, queryWrapper); Page<T> tPage = baseMapper.selectPage(page, queryWrapper);
Page<M> mapperTarget = new Page<>(); Page<M> mapperTarget = new Page<>();
mapperTarget.setRecords(BeanUtil.copyToList(tPage.getRecords(), mapperClazz)); mapperTarget.setRecords(KitBeanUtil.copyToList(tPage.getRecords(), mapperClazz));
mapperTarget.setTotal(tPage.getTotal()); mapperTarget.setTotal(tPage.getTotal());
mapperTarget.setSize(tPage.getSize()); mapperTarget.setSize(tPage.getSize());
mapperTarget.setCurrent(tPage.getCurrent()); mapperTarget.setCurrent(tPage.getCurrent());
@@ -13,7 +13,6 @@
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*/ */
package cn.odboy.framework.mybatisplus.core; package cn.odboy.framework.mybatisplus.core;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
@@ -13,7 +13,6 @@
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*/ */
package cn.odboy.framework.mybatisplus.core; package cn.odboy.framework.mybatisplus.core;
import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.collection.CollectionUtil;
@@ -27,14 +26,15 @@ import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import java.lang.reflect.Field; import java.lang.reflect.Field;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.Collection; import java.util.Collection;
import java.util.List; import java.util.List;
import java.util.Optional; import java.util.Optional;
import java.util.stream.Collectors;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
/** /**
@@ -84,21 +84,47 @@ public class KitMpQUtil {
private static <R> void handleWrapper(KitMpQuery q, QueryWrapper<R> queryWrapper, String attributeName, private static <R> void handleWrapper(KitMpQuery q, QueryWrapper<R> queryWrapper, String attributeName,
Object fieldVal) { Object fieldVal) {
switch (q.type()) { switch (q.type()) {
case EQUAL -> queryWrapper.eq(attributeName, fieldVal); case EQUAL:
case GREATER_THAN -> queryWrapper.ge(attributeName, fieldVal); queryWrapper.eq(attributeName, fieldVal);
case LESS_THAN -> queryWrapper.le(attributeName, fieldVal); break;
case LESS_THAN_NQ -> queryWrapper.lt(attributeName, fieldVal); case GREATER_THAN:
case INNER_LIKE -> queryWrapper.like(attributeName, fieldVal); queryWrapper.ge(attributeName, fieldVal);
case LEFT_LIKE -> queryWrapper.likeLeft(attributeName, fieldVal); break;
case RIGHT_LIKE -> queryWrapper.likeRight(attributeName, fieldVal); case LESS_THAN:
case IN -> handleInOrNotQuery(true, queryWrapper, attributeName, fieldVal); queryWrapper.le(attributeName, fieldVal);
case NOT_IN -> handleInOrNotQuery(false, queryWrapper, attributeName, fieldVal); break;
case NOT_EQUAL -> queryWrapper.ne(attributeName, fieldVal); case LESS_THAN_NQ:
case NOT_NULL -> queryWrapper.isNotNull(attributeName); queryWrapper.lt(attributeName, fieldVal);
case IS_NULL -> queryWrapper.isNull(attributeName); break;
case BETWEEN -> handleBetweenQuery(queryWrapper, fieldVal, attributeName); case INNER_LIKE:
default -> { queryWrapper.like(attributeName, fieldVal);
} break;
case LEFT_LIKE:
queryWrapper.likeLeft(attributeName, fieldVal);
break;
case RIGHT_LIKE:
queryWrapper.likeRight(attributeName, fieldVal);
break;
case IN:
handleInOrNotQuery(true, queryWrapper, attributeName, fieldVal);
break;
case NOT_IN:
handleInOrNotQuery(false, queryWrapper, attributeName, fieldVal);
break;
case NOT_EQUAL:
queryWrapper.ne(attributeName, fieldVal);
break;
case NOT_NULL:
queryWrapper.isNotNull(attributeName);
break;
case IS_NULL:
queryWrapper.isNull(attributeName);
break;
case BETWEEN:
handleBetweenQuery(queryWrapper, fieldVal, attributeName);
break;
default:
break;
} }
} }
@@ -152,7 +178,8 @@ public class KitMpQUtil {
* @param <R> / * @param <R> /
*/ */
private static <R> void handleBlurryQuery(QueryWrapper<R> queryWrapper, String blurry, Object fieldVal) { private static <R> void handleBlurryQuery(QueryWrapper<R> queryWrapper, String blurry, Object fieldVal) {
List<String> blurryList = Arrays.stream(blurry.split(",")).filter(StrUtil::isNotBlank).distinct().toList(); List<String> blurryList =
Arrays.stream(blurry.split(",")).filter(StrUtil::isNotBlank).distinct().collect(Collectors.toList());
queryWrapper.and(wrapper -> { queryWrapper.and(wrapper -> {
for (String blurryItem : blurryList) { for (String blurryItem : blurryList) {
String column = StrUtil.toUnderlineCase(blurryItem); String column = StrUtil.toUnderlineCase(blurryItem);
@@ -171,7 +198,7 @@ public class KitMpQUtil {
} }
public static void main(String[] args) { public static void main(String[] args) {
QueryWrapper<TestDomain> query = new QueryWrapper<>(); QueryWrapper<TestDomain> query = new QueryWrapper<TestDomain>();
query.or(wrapper -> wrapper.eq("username", 1).or().eq("nickname", 2)); query.or(wrapper -> wrapper.eq("username", 1).or().eq("nickname", 2));
query.eq("id", 1); query.eq("id", 1);
query.orderByDesc("id"); query.orderByDesc("id");
@@ -13,13 +13,12 @@
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*/ */
package cn.odboy.framework.mybatisplus.core.interfaces; package cn.odboy.framework.mybatisplus.core.interfaces;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ReflectUtil; import cn.hutool.core.util.ReflectUtil;
import cn.odboy.base.KitPageResult; import cn.odboy.base.KitPageResult;
import cn.odboy.util.KitBeanUtil;
import cn.odboy.util.KitPageUtil; import cn.odboy.util.KitPageUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
@@ -111,7 +110,7 @@ public interface KitMpMapper<E> extends BaseMapper<E> {
if (CollUtil.isEmpty(list)) { if (CollUtil.isEmpty(list)) {
return new ArrayList<>(); return new ArrayList<>();
} }
return BeanUtil.copyToList(list, clazz); return KitBeanUtil.copyToList(list, clazz);
} }
/** /**
@@ -126,7 +125,7 @@ public interface KitMpMapper<E> extends BaseMapper<E> {
if (CollUtil.isEmpty(list)) { if (CollUtil.isEmpty(list)) {
return new ArrayList<>(); return new ArrayList<>();
} }
return BeanUtil.copyToList(list, clazz); return KitBeanUtil.copyToList(list, clazz);
} }
/** /**
@@ -147,7 +146,7 @@ public interface KitMpMapper<E> extends BaseMapper<E> {
if (CollUtil.isEmpty(pageInfo.getRecords())) { if (CollUtil.isEmpty(pageInfo.getRecords())) {
return new KitPageResult<>(new ArrayList<>(), pageInfo.getTotal()); return new KitPageResult<>(new ArrayList<>(), pageInfo.getTotal());
} }
return new KitPageResult<>(BeanUtil.copyToList(pageInfo.getRecords(), clazz), pageInfo.getTotal()); return new KitPageResult<>(KitBeanUtil.copyToList(pageInfo.getRecords(), clazz), pageInfo.getTotal());
} }
/** /**
@@ -168,7 +167,7 @@ public interface KitMpMapper<E> extends BaseMapper<E> {
if (CollUtil.isEmpty(pageInfo.getRecords())) { if (CollUtil.isEmpty(pageInfo.getRecords())) {
return KitPageUtil.emptyListData(); return KitPageUtil.emptyListData();
} }
return new KitPageResult<>(BeanUtil.copyToList(pageInfo.getRecords(), clazz), pageInfo.getTotal()); return new KitPageResult<>(KitBeanUtil.copyToList(pageInfo.getRecords(), clazz), pageInfo.getTotal());
} }
/** /**
@@ -183,6 +182,6 @@ public interface KitMpMapper<E> extends BaseMapper<E> {
if (e == null) { if (e == null) {
return null; return null;
} }
return BeanUtil.copyProperties(e, clazz); return KitBeanUtil.copyToClass(e, clazz);
} }
} }
@@ -13,7 +13,6 @@
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*/ */
package cn.odboy.framework.mybatisplus.core.interfaces; package cn.odboy.framework.mybatisplus.core.interfaces;
import cn.odboy.base.KitPageResult; import cn.odboy.base.KitPageResult;
@@ -49,11 +48,11 @@ public interface KitMpService<T> extends IService<T> {
<G> List<G> queryFeatureClazzListByIds(List<Serializable> ids, Class<G> targetClazz); <G> List<G> queryFeatureClazzListByIds(List<Serializable> ids, Class<G> targetClazz);
<Q> List<T> queryClazzListByArgs(Q criteria); <Q> List<T> queryClazzListByArgs(Q args);
List<T> queryClazzListByArgs(LambdaQueryWrapper<T> wrapper); List<T> queryClazzListByArgs(LambdaQueryWrapper<T> wrapper);
<G, Q> List<G> queryFeatureClazzListByArgs(Q criteria, Class<G> targetClazz); <G, Q> List<G> queryFeatureClazzListByArgs(Q args, Class<G> targetClazz);
<G> List<G> queryFeatureClazzListByArgs(LambdaQueryWrapper<T> wrapper, Class<G> targetClazz); <G> List<G> queryFeatureClazzListByArgs(LambdaQueryWrapper<T> wrapper, Class<G> targetClazz);
@@ -62,9 +61,9 @@ public interface KitMpService<T> extends IService<T> {
<G> KitPageResult<G> queryFeatureClazzPageByArgs(LambdaQueryWrapper<T> wrapper, IPage<T> pageable, <G> KitPageResult<G> queryFeatureClazzPageByArgs(LambdaQueryWrapper<T> wrapper, IPage<T> pageable,
Class<G> targetClazz); Class<G> targetClazz);
<G, Q> KitPageResult<G> queryFeatureClazzPageByArgs(Q criteria, IPage<T> pageable, Class<G> targetClazz); <G, Q> KitPageResult<G> queryFeatureClazzPageByArgs(Q args, IPage<T> pageable, Class<G> targetClazz);
<Q> KitPageResult<T> queryClazzPageByArgs(Q criteria, IPage<T> pageable); <Q> KitPageResult<T> queryClazzPageByArgs(Q args, IPage<T> pageable);
int modifyClazzByArgs(LambdaQueryWrapper<T> wrapper, T entity); int modifyClazzByArgs(LambdaQueryWrapper<T> wrapper, T entity);
@@ -13,14 +13,13 @@
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*/ */
package cn.odboy.framework.mybatisplus.core.interfaces; package cn.odboy.framework.mybatisplus.core.interfaces;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.odboy.base.KitPageResult; import cn.odboy.base.KitPageResult;
import cn.odboy.framework.exception.BadRequestException; import cn.odboy.framework.exception.BadRequestException;
import cn.odboy.framework.mybatisplus.core.KitMpQUtil; import cn.odboy.framework.mybatisplus.core.KitMpQUtil;
import cn.odboy.util.KitBeanUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; 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.enums.SqlMethod; import com.baomidou.mybatisplus.core.enums.SqlMethod;
@@ -46,7 +45,7 @@ public class KitMpServiceImpl<M extends KitMpMapper<T>, T> extends ServiceImpl<M
* @param resources / * @param resources /
*/ */
public <G> int saveFeatureClazz(G resources) { public <G> int saveFeatureClazz(G resources) {
return getBaseMapper().insert(BeanUtil.copyProperties(resources, this.getEntityClass())); return getBaseMapper().insert(KitBeanUtil.copyToClass(resources, this.getEntityClass()));
} }
/** /**
@@ -55,7 +54,7 @@ public class KitMpServiceImpl<M extends KitMpMapper<T>, T> extends ServiceImpl<M
* @param resources / * @param resources /
*/ */
public <G> int saveFeatureClazzList(List<G> resources) { public <G> int saveFeatureClazzList(List<G> resources) {
return getBaseMapper().insertBatchSomeColumn(BeanUtil.copyToList(resources, this.getEntityClass())); return getBaseMapper().insertBatchSomeColumn(KitBeanUtil.copyToList(resources, this.getEntityClass()));
} }
/** /**
@@ -64,7 +63,7 @@ public class KitMpServiceImpl<M extends KitMpMapper<T>, T> extends ServiceImpl<M
* @param resources / * @param resources /
*/ */
public <G> int modifyFeatureClazzById(G resources) { public <G> int modifyFeatureClazzById(G resources) {
return getBaseMapper().updateById(BeanUtil.copyProperties(resources, this.getEntityClass())); return getBaseMapper().updateById(KitBeanUtil.copyToClass(resources, this.getEntityClass()));
} }
/** /**
@@ -77,7 +76,7 @@ public class KitMpServiceImpl<M extends KitMpMapper<T>, T> extends ServiceImpl<M
String sqlStatement = this.getSqlStatement(SqlMethod.UPDATE_BY_ID); String sqlStatement = this.getSqlStatement(SqlMethod.UPDATE_BY_ID);
return this.executeBatch(resources, batchSize, (sqlSession, entity) -> { return this.executeBatch(resources, batchSize, (sqlSession, entity) -> {
MapperMethod.ParamMap<T> param = new MapperMethod.ParamMap<>(); MapperMethod.ParamMap<T> param = new MapperMethod.ParamMap<>();
param.put("et", BeanUtil.copyProperties(entity, this.getEntityClass())); param.put("et", KitBeanUtil.copyToClass(entity, this.getEntityClass()));
sqlSession.update(sqlStatement, param); sqlSession.update(sqlStatement, param);
}); });
} }
@@ -90,7 +89,7 @@ public class KitMpServiceImpl<M extends KitMpMapper<T>, T> extends ServiceImpl<M
*/ */
public <G> G queryFeatureClazzById(Serializable id, Class<G> targetClazz) { public <G> G queryFeatureClazzById(Serializable id, Class<G> targetClazz) {
T entity = this.getById(id); T entity = this.getById(id);
return entity == null ? null : BeanUtil.copyProperties(entity, targetClazz); return entity == null ? null : KitBeanUtil.copyToClass(entity, targetClazz);
} }
/** /**
@@ -127,7 +126,7 @@ public class KitMpServiceImpl<M extends KitMpMapper<T>, T> extends ServiceImpl<M
if (ts.isEmpty()) { if (ts.isEmpty()) {
return null; return null;
} }
return BeanUtil.copyProperties(ts.stream().findFirst().get(), clazz); return KitBeanUtil.copyToClass(ts.stream().findFirst().get(), clazz);
} }
/** /**
@@ -138,17 +137,16 @@ public class KitMpServiceImpl<M extends KitMpMapper<T>, T> extends ServiceImpl<M
*/ */
public <G> List<G> queryFeatureClazzListByIds(List<Serializable> ids, Class<G> targetClazz) { public <G> List<G> queryFeatureClazzListByIds(List<Serializable> ids, Class<G> targetClazz) {
List<T> entitys = this.listByIds(ids); List<T> entitys = this.listByIds(ids);
return entitys == null || entitys.isEmpty() ? CollUtil.newArrayList() return entitys == null || entitys.isEmpty() ? CollUtil.newArrayList() : KitBeanUtil.copyToList(entitys, targetClazz);
: BeanUtil.copyToList(entitys, targetClazz);
} }
/** /**
* 查有关的数据 * 查有关的数据
* *
* @param criteria 动态条件 * @param args 动态条件
*/ */
public <Q> List<T> queryClazzListByArgs(Q criteria) { public <Q> List<T> queryClazzListByArgs(Q args) {
QueryWrapper<T> predicate = KitMpQUtil.build(criteria); QueryWrapper<T> predicate = KitMpQUtil.build(args);
return baseMapper.selectList(predicate); return baseMapper.selectList(predicate);
} }
@@ -167,13 +165,13 @@ public class KitMpServiceImpl<M extends KitMpMapper<T>, T> extends ServiceImpl<M
/** /**
* 查有关的数据并转成目标类型的数据 * 查有关的数据并转成目标类型的数据
* *
* @param criteria 动态条件 * @param args 动态条件
* @param targetClazz 目标类型 * @param targetClazz 目标类型
*/ */
public <G, Q> List<G> queryFeatureClazzListByArgs(Q criteria, Class<G> targetClazz) { public <G, Q> List<G> queryFeatureClazzListByArgs(Q args, Class<G> targetClazz) {
QueryWrapper<T> predicate = KitMpQUtil.build(criteria); QueryWrapper<T> predicate = KitMpQUtil.build(args);
List<T> data = baseMapper.selectList(predicate); List<T> data = baseMapper.selectList(predicate);
return BeanUtil.copyToList(data, targetClazz); return KitBeanUtil.copyToList(data, targetClazz);
} }
/** /**
@@ -186,7 +184,7 @@ public class KitMpServiceImpl<M extends KitMpMapper<T>, T> extends ServiceImpl<M
if (wrapper == null) { if (wrapper == null) {
wrapper = new LambdaQueryWrapper<>(); wrapper = new LambdaQueryWrapper<>();
} }
return BeanUtil.copyToList(baseMapper.selectList(wrapper), targetClazz); return KitBeanUtil.copyToList(baseMapper.selectList(wrapper), targetClazz);
} }
/** /**
@@ -216,19 +214,19 @@ public class KitMpServiceImpl<M extends KitMpMapper<T>, T> extends ServiceImpl<M
wrapper = new LambdaQueryWrapper<>(); wrapper = new LambdaQueryWrapper<>();
} }
IPage<T> originPageData = baseMapper.selectPage(pageable, wrapper); IPage<T> originPageData = baseMapper.selectPage(pageable, wrapper);
return new KitPageResult<>(BeanUtil.copyToList(originPageData.getRecords(), targetClazz), return new KitPageResult<>(KitBeanUtil.copyToList(originPageData.getRecords(), targetClazz),
originPageData.getTotal()); originPageData.getTotal());
} }
public <G, Q> KitPageResult<G> queryFeatureClazzPageByArgs(Q criteria, IPage<T> pageable, Class<G> targetClazz) { public <G, Q> KitPageResult<G> queryFeatureClazzPageByArgs(Q args, IPage<T> pageable, Class<G> targetClazz) {
QueryWrapper<T> wrapper = KitMpQUtil.build(criteria); QueryWrapper<T> wrapper = KitMpQUtil.build(args);
IPage<T> originPageData = baseMapper.selectPage(pageable, wrapper); IPage<T> originPageData = baseMapper.selectPage(pageable, wrapper);
return new KitPageResult<>(BeanUtil.copyToList(originPageData.getRecords(), targetClazz), return new KitPageResult<>(KitBeanUtil.copyToList(originPageData.getRecords(), targetClazz),
originPageData.getTotal()); originPageData.getTotal());
} }
public <Q> KitPageResult<T> queryClazzPageByArgs(Q criteria, IPage<T> pageable) { public <Q> KitPageResult<T> queryClazzPageByArgs(Q args, IPage<T> pageable) {
QueryWrapper<T> wrapper = KitMpQUtil.build(criteria); QueryWrapper<T> wrapper = KitMpQUtil.build(args);
IPage<T> originPageData = baseMapper.selectPage(pageable, wrapper); IPage<T> originPageData = baseMapper.selectPage(pageable, wrapper);
return new KitPageResult<>(originPageData.getRecords(), originPageData.getTotal()); return new KitPageResult<>(originPageData.getRecords(), originPageData.getTotal());
} }
@@ -1,4 +1,3 @@
/* /*
* Copyright 2021-2025 Odboy * Copyright 2021-2025 Odboy
* *
@@ -14,7 +13,6 @@
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*/ */
package cn.odboy.util; package cn.odboy.util;
import cn.odboy.annotation.AnonymousAccess; import cn.odboy.annotation.AnonymousAccess;
@@ -30,7 +28,7 @@ import lombok.experimental.UtilityClass;
import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContext;
import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.method.HandlerMethod; import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.mvc.condition.PathPatternsRequestCondition; import org.springframework.web.servlet.mvc.condition.PatternsRequestCondition;
import org.springframework.web.servlet.mvc.method.RequestMappingInfo; import org.springframework.web.servlet.mvc.method.RequestMappingInfo;
import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping; import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping;
@@ -48,9 +46,9 @@ public class KitAnonTagUtil {
*/ */
public static Map<String, Set<String>> getAnonymousUrl(final ApplicationContext applicationContext) { public static Map<String, Set<String>> getAnonymousUrl(final ApplicationContext applicationContext) {
RequestMappingHandlerMapping requestMappingHandlerMapping = RequestMappingHandlerMapping requestMappingHandlerMapping =
applicationContext.getBean(RequestMappingHandlerMapping.class); (RequestMappingHandlerMapping) applicationContext.getBean("requestMappingHandlerMapping");
Map<RequestMappingInfo, HandlerMethod> handlerMethodMap = requestMappingHandlerMapping.getHandlerMethods(); Map<RequestMappingInfo, HandlerMethod> handlerMethodMap = requestMappingHandlerMapping.getHandlerMethods();
Map<String, java.util.Set<String>> anonymousUrls = new HashMap<>(8); Map<String, Set<String>> anonymousUrls = new HashMap<>(8);
// 获取匿名标记 // 获取匿名标记
Set<String> get = new HashSet<>(); Set<String> get = new HashSet<>();
Set<String> post = new HashSet<>(); Set<String> post = new HashSet<>();
@@ -66,15 +64,27 @@ public class KitAnonTagUtil {
new ArrayList<>(infoEntry.getKey().getMethodsCondition().getMethods()); new ArrayList<>(infoEntry.getKey().getMethodsCondition().getMethods());
RequestMethodEnum request = RequestMethodEnum.find( RequestMethodEnum request = RequestMethodEnum.find(
requestMethods.isEmpty() ? RequestMethodEnum.ALL.getType() : requestMethods.get(0).name()); requestMethods.isEmpty() ? RequestMethodEnum.ALL.getType() : requestMethods.get(0).name());
PathPatternsRequestCondition pathPatternsCondition = infoEntry.getKey().getPathPatternsCondition(); PatternsRequestCondition patternsCondition = infoEntry.getKey().getPatternsCondition();
if (pathPatternsCondition != null) { if (patternsCondition != null) {
switch (Objects.requireNonNull(request)) { switch (Objects.requireNonNull(request)) {
case GET -> get.addAll(pathPatternsCondition.getPatternValues()); case GET:
case POST -> post.addAll(pathPatternsCondition.getPatternValues()); get.addAll(patternsCondition.getPatterns());
case PUT -> put.addAll(pathPatternsCondition.getPatternValues()); break;
case PATCH -> patch.addAll(pathPatternsCondition.getPatternValues()); case POST:
case DELETE -> delete.addAll(pathPatternsCondition.getPatternValues()); post.addAll(patternsCondition.getPatterns());
default -> all.addAll(pathPatternsCondition.getPatternValues()); break;
case PUT:
put.addAll(patternsCondition.getPatterns());
break;
case PATCH:
patch.addAll(patternsCondition.getPatterns());
break;
case DELETE:
delete.addAll(patternsCondition.getPatterns());
break;
default:
all.addAll(patternsCondition.getPatterns());
break;
} }
} }
} }
@@ -13,7 +13,6 @@
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*/ */
package cn.odboy.util; package cn.odboy.util;
import cn.hutool.core.codec.Base64Encoder; import cn.hutool.core.codec.Base64Encoder;
@@ -0,0 +1,34 @@
package cn.odboy.util;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.bean.copier.CopyOptions;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import lombok.experimental.UtilityClass;
/**
* Bean拷贝相关
*
* @author odboy
* @date 2026-01-06
*/
@UtilityClass
public class KitBeanUtil {
public static <T> T copyToClass(Object source, Class<T> tClass) {
return BeanUtil.copyProperties(source, tClass);
}
public static void copyToTarget(Object source, Object target) {
BeanUtil.copyProperties(source, target, CopyOptions.create().setIgnoreNullValue(true));
}
public static <T> List<T> copyToList(Collection<?> collection, Class<T> targetType) {
List<T> ts = BeanUtil.copyToList(collection, targetType);
if (ts == null) {
return new ArrayList<>(0);
}
return ts;
}
}
@@ -1,4 +1,3 @@
/* /*
* Copyright 2021-2025 Odboy * Copyright 2021-2025 Odboy
* *
@@ -14,7 +13,6 @@
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*/ */
package cn.odboy.util; package cn.odboy.util;
import java.math.BigDecimal; import java.math.BigDecimal;
@@ -34,14 +32,14 @@ public final class KitBigDecimalUtil {
* @return 转换后的 BigDecimal * @return 转换后的 BigDecimal
*/ */
private static BigDecimal toBigDecimal(Object obj) { private static BigDecimal toBigDecimal(Object obj) {
if (obj instanceof BigDecimal b) { if (obj instanceof BigDecimal) {
return b; return (BigDecimal) obj;
} else if (obj instanceof Long l) { } else if (obj instanceof Long) {
return BigDecimal.valueOf(l); return BigDecimal.valueOf((Long) obj);
} else if (obj instanceof Integer i) { } else if (obj instanceof Integer) {
return BigDecimal.valueOf(i); return BigDecimal.valueOf((Integer) obj);
} else if (obj instanceof Double d) { } else if (obj instanceof Double) {
return new BigDecimal(d); return new BigDecimal(String.valueOf(obj));
} else { } else {
throw new IllegalArgumentException("Unsupported type"); throw new IllegalArgumentException("Unsupported type");
} }
@@ -138,15 +136,12 @@ public final class KitBigDecimalUtil {
public static void main(String[] args) { public static void main(String[] args) {
BigDecimal num1 = new BigDecimal("10.123"); BigDecimal num1 = new BigDecimal("10.123");
BigDecimal num2 = new BigDecimal("2.456"); BigDecimal num2 = new BigDecimal("2.456");
System.out.println("加法结果: " + add(num1, num2)); System.out.println("加法结果: " + add(num1, num2));
System.out.println("减法结果: " + subtract(num1, num2)); System.out.println("减法结果: " + subtract(num1, num2));
System.out.println("乘法结果: " + multiply(num1, num2)); System.out.println("乘法结果: " + multiply(num1, num2));
System.out.println("除法结果: " + divide(num1, num2)); System.out.println("除法结果: " + divide(num1, num2));
Long cents = 12345L; Long cents = 12345L;
System.out.println("分转元结果: " + centsToYuan(cents)); System.out.println("分转元结果: " + centsToYuan(cents));
BigDecimal yuan = new BigDecimal("123.45"); BigDecimal yuan = new BigDecimal("123.45");
System.out.println("元转分结果: " + yuanToCents(yuan)); System.out.println("元转分结果: " + yuanToCents(yuan));
} }
@@ -13,14 +13,13 @@
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*/ */
package cn.odboy.util; package cn.odboy.util;
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 jakarta.servlet.http.HttpServletRequest;
import java.net.InetAddress; import java.net.InetAddress;
import java.net.UnknownHostException; import java.net.UnknownHostException;
import jakarta.servlet.http.HttpServletRequest;
import lombok.experimental.UtilityClass; import lombok.experimental.UtilityClass;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@@ -1,4 +1,3 @@
/* /*
* Copyright 2021-2025 Odboy * Copyright 2021-2025 Odboy
* *
@@ -14,7 +13,6 @@
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*/ */
package cn.odboy.util; package cn.odboy.util;
import java.lang.reflect.Field; import java.lang.reflect.Field;
@@ -1,4 +1,3 @@
/* /*
* Copyright 2021-2025 Odboy * Copyright 2021-2025 Odboy
* *
@@ -14,7 +13,6 @@
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*/ */
package cn.odboy.util; package cn.odboy.util;
import java.io.Closeable; import java.io.Closeable;
@@ -13,7 +13,6 @@
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*/ */
package cn.odboy.util; package cn.odboy.util;
import cn.odboy.base.KitSelectOptionVo; import cn.odboy.base.KitSelectOptionVo;
@@ -52,7 +51,7 @@ public final class KitCollUtil extends cn.hutool.core.collection.CollUtil {
* 使用方式: list = CollUtil.streamDistinct(list, Object::getXXX) * 使用方式: list = CollUtil.streamDistinct(list, Object::getXXX)
*/ */
public static <T, K> List<T> streamDistinct(List<T> data, Function<? super T, ? extends K> keyMapper) { public static <T, K> List<T> streamDistinct(List<T> data, Function<? super T, ? extends K> keyMapper) {
return data.stream().filter(distinctPredicate(keyMapper)).toList(); return data.stream().filter(distinctPredicate(keyMapper)).collect(Collectors.toList());
} }
/** /**
@@ -68,7 +67,7 @@ public final class KitCollUtil extends cn.hutool.core.collection.CollUtil {
*/ */
public static <T, U extends Comparable<? super U>> List<T> streamAscSort(List<T> data, public static <T, U extends Comparable<? super U>> List<T> streamAscSort(List<T> data,
Function<? super T, ? extends U> keyExtractor) { Function<? super T, ? extends U> keyExtractor) {
return data.stream().sorted(Comparator.comparing(keyExtractor)).toList(); return data.stream().sorted(Comparator.comparing(keyExtractor)).collect(Collectors.toList());
} }
/** /**
@@ -84,7 +83,7 @@ public final class KitCollUtil extends cn.hutool.core.collection.CollUtil {
*/ */
public static <T, U extends Comparable<? super U>> List<T> streamDescSort(List<T> data, public static <T, U extends Comparable<? super U>> List<T> streamDescSort(List<T> data,
Function<? super T, ? extends U> keyExtractor) { Function<? super T, ? extends U> keyExtractor) {
return data.stream().sorted(Comparator.comparing(keyExtractor).reversed()).toList(); return data.stream().sorted(Comparator.comparing(keyExtractor).reversed()).collect(Collectors.toList());
} }
/** /**
@@ -13,7 +13,6 @@
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*/ */
package cn.odboy.util; package cn.odboy.util;
import cn.hutool.core.date.DatePattern; import cn.hutool.core.date.DatePattern;
@@ -69,32 +68,24 @@ public class KitDateUtil {
// 什么都不返回 // 什么都不返回
return ""; return "";
} }
long betweenSeconds = DateUtil.between(startTime, endTime, cn.hutool.core.date.DateUnit.SECOND); long betweenSeconds = DateUtil.between(startTime, endTime, cn.hutool.core.date.DateUnit.SECOND);
long days = betweenSeconds / (24 * 60 * 60); long days = betweenSeconds / (24 * 60 * 60);
long hours = (betweenSeconds % (24 * 60 * 60)) / (60 * 60); long hours = (betweenSeconds % (24 * 60 * 60)) / (60 * 60);
long minutes = (betweenSeconds % (60 * 60)) / 60; long minutes = (betweenSeconds % (60 * 60)) / 60;
long seconds = betweenSeconds % 60; long seconds = betweenSeconds % 60;
StringBuilder result = new StringBuilder(); StringBuilder result = new StringBuilder();
if (days > 0) { if (days > 0) {
result.append(days).append("天"); result.append(days).append("天");
} }
if (hours > 0) { if (hours > 0) {
result.append(hours).append("时"); result.append(hours).append("时");
} }
if (minutes > 0) { if (minutes > 0) {
result.append(minutes).append("分"); result.append(minutes).append("分");
} }
if (seconds > 0 || result.length() == 0) {
if (seconds > 0 || result.isEmpty()) {
result.append(seconds).append("秒"); result.append(seconds).append("秒");
} }
return result.toString(); return result.toString();
} }
@@ -110,41 +101,32 @@ public class KitDateUtil {
// 什么都不返回 // 什么都不返回
return ""; return "";
} }
long betweenMs = DateUtil.betweenMs(startTime, endTime); long betweenMs = DateUtil.betweenMs(startTime, endTime);
long days = betweenMs / (24 * 60 * 60 * 1000); long days = betweenMs / (24 * 60 * 60 * 1000);
long hours = (betweenMs % (24 * 60 * 60 * 1000)) / (60 * 60 * 1000); long hours = (betweenMs % (24 * 60 * 60 * 1000)) / (60 * 60 * 1000);
long minutes = (betweenMs % (60 * 60 * 1000)) / (60 * 1000); long minutes = (betweenMs % (60 * 60 * 1000)) / (60 * 1000);
long seconds = (betweenMs % (60 * 1000)) / 1000; long seconds = (betweenMs % (60 * 1000)) / 1000;
long milliseconds = betweenMs % 1000; long milliseconds = betweenMs % 1000;
StringBuilder result = new StringBuilder(); StringBuilder result = new StringBuilder();
if (days > 0) { if (days > 0) {
result.append(days).append("天"); result.append(days).append("天");
} }
if (hours > 0) { if (hours > 0) {
result.append(hours).append("时"); result.append(hours).append("时");
} }
if (minutes > 0) { if (minutes > 0) {
result.append(minutes).append("分"); result.append(minutes).append("分");
} }
if (seconds > 0) { if (seconds > 0) {
result.append(seconds).append("秒"); result.append(seconds).append("秒");
} }
if (milliseconds > 0) { if (milliseconds > 0) {
result.append(milliseconds).append("毫秒"); result.append(milliseconds).append("毫秒");
} }
// 如果所有单位都是0,则显示0毫秒 // 如果所有单位都是0,则显示0毫秒
if (result.isEmpty()) { if (result.length() == 0) {
result.append("0毫秒"); result.append("0毫秒");
} }
return result.toString(); return result.toString();
} }
} }
@@ -13,7 +13,6 @@
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*/ */
package cn.odboy.util; package cn.odboy.util;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
@@ -93,4 +92,3 @@ public final class KitDesEncryptUtil {
return b2; return b2;
} }
} }
@@ -13,7 +13,6 @@
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*/ */
package cn.odboy.util; package cn.odboy.util;
import cn.odboy.framework.exception.BadRequestException; import cn.odboy.framework.exception.BadRequestException;
@@ -43,7 +42,6 @@ public final class KitDistributedIdUtil {
* 序列号所占位数 * 序列号所占位数
*/ */
private final long sequenceBits; private final long sequenceBits;
/** /**
* 数据中心 ID 最大值 * 数据中心 ID 最大值
*/ */
@@ -56,7 +54,6 @@ public final class KitDistributedIdUtil {
* 序列号最大值 * 序列号最大值
*/ */
private final long sequenceMask; private final long sequenceMask;
/** /**
* 机器 ID 向左移位数 * 机器 ID 向左移位数
*/ */
@@ -69,7 +66,6 @@ public final class KitDistributedIdUtil {
* 时间戳向左移位数 * 时间戳向左移位数
*/ */
private final long timestampLeftShift; private final long timestampLeftShift;
/** /**
* 数据中心 ID * 数据中心 ID
*/ */
@@ -101,15 +97,12 @@ public final class KitDistributedIdUtil {
this.dataCenterIdBits = dataCenterIdBits; this.dataCenterIdBits = dataCenterIdBits;
this.workerIdBits = workerIdBits; this.workerIdBits = workerIdBits;
this.sequenceBits = sequenceBits; this.sequenceBits = sequenceBits;
this.maxDataCenterId = ~(-1L << dataCenterIdBits); this.maxDataCenterId = ~(-1L << dataCenterIdBits);
this.maxWorkerId = ~(-1L << workerIdBits); this.maxWorkerId = ~(-1L << workerIdBits);
this.sequenceMask = ~(-1L << sequenceBits); this.sequenceMask = ~(-1L << sequenceBits);
this.workerIdShift = sequenceBits; this.workerIdShift = sequenceBits;
this.dataCenterIdShift = sequenceBits + workerIdBits; this.dataCenterIdShift = sequenceBits + workerIdBits;
this.timestampLeftShift = sequenceBits + workerIdBits + dataCenterIdBits; this.timestampLeftShift = sequenceBits + workerIdBits + dataCenterIdBits;
if (dataCenterId > maxDataCenterId || dataCenterId < 0) { if (dataCenterId > maxDataCenterId || dataCenterId < 0) {
throw new IllegalArgumentException( throw new IllegalArgumentException(
"Data center ID can't be greater than " + maxDataCenterId + " or less than 0"); "Data center ID can't be greater than " + maxDataCenterId + " or less than 0");
@@ -153,14 +146,12 @@ public final class KitDistributedIdUtil {
*/ */
public long nextId() { public long nextId() {
long currentTimestamp = System.currentTimeMillis(); long currentTimestamp = System.currentTimeMillis();
// 如果当前时间戳小于上一次生成 ID 的时间戳, 说明时钟回拨,抛出异常 // 如果当前时间戳小于上一次生成 ID 的时间戳, 说明时钟回拨,抛出异常
if (currentTimestamp < lastTimestamp.get()) { if (currentTimestamp < lastTimestamp.get()) {
throw new BadRequestException( throw new BadRequestException(
"Clock moved backwards. Refusing to generate id for " + (lastTimestamp.get() - currentTimestamp) + "Clock moved backwards. Refusing to generate id for " + (lastTimestamp.get() - currentTimestamp) +
" milliseconds"); " milliseconds");
} }
long lastTimestampValue = lastTimestamp.get(); long lastTimestampValue = lastTimestamp.get();
if (currentTimestamp == lastTimestampValue) { if (currentTimestamp == lastTimestampValue) {
// 同一毫秒内,序列号自增 // 同一毫秒内,序列号自增
@@ -27,9 +27,6 @@ import cn.hutool.poi.excel.ExcelUtil;
import cn.odboy.constant.FileTypeEnum; import cn.odboy.constant.FileTypeEnum;
import cn.odboy.constant.SystemConst; import cn.odboy.constant.SystemConst;
import cn.odboy.framework.exception.BadRequestException; import cn.odboy.framework.exception.BadRequestException;
import jakarta.servlet.ServletOutputStream;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.File; import java.io.File;
import java.io.FileInputStream; import java.io.FileInputStream;
import java.io.IOException; import java.io.IOException;
@@ -44,6 +41,9 @@ import java.util.LinkedHashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import jakarta.servlet.ServletOutputStream;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import lombok.experimental.UtilityClass; import lombok.experimental.UtilityClass;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.poi.util.IOUtils; import org.apache.poi.util.IOUtils;
@@ -13,7 +13,6 @@
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*/ */
package cn.odboy.util; package cn.odboy.util;
import cn.odboy.framework.context.KitSpringBeanHolder; import cn.odboy.framework.context.KitSpringBeanHolder;
@@ -13,7 +13,6 @@
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*/ */
package cn.odboy.util; package cn.odboy.util;
import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSON;
@@ -32,12 +31,12 @@ import lombok.experimental.UtilityClass;
public final class KitJsonUtil { public final class KitJsonUtil {
public static <K, V> Map<K, V> toMap(String jsonStr, Class<K> kClass, Class<V> vClass) { public static <K, V> Map<K, V> toMap(String jsonStr, Class<K> kClass, Class<V> vClass) {
return JSON.parseObject(jsonStr, new TypeReference<>() { return JSON.parseObject(jsonStr, new TypeReference<Map<K, V>>() {
}); });
} }
public static <V> List<V> toList(String jsonStr, Class<V> vClass) { public static <V> List<V> toList(String jsonStr, Class<V> vClass) {
return JSON.parseObject(jsonStr, new TypeReference<>() { return JSON.parseObject(jsonStr, new TypeReference<List<V>>() {
}); });
} }
@@ -13,7 +13,6 @@
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*/ */
package cn.odboy.util; package cn.odboy.util;
import cn.hutool.core.date.DateTime; import cn.hutool.core.date.DateTime;
@@ -41,7 +40,7 @@ public final class KitListUtil {
*/ */
public static <T, K> List<T> distinctByArgs(List<T> items, Function<? super T, ? extends K> classifier) { public static <T, K> List<T> distinctByArgs(List<T> items, Function<? super T, ? extends K> classifier) {
return items.stream().collect(Collectors.groupingBy(classifier)).values().stream() return items.stream().collect(Collectors.groupingBy(classifier)).values().stream()
.map(monitorItem -> monitorItem.iterator().next()).toList(); .map(monitorItem -> monitorItem.iterator().next()).collect(Collectors.toList());
} }
/** /**
@@ -13,7 +13,6 @@
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*/ */
package cn.odboy.util; package cn.odboy.util;
import lombok.experimental.UtilityClass; import lombok.experimental.UtilityClass;
@@ -13,7 +13,6 @@
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*/ */
package cn.odboy.util; package cn.odboy.util;
import cn.odboy.base.KitPageResult; import cn.odboy.base.KitPageResult;
@@ -13,7 +13,6 @@
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*/ */
package cn.odboy.util; package cn.odboy.util;
import cn.hutool.core.lang.Dict; import cn.hutool.core.lang.Dict;
@@ -1,4 +1,3 @@
/* /*
* Copyright 2021-2025 Odboy * Copyright 2021-2025 Odboy
* *
@@ -14,7 +13,6 @@
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*/ */
package cn.odboy.util; package cn.odboy.util;
import java.lang.reflect.Method; import java.lang.reflect.Method;
@@ -13,7 +13,6 @@
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*/ */
package cn.odboy.util; package cn.odboy.util;
import java.io.ByteArrayOutputStream; import java.io.ByteArrayOutputStream;
@@ -1,4 +1,3 @@
/* /*
* Copyright 2021-2025 Odboy * Copyright 2021-2025 Odboy
* *
@@ -14,7 +13,6 @@
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*/ */
package cn.odboy.util; package cn.odboy.util;
import java.util.Calendar; import java.util.Calendar;
@@ -40,14 +38,11 @@ public final class KitStringUtil {
if (s == null) { if (s == null) {
return null; return null;
} }
s = s.toLowerCase(); s = s.toLowerCase();
StringBuilder sb = new StringBuilder(s.length()); StringBuilder sb = new StringBuilder(s.length());
boolean upperCase = false; boolean upperCase = false;
for (int i = 0; i < s.length(); i++) { for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i); char c = s.charAt(i);
if (c == SEPARATOR) { if (c == SEPARATOR) {
upperCase = true; upperCase = true;
} else if (upperCase) { } else if (upperCase) {
@@ -57,7 +52,6 @@ public final class KitStringUtil {
sb.append(c); sb.append(c);
} }
} }
return sb.toString(); return sb.toString();
} }
@@ -83,18 +77,14 @@ public final class KitStringUtil {
if (s == null) { if (s == null) {
return null; return null;
} }
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
boolean upperCase = false; boolean upperCase = false;
for (int i = 0; i < s.length(); i++) { for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i); char c = s.charAt(i);
boolean nextUpperCase = true; boolean nextUpperCase = true;
if (i < (s.length() - 1)) { if (i < (s.length() - 1)) {
nextUpperCase = Character.isUpperCase(s.charAt(i + 1)); nextUpperCase = Character.isUpperCase(s.charAt(i + 1));
} }
if ((i > 0) && Character.isUpperCase(c)) { if ((i > 0) && Character.isUpperCase(c)) {
if (!upperCase || !nextUpperCase) { if (!upperCase || !nextUpperCase) {
sb.append(SEPARATOR); sb.append(SEPARATOR);
@@ -103,10 +93,8 @@ public final class KitStringUtil {
} else { } else {
upperCase = false; upperCase = false;
} }
sb.append(Character.toLowerCase(c)); sb.append(Character.toLowerCase(c));
} }
return sb.toString(); return sb.toString();
} }
@@ -1,4 +1,3 @@
/* /*
* Copyright 2021-2025 Odboy * Copyright 2021-2025 Odboy
* *
@@ -14,7 +13,6 @@
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*/ */
package cn.odboy.util; package cn.odboy.util;
import oshi.SystemInfo; import oshi.SystemInfo;
@@ -13,17 +13,16 @@
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*/ */
package cn.odboy.util; package cn.odboy.util;
import cn.odboy.framework.exception.BadRequestException; import cn.odboy.framework.exception.BadRequestException;
import java.util.Set;
import java.util.stream.Collectors;
import jakarta.validation.ConstraintViolation; import jakarta.validation.ConstraintViolation;
import jakarta.validation.Validation; import jakarta.validation.Validation;
import jakarta.validation.Validator; import jakarta.validation.Validator;
import jakarta.validation.ValidatorFactory; import jakarta.validation.ValidatorFactory;
import jakarta.validation.groups.Default; import jakarta.validation.groups.Default;
import java.util.Set;
import java.util.stream.Collectors;
import lombok.experimental.UtilityClass; import lombok.experimental.UtilityClass;
/** /**
@@ -3,12 +3,12 @@ package cn.odboy.util.xlsx;
import cn.hutool.core.date.DatePattern; import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.DateUtil;
import cn.idev.excel.EasyExcel; import cn.idev.excel.EasyExcel;
import jakarta.servlet.http.HttpServletResponse;
import java.io.OutputStream; import java.io.OutputStream;
import java.net.URLEncoder; import java.net.URLEncoder;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import jakarta.servlet.http.HttpServletResponse;
/** /**
* EasyExcel 导出增强工具类 (支持普通/分页模式) * EasyExcel 导出增强工具类 (支持普通/分页模式)
@@ -6,13 +6,13 @@ import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import cn.idev.excel.FastExcel; import cn.idev.excel.FastExcel;
import cn.odboy.framework.exception.BadRequestException; import cn.odboy.framework.exception.BadRequestException;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException; import java.io.IOException;
import java.net.URLEncoder; import java.net.URLEncoder;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import jakarta.servlet.http.HttpServletResponse;
import lombok.experimental.UtilityClass; import lombok.experimental.UtilityClass;
/** /**
@@ -19,6 +19,7 @@ import cn.odboy.base.KitPageArgs;
import cn.odboy.base.KitPageResult; import cn.odboy.base.KitPageResult;
import cn.odboy.system.dal.dataobject.SystemDeptTb; import cn.odboy.system.dal.dataobject.SystemDeptTb;
import cn.odboy.system.dal.model.SystemCreateDeptArgs; import cn.odboy.system.dal.model.SystemCreateDeptArgs;
import cn.odboy.system.dal.model.SystemDeptVo;
import cn.odboy.system.dal.model.SystemQueryDeptArgs; import cn.odboy.system.dal.model.SystemQueryDeptArgs;
import cn.odboy.system.framework.operalog.OperationLog; import cn.odboy.system.framework.operalog.OperationLog;
import cn.odboy.system.service.SystemDeptService; import cn.odboy.system.service.SystemDeptService;
@@ -67,7 +68,7 @@ public class SystemDeptController {
@ApiOperation("查询部门:根据ID获取同级与上级数据") @ApiOperation("查询部门:根据ID获取同级与上级数据")
@PostMapping("/searchDeptTree") @PostMapping("/searchDeptTree")
@PreAuthorize("@el.check('user:list','dept:list')") @PreAuthorize("@el.check('user:list','dept:list')")
public ResponseEntity<KitPageResult<SystemDeptTb>> queryDeptSuperiorTree(@RequestBody List<Long> ids, public ResponseEntity<KitPageResult<SystemDeptVo>> queryDeptSuperiorTree(@RequestBody List<Long> ids,
@RequestParam(defaultValue = "false") Boolean exclude) { @RequestParam(defaultValue = "false") Boolean exclude) {
return ResponseEntity.ok(systemDeptService.searchDeptTree(ids, exclude)); return ResponseEntity.ok(systemDeptService.searchDeptTree(ids, exclude));
} }
@@ -19,6 +19,7 @@ import cn.odboy.base.KitPageArgs;
import cn.odboy.base.KitPageResult; import cn.odboy.base.KitPageResult;
import cn.odboy.framework.exception.BadRequestException; import cn.odboy.framework.exception.BadRequestException;
import cn.odboy.system.dal.dataobject.SystemMenuTb; import cn.odboy.system.dal.dataobject.SystemMenuTb;
import cn.odboy.system.dal.model.SystemMenuRouterVo;
import cn.odboy.system.dal.model.SystemMenuVo; import cn.odboy.system.dal.model.SystemMenuVo;
import cn.odboy.system.dal.model.SystemQueryMenuArgs; import cn.odboy.system.dal.model.SystemQueryMenuArgs;
import cn.odboy.system.framework.operalog.OperationLog; import cn.odboy.system.framework.operalog.OperationLog;
@@ -58,9 +59,9 @@ public class SystemMenuController {
@PostMapping(value = "/buildMenus") @PostMapping(value = "/buildMenus")
@ApiOperation("获取前端所需菜单") @ApiOperation("获取前端所需菜单")
public ResponseEntity<List<SystemMenuVo>> buildMenus() { public ResponseEntity<List<SystemMenuRouterVo>> buildMenus() {
List<SystemMenuVo> systemMenuVos = systemMenuService.buildFrontMenus(); List<SystemMenuRouterVo> systemMenuRouterVos = systemMenuService.buildFrontMenus();
return ResponseEntity.ok(systemMenuVos); return ResponseEntity.ok(systemMenuRouterVos);
} }
@ApiOperation("返回全部的菜单") @ApiOperation("返回全部的菜单")
@@ -91,8 +92,8 @@ public class SystemMenuController {
@ApiOperation("查询菜单:根据ID获取同级与上级数据") @ApiOperation("查询菜单:根据ID获取同级与上级数据")
@PostMapping("/queryMenuSuperior") @PostMapping("/queryMenuSuperior")
@PreAuthorize("@el.check('menu:list')") @PreAuthorize("@el.check('menu:list')")
public ResponseEntity<List<SystemMenuTb>> queryMenuSuperior(@RequestBody List<Long> ids) { public ResponseEntity<List<SystemMenuVo>> queryMenuSuperior(@RequestBody List<Long> ids) {
List<SystemMenuTb> systemMenuTbs = systemMenuService.listMenuSuperior(ids); List<SystemMenuVo> systemMenuTbs = systemMenuService.listMenuSuperior(ids);
return ResponseEntity.ok(systemMenuTbs); return ResponseEntity.ok(systemMenuTbs);
} }
@@ -16,15 +16,11 @@
package cn.odboy.system.dal.dataobject; package cn.odboy.system.dal.dataobject;
import cn.odboy.base.KitBaseUserTimeTb; import cn.odboy.base.KitBaseUserTimeTb;
import com.alibaba.fastjson2.annotation.JSONField;
import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import java.util.List;
import java.util.Objects; import java.util.Objects;
import java.util.Set;
import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull; import jakarta.validation.constraints.NotNull;
import lombok.Getter; import lombok.Getter;
@@ -39,13 +35,6 @@ public class SystemDeptTb extends KitBaseUserTimeTb {
@TableId(value = "dept_id", type = IdType.AUTO) @TableId(value = "dept_id", type = IdType.AUTO)
@ApiModelProperty(value = "ID", hidden = true) @ApiModelProperty(value = "ID", hidden = true)
private Long id; private Long id;
@TableField(exist = false)
@JSONField(serialize = false)
@ApiModelProperty(value = "角色")
private Set<SystemRoleTb> roles;
@TableField(exist = false)
@ApiModelProperty(value = "子部门")
private List<SystemDeptTb> children;
@ApiModelProperty(value = "排序") @ApiModelProperty(value = "排序")
private Integer deptSort; private Integer deptSort;
@NotBlank @NotBlank
@@ -15,9 +15,8 @@
*/ */
package cn.odboy.system.dal.dataobject; package cn.odboy.system.dal.dataobject;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.bean.copier.CopyOptions;
import cn.odboy.base.KitBaseUserTimeTb; import cn.odboy.base.KitBaseUserTimeTb;
import cn.odboy.util.KitBeanUtil;
import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
@@ -49,6 +48,6 @@ public class SystemLocalStorageTb extends KitBaseUserTimeTb {
private String dateGroup; private String dateGroup;
public void copy(SystemLocalStorageTb source) { public void copy(SystemLocalStorageTb source) {
BeanUtil.copyProperties(source, this, CopyOptions.create().setIgnoreNullValue(true)); KitBeanUtil.copyToTarget(source, this);
} }
} }
@@ -16,15 +16,12 @@
package cn.odboy.system.dal.dataobject; package cn.odboy.system.dal.dataobject;
import cn.odboy.base.KitBaseUserTimeTb; import cn.odboy.base.KitBaseUserTimeTb;
import com.alibaba.fastjson2.annotation.JSONField;
import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import java.util.List;
import java.util.Objects; import java.util.Objects;
import java.util.Set;
import jakarta.validation.constraints.NotNull; import jakarta.validation.constraints.NotNull;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
@@ -38,12 +35,6 @@ public class SystemMenuTb extends KitBaseUserTimeTb {
@TableId(value = "menu_id", type = IdType.AUTO) @TableId(value = "menu_id", type = IdType.AUTO)
@ApiModelProperty(value = "ID", hidden = true) @ApiModelProperty(value = "ID", hidden = true)
private Long id; private Long id;
@TableField(exist = false)
@JSONField(serialize = false)
@ApiModelProperty(value = "菜单角色")
private Set<SystemRoleTb> roles;
@TableField(exist = false)
private List<SystemMenuTb> children;
@ApiModelProperty(value = "菜单标题") @ApiModelProperty(value = "菜单标题")
private String title; private String title;
@TableField(value = "name") @TableField(value = "name")
@@ -36,9 +36,6 @@ public class SystemQuartzJobTb extends KitBaseUserTimeTb {
@TableId(value = "id", type = IdType.AUTO) @TableId(value = "id", type = IdType.AUTO)
@NotNull(groups = {Update.class}) @NotNull(groups = {Update.class})
private Long id; private Long id;
@TableField(exist = false)
@ApiModelProperty(value = "用于子任务唯一标识", hidden = true)
private String uuid;
@ApiModelProperty(value = "定时器名称") @ApiModelProperty(value = "定时器名称")
private String jobName; private String jobName;
@NotBlank @NotBlank
@@ -45,8 +45,7 @@ public class SystemRoleTb extends KitBaseUserTimeTb {
@ApiModelProperty(value = "名称", hidden = true) @ApiModelProperty(value = "名称", hidden = true)
private String name; private String name;
@ApiModelProperty(value = "数据权限,全部 、 本级 、 自定义") @ApiModelProperty(value = "数据权限,全部 、 本级 、 自定义")
private String dataScope = private String dataScope = SystemDataScopeEnum.THIS_LEVEL.getValue();
SystemDataScopeEnum.THIS_LEVEL.getValue();
@ApiModelProperty(value = "级别,数值越小,级别越大") @ApiModelProperty(value = "级别,数值越小,级别越大")
private Integer level = 3; private Integer level = 3;
@ApiModelProperty(value = "描述") @ApiModelProperty(value = "描述")
@@ -41,9 +41,6 @@ public class SystemUserTb extends KitBaseUserTimeTb {
@TableField(value = "dept_id") @TableField(value = "dept_id")
@ApiModelProperty(hidden = true) @ApiModelProperty(hidden = true)
private Long deptId; private Long deptId;
@ApiModelProperty(value = "用户部门")
@TableField(exist = false)
private SystemDeptTb dept;
@NotBlank @NotBlank
@ApiModelProperty(value = "用户名称") @ApiModelProperty(value = "用户名称")
private String username; private String username;
@@ -0,0 +1,19 @@
package cn.odboy.system.dal.model;
import cn.odboy.system.dal.dataobject.SystemDeptTb;
import cn.odboy.system.dal.dataobject.SystemRoleTb;
import io.swagger.annotations.ApiModelProperty;
import java.util.List;
import java.util.Set;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class SystemDeptVo extends SystemDeptTb {
@ApiModelProperty(value = "角色")
private Set<SystemRoleTb> roles;
@ApiModelProperty(value = "子部门")
private List<SystemDeptVo> children;
}
@@ -0,0 +1,47 @@
/*
* Copyright 2021-2025 Odboy
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package cn.odboy.system.dal.model;
import cn.odboy.base.KitObject;
import io.swagger.annotations.ApiModelProperty;
import java.util.List;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* 构建前端路由时用到
*/
@Data
@EqualsAndHashCode(callSuper = false)
public class SystemMenuRouterVo extends KitObject {
@ApiModelProperty(value = "菜单名称")
private String name;
@ApiModelProperty(value = "路径")
private String path;
@ApiModelProperty(value = "隐藏状态")
private Boolean hidden;
@ApiModelProperty(value = "重定向")
private String redirect;
@ApiModelProperty(value = "组件")
private String component;
@ApiModelProperty(value = "总是显示")
private Boolean alwaysShow;
@ApiModelProperty(value = "元数据")
private SystemMenuMetaVo meta;
@ApiModelProperty(value = "子路由")
private List<SystemMenuRouterVo> children;
}
@@ -1,47 +1,19 @@
/*
* Copyright 2021-2025 Odboy
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package cn.odboy.system.dal.model; package cn.odboy.system.dal.model;
import cn.odboy.base.KitObject; import cn.odboy.system.dal.dataobject.SystemMenuTb;
import cn.odboy.system.dal.dataobject.SystemRoleTb;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import java.util.List; import java.util.List;
import lombok.Data; import java.util.Set;
import lombok.EqualsAndHashCode; import lombok.Getter;
import lombok.Setter;
/** @Getter
* 构建前端路由时用到 @Setter
*/ public class SystemMenuVo extends SystemMenuTb {
@Data
@EqualsAndHashCode(callSuper = false)
public class SystemMenuVo extends KitObject {
@ApiModelProperty(value = "菜单名称") @ApiModelProperty(value = "菜单角色")
private String name; private Set<SystemRoleTb> roles;
@ApiModelProperty(value = "路径") @ApiModelProperty(value = "子菜单")
private String path;
@ApiModelProperty(value = "隐藏状态")
private Boolean hidden;
@ApiModelProperty(value = "重定向")
private String redirect;
@ApiModelProperty(value = "组件")
private String component;
@ApiModelProperty(value = "总是显示")
private Boolean alwaysShow;
@ApiModelProperty(value = "元数据")
private SystemMenuMetaVo meta;
@ApiModelProperty(value = "子路由")
private List<SystemMenuVo> children; private List<SystemMenuVo> children;
} }
@@ -0,0 +1,14 @@
package cn.odboy.system.dal.model;
import cn.odboy.system.dal.dataobject.SystemQuartzJobTb;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class SystemQuartzJobVo extends SystemQuartzJobTb {
@ApiModelProperty(value = "用于子任务唯一标识", hidden = true)
private String uuid;
}
@@ -1,5 +1,6 @@
package cn.odboy.system.dal.model; package cn.odboy.system.dal.model;
import cn.odboy.system.dal.dataobject.SystemDeptTb;
import cn.odboy.system.dal.dataobject.SystemJobTb; import cn.odboy.system.dal.dataobject.SystemJobTb;
import cn.odboy.system.dal.dataobject.SystemRoleTb; import cn.odboy.system.dal.dataobject.SystemRoleTb;
import cn.odboy.system.dal.dataobject.SystemUserTb; import cn.odboy.system.dal.dataobject.SystemUserTb;
@@ -11,7 +12,8 @@ import lombok.Setter;
@Getter @Getter
@Setter @Setter
public class SystemUserVo extends SystemUserTb { public class SystemUserVo extends SystemUserTb {
@ApiModelProperty(value = "用户部门")
private SystemDeptTb dept;
@ApiModelProperty(value = "用户角色") @ApiModelProperty(value = "用户角色")
private Set<SystemRoleTb> roles; private Set<SystemRoleTb> roles;
@ApiModelProperty(value = "用户岗位") @ApiModelProperty(value = "用户岗位")
@@ -16,6 +16,8 @@
package cn.odboy.system.dal.mysql; package cn.odboy.system.dal.mysql;
import cn.odboy.system.dal.dataobject.SystemQuartzJobTb; import cn.odboy.system.dal.dataobject.SystemQuartzJobTb;
import cn.odboy.system.dal.model.SystemQuartzJobVo;
import cn.odboy.util.KitBeanUtil;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
@@ -27,4 +29,7 @@ import org.apache.ibatis.annotations.Mapper;
@Mapper @Mapper
public interface SystemQuartzJobMapper extends BaseMapper<SystemQuartzJobTb> { public interface SystemQuartzJobMapper extends BaseMapper<SystemQuartzJobTb> {
default SystemQuartzJobVo selectVoById(String id) {
return KitBeanUtil.copyToClass(selectById(id), SystemQuartzJobVo.class);
}
} }
@@ -1,6 +1,5 @@
package cn.odboy.system.dal.redis; package cn.odboy.system.dal.redis;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import cn.odboy.base.KitPageResult; import cn.odboy.base.KitPageResult;
import cn.odboy.framework.properties.AppProperties; import cn.odboy.framework.properties.AppProperties;
@@ -8,20 +7,17 @@ import cn.odboy.framework.redis.KitRedisHelper;
import cn.odboy.system.dal.model.SystemUserJwtVo; import cn.odboy.system.dal.model.SystemUserJwtVo;
import cn.odboy.system.dal.model.SystemUserOnlineVo; import cn.odboy.system.dal.model.SystemUserOnlineVo;
import cn.odboy.system.framework.permission.core.handler.TokenProvider; import cn.odboy.system.framework.permission.core.handler.TokenProvider;
import cn.odboy.util.KitBeanUtil;
import cn.odboy.util.KitBrowserUtil; import cn.odboy.util.KitBrowserUtil;
import cn.odboy.util.KitDesEncryptUtil; import cn.odboy.util.KitDesEncryptUtil;
import cn.odboy.util.KitFileUtil;
import cn.odboy.util.KitIPUtil; import cn.odboy.util.KitIPUtil;
import cn.odboy.util.KitPageUtil; import cn.odboy.util.KitPageUtil;
import cn.odboy.util.xlsx.KitExcelExporter; import cn.odboy.util.xlsx.KitExcelExporter;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import java.io.IOException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.Date; import java.util.Date;
import java.util.LinkedHashMap;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.Set; import java.util.Set;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletRequest;
@@ -81,28 +77,28 @@ public class SystemUserOnlineInfoDAO {
redisHelper.del(loginKey); redisHelper.del(loginKey);
} }
/** // /**
* 导出 // * 导出
* // *
* @param all / // * @param all /
* @param response / // * @param response /
* @throws IOException / // * @throws IOException /
*/ // */
public void downloadUserOnlineModelExcel(List<SystemUserOnlineVo> all, HttpServletResponse response) // public void downloadUserOnlineModelExcel(List<SystemUserOnlineVo> all, HttpServletResponse response)
throws IOException { // throws IOException {
List<Map<String, Object>> list = new ArrayList<>(); // List<Map<String, Object>> list = new ArrayList<>();
for (SystemUserOnlineVo user : all) { // for (SystemUserOnlineVo user : all) {
Map<String, Object> map = new LinkedHashMap<>(); // Map<String, Object> map = new LinkedHashMap<>();
map.put("用户名", user.getUserName()); // map.put("用户名", user.getUserName());
map.put("部门", user.getDept()); // map.put("部门", user.getDept());
map.put("登录IP", user.getIp()); // map.put("登录IP", user.getIp());
map.put("登录地点", user.getAddress()); // map.put("登录地点", user.getAddress());
map.put("浏览器", user.getBrowser()); // map.put("浏览器", user.getBrowser());
map.put("登录日期", user.getLoginTime()); // map.put("登录日期", user.getLoginTime());
list.add(map); // list.add(map);
} // }
KitFileUtil.downloadExcel(list, response); // KitFileUtil.downloadExcel(list, response);
} // }
/** /**
* 根据用户名强退用户 * 根据用户名强退用户
@@ -172,8 +168,8 @@ public class SystemUserOnlineInfoDAO {
public void exportOnlineUserXlsx(HttpServletResponse response, String username) { public void exportOnlineUserXlsx(HttpServletResponse response, String username) {
List<SystemUserOnlineVo> userOnlineVos = this.queryUserOnlineModelListByUsername(username); List<SystemUserOnlineVo> userOnlineVos = this.queryUserOnlineModelListByUsername(username);
// KitXlsxExportUtil.exportFile(response, "在线用户数据", userOnlineVos, SystemUserOnlineExportRowVo.class, // KitXlsxExportUtil.exportFile(response, "在线用户数据", userOnlineVos, SystemUserOnlineExportRowVo.class,
// (dataObject) -> CollUtil.newArrayList(BeanUtil.copyProperties(dataObject, SystemUserOnlineExportRowVo.class))); // (dataObject) -> CollUtil.newArrayList(KitBeanUtil.copyProperties(dataObject, SystemUserOnlineExportRowVo.class)));
List<SystemUserOnlineVo> rowVos = BeanUtil.copyToList(userOnlineVos, SystemUserOnlineVo.class); List<SystemUserOnlineVo> rowVos = KitBeanUtil.copyToList(userOnlineVos, SystemUserOnlineVo.class);
KitExcelExporter.exportSimple(response, "在线用户数据", SystemUserOnlineVo.class, rowVos); KitExcelExporter.exportSimple(response, "在线用户数据", SystemUserOnlineVo.class, rowVos);
} }
} }
@@ -13,7 +13,6 @@
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*/ */
package cn.odboy.system.framework.quartz; package cn.odboy.system.framework.quartz;
import cn.hutool.core.exceptions.ExceptionUtil; import cn.hutool.core.exceptions.ExceptionUtil;
@@ -27,6 +26,7 @@ import cn.odboy.framework.quartz.core.QuartzRunnable;
import cn.odboy.framework.redis.KitRedisHelper; import cn.odboy.framework.redis.KitRedisHelper;
import cn.odboy.system.dal.dataobject.SystemQuartzJobTb; import cn.odboy.system.dal.dataobject.SystemQuartzJobTb;
import cn.odboy.system.dal.dataobject.SystemQuartzLogTb; import cn.odboy.system.dal.dataobject.SystemQuartzLogTb;
import cn.odboy.system.dal.model.SystemQuartzJobVo;
import cn.odboy.system.dal.model.SystemSendEmailArgs; import cn.odboy.system.dal.model.SystemSendEmailArgs;
import cn.odboy.system.dal.mysql.SystemQuartzLogMapper; import cn.odboy.system.dal.mysql.SystemQuartzLogMapper;
import cn.odboy.system.service.SystemEmailService; import cn.odboy.system.service.SystemEmailService;
@@ -52,14 +52,12 @@ public class ExecutionJobBean extends QuartzJobBean {
@Override @Override
public void executeInternal(JobExecutionContext context) { public void executeInternal(JobExecutionContext context) {
// 获取任务 // 获取任务
SystemQuartzJobTb quartzJob = (SystemQuartzJobTb) context.getMergedJobDataMap().get(SystemQuartzJobTb.JOB_KEY); SystemQuartzJobVo quartzJob = (SystemQuartzJobVo) context.getMergedJobDataMap().get(SystemQuartzJobTb.JOB_KEY);
// 获取spring bean // 获取spring bean
SystemQuartzLogMapper quartzLogMapper = KitSpringBeanHolder.getBean(SystemQuartzLogMapper.class); SystemQuartzLogMapper quartzLogMapper = KitSpringBeanHolder.getBean(SystemQuartzLogMapper.class);
SystemQuartzJobService systemQuartzJobService = KitSpringBeanHolder.getBean(SystemQuartzJobService.class); SystemQuartzJobService systemQuartzJobService = KitSpringBeanHolder.getBean(SystemQuartzJobService.class);
KitRedisHelper redisHelper = KitSpringBeanHolder.getBean(KitRedisHelper.class); KitRedisHelper redisHelper = KitSpringBeanHolder.getBean(KitRedisHelper.class);
String uuid = quartzJob.getUuid(); String uuid = quartzJob.getUuid();
SystemQuartzLogTb quartzLog = new SystemQuartzLogTb(); SystemQuartzLogTb quartzLog = new SystemQuartzLogTb();
quartzLog.setJobName(quartzJob.getJobName()); quartzLog.setJobName(quartzJob.getJobName());
quartzLog.setBeanName(quartzJob.getBeanName()); quartzLog.setBeanName(quartzJob.getBeanName());
@@ -69,8 +67,7 @@ public class ExecutionJobBean extends QuartzJobBean {
quartzLog.setCronExpression(quartzJob.getCronExpression()); quartzLog.setCronExpression(quartzJob.getCronExpression());
try { try {
// 执行任务 // 执行任务
QuartzRunnable task = QuartzRunnable task = new QuartzRunnable(quartzJob.getBeanName(), quartzJob.getMethodName(), quartzJob.getParams());
new QuartzRunnable(quartzJob.getBeanName(), quartzJob.getMethodName(), quartzJob.getParams());
Future<?> future = executor.submit(task); Future<?> future = executor.submit(task);
// 忽略任务执行结果 // 忽略任务执行结果
future.get(); future.get();
@@ -123,8 +120,7 @@ public class ExecutionJobBean extends QuartzJobBean {
Map<String, Object> data = new HashMap<>(16); Map<String, Object> data = new HashMap<>(16);
data.put("task", quartzJob); data.put("task", quartzJob);
data.put("msg", msg); data.put("msg", msg);
TemplateEngine engine = TemplateEngine engine = TemplateUtil.createEngine(new TemplateConfig("template", TemplateConfig.ResourceMode.CLASSPATH));
TemplateUtil.createEngine(new TemplateConfig("template", TemplateConfig.ResourceMode.CLASSPATH));
Template template = engine.getTemplate("SystemQuartzJobTaskAlarmTemplate.ftl"); Template template = engine.getTemplate("SystemQuartzJobTaskAlarmTemplate.ftl");
sendEmailRequest.setContent(template.render(data)); sendEmailRequest.setContent(template.render(data));
List<String> emails = Arrays.asList(quartzJob.getEmail().split("[,,]")); List<String> emails = Arrays.asList(quartzJob.getEmail().split("[,,]"));
@@ -1,6 +1,5 @@
package cn.odboy.system.service; package cn.odboy.system.service;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import cn.odboy.constant.CaptchaCodeEnum; import cn.odboy.constant.CaptchaCodeEnum;
@@ -16,6 +15,7 @@ import cn.odboy.system.dal.redis.SystemUserOnlineInfoDAO;
import cn.odboy.system.framework.permission.core.KitSecurityHelper; import cn.odboy.system.framework.permission.core.KitSecurityHelper;
import cn.odboy.system.framework.permission.core.handler.TokenProvider; import cn.odboy.system.framework.permission.core.handler.TokenProvider;
import cn.odboy.system.framework.permission.core.handler.UserDetailsHandler; import cn.odboy.system.framework.permission.core.handler.UserDetailsHandler;
import cn.odboy.util.KitBeanUtil;
import cn.odboy.util.KitRsaEncryptUtil; import cn.odboy.util.KitRsaEncryptUtil;
import com.wf.captcha.base.Captcha; import com.wf.captcha.base.Captcha;
import java.util.HashMap; import java.util.HashMap;
@@ -47,8 +47,7 @@ public class SystemAuthService {
public Map<String, Object> doLogin(SystemUserLoginArgs loginRequest, HttpServletRequest request) throws Exception { public Map<String, Object> doLogin(SystemUserLoginArgs loginRequest, HttpServletRequest request) throws Exception {
// 密码解密 // 密码解密
String password = String password = KitRsaEncryptUtil.decryptByPrivateKey(properties.getRsa().getPrivateKey(), loginRequest.getPassword());
KitRsaEncryptUtil.decryptByPrivateKey(properties.getRsa().getPrivateKey(), loginRequest.getPassword());
// 查询验证码 // 查询验证码
String code = redisHelper.get(loginRequest.getUuid(), String.class); String code = redisHelper.get(loginRequest.getUuid(), String.class);
// 清除验证码 // 清除验证码
@@ -65,15 +64,14 @@ public class SystemAuthService {
if (!passwordEncoder.matches(password, jwtUser.getPassword())) { if (!passwordEncoder.matches(password, jwtUser.getPassword())) {
throw new BadRequestException("登录密码错误"); throw new BadRequestException("登录密码错误");
} }
Authentication authentication = Authentication authentication = new UsernamePasswordAuthenticationToken(jwtUser, null, jwtUser.getAuthorities());
new UsernamePasswordAuthenticationToken(jwtUser, null, jwtUser.getAuthorities());
SecurityContextHolder.getContext().setAuthentication(authentication); SecurityContextHolder.getContext().setAuthentication(authentication);
// 生成令牌 // 生成令牌
String token = tokenProvider.createToken(jwtUser); String token = tokenProvider.createToken(jwtUser);
// 返回 token 与 用户信息 // 返回 token 与 用户信息
Map<String, Object> authInfo = new HashMap<>(2) {{ Map<String, Object> authInfo = new HashMap<>(2) {{
put("token", String.format("%s %s", SystemConst.TOKEN_PREFIX, token)); put("token", String.format("%s %s", SystemConst.TOKEN_PREFIX, token));
put("user", BeanUtil.copyProperties(jwtUser, SystemUserInfoVo.class)); put("user", KitBeanUtil.copyToClass(jwtUser, SystemUserInfoVo.class));
}}; }};
if (properties.getLogin().isSingle()) { if (properties.getLogin().isSingle()) {
// 踢掉之前已经登录的token // 踢掉之前已经登录的token
@@ -87,7 +85,8 @@ public class SystemAuthService {
public SystemUserInfoVo getCurrentUserInfoVo() { public SystemUserInfoVo getCurrentUserInfoVo() {
SystemUserJwtVo jwtUser = (SystemUserJwtVo) KitSecurityHelper.getCurrentUser(); SystemUserJwtVo jwtUser = (SystemUserJwtVo) KitSecurityHelper.getCurrentUser();
return BeanUtil.copyProperties(jwtUser, SystemUserInfoVo.class); // 转换是为了去掉密码
return KitBeanUtil.copyToClass(jwtUser, SystemUserInfoVo.class);
} }
public Map<String, Object> getCaptchaInfo() { public Map<String, Object> getCaptchaInfo() {
@@ -19,8 +19,8 @@ import cn.hutool.core.collection.CollUtil;
import cn.odboy.system.constant.SystemDataScopeEnum; import cn.odboy.system.constant.SystemDataScopeEnum;
import cn.odboy.system.dal.dataobject.SystemDeptTb; import cn.odboy.system.dal.dataobject.SystemDeptTb;
import cn.odboy.system.dal.dataobject.SystemRoleTb; import cn.odboy.system.dal.dataobject.SystemRoleTb;
import cn.odboy.system.dal.dataobject.SystemUserTb;
import cn.odboy.system.dal.model.SystemRoleVo; import cn.odboy.system.dal.model.SystemRoleVo;
import cn.odboy.system.dal.model.SystemUserVo;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Objects; import java.util.Objects;
@@ -49,7 +49,7 @@ public class SystemDataService {
* @param user / * @param user /
* @return / * @return /
*/ */
public List<Long> queryDeptIdByArgs(SystemUserTb user) { public List<Long> queryDeptIdByArgs(SystemUserVo user) {
List<Long> deptIds = new ArrayList<>(); List<Long> deptIds = new ArrayList<>();
// 查询用户角色 // 查询用户角色
List<SystemRoleVo> roleList = systemUserRoleService.queryRoleByUsersId(user.getId()); List<SystemRoleVo> roleList = systemUserRoleService.queryRoleByUsersId(user.getId());
@@ -15,7 +15,6 @@
*/ */
package cn.odboy.system.service; package cn.odboy.system.service;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
@@ -27,11 +26,13 @@ import cn.odboy.system.constant.SystemZhConst;
import cn.odboy.system.dal.dataobject.SystemDeptTb; import cn.odboy.system.dal.dataobject.SystemDeptTb;
import cn.odboy.system.dal.model.SystemCreateDeptArgs; import cn.odboy.system.dal.model.SystemCreateDeptArgs;
import cn.odboy.system.dal.model.SystemDeptExportRowVo; import cn.odboy.system.dal.model.SystemDeptExportRowVo;
import cn.odboy.system.dal.model.SystemDeptVo;
import cn.odboy.system.dal.model.SystemProductLineTreeVo; import cn.odboy.system.dal.model.SystemProductLineTreeVo;
import cn.odboy.system.dal.model.SystemProductLineVo; import cn.odboy.system.dal.model.SystemProductLineVo;
import cn.odboy.system.dal.model.SystemQueryDeptArgs; import cn.odboy.system.dal.model.SystemQueryDeptArgs;
import cn.odboy.system.dal.mysql.SystemDeptMapper; import cn.odboy.system.dal.mysql.SystemDeptMapper;
import cn.odboy.system.framework.permission.core.KitSecurityHelper; import cn.odboy.system.framework.permission.core.KitSecurityHelper;
import cn.odboy.util.KitBeanUtil;
import cn.odboy.util.KitClassUtil; import cn.odboy.util.KitClassUtil;
import cn.odboy.util.xlsx.KitExcelExporter; import cn.odboy.util.xlsx.KitExcelExporter;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@@ -68,7 +69,7 @@ public class SystemDeptService {
*/ */
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void saveDept(SystemCreateDeptArgs args) { public void saveDept(SystemCreateDeptArgs args) {
systemDeptMapper.insert(BeanUtil.copyProperties(args, SystemDeptTb.class)); systemDeptMapper.insert(KitBeanUtil.copyToClass(args, SystemDeptTb.class));
this.updateDeptSubCnt(args.getPid()); this.updateDeptSubCnt(args.getPid());
} }
@@ -272,7 +273,7 @@ public class SystemDeptService {
* *
* @return / * @return /
*/ */
public KitPageResult<SystemDeptTb> searchDeptTree(List<Long> ids, Boolean exclude) { public KitPageResult<SystemDeptVo> searchDeptTree(List<Long> ids, Boolean exclude) {
Set<SystemDeptTb> deptSet1 = new LinkedHashSet<>(); Set<SystemDeptTb> deptSet1 = new LinkedHashSet<>();
for (Long id : ids) { for (Long id : ids) {
// 同级数据 // 同级数据
@@ -290,18 +291,18 @@ public class SystemDeptService {
} }
deptSet1.addAll(depts); deptSet1.addAll(depts);
} }
ArrayList<SystemDeptTb> deptList = new ArrayList<>(deptSet1); List<SystemDeptVo> deptList = KitBeanUtil.copyToList(new ArrayList<>(deptSet1), SystemDeptVo.class);
// 构建部门树 // 构建部门树
Set<SystemDeptTb> trees = new LinkedHashSet<>(); Set<SystemDeptVo> trees = new LinkedHashSet<>();
Set<SystemDeptTb> deptSet = new LinkedHashSet<>(); Set<SystemDeptVo> deptSet = new LinkedHashSet<>();
List<String> deptNames = deptList.stream().map(SystemDeptTb::getName).collect(Collectors.toList()); List<String> deptNames = deptList.stream().map(SystemDeptVo::getName).collect(Collectors.toList());
boolean isChild; boolean isChild;
for (SystemDeptTb dept : deptList) { for (SystemDeptVo dept : deptList) {
isChild = false; isChild = false;
if (dept.getPid() == null) { if (dept.getPid() == null) {
trees.add(dept); trees.add(dept);
} }
for (SystemDeptTb it : deptList) { for (SystemDeptVo it : deptList) {
if (it.getPid() != null && dept.getId().equals(it.getPid())) { if (it.getPid() != null && dept.getId().equals(it.getPid())) {
isChild = true; isChild = true;
if (dept.getChildren() == null) { if (dept.getChildren() == null) {
@@ -319,7 +320,7 @@ public class SystemDeptService {
if (CollectionUtil.isEmpty(trees)) { if (CollectionUtil.isEmpty(trees)) {
trees = deptSet; trees = deptSet;
} }
KitPageResult<SystemDeptTb> baseResult = new KitPageResult<>(); KitPageResult<SystemDeptVo> baseResult = new KitPageResult<>();
baseResult.setContent(CollectionUtil.isEmpty(trees) ? new ArrayList<>(deptSet) : new ArrayList<>(trees)); baseResult.setContent(CollectionUtil.isEmpty(trees) ? new ArrayList<>(deptSet) : new ArrayList<>(trees));
baseResult.setTotalElements(deptSet.size()); baseResult.setTotalElements(deptSet.size());
return baseResult; return baseResult;
@@ -15,7 +15,6 @@
*/ */
package cn.odboy.system.service; package cn.odboy.system.service;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import cn.odboy.base.KitPageResult; import cn.odboy.base.KitPageResult;
@@ -26,6 +25,7 @@ import cn.odboy.system.dal.model.SystemDictDetailVo;
import cn.odboy.system.dal.model.SystemQueryDictDetailArgs; import cn.odboy.system.dal.model.SystemQueryDictDetailArgs;
import cn.odboy.system.dal.mysql.SystemDictDetailMapper; import cn.odboy.system.dal.mysql.SystemDictDetailMapper;
import cn.odboy.system.dal.mysql.SystemDictMapper; import cn.odboy.system.dal.mysql.SystemDictMapper;
import cn.odboy.util.KitBeanUtil;
import cn.odboy.util.KitPageUtil; import cn.odboy.util.KitPageUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -55,7 +55,7 @@ public class SystemDictDetailService {
*/ */
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void saveDictDetail(SystemCreateDictDetailArgs args) { public void saveDictDetail(SystemCreateDictDetailArgs args) {
SystemDictDetailTb dictDetail = BeanUtil.copyProperties(args, SystemDictDetailTb.class); SystemDictDetailTb dictDetail = KitBeanUtil.copyToClass(args, SystemDictDetailTb.class);
dictDetail.setDictId(args.getDict().getId()); dictDetail.setDictId(args.getDict().getId());
systemDictDetailMapper.insert(dictDetail); systemDictDetailMapper.insert(dictDetail);
} }
@@ -106,7 +106,7 @@ public class SystemDictDetailService {
*/ */
public KitPageResult<SystemDictDetailVo> searchDictDetail(SystemQueryDictDetailArgs args, public KitPageResult<SystemDictDetailVo> searchDictDetail(SystemQueryDictDetailArgs args,
Page<SystemDictDetailTb> page) { Page<SystemDictDetailTb> page) {
IPage<SystemDictDetailVo> iPage = systemDictDetailMapper.selectPageByArgs(page, args).convert(i -> BeanUtil.copyProperties(i, SystemDictDetailVo.class)); IPage<SystemDictDetailVo> iPage = systemDictDetailMapper.selectPageByArgs(page, args).convert(i -> KitBeanUtil.copyToClass(i, SystemDictDetailVo.class));
List<Long> dictIds = iPage.getRecords().stream().map(SystemDictDetailTb::getDictId).collect(Collectors.toList()); List<Long> dictIds = iPage.getRecords().stream().map(SystemDictDetailTb::getDictId).collect(Collectors.toList());
Map<Long, SystemDictTb> id2ItemMap = systemDictMapper.selectByIds(dictIds).stream().collect(Collectors.toMap(SystemDictTb::getId, i -> i)); Map<Long, SystemDictTb> id2ItemMap = systemDictMapper.selectByIds(dictIds).stream().collect(Collectors.toMap(SystemDictTb::getId, i -> i));
for (SystemDictDetailVo record : iPage.getRecords()) { for (SystemDictDetailVo record : iPage.getRecords()) {
@@ -130,7 +130,7 @@ public class SystemDictDetailService {
return new ArrayList<>(); return new ArrayList<>();
} }
return this.listDictDetailByDictId(systemDictTb.getId()).stream().map(m -> { return this.listDictDetailByDictId(systemDictTb.getId()).stream().map(m -> {
SystemDictDetailVo detailVo = BeanUtil.copyProperties(m, SystemDictDetailVo.class); SystemDictDetailVo detailVo = KitBeanUtil.copyToClass(m, SystemDictDetailVo.class);
detailVo.setDict(systemDictTb); detailVo.setDict(systemDictTb);
return detailVo; return detailVo;
}).collect(Collectors.toList()); }).collect(Collectors.toList());
@@ -15,7 +15,6 @@
*/ */
package cn.odboy.system.service; package cn.odboy.system.service;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import cn.odboy.base.KitPageResult; import cn.odboy.base.KitPageResult;
@@ -25,6 +24,7 @@ import cn.odboy.system.dal.model.SystemDictDetailVo;
import cn.odboy.system.dal.model.SystemDictExportRowVo; import cn.odboy.system.dal.model.SystemDictExportRowVo;
import cn.odboy.system.dal.model.SystemQueryDictArgs; import cn.odboy.system.dal.model.SystemQueryDictArgs;
import cn.odboy.system.dal.mysql.SystemDictMapper; import cn.odboy.system.dal.mysql.SystemDictMapper;
import cn.odboy.util.KitBeanUtil;
import cn.odboy.util.KitPageUtil; import cn.odboy.util.KitPageUtil;
import cn.odboy.util.xlsx.KitExcelExporter; import cn.odboy.util.xlsx.KitExcelExporter;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@@ -52,7 +52,7 @@ public class SystemDictService {
*/ */
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void saveDict(SystemCreateDictArgs args) { public void saveDict(SystemCreateDictArgs args) {
systemDictMapper.insert(BeanUtil.copyProperties(args, SystemDictTb.class)); systemDictMapper.insert(KitBeanUtil.copyToClass(args, SystemDictTb.class));
} }
/** /**
@@ -15,7 +15,6 @@
*/ */
package cn.odboy.system.service; package cn.odboy.system.service;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import cn.odboy.base.KitPageResult; import cn.odboy.base.KitPageResult;
@@ -25,6 +24,7 @@ import cn.odboy.system.dal.model.SystemCreateJobArgs;
import cn.odboy.system.dal.model.SystemJobExportRowVo; import cn.odboy.system.dal.model.SystemJobExportRowVo;
import cn.odboy.system.dal.model.SystemQueryJobArgs; import cn.odboy.system.dal.model.SystemQueryJobArgs;
import cn.odboy.system.dal.mysql.SystemJobMapper; import cn.odboy.system.dal.mysql.SystemJobMapper;
import cn.odboy.util.KitBeanUtil;
import cn.odboy.util.KitPageUtil; import cn.odboy.util.KitPageUtil;
import cn.odboy.util.xlsx.KitExcelExporter; import cn.odboy.util.xlsx.KitExcelExporter;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@@ -56,7 +56,7 @@ public class SystemJobService {
if (job != null) { if (job != null) {
throw new BadRequestException("职位名称已存在"); throw new BadRequestException("职位名称已存在");
} }
systemJobMapper.insert(BeanUtil.copyProperties(args, SystemJobTb.class)); systemJobMapper.insert(KitBeanUtil.copyToClass(args, SystemJobTb.class));
} }
/** /**
@@ -15,7 +15,6 @@
*/ */
package cn.odboy.system.service; package cn.odboy.system.service;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DatePattern; import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.DateUtil;
@@ -31,6 +30,7 @@ import cn.odboy.system.dal.dataobject.SystemLocalStorageTb;
import cn.odboy.system.dal.model.SystemLocalStorageExportRowVo; import cn.odboy.system.dal.model.SystemLocalStorageExportRowVo;
import cn.odboy.system.dal.model.SystemQueryStorageArgs; import cn.odboy.system.dal.model.SystemQueryStorageArgs;
import cn.odboy.system.dal.mysql.SystemLocalStorageMapper; import cn.odboy.system.dal.mysql.SystemLocalStorageMapper;
import cn.odboy.util.KitBeanUtil;
import cn.odboy.util.KitFileUtil; import cn.odboy.util.KitFileUtil;
import cn.odboy.util.KitPageUtil; import cn.odboy.util.KitPageUtil;
import cn.odboy.util.xlsx.KitExcelExporter; import cn.odboy.util.xlsx.KitExcelExporter;
@@ -172,8 +172,8 @@ public class SystemLocalStorageService {
public void exportLocalStorageXlsx(HttpServletResponse response, SystemQueryStorageArgs args) { public void exportLocalStorageXlsx(HttpServletResponse response, SystemQueryStorageArgs args) {
List<SystemLocalStorageTb> systemLocalStorageTbs = this.queryLocalStorageByArgs(args); List<SystemLocalStorageTb> systemLocalStorageTbs = this.queryLocalStorageByArgs(args);
// KitXlsxExportUtil.exportFile(response, "文件上传记录数据", systemLocalStorageTbs, SystemLocalStorageExportRowVo.class, // KitXlsxExportUtil.exportFile(response, "文件上传记录数据", systemLocalStorageTbs, SystemLocalStorageExportRowVo.class,
// (dataObject) -> CollUtil.newArrayList(BeanUtil.copyProperties(dataObject, SystemLocalStorageExportRowVo.class))); // (dataObject) -> CollUtil.newArrayList(KitBeanUtil.copyProperties(dataObject, SystemLocalStorageExportRowVo.class)));
List<SystemLocalStorageExportRowVo> rowVos = BeanUtil.copyToList(systemLocalStorageTbs, SystemLocalStorageExportRowVo.class); List<SystemLocalStorageExportRowVo> rowVos = KitBeanUtil.copyToList(systemLocalStorageTbs, SystemLocalStorageExportRowVo.class);
KitExcelExporter.exportSimple(response, "文件上传记录数据", SystemLocalStorageExportRowVo.class, rowVos); KitExcelExporter.exportSimple(response, "文件上传记录数据", SystemLocalStorageExportRowVo.class, rowVos);
} }
} }
@@ -26,11 +26,13 @@ import cn.odboy.system.dal.dataobject.SystemMenuTb;
import cn.odboy.system.dal.dataobject.SystemRoleTb; import cn.odboy.system.dal.dataobject.SystemRoleTb;
import cn.odboy.system.dal.model.SystemMenuExportRowVo; import cn.odboy.system.dal.model.SystemMenuExportRowVo;
import cn.odboy.system.dal.model.SystemMenuMetaVo; import cn.odboy.system.dal.model.SystemMenuMetaVo;
import cn.odboy.system.dal.model.SystemMenuRouterVo;
import cn.odboy.system.dal.model.SystemMenuVo; import cn.odboy.system.dal.model.SystemMenuVo;
import cn.odboy.system.dal.model.SystemQueryMenuArgs; import cn.odboy.system.dal.model.SystemQueryMenuArgs;
import cn.odboy.system.dal.model.SystemRoleVo; import cn.odboy.system.dal.model.SystemRoleVo;
import cn.odboy.system.dal.mysql.SystemMenuMapper; import cn.odboy.system.dal.mysql.SystemMenuMapper;
import cn.odboy.system.framework.permission.core.KitSecurityHelper; import cn.odboy.system.framework.permission.core.KitSecurityHelper;
import cn.odboy.util.KitBeanUtil;
import cn.odboy.util.KitClassUtil; import cn.odboy.util.KitClassUtil;
import cn.odboy.util.xlsx.KitExcelExporter; import cn.odboy.util.xlsx.KitExcelExporter;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@@ -278,14 +280,14 @@ public class SystemMenuService {
* @param menus 原始数据 * @param menus 原始数据
* @return / * @return /
*/ */
public List<SystemMenuTb> buildMenuTree(List<SystemMenuTb> menus) { public List<SystemMenuVo> buildMenuTree(List<SystemMenuVo> menus) {
List<SystemMenuTb> trees = new ArrayList<>(); List<SystemMenuVo> trees = new ArrayList<>();
Set<Long> ids = new HashSet<>(); Set<Long> ids = new HashSet<>();
for (SystemMenuTb menu : menus) { for (SystemMenuVo menu : menus) {
if (menu.getPid() == null) { if (menu.getPid() == null) {
trees.add(menu); trees.add(menu);
} }
for (SystemMenuTb it : menus) { for (SystemMenuVo it : menus) {
if (menu.getId().equals(it.getPid())) { if (menu.getId().equals(it.getPid())) {
if (menu.getChildren() == null) { if (menu.getChildren() == null) {
menu.setChildren(new ArrayList<>()); menu.setChildren(new ArrayList<>());
@@ -307,12 +309,12 @@ public class SystemMenuService {
* @param menus / * @param menus /
* @return / * @return /
*/ */
public List<SystemMenuVo> buildMenuVo(List<SystemMenuTb> menus) { public List<SystemMenuRouterVo> buildMenuVo(List<SystemMenuVo> menus) {
List<SystemMenuVo> list = new LinkedList<>(); List<SystemMenuRouterVo> list = new LinkedList<>();
menus.forEach(menu -> { for (SystemMenuVo menu : menus) {
if (menu != null) { if (menu != null) {
List<SystemMenuTb> menuList = menu.getChildren(); List<SystemMenuVo> menuList = menu.getChildren();
SystemMenuVo menuVo = new SystemMenuVo(); SystemMenuRouterVo menuVo = new SystemMenuRouterVo();
menuVo.setName( menuVo.setName(
ObjectUtil.isNotEmpty(menu.getComponentName()) ? menu.getComponentName() : menu.getTitle()); ObjectUtil.isNotEmpty(menu.getComponentName()) ? menu.getComponentName() : menu.getTitle());
// 一级目录需要加斜杠, 不然会报警告 // 一级目录需要加斜杠, 不然会报警告
@@ -336,17 +338,17 @@ public class SystemMenuService {
menuVo.setChildren(buildMenuVo(menuList)); menuVo.setChildren(buildMenuVo(menuList));
// 处理是一级菜单并且没有子菜单的情况 // 处理是一级菜单并且没有子菜单的情况
} else if (menu.getPid() == null) { } else if (menu.getPid() == null) {
SystemMenuVo menuVo1 = getMenuVo(menu, menuVo); SystemMenuRouterVo menuVo1 = getMenuVo(menu, menuVo);
menuVo.setName(null); menuVo.setName(null);
menuVo.setMeta(null); menuVo.setMeta(null);
menuVo.setComponent("Layout"); menuVo.setComponent("Layout");
List<SystemMenuVo> list1 = new ArrayList<>(); List<SystemMenuRouterVo> list1 = new ArrayList<>();
list1.add(menuVo1); list1.add(menuVo1);
menuVo.setChildren(list1); menuVo.setChildren(list1);
} }
list.add(menuVo); list.add(menuVo);
} }
}); }
return list; return list;
} }
@@ -357,8 +359,8 @@ public class SystemMenuService {
* @param menuVo / * @param menuVo /
* @return / * @return /
*/ */
private SystemMenuVo getMenuVo(SystemMenuTb menu, SystemMenuVo menuVo) { private SystemMenuRouterVo getMenuVo(SystemMenuTb menu, SystemMenuRouterVo menuVo) {
SystemMenuVo menuVo1 = new SystemMenuVo(); SystemMenuRouterVo menuVo1 = new SystemMenuRouterVo();
menuVo1.setMeta(menuVo.getMeta()); menuVo1.setMeta(menuVo.getMeta());
// 非外链 // 非外链
if (!menu.getIFrame()) { if (!menu.getIFrame()) {
@@ -418,10 +420,11 @@ public class SystemMenuService {
return systemMenuMapper.selectList(wrapper); return systemMenuMapper.selectList(wrapper);
} }
public List<SystemMenuVo> buildFrontMenus() { public List<SystemMenuRouterVo> buildFrontMenus() {
List<SystemMenuTb> menuList = this.listMenuByUserId(KitSecurityHelper.getCurrentUserId()); List<SystemMenuTb> menuList = this.listMenuByUserId(KitSecurityHelper.getCurrentUserId());
List<SystemMenuTb> menus = this.buildMenuTree(menuList); List<SystemMenuVo> originMenus = KitBeanUtil.copyToList(menuList, SystemMenuVo.class);
return this.buildMenuVo(menus); List<SystemMenuVo> targetMenus = this.buildMenuTree(originMenus);
return this.buildMenuVo(targetMenus);
} }
public Set<Long> listChildMenuSetByMenuId(Long id) { public Set<Long> listChildMenuSetByMenuId(Long id) {
@@ -432,9 +435,9 @@ public class SystemMenuService {
return menuSet.stream().map(SystemMenuTb::getId).collect(Collectors.toSet()); return menuSet.stream().map(SystemMenuTb::getId).collect(Collectors.toSet());
} }
public List<SystemMenuTb> listMenuSuperior(List<Long> ids) { public List<SystemMenuVo> listMenuSuperior(List<Long> ids) {
Set<SystemMenuTb> menus; Set<SystemMenuTb> menus;
List<SystemMenuTb> systemMenuTbs; List<SystemMenuVo> systemMenuTbs;
if (CollectionUtil.isNotEmpty(ids)) { if (CollectionUtil.isNotEmpty(ids)) {
menus = new LinkedHashSet<>(this.listMenuByIds(ids)); menus = new LinkedHashSet<>(this.listMenuByIds(ids));
for (SystemMenuTb menu : menus) { for (SystemMenuTb menu : menus) {
@@ -448,9 +451,11 @@ public class SystemMenuService {
} }
// 编辑菜单时不显示自己以及自己下级的数据, 避免出现PID数据环形问题 // 编辑菜单时不显示自己以及自己下级的数据, 避免出现PID数据环形问题
menus = menus.stream().filter(i -> !ids.contains(i.getId())).collect(Collectors.toSet()); menus = menus.stream().filter(i -> !ids.contains(i.getId())).collect(Collectors.toSet());
systemMenuTbs = this.buildMenuTree(new ArrayList<>(menus)); List<SystemMenuTb> newMenuList = new ArrayList<>(menus);
systemMenuTbs = this.buildMenuTree(KitBeanUtil.copyToList(newMenuList, SystemMenuVo.class));
} else { } else {
systemMenuTbs = this.listMenuByPid(null); List<SystemMenuTb> newMenuList = this.listMenuByPid(null);
systemMenuTbs = KitBeanUtil.copyToList(newMenuList, SystemMenuVo.class);
} }
return systemMenuTbs; return systemMenuTbs;
} }
@@ -15,7 +15,6 @@
*/ */
package cn.odboy.system.service; package cn.odboy.system.service;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
@@ -26,12 +25,14 @@ import cn.odboy.framework.redis.KitRedisHelper;
import cn.odboy.system.dal.dataobject.SystemQuartzJobTb; import cn.odboy.system.dal.dataobject.SystemQuartzJobTb;
import cn.odboy.system.dal.dataobject.SystemQuartzLogTb; import cn.odboy.system.dal.dataobject.SystemQuartzLogTb;
import cn.odboy.system.dal.model.SystemQuartzJobExportRowVo; import cn.odboy.system.dal.model.SystemQuartzJobExportRowVo;
import cn.odboy.system.dal.model.SystemQuartzJobVo;
import cn.odboy.system.dal.model.SystemQuartzLogExportRowVo; import cn.odboy.system.dal.model.SystemQuartzLogExportRowVo;
import cn.odboy.system.dal.model.SystemQueryQuartzJobArgs; import cn.odboy.system.dal.model.SystemQueryQuartzJobArgs;
import cn.odboy.system.dal.model.SystemUpdateQuartzJobArgs; import cn.odboy.system.dal.model.SystemUpdateQuartzJobArgs;
import cn.odboy.system.dal.mysql.SystemQuartzJobMapper; import cn.odboy.system.dal.mysql.SystemQuartzJobMapper;
import cn.odboy.system.dal.mysql.SystemQuartzLogMapper; import cn.odboy.system.dal.mysql.SystemQuartzLogMapper;
import cn.odboy.system.framework.quartz.QuartzManage; import cn.odboy.system.framework.quartz.QuartzManage;
import cn.odboy.util.KitBeanUtil;
import cn.odboy.util.KitPageUtil; import cn.odboy.util.KitPageUtil;
import cn.odboy.util.xlsx.KitExcelExporter; import cn.odboy.util.xlsx.KitExcelExporter;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@@ -108,7 +109,7 @@ public class SystemQuartzJobService {
throw new BadRequestException("子任务中不能添加当前任务ID"); throw new BadRequestException("子任务中不能添加当前任务ID");
} }
} }
SystemQuartzJobTb quartzJob = BeanUtil.copyProperties(args, SystemQuartzJobTb.class); SystemQuartzJobTb quartzJob = KitBeanUtil.copyToClass(args, SystemQuartzJobTb.class);
systemQuartzJobMapper.insertOrUpdate(quartzJob); systemQuartzJobMapper.insertOrUpdate(quartzJob);
quartzManage.updateJobCron(quartzJob); quartzManage.updateJobCron(quartzJob);
} }
@@ -167,7 +168,7 @@ public class SystemQuartzJobService {
// 如果是手动清除子任务id, 会出现id为空字符串的问题 // 如果是手动清除子任务id, 会出现id为空字符串的问题
continue; continue;
} }
SystemQuartzJobTb quartzJob = systemQuartzJobMapper.selectById(Long.parseLong(id)); SystemQuartzJobVo quartzJob = systemQuartzJobMapper.selectVoById(id);
if (quartzJob == null) { if (quartzJob == null) {
// 防止子任务不存在 // 防止子任务不存在
continue; continue;
@@ -15,7 +15,6 @@
*/ */
package cn.odboy.system.service; package cn.odboy.system.service;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.lang.Dict; import cn.hutool.core.lang.Dict;
@@ -32,6 +31,7 @@ import cn.odboy.system.dal.model.SystemRoleExportRowVo;
import cn.odboy.system.dal.model.SystemRoleVo; import cn.odboy.system.dal.model.SystemRoleVo;
import cn.odboy.system.dal.mysql.SystemRoleMapper; import cn.odboy.system.dal.mysql.SystemRoleMapper;
import cn.odboy.system.framework.permission.core.KitSecurityHelper; import cn.odboy.system.framework.permission.core.KitSecurityHelper;
import cn.odboy.util.KitBeanUtil;
import cn.odboy.util.KitPageUtil; import cn.odboy.util.KitPageUtil;
import cn.odboy.util.xlsx.KitExcelExporter; import cn.odboy.util.xlsx.KitExcelExporter;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@@ -70,7 +70,7 @@ public class SystemRoleService {
if (this.getRoleByName(args.getName()) != null) { if (this.getRoleByName(args.getName()) != null) {
throw new BadRequestException("角色名称已存在"); throw new BadRequestException("角色名称已存在");
} }
systemRoleMapper.insert(BeanUtil.copyProperties(args, SystemRoleTb.class)); systemRoleMapper.insert(KitBeanUtil.copyToClass(args, SystemRoleTb.class));
// 判断是否有部门数据, 若有, 则需创建关联 // 判断是否有部门数据, 若有, 则需创建关联
if (CollectionUtil.isNotEmpty(args.getDepts())) { if (CollectionUtil.isNotEmpty(args.getDepts())) {
systemRoleDeptService.batchInsertRoleDept(args.getDepts(), args.getId()); systemRoleDeptService.batchInsertRoleDept(args.getDepts(), args.getId());
@@ -91,7 +91,7 @@ public class SystemRoleService {
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void updateRoleById(SystemRoleVo args) { public void updateRoleById(SystemRoleVo args) {
checkRoleLevels(args.getLevel()); checkRoleLevels(args.getLevel());
SystemRoleVo role = BeanUtil.copyProperties(systemRoleMapper.selectById(args.getId()), SystemRoleVo.class); SystemRoleVo role = KitBeanUtil.copyToClass(systemRoleMapper.selectById(args.getId()), SystemRoleVo.class);
SystemRoleTb role1 = this.getRoleByName(args.getName()); SystemRoleTb role1 = this.getRoleByName(args.getName());
if (role1 != null && !role1.getId().equals(role.getId())) { if (role1 != null && !role1.getId().equals(role.getId())) {
throw new BadRequestException("角色名称已存在"); throw new BadRequestException("角色名称已存在");
@@ -15,7 +15,6 @@
*/ */
package cn.odboy.system.service; package cn.odboy.system.service;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.odboy.framework.exception.BadRequestException; import cn.odboy.framework.exception.BadRequestException;
import cn.odboy.system.dal.dataobject.SystemDeptTb; import cn.odboy.system.dal.dataobject.SystemDeptTb;
@@ -27,6 +26,7 @@ import cn.odboy.system.dal.model.SystemUserVo;
import cn.odboy.system.dal.mysql.SystemRoleMapper; import cn.odboy.system.dal.mysql.SystemRoleMapper;
import cn.odboy.system.dal.mysql.SystemUserRoleMapper; import cn.odboy.system.dal.mysql.SystemUserRoleMapper;
import cn.odboy.system.framework.permission.core.KitSecurityHelper; import cn.odboy.system.framework.permission.core.KitSecurityHelper;
import cn.odboy.util.KitBeanUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
@@ -84,7 +84,7 @@ public class SystemUserRoleService {
if (role == null) { if (role == null) {
return null; return null;
} }
SystemRoleVo roleVo = BeanUtil.copyProperties(role, SystemRoleVo.class); SystemRoleVo roleVo = KitBeanUtil.copyToClass(role, SystemRoleVo.class);
// 查询关联的菜单信息 // 查询关联的菜单信息
Set<SystemMenuTb> menus = systemRoleMenuService.queryMenuByRoleIds( Set<SystemMenuTb> menus = systemRoleMenuService.queryMenuByRoleIds(
Collections.singleton(role.getId())); Collections.singleton(role.getId()));
@@ -15,7 +15,6 @@
*/ */
package cn.odboy.system.service; package cn.odboy.system.service;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
@@ -41,6 +40,7 @@ import cn.odboy.system.dal.mysql.SystemUserMapper;
import cn.odboy.system.dal.redis.SystemUserInfoDAO; import cn.odboy.system.dal.redis.SystemUserInfoDAO;
import cn.odboy.system.dal.redis.SystemUserOnlineInfoDAO; import cn.odboy.system.dal.redis.SystemUserOnlineInfoDAO;
import cn.odboy.system.framework.permission.core.KitSecurityHelper; import cn.odboy.system.framework.permission.core.KitSecurityHelper;
import cn.odboy.util.KitBeanUtil;
import cn.odboy.util.KitFileUtil; import cn.odboy.util.KitFileUtil;
import cn.odboy.util.KitPageUtil; import cn.odboy.util.KitPageUtil;
import cn.odboy.util.KitRsaEncryptUtil; import cn.odboy.util.KitRsaEncryptUtil;
@@ -155,7 +155,6 @@ public class SystemUserService {
user.setUsername(args.getUsername()); user.setUsername(args.getUsername());
user.setEmail(args.getEmail()); user.setEmail(args.getEmail());
user.setEnabled(args.getEnabled()); user.setEnabled(args.getEnabled());
user.setDept(args.getDept());
user.setPhone(args.getPhone()); user.setPhone(args.getPhone());
user.setNickName(args.getNickName()); user.setNickName(args.getNickName());
user.setGender(args.getGender()); user.setGender(args.getGender());
@@ -436,7 +435,7 @@ public class SystemUserService {
if (user == null) { if (user == null) {
return null; return null;
} }
SystemUserVo userVo = BeanUtil.copyProperties(user, SystemUserVo.class); SystemUserVo userVo = KitBeanUtil.copyToClass(user, SystemUserVo.class);
// 查询关联的部门信息 // 查询关联的部门信息
if (user.getDeptId() != null) { if (user.getDeptId() != null) {
SystemDeptTb dept = systemDeptService.getDeptById(user.getDeptId()); SystemDeptTb dept = systemDeptService.getDeptById(user.getDeptId());
@@ -493,8 +492,7 @@ public class SystemUserService {
args.getDeptIds().addAll(systemDeptService.queryChildDeptIdByDeptIds(data)); args.getDeptIds().addAll(systemDeptService.queryChildDeptIdByDeptIds(data));
} }
// 数据权限 // 数据权限
List<Long> dataScopes = systemDataService.queryDeptIdByArgs( List<Long> dataScopes = systemDataService.queryDeptIdByArgs(this.getUserVoByUsername(currentUsername));
this.getUserByUsername(currentUsername));
// args.getDeptIds() 不为空并且数据权限不为空则取交集 // args.getDeptIds() 不为空并且数据权限不为空则取交集
if (!CollectionUtils.isEmpty(args.getDeptIds()) && !CollectionUtils.isEmpty(dataScopes)) { if (!CollectionUtils.isEmpty(args.getDeptIds()) && !CollectionUtils.isEmpty(dataScopes)) {
// 取交集 // 取交集
@@ -15,7 +15,6 @@
*/ */
package cn.odboy.system.service.impl; package cn.odboy.system.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import cn.odboy.base.KitPageResult; import cn.odboy.base.KitPageResult;
@@ -30,6 +29,7 @@ import cn.odboy.system.dal.model.SystemQueryStorageArgs;
import cn.odboy.system.dal.mysql.SystemOssStorageMapper; import cn.odboy.system.dal.mysql.SystemOssStorageMapper;
import cn.odboy.system.framework.storage.minio.MinioRepository; import cn.odboy.system.framework.storage.minio.MinioRepository;
import cn.odboy.system.service.SystemOssStorageService; import cn.odboy.system.service.SystemOssStorageService;
import cn.odboy.util.KitBeanUtil;
import cn.odboy.util.KitDateUtil; import cn.odboy.util.KitDateUtil;
import cn.odboy.util.KitFileUtil; import cn.odboy.util.KitFileUtil;
import cn.odboy.util.KitPageUtil; import cn.odboy.util.KitPageUtil;
@@ -72,7 +72,7 @@ public class SystemMinioStorageServiceImpl extends ServiceImpl<SystemOssStorageM
Page<SystemOssStorageTb> page) { Page<SystemOssStorageTb> page) {
IPage<SystemOssStorageTb> ossStorageTbs = this.selectOssStorageByArgs(args, page); IPage<SystemOssStorageTb> ossStorageTbs = this.selectOssStorageByArgs(args, page);
IPage<SystemOssStorageVo> convert = ossStorageTbs.convert(c -> { IPage<SystemOssStorageVo> convert = ossStorageTbs.convert(c -> {
SystemOssStorageVo storageVo = BeanUtil.copyProperties(c, SystemOssStorageVo.class); SystemOssStorageVo storageVo = KitBeanUtil.copyToClass(c, SystemOssStorageVo.class);
storageVo.setFileSizeDesc(KitFileUtil.getSize(storageVo.getFileSize())); storageVo.setFileSizeDesc(KitFileUtil.getSize(storageVo.getFileSize()));
return storageVo; return storageVo;
}); });
@@ -157,8 +157,8 @@ public class SystemMinioStorageServiceImpl extends ServiceImpl<SystemOssStorageM
public void exportOssStorageXlsx(HttpServletResponse response, SystemQueryStorageArgs args) { public void exportOssStorageXlsx(HttpServletResponse response, SystemQueryStorageArgs args) {
List<SystemOssStorageVo> systemOssStorageVos = this.queryOssStorage(args); List<SystemOssStorageVo> systemOssStorageVos = this.queryOssStorage(args);
// KitXlsxExportUtil.exportFile(response, "OSS文件上传记录数据", systemOssStorageVos, SystemOssStorageExportRowVo.class, // KitXlsxExportUtil.exportFile(response, "OSS文件上传记录数据", systemOssStorageVos, SystemOssStorageExportRowVo.class,
// (dataObject) -> CollUtil.newArrayList(BeanUtil.copyProperties(dataObject, SystemOssStorageExportRowVo.class))); // (dataObject) -> CollUtil.newArrayList(KitBeanUtil.copyProperties(dataObject, SystemOssStorageExportRowVo.class)));
List<SystemOssStorageExportRowVo> rowVos = BeanUtil.copyToList(systemOssStorageVos, SystemOssStorageExportRowVo.class); List<SystemOssStorageExportRowVo> rowVos = KitBeanUtil.copyToList(systemOssStorageVos, SystemOssStorageExportRowVo.class);
KitExcelExporter.exportSimple(response, "OSS文件上传记录数据", SystemOssStorageExportRowVo.class, rowVos); KitExcelExporter.exportSimple(response, "OSS文件上传记录数据", SystemOssStorageExportRowVo.class, rowVos);
} }
@@ -15,7 +15,7 @@
*/ */
package cn.odboy.framework.mybatisplus.core; package cn.odboy.framework.mybatisplus.core;
import cn.hutool.core.bean.BeanUtil; import cn.odboy.util.KitBeanUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; 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.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -41,7 +41,7 @@ public class KitMpAnyQUtil {
if (mapperTarget == null) { if (mapperTarget == null) {
return null; return null;
} }
return BeanUtil.copyProperties(mapperTarget, mapperClazz); return KitBeanUtil.copyToClass(mapperTarget, mapperClazz);
} }
public static <T> List<T> selectList(BaseMapper<T> baseMapper, Object queryParams) { public static <T> List<T> selectList(BaseMapper<T> baseMapper, Object queryParams) {
@@ -55,7 +55,7 @@ public class KitMpAnyQUtil {
if (mapperTarget == null) { if (mapperTarget == null) {
return new ArrayList<>(); return new ArrayList<>();
} }
return BeanUtil.copyToList(mapperTarget, mapperClazz); return KitBeanUtil.copyToList(mapperTarget, mapperClazz);
} }
public static <T> Long selectCount(BaseMapper<T> baseMapper, Object queryParams) { public static <T> Long selectCount(BaseMapper<T> baseMapper, Object queryParams) {
@@ -73,7 +73,7 @@ public class KitMpAnyQUtil {
QueryWrapper<T> queryWrapper = KitMpQUtil.build(queryParams); QueryWrapper<T> queryWrapper = KitMpQUtil.build(queryParams);
Page<T> tPage = baseMapper.selectPage(page, queryWrapper); Page<T> tPage = baseMapper.selectPage(page, queryWrapper);
Page<M> mapperTarget = new Page<>(); Page<M> mapperTarget = new Page<>();
mapperTarget.setRecords(BeanUtil.copyToList(tPage.getRecords(), mapperClazz)); mapperTarget.setRecords(KitBeanUtil.copyToList(tPage.getRecords(), mapperClazz));
mapperTarget.setTotal(tPage.getTotal()); mapperTarget.setTotal(tPage.getTotal());
mapperTarget.setSize(tPage.getSize()); mapperTarget.setSize(tPage.getSize());
mapperTarget.setCurrent(tPage.getCurrent()); mapperTarget.setCurrent(tPage.getCurrent());
@@ -19,6 +19,7 @@ import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ReflectUtil; import cn.hutool.core.util.ReflectUtil;
import cn.odboy.base.KitPageResult; import cn.odboy.base.KitPageResult;
import cn.odboy.util.KitBeanUtil;
import cn.odboy.util.KitPageUtil; import cn.odboy.util.KitPageUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
@@ -110,7 +111,7 @@ public interface KitMpMapper<E> extends BaseMapper<E> {
if (CollUtil.isEmpty(list)) { if (CollUtil.isEmpty(list)) {
return new ArrayList<>(); return new ArrayList<>();
} }
return BeanUtil.copyToList(list, clazz); return KitBeanUtil.copyToList(list, clazz);
} }
/** /**
@@ -125,7 +126,7 @@ public interface KitMpMapper<E> extends BaseMapper<E> {
if (CollUtil.isEmpty(list)) { if (CollUtil.isEmpty(list)) {
return new ArrayList<>(); return new ArrayList<>();
} }
return BeanUtil.copyToList(list, clazz); return KitBeanUtil.copyToList(list, clazz);
} }
/** /**
@@ -146,7 +147,7 @@ public interface KitMpMapper<E> extends BaseMapper<E> {
if (CollUtil.isEmpty(pageInfo.getRecords())) { if (CollUtil.isEmpty(pageInfo.getRecords())) {
return new KitPageResult<>(new ArrayList<>(), pageInfo.getTotal()); return new KitPageResult<>(new ArrayList<>(), pageInfo.getTotal());
} }
return new KitPageResult<>(BeanUtil.copyToList(pageInfo.getRecords(), clazz), pageInfo.getTotal()); return new KitPageResult<>(KitBeanUtil.copyToList(pageInfo.getRecords(), clazz), pageInfo.getTotal());
} }
/** /**
@@ -167,7 +168,7 @@ public interface KitMpMapper<E> extends BaseMapper<E> {
if (CollUtil.isEmpty(pageInfo.getRecords())) { if (CollUtil.isEmpty(pageInfo.getRecords())) {
return KitPageUtil.emptyListData(); return KitPageUtil.emptyListData();
} }
return new KitPageResult<>(BeanUtil.copyToList(pageInfo.getRecords(), clazz), pageInfo.getTotal()); return new KitPageResult<>(KitBeanUtil.copyToList(pageInfo.getRecords(), clazz), pageInfo.getTotal());
} }
/** /**
@@ -182,6 +183,6 @@ public interface KitMpMapper<E> extends BaseMapper<E> {
if (e == null) { if (e == null) {
return null; return null;
} }
return BeanUtil.copyProperties(e, clazz); return KitBeanUtil.copyToClass(e, clazz);
} }
} }
@@ -15,11 +15,11 @@
*/ */
package cn.odboy.framework.mybatisplus.core.interfaces; package cn.odboy.framework.mybatisplus.core.interfaces;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.odboy.base.KitPageResult; import cn.odboy.base.KitPageResult;
import cn.odboy.framework.exception.BadRequestException; import cn.odboy.framework.exception.BadRequestException;
import cn.odboy.framework.mybatisplus.core.KitMpQUtil; import cn.odboy.framework.mybatisplus.core.KitMpQUtil;
import cn.odboy.util.KitBeanUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; 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.enums.SqlMethod; import com.baomidou.mybatisplus.core.enums.SqlMethod;
@@ -45,7 +45,7 @@ public class KitMpServiceImpl<M extends KitMpMapper<T>, T> extends ServiceImpl<M
* @param resources / * @param resources /
*/ */
public <G> int saveFeatureClazz(G resources) { public <G> int saveFeatureClazz(G resources) {
return getBaseMapper().insert(BeanUtil.copyProperties(resources, this.getEntityClass())); return getBaseMapper().insert(KitBeanUtil.copyToClass(resources, this.getEntityClass()));
} }
/** /**
@@ -54,7 +54,7 @@ public class KitMpServiceImpl<M extends KitMpMapper<T>, T> extends ServiceImpl<M
* @param resources / * @param resources /
*/ */
public <G> int saveFeatureClazzList(List<G> resources) { public <G> int saveFeatureClazzList(List<G> resources) {
return getBaseMapper().insertBatchSomeColumn(BeanUtil.copyToList(resources, this.getEntityClass())); return getBaseMapper().insertBatchSomeColumn(KitBeanUtil.copyToList(resources, this.getEntityClass()));
} }
/** /**
@@ -63,7 +63,7 @@ public class KitMpServiceImpl<M extends KitMpMapper<T>, T> extends ServiceImpl<M
* @param resources / * @param resources /
*/ */
public <G> int modifyFeatureClazzById(G resources) { public <G> int modifyFeatureClazzById(G resources) {
return getBaseMapper().updateById(BeanUtil.copyProperties(resources, this.getEntityClass())); return getBaseMapper().updateById(KitBeanUtil.copyToClass(resources, this.getEntityClass()));
} }
/** /**
@@ -76,7 +76,7 @@ public class KitMpServiceImpl<M extends KitMpMapper<T>, T> extends ServiceImpl<M
String sqlStatement = this.getSqlStatement(SqlMethod.UPDATE_BY_ID); String sqlStatement = this.getSqlStatement(SqlMethod.UPDATE_BY_ID);
return this.executeBatch(resources, batchSize, (sqlSession, entity) -> { return this.executeBatch(resources, batchSize, (sqlSession, entity) -> {
MapperMethod.ParamMap<T> param = new MapperMethod.ParamMap<>(); MapperMethod.ParamMap<T> param = new MapperMethod.ParamMap<>();
param.put("et", BeanUtil.copyProperties(entity, this.getEntityClass())); param.put("et", KitBeanUtil.copyToClass(entity, this.getEntityClass()));
sqlSession.update(sqlStatement, param); sqlSession.update(sqlStatement, param);
}); });
} }
@@ -89,7 +89,7 @@ public class KitMpServiceImpl<M extends KitMpMapper<T>, T> extends ServiceImpl<M
*/ */
public <G> G queryFeatureClazzById(Serializable id, Class<G> targetClazz) { public <G> G queryFeatureClazzById(Serializable id, Class<G> targetClazz) {
T entity = this.getById(id); T entity = this.getById(id);
return entity == null ? null : BeanUtil.copyProperties(entity, targetClazz); return entity == null ? null : KitBeanUtil.copyToClass(entity, targetClazz);
} }
/** /**
@@ -126,7 +126,7 @@ public class KitMpServiceImpl<M extends KitMpMapper<T>, T> extends ServiceImpl<M
if (ts.isEmpty()) { if (ts.isEmpty()) {
return null; return null;
} }
return BeanUtil.copyProperties(ts.stream().findFirst().get(), clazz); return KitBeanUtil.copyToClass(ts.stream().findFirst().get(), clazz);
} }
/** /**
@@ -137,8 +137,7 @@ public class KitMpServiceImpl<M extends KitMpMapper<T>, T> extends ServiceImpl<M
*/ */
public <G> List<G> queryFeatureClazzListByIds(List<Serializable> ids, Class<G> targetClazz) { public <G> List<G> queryFeatureClazzListByIds(List<Serializable> ids, Class<G> targetClazz) {
List<T> entitys = this.listByIds(ids); List<T> entitys = this.listByIds(ids);
return entitys == null || entitys.isEmpty() ? CollUtil.newArrayList() return entitys == null || entitys.isEmpty() ? CollUtil.newArrayList() : KitBeanUtil.copyToList(entitys, targetClazz);
: BeanUtil.copyToList(entitys, targetClazz);
} }
/** /**
@@ -172,7 +171,7 @@ public class KitMpServiceImpl<M extends KitMpMapper<T>, T> extends ServiceImpl<M
public <G, Q> List<G> queryFeatureClazzListByArgs(Q args, Class<G> targetClazz) { public <G, Q> List<G> queryFeatureClazzListByArgs(Q args, Class<G> targetClazz) {
QueryWrapper<T> predicate = KitMpQUtil.build(args); QueryWrapper<T> predicate = KitMpQUtil.build(args);
List<T> data = baseMapper.selectList(predicate); List<T> data = baseMapper.selectList(predicate);
return BeanUtil.copyToList(data, targetClazz); return KitBeanUtil.copyToList(data, targetClazz);
} }
/** /**
@@ -185,7 +184,7 @@ public class KitMpServiceImpl<M extends KitMpMapper<T>, T> extends ServiceImpl<M
if (wrapper == null) { if (wrapper == null) {
wrapper = new LambdaQueryWrapper<>(); wrapper = new LambdaQueryWrapper<>();
} }
return BeanUtil.copyToList(baseMapper.selectList(wrapper), targetClazz); return KitBeanUtil.copyToList(baseMapper.selectList(wrapper), targetClazz);
} }
/** /**
@@ -215,14 +214,14 @@ public class KitMpServiceImpl<M extends KitMpMapper<T>, T> extends ServiceImpl<M
wrapper = new LambdaQueryWrapper<>(); wrapper = new LambdaQueryWrapper<>();
} }
IPage<T> originPageData = baseMapper.selectPage(pageable, wrapper); IPage<T> originPageData = baseMapper.selectPage(pageable, wrapper);
return new KitPageResult<>(BeanUtil.copyToList(originPageData.getRecords(), targetClazz), return new KitPageResult<>(KitBeanUtil.copyToList(originPageData.getRecords(), targetClazz),
originPageData.getTotal()); originPageData.getTotal());
} }
public <G, Q> KitPageResult<G> queryFeatureClazzPageByArgs(Q args, IPage<T> pageable, Class<G> targetClazz) { public <G, Q> KitPageResult<G> queryFeatureClazzPageByArgs(Q args, IPage<T> pageable, Class<G> targetClazz) {
QueryWrapper<T> wrapper = KitMpQUtil.build(args); QueryWrapper<T> wrapper = KitMpQUtil.build(args);
IPage<T> originPageData = baseMapper.selectPage(pageable, wrapper); IPage<T> originPageData = baseMapper.selectPage(pageable, wrapper);
return new KitPageResult<>(BeanUtil.copyToList(originPageData.getRecords(), targetClazz), return new KitPageResult<>(KitBeanUtil.copyToList(originPageData.getRecords(), targetClazz),
originPageData.getTotal()); originPageData.getTotal());
} }
@@ -0,0 +1,34 @@
package cn.odboy.util;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.bean.copier.CopyOptions;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import lombok.experimental.UtilityClass;
/**
* Bean拷贝相关
*
* @author odboy
* @date 2026-01-06
*/
@UtilityClass
public class KitBeanUtil {
public static <T> T copyToClass(Object source, Class<T> tClass) {
return BeanUtil.copyProperties(source, tClass);
}
public static void copyToTarget(Object source, Object target) {
BeanUtil.copyProperties(source, target, CopyOptions.create().setIgnoreNullValue(true));
}
public static <T> List<T> copyToList(Collection<?> collection, Class<T> targetType) {
List<T> ts = BeanUtil.copyToList(collection, targetType);
if (ts == null) {
return new ArrayList<>(0);
}
return ts;
}
}
@@ -19,6 +19,7 @@ import cn.odboy.base.KitPageArgs;
import cn.odboy.base.KitPageResult; import cn.odboy.base.KitPageResult;
import cn.odboy.system.dal.dataobject.SystemDeptTb; import cn.odboy.system.dal.dataobject.SystemDeptTb;
import cn.odboy.system.dal.model.SystemCreateDeptArgs; import cn.odboy.system.dal.model.SystemCreateDeptArgs;
import cn.odboy.system.dal.model.SystemDeptVo;
import cn.odboy.system.dal.model.SystemQueryDeptArgs; import cn.odboy.system.dal.model.SystemQueryDeptArgs;
import cn.odboy.system.framework.operalog.OperationLog; import cn.odboy.system.framework.operalog.OperationLog;
import cn.odboy.system.service.SystemDeptService; import cn.odboy.system.service.SystemDeptService;
@@ -67,7 +68,7 @@ public class SystemDeptController {
@ApiOperation("查询部门:根据ID获取同级与上级数据") @ApiOperation("查询部门:根据ID获取同级与上级数据")
@PostMapping("/searchDeptTree") @PostMapping("/searchDeptTree")
@PreAuthorize("@el.check('user:list','dept:list')") @PreAuthorize("@el.check('user:list','dept:list')")
public ResponseEntity<KitPageResult<SystemDeptTb>> queryDeptSuperiorTree(@RequestBody List<Long> ids, public ResponseEntity<KitPageResult<SystemDeptVo>> queryDeptSuperiorTree(@RequestBody List<Long> ids,
@RequestParam(defaultValue = "false") Boolean exclude) { @RequestParam(defaultValue = "false") Boolean exclude) {
return ResponseEntity.ok(systemDeptService.searchDeptTree(ids, exclude)); return ResponseEntity.ok(systemDeptService.searchDeptTree(ids, exclude));
} }
@@ -19,6 +19,7 @@ import cn.odboy.base.KitPageArgs;
import cn.odboy.base.KitPageResult; import cn.odboy.base.KitPageResult;
import cn.odboy.framework.exception.BadRequestException; import cn.odboy.framework.exception.BadRequestException;
import cn.odboy.system.dal.dataobject.SystemMenuTb; import cn.odboy.system.dal.dataobject.SystemMenuTb;
import cn.odboy.system.dal.model.SystemMenuRouterVo;
import cn.odboy.system.dal.model.SystemMenuVo; import cn.odboy.system.dal.model.SystemMenuVo;
import cn.odboy.system.dal.model.SystemQueryMenuArgs; import cn.odboy.system.dal.model.SystemQueryMenuArgs;
import cn.odboy.system.framework.operalog.OperationLog; import cn.odboy.system.framework.operalog.OperationLog;
@@ -58,9 +59,9 @@ public class SystemMenuController {
@PostMapping(value = "/buildMenus") @PostMapping(value = "/buildMenus")
@ApiOperation("获取前端所需菜单") @ApiOperation("获取前端所需菜单")
public ResponseEntity<List<SystemMenuVo>> buildMenus() { public ResponseEntity<List<SystemMenuRouterVo>> buildMenus() {
List<SystemMenuVo> systemMenuVos = systemMenuService.buildFrontMenus(); List<SystemMenuRouterVo> systemMenuRouterVos = systemMenuService.buildFrontMenus();
return ResponseEntity.ok(systemMenuVos); return ResponseEntity.ok(systemMenuRouterVos);
} }
@ApiOperation("返回全部的菜单") @ApiOperation("返回全部的菜单")
@@ -91,8 +92,8 @@ public class SystemMenuController {
@ApiOperation("查询菜单:根据ID获取同级与上级数据") @ApiOperation("查询菜单:根据ID获取同级与上级数据")
@PostMapping("/queryMenuSuperior") @PostMapping("/queryMenuSuperior")
@PreAuthorize("@el.check('menu:list')") @PreAuthorize("@el.check('menu:list')")
public ResponseEntity<List<SystemMenuTb>> queryMenuSuperior(@RequestBody List<Long> ids) { public ResponseEntity<List<SystemMenuVo>> queryMenuSuperior(@RequestBody List<Long> ids) {
List<SystemMenuTb> systemMenuTbs = systemMenuService.listMenuSuperior(ids); List<SystemMenuVo> systemMenuTbs = systemMenuService.listMenuSuperior(ids);
return ResponseEntity.ok(systemMenuTbs); return ResponseEntity.ok(systemMenuTbs);
} }
@@ -16,15 +16,11 @@
package cn.odboy.system.dal.dataobject; package cn.odboy.system.dal.dataobject;
import cn.odboy.base.KitBaseUserTimeTb; import cn.odboy.base.KitBaseUserTimeTb;
import com.alibaba.fastjson2.annotation.JSONField;
import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import java.util.List;
import java.util.Objects; import java.util.Objects;
import java.util.Set;
import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull; import javax.validation.constraints.NotNull;
import lombok.Getter; import lombok.Getter;
@@ -39,13 +35,6 @@ public class SystemDeptTb extends KitBaseUserTimeTb {
@TableId(value = "dept_id", type = IdType.AUTO) @TableId(value = "dept_id", type = IdType.AUTO)
@ApiModelProperty(value = "ID", hidden = true) @ApiModelProperty(value = "ID", hidden = true)
private Long id; private Long id;
@TableField(exist = false)
@JSONField(serialize = false)
@ApiModelProperty(value = "角色")
private Set<SystemRoleTb> roles;
@TableField(exist = false)
@ApiModelProperty(value = "子部门")
private List<SystemDeptTb> children;
@ApiModelProperty(value = "排序") @ApiModelProperty(value = "排序")
private Integer deptSort; private Integer deptSort;
@NotBlank @NotBlank
@@ -18,6 +18,7 @@ package cn.odboy.system.dal.dataobject;
import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.bean.copier.CopyOptions; import cn.hutool.core.bean.copier.CopyOptions;
import cn.odboy.base.KitBaseUserTimeTb; import cn.odboy.base.KitBaseUserTimeTb;
import cn.odboy.util.KitBeanUtil;
import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
@@ -49,6 +50,6 @@ public class SystemLocalStorageTb extends KitBaseUserTimeTb {
private String dateGroup; private String dateGroup;
public void copy(SystemLocalStorageTb source) { public void copy(SystemLocalStorageTb source) {
BeanUtil.copyProperties(source, this, CopyOptions.create().setIgnoreNullValue(true)); KitBeanUtil.copyToTarget(source, this);
} }
} }
@@ -16,15 +16,12 @@
package cn.odboy.system.dal.dataobject; package cn.odboy.system.dal.dataobject;
import cn.odboy.base.KitBaseUserTimeTb; import cn.odboy.base.KitBaseUserTimeTb;
import com.alibaba.fastjson2.annotation.JSONField;
import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import java.util.List;
import java.util.Objects; import java.util.Objects;
import java.util.Set;
import javax.validation.constraints.NotNull; import javax.validation.constraints.NotNull;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
@@ -38,12 +35,6 @@ public class SystemMenuTb extends KitBaseUserTimeTb {
@TableId(value = "menu_id", type = IdType.AUTO) @TableId(value = "menu_id", type = IdType.AUTO)
@ApiModelProperty(value = "ID", hidden = true) @ApiModelProperty(value = "ID", hidden = true)
private Long id; private Long id;
@TableField(exist = false)
@JSONField(serialize = false)
@ApiModelProperty(value = "菜单角色")
private Set<SystemRoleTb> roles;
@TableField(exist = false)
private List<SystemMenuTb> children;
@ApiModelProperty(value = "菜单标题") @ApiModelProperty(value = "菜单标题")
private String title; private String title;
@TableField(value = "name") @TableField(value = "name")
@@ -36,9 +36,6 @@ public class SystemQuartzJobTb extends KitBaseUserTimeTb {
@TableId(value = "id", type = IdType.AUTO) @TableId(value = "id", type = IdType.AUTO)
@NotNull(groups = {Update.class}) @NotNull(groups = {Update.class})
private Long id; private Long id;
@TableField(exist = false)
@ApiModelProperty(value = "用于子任务唯一标识", hidden = true)
private String uuid;
@ApiModelProperty(value = "定时器名称") @ApiModelProperty(value = "定时器名称")
private String jobName; private String jobName;
@NotBlank @NotBlank
@@ -45,8 +45,7 @@ public class SystemRoleTb extends KitBaseUserTimeTb {
@ApiModelProperty(value = "名称", hidden = true) @ApiModelProperty(value = "名称", hidden = true)
private String name; private String name;
@ApiModelProperty(value = "数据权限,全部 、 本级 、 自定义") @ApiModelProperty(value = "数据权限,全部 、 本级 、 自定义")
private String dataScope = private String dataScope = SystemDataScopeEnum.THIS_LEVEL.getValue();
SystemDataScopeEnum.THIS_LEVEL.getValue();
@ApiModelProperty(value = "级别,数值越小,级别越大") @ApiModelProperty(value = "级别,数值越小,级别越大")
private Integer level = 3; private Integer level = 3;
@ApiModelProperty(value = "描述") @ApiModelProperty(value = "描述")
@@ -41,9 +41,6 @@ public class SystemUserTb extends KitBaseUserTimeTb {
@TableField(value = "dept_id") @TableField(value = "dept_id")
@ApiModelProperty(hidden = true) @ApiModelProperty(hidden = true)
private Long deptId; private Long deptId;
@ApiModelProperty(value = "用户部门")
@TableField(exist = false)
private SystemDeptTb dept;
@NotBlank @NotBlank
@ApiModelProperty(value = "用户名称") @ApiModelProperty(value = "用户名称")
private String username; private String username;
@@ -0,0 +1,19 @@
package cn.odboy.system.dal.model;
import cn.odboy.system.dal.dataobject.SystemDeptTb;
import cn.odboy.system.dal.dataobject.SystemRoleTb;
import io.swagger.annotations.ApiModelProperty;
import java.util.List;
import java.util.Set;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class SystemDeptVo extends SystemDeptTb {
@ApiModelProperty(value = "角色")
private Set<SystemRoleTb> roles;
@ApiModelProperty(value = "子部门")
private List<SystemDeptVo> children;
}
@@ -0,0 +1,47 @@
/*
* Copyright 2021-2025 Odboy
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package cn.odboy.system.dal.model;
import cn.odboy.base.KitObject;
import io.swagger.annotations.ApiModelProperty;
import java.util.List;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* 构建前端路由时用到
*/
@Data
@EqualsAndHashCode(callSuper = false)
public class SystemMenuRouterVo extends KitObject {
@ApiModelProperty(value = "菜单名称")
private String name;
@ApiModelProperty(value = "路径")
private String path;
@ApiModelProperty(value = "隐藏状态")
private Boolean hidden;
@ApiModelProperty(value = "重定向")
private String redirect;
@ApiModelProperty(value = "组件")
private String component;
@ApiModelProperty(value = "总是显示")
private Boolean alwaysShow;
@ApiModelProperty(value = "元数据")
private SystemMenuMetaVo meta;
@ApiModelProperty(value = "子路由")
private List<SystemMenuRouterVo> children;
}
@@ -1,47 +1,19 @@
/*
* Copyright 2021-2025 Odboy
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package cn.odboy.system.dal.model; package cn.odboy.system.dal.model;
import cn.odboy.base.KitObject; import cn.odboy.system.dal.dataobject.SystemMenuTb;
import cn.odboy.system.dal.dataobject.SystemRoleTb;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import java.util.List; import java.util.List;
import lombok.Data; import java.util.Set;
import lombok.EqualsAndHashCode; import lombok.Getter;
import lombok.Setter;
/** @Getter
* 构建前端路由时用到 @Setter
*/ public class SystemMenuVo extends SystemMenuTb {
@Data
@EqualsAndHashCode(callSuper = false)
public class SystemMenuVo extends KitObject {
@ApiModelProperty(value = "菜单名称") @ApiModelProperty(value = "菜单角色")
private String name; private Set<SystemRoleTb> roles;
@ApiModelProperty(value = "路径") @ApiModelProperty(value = "子菜单")
private String path;
@ApiModelProperty(value = "隐藏状态")
private Boolean hidden;
@ApiModelProperty(value = "重定向")
private String redirect;
@ApiModelProperty(value = "组件")
private String component;
@ApiModelProperty(value = "总是显示")
private Boolean alwaysShow;
@ApiModelProperty(value = "元数据")
private SystemMenuMetaVo meta;
@ApiModelProperty(value = "子路由")
private List<SystemMenuVo> children; private List<SystemMenuVo> children;
} }
@@ -0,0 +1,14 @@
package cn.odboy.system.dal.model;
import cn.odboy.system.dal.dataobject.SystemQuartzJobTb;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class SystemQuartzJobVo extends SystemQuartzJobTb {
@ApiModelProperty(value = "用于子任务唯一标识", hidden = true)
private String uuid;
}
@@ -1,8 +1,10 @@
package cn.odboy.system.dal.model; package cn.odboy.system.dal.model;
import cn.odboy.system.dal.dataobject.SystemDeptTb;
import cn.odboy.system.dal.dataobject.SystemJobTb; import cn.odboy.system.dal.dataobject.SystemJobTb;
import cn.odboy.system.dal.dataobject.SystemRoleTb; import cn.odboy.system.dal.dataobject.SystemRoleTb;
import cn.odboy.system.dal.dataobject.SystemUserTb; import cn.odboy.system.dal.dataobject.SystemUserTb;
import com.baomidou.mybatisplus.annotation.TableField;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import java.util.Set; import java.util.Set;
import lombok.Getter; import lombok.Getter;
@@ -11,7 +13,8 @@ import lombok.Setter;
@Getter @Getter
@Setter @Setter
public class SystemUserVo extends SystemUserTb { public class SystemUserVo extends SystemUserTb {
@ApiModelProperty(value = "用户部门")
private SystemDeptTb dept;
@ApiModelProperty(value = "用户角色") @ApiModelProperty(value = "用户角色")
private Set<SystemRoleTb> roles; private Set<SystemRoleTb> roles;
@ApiModelProperty(value = "用户岗位") @ApiModelProperty(value = "用户岗位")
@@ -15,7 +15,10 @@
*/ */
package cn.odboy.system.dal.mysql; package cn.odboy.system.dal.mysql;
import cn.hutool.core.bean.BeanUtil;
import cn.odboy.system.dal.dataobject.SystemQuartzJobTb; import cn.odboy.system.dal.dataobject.SystemQuartzJobTb;
import cn.odboy.system.dal.model.SystemQuartzJobVo;
import cn.odboy.util.KitBeanUtil;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
@@ -27,4 +30,7 @@ import org.apache.ibatis.annotations.Mapper;
@Mapper @Mapper
public interface SystemQuartzJobMapper extends BaseMapper<SystemQuartzJobTb> { public interface SystemQuartzJobMapper extends BaseMapper<SystemQuartzJobTb> {
default SystemQuartzJobVo selectVoById(String id) {
return KitBeanUtil.copyToClass(selectById(id), SystemQuartzJobVo.class);
}
} }
@@ -8,6 +8,7 @@ import cn.odboy.framework.redis.KitRedisHelper;
import cn.odboy.system.dal.model.SystemUserJwtVo; import cn.odboy.system.dal.model.SystemUserJwtVo;
import cn.odboy.system.dal.model.SystemUserOnlineVo; import cn.odboy.system.dal.model.SystemUserOnlineVo;
import cn.odboy.system.framework.permission.core.handler.TokenProvider; import cn.odboy.system.framework.permission.core.handler.TokenProvider;
import cn.odboy.util.KitBeanUtil;
import cn.odboy.util.KitBrowserUtil; import cn.odboy.util.KitBrowserUtil;
import cn.odboy.util.KitDesEncryptUtil; import cn.odboy.util.KitDesEncryptUtil;
import cn.odboy.util.KitFileUtil; import cn.odboy.util.KitFileUtil;
@@ -81,28 +82,28 @@ public class SystemUserOnlineInfoDAO {
redisHelper.del(loginKey); redisHelper.del(loginKey);
} }
/** // /**
* 导出 // * 导出
* // *
* @param all / // * @param all /
* @param response / // * @param response /
* @throws IOException / // * @throws IOException /
*/ // */
public void downloadUserOnlineModelExcel(List<SystemUserOnlineVo> all, HttpServletResponse response) // public void downloadUserOnlineModelExcel(List<SystemUserOnlineVo> all, HttpServletResponse response)
throws IOException { // throws IOException {
List<Map<String, Object>> list = new ArrayList<>(); // List<Map<String, Object>> list = new ArrayList<>();
for (SystemUserOnlineVo user : all) { // for (SystemUserOnlineVo user : all) {
Map<String, Object> map = new LinkedHashMap<>(); // Map<String, Object> map = new LinkedHashMap<>();
map.put("用户名", user.getUserName()); // map.put("用户名", user.getUserName());
map.put("部门", user.getDept()); // map.put("部门", user.getDept());
map.put("登录IP", user.getIp()); // map.put("登录IP", user.getIp());
map.put("登录地点", user.getAddress()); // map.put("登录地点", user.getAddress());
map.put("浏览器", user.getBrowser()); // map.put("浏览器", user.getBrowser());
map.put("登录日期", user.getLoginTime()); // map.put("登录日期", user.getLoginTime());
list.add(map); // list.add(map);
} // }
KitFileUtil.downloadExcel(list, response); // KitFileUtil.downloadExcel(list, response);
} // }
/** /**
* 根据用户名强退用户 * 根据用户名强退用户
@@ -172,8 +173,8 @@ public class SystemUserOnlineInfoDAO {
public void exportOnlineUserXlsx(HttpServletResponse response, String username) { public void exportOnlineUserXlsx(HttpServletResponse response, String username) {
List<SystemUserOnlineVo> userOnlineVos = this.queryUserOnlineModelListByUsername(username); List<SystemUserOnlineVo> userOnlineVos = this.queryUserOnlineModelListByUsername(username);
// KitXlsxExportUtil.exportFile(response, "在线用户数据", userOnlineVos, SystemUserOnlineExportRowVo.class, // KitXlsxExportUtil.exportFile(response, "在线用户数据", userOnlineVos, SystemUserOnlineExportRowVo.class,
// (dataObject) -> CollUtil.newArrayList(BeanUtil.copyProperties(dataObject, SystemUserOnlineExportRowVo.class))); // (dataObject) -> CollUtil.newArrayList(KitBeanUtil.copyProperties(dataObject, SystemUserOnlineExportRowVo.class)));
List<SystemUserOnlineVo> rowVos = BeanUtil.copyToList(userOnlineVos, SystemUserOnlineVo.class); List<SystemUserOnlineVo> rowVos = KitBeanUtil.copyToList(userOnlineVos, SystemUserOnlineVo.class);
KitExcelExporter.exportSimple(response, "在线用户数据", SystemUserOnlineVo.class, rowVos); KitExcelExporter.exportSimple(response, "在线用户数据", SystemUserOnlineVo.class, rowVos);
} }
} }
@@ -26,6 +26,7 @@ import cn.odboy.framework.quartz.core.QuartzRunnable;
import cn.odboy.framework.redis.KitRedisHelper; import cn.odboy.framework.redis.KitRedisHelper;
import cn.odboy.system.dal.dataobject.SystemQuartzJobTb; import cn.odboy.system.dal.dataobject.SystemQuartzJobTb;
import cn.odboy.system.dal.dataobject.SystemQuartzLogTb; import cn.odboy.system.dal.dataobject.SystemQuartzLogTb;
import cn.odboy.system.dal.model.SystemQuartzJobVo;
import cn.odboy.system.dal.model.SystemSendEmailArgs; import cn.odboy.system.dal.model.SystemSendEmailArgs;
import cn.odboy.system.dal.mysql.SystemQuartzLogMapper; import cn.odboy.system.dal.mysql.SystemQuartzLogMapper;
import cn.odboy.system.service.SystemEmailService; import cn.odboy.system.service.SystemEmailService;
@@ -51,7 +52,7 @@ public class ExecutionJobBean extends QuartzJobBean {
@Override @Override
public void executeInternal(JobExecutionContext context) { public void executeInternal(JobExecutionContext context) {
// 获取任务 // 获取任务
SystemQuartzJobTb quartzJob = (SystemQuartzJobTb) context.getMergedJobDataMap().get(SystemQuartzJobTb.JOB_KEY); SystemQuartzJobVo quartzJob = (SystemQuartzJobVo) context.getMergedJobDataMap().get(SystemQuartzJobTb.JOB_KEY);
// 获取spring bean // 获取spring bean
SystemQuartzLogMapper quartzLogMapper = KitSpringBeanHolder.getBean(SystemQuartzLogMapper.class); SystemQuartzLogMapper quartzLogMapper = KitSpringBeanHolder.getBean(SystemQuartzLogMapper.class);
SystemQuartzJobService systemQuartzJobService = KitSpringBeanHolder.getBean(SystemQuartzJobService.class); SystemQuartzJobService systemQuartzJobService = KitSpringBeanHolder.getBean(SystemQuartzJobService.class);
@@ -66,8 +67,7 @@ public class ExecutionJobBean extends QuartzJobBean {
quartzLog.setCronExpression(quartzJob.getCronExpression()); quartzLog.setCronExpression(quartzJob.getCronExpression());
try { try {
// 执行任务 // 执行任务
QuartzRunnable task = QuartzRunnable task = new QuartzRunnable(quartzJob.getBeanName(), quartzJob.getMethodName(), quartzJob.getParams());
new QuartzRunnable(quartzJob.getBeanName(), quartzJob.getMethodName(), quartzJob.getParams());
Future<?> future = executor.submit(task); Future<?> future = executor.submit(task);
// 忽略任务执行结果 // 忽略任务执行结果
future.get(); future.get();
@@ -120,8 +120,7 @@ public class ExecutionJobBean extends QuartzJobBean {
Map<String, Object> data = new HashMap<>(16); Map<String, Object> data = new HashMap<>(16);
data.put("task", quartzJob); data.put("task", quartzJob);
data.put("msg", msg); data.put("msg", msg);
TemplateEngine engine = TemplateEngine engine = TemplateUtil.createEngine(new TemplateConfig("template", TemplateConfig.ResourceMode.CLASSPATH));
TemplateUtil.createEngine(new TemplateConfig("template", TemplateConfig.ResourceMode.CLASSPATH));
Template template = engine.getTemplate("SystemQuartzJobTaskAlarmTemplate.ftl"); Template template = engine.getTemplate("SystemQuartzJobTaskAlarmTemplate.ftl");
sendEmailRequest.setContent(template.render(data)); sendEmailRequest.setContent(template.render(data));
List<String> emails = Arrays.asList(quartzJob.getEmail().split("[,,]")); List<String> emails = Arrays.asList(quartzJob.getEmail().split("[,,]"));
@@ -1,6 +1,5 @@
package cn.odboy.system.service; package cn.odboy.system.service;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import cn.odboy.constant.CaptchaCodeEnum; import cn.odboy.constant.CaptchaCodeEnum;
@@ -16,6 +15,7 @@ import cn.odboy.system.dal.redis.SystemUserOnlineInfoDAO;
import cn.odboy.system.framework.permission.core.KitSecurityHelper; import cn.odboy.system.framework.permission.core.KitSecurityHelper;
import cn.odboy.system.framework.permission.core.handler.TokenProvider; import cn.odboy.system.framework.permission.core.handler.TokenProvider;
import cn.odboy.system.framework.permission.core.handler.UserDetailsHandler; import cn.odboy.system.framework.permission.core.handler.UserDetailsHandler;
import cn.odboy.util.KitBeanUtil;
import cn.odboy.util.KitRsaEncryptUtil; import cn.odboy.util.KitRsaEncryptUtil;
import com.wf.captcha.base.Captcha; import com.wf.captcha.base.Captcha;
import java.util.HashMap; import java.util.HashMap;
@@ -47,8 +47,7 @@ public class SystemAuthService {
public Map<String, Object> doLogin(SystemUserLoginArgs loginRequest, HttpServletRequest request) throws Exception { public Map<String, Object> doLogin(SystemUserLoginArgs loginRequest, HttpServletRequest request) throws Exception {
// 密码解密 // 密码解密
String password = String password = KitRsaEncryptUtil.decryptByPrivateKey(properties.getRsa().getPrivateKey(), loginRequest.getPassword());
KitRsaEncryptUtil.decryptByPrivateKey(properties.getRsa().getPrivateKey(), loginRequest.getPassword());
// 查询验证码 // 查询验证码
String code = redisHelper.get(loginRequest.getUuid(), String.class); String code = redisHelper.get(loginRequest.getUuid(), String.class);
// 清除验证码 // 清除验证码
@@ -65,15 +64,14 @@ public class SystemAuthService {
if (!passwordEncoder.matches(password, jwtUser.getPassword())) { if (!passwordEncoder.matches(password, jwtUser.getPassword())) {
throw new BadRequestException("登录密码错误"); throw new BadRequestException("登录密码错误");
} }
Authentication authentication = Authentication authentication = new UsernamePasswordAuthenticationToken(jwtUser, null, jwtUser.getAuthorities());
new UsernamePasswordAuthenticationToken(jwtUser, null, jwtUser.getAuthorities());
SecurityContextHolder.getContext().setAuthentication(authentication); SecurityContextHolder.getContext().setAuthentication(authentication);
// 生成令牌 // 生成令牌
String token = tokenProvider.createToken(jwtUser); String token = tokenProvider.createToken(jwtUser);
// 返回 token 与 用户信息 // 返回 token 与 用户信息
Map<String, Object> authInfo = new HashMap<>(2) {{ Map<String, Object> authInfo = new HashMap<>(2) {{
put("token", String.format("%s %s", SystemConst.TOKEN_PREFIX, token)); put("token", String.format("%s %s", SystemConst.TOKEN_PREFIX, token));
put("user", BeanUtil.copyProperties(jwtUser, SystemUserInfoVo.class)); put("user", KitBeanUtil.copyToClass(jwtUser, SystemUserInfoVo.class));
}}; }};
if (properties.getLogin().isSingle()) { if (properties.getLogin().isSingle()) {
// 踢掉之前已经登录的token // 踢掉之前已经登录的token
@@ -87,7 +85,8 @@ public class SystemAuthService {
public SystemUserInfoVo getCurrentUserInfoVo() { public SystemUserInfoVo getCurrentUserInfoVo() {
SystemUserJwtVo jwtUser = (SystemUserJwtVo) KitSecurityHelper.getCurrentUser(); SystemUserJwtVo jwtUser = (SystemUserJwtVo) KitSecurityHelper.getCurrentUser();
return BeanUtil.copyProperties(jwtUser, SystemUserInfoVo.class); // 转换是为了去掉密码
return KitBeanUtil.copyToClass(jwtUser, SystemUserInfoVo.class);
} }
public Map<String, Object> getCaptchaInfo() { public Map<String, Object> getCaptchaInfo() {
@@ -21,6 +21,7 @@ import cn.odboy.system.dal.dataobject.SystemDeptTb;
import cn.odboy.system.dal.dataobject.SystemRoleTb; import cn.odboy.system.dal.dataobject.SystemRoleTb;
import cn.odboy.system.dal.dataobject.SystemUserTb; import cn.odboy.system.dal.dataobject.SystemUserTb;
import cn.odboy.system.dal.model.SystemRoleVo; import cn.odboy.system.dal.model.SystemRoleVo;
import cn.odboy.system.dal.model.SystemUserVo;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Objects; import java.util.Objects;
@@ -49,7 +50,7 @@ public class SystemDataService {
* @param user / * @param user /
* @return / * @return /
*/ */
public List<Long> queryDeptIdByArgs(SystemUserTb user) { public List<Long> queryDeptIdByArgs(SystemUserVo user) {
List<Long> deptIds = new ArrayList<>(); List<Long> deptIds = new ArrayList<>();
// 查询用户角色 // 查询用户角色
List<SystemRoleVo> roleList = systemUserRoleService.queryRoleByUsersId(user.getId()); List<SystemRoleVo> roleList = systemUserRoleService.queryRoleByUsersId(user.getId());
@@ -27,11 +27,13 @@ import cn.odboy.system.constant.SystemZhConst;
import cn.odboy.system.dal.dataobject.SystemDeptTb; import cn.odboy.system.dal.dataobject.SystemDeptTb;
import cn.odboy.system.dal.model.SystemCreateDeptArgs; import cn.odboy.system.dal.model.SystemCreateDeptArgs;
import cn.odboy.system.dal.model.SystemDeptExportRowVo; import cn.odboy.system.dal.model.SystemDeptExportRowVo;
import cn.odboy.system.dal.model.SystemDeptVo;
import cn.odboy.system.dal.model.SystemProductLineTreeVo; import cn.odboy.system.dal.model.SystemProductLineTreeVo;
import cn.odboy.system.dal.model.SystemProductLineVo; import cn.odboy.system.dal.model.SystemProductLineVo;
import cn.odboy.system.dal.model.SystemQueryDeptArgs; import cn.odboy.system.dal.model.SystemQueryDeptArgs;
import cn.odboy.system.dal.mysql.SystemDeptMapper; import cn.odboy.system.dal.mysql.SystemDeptMapper;
import cn.odboy.system.framework.permission.core.KitSecurityHelper; import cn.odboy.system.framework.permission.core.KitSecurityHelper;
import cn.odboy.util.KitBeanUtil;
import cn.odboy.util.KitClassUtil; import cn.odboy.util.KitClassUtil;
import cn.odboy.util.xlsx.KitExcelExporter; import cn.odboy.util.xlsx.KitExcelExporter;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@@ -68,7 +70,7 @@ public class SystemDeptService {
*/ */
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void saveDept(SystemCreateDeptArgs args) { public void saveDept(SystemCreateDeptArgs args) {
systemDeptMapper.insert(BeanUtil.copyProperties(args, SystemDeptTb.class)); systemDeptMapper.insert(KitBeanUtil.copyToClass(args, SystemDeptTb.class));
this.updateDeptSubCnt(args.getPid()); this.updateDeptSubCnt(args.getPid());
} }
@@ -272,7 +274,7 @@ public class SystemDeptService {
* *
* @return / * @return /
*/ */
public KitPageResult<SystemDeptTb> searchDeptTree(List<Long> ids, Boolean exclude) { public KitPageResult<SystemDeptVo> searchDeptTree(List<Long> ids, Boolean exclude) {
Set<SystemDeptTb> deptSet1 = new LinkedHashSet<>(); Set<SystemDeptTb> deptSet1 = new LinkedHashSet<>();
for (Long id : ids) { for (Long id : ids) {
// 同级数据 // 同级数据
@@ -290,18 +292,18 @@ public class SystemDeptService {
} }
deptSet1.addAll(depts); deptSet1.addAll(depts);
} }
ArrayList<SystemDeptTb> deptList = new ArrayList<>(deptSet1); List<SystemDeptVo> deptList = KitBeanUtil.copyToList(new ArrayList<>(deptSet1), SystemDeptVo.class);
// 构建部门树 // 构建部门树
Set<SystemDeptTb> trees = new LinkedHashSet<>(); Set<SystemDeptVo> trees = new LinkedHashSet<>();
Set<SystemDeptTb> deptSet = new LinkedHashSet<>(); Set<SystemDeptVo> deptSet = new LinkedHashSet<>();
List<String> deptNames = deptList.stream().map(SystemDeptTb::getName).collect(Collectors.toList()); List<String> deptNames = deptList.stream().map(SystemDeptVo::getName).collect(Collectors.toList());
boolean isChild; boolean isChild;
for (SystemDeptTb dept : deptList) { for (SystemDeptVo dept : deptList) {
isChild = false; isChild = false;
if (dept.getPid() == null) { if (dept.getPid() == null) {
trees.add(dept); trees.add(dept);
} }
for (SystemDeptTb it : deptList) { for (SystemDeptVo it : deptList) {
if (it.getPid() != null && dept.getId().equals(it.getPid())) { if (it.getPid() != null && dept.getId().equals(it.getPid())) {
isChild = true; isChild = true;
if (dept.getChildren() == null) { if (dept.getChildren() == null) {
@@ -319,7 +321,7 @@ public class SystemDeptService {
if (CollectionUtil.isEmpty(trees)) { if (CollectionUtil.isEmpty(trees)) {
trees = deptSet; trees = deptSet;
} }
KitPageResult<SystemDeptTb> baseResult = new KitPageResult<>(); KitPageResult<SystemDeptVo> baseResult = new KitPageResult<>();
baseResult.setContent(CollectionUtil.isEmpty(trees) ? new ArrayList<>(deptSet) : new ArrayList<>(trees)); baseResult.setContent(CollectionUtil.isEmpty(trees) ? new ArrayList<>(deptSet) : new ArrayList<>(trees));
baseResult.setTotalElements(deptSet.size()); baseResult.setTotalElements(deptSet.size());
return baseResult; return baseResult;
@@ -26,6 +26,7 @@ import cn.odboy.system.dal.model.SystemDictDetailVo;
import cn.odboy.system.dal.model.SystemQueryDictDetailArgs; import cn.odboy.system.dal.model.SystemQueryDictDetailArgs;
import cn.odboy.system.dal.mysql.SystemDictDetailMapper; import cn.odboy.system.dal.mysql.SystemDictDetailMapper;
import cn.odboy.system.dal.mysql.SystemDictMapper; import cn.odboy.system.dal.mysql.SystemDictMapper;
import cn.odboy.util.KitBeanUtil;
import cn.odboy.util.KitPageUtil; import cn.odboy.util.KitPageUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -55,7 +56,7 @@ public class SystemDictDetailService {
*/ */
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void saveDictDetail(SystemCreateDictDetailArgs args) { public void saveDictDetail(SystemCreateDictDetailArgs args) {
SystemDictDetailTb dictDetail = BeanUtil.copyProperties(args, SystemDictDetailTb.class); SystemDictDetailTb dictDetail = KitBeanUtil.copyToClass(args, SystemDictDetailTb.class);
dictDetail.setDictId(args.getDict().getId()); dictDetail.setDictId(args.getDict().getId());
systemDictDetailMapper.insert(dictDetail); systemDictDetailMapper.insert(dictDetail);
} }
@@ -106,7 +107,7 @@ public class SystemDictDetailService {
*/ */
public KitPageResult<SystemDictDetailVo> searchDictDetail(SystemQueryDictDetailArgs args, public KitPageResult<SystemDictDetailVo> searchDictDetail(SystemQueryDictDetailArgs args,
Page<SystemDictDetailTb> page) { Page<SystemDictDetailTb> page) {
IPage<SystemDictDetailVo> iPage = systemDictDetailMapper.selectPageByArgs(page, args).convert(i -> BeanUtil.copyProperties(i, SystemDictDetailVo.class)); IPage<SystemDictDetailVo> iPage = systemDictDetailMapper.selectPageByArgs(page, args).convert(i -> KitBeanUtil.copyToClass(i, SystemDictDetailVo.class));
List<Long> dictIds = iPage.getRecords().stream().map(SystemDictDetailTb::getDictId).collect(Collectors.toList()); List<Long> dictIds = iPage.getRecords().stream().map(SystemDictDetailTb::getDictId).collect(Collectors.toList());
Map<Long, SystemDictTb> id2ItemMap = systemDictMapper.selectByIds(dictIds).stream().collect(Collectors.toMap(SystemDictTb::getId, i -> i)); Map<Long, SystemDictTb> id2ItemMap = systemDictMapper.selectByIds(dictIds).stream().collect(Collectors.toMap(SystemDictTb::getId, i -> i));
for (SystemDictDetailVo record : iPage.getRecords()) { for (SystemDictDetailVo record : iPage.getRecords()) {
@@ -130,7 +131,7 @@ public class SystemDictDetailService {
return new ArrayList<>(); return new ArrayList<>();
} }
return this.listDictDetailByDictId(systemDictTb.getId()).stream().map(m -> { return this.listDictDetailByDictId(systemDictTb.getId()).stream().map(m -> {
SystemDictDetailVo detailVo = BeanUtil.copyProperties(m, SystemDictDetailVo.class); SystemDictDetailVo detailVo = KitBeanUtil.copyToClass(m, SystemDictDetailVo.class);
detailVo.setDict(systemDictTb); detailVo.setDict(systemDictTb);
return detailVo; return detailVo;
}).collect(Collectors.toList()); }).collect(Collectors.toList());
@@ -25,6 +25,7 @@ import cn.odboy.system.dal.model.SystemDictDetailVo;
import cn.odboy.system.dal.model.SystemDictExportRowVo; import cn.odboy.system.dal.model.SystemDictExportRowVo;
import cn.odboy.system.dal.model.SystemQueryDictArgs; import cn.odboy.system.dal.model.SystemQueryDictArgs;
import cn.odboy.system.dal.mysql.SystemDictMapper; import cn.odboy.system.dal.mysql.SystemDictMapper;
import cn.odboy.util.KitBeanUtil;
import cn.odboy.util.KitPageUtil; import cn.odboy.util.KitPageUtil;
import cn.odboy.util.xlsx.KitExcelExporter; import cn.odboy.util.xlsx.KitExcelExporter;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@@ -52,7 +53,7 @@ public class SystemDictService {
*/ */
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void saveDict(SystemCreateDictArgs args) { public void saveDict(SystemCreateDictArgs args) {
systemDictMapper.insert(BeanUtil.copyProperties(args, SystemDictTb.class)); systemDictMapper.insert(KitBeanUtil.copyToClass(args, SystemDictTb.class));
} }
/** /**
@@ -25,6 +25,7 @@ import cn.odboy.system.dal.model.SystemCreateJobArgs;
import cn.odboy.system.dal.model.SystemJobExportRowVo; import cn.odboy.system.dal.model.SystemJobExportRowVo;
import cn.odboy.system.dal.model.SystemQueryJobArgs; import cn.odboy.system.dal.model.SystemQueryJobArgs;
import cn.odboy.system.dal.mysql.SystemJobMapper; import cn.odboy.system.dal.mysql.SystemJobMapper;
import cn.odboy.util.KitBeanUtil;
import cn.odboy.util.KitPageUtil; import cn.odboy.util.KitPageUtil;
import cn.odboy.util.xlsx.KitExcelExporter; import cn.odboy.util.xlsx.KitExcelExporter;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@@ -56,7 +57,7 @@ public class SystemJobService {
if (job != null) { if (job != null) {
throw new BadRequestException("职位名称已存在"); throw new BadRequestException("职位名称已存在");
} }
systemJobMapper.insert(BeanUtil.copyProperties(args, SystemJobTb.class)); systemJobMapper.insert(KitBeanUtil.copyToClass(args, SystemJobTb.class));
} }
/** /**
@@ -31,6 +31,7 @@ import cn.odboy.system.dal.dataobject.SystemLocalStorageTb;
import cn.odboy.system.dal.model.SystemLocalStorageExportRowVo; import cn.odboy.system.dal.model.SystemLocalStorageExportRowVo;
import cn.odboy.system.dal.model.SystemQueryStorageArgs; import cn.odboy.system.dal.model.SystemQueryStorageArgs;
import cn.odboy.system.dal.mysql.SystemLocalStorageMapper; import cn.odboy.system.dal.mysql.SystemLocalStorageMapper;
import cn.odboy.util.KitBeanUtil;
import cn.odboy.util.KitFileUtil; import cn.odboy.util.KitFileUtil;
import cn.odboy.util.KitPageUtil; import cn.odboy.util.KitPageUtil;
import cn.odboy.util.xlsx.KitExcelExporter; import cn.odboy.util.xlsx.KitExcelExporter;
@@ -172,8 +173,8 @@ public class SystemLocalStorageService {
public void exportLocalStorageXlsx(HttpServletResponse response, SystemQueryStorageArgs args) { public void exportLocalStorageXlsx(HttpServletResponse response, SystemQueryStorageArgs args) {
List<SystemLocalStorageTb> systemLocalStorageTbs = this.queryLocalStorageByArgs(args); List<SystemLocalStorageTb> systemLocalStorageTbs = this.queryLocalStorageByArgs(args);
// KitXlsxExportUtil.exportFile(response, "文件上传记录数据", systemLocalStorageTbs, SystemLocalStorageExportRowVo.class, // KitXlsxExportUtil.exportFile(response, "文件上传记录数据", systemLocalStorageTbs, SystemLocalStorageExportRowVo.class,
// (dataObject) -> CollUtil.newArrayList(BeanUtil.copyProperties(dataObject, SystemLocalStorageExportRowVo.class))); // (dataObject) -> CollUtil.newArrayList(KitBeanUtil.copyProperties(dataObject, SystemLocalStorageExportRowVo.class)));
List<SystemLocalStorageExportRowVo> rowVos = BeanUtil.copyToList(systemLocalStorageTbs, SystemLocalStorageExportRowVo.class); List<SystemLocalStorageExportRowVo> rowVos = KitBeanUtil.copyToList(systemLocalStorageTbs, SystemLocalStorageExportRowVo.class);
KitExcelExporter.exportSimple(response, "文件上传记录数据", SystemLocalStorageExportRowVo.class, rowVos); KitExcelExporter.exportSimple(response, "文件上传记录数据", SystemLocalStorageExportRowVo.class, rowVos);
} }
} }
@@ -15,6 +15,7 @@
*/ */
package cn.odboy.system.service; package cn.odboy.system.service;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
@@ -26,11 +27,13 @@ import cn.odboy.system.dal.dataobject.SystemMenuTb;
import cn.odboy.system.dal.dataobject.SystemRoleTb; import cn.odboy.system.dal.dataobject.SystemRoleTb;
import cn.odboy.system.dal.model.SystemMenuExportRowVo; import cn.odboy.system.dal.model.SystemMenuExportRowVo;
import cn.odboy.system.dal.model.SystemMenuMetaVo; import cn.odboy.system.dal.model.SystemMenuMetaVo;
import cn.odboy.system.dal.model.SystemMenuRouterVo;
import cn.odboy.system.dal.model.SystemMenuVo; import cn.odboy.system.dal.model.SystemMenuVo;
import cn.odboy.system.dal.model.SystemQueryMenuArgs; import cn.odboy.system.dal.model.SystemQueryMenuArgs;
import cn.odboy.system.dal.model.SystemRoleVo; import cn.odboy.system.dal.model.SystemRoleVo;
import cn.odboy.system.dal.mysql.SystemMenuMapper; import cn.odboy.system.dal.mysql.SystemMenuMapper;
import cn.odboy.system.framework.permission.core.KitSecurityHelper; import cn.odboy.system.framework.permission.core.KitSecurityHelper;
import cn.odboy.util.KitBeanUtil;
import cn.odboy.util.KitClassUtil; import cn.odboy.util.KitClassUtil;
import cn.odboy.util.xlsx.KitExcelExporter; import cn.odboy.util.xlsx.KitExcelExporter;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@@ -278,14 +281,14 @@ public class SystemMenuService {
* @param menus 原始数据 * @param menus 原始数据
* @return / * @return /
*/ */
public List<SystemMenuTb> buildMenuTree(List<SystemMenuTb> menus) { public List<SystemMenuVo> buildMenuTree(List<SystemMenuVo> menus) {
List<SystemMenuTb> trees = new ArrayList<>(); List<SystemMenuVo> trees = new ArrayList<>();
Set<Long> ids = new HashSet<>(); Set<Long> ids = new HashSet<>();
for (SystemMenuTb menu : menus) { for (SystemMenuVo menu : menus) {
if (menu.getPid() == null) { if (menu.getPid() == null) {
trees.add(menu); trees.add(menu);
} }
for (SystemMenuTb it : menus) { for (SystemMenuVo it : menus) {
if (menu.getId().equals(it.getPid())) { if (menu.getId().equals(it.getPid())) {
if (menu.getChildren() == null) { if (menu.getChildren() == null) {
menu.setChildren(new ArrayList<>()); menu.setChildren(new ArrayList<>());
@@ -307,12 +310,12 @@ public class SystemMenuService {
* @param menus / * @param menus /
* @return / * @return /
*/ */
public List<SystemMenuVo> buildMenuVo(List<SystemMenuTb> menus) { public List<SystemMenuRouterVo> buildMenuVo(List<SystemMenuVo> menus) {
List<SystemMenuVo> list = new LinkedList<>(); List<SystemMenuRouterVo> list = new LinkedList<>();
menus.forEach(menu -> { for (SystemMenuVo menu : menus) {
if (menu != null) { if (menu != null) {
List<SystemMenuTb> menuList = menu.getChildren(); List<SystemMenuVo> menuList = menu.getChildren();
SystemMenuVo menuVo = new SystemMenuVo(); SystemMenuRouterVo menuVo = new SystemMenuRouterVo();
menuVo.setName( menuVo.setName(
ObjectUtil.isNotEmpty(menu.getComponentName()) ? menu.getComponentName() : menu.getTitle()); ObjectUtil.isNotEmpty(menu.getComponentName()) ? menu.getComponentName() : menu.getTitle());
// 一级目录需要加斜杠, 不然会报警告 // 一级目录需要加斜杠, 不然会报警告
@@ -336,17 +339,17 @@ public class SystemMenuService {
menuVo.setChildren(buildMenuVo(menuList)); menuVo.setChildren(buildMenuVo(menuList));
// 处理是一级菜单并且没有子菜单的情况 // 处理是一级菜单并且没有子菜单的情况
} else if (menu.getPid() == null) { } else if (menu.getPid() == null) {
SystemMenuVo menuVo1 = getMenuVo(menu, menuVo); SystemMenuRouterVo menuVo1 = getMenuVo(menu, menuVo);
menuVo.setName(null); menuVo.setName(null);
menuVo.setMeta(null); menuVo.setMeta(null);
menuVo.setComponent("Layout"); menuVo.setComponent("Layout");
List<SystemMenuVo> list1 = new ArrayList<>(); List<SystemMenuRouterVo> list1 = new ArrayList<>();
list1.add(menuVo1); list1.add(menuVo1);
menuVo.setChildren(list1); menuVo.setChildren(list1);
} }
list.add(menuVo); list.add(menuVo);
} }
}); }
return list; return list;
} }
@@ -357,8 +360,8 @@ public class SystemMenuService {
* @param menuVo / * @param menuVo /
* @return / * @return /
*/ */
private SystemMenuVo getMenuVo(SystemMenuTb menu, SystemMenuVo menuVo) { private SystemMenuRouterVo getMenuVo(SystemMenuTb menu, SystemMenuRouterVo menuVo) {
SystemMenuVo menuVo1 = new SystemMenuVo(); SystemMenuRouterVo menuVo1 = new SystemMenuRouterVo();
menuVo1.setMeta(menuVo.getMeta()); menuVo1.setMeta(menuVo.getMeta());
// 非外链 // 非外链
if (!menu.getIFrame()) { if (!menu.getIFrame()) {
@@ -418,10 +421,11 @@ public class SystemMenuService {
return systemMenuMapper.selectList(wrapper); return systemMenuMapper.selectList(wrapper);
} }
public List<SystemMenuVo> buildFrontMenus() { public List<SystemMenuRouterVo> buildFrontMenus() {
List<SystemMenuTb> menuList = this.listMenuByUserId(KitSecurityHelper.getCurrentUserId()); List<SystemMenuTb> menuList = this.listMenuByUserId(KitSecurityHelper.getCurrentUserId());
List<SystemMenuTb> menus = this.buildMenuTree(menuList); List<SystemMenuVo> originMenus = KitBeanUtil.copyToList(menuList, SystemMenuVo.class);
return this.buildMenuVo(menus); List<SystemMenuVo> targetMenus = this.buildMenuTree(originMenus);
return this.buildMenuVo(targetMenus);
} }
public Set<Long> listChildMenuSetByMenuId(Long id) { public Set<Long> listChildMenuSetByMenuId(Long id) {
@@ -432,9 +436,9 @@ public class SystemMenuService {
return menuSet.stream().map(SystemMenuTb::getId).collect(Collectors.toSet()); return menuSet.stream().map(SystemMenuTb::getId).collect(Collectors.toSet());
} }
public List<SystemMenuTb> listMenuSuperior(List<Long> ids) { public List<SystemMenuVo> listMenuSuperior(List<Long> ids) {
Set<SystemMenuTb> menus; Set<SystemMenuTb> menus;
List<SystemMenuTb> systemMenuTbs; List<SystemMenuVo> systemMenuTbs;
if (CollectionUtil.isNotEmpty(ids)) { if (CollectionUtil.isNotEmpty(ids)) {
menus = new LinkedHashSet<>(this.listMenuByIds(ids)); menus = new LinkedHashSet<>(this.listMenuByIds(ids));
for (SystemMenuTb menu : menus) { for (SystemMenuTb menu : menus) {
@@ -448,9 +452,11 @@ public class SystemMenuService {
} }
// 编辑菜单时不显示自己以及自己下级的数据, 避免出现PID数据环形问题 // 编辑菜单时不显示自己以及自己下级的数据, 避免出现PID数据环形问题
menus = menus.stream().filter(i -> !ids.contains(i.getId())).collect(Collectors.toSet()); menus = menus.stream().filter(i -> !ids.contains(i.getId())).collect(Collectors.toSet());
systemMenuTbs = this.buildMenuTree(new ArrayList<>(menus)); List<SystemMenuTb> newMenuList = new ArrayList<>(menus);
systemMenuTbs = this.buildMenuTree(KitBeanUtil.copyToList(newMenuList, SystemMenuVo.class));
} else { } else {
systemMenuTbs = this.listMenuByPid(null); List<SystemMenuTb> newMenuList = this.listMenuByPid(null);
systemMenuTbs = KitBeanUtil.copyToList(newMenuList, SystemMenuVo.class);
} }
return systemMenuTbs; return systemMenuTbs;
} }
@@ -26,12 +26,14 @@ import cn.odboy.framework.redis.KitRedisHelper;
import cn.odboy.system.dal.dataobject.SystemQuartzJobTb; import cn.odboy.system.dal.dataobject.SystemQuartzJobTb;
import cn.odboy.system.dal.dataobject.SystemQuartzLogTb; import cn.odboy.system.dal.dataobject.SystemQuartzLogTb;
import cn.odboy.system.dal.model.SystemQuartzJobExportRowVo; import cn.odboy.system.dal.model.SystemQuartzJobExportRowVo;
import cn.odboy.system.dal.model.SystemQuartzJobVo;
import cn.odboy.system.dal.model.SystemQuartzLogExportRowVo; import cn.odboy.system.dal.model.SystemQuartzLogExportRowVo;
import cn.odboy.system.dal.model.SystemQueryQuartzJobArgs; import cn.odboy.system.dal.model.SystemQueryQuartzJobArgs;
import cn.odboy.system.dal.model.SystemUpdateQuartzJobArgs; import cn.odboy.system.dal.model.SystemUpdateQuartzJobArgs;
import cn.odboy.system.dal.mysql.SystemQuartzJobMapper; import cn.odboy.system.dal.mysql.SystemQuartzJobMapper;
import cn.odboy.system.dal.mysql.SystemQuartzLogMapper; import cn.odboy.system.dal.mysql.SystemQuartzLogMapper;
import cn.odboy.system.framework.quartz.QuartzManage; import cn.odboy.system.framework.quartz.QuartzManage;
import cn.odboy.util.KitBeanUtil;
import cn.odboy.util.KitPageUtil; import cn.odboy.util.KitPageUtil;
import cn.odboy.util.xlsx.KitExcelExporter; import cn.odboy.util.xlsx.KitExcelExporter;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@@ -108,7 +110,7 @@ public class SystemQuartzJobService {
throw new BadRequestException("子任务中不能添加当前任务ID"); throw new BadRequestException("子任务中不能添加当前任务ID");
} }
} }
SystemQuartzJobTb quartzJob = BeanUtil.copyProperties(args, SystemQuartzJobTb.class); SystemQuartzJobTb quartzJob = KitBeanUtil.copyToClass(args, SystemQuartzJobTb.class);
systemQuartzJobMapper.insertOrUpdate(quartzJob); systemQuartzJobMapper.insertOrUpdate(quartzJob);
quartzManage.updateJobCron(quartzJob); quartzManage.updateJobCron(quartzJob);
} }
@@ -167,7 +169,7 @@ public class SystemQuartzJobService {
// 如果是手动清除子任务id, 会出现id为空字符串的问题 // 如果是手动清除子任务id, 会出现id为空字符串的问题
continue; continue;
} }
SystemQuartzJobTb quartzJob = systemQuartzJobMapper.selectById(Long.parseLong(id)); SystemQuartzJobVo quartzJob = systemQuartzJobMapper.selectVoById(id);
if (quartzJob == null) { if (quartzJob == null) {
// 防止子任务不存在 // 防止子任务不存在
continue; continue;
@@ -32,6 +32,7 @@ import cn.odboy.system.dal.model.SystemRoleExportRowVo;
import cn.odboy.system.dal.model.SystemRoleVo; import cn.odboy.system.dal.model.SystemRoleVo;
import cn.odboy.system.dal.mysql.SystemRoleMapper; import cn.odboy.system.dal.mysql.SystemRoleMapper;
import cn.odboy.system.framework.permission.core.KitSecurityHelper; import cn.odboy.system.framework.permission.core.KitSecurityHelper;
import cn.odboy.util.KitBeanUtil;
import cn.odboy.util.KitPageUtil; import cn.odboy.util.KitPageUtil;
import cn.odboy.util.xlsx.KitExcelExporter; import cn.odboy.util.xlsx.KitExcelExporter;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@@ -70,7 +71,7 @@ public class SystemRoleService {
if (this.getRoleByName(args.getName()) != null) { if (this.getRoleByName(args.getName()) != null) {
throw new BadRequestException("角色名称已存在"); throw new BadRequestException("角色名称已存在");
} }
systemRoleMapper.insert(BeanUtil.copyProperties(args, SystemRoleTb.class)); systemRoleMapper.insert(KitBeanUtil.copyToClass(args, SystemRoleTb.class));
// 判断是否有部门数据, 若有, 则需创建关联 // 判断是否有部门数据, 若有, 则需创建关联
if (CollectionUtil.isNotEmpty(args.getDepts())) { if (CollectionUtil.isNotEmpty(args.getDepts())) {
systemRoleDeptService.batchInsertRoleDept(args.getDepts(), args.getId()); systemRoleDeptService.batchInsertRoleDept(args.getDepts(), args.getId());
@@ -91,7 +92,7 @@ public class SystemRoleService {
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void updateRoleById(SystemRoleVo args) { public void updateRoleById(SystemRoleVo args) {
checkRoleLevels(args.getLevel()); checkRoleLevels(args.getLevel());
SystemRoleVo role = BeanUtil.copyProperties(systemRoleMapper.selectById(args.getId()), SystemRoleVo.class); SystemRoleVo role = KitBeanUtil.copyToClass(systemRoleMapper.selectById(args.getId()), SystemRoleVo.class);
SystemRoleTb role1 = this.getRoleByName(args.getName()); SystemRoleTb role1 = this.getRoleByName(args.getName());
if (role1 != null && !role1.getId().equals(role.getId())) { if (role1 != null && !role1.getId().equals(role.getId())) {
throw new BadRequestException("角色名称已存在"); throw new BadRequestException("角色名称已存在");
@@ -27,6 +27,7 @@ import cn.odboy.system.dal.model.SystemUserVo;
import cn.odboy.system.dal.mysql.SystemRoleMapper; import cn.odboy.system.dal.mysql.SystemRoleMapper;
import cn.odboy.system.dal.mysql.SystemUserRoleMapper; import cn.odboy.system.dal.mysql.SystemUserRoleMapper;
import cn.odboy.system.framework.permission.core.KitSecurityHelper; import cn.odboy.system.framework.permission.core.KitSecurityHelper;
import cn.odboy.util.KitBeanUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
@@ -84,7 +85,7 @@ public class SystemUserRoleService {
if (role == null) { if (role == null) {
return null; return null;
} }
SystemRoleVo roleVo = BeanUtil.copyProperties(role, SystemRoleVo.class); SystemRoleVo roleVo = KitBeanUtil.copyToClass(role, SystemRoleVo.class);
// 查询关联的菜单信息 // 查询关联的菜单信息
Set<SystemMenuTb> menus = systemRoleMenuService.queryMenuByRoleIds( Set<SystemMenuTb> menus = systemRoleMenuService.queryMenuByRoleIds(
Collections.singleton(role.getId())); Collections.singleton(role.getId()));
@@ -41,6 +41,7 @@ import cn.odboy.system.dal.mysql.SystemUserMapper;
import cn.odboy.system.dal.redis.SystemUserInfoDAO; import cn.odboy.system.dal.redis.SystemUserInfoDAO;
import cn.odboy.system.dal.redis.SystemUserOnlineInfoDAO; import cn.odboy.system.dal.redis.SystemUserOnlineInfoDAO;
import cn.odboy.system.framework.permission.core.KitSecurityHelper; import cn.odboy.system.framework.permission.core.KitSecurityHelper;
import cn.odboy.util.KitBeanUtil;
import cn.odboy.util.KitFileUtil; import cn.odboy.util.KitFileUtil;
import cn.odboy.util.KitPageUtil; import cn.odboy.util.KitPageUtil;
import cn.odboy.util.KitRsaEncryptUtil; import cn.odboy.util.KitRsaEncryptUtil;
@@ -155,7 +156,6 @@ public class SystemUserService {
user.setUsername(args.getUsername()); user.setUsername(args.getUsername());
user.setEmail(args.getEmail()); user.setEmail(args.getEmail());
user.setEnabled(args.getEnabled()); user.setEnabled(args.getEnabled());
user.setDept(args.getDept());
user.setPhone(args.getPhone()); user.setPhone(args.getPhone());
user.setNickName(args.getNickName()); user.setNickName(args.getNickName());
user.setGender(args.getGender()); user.setGender(args.getGender());
@@ -436,7 +436,7 @@ public class SystemUserService {
if (user == null) { if (user == null) {
return null; return null;
} }
SystemUserVo userVo = BeanUtil.copyProperties(user, SystemUserVo.class); SystemUserVo userVo = KitBeanUtil.copyToClass(user, SystemUserVo.class);
// 查询关联的部门信息 // 查询关联的部门信息
if (user.getDeptId() != null) { if (user.getDeptId() != null) {
SystemDeptTb dept = systemDeptService.getDeptById(user.getDeptId()); SystemDeptTb dept = systemDeptService.getDeptById(user.getDeptId());
@@ -493,8 +493,7 @@ public class SystemUserService {
args.getDeptIds().addAll(systemDeptService.queryChildDeptIdByDeptIds(data)); args.getDeptIds().addAll(systemDeptService.queryChildDeptIdByDeptIds(data));
} }
// 数据权限 // 数据权限
List<Long> dataScopes = systemDataService.queryDeptIdByArgs( List<Long> dataScopes = systemDataService.queryDeptIdByArgs(this.getUserVoByUsername(currentUsername));
this.getUserByUsername(currentUsername));
// args.getDeptIds() 不为空并且数据权限不为空则取交集 // args.getDeptIds() 不为空并且数据权限不为空则取交集
if (!CollectionUtils.isEmpty(args.getDeptIds()) && !CollectionUtils.isEmpty(dataScopes)) { if (!CollectionUtils.isEmpty(args.getDeptIds()) && !CollectionUtils.isEmpty(dataScopes)) {
// 取交集 // 取交集
@@ -15,7 +15,6 @@
*/ */
package cn.odboy.system.service.impl; package cn.odboy.system.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import cn.odboy.base.KitPageResult; import cn.odboy.base.KitPageResult;
@@ -30,6 +29,7 @@ import cn.odboy.system.dal.model.SystemQueryStorageArgs;
import cn.odboy.system.dal.mysql.SystemOssStorageMapper; import cn.odboy.system.dal.mysql.SystemOssStorageMapper;
import cn.odboy.system.framework.storage.minio.MinioRepository; import cn.odboy.system.framework.storage.minio.MinioRepository;
import cn.odboy.system.service.SystemOssStorageService; import cn.odboy.system.service.SystemOssStorageService;
import cn.odboy.util.KitBeanUtil;
import cn.odboy.util.KitDateUtil; import cn.odboy.util.KitDateUtil;
import cn.odboy.util.KitFileUtil; import cn.odboy.util.KitFileUtil;
import cn.odboy.util.KitPageUtil; import cn.odboy.util.KitPageUtil;
@@ -72,7 +72,7 @@ public class SystemMinioStorageServiceImpl extends ServiceImpl<SystemOssStorageM
Page<SystemOssStorageTb> page) { Page<SystemOssStorageTb> page) {
IPage<SystemOssStorageTb> ossStorageTbs = this.selectOssStorageByArgs(args, page); IPage<SystemOssStorageTb> ossStorageTbs = this.selectOssStorageByArgs(args, page);
IPage<SystemOssStorageVo> convert = ossStorageTbs.convert(c -> { IPage<SystemOssStorageVo> convert = ossStorageTbs.convert(c -> {
SystemOssStorageVo storageVo = BeanUtil.copyProperties(c, SystemOssStorageVo.class); SystemOssStorageVo storageVo = KitBeanUtil.copyToClass(c, SystemOssStorageVo.class);
storageVo.setFileSizeDesc(KitFileUtil.getSize(storageVo.getFileSize())); storageVo.setFileSizeDesc(KitFileUtil.getSize(storageVo.getFileSize()));
return storageVo; return storageVo;
}); });
@@ -157,8 +157,8 @@ public class SystemMinioStorageServiceImpl extends ServiceImpl<SystemOssStorageM
public void exportOssStorageXlsx(HttpServletResponse response, SystemQueryStorageArgs args) { public void exportOssStorageXlsx(HttpServletResponse response, SystemQueryStorageArgs args) {
List<SystemOssStorageVo> systemOssStorageVos = this.queryOssStorage(args); List<SystemOssStorageVo> systemOssStorageVos = this.queryOssStorage(args);
// KitXlsxExportUtil.exportFile(response, "OSS文件上传记录数据", systemOssStorageVos, SystemOssStorageExportRowVo.class, // KitXlsxExportUtil.exportFile(response, "OSS文件上传记录数据", systemOssStorageVos, SystemOssStorageExportRowVo.class,
// (dataObject) -> CollUtil.newArrayList(BeanUtil.copyProperties(dataObject, SystemOssStorageExportRowVo.class))); // (dataObject) -> CollUtil.newArrayList(KitBeanUtil.copyProperties(dataObject, SystemOssStorageExportRowVo.class)));
List<SystemOssStorageExportRowVo> rowVos = BeanUtil.copyToList(systemOssStorageVos, SystemOssStorageExportRowVo.class); List<SystemOssStorageExportRowVo> rowVos = KitBeanUtil.copyToList(systemOssStorageVos, SystemOssStorageExportRowVo.class);
KitExcelExporter.exportSimple(response, "OSS文件上传记录数据", SystemOssStorageExportRowVo.class, rowVos); KitExcelExporter.exportSimple(response, "OSS文件上传记录数据", SystemOssStorageExportRowVo.class, rowVos);
} }
@@ -31,6 +31,7 @@ import cn.odboy.task.dal.model.TaskTemplateNodeVo;
import cn.odboy.task.service.TaskInstanceDetailService; import cn.odboy.task.service.TaskInstanceDetailService;
import cn.odboy.task.service.TaskInstanceInfoService; import cn.odboy.task.service.TaskInstanceInfoService;
import cn.odboy.task.service.TaskTemplateInfoService; import cn.odboy.task.service.TaskTemplateInfoService;
import cn.odboy.util.KitBeanUtil;
import cn.odboy.util.KitDateUtil; import cn.odboy.util.KitDateUtil;
import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSON;
import java.util.ArrayList; import java.util.ArrayList;
@@ -228,12 +229,11 @@ public class TaskManage {
record.setTemplate(templateInfo.getTemplateInfo()); record.setTemplate(templateInfo.getTemplateInfo());
return record; return record;
} }
record = BeanUtil.copyProperties(historyInstance, TaskInstanceInfoVo.class); record = KitBeanUtil.copyToClass(historyInstance, TaskInstanceInfoVo.class);
record.setHistory(buildNodeList(record)); record.setHistory(buildNodeList(record));
TaskInstanceInfoTb runningInstance = TaskInstanceInfoTb runningInstance = taskInstanceInfoService.getLastRunningInstance(contextName, language, envAlias, changeType);
taskInstanceInfoService.getLastRunningInstance(contextName, language, envAlias, changeType);
if (runningInstance != null) { if (runningInstance != null) {
TaskInstanceInfoVo taskInstanceInfoVo = BeanUtil.copyProperties(runningInstance, TaskInstanceInfoVo.class); TaskInstanceInfoVo taskInstanceInfoVo = KitBeanUtil.copyToClass(runningInstance, TaskInstanceInfoVo.class);
record.setCurrent(buildNodeList(taskInstanceInfoVo)); record.setCurrent(buildNodeList(taskInstanceInfoVo));
} }
return record; return record;
@@ -31,6 +31,7 @@ import cn.odboy.task.dal.model.TaskTemplateNodeVo;
import cn.odboy.task.service.TaskInstanceDetailService; import cn.odboy.task.service.TaskInstanceDetailService;
import cn.odboy.task.service.TaskInstanceInfoService; import cn.odboy.task.service.TaskInstanceInfoService;
import cn.odboy.task.service.TaskTemplateInfoService; import cn.odboy.task.service.TaskTemplateInfoService;
import cn.odboy.util.KitBeanUtil;
import cn.odboy.util.KitDateUtil; import cn.odboy.util.KitDateUtil;
import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSON;
import java.util.ArrayList; import java.util.ArrayList;
@@ -228,12 +229,11 @@ public class TaskManage {
record.setTemplate(templateInfo.getTemplateInfo()); record.setTemplate(templateInfo.getTemplateInfo());
return record; return record;
} }
record = BeanUtil.copyProperties(historyInstance, TaskInstanceInfoVo.class); record = KitBeanUtil.copyToClass(historyInstance, TaskInstanceInfoVo.class);
record.setHistory(buildNodeList(record)); record.setHistory(buildNodeList(record));
TaskInstanceInfoTb runningInstance = TaskInstanceInfoTb runningInstance = taskInstanceInfoService.getLastRunningInstance(contextName, language, envAlias, changeType);
taskInstanceInfoService.getLastRunningInstance(contextName, language, envAlias, changeType);
if (runningInstance != null) { if (runningInstance != null) {
TaskInstanceInfoVo taskInstanceInfoVo = BeanUtil.copyProperties(runningInstance, TaskInstanceInfoVo.class); TaskInstanceInfoVo taskInstanceInfoVo = KitBeanUtil.copyToClass(runningInstance, TaskInstanceInfoVo.class);
record.setCurrent(buildNodeList(taskInstanceInfoVo)); record.setCurrent(buildNodeList(taskInstanceInfoVo));
} }
return record; return record;