From c6a8c4095d3c4bc39b165fa8adf33d98a0b96c1c Mon Sep 17 00:00:00 2001
From: 陈杰 <504987307@qq.com>
Date: Fri, 18 Oct 2019 13:37:34 +0800
Subject: [PATCH] 试卷导入

---
 src/main/java/com/jevon/controller/LearnController.java                 |  98 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---------------
 src/main/java/com/jevon/controller/ScheduleInitController.java          |  18 +++++++++---------
 src/main/java/com/jevon/enums/DifficultEnums.java                       |  46 ++++++++++++++++++++++++++++++++++++++++++++++
 src/main/java/com/jevon/enums/DimensionalEnums.java                     |  37 +++++++++++++++++++++++++++++++++++++
 src/main/java/com/jevon/mapper/AnalyseDetailMapper.java                 |  15 +++++++++++++++
 src/main/java/com/jevon/mapper/AnalyseDimensionalMapper.java            |  15 +++++++++++++++
 src/main/java/com/jevon/mapper/AnalyseMapper.java                       |  19 +++++++++++++++++++
 src/main/java/com/jevon/mapper/DimensionalMapper.java                   |  17 +++++++++++++++++
 src/main/java/com/jevon/model/Analyse.java                              |  57 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/main/java/com/jevon/model/AnalyseDetail.java                        |  75 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/main/java/com/jevon/model/AnalyseDimensional.java                   |  66 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/main/java/com/jevon/model/Dimensional.java                          |  48 ++++++++++++++++++++++++++++++++++++++++++++++++
 src/main/java/com/jevon/service/AnalyseDetailService.java               |  16 ++++++++++++++++
 src/main/java/com/jevon/service/AnalyseDimensionalService.java          |  16 ++++++++++++++++
 src/main/java/com/jevon/service/AnalyseService.java                     |  20 ++++++++++++++++++++
 src/main/java/com/jevon/service/DimensionalService.java                 |  19 +++++++++++++++++++
 src/main/java/com/jevon/service/impl/AnalyseDetailServiceImpl.java      |  38 ++++++++++++++++++++++++++++++++++++++
 src/main/java/com/jevon/service/impl/AnalyseDimensionalServiceImpl.java |  38 ++++++++++++++++++++++++++++++++++++++
 src/main/java/com/jevon/service/impl/AnalyseServiceImpl.java            |  36 ++++++++++++++++++++++++++++++++++++
 src/main/java/com/jevon/service/impl/DimensionalServiceImpl.java        |  44 ++++++++++++++++++++++++++++++++++++++++++++
 src/main/java/com/jevon/vo/excel/ExamExcelVo.java                       | 168 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/main/resources/mapping/AnalyseDetailMapper.xml                      |  21 +++++++++++++++++++++
 src/main/resources/mapping/AnalyseDimensionalMapper.xml                 |  20 ++++++++++++++++++++
 src/main/resources/mapping/AnalyseMapper.xml                            |  30 ++++++++++++++++++++++++++++++
 src/main/resources/mapping/DimensionalMapper.xml                        |  25 +++++++++++++++++++++++++
 25 files changed, 978 insertions(+), 24 deletions(-)
 create mode 100644 src/main/java/com/jevon/enums/DifficultEnums.java
 create mode 100644 src/main/java/com/jevon/enums/DimensionalEnums.java
 create mode 100644 src/main/java/com/jevon/mapper/AnalyseDetailMapper.java
 create mode 100644 src/main/java/com/jevon/mapper/AnalyseDimensionalMapper.java
 create mode 100644 src/main/java/com/jevon/mapper/AnalyseMapper.java
 create mode 100644 src/main/java/com/jevon/mapper/DimensionalMapper.java
 create mode 100644 src/main/java/com/jevon/model/Analyse.java
 create mode 100644 src/main/java/com/jevon/model/AnalyseDetail.java
 create mode 100644 src/main/java/com/jevon/model/AnalyseDimensional.java
 create mode 100644 src/main/java/com/jevon/model/Dimensional.java
 create mode 100644 src/main/java/com/jevon/service/AnalyseDetailService.java
 create mode 100644 src/main/java/com/jevon/service/AnalyseDimensionalService.java
 create mode 100644 src/main/java/com/jevon/service/AnalyseService.java
 create mode 100644 src/main/java/com/jevon/service/DimensionalService.java
 create mode 100644 src/main/java/com/jevon/service/impl/AnalyseDetailServiceImpl.java
 create mode 100644 src/main/java/com/jevon/service/impl/AnalyseDimensionalServiceImpl.java
 create mode 100644 src/main/java/com/jevon/service/impl/AnalyseServiceImpl.java
 create mode 100644 src/main/java/com/jevon/service/impl/DimensionalServiceImpl.java
 create mode 100644 src/main/java/com/jevon/vo/excel/ExamExcelVo.java
 create mode 100644 src/main/resources/mapping/AnalyseDetailMapper.xml
 create mode 100644 src/main/resources/mapping/AnalyseDimensionalMapper.xml
 create mode 100644 src/main/resources/mapping/AnalyseMapper.xml
 create mode 100644 src/main/resources/mapping/DimensionalMapper.xml

diff --git a/src/main/java/com/jevon/controller/LearnController.java b/src/main/java/com/jevon/controller/LearnController.java
index ce56901..d5000e5 100644
--- a/src/main/java/com/jevon/controller/LearnController.java
+++ b/src/main/java/com/jevon/controller/LearnController.java
@@ -1,15 +1,25 @@
 package com.jevon.controller;
 
+import com.jevon.enums.DifficultEnums;
+import com.jevon.enums.DimensionalEnums;
 import com.jevon.model.*;
