Browse Source

Merge branch 'dev' of http://git.qmth.com.cn/wangliang/distributed-print-service into dev

xiaof 4 years ago
parent
commit
65f94ece35

+ 181 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/ExaminationImportDto.java

@@ -0,0 +1,181 @@
+package com.qmth.distributed.print.business.bean.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+
+import java.util.List;
+
+/**
+ * @Description: 考务数据导入Dto(对应 ExaminationDBFieldsEnum 同时作为考务数据表所需要的的字段,来接收excel导入的考务数据)
+ * @Author: CaoZixuan
+ * @Date: 2021-04-25
+ */
+public class ExaminationImportDto {
+
+    @ApiModelProperty(value = "学号")
+    private String studentCode;
+
+    @ApiModelProperty(value = "学生姓名")
+    private String studentName;
+
+    @ApiModelProperty(value = "课程代码")
+    private String courseCode;
+
+    @ApiModelProperty(value = "课程名称")
+    private String courseName;
+
+    @ApiModelProperty(value = "考场")
+    private String examPlace;
+
+    @ApiModelProperty(value = "考点")
+    private String examRoom;
+
+    @ApiModelProperty(value = "考试日期")
+    private String examDate;
+
+    @ApiModelProperty(value = "考试时间")
+    private String examTime;
+
+    @ApiModelProperty(value = "试卷编号")
+    private String paperNumber;
+
+    @ApiModelProperty(value = "备选字段集合")
+    private List<FieldsDto> secondaryFieldList;
+
+    @ApiModelProperty(value = "考试开始时间")
+    private String examStartTime;
+
+    @ApiModelProperty(value = "考试结束时间")
+    private String examEndTime;
+
+    @ApiModelProperty(value = "学校id")
+    private Long schoolId;
+
+    @ApiModelProperty(value = "印刷计划id")
+    private Long printPlanId;
+
+    @ApiModelProperty(value = "印刷计划名称")
+    private String printPlanName;
+
+    public ExaminationImportDto() {
+    }
+
+    public String getStudentCode() {
+        return studentCode;
+    }
+
+    public void setStudentCode(String studentCode) {
+        this.studentCode = studentCode;
+    }
+
+    public String getStudentName() {
+        return studentName;
+    }
+
+    public void setStudentName(String studentName) {
+        this.studentName = studentName;
+    }
+
+    public String getCourseCode() {
+        return courseCode;
+    }
+
+    public void setCourseCode(String courseCode) {
+        this.courseCode = courseCode;
+    }
+
+    public String getCourseName() {
+        return courseName;
+    }
+
+    public void setCourseName(String courseName) {
+        this.courseName = courseName;
+    }
+
+    public String getExamPlace() {
+        return examPlace;
+    }
+
+    public void setExamPlace(String examPlace) {
+        this.examPlace = examPlace;
+    }
+
+    public String getExamRoom() {
+        return examRoom;
+    }
+
+    public void setExamRoom(String examRoom) {
+        this.examRoom = examRoom;
+    }
+
+    public String getExamDate() {
+        return examDate;
+    }
+
+    public void setExamDate(String examDate) {
+        this.examDate = examDate;
+    }
+
+    public String getExamTime() {
+        return examTime;
+    }
+
+    public void setExamTime(String examTime) {
+        this.examTime = examTime;
+    }
+
+    public String getPaperNumber() {
+        return paperNumber;
+    }
+
+    public void setPaperNumber(String paperNumber) {
+        this.paperNumber = paperNumber;
+    }
+
+    public List<FieldsDto> getSecondaryFieldList() {
+        return secondaryFieldList;
+    }
+
+    public void setSecondaryFieldList(List<FieldsDto> secondaryFieldList) {
+        this.secondaryFieldList = secondaryFieldList;
+    }
+
+    public String getExamStartTime() {
+        return examStartTime;
+    }
+
+    public void setExamStartTime(String examStartTime) {
+        this.examStartTime = examStartTime;
+    }
+
+    public String getExamEndTime() {
+        return examEndTime;
+    }
+
+    public void setExamEndTime(String examEndTime) {
+        this.examEndTime = examEndTime;
+    }
+
+    public Long getSchoolId() {
+        return schoolId;
+    }
+
+    public void setSchoolId(Long schoolId) {
+        this.schoolId = schoolId;
+    }
+
+    public Long getPrintPlanId() {
+        return printPlanId;
+    }
+
+    public void setPrintPlanId(Long printPlanId) {
+        this.printPlanId = printPlanId;
+    }
+
+    public String getPrintPlanName() {
+        return printPlanName;
+    }
+
+    public void setPrintPlanName(String printPlanName) {
+        this.printPlanName = printPlanName;
+    }
+}

+ 23 - 11
distributed-print-business/src/main/java/com/qmth/distributed/print/business/enums/ExaminationDBFieldsEnum.java

@@ -11,32 +11,44 @@ import java.util.List;
  * @Date: 2021-04-20
  */
 public enum ExaminationDBFieldsEnum {
-    STUDENT_CODE("学号"),
-    STUDENT_NAME("姓名"),
-    COURSE_CODE("课程代码"),
-    COURSE_NAME("课程名称"),
-    EXAM_PLACE("考点"),
-    EXAM_ROOM("考场"),
-    EXAM_DATE("考试日期"),
-    EXAM_TIME("考试时间"),
-    PAPER_NUMBER("试卷编号");
+    STUDENT_CODE("学号", "studentCode", 10),
+    STUDENT_NAME("姓名", "studentName", 15),
+    COURSE_CODE("课程代码", "courseCode", 10),
+    COURSE_NAME("课程名称", "courseName", 20),
+    EXAM_PLACE("考点", "examPlace", 10),
+    EXAM_ROOM("考场", "examRoom", 10),
+    EXAM_DATE("考试日期", "examDate", 0),
+    EXAM_TIME("考试时间", "examTime", 0),
+    PAPER_NUMBER("试卷编号", "paperNumber", 15);
     private final String desc;
+    private final String code;
+    private final int length;
 
-    ExaminationDBFieldsEnum(String desc) {
+    ExaminationDBFieldsEnum(String desc, String code, int length) {
         this.desc = desc;
+        this.code = code;
+        this.length = length;
     }
 
     public String getDesc() {
         return desc;
     }
 
+    public String getCode() {
+        return code;
+    }
+
+    public int getLength() {
+        return length;
+    }
+
     public static List<EnumResult> listTypes() {
         List<EnumResult> list = new ArrayList<>();
         for (ExaminationDBFieldsEnum value : ExaminationDBFieldsEnum.values()) {
             EnumResult result = new EnumResult();
             result.setName(value.name());
             result.setOrdinal(value.ordinal());
-            result.setCode(null);
+            result.setCode(value.getCode());
             result.setDesc(value.getDesc());
             list.add(result);
         }

+ 3 - 3
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/ExamDetailService.java

@@ -131,21 +131,21 @@ public interface ExamDetailService extends IService<ExamDetail> {
      * @param userId 当前用户id
      * @param serialNumberParams 序列号生成参数
      */
-    List<Long> disposeExamDetailByExaminationExcel(List<Map<String, Object>> dataList, Long userId, SerialNumberParams serialNumberParams);
+    List<Long> disposeExamDetailByExaminationExcel(List<ExaminationImportDto> dataList, Long userId, SerialNumberParams serialNumberParams);
 
     /**
      * 根据考务数据Excel数据处理考务-科目表
      * @param dataList Excel处理后的数据
      * @param userId 当前用户id
      */
-    void disposeExamDetailCourseByExaminationExcel(List<Map<String, Object>> dataList,Long userId);
+    void disposeExamDetailCourseByExaminationExcel(List<ExaminationImportDto> dataList,Long userId);
 
     /**
      * 根据考务数据Excel数据处理考务-学生表
      * @param dataList Excel处理后的数据
      * @param userId 当前用户id
      */
-    void disposeExamStudentByExaminationExcel(List<Map<String, Object>> dataList,Long userId);
+    void disposeExamStudentByExaminationExcel(List<ExaminationImportDto> dataList,Long userId);
 
     /**
      * 删除考务数据

+ 47 - 54
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamDetailServiceImpl.java

@@ -166,12 +166,8 @@ public class ExamDetailServiceImpl extends ServiceImpl<ExamDetailMapper, ExamDet
         List<FieldsDto> validExaminationFieldList = new ArrayList<>();
         validExaminationFieldList.addAll(requiredFieldsList);
         validExaminationFieldList.addAll(validExtendList);
-        System.out.println("---" + validExaminationFieldList);
 
         List<String> fieldsName = validExaminationFieldList.stream().map(FieldsDto::getName).collect(Collectors.toList());
-        for (String s : fieldsName) {
-            System.out.println(s);
-        }
         return validExaminationFieldList;
     }
 
@@ -371,16 +367,16 @@ public class ExamDetailServiceImpl extends ServiceImpl<ExamDetailMapper, ExamDet
 
     @Transactional(rollbackFor = Exception.class)
     @Override
-    public List<Long> disposeExamDetailByExaminationExcel(List<Map<String, Object>> dataList, Long userId, SerialNumberParams serialNumberParams) {
+    public List<Long> disposeExamDetailByExaminationExcel(List<ExaminationImportDto> dataList, Long userId, SerialNumberParams serialNumberParams) {
         List<Map<String, Object>> examDetailKeyList = dataList.stream().flatMap(e -> {
             Map<String, Object> map = new HashMap<>();
-            map.put("schoolId", e.get("schoolId"));
-            map.put("printPlanId", e.get("printPlanId"));
-            map.put("printPlanName", e.get("printPlanName"));
-            map.put("examPlace", e.get("examPlace"));
-            map.put("examRoom", e.get("examRoom"));
-            map.put("examStartTime", e.get("examStartTime"));
-            map.put("examEndTime", e.get("examEndTime"));
+            map.put("schoolId", e.getSchoolId());
+            map.put("printPlanId", e.getPrintPlanId());
+            map.put("printPlanName", e.getPrintPlanName());
+            map.put("examPlace", e.getExamPlace());
+            map.put("examRoom", e.getExamRoom());
+            map.put("examStartTime", e.getExamStartTime());
+            map.put("examEndTime", e.getExamEndTime());
             return Stream.of(map);
         }).distinct().collect(Collectors.toList());
 
@@ -392,15 +388,13 @@ public class ExamDetailServiceImpl extends ServiceImpl<ExamDetailMapper, ExamDet
             String examRoom = String.valueOf(map.get("examRoom"));
             String examStartTime = String.valueOf(map.get("examStartTime"));
             String examEndTime = String.valueOf(map.get("examEndTime"));
-            System.out.println("dataList : " + JSON.toJSONString(dataList));
-            System.out.println(examPlace + examRoom + examStartTime + examEndTime);
+
             long totalSubjects = dataList.stream()
-                    .filter(e -> String.valueOf(e.get("examPlace")).equals(examPlace) &&
-                            String.valueOf(e.get("examRoom")).equals(examRoom) &&
-                            String.valueOf(e.get("examStartTime")).equals(examStartTime) &&
-                            String.valueOf(e.get("examEndTime")).equals(examEndTime)).count();
+                    .filter(e -> e.getExamPlace().equals(examPlace) &&
+                            e.getExamRoom().equals(examRoom) &&
+                            e.getExamStartTime().equals(examStartTime) &&
+                            e.getExamEndTime().equals(examEndTime)).count();
 
-            System.out.println("totalSubjects" + totalSubjects);
             ExamDetail examDetail = new ExamDetail();
             examDetail.setId(SystemConstant.getDbUuid());
             examDetail.setPackageCode(convertUtil.getIncre(serialNumberParams.getPrefix(), serialNumberParams.getModel(), serialNumberParams.getDigit()));
@@ -423,19 +417,19 @@ public class ExamDetailServiceImpl extends ServiceImpl<ExamDetailMapper, ExamDet
 
     @Transactional(rollbackFor = Exception.class)
     @Override
-    public void disposeExamDetailCourseByExaminationExcel(List<Map<String, Object>> dataList, Long userId) {
+    public void disposeExamDetailCourseByExaminationExcel(List<ExaminationImportDto> dataList, Long userId) {
 
         List<Map<String, Object>> examDetailKeyList = dataList.stream().flatMap(e -> {
             Map<String, Object> map = new HashMap<>();
-            map.put("schoolId", e.get("schoolId"));
-            map.put("printPlanId", e.get("printPlanId"));
-            map.put("examPlace", e.get("examPlace"));
-            map.put("examRoom", e.get("examRoom"));
-            map.put("examStartTime", e.get("examStartTime"));
-            map.put("examEndTime", e.get("examEndTime"));
-            map.put("courseCode", e.get("courseCode"));
-            map.put("courseName", e.get("courseName"));
-            map.put("paperNumber", e.get("paperNumber"));
+            map.put("schoolId", e.getSchoolId());
+            map.put("printPlanId", e.getPrintPlanId());
+            map.put("examPlace", e.getExamPlace());
+            map.put("examRoom", e.getExamRoom());
+            map.put("examStartTime", e.getExamStartTime());
+            map.put("examEndTime", e.getExamEndTime());
+            map.put("courseCode", e.getCourseCode());
+            map.put("courseName", e.getCourseName());
+            map.put("paperNumber", e.getPaperNumber());
             return Stream.of(map);
         }).distinct().collect(Collectors.toList());
 
@@ -452,22 +446,21 @@ public class ExamDetailServiceImpl extends ServiceImpl<ExamDetailMapper, ExamDet
             String paperNumber = String.valueOf(map.get("paperNumber"));
 
             // 获取该科目下的考生人数
-            List<Map<String,Object>> sameCourseList = dataList.stream().filter(e -> Long.valueOf(String.valueOf(e.get("schoolId"))).equals(schoolId) &&
-                    Long.valueOf(String.valueOf(e.get("printPlanId"))).equals(printPlanId) &&
-                    String.valueOf(e.get("examPlace")).equals(examPlace) &&
-                    String.valueOf(e.get("examRoom")).equals(examRoom) &&
-                    Long.valueOf(String.valueOf(e.get("examStartTime"))).equals(examStartTime) &&
-                    Long.valueOf(String.valueOf(e.get("examEndTime"))).equals(examEndTime) &&
-                    String.valueOf(e.get("courseCode")).equals(courseCode) &&
-                    String.valueOf(e.get("courseName")).equals(courseName) &&
-                    String.valueOf(e.get("paperNumber")).equals(paperNumber)).collect(Collectors.toList());
+            List<ExaminationImportDto> sameCourseList = dataList.stream().filter(e -> e.getSchoolId().equals(schoolId) &&
+                    e.getPrintPlanId().equals(printPlanId) &&
+                    e.getExamPlace().equals(examPlace) &&
+                    e.getExamRoom().equals(examRoom) &&
+                    Long.valueOf(e.getExamStartTime()).equals(examStartTime) &&
+                    Long.valueOf(e.getExamEndTime()).equals(examEndTime) &&
+                    e.getCourseCode().equals(courseCode) &&
+                    e.getCourseName().equals(courseName) &&
+                    e.getPaperNumber().equals(paperNumber)).collect(Collectors.toList());
 
             System.out.println(JSON.toJSONString(sameCourseList));
 
             int totalSubjects = sameCourseList.size();
 
 
-
             List<ExamDetail> examDetailList = this.list(new QueryWrapper<ExamDetail>().lambda()
                     .eq(ExamDetail::getPrintPlanId, printPlanId)
                     .eq(ExamDetail::getExamPlace, examPlace)
@@ -495,22 +488,22 @@ public class ExamDetailServiceImpl extends ServiceImpl<ExamDetailMapper, ExamDet
 
     @Transactional(rollbackFor = Exception.class)
     @Override
-    public void disposeExamStudentByExaminationExcel(List<Map<String, Object>> dataList, Long userId) {
+    public void disposeExamStudentByExaminationExcel(List<ExaminationImportDto> dataList, Long userId) {
         List<ExamStudent> examStudentList = new ArrayList<>();
-        for (Map<String, Object> map : dataList) {
-            Long schoolId = Long.valueOf(String.valueOf(map.get("schoolId")));
-            Long printPlanId = Long.valueOf(String.valueOf(map.get("printPlanId")));
-            String examPlace = String.valueOf(map.get("examPlace"));
-            String examRoom = String.valueOf(map.get("examRoom"));
-            Long examStartTime = SystemConstant.convertIdToLong(String.valueOf(map.get("examStartTime")));
-            Long examEndTime = SystemConstant.convertIdToLong(String.valueOf(map.get("examEndTime")));
-            String courseCode = String.valueOf(map.get("courseCode"));
-            String courseName = String.valueOf(map.get("courseName"));
-            String paperNumber = String.valueOf(map.get("paperNumber"));
-            String studentName = String.valueOf(map.get("studentName"));
-            String studentCode = String.valueOf(map.get("studentCode"));
-
-            List<FieldsDto> fieldsDtoList = (List<FieldsDto>) map.get("secondaryFieldList");
+        for (ExaminationImportDto examinationImportDto : dataList) {
+            Long schoolId = examinationImportDto.getSchoolId();
+            Long printPlanId = examinationImportDto.getPrintPlanId();
+            String examPlace = examinationImportDto.getExamPlace();
+            String examRoom = examinationImportDto.getExamRoom();
+            Long examStartTime = SystemConstant.convertIdToLong(examinationImportDto.getExamStartTime());
+            Long examEndTime = SystemConstant.convertIdToLong(examinationImportDto.getExamEndTime());
+            String courseCode = examinationImportDto.getCourseCode();
+            String courseName = examinationImportDto.getCourseName();
+            String paperNumber = examinationImportDto.getPaperNumber();
+            String studentName = examinationImportDto.getStudentName();
+            String studentCode = examinationImportDto.getStudentCode();
+
+            List<FieldsDto> fieldsDtoList = examinationImportDto.getSecondaryFieldList();
             List<ExtendFieldsDto> extendFieldsDtoList = this.getExtendFieldsByFields(fieldsDtoList);
             List<ExamDetail> examDetailList = this.list(new QueryWrapper<ExamDetail>().lambda()
                     .eq(ExamDetail::getPrintPlanId, printPlanId)

+ 2 - 2
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamTaskServiceImpl.java

@@ -874,11 +874,11 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
         List<ExamTask> examTaskList = this.list(new QueryWrapper<ExamTask>().lambda()
                 .eq(ExamTask::getPaperNumber, paperNumber).eq(ExamTask::getSchoolId, schoolId));
         if (examTaskList.size() > 1) {
-            throw ExceptionResultEnum.ERROR.exception("异常 : 有多条命题任务记录 schoolId = " + schoolId + " paperNumber = " + paperNumber);
+            throw ExceptionResultEnum.ERROR.exception("异常 :[试卷编号]" + paperNumber + "有多条命题任务记录");
         } else if (examTaskList.size() == 1) {
             ExamTask examTask = examTaskList.get(0);
             if (!courseCode.equals(examTask.getCourseCode())) {
-                throw ExceptionResultEnum.ERROR.exception("要导入的考务数据的试卷编号在命题任务中已存在,但该试卷编号对应的考务数据课程代码和命题任务中的课程代码不匹配  试卷编号 : " + paperNumber);
+                throw ExceptionResultEnum.ERROR.exception("要导入的考务数据的试卷编号在命题任务中已存在,但该试卷编号对应的考务数据课程代码和命题任务中的课程代码不匹配  [试卷编号] : " + paperNumber);
             }
         }
     }

+ 50 - 69
distributed-print-business/src/main/java/com/qmth/distributed/print/business/templete/service/impl/TaskLogicServiceImpl.java

@@ -8,6 +8,7 @@ import com.aliyun.oss.common.utils.BinaryUtil;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.qmth.boot.api.exception.ApiException;
 import com.qmth.distributed.print.business.bean.dto.ExaminationExportDto;
+import com.qmth.distributed.print.business.bean.dto.ExaminationImportDto;
 import com.qmth.distributed.print.business.bean.dto.FieldsDto;
 import com.qmth.distributed.print.business.bean.dto.PdfDto;
 import com.qmth.distributed.print.business.bean.params.ArraysParams;
@@ -42,6 +43,7 @@ import org.springframework.util.FileCopyUtils;
 
 import javax.annotation.Resource;
 import java.io.*;
+import java.lang.reflect.Field;
 import java.time.LocalDateTime;
 import java.util.*;
 import java.util.stream.Collectors;
@@ -382,13 +384,16 @@ public class TaskLogicServiceImpl implements TaskLogicService {
         Workbook workbook;
         if (path.endsWith(SystemConstant.XLSX)) {
             workbook = new XSSFWorkbook(inputStream);
-        } else if (path.endsWith("xls")) {
+        } else if (path.endsWith(SystemConstant.XLS)) {
             workbook = new HSSFWorkbook(inputStream);
         } else {
             throw ExceptionResultEnum.ERROR.exception("文件格式异常");
         }
         // 读取第一个工作表
         Sheet sheet = workbook.getSheetAt(0);
+        if (sheet.getLastRowNum() == 0 && sheet.getPhysicalNumberOfRows() == 0) {
+            throw ExceptionResultEnum.ERROR.exception("第一个sheet为空,考务数据必须放在第一个sheet(工作表)内");
+        }
         // 获取sheet行数
         int totalRows = sheet.getPhysicalNumberOfRows();
         // 获取sheet列数
@@ -400,7 +405,7 @@ public class TaskLogicServiceImpl implements TaskLogicService {
         List<String> headList = new ArrayList<>();
         // 将必填字段匹配excel解析的表头索引
         for (int i = 0; i < totalCells; i++) {
-            String cellValue = head.getCell(i).getStringCellValue();
+            String cellValue = String.valueOf(ExcelUtil.convert(head.getCell(i)));
             for (FieldsDto fieldsDto : fieldsDtoList) {
                 if (cellValue.equals(fieldsDto.getName())) {
                     fieldsDto.setIndex(i);
@@ -415,22 +420,16 @@ public class TaskLogicServiceImpl implements TaskLogicService {
                 throw ExceptionResultEnum.ERROR.exception("学校考务必填字段 :'" + fieldsDto.getName() + "' 不存在");
             }
         }
-        List<Map<String, Object>> dataList = new ArrayList<>();
+        List<ExaminationImportDto> examinationImportDtoList = new ArrayList<>();
 
         for (int r = 1; r < totalRows; r++) {
             Row row = sheet.getRow(r);
 
-            String studentCode = null;
-            String studentName = null;
-            String courseCode = null;
-            String courseName = null;
-            String examPlace = null;
-            String examRoom = null;
-            String examDate = null;
-            String examTime = null;
-            String paperNumber = null;
             List<FieldsDto> secondaryFieldList = new ArrayList<>(); // 备选字段
+
+            ExaminationImportDto examinationImportDto = new ExaminationImportDto();
             for (FieldsDto fieldsDto : fieldsDtoList) {
+                boolean match = false;
                 String name = fieldsDto.getName();
                 String code = fieldsDto.getCode();
                 int index = fieldsDto.getIndex();
@@ -445,33 +444,22 @@ public class TaskLogicServiceImpl implements TaskLogicService {
                     throw ExceptionResultEnum.ERROR.exception("excel中第[" + (r + 1) + "]行,第[" + (index + 1) + "]列,字段[" + name + "]必填");
                 }
 
-                // TODO: 2021/4/20 可以优化 
-                if (ExaminationDBFieldsEnum.STUDENT_CODE.getDesc().equals(name)) {
-                    studentCode = cellValue;
-                    ConvertUtil.verifyLength(studentCode, 10, ExaminationDBFieldsEnum.STUDENT_CODE.getDesc());
-                } else if (ExaminationDBFieldsEnum.STUDENT_NAME.getDesc().equals(name)) {
-                    studentName = cellValue;
-                    ConvertUtil.verifyLength(studentName, 15, ExaminationDBFieldsEnum.STUDENT_NAME.getDesc());
-                } else if (ExaminationDBFieldsEnum.COURSE_CODE.getDesc().equals(name)) {
-                    courseCode = cellValue;
-                    ConvertUtil.verifyLength(courseCode, 10, ExaminationDBFieldsEnum.COURSE_CODE.getDesc());
-                } else if (ExaminationDBFieldsEnum.COURSE_NAME.getDesc().equals(name)) {
-                    courseName = cellValue;
-                    ConvertUtil.verifyLength(courseName, 20, ExaminationDBFieldsEnum.COURSE_NAME.getDesc());
-                } else if (ExaminationDBFieldsEnum.EXAM_PLACE.getDesc().equals(name)) {
-                    examPlace = cellValue;
-                    ConvertUtil.verifyLength(examPlace, 10, ExaminationDBFieldsEnum.EXAM_PLACE.getDesc());
-                } else if (ExaminationDBFieldsEnum.EXAM_ROOM.getDesc().equals(name)) {
-                    examRoom = cellValue;
-                    ConvertUtil.verifyLength(examRoom, 10, ExaminationDBFieldsEnum.EXAM_ROOM.getDesc());
-                } else if (ExaminationDBFieldsEnum.EXAM_DATE.getDesc().equals(name)) {
-                    examDate = cellValue;
-                } else if (ExaminationDBFieldsEnum.EXAM_TIME.getDesc().equals(name)) {
-                    examTime = cellValue;
-                } else if (ExaminationDBFieldsEnum.PAPER_NUMBER.getDesc().equals(name)) {
-                    paperNumber = cellValue;
-                    ConvertUtil.verifyLength(paperNumber, 15, ExaminationDBFieldsEnum.PAPER_NUMBER.getDesc());
-                } else {
+                for (ExaminationDBFieldsEnum value : ExaminationDBFieldsEnum.values()) {
+                    String dbName = value.getDesc();
+                    String dbCode = value.getCode();
+                    int dbLength = value.getLength();
+                    if (dbName.equals(name)) {
+                        if (dbLength > 0) {
+                            ConvertUtil.verifyLength(cellValue, dbLength, dbName);
+                        }
+                        Field field = examinationImportDto.getClass().getDeclaredField(dbCode);
+                        field.setAccessible(true);
+                        field.set(examinationImportDto, cellValue);
+                        match = true;
+                        break;
+                    }
+                }
+                if (!match) {
                     if ("primary".equals(level)) {
                         throw ExceptionResultEnum.ERROR.exception("有数据库不需要的必选字段 : " + name);
                     }
@@ -487,46 +475,39 @@ public class TaskLogicServiceImpl implements TaskLogicService {
                 }
             }
             // 校验试卷编号
-            examTaskService.verifyCourseCodeByPaperNumber(schoolId, paperNumber, courseCode);
+            examTaskService.verifyCourseCodeByPaperNumber(schoolId, examinationImportDto.getPaperNumber(), examinationImportDto.getCourseCode());
 
             // 校验课程信息
-            basicCourseService.verifyCourseInfo(schoolId, courseCode, courseName, userId);
+            basicCourseService.verifyCourseInfo(schoolId, examinationImportDto.getCourseCode(), examinationImportDto.getCourseName(), userId);
 
             // 解析时间
-            Map<String, Object> timeMap = ConvertUtil.analyzeStartAndEndTime(examDate, examTime);
+            Map<String, Object> timeMap = ConvertUtil.analyzeStartAndEndTime(examinationImportDto.getExamDate(), examinationImportDto.getExamTime());
             String examStartTime = String.valueOf(timeMap.get("startTime"));
             String examEndTime = String.valueOf(timeMap.get("endTime"));
 
-            Map<String, Object> dataMap = new HashMap<>();
-            dataMap.put("studentCode", studentCode);
-            dataMap.put("studentName", studentName);
-            dataMap.put("courseCode", courseCode);
-            dataMap.put("courseName", courseName);
-            dataMap.put("examPlace", examPlace);
-            dataMap.put("examRoom", examRoom);
-            dataMap.put("examStartTime", examStartTime);
-            dataMap.put("examEndTime", examEndTime);
-            dataMap.put("paperNumber", paperNumber);
-            dataMap.put("secondaryFieldList", secondaryFieldList);
-            dataMap.put("schoolId", schoolId);
-            dataMap.put("printPlanId", printPlanId);
-            dataMap.put("printPlanName", printPlanName);
-            dataList.add(dataMap);
+            examinationImportDto.setSecondaryFieldList(secondaryFieldList);
+            examinationImportDto.setExamStartTime(examStartTime);
+            examinationImportDto.setExamEndTime(examEndTime);
+            examinationImportDto.setSchoolId(schoolId);
+            examinationImportDto.setPrintPlanId(printPlanId);
+            examinationImportDto.setPrintPlanName(printPlanName);
+            examinationImportDtoList.add(examinationImportDto);
         }
-        System.out.println(JSON.toJSONString(dataList));
+        System.out.println(JSON.toJSONString(examinationImportDtoList));
+
         // 校验课程代码和试卷编号在印刷计划下是1对1的关系
-        List<String> courseCodeList = dataList.stream().map(e -> String.valueOf(e.get("courseCode"))).distinct().collect(Collectors.toList());
-        List<String> paperNumberList = dataList.stream().map(e -> String.valueOf(e.get("paperNumber"))).distinct().collect(Collectors.toList());
+        List<String> courseCodeList = examinationImportDtoList.stream().map(ExaminationImportDto::getCourseCode).distinct().collect(Collectors.toList());
+        List<String> paperNumberList = examinationImportDtoList.stream().map(ExaminationImportDto::getPaperNumber).distinct().collect(Collectors.toList());
         for (String courseCode : courseCodeList) {
-            List<String> tmp = dataList.stream().filter(e -> courseCode.equals(String.valueOf(e.get("courseCode"))))
-                    .map(e -> String.valueOf(e.get("paperNumber"))).distinct().collect(Collectors.toList());
+            List<String> tmp = examinationImportDtoList.stream().filter(e -> courseCode.equals(e.getCourseCode()))
+                    .map(ExaminationImportDto::getPaperNumber).distinct().collect(Collectors.toList());
             if (tmp.size() != 1) {
                 throw ExceptionResultEnum.ERROR.exception("课程代码为 " + courseCode + ",对应多个试卷编号 : " + tmp);
             }
         }
         for (String paperNumber : paperNumberList) {
-            List<String> tmp = dataList.stream().filter(e -> paperNumber.equals(String.valueOf(e.get("paperNumber"))))
-                    .map(e -> String.valueOf(e.get("courseCode"))).distinct().collect(Collectors.toList());
+            List<String> tmp = examinationImportDtoList.stream().filter(e -> paperNumber.equals(e.getPaperNumber()))
+                    .map(ExaminationImportDto::getCourseCode).distinct().collect(Collectors.toList());
             if (tmp.size() != 1) {
                 throw ExceptionResultEnum.ERROR.exception("试卷编号为 " + paperNumber + ",对应多个课程代码 : " + tmp);
             }
@@ -535,25 +516,25 @@ public class TaskLogicServiceImpl implements TaskLogicService {
         // 删除印刷计划下的考务数据
         examDetailService.deleteExaminationData(printPlanId);
 
-
+        // 卷袋号生成规则
         SerialNumberParams serialNumberParams = new SerialNumberParams("packageCode-", "p", 6);
         String key = serialNumberParams.getModel() + serialNumberParams.getPrefix();
         RedisAtomicLong counter = new RedisAtomicLong(key, Objects.requireNonNull(redisTemplate.getConnectionFactory()));
         Long value = counter.get();
         try {
             // 组装exam_detail数据
-            List<Long> examDetailIdList = examDetailService.disposeExamDetailByExaminationExcel(dataList, userId, serialNumberParams);
+            List<Long> examDetailIdList = examDetailService.disposeExamDetailByExaminationExcel(examinationImportDtoList, userId, serialNumberParams);
             // 组装exam_detail_course数据
-            examDetailService.disposeExamDetailCourseByExaminationExcel(dataList, userId);
+            examDetailService.disposeExamDetailCourseByExaminationExcel(examinationImportDtoList, userId);
             // 组装exam_student数据
-            examDetailService.disposeExamStudentByExaminationExcel(dataList, userId);
+            examDetailService.disposeExamStudentByExaminationExcel(examinationImportDtoList, userId);
 
             // 更改印刷计划状态
             examPrintPlan.setStatus(PrintPlanStatusEnum.READY);
             examPrintPlanService.updateById(examPrintPlan);
 
             map.put("examDetailIdList", examDetailIdList);
-            map.put("dataCount", dataList.size());
+            map.put("dataCount", examinationImportDtoList.size());
         } catch (Exception e) {
             redisTemplate.opsForValue().set(key, value);
             throw new RuntimeException(e);