|
@@ -3,23 +3,26 @@ package com.qmth.themis.business.templete.impl;
|
|
import com.alibaba.fastjson.JSONObject;
|
|
import com.alibaba.fastjson.JSONObject;
|
|
import com.google.common.collect.Lists;
|
|
import com.google.common.collect.Lists;
|
|
import com.qmth.themis.business.dto.ExamStudentDtoImport;
|
|
import com.qmth.themis.business.dto.ExamStudentDtoImport;
|
|
|
|
+import com.qmth.themis.business.entity.TBTaskHistory;
|
|
|
|
+import com.qmth.themis.business.entity.TEExamStudent;
|
|
|
|
+import com.qmth.themis.business.forkjoin.ForkJoinTask;
|
|
import com.qmth.themis.business.templete.TaskImportTemplete;
|
|
import com.qmth.themis.business.templete.TaskImportTemplete;
|
|
-import com.qmth.themis.business.threadPool.MyThreadPool;
|
|
|
|
import com.qmth.themis.business.util.ExcelCallback;
|
|
import com.qmth.themis.business.util.ExcelCallback;
|
|
import com.qmth.themis.business.util.ExcelError;
|
|
import com.qmth.themis.business.util.ExcelError;
|
|
import com.qmth.themis.business.util.ExcelUtil;
|
|
import com.qmth.themis.business.util.ExcelUtil;
|
|
import com.qmth.themis.common.exception.BusinessException;
|
|
import com.qmth.themis.common.exception.BusinessException;
|
|
import com.qmth.themis.common.util.Result;
|
|
import com.qmth.themis.common.util.Result;
|
|
import com.qmth.themis.common.util.ResultUtil;
|
|
import com.qmth.themis.common.util.ResultUtil;
|
|
|
|
+import org.slf4j.Logger;
|
|
|
|
+import org.slf4j.LoggerFactory;
|
|
import org.springframework.util.LinkedMultiValueMap;
|
|
import org.springframework.util.LinkedMultiValueMap;
|
|
import org.springframework.web.multipart.MultipartFile;
|
|
import org.springframework.web.multipart.MultipartFile;
|
|
|
|
|
|
-import javax.annotation.Resource;
|
|
|
|
import java.io.IOException;
|
|
import java.io.IOException;
|
|
-import java.util.ArrayList;
|
|
|
|
-import java.util.HashMap;
|
|
|
|
-import java.util.List;
|
|
|
|
-import java.util.Map;
|
|
|
|
|
|
+import java.util.*;
|
|
|
|
+import java.util.concurrent.ExecutionException;
|
|
|
|
+import java.util.concurrent.ForkJoinPool;
|
|
|
|
+import java.util.concurrent.Future;
|
|
|
|
|
|
/**
|
|
/**
|
|
* @Description: 考生导入模版
|
|
* @Description: 考生导入模版
|
|
@@ -29,9 +32,10 @@ import java.util.Map;
|
|
* @Date: 2020/7/15
|
|
* @Date: 2020/7/15
|
|
*/
|
|
*/
|
|
public class ExamStudentTemplete implements TaskImportTemplete {
|
|
public class ExamStudentTemplete implements TaskImportTemplete {
|
|
|
|
+ private final static Logger log = LoggerFactory.getLogger(ExamStudentTemplete.class);
|
|
|
|
|
|
@Override
|
|
@Override
|
|
- public Result importTask(MultipartFile file) throws IOException {
|
|
|
|
|
|
+ public Result importTask(MultipartFile file, TBTaskHistory tbTaskHistory) throws IOException {
|
|
List<LinkedMultiValueMap<Integer, Object>> finalList = ExcelUtil.excelReader(file.getInputStream(), Lists.newArrayList(ExamStudentDtoImport.class), new ExcelCallback() {
|
|
List<LinkedMultiValueMap<Integer, Object>> finalList = ExcelUtil.excelReader(file.getInputStream(), Lists.newArrayList(ExamStudentDtoImport.class), new ExcelCallback() {
|
|
@Override
|
|
@Override
|
|
public List<LinkedMultiValueMap<Integer, Object>> callback(List<LinkedMultiValueMap<Integer, Object>> finalList, List<LinkedMultiValueMap<Integer, String>> finalColumnNameList) throws IllegalAccessException {
|
|
public List<LinkedMultiValueMap<Integer, Object>> callback(List<LinkedMultiValueMap<Integer, Object>> finalList, List<LinkedMultiValueMap<Integer, String>> finalColumnNameList) throws IllegalAccessException {
|
|
@@ -39,6 +43,7 @@ public class ExamStudentTemplete implements TaskImportTemplete {
|
|
for (int i = 0; i < finalList.size(); i++) {
|
|
for (int i = 0; i < finalList.size(); i++) {
|
|
LinkedMultiValueMap<Integer, Object> map = finalList.get(i);
|
|
LinkedMultiValueMap<Integer, Object> map = finalList.get(i);
|
|
List<Object> examStudentDtoImportList = map.get(i);
|
|
List<Object> examStudentDtoImportList = map.get(i);
|
|
|
|
+ log.info("examStudentDtoImportList.size:{}", examStudentDtoImportList.size());
|
|
for (int y = 0; y < examStudentDtoImportList.size(); y++) {
|
|
for (int y = 0; y < examStudentDtoImportList.size(); y++) {
|
|
ExamStudentDtoImport examStudentDtoImport = (ExamStudentDtoImport) examStudentDtoImportList.get(y);
|
|
ExamStudentDtoImport examStudentDtoImport = (ExamStudentDtoImport) examStudentDtoImportList.get(y);
|
|
List<ExcelError> excelErrorTemp = ExcelUtil.checkExcelField(examStudentDtoImport, y, i);
|
|
List<ExcelError> excelErrorTemp = ExcelUtil.checkExcelField(examStudentDtoImport, y, i);
|
|
@@ -53,6 +58,29 @@ public class ExamStudentTemplete implements TaskImportTemplete {
|
|
return finalList;
|
|
return finalList;
|
|
}
|
|
}
|
|
});
|
|
});
|
|
|
|
+ //保存数据到数据库
|
|
|
|
+ if (Objects.nonNull(finalList) && finalList.size() > 0) {
|
|
|
|
+ log.info("开始forkjoin数据拆分");
|
|
|
|
+ long start = System.currentTimeMillis();
|
|
|
|
+ for (int i = 0; i < finalList.size(); i++) {
|
|
|
|
+ LinkedMultiValueMap<Integer, Object> map = finalList.get(i);
|
|
|
|
+ List<Object> examStudentDtoImportList = map.get(i);
|
|
|
|
+ ForkJoinTask forkJoinTask = new ForkJoinTask(500, 0, examStudentDtoImportList.size() - 1, examStudentDtoImportList, tbTaskHistory);
|
|
|
|
+ ForkJoinPool forkJoinPool = new ForkJoinPool();
|
|
|
|
+ Future<List<TEExamStudent>> result = forkJoinPool.submit(forkJoinTask);
|
|
|
|
+ if (forkJoinTask.isCompletedAbnormally()) { // 来检查任务是否已经抛出异常或已经被取消了,要注意此方法。由于提交任务之后,检测该任务是否有异常,不是阻塞的。所以需要上面的等待任务的完成。才能正确的获取到是否有异常
|
|
|
|
+ throw new BusinessException(forkJoinTask.getException().getMessage());
|
|
|
|
+ }
|
|
|
|
+ try {
|
|
|
|
+ List<TEExamStudent> list = result.get();
|
|
|
|
+ log.info("list.size:{}", list.size());
|
|
|
|
+ } catch (ExecutionException | InterruptedException e) {
|
|
|
|
+ e.printStackTrace();
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ long end = System.currentTimeMillis();
|
|
|
|
+ log.info("forkjoin数据拆分结束,============耗时============:{}秒", (end - start) / 1000);
|
|
|
|
+ }
|
|
Map map = new HashMap<>();
|
|
Map map = new HashMap<>();
|
|
return ResultUtil.ok(map);
|
|
return ResultUtil.ok(map);
|
|
}
|
|
}
|