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