deason 1 tahun lalu
induk
melakukan
5889dbfbc5

+ 15 - 9
src/main/java/cn/com/qmth/examcloud/tool/service/batch_import_exam_student/BatchImportExamStudentTask.java

@@ -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);
+                }
             }
         }