package cn.iocoder.dashboard.util; import cn.hutool.core.util.ArrayUtil; import cn.hutool.core.util.RandomUtil; import cn.iocoder.dashboard.common.enums.CommonStatusEnum; import cn.iocoder.dashboard.modules.system.dal.dataobject.user.SysUserDO; import uk.co.jemos.podam.api.PodamFactory; import uk.co.jemos.podam.api.PodamFactoryImpl; import java.lang.reflect.Type; import java.util.*; import java.util.function.Consumer; import java.util.stream.Collectors; import java.util.stream.Stream; /** * 随机工具类 * * @author 芋道源码 */ public class RandomUtils { private static final int RANDOM_STRING_LENGTH = 10; private static final int RANDOM_DATE_MAX = 30; private static final int RANDOM_COLLECTION_LENGTH = 5; private static final PodamFactory PODAM_FACTORY = new PodamFactoryImpl(); static { // 字符串 PODAM_FACTORY.getStrategy().addOrReplaceTypeManufacturer(String.class, (dataProviderStrategy, attributeMetadata, map) -> randomString()); // Boolean PODAM_FACTORY.getStrategy().addOrReplaceTypeManufacturer(Boolean.class, (dataProviderStrategy, attributeMetadata, map) -> { // 如果是 deleted 的字段,返回非删除 if (attributeMetadata.getAttributeName().equals("deleted")) { return false; } return RandomUtil.randomBoolean(); }); } public static String randomString() { return RandomUtil.randomString(RANDOM_STRING_LENGTH); } public static Long randomLongId() { return RandomUtil.randomLong(0, Long.MAX_VALUE); } public static Integer randomInteger() { return RandomUtil.randomInt(0, Integer.MAX_VALUE); } public static Date randomDate() { return RandomUtil.randomDay(0, RANDOM_DATE_MAX); } public static Short randomShort() { return (short) RandomUtil.randomInt(0, Short.MAX_VALUE); } public static Set randomSet(Class clazz) { return Stream.iterate(0, i -> i).limit(RandomUtil.randomInt(0, RANDOM_DATE_MAX)) .map(i -> randomPojo(clazz)).collect(Collectors.toSet()); } public static Integer randomCommonStatus() { return RandomUtil.randomEle(CommonStatusEnum.values()).getStatus(); } @SafeVarargs public static SysUserDO randomUserDO(Consumer... consumers) { return randomPojo(SysUserDO.class, consumers); } @SafeVarargs public static T randomPojo(Class clazz, Consumer... consumers) { T pojo = PODAM_FACTORY.manufacturePojo(clazz); // 非空时,回调逻辑。通过它,可以实现 Pojo 的进一步处理 if (ArrayUtil.isNotEmpty(consumers)) { Arrays.stream(consumers).forEach(consumer -> consumer.accept(pojo)); } return pojo; } @SafeVarargs public static T randomPojo(Class clazz, Type type, Consumer... consumers) { T pojo = PODAM_FACTORY.manufacturePojo(clazz, type); // 非空时,回调逻辑。通过它,可以实现 Pojo 的进一步处理 if (ArrayUtil.isNotEmpty(consumers)) { Arrays.stream(consumers).forEach(consumer -> consumer.accept(pojo)); } return pojo; } @SafeVarargs public static List randomPojoList(Class clazz, Consumer... consumers) { int size = RandomUtil.randomInt(0, RANDOM_COLLECTION_LENGTH); return Stream.iterate(0, i -> i).limit(size).map(o -> randomPojo(clazz, consumers)) .collect(Collectors.toList()); } }