RandomUtils.java 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. package cn.iocoder.dashboard.util;
  2. import cn.hutool.core.util.ArrayUtil;
  3. import cn.hutool.core.util.RandomUtil;
  4. import cn.iocoder.dashboard.common.enums.CommonStatusEnum;
  5. import uk.co.jemos.podam.api.PodamFactory;
  6. import uk.co.jemos.podam.api.PodamFactoryImpl;
  7. import java.lang.reflect.Type;
  8. import java.util.*;
  9. import java.util.function.Consumer;
  10. import java.util.stream.Collectors;
  11. import java.util.stream.Stream;
  12. /**
  13. * 随机工具类
  14. *
  15. * @author 芋道源码
  16. */
  17. public class RandomUtils {
  18. private static final int RANDOM_STRING_LENGTH = 10;
  19. private static final int RANDOM_DATE_MAX = 30;
  20. private static final int RANDOM_COLLECTION_LENGTH = 5;
  21. private static final PodamFactory PODAM_FACTORY = new PodamFactoryImpl();
  22. static {
  23. // 字符串
  24. PODAM_FACTORY.getStrategy().addOrReplaceTypeManufacturer(String.class,
  25. (dataProviderStrategy, attributeMetadata, map) -> randomString());
  26. // Boolean
  27. PODAM_FACTORY.getStrategy().addOrReplaceTypeManufacturer(Boolean.class, (dataProviderStrategy, attributeMetadata, map) -> {
  28. // 如果是 deleted 的字段,返回非删除
  29. if (attributeMetadata.getAttributeName().equals("deleted")) {
  30. return false;
  31. }
  32. return RandomUtil.randomBoolean();
  33. });
  34. }
  35. public static String randomString() {
  36. return RandomUtil.randomString(RANDOM_STRING_LENGTH);
  37. }
  38. public static Long randomLongId() {
  39. return RandomUtil.randomLong(0, Long.MAX_VALUE);
  40. }
  41. public static Integer randomInteger() {
  42. return RandomUtil.randomInt(0, Integer.MAX_VALUE);
  43. }
  44. public static Date randomDate() {
  45. return RandomUtil.randomDay(0, RANDOM_DATE_MAX);
  46. }
  47. public static Short randomShort() {
  48. return (short) RandomUtil.randomInt(0, Short.MAX_VALUE);
  49. }
  50. public static <T> Set<T> randomSet(Class<T> clazz) {
  51. return Stream.iterate(0, i -> i).limit(RandomUtil.randomInt(0, RANDOM_DATE_MAX))
  52. .map(i -> randomPojo(clazz)).collect(Collectors.toSet());
  53. }
  54. public static Integer randomCommonStatus() {
  55. return RandomUtil.randomEle(CommonStatusEnum.values()).getStatus();
  56. }
  57. @SafeVarargs
  58. public static <T> T randomPojo(Class<T> clazz, Consumer<T>... consumers) {
  59. T pojo = PODAM_FACTORY.manufacturePojo(clazz);
  60. // 非空时,回调逻辑。通过它,可以实现 Pojo 的进一步处理
  61. if (ArrayUtil.isNotEmpty(consumers)) {
  62. Arrays.stream(consumers).forEach(consumer -> consumer.accept(pojo));
  63. }
  64. return pojo;
  65. }
  66. @SafeVarargs
  67. public static <T> T randomPojo(Class<T> clazz, Type type, Consumer<T>... consumers) {
  68. T pojo = PODAM_FACTORY.manufacturePojo(clazz, type);
  69. // 非空时,回调逻辑。通过它,可以实现 Pojo 的进一步处理
  70. if (ArrayUtil.isNotEmpty(consumers)) {
  71. Arrays.stream(consumers).forEach(consumer -> consumer.accept(pojo));
  72. }
  73. return pojo;
  74. }
  75. @SafeVarargs
  76. public static <T> List<T> randomPojoList(Class<T> clazz, Consumer<T>... consumers) {
  77. int size = RandomUtil.randomInt(0, RANDOM_COLLECTION_LENGTH);
  78. return Stream.iterate(0, i -> i).limit(size).map(o -> randomPojo(clazz, consumers))
  79. .collect(Collectors.toList());
  80. }
  81. }