Selaa lähdekoodia

excelUtil优化

wangliang 4 vuotta sitten
vanhempi
commit
04e6ee1a7c

+ 6 - 5
themis-business/src/main/java/com/qmth/themis/business/templete/impl/TaskExamStudentImportTemplete.java

@@ -64,19 +64,20 @@ public class TaskExamStudentImportTemplete implements TaskImportTemplete {
         try {
             List<LinkedMultiValueMap<Integer, Object>> finalList = ExcelUtil.excelReader(inputStream, Lists.newArrayList(ExamStudentImportDto.class), new ExcelCallback() {
                 @Override
-                public List<LinkedMultiValueMap<Integer, Object>> callback(List<LinkedMultiValueMap<Integer, Object>> finalList, List<LinkedMultiValueMap<Integer, String>> finalColumnNameList) throws IllegalAccessException, IOException {
+                public List<LinkedMultiValueMap<Integer, Object>> callback(List<LinkedMultiValueMap<Integer, Object>> finalList, List<LinkedMultiValueMap<Integer, String>> finalColumnNameList, List<LinkedMultiValueMap<Integer, ExcelError>> finalExcelErrorList) throws IllegalAccessException, IOException {
                     Map<String, String> courseCodeMap = new HashMap<>();
                     List<ExcelError> excelErrorList = new ArrayList<>();
+                    if (finalExcelErrorList.size() > 0) {
+                        for (int i = 0; i < finalExcelErrorList.size(); i++) {
+                            excelErrorList.addAll(finalExcelErrorList.get(i).get(i));
+                        }
+                    }
                     for (int i = 0; i < finalList.size(); i++) {
                         LinkedMultiValueMap<Integer, Object> map = finalList.get(i);
                         List<Object> examStudentImportDtoList = map.get(i);
                         for (int y = 0; y < examStudentImportDtoList.size(); y++) {
                             ExamStudentImportDto examStudentImportDto = (ExamStudentImportDto) examStudentImportDtoList.get(y);
                             courseCodeMap.put(examStudentImportDto.getCourseCode(), examStudentImportDto.getCourseName());
-                            List<ExcelError> excelErrorTemp = ExcelUtil.checkExcelField(examStudentImportDto, y, i);
-                            if (excelErrorTemp.size() > 0) {
-                                excelErrorList.addAll(excelErrorTemp);
-                            }
                             //校验考试模式,如果是集中统一,则需填写考试场次
                             if (Objects.equals(taskImportCommon.getMode(), ExamModeEnum.TOGETHER.name())) {
                                 if (Objects.isNull(examStudentImportDto.getExamActivityCode())) {

+ 4 - 10
themis-business/src/main/java/com/qmth/themis/business/templete/impl/TaskRoomCodeImportTemplete.java

@@ -58,17 +58,11 @@ public class TaskRoomCodeImportTemplete implements TaskImportTemplete {
         try {
             List<LinkedMultiValueMap<Integer, Object>> finalList = ExcelUtil.excelReader(inputStream, Lists.newArrayList(RoomCodeImportDto.class), new ExcelCallback() {
                 @Override
-                public List<LinkedMultiValueMap<Integer, Object>> callback(List<LinkedMultiValueMap<Integer, Object>> finalList, List<LinkedMultiValueMap<Integer, String>> finalColumnNameList) throws IllegalAccessException, IOException {
+                public List<LinkedMultiValueMap<Integer, Object>> callback(List<LinkedMultiValueMap<Integer, Object>> finalList, List<LinkedMultiValueMap<Integer, String>> finalColumnNameList, List<LinkedMultiValueMap<Integer, ExcelError>> finalExcelErrorList) throws IllegalAccessException, IOException {
                     List<ExcelError> excelErrorList = new ArrayList<>();
-                    for (int i = 0; i < finalList.size(); i++) {
-                        LinkedMultiValueMap<Integer, Object> map = finalList.get(i);
-                        List<Object> roomCodeImportDtoList = map.get(i);
-                        for (int y = 0; y < roomCodeImportDtoList.size(); y++) {
-                            RoomCodeImportDto roomCodeImportDto = (RoomCodeImportDto) roomCodeImportDtoList.get(y);
-                            List<ExcelError> excelErrorTemp = ExcelUtil.checkExcelField(roomCodeImportDto, y, i);
-                            if (excelErrorTemp.size() > 0) {
-                                excelErrorList.addAll(excelErrorTemp);
-                            }
+                    if (finalExcelErrorList.size() > 0) {
+                        for (int i = 0; i < finalExcelErrorList.size(); i++) {
+                            excelErrorList.addAll(finalExcelErrorList.get(i).get(i));
                         }
                     }
                     if (excelErrorList.size() > 0) {

+ 3 - 1
themis-business/src/main/java/com/qmth/themis/business/util/ExcelCallback.java

@@ -19,8 +19,10 @@ public interface ExcelCallback {
      *
      * @param finalList
      * @param finalColumnNameList
+     * @param finalExcelErrorList
      * @return
      * @throws IllegalAccessException
+     * @throws IOException
      */
-    public List<LinkedMultiValueMap<Integer, Object>> callback(List<LinkedMultiValueMap<Integer, Object>> finalList, List<LinkedMultiValueMap<Integer, String>> finalColumnNameList) throws IllegalAccessException, IOException;
+    public List<LinkedMultiValueMap<Integer, Object>> callback(List<LinkedMultiValueMap<Integer, Object>> finalList, List<LinkedMultiValueMap<Integer, String>> finalColumnNameList, List<LinkedMultiValueMap<Integer, ExcelError>> finalExcelErrorList) throws IllegalAccessException, IOException;
 }

+ 16 - 1
themis-business/src/main/java/com/qmth/themis/business/util/ExcelUtil.java

@@ -50,6 +50,7 @@ public class ExcelUtil {
             int sheets = xb.getNumberOfSheets();
             List<LinkedMultiValueMap<Integer, Object>> finalOList = new ArrayList<>();
             List<LinkedMultiValueMap<Integer, String>> finalColumnNameList = new ArrayList<>();
+            List<LinkedMultiValueMap<Integer, ExcelError>> finalExcelErrorList = new ArrayList<>();
             for (int y = 0; y < sheets; y++) {
                 //获取第一个表单sheet
                 XSSFSheet sheet = xb.getSheetAt(y);
@@ -58,6 +59,7 @@ public class ExcelUtil {
                 //循环行数依次获取列数
                 LinkedMultiValueMap<Integer, Object> oList = new LinkedMultiValueMap<>();
                 LinkedMultiValueMap<Integer, String> columnNameList = new LinkedMultiValueMap<>();
+                LinkedMultiValueMap<Integer, ExcelError> excelErrorList = new LinkedMultiValueMap<>();
                 for (int i = 0; i < lastrow + 1; i++) {
                     //获取哪一行i
                     Row row = sheet.getRow(i);
@@ -81,6 +83,11 @@ public class ExcelUtil {
                                         if (j < fields.length - 1) {
                                             fields[j].setAccessible(true);
                                             fields[j].set(o, obj);
+                                            Annotation annotation = fields[j].getAnnotation(ExcelNotNull.class);
+                                            ExcelNote note = fields[j].getAnnotation(ExcelNote.class);
+                                            if (Objects.isNull(obj) && Objects.nonNull(annotation)) {
+                                                excelErrorList.add(y, new ExcelError(j + 1, "excel第" + (y + 1) + "个sheet第" + (j + 1) + "行[" + note.value() + "]为空"));
+                                            }
                                         } else {
                                             Field field = null;
                                             if (j == fields.length - 1) {
@@ -99,6 +106,11 @@ public class ExcelUtil {
                                     } else {
                                         fields[j].setAccessible(true);
                                         fields[j].set(o, obj);
+                                        Annotation annotation = fields[j].getAnnotation(ExcelNotNull.class);
+                                        ExcelNote note = fields[j].getAnnotation(ExcelNote.class);
+                                        if (Objects.isNull(obj) && Objects.nonNull(annotation)) {
+                                            excelErrorList.add(y, new ExcelError(i + 1, "excel第" + (y + 1) + "个sheet第" + (i + 1) + "行[" + note.value() + "]为空"));
+                                        }
                                     }
                                 }
                             }
@@ -114,12 +126,15 @@ public class ExcelUtil {
                 if (oList.size() > 0) {
                     finalOList.add(oList);
                     finalColumnNameList.add(columnNameList);
+                    if (excelErrorList.size() > 0) {
+                        finalExcelErrorList.add(excelErrorList);
+                    }
                 }
                 log.info("读取了{}条数据", oList.get(y).size());
             }
             long end = System.currentTimeMillis();
             log.info("读取excel里的数据结束,============耗时============:{}秒", (end - start) / 1000);
-            return callback.callback(finalOList, finalColumnNameList);
+            return callback.callback(finalOList, finalColumnNameList, finalExcelErrorList);
         } catch (Exception e) {
             log.error("excel读取报错", e);
             if (e instanceof IllegalArgumentException) {