RandomUtils.java 3.5 KB

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