+import com.jevon.service.AnalyseDetailService;
+import com.jevon.service.AnalyseDimensionalService;
+import com.jevon.service.AnalyseService;
+import com.jevon.service.DimensionalService;
 import com.jevon.vo.BaseVo;
+import com.jevon.vo.excel.ExamExcelVo;
 import com.jevon.vo.req.InitAnalyseReqVo;
 import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.poi.hssf.usermodel.HSSFWorkbook;
 import org.apache.poi.ss.usermodel.*;
 import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
 import org.springframework.web.bind.annotation.RestController;
 
 import java.io.File;
@@ -26,11 +36,31 @@ import java.util.*;
 @Api(value = "学情分析")
 public class LearnController {
 
+    @Autowired
+    AnalyseService analyseService;
 
+    @Autowired
+    DimensionalService dimensionalService;
+
+    @Autowired
+    AnalyseDimensionalService analyseDimensionalService;
+
+    @Autowired
+    AnalyseDetailService analyseDetailService;
+
+    @ApiOperation("试卷信息导入")
+    @RequestMapping(value = "initAnalyse", method = RequestMethod.POST)
     public BaseVo initAnalyse(@RequestBody InitAnalyseReqVo initAnalyseReqVo){
         BaseVo baseVo = new BaseVo();
-        Date date = new Date();
+        analysisExcel(initAnalyseReqVo);
+        return baseVo;
+    }
+
+    private void analysisExcel(InitAnalyseReqVo initAnalyseReqVo){
         try{
+            List<AnalyseDetail> analyseDetails = new ArrayList<>();
+            List<AnalyseDimensional> analyseDimensionals = new ArrayList<>();
+            Analyse analyse = analyseService.selectById(initAnalyseReqVo.getAnalyseId());
             String fileUrl = initAnalyseReqVo.getUrl();
             File excelFile = new File(fileUrl);
             // 获得工作簿
@@ -43,9 +73,8 @@ public class LearnController {
             }
             // 获得工作表
             Sheet sheet = workbook.getSheetAt(0);
+            Date date = new Date();
             int rows = sheet.getPhysicalNumberOfRows();
-            int column = 0 ;
-            int courseNumber = 0;
             for (int i = 0; i < rows; i++) {
                 // 获取第i行数据
                 Row sheetRow = sheet.getRow(i);
@@ -54,24 +83,63 @@ public class LearnController {
                     String title = sheetRow.getCell(0).getStringCellValue().trim();
                 }else if(i == 1){
                     //获取表头
-                    int j = 0 ;
-                    while (sheetRow.getCell(j) != null && StringUtils.isNotBlank(sheetRow.getCell(j).getStringCellValue().trim())) {
-                        j++ ;
-                    }
-                    column = j ;
                 } else {
-                    for (int j = 0; j < column; j++) {
-                        Cell cell = sheetRow.getCell(j);
-                        if(cell != null){
-                            cell.setCellType(CellType.STRING);
-                        }
+                    ExamExcelVo examExcelVo = new ExamExcelVo(sheetRow);
+                    AnalyseDetail analyseDetail = new AnalyseDetail();
+                    String questionNumber = null ;
+                    if(StringUtils.isNotBlank(examExcelVo.getQuestionSmallNumber())){
+                        questionNumber = examExcelVo.getQuestionNumber()+"("+examExcelVo.getQuestionSmallNumber()+")";
+                    }else {
+                        questionNumber = examExcelVo.getQuestionNumber() ;
                     }
+                    analyseDetail.setQuestionNumber(questionNumber);
+                    analyseDetail.setAnalyseId(analyse.getId());
+                    analyseDetail.setQuestionType(examExcelVo.getQuestionType());
+                    analyseDetail.setDifficult(DifficultEnums.getDifficultType(examExcelVo.getDifficult()));
+                    analyseDetail.setScore(new Float(examExcelVo.getScore()));
+                    analyseDetail.setCreateTime(date);
+                    analyseDetails.add(analyseDetail);
+                    initAnalyseDimensional(analyse,questionNumber,examExcelVo.getScore(),examExcelVo.getKnowledge(),DimensionalEnums.knowledge.getDimensionalType(),analyseDimensionals);
+                    initAnalyseDimensional(analyse,questionNumber,examExcelVo.getScore(),examExcelVo.getAbility(),DimensionalEnums.ability.getDimensionalType(),analyseDimensionals);
+                    initAnalyseDimensional(analyse,questionNumber,examExcelVo.getScore(),examExcelVo.getSkill(),DimensionalEnums.skill.getDimensionalType(),analyseDimensionals);
+                    initAnalyseDimensional(analyse,questionNumber,examExcelVo.getScore(),examExcelVo.getThink(),DimensionalEnums.think.getDimensionalType(),analyseDimensionals);
                 }
             }
+            analyseDetailService.insertBatch(analyseDetails);
+            analyseDimensionalService.insertBatch(analyseDimensionals);
         }catch (Exception e){
             System.out.println(e);
-            baseVo.setSuccess(false);
         }
-        return baseVo;
     }
+
+    private void initAnalyseDimensional(Analyse analyse ,String questionNumber , String score , String dimensionalMessage , int dimensionalType , List<AnalyseDimensional> analyseDimensionals){
+        if(StringUtils.isNotBlank(dimensionalMessage)){
+            String[] message =dimensionalMessage.split("、");
+            for (int j = 0; j < message.length ; j++) {
+                if(StringUtils.isNotBlank(message[j])){
+                    Dimensional dimensional = new Dimensional();
+                    dimensional.setDimensionalType(dimensionalType);
+                    dimensional.setDimensionalName(message[j]);
+                    //查数据库是否已存在该四维诊断  不存在则导入
+                    Dimensional result = dimensionalService.selectByTypeAndName(dimensionalType,message[j]);
+                    int dimensionalId = 0 ;
+                    if(result == null || result.getId() == 0){
+                        dimensional.setCreateTime(new Date());
+                        dimensionalId = dimensionalService.insert(dimensional);
+                    }else {
+                        dimensionalId = result.getId();
+                    }
+                    AnalyseDimensional analyseDimensional = new AnalyseDimensional();
+                    analyseDimensional.setAnalyseId(analyse.getId());
+                    analyseDimensional.setDimensionalId(dimensionalId);
+                    analyseDimensional.setQuestionNumber(questionNumber);
+                    analyseDimensional.setScore(new Float(score));
+                    analyseDimensional.setCreateTime(new Date());
+                    analyseDimensionals.add(analyseDimensional);
+                }
+            }
+        }
+    }
+
+
 }
diff --git a/src/main/java/com/jevon/controller/ScheduleInitController.java b/src/main/java/com/jevon/controller/ScheduleInitController.java
index 74616e2..489ea5d 100644
--- a/src/main/java/com/jevon/controller/ScheduleInitController.java
+++ b/src/main/java/com/jevon/controller/ScheduleInitController.java
@@ -314,7 +314,7 @@ public class ScheduleInitController {
             teacher.setTeacherName(json.get("name").toString());
             teachers.add(teacher);
         }
-        initTeacher(teachers);
+        initTeacher(teachers,schoolId);
         JSONObject classList = HttpClientUtils.httpGet(url+"/api/EasyN/GetSchoolClass?SchoolId="+schoolId);
         List<JSONObject> openClasses = (List<JSONObject>)classList.get("data");
         List<ClassModel> classModels = new ArrayList<>();
@@ -326,7 +326,7 @@ public class ScheduleInitController {
             classModel.setClassName(json.get("class_name").toString());
             classModels.add(classModel);
         }
-        initClass(classModels);
+        initClass(classModels,schoolId);
         JSONObject courseList = HttpClientUtils.httpGet(url+"/api/EasyN/GetSchoolSubject?SchoolId="+schoolId);
         List<JSONObject> openCourses = (List<JSONObject>)courseList.get("data");
         List<Course> courses = new ArrayList<>();
@@ -338,12 +338,12 @@ public class ScheduleInitController {
             course.setCourseType(0);
             courses.add(course);
         }
-        initCourse(courses);
+        initCourse(courses,schoolId);
     }
 
-    public BaseVo initCourse(List<Course> courseList){
+    public BaseVo initCourse(List<Course> courseList ,int schoolId){
         BaseVo baseVo = new BaseVo();
-        courseService.deleteSchoolId(courseList.get(0).getSchoolId());
+        courseService.deleteSchoolId(schoolId);
         for(Course course : courseList){
             if(course.getCourseId() == 0 || StringUtils.isBlank(course.getCourseName())){
                 baseVo.setSuccess(false);
@@ -360,9 +360,9 @@ public class ScheduleInitController {
         }
     }
 
-    public BaseVo initClass(List<ClassModel> classList){
+    public BaseVo initClass(List<ClassModel> classList , int schoolId){
         BaseVo baseVo = new BaseVo();
-        classModelService.deleteSchool(classList.get(0).getSchoolId());
+        classModelService.deleteSchool(schoolId);
         for(ClassModel classModel : classList){
             if(classModel.getClassId() == 0 || StringUtils.isBlank(classModel.getClassName()) ||
                     StringUtils.isBlank(classModel.getGrade()) || classModel.getSchoolId() == 0){
@@ -380,7 +380,7 @@ public class ScheduleInitController {
         }
     }
 
-    public BaseVo initTeacher(List<Teacher> teacherList){
+    public BaseVo initTeacher(List<Teacher> teacherList , int schoolId){
         List<Teacher> result = new ArrayList<>();
         for(Teacher teacher : teacherList){
             boolean isExist = false;
@@ -394,7 +394,7 @@ public class ScheduleInitController {
             }
         }
         BaseVo baseVo = new BaseVo();
-        teacherService.deleteSchool(result.get(0).getSchoolId());
+        teacherService.deleteSchool(schoolId);
         for(Teacher teacher : result){
             if(teacher.getSchoolId() == 0 || StringUtils.isBlank(teacher.getTeacherName()) ||
                     teacher.getTeacherId() == 0){
diff --git a/src/main/java/com/jevon/enums/DifficultEnums.java b/src/main/java/com/jevon/enums/DifficultEnums.java
new file mode 100644
index 0000000..53551cd
--- /dev/null
+++ b/src/main/java/com/jevon/enums/DifficultEnums.java
@@ -0,0 +1,46 @@
+package com.jevon.enums;
+
+/**
+ * @author chen
+ * @version 1.0
+ * @date 2019/10/18 0018 8:40
+ */
+public enum DifficultEnums {
+
+    easy(1,"易"),
+    medium(2,"中"),
+    difficult(3,"难");
+
+    private int difficultType ;
+    private String difficultName ;
+
+    DifficultEnums(int difficultType, String difficultName) {
+        this.difficultType = difficultType;
+        this.difficultName = difficultName;
+    }
+
+    public int getDifficultType() {
+        return difficultType;
+    }
+
+    public void setDifficultType(int difficultType) {
+        this.difficultType = difficultType;
+    }
+
+    public String getDifficultName() {
+        return difficultName;
+    }
+
+    public void setDifficultName(String difficultName) {
+        this.difficultName = difficultName;
+    }
+
+    public static int getDifficultType(String difficultName){
+        for (DifficultEnums difficultEnums : DifficultEnums.values()) {
+            if (difficultEnums.getDifficultName().equals(difficultName)) {
+                return difficultEnums.getDifficultType();
+            }
+        }
+        return 0 ;
+    }
+}
diff --git a/src/main/java/com/jevon/enums/DimensionalEnums.java b/src/main/java/com/jevon/enums/DimensionalEnums.java
new file mode 100644
index 0000000..ba07dd3
--- /dev/null
+++ b/src/main/java/com/jevon/enums/DimensionalEnums.java
@@ -0,0 +1,37 @@
+package com.jevon.enums;
+
+/**
+ * @author chen
+ * @version 1.0
+ * @date 2019/10/18 0018 8:33
+ */
+public enum DimensionalEnums {
+    knowledge(1,"知识点"),
+    ability(2,"能力"),
+    skill(3,"技能"),
+    think(4,"四维");
+
+    private int dimensionalType ;
+    private String dimensionalName ;
+
+    DimensionalEnums(int dimensionalType, String dimensionalName) {
+        this.dimensionalType = dimensionalType;
+        this.dimensionalName = dimensionalName;
+    }
+
+    public int getDimensionalType() {
+        return dimensionalType;
+    }
+
+    public void setDimensionalType(int dimensionalType) {
+        this.dimensionalType = dimensionalType;
+    }
+
+    public String getDimensionalName() {
+        return dimensionalName;
+    }
+
+    public void setDimensionalName(String dimensionalName) {
+        this.dimensionalName = dimensionalName;
+    }
+}
diff --git a/src/main/java/com/jevon/mapper/AnalyseDetailMapper.java b/src/main/java/com/jevon/mapper/AnalyseDetailMapper.java
new file mode 100644
index 0000000..c9d4f72
--- /dev/null
+++ b/src/main/java/com/jevon/mapper/AnalyseDetailMapper.java
@@ -0,0 +1,15 @@
+package com.jevon.mapper;
+
+import com.jevon.model.AnalyseDetail;
+
+import java.util.List;
+
+/**
+ * @author chen
+ * @version 1.0
+ * @date 2019/10/18 0018 11:11
+ */
+public interface AnalyseDetailMapper {
+
+    int insertBatch(List<AnalyseDetail> list);
+}
diff --git a/src/main/java/com/jevon/mapper/AnalyseDimensionalMapper.java b/src/main/java/com/jevon/mapper/AnalyseDimensionalMapper.java
new file mode 100644
index 0000000..ec6b707
--- /dev/null
+++ b/src/main/java/com/jevon/mapper/AnalyseDimensionalMapper.java
@@ -0,0 +1,15 @@
+package com.jevon.mapper;
+
+import com.jevon.model.AnalyseDimensional;
+
+import java.util.List;
+
+/**
+ * @author chen
+ * @version 1.0
+ * @date 2019/10/18 0018 11:12
+ */
+public interface AnalyseDimensionalMapper {
+
+    int insertBatch(List<AnalyseDimensional> list);
+}
diff --git a/src/main/java/com/jevon/mapper/AnalyseMapper.java b/src/main/java/com/jevon/mapper/AnalyseMapper.java
new file mode 100644
index 0000000..b0b10ef
--- /dev/null
+++ b/src/main/java/com/jevon/mapper/AnalyseMapper.java
@@ -0,0 +1,19 @@
+package com.jevon.mapper;
+
+import com.jevon.model.Analyse;
+
+import java.util.List;
+
+/**
+ * @author chen
+ * @version 1.0
+ * @date 2019/10/18 0018 10:56
+ */
+public interface AnalyseMapper {
+
+    int insert(Analyse analyse);
+
+    List<Analyse> select(Analyse analyse);
+
+    Analyse selectById(int id);
+}
diff --git a/src/main/java/com/jevon/mapper/DimensionalMapper.java b/src/main/java/com/jevon/mapper/DimensionalMapper.java
new file mode 100644
index 0000000..f0f80c3
--- /dev/null
+++ b/src/main/java/com/jevon/mapper/DimensionalMapper.java
@@ -0,0 +1,17 @@
+package com.jevon.mapper;
+
+import com.jevon.model.Dimensional;
+
+import java.util.List;
+
+/**
+ * @author chen
+ * @version 1.0
+ * @date 2019/10/18 0018 10:11
+ */
+public interface DimensionalMapper {
+
+    int insert(Dimensional dimensional);
+
+    List<Dimensional> select(Dimensional dimensional);
+}
diff --git a/src/main/java/com/jevon/model/Analyse.java b/src/main/java/com/jevon/model/Analyse.java
new file mode 100644
index 0000000..b61147a
--- /dev/null
+++ b/src/main/java/com/jevon/model/Analyse.java
@@ -0,0 +1,57 @@
+package com.jevon.model;
+
+import java.util.Date;
+
+/**
+ * @author chen
+ * @version 1.0
+ * @date 2019/10/18 0018 10:55
+ */
+public class Analyse {
+
+    private int id ;
+    private String examName ;
+    private Date examTime ;
+    private String courseName ;
+    private Date createTime ;
+
+    public int getId() {
+        return id;
+    }
+
+    public void setId(int id) {
+        this.id = id;
+    }
+
+    public String getExamName() {
+        return examName;
+    }
+
+    public void setExamName(String examName) {
+        this.examName = examName;
+    }
+
+    public Date getExamTime() {
+        return examTime;
+    }
+
+    public void setExamTime(Date examTime) {
+        this.examTime = examTime;
+    }
+
+    public String getCourseName() {
+        return courseName;
+    }
+
+    public void setCourseName(String courseName) {
+        this.courseName = courseName;
+    }
+
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+}
diff --git a/src/main/java/com/jevon/model/AnalyseDetail.java b/src/main/java/com/jevon/model/AnalyseDetail.java
new file mode 100644
index 0000000..e159bbb
--- /dev/null
+++ b/src/main/java/com/jevon/model/AnalyseDetail.java
@@ -0,0 +1,75 @@
+package com.jevon.model;
+
+import java.util.Date;
+
+/**
+ * @author chen
+ * @version 1.0
+ * @date 2019/10/18 0018 8:38
+ */
+public class AnalyseDetail {
+
+    private int id ;
+    private int analyseId ;
+    private String questionNumber ;
+    private String questionType ;
+    private int difficult ;
+    private float score ;
+    private Date createTime ;
+
+    public int getId() {
+        return id;
+    }
+
+    public void setId(int id) {
+        this.id = id;
+    }
+
+    public int getAnalyseId() {
+        return analyseId;
+    }
+
+    public void setAnalyseId(int analyseId) {
+        this.analyseId = analyseId;
+    }
+
+    public String getQuestionNumber() {
+        return questionNumber;
+    }
+
+    public void setQuestionNumber(String questionNumber) {
+        this.questionNumber = questionNumber;
+    }
+
+    public int getDifficult() {
+        return difficult;
+    }
+
+    public void setDifficult(int difficult) {
+        this.difficult = difficult;
+    }
+
+    public float getScore() {
+        return score;
+    }
+
+    public void setScore(float score) {
+        this.score = score;
+    }
+
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+
+    public String getQuestionType() {
+        return questionType;
+    }
+
+    public void setQuestionType(String questionType) {
+        this.questionType = questionType;
+    }
+}
diff --git a/src/main/java/com/jevon/model/AnalyseDimensional.java b/src/main/java/com/jevon/model/AnalyseDimensional.java
new file mode 100644
index 0000000..769838b
--- /dev/null
+++ b/src/main/java/com/jevon/model/AnalyseDimensional.java
@@ -0,0 +1,66 @@
+package com.jevon.model;
+
+import java.util.Date;
+
+/**
+ * @author chen
+ * @version 1.0
+ * @date 2019/10/18 0018 8:42
+ */
+public class AnalyseDimensional {
+
+    private int id ;
+    private int analyseId ;
+    private String questionNumber ;
+    private int dimensionalId ;
+    private float score ;
+    private Date createTime ;
+
+    public int getId() {
+        return id;
+    }
+
+    public void setId(int id) {
+        this.id = id;
+    }
+
+    public int getAnalyseId() {
+        return analyseId;
+    }
+
+    public void setAnalyseId(int analyseId) {
+        this.analyseId = analyseId;
+    }
+
+    public String getQuestionNumber() {
+        return questionNumber;
+    }
+
+    public void setQuestionNumber(String questionNumber) {
+        this.questionNumber = questionNumber;
+    }
+
+    public int getDimensionalId() {
+        return dimensionalId;
+    }
+
+    public void setDimensionalId(int dimensionalId) {
+        this.dimensionalId = dimensionalId;
+    }
+
+    public float getScore() {
+        return score;
+    }
+
+    public void setScore(float score) {
+        this.score = score;
+    }
+
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+}
diff --git a/src/main/java/com/jevon/model/Dimensional.java b/src/main/java/com/jevon/model/Dimensional.java
new file mode 100644
index 0000000..ce68412
--- /dev/null
+++ b/src/main/java/com/jevon/model/Dimensional.java
@@ -0,0 +1,48 @@
+package com.jevon.model;
+
+import java.util.Date;
+
+/**
+ * @author chen
+ * @version 1.0
+ * @date 2019/10/18 0018 8:37
+ */
+public class Dimensional {
+
+    private int id ;
+    private int dimensionalType ;
+    private String dimensionalName;
+    private Date createTime ;
+
+    public int getId() {
+        return id;
+    }
+
+    public void setId(int id) {
+        this.id = id;
+    }
+
+    public int getDimensionalType() {
+        return dimensionalType;
+    }
+
+    public void setDimensionalType(int dimensionalType) {
+        this.dimensionalType = dimensionalType;
+    }
+
+    public String getDimensionalName() {
+        return dimensionalName;
+    }
+
+    public void setDimensionalName(String dimensionalName) {
+        this.dimensionalName = dimensionalName;
+    }
+
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+}
diff --git a/src/main/java/com/jevon/service/AnalyseDetailService.java b/src/main/java/com/jevon/service/AnalyseDetailService.java
new file mode 100644
index 0000000..bbcfc56
--- /dev/null
+++ b/src/main/java/com/jevon/service/AnalyseDetailService.java
@@ -0,0 +1,16 @@
+package com.jevon.service;
+
+import com.jevon.model.AnalyseDetail;
+
+import java.util.List;
+
+/**
+ * @author chen
+ * @version 1.0
+ * @date 2019/10/18 0018 11:25
+ */
+public interface AnalyseDetailService {
+
+    int insertBatch(List<AnalyseDetail> list);
+
+}
diff --git a/src/main/java/com/jevon/service/AnalyseDimensionalService.java b/src/main/java/com/jevon/service/AnalyseDimensionalService.java
new file mode 100644
index 0000000..52d7ee1
--- /dev/null
+++ b/src/main/java/com/jevon/service/AnalyseDimensionalService.java
@@ -0,0 +1,16 @@
+package com.jevon.service;
+
+import com.jevon.model.AnalyseDimensional;
+
+import java.util.List;
+
+/**
+ * @author chen
+ * @version 1.0
+ * @date 2019/10/18 0018 11:25
+ */
+public interface AnalyseDimensionalService {
+
+    int insertBatch(List<AnalyseDimensional> list);
+
+}
diff --git a/src/main/java/com/jevon/service/AnalyseService.java b/src/main/java/com/jevon/service/AnalyseService.java
new file mode 100644
index 0000000..3b874b2
--- /dev/null
+++ b/src/main/java/com/jevon/service/AnalyseService.java
@@ -0,0 +1,20 @@
+package com.jevon.service;
+
+import com.jevon.model.Analyse;
+
+import java.util.List;
+
+/**
+ * @author chen
+ * @version 1.0
+ * @date 2019/10/18 0018 10:59
+ */
+public interface AnalyseService {
+
+    int insert(Analyse analyse);
+
+    List<Analyse> select(Analyse analyse);
+
+    Analyse selectById(int id);
+
+}
diff --git a/src/main/java/com/jevon/service/DimensionalService.java b/src/main/java/com/jevon/service/DimensionalService.java
new file mode 100644
index 0000000..36b5e96
--- /dev/null
+++ b/src/main/java/com/jevon/service/DimensionalService.java
@@ -0,0 +1,19 @@
+package com.jevon.service;
+
+import com.jevon.model.Dimensional;
+
+import java.util.List;
+
+/**
+ * @author chen
+ * @version 1.0
+ * @date 2019/10/18 0018 10:24
+ */
+public interface DimensionalService {
+
+    int insert(Dimensional dimensional);
+
+    List<Dimensional> select(Dimensional dimensional);
+
+    Dimensional selectByTypeAndName(int type , String name);
+}
diff --git a/src/main/java/com/jevon/service/impl/AnalyseDetailServiceImpl.java b/src/main/java/com/jevon/service/impl/AnalyseDetailServiceImpl.java
new file mode 100644
index 0000000..4561a97
--- /dev/null
+++ b/src/main/java/com/jevon/service/impl/AnalyseDetailServiceImpl.java
@@ -0,0 +1,38 @@
+package com.jevon.service.impl;
+
+import com.jevon.mapper.AnalyseDetailMapper;
+import com.jevon.model.AnalyseDetail;
+import com.jevon.service.AnalyseDetailService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author chen
+ * @version 1.0
+ * @date 2019/10/18 0018 11:26
+ */
+@Service
+public class AnalyseDetailServiceImpl implements AnalyseDetailService {
+
+    @Autowired
+    AnalyseDetailMapper analyseDetailMapper;
+
+    @Override
+    public int insertBatch(List<AnalyseDetail> list) {
+        int i = 0 ;
+        List<AnalyseDetail> result = new ArrayList<>();
+        for(AnalyseDetail analyseDetail :list){
+            i++ ;
+            result.add(analyseDetail);
+            if(i % 100 == 0){
+                analyseDetailMapper.insertBatch(result);
+                result = new ArrayList<>();
+            }
+        }
+        analyseDetailMapper.insertBatch(result);
+        return  1 ;
+    }
+}
diff --git a/src/main/java/com/jevon/service/impl/AnalyseDimensionalServiceImpl.java b/src/main/java/com/jevon/service/impl/AnalyseDimensionalServiceImpl.java
new file mode 100644
index 0000000..f849d63
--- /dev/null
+++ b/src/main/java/com/jevon/service/impl/AnalyseDimensionalServiceImpl.java
@@ -0,0 +1,38 @@
+package com.jevon.service.impl;
+
+import com.jevon.mapper.AnalyseDimensionalMapper;
+import com.jevon.model.AnalyseDimensional;
+import com.jevon.service.AnalyseDimensionalService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author chen
+ * @version 1.0
+ * @date 2019/10/18 0018 11:27
+ */
+@Service
+public class AnalyseDimensionalServiceImpl implements AnalyseDimensionalService {
+
+    @Autowired
+    AnalyseDimensionalMapper analyseDimensionalMapper;
+
+    @Override
+    public int insertBatch(List<AnalyseDimensional> list) {
+        int i = 0 ;
+        List<AnalyseDimensional> result = new ArrayList<>();
+        for(AnalyseDimensional analyseDetail :list){
+            i++ ;
+            result.add(analyseDetail);
+            if(i % 100 == 0){
+                analyseDimensionalMapper.insertBatch(result);
+                result = new ArrayList<>();
+            }
+        }
+        analyseDimensionalMapper.insertBatch(result);
+        return  1 ;
+    }
+}
diff --git a/src/main/java/com/jevon/service/impl/AnalyseServiceImpl.java b/src/main/java/com/jevon/service/impl/AnalyseServiceImpl.java
new file mode 100644
index 0000000..31f87e5
--- /dev/null
+++ b/src/main/java/com/jevon/service/impl/AnalyseServiceImpl.java
@@ -0,0 +1,36 @@
+package com.jevon.service.impl;
+
+import com.jevon.mapper.AnalyseMapper;
+import com.jevon.model.Analyse;
+import com.jevon.service.AnalyseService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * @author chen
+ * @version 1.0
+ * @date 2019/10/18 0018 10:59
+ */
+@Service
+public class AnalyseServiceImpl implements AnalyseService {
+
+    @Autowired
+    AnalyseMapper analyseMapper;
+
+    @Override
+    public int insert(Analyse analyse) {
+        return analyseMapper.insert(analyse);
+    }
+
+    @Override
+    public List<Analyse> select(Analyse analyse) {
+        return analyseMapper.select(analyse);
+    }
+
+    @Override
+    public Analyse selectById(int id) {
+        return analyseMapper.selectById(id);
+    }
+}
diff --git a/src/main/java/com/jevon/service/impl/DimensionalServiceImpl.java b/src/main/java/com/jevon/service/impl/DimensionalServiceImpl.java
new file mode 100644
index 0000000..08180fb
--- /dev/null
+++ b/src/main/java/com/jevon/service/impl/DimensionalServiceImpl.java
@@ -0,0 +1,44 @@
+package com.jevon.service.impl;
+
+import com.jevon.mapper.DimensionalMapper;
+import com.jevon.model.Dimensional;
+import com.jevon.service.DimensionalService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author chen
+ * @version 1.0
+ * @date 2019/10/18 0018 10:25
+ */
+@Service
+public class DimensionalServiceImpl implements DimensionalService {
+
+    @Autowired
+    DimensionalMapper dimensionalMapper;
+
+    @Override
+    public int insert(Dimensional dimensional) {
+        return dimensionalMapper.insert(dimensional);
+    }
+
+    @Override
+    public List<Dimensional> select(Dimensional dimensional) {
+        return dimensionalMapper.select(dimensional);
+    }
+
+    @Override
+    public Dimensional selectByTypeAndName(int type, String name) {
+        Dimensional dimensional = new Dimensional();
+        dimensional.setDimensionalType(type);
+        dimensional.setDimensionalName(name);
+        List<Dimensional> list = dimensionalMapper.select(dimensional);
+        if(list != null &&list.size() > 0){
+            return list.get(0);
+        }
+        return null;
+    }
+}
diff --git a/src/main/java/com/jevon/vo/excel/ExamExcelVo.java b/src/main/java/com/jevon/vo/excel/ExamExcelVo.java
new file mode 100644
index 0000000..b895b7f
--- /dev/null
+++ b/src/main/java/com/jevon/vo/excel/ExamExcelVo.java
@@ -0,0 +1,168 @@
+package com.jevon.vo.excel;
+
+import org.apache.poi.ss.usermodel.Cell;
+import org.apache.poi.ss.usermodel.CellType;
+import org.apache.poi.ss.usermodel.Row;
+
+/**
+ * @author chen
+ * @version 1.0
+ * @date 2019/10/18 0018 8:51
+ */
+public class ExamExcelVo {
+
+    private String questionNumber ;
+    private String questionSmallNumber ;
+    private String questionType ;
+    private String difficult ;
+    private String score ;
+    private String knowledge ;
+    private String ability ;
+    private String skill ;
+    private String think ;
+
+    public String getQuestionNumber() {
+        return questionNumber;
+    }
+
+    public void setQuestionNumber(String questionNumber) {
+        this.questionNumber = questionNumber;
+    }
+
+    public String getQuestionSmallNumber() {
+        return questionSmallNumber;
+    }
+
+    public void setQuestionSmallNumber(String questionSmallNumber) {
+        this.questionSmallNumber = questionSmallNumber;
+    }
+
+    public String getQuestionType() {
+        return questionType;
+    }
+
+    public void setQuestionType(String questionType) {
+        this.questionType = questionType;
+    }
+
+    public String getDifficult() {
+        return difficult;
+    }
+
+    public void setDifficult(String difficult) {
+        this.difficult = difficult;
+    }
+
+    public String getScore() {
+        return score;
+    }
+
+    public void setScore(String score) {
+        this.score = score;
+    }
+
+    public String getKnowledge() {
+        return knowledge;
+    }
+
+    public void setKnowledge(String knowledge) {
+        this.knowledge = knowledge;
+    }
+
+    public String getAbility() {
+        return ability;
+    }
+
+    public void setAbility(String ability) {
+        this.ability = ability;
+    }
+
+    public String getSkill() {
+        return skill;
+    }
+
+    public void setSkill(String skill) {
+        this.skill = skill;
+    }
+
+    public String getThink() {
+        return think;
+    }
+
+    public void setThink(String think) {
+        this.think = think;
+    }
+
+    public ExamExcelVo(Row sheetRow) {
+        Cell cell1 = sheetRow.getCell(0);
+        if(cell1 != null){
+            cell1.setCellType(CellType.STRING);
+            this.questionNumber = cell1.getStringCellValue().trim();
+        }
+
+        Cell cell2 = sheetRow.getCell(1);
+        if(cell2 != null){
+            cell2.setCellType(CellType.STRING);
+            this.questionSmallNumber = cell2.getStringCellValue().trim();
+        }else {
+            this.questionSmallNumber = null ;
+        }
+
+
+        Cell cell3 = sheetRow.getCell(2);
+        if(cell3 != null){
+            cell3.setCellType(CellType.STRING);
+            this.questionType = cell3.getStringCellValue().trim();
+        }else {
+            this.questionType = null ;
+        }
+
+        Cell cell4 = sheetRow.getCell(3);
+        if(cell4 != null){
+            cell4.setCellType(CellType.STRING);
+            this.difficult = cell4.getStringCellValue().trim();
+        }else {
+            this.difficult = null ;
+        }
+
+        Cell cell5 = sheetRow.getCell(4);
+        if(cell5 != null){
+            cell5.setCellType(CellType.STRING);
+            this.score = cell5.getStringCellValue().trim();
+        }else {
+            this.score = null ;
+        }
+
+        Cell cell6 = sheetRow.getCell(5);
+        if(cell6 != null){
+            cell6.setCellType(CellType.STRING);
+            this.knowledge = cell6.getStringCellValue().trim();
+        }else {
+            this.knowledge = null ;
+        }
+
+        Cell cell7 = sheetRow.getCell(6);
+        if(cell7 != null){
+            cell7.setCellType(CellType.STRING);
+            this.ability = cell7.getStringCellValue().trim();
+        }else {
+            this.ability = null ;
+        }
+
+        Cell cell8 = sheetRow.getCell(7);
+        if(cell8 != null){
+            cell8.setCellType(CellType.STRING);
+            this.skill = cell8.getStringCellValue().trim();
+        }else {
+            this.skill = null ;
+        }
+
+        Cell cell9 = sheetRow.getCell(8);
+        if(cell9 != null){
+            cell9.setCellType(CellType.STRING);
+            this.think = cell9.getStringCellValue().trim();
+        }else {
+            this.think = null ;
+        }
+    }
+}
diff --git a/src/main/resources/mapping/AnalyseDetailMapper.xml b/src/main/resources/mapping/AnalyseDetailMapper.xml
new file mode 100644
index 0000000..f17d260
--- /dev/null
+++ b/src/main/resources/mapping/AnalyseDetailMapper.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.jevon.mapper.AnalyseDetailMapper" >
+  <resultMap id="BaseResultMap" type="com.jevon.model.AnalyseDetail" >
+    <id column="id" property="id" jdbcType="INTEGER" />
+    <result column="analyse_id" property="analyseId" jdbcType="INTEGER" />
+    <result column="question_number" property="questionNumber" jdbcType="VARCHAR" />
+    <result column="question_type" property="questionType" jdbcType="INTEGER" />
+    <result column="difficult" property="difficult" jdbcType="INTEGER" />
+    <result column="score" property="score" jdbcType="FLOAT" />
+    <result column="create_time" property="createTime" jdbcType="TIMESTAMP" />
+  </resultMap>
+
+  <insert id="insertBatch" parameterType="java.util.List">
+    insert into sz_learn_analyse_detail (analyse_id, question_number,question_type,difficult,score,create_time)
+    values
+     <foreach collection="list" item="emp" separator=",">
+       (#{emp.analyseId},#{emp.questionNumber},#{emp.questionType},#{emp.difficult},#{emp.score},#{emp.createTime})
+     </foreach>
+  </insert>
+</mapper>
\ No newline at end of file
diff --git a/src/main/resources/mapping/AnalyseDimensionalMapper.xml b/src/main/resources/mapping/AnalyseDimensionalMapper.xml
new file mode 100644
index 0000000..2dcb01f
--- /dev/null
+++ b/src/main/resources/mapping/AnalyseDimensionalMapper.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.jevon.mapper.AnalyseDimensionalMapper" >
+  <resultMap id="BaseResultMap" type="com.jevon.model.AnalyseDimensional" >
+    <id column="id" property="id" jdbcType="INTEGER" />
+    <result column="analyse_id" property="analyseId" jdbcType="INTEGER" />
+    <result column="question_number" property="questionNumber" jdbcType="VARCHAR" />
+    <result column="dimensional_id" property="questionType" jdbcType="INTEGER" />
+    <result column="score" property="score" jdbcType="FLOAT" />
+    <result column="create_time" property="createTime" jdbcType="TIMESTAMP" />
+  </resultMap>
+
+  <insert id="insertBatch" parameterType="java.util.List">
+    insert into sz_learn_analyse_dimensional (analyse_id, question_number,dimensional_id,score,create_time)
+    values
+     <foreach collection="list" item="emp" separator=",">
+       (#{emp.analyseId},#{emp.questionNumber},#{emp.dimensionalId},#{emp.score},#{emp.createTime})
+     </foreach>
+  </insert>
+</mapper>
\ No newline at end of file
diff --git a/src/main/resources/mapping/AnalyseMapper.xml b/src/main/resources/mapping/AnalyseMapper.xml
new file mode 100644
index 0000000..8720c6e
--- /dev/null
+++ b/src/main/resources/mapping/AnalyseMapper.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.jevon.mapper.AnalyseMapper" >
+  <resultMap id="BaseResultMap" type="com.jevon.model.Analyse" >
+    <id column="id" property="id" jdbcType="INTEGER" />
+    <result column="exam_name" property="examName" jdbcType="VARCHAR" />
+    <result column="exam_time" property="examTime" jdbcType="TIMESTAMP" />
+    <result column="course_name" property="courseName" jdbcType="VARCHAR" />
+    <result column="create_time" property="createTime" jdbcType="TIMESTAMP" />
+  </resultMap>
+
+  <insert id="insert" parameterType="com.jevon.model.Analyse"  useGeneratedKeys="true" keyColumn="id" keyProperty="id">
+    insert into sz_learn_analyse (exam_name, exam_time,course_name,create_time)
+    values (#{examName},#{examTime},#{courseName},#{createTime})
+  </insert>
+
+  <select id="select" parameterType="com.jevon.model.Analyse" resultMap="BaseResultMap">
+    select * from sz_learn_analyse where 1=1
+	<if test="courseName != 0">
+      and course_name = #{courseName}
+    </if>
+    <if test="examName != null">
+      and exam_name = #{examName}
+    </if>
+  </select>
+
+  <select id="selectById" parameterType="java.lang.Integer" resultMap="BaseResultMap">
+    select * from sz_learn_analyse where id = #{id}
+  </select>
+</mapper>
\ No newline at end of file
diff --git a/src/main/resources/mapping/DimensionalMapper.xml b/src/main/resources/mapping/DimensionalMapper.xml
new file mode 100644
index 0000000..aef563f
--- /dev/null
+++ b/src/main/resources/mapping/DimensionalMapper.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.jevon.mapper.DimensionalMapper" >
+  <resultMap id="BaseResultMap" type="com.jevon.model.Dimensional" >
+    <id column="id" property="id" jdbcType="INTEGER" />
+    <result column="dimensional_type" property="dimensionalType" jdbcType="INTEGER" />
+    <result column="dimensional_name" property="dimensionalName" jdbcType="VARCHAR" />
+    <result column="create_time" property="createTime" jdbcType="TIMESTAMP" />
+  </resultMap>
+
+  <insert id="insert" parameterType="com.jevon.model.Dimensional"  useGeneratedKeys="true" keyColumn="id" keyProperty="id">
+    insert into sz_learn_dimensional (dimensional_type, dimensional_name,create_time)
+    values (#{dimensionalType},#{dimensionalName},#{createTime})
+  </insert>
+
+  <select id="select" parameterType="com.jevon.model.Dimensional" resultMap="BaseResultMap">
+    select * from sz_learn_dimensional where 1=1
+	<if test="dimensionalType != 0">
+      and dimensional_type = #{dimensionalType}
+    </if>
+    <if test="dimensionalName != null">
+      and dimensional_name = #{dimensionalName}
+    </if>
+  </select>
+</mapper>
\ No newline at end of file
--
libgit2 0.21.0