|
@@ -4,6 +4,10 @@ import java.io.FileInputStream;
|
|
|
import java.io.IOException;
|
|
|
import java.time.LocalDate;
|
|
|
import java.util.*;
|
|
|
+import java.util.concurrent.CountDownLatch;
|
|
|
+import java.util.concurrent.ExecutorService;
|
|
|
+import java.util.concurrent.Executors;
|
|
|
+import java.util.concurrent.atomic.AtomicInteger;
|
|
|
import java.util.regex.Matcher;
|
|
|
import java.util.regex.Pattern;
|
|
|
|
|
@@ -13,6 +17,7 @@ import com.ruoyi.common.utils.StringUtils;
|
|
|
import com.ruoyi.common.utils.file.ExcelUtils;
|
|
|
import com.ruoyi.common.utils.file.FileUploadUtils;
|
|
|
import com.ruoyi.framework.config.RuoYiConfig;
|
|
|
+import com.ruoyi.project.sems.domain.TSpecdevYlgd;
|
|
|
import com.ruoyi.project.system.domain.SysUser;
|
|
|
import com.ruoyi.project.training.elearn.domain.TElQuAnswer;
|
|
|
import com.ruoyi.project.training.spec.domain.vo.TStPlanImportVO;
|
|
@@ -618,10 +623,13 @@ public class TElQuController extends BaseController {
|
|
|
Sheet sheet = workbook.getSheetAt(0);
|
|
|
int rowNum = sheet.getPhysicalNumberOfRows();
|
|
|
logger.info("总行数:" + rowNum);
|
|
|
- int failNumber = 0;
|
|
|
- int successNumber = 0;
|
|
|
+ List<TElQu> list = new ArrayList<TElQu>();
|
|
|
//报错行数统计
|
|
|
List<Integer> failRow = new ArrayList<Integer>();
|
|
|
+ AtomicInteger failNumber = new AtomicInteger();
|
|
|
+ AtomicInteger successNumber = new AtomicInteger();
|
|
|
+ AtomicInteger failNum = new AtomicInteger();
|
|
|
+
|
|
|
for (int i = 1; i < rowNum; i++) {
|
|
|
try {
|
|
|
logger.info("读取行数:" + i);
|
|
@@ -745,8 +753,8 @@ public class TElQuController extends BaseController {
|
|
|
answerList.add(answerB);
|
|
|
answerList.add(answerC);
|
|
|
}*/
|
|
|
- // 假设 options 是一个包含选项内容的数组,cellValue 是一个包含正确答案的字符串
|
|
|
- char[] labels = {'A', 'B', 'C', 'D', 'E' , 'F' ,'J' ,'H' , 'I' ,'J' ,'K'}; // 可以扩展更多的选项
|
|
|
+ // 假设 options 是一个包含选项内容的数组,cellValue 是一个包含正确答案的字符串
|
|
|
+ char[] labels = {'A', 'B', 'C', 'D', 'E', 'F', 'J', 'H', 'I', 'J', 'K'}; // 可以扩展更多的选项
|
|
|
for (int c = 0; c < options.length && c < labels.length; c++) {
|
|
|
TElQuAnswer answer = new TElQuAnswer();
|
|
|
answer.setIsRight(0L);
|
|
@@ -781,27 +789,56 @@ public class TElQuController extends BaseController {
|
|
|
qu.setAnswerList(answerList);
|
|
|
qu.setRepoIds(repos);
|
|
|
logger.info(JSON.toJSONString(qu));
|
|
|
- tElQuService.insertTElQu(qu);
|
|
|
- successNumber++;
|
|
|
+ list.add(qu);
|
|
|
+// tElQuService.insertTElQuBatch(qu , i);
|
|
|
}
|
|
|
}
|
|
|
} catch (Exception e) {
|
|
|
- failNumber++;
|
|
|
+ failNumber.getAndIncrement();
|
|
|
+ TElQu qu = new TElQu();
|
|
|
+ list.add(qu);
|
|
|
logger.error("e:" + JSON.toJSONString(e));
|
|
|
- failRow.add(i + 1);
|
|
|
}
|
|
|
}
|
|
|
+ //线程池
|
|
|
+ ExecutorService executorService = Executors.newFixedThreadPool(30);
|
|
|
+ final CountDownLatch latch = new CountDownLatch(list.size()); //相同线程数量的计数
|
|
|
+ for (TElQu t : list
|
|
|
+ ) {
|
|
|
+ executorService.execute(() -> {
|
|
|
+ // -- 业务模块
|
|
|
+ failNum.getAndIncrement();
|
|
|
+ try {
|
|
|
+ tElQuService.insertTElQu(t);
|
|
|
+ successNumber.getAndIncrement();
|
|
|
+ } catch (Exception e) {
|
|
|
+ failNumber.getAndIncrement();
|
|
|
+ logger.info("e:" + e);
|
|
|
+ failRow.add(failNum.get() + 1);
|
|
|
+ } finally {
|
|
|
+ latch.countDown(); //线程计数
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+ try {
|
|
|
+ latch.await(); //线程计数完毕后继续执行
|
|
|
+ } catch (InterruptedException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ executorService.shutdown();
|
|
|
logger.info("successNumber:" + String.valueOf(successNumber));
|
|
|
logger.info("failNumber:" + String.valueOf(failNumber));
|
|
|
logger.info("failRow:" + String.valueOf(failRow));
|
|
|
+ logger.info("总行数:" + rowNum);
|
|
|
+ logger.info("Row:" + list.size());
|
|
|
return AjaxResult.success(String.valueOf(successNumber), failRow);
|
|
|
}
|
|
|
|
|
|
// 通用方法:替换 <sub> 和 <sup> 标签
|
|
|
- public String replaceSubSup(String input) {
|
|
|
+ public String replaceSubSup(String input) {
|
|
|
|
|
|
// 映射用于将字符替换为对应的 Unicode 上标或下标
|
|
|
- Map<Character, String> subMap = new HashMap<>();
|
|
|
+ Map<Character, String> subMap = new HashMap<>();
|
|
|
Map<Character, String> supMap = new HashMap<>();
|
|
|
// 下标映射:支持 0-9 和小写字母a
|
|
|
subMap.put('0', "\u2080");
|
|
@@ -845,7 +882,7 @@ public class TElQuController extends BaseController {
|
|
|
|
|
|
int iterationCount = 0;
|
|
|
// 替换 <sub> 标签
|
|
|
- while (input.contains("<sub>")&& iterationCount < 500) {
|
|
|
+ while (input.contains("<sub>") && iterationCount < 500) {
|
|
|
int startIndex = input.indexOf("<sub>");
|
|
|
int endIndex = input.indexOf("</sub>");
|
|
|
|