RandomUtils.java 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  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.modules.system.dal.dataobject.user.SysUserDO;
  5. import uk.co.jemos.podam.api.PodamFactory;
  6. import uk.co.jemos.podam.api.PodamFactoryImpl;
  7. import java.util.Arrays;
  8. import java.util.Date;
  9. import java.util.Set;
  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. @SafeVarargs
  56. public static SysUserDO randomUserDO(Consumer<SysUserDO>... consumers) {
  57. return randomPojo(SysUserDO.class, consumers);
  58. }
  59. @SafeVarargs
  60. public static <T> T randomPojo(Class<T> clazz, Consumer<T>... consumers) {
  61. T pojo = PODAM_FACTORY.manufacturePojo(clazz);
  62. // 非空时,回调逻辑。通过它,可以实现 Pojo 的进一步处理
  63. if (ArrayUtil.isNotEmpty(consumers)) {
  64. Arrays.stream(consumers).forEach(consumer -> consumer.accept(pojo));
  65. }
  66. return pojo;
  67. }
  68. }