RandomUtils.java 2.8 KB

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