|
| 1 | +package com.pig4cloud.plugin.excel.mock; |
| 2 | + |
| 3 | +import cn.idev.excel.EasyExcel; |
| 4 | +import org.junit.jupiter.api.Test; |
| 5 | + |
| 6 | +import java.io.File; |
| 7 | +import java.util.ArrayList; |
| 8 | +import java.util.List; |
| 9 | +import java.util.Random; |
| 10 | + |
| 11 | +/** |
| 12 | + * Mock数据生成测试类 - 生成10万条数据 |
| 13 | + * |
| 14 | + * @author lengleng |
| 15 | + * @date 2025/12/08 |
| 16 | + */ |
| 17 | +class MockDataTest { |
| 18 | + |
| 19 | + private static final int TOTAL_COUNT = 1000000; |
| 20 | + |
| 21 | + private static final String[] FIRST_NAMES = { "张", "李", "王", "刘", "陈", "杨", "赵", "黄", "周", "吴", "徐", "孙", |
| 22 | + "胡", "朱", "高", "林", "何", "郭", "马", "罗" }; |
| 23 | + |
| 24 | + private static final String[] LAST_NAMES = { "伟", "芳", "娜", "秀英", "敏", "静", "丽", "强", "磊", "军", "洋", "勇", |
| 25 | + "艳", "杰", "涛", "明", "超", "秀兰", "霞", "平", "刚", "桂英" }; |
| 26 | + |
| 27 | + private static final String[] DEPARTMENTS = { "技术部", "产品部", "运营部", "市场部", "人力资源部", "财务部", "销售部", "客服部", |
| 28 | + "设计部", "行政部" }; |
| 29 | + |
| 30 | + private static final String[] CITIES = { "北京", "上海", "广州", "深圳", "杭州", "南京", "成都", "武汉", "西安", "重庆" }; |
| 31 | + |
| 32 | + private static final String[] DISTRICTS = { "朝阳区", "海淀区", "浦东新区", "天河区", "南山区", "西湖区", "江宁区", "武侯区", |
| 33 | + "雁塔区", "渝北区" }; |
| 34 | + |
| 35 | + private final Random random = new Random(); |
| 36 | + |
| 37 | +// @Test |
| 38 | + void generateMockData() { |
| 39 | + String fileName = System.getProperty("user.home") + File.separator + "mock_data_1000000.xlsx"; |
| 40 | + |
| 41 | + long startTime = System.currentTimeMillis(); |
| 42 | + System.out.println("开始生成 " + TOTAL_COUNT + " 条Mock数据..."); |
| 43 | + |
| 44 | + // 生成数据 |
| 45 | + List<MockData> dataList = new ArrayList<>(TOTAL_COUNT); |
| 46 | + for (int i = 1; i <= TOTAL_COUNT; i++) { |
| 47 | + MockData data = new MockData(); |
| 48 | + data.setUserId((long) i); |
| 49 | + data.setUsername(generateRandomName()); |
| 50 | + data.setEmail(generateRandomEmail(i)); |
| 51 | + data.setAge(generateRandomAge()); |
| 52 | + data.setPhone(generateRandomPhone()); |
| 53 | + data.setAddress(generateRandomAddress()); |
| 54 | + data.setDepartment(generateRandomDepartment()); |
| 55 | + data.setSalary(generateRandomSalary()); |
| 56 | + dataList.add(data); |
| 57 | + |
| 58 | + // 每1万条打印一次进度 |
| 59 | + if (i % 10000 == 0) { |
| 60 | + System.out.println("已生成 " + i + " 条数据..."); |
| 61 | + } |
| 62 | + } |
| 63 | + |
| 64 | + long generateTime = System.currentTimeMillis(); |
| 65 | + System.out.println("数据生成完成,耗时: " + (generateTime - startTime) + "ms"); |
| 66 | + |
| 67 | + // 写入Excel |
| 68 | + System.out.println("开始写入Excel文件: " + fileName); |
| 69 | + EasyExcel.write(fileName, MockData.class).sheet("用户数据").doWrite(dataList); |
| 70 | + |
| 71 | + long writeTime = System.currentTimeMillis(); |
| 72 | + System.out.println("Excel写入完成,耗时: " + (writeTime - generateTime) + "ms"); |
| 73 | + System.out.println("总耗时: " + (writeTime - startTime) + "ms"); |
| 74 | + System.out.println("文件保存路径: " + fileName); |
| 75 | + } |
| 76 | + |
| 77 | + /** |
| 78 | + * 生成随机姓名 |
| 79 | + */ |
| 80 | + private String generateRandomName() { |
| 81 | + String firstName = FIRST_NAMES[random.nextInt(FIRST_NAMES.length)]; |
| 82 | + String lastName = LAST_NAMES[random.nextInt(LAST_NAMES.length)]; |
| 83 | + // 有30%的概率生成三个字的名字 |
| 84 | + if (random.nextInt(100) < 30) { |
| 85 | + String lastName2 = LAST_NAMES[random.nextInt(LAST_NAMES.length)]; |
| 86 | + return firstName + lastName + lastName2; |
| 87 | + } |
| 88 | + return firstName + lastName; |
| 89 | + } |
| 90 | + |
| 91 | + /** |
| 92 | + * 生成随机邮箱 |
| 93 | + */ |
| 94 | + private String generateRandomEmail(int id) { |
| 95 | + String[] domains = { "gmail.com", "qq.com", "163.com", "126.com", "sina.com", "outlook.com" }; |
| 96 | + return "user" + id + "@" + domains[random.nextInt(domains.length)]; |
| 97 | + } |
| 98 | + |
| 99 | + /** |
| 100 | + * 生成随机年龄 (22-60岁) |
| 101 | + */ |
| 102 | + private Integer generateRandomAge() { |
| 103 | + return 22 + random.nextInt(39); |
| 104 | + } |
| 105 | + |
| 106 | + /** |
| 107 | + * 生成随机手机号 |
| 108 | + */ |
| 109 | + private String generateRandomPhone() { |
| 110 | + String[] prefixes = { "130", "131", "132", "133", "134", "135", "136", "137", "138", "139", "150", "151", |
| 111 | + "152", "153", "155", "156", "157", "158", "159", "180", "181", "182", "183", "185", "186", "187", |
| 112 | + "188", "189" }; |
| 113 | + String prefix = prefixes[random.nextInt(prefixes.length)]; |
| 114 | + StringBuilder phone = new StringBuilder(prefix); |
| 115 | + for (int i = 0; i < 8; i++) { |
| 116 | + phone.append(random.nextInt(10)); |
| 117 | + } |
| 118 | + return phone.toString(); |
| 119 | + } |
| 120 | + |
| 121 | + /** |
| 122 | + * 生成随机地址 |
| 123 | + */ |
| 124 | + private String generateRandomAddress() { |
| 125 | + String city = CITIES[random.nextInt(CITIES.length)]; |
| 126 | + String district = DISTRICTS[random.nextInt(DISTRICTS.length)]; |
| 127 | + int streetNum = 1 + random.nextInt(999); |
| 128 | + int buildingNum = 1 + random.nextInt(50); |
| 129 | + int roomNum = 100 + random.nextInt(900); |
| 130 | + return city + district + "街道" + streetNum + "号" + buildingNum + "栋" + roomNum + "室"; |
| 131 | + } |
| 132 | + |
| 133 | + /** |
| 134 | + * 生成随机部门 |
| 135 | + */ |
| 136 | + private String generateRandomDepartment() { |
| 137 | + return DEPARTMENTS[random.nextInt(DEPARTMENTS.length)]; |
| 138 | + } |
| 139 | + |
| 140 | + /** |
| 141 | + * 生成随机薪资 (5000-50000) |
| 142 | + */ |
| 143 | + private Double generateRandomSalary() { |
| 144 | + return 5000.0 + random.nextInt(45000); |
| 145 | + } |
| 146 | + |
| 147 | +} |
0 commit comments