From 7b10c1f23909e76d320abcddf255f75b6a6c2883 Mon Sep 17 00:00:00 2001 From: buxue Date: Fri, 27 Mar 2026 14:54:01 +0800 Subject: [PATCH] =?UTF-8?q?=E7=94=9F=E6=88=9010w=E6=9D=A1=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E5=B7=A5=E5=85=B7=E7=B1=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/example/demo/util/ExcelTransfer.java | 4 +- .../demo/util/MultiThreadSurveyGenerator.java | 108 ++++++++++++++++++ .../demo/util/SurveyDataGenerator.java | 53 +++++++++ 3 files changed, 163 insertions(+), 2 deletions(-) create mode 100644 src/main/java/com/example/demo/util/MultiThreadSurveyGenerator.java create mode 100644 src/main/java/com/example/demo/util/SurveyDataGenerator.java diff --git a/src/main/java/com/example/demo/util/ExcelTransfer.java b/src/main/java/com/example/demo/util/ExcelTransfer.java index 6d206ae..3c4f409 100644 --- a/src/main/java/com/example/demo/util/ExcelTransfer.java +++ b/src/main/java/com/example/demo/util/ExcelTransfer.java @@ -53,8 +53,8 @@ public class ExcelTransfer { public static void main(String[] args) { - String sourceFile = "/Users/hengspire/data/111.xlsx"; - String targetFile = "/Users/hengspire/data/222.xlsx"; + String sourceFile = "/Users/hengspire/Desktop/111.xlsx"; + String targetFile = "/Users/hengspire/Desktop/222.xlsx"; ExcelReader reader = ExcelUtil.getReader(sourceFile); diff --git a/src/main/java/com/example/demo/util/MultiThreadSurveyGenerator.java b/src/main/java/com/example/demo/util/MultiThreadSurveyGenerator.java new file mode 100644 index 0000000..79f3559 --- /dev/null +++ b/src/main/java/com/example/demo/util/MultiThreadSurveyGenerator.java @@ -0,0 +1,108 @@ +package com.example.demo.util; + +import cn.hutool.http.HttpRequest; +import cn.hutool.http.HttpResponse; +import cn.hutool.json.JSONUtil; + +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.atomic.AtomicInteger; + +/** + * 多线程批量生成运证通APP问卷测试数据(调用后台接口) + * 速度极快,10万条数据几十秒完成 + */ +public class MultiThreadSurveyGenerator { + + // ====================== 【必须修改这里】 ====================== + // 后台新增问卷接口地址 + private static final String ADD_API_URL = "http://localhost:9080/app/survey/satisfaction"; + // 总生成数量 + private static final int TOTAL_COUNT = 100000; + // 线程数(根据你的电脑/接口性能调整:8~32 最合适) + private static final int THREAD_NUM = 20; + // =========================================================== + + // 成功计数(原子类,线程安全) + private static final AtomicInteger successCount = new AtomicInteger(0); + // 失败计数 + private static final AtomicInteger failCount = new AtomicInteger(0); + + public static void main(String[] args) { + System.out.println("===== 开始多线程生成【10万条】问卷数据 ====="); + long startTime = System.currentTimeMillis(); + + // 创建线程池 + ExecutorService executor = Executors.newFixedThreadPool(THREAD_NUM); + // 计数器:等待所有线程执行完 + CountDownLatch latch = new CountDownLatch(TOTAL_COUNT); + + // 循环提交任务 + for (int i = 0; i < TOTAL_COUNT; i++) { + executor.submit(() -> { + try { + // 生成 8/9/10 随机分数 + int q1 = (int) (Math.random() * 3) + 8; + int q2 = (int) (Math.random() * 3) + 8; + int q3 = (int) (Math.random() * 3) + 8; + int q4 = (int) (Math.random() * 3) + 8; + int q5 = (int) (Math.random() * 3) + 8; + + // 构造请求参数 + Map param = new HashMap<>(); + param.put("q1", q1); + param.put("q2", q2); + param.put("q3", q3); + param.put("q4", q4); + param.put("q5", q5); + + // 发送POST请求(JSON格式) + HttpResponse response = HttpRequest.post(ADD_API_URL) + .header("Content-Type", "application/json") + .body(JSONUtil.toJsonStr(param)) + .timeout(5000) + .execute(); + + if (response.isOk()) { + successCount.incrementAndGet(); + } else { + failCount.incrementAndGet(); + } + + // 每1000条打印一次进度 + int current = successCount.get() + failCount.get(); + if (current % 1000 == 0) { + System.out.println("已完成:" + current + "/" + TOTAL_COUNT + + " 成功:" + successCount.get() + + " 失败:" + failCount.get()); + } + + } catch (Exception e) { + failCount.incrementAndGet(); + } finally { + latch.countDown(); + } + }); + } + + try { + // 等待所有任务完成 + latch.await(); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + } + + // 关闭线程池 + executor.shutdown(); + + // 最终统计 + long endTime = System.currentTimeMillis(); + System.out.println("\n===== 数据生成全部完成 ====="); + System.out.println("总耗时:" + (endTime - startTime) / 1000 + " 秒"); + System.out.println("成功条数:" + successCount.get()); + System.out.println("失败条数:" + failCount.get()); + } +} \ No newline at end of file diff --git a/src/main/java/com/example/demo/util/SurveyDataGenerator.java b/src/main/java/com/example/demo/util/SurveyDataGenerator.java new file mode 100644 index 0000000..70c3d01 --- /dev/null +++ b/src/main/java/com/example/demo/util/SurveyDataGenerator.java @@ -0,0 +1,53 @@ +package com.example.demo.util; + +import cn.hutool.http.HttpUtil; +import cn.hutool.json.JSON; +import cn.hutool.json.JSONObject; +import cn.hutool.json.JSONUtil; + +import java.util.HashMap; +import java.util.Map; + +/** + * 批量生成运证通问卷测试数据(调用后台接口) + */ +public class SurveyDataGenerator { + + // 【修改为你的后台接口地址】 + private static final String ADD_URL = "http://localhost:9080/app/survey/satisfaction"; + + public static void main(String[] args) { + // 生成10万条数据 + int totalCount = 100000; + System.out.println("开始生成10万条问卷数据..."); + + for (int i = 0; i < totalCount; i++) { + // 生成随机分数 8/9/10 + int q1 = (int) (Math.random() * 3) + 8; + int q2 = (int) (Math.random() * 3) + 8; + int q3 = (int) (Math.random() * 3) + 8; + int q4 = (int) (Math.random() * 3) + 8; + int q5 = (int) (Math.random() * 3) + 8; + + // 封装接口参数 + Map param = new HashMap<>(); + param.put("q1", q1); + param.put("q2", q2); + param.put("q3", q3); + param.put("q4", q4); + param.put("q5", q5); + + try { + // 调用后台接口 + String result = HttpUtil.post(ADD_URL, JSONUtil.toJsonStr(param)); + // 每1000条打印一次进度 + if (i % 1000 == 0) { + System.out.println("已生成:" + (i + 1) + "条,接口返回:" + result); + } + } catch (Exception e) { + System.err.println("第" + i + "条数据生成失败:" + e.getMessage()); + } + } + System.out.println("10万条问卷数据生成完成!"); + } +}