|
@@ -156,16 +156,22 @@ public class BatchImportExamStudentTask implements TaskService {
|
|
|
this.singleRun(loginUser, dataList, successCount, failCount);
|
|
|
} else {
|
|
|
final int batchSize = 20;// 分批数量
|
|
|
- for (int start = 0; start < total; start += batchSize) {
|
|
|
- int end = Math.min(start + batchSize, total);
|
|
|
- List<ExamStudentInfo> batchList = dataList.subList(start, end);
|
|
|
- this.concurrentRun(loginUser, batchList, successCount, failCount);
|
|
|
|
|
|
- long cost = Math.max((System.currentTimeMillis() - startTime) / 1000L, 1);
|
|
|
- int runCount = successCount.get() + failCount.get();
|
|
|
- log.info("总数:{} 成功数:{} 失败数:{} 已执行:{}条 已耗时:{}秒 平均每秒{}条 进度:{}%"
|
|
|
- , total, successCount.get(), failCount.get(), runCount, cost
|
|
|
- , runCount / cost, runCount * 100f / total);
|
|
|
+ // 目前重复数据在多线程并发下会执行失败,拆成多个不重复集合分开执行。
|
|
|
+ List<List<ExamStudentInfo>> newList = this.redoList(dataList);
|
|
|
+ for (List<ExamStudentInfo> list : newList) {
|
|
|
+ int cutTotal = list.size();
|
|
|
+ for (int start = 0; start < cutTotal; start += batchSize) {
|
|
|
+ int end = Math.min(start + batchSize, cutTotal);
|
|
|
+ List<ExamStudentInfo> batchList = list.subList(start, end);
|
|
|
+ this.concurrentRun(loginUser, batchList, successCount, failCount);
|
|
|
+
|
|
|
+ long cost = Math.max((System.currentTimeMillis() - startTime) / 1000L, 1);
|
|
|
+ int runCount = successCount.get() + failCount.get();
|
|
|
+ log.info("总数:{} 成功数:{} 失败数:{} 已执行:{}条 已耗时:{}秒 平均每秒{}条 进度:{}%"
|
|
|
+ , total, successCount.get(), failCount.get(), runCount, cost
|
|
|
+ , runCount / cost, runCount * 100f / total);
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|