LearnController.java 11.9 KB
package com.jevon.controller;

import com.jevon.enums.DifficultEnums;
import com.jevon.enums.DimensionalEnums;
import com.jevon.model.*;
import com.jevon.service.*;
import com.jevon.vo.BaseVo;
import com.jevon.vo.excel.ExamExcelVo;
import com.jevon.vo.excel.ScoreExcelVo;
import com.jevon.vo.req.CreateExamReqVo;
import com.jevon.vo.req.InitAnalyseReqVo;
import com.jevon.vo.req.UpdateExamReqVo;
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;
import java.io.FileInputStream;
import java.util.*;

/**
 * @author chen
 * @version 1.0
 * @date 2019/10/17 0017 13:33
 */
@RestController
@RequestMapping(value = "/learn")
@Api(value = "学情分析")
public class LearnController {

    @Autowired
    AnalyseService analyseService;

    @Autowired
    DimensionalService dimensionalService;

    @Autowired
    AnalyseDimensionalService analyseDimensionalService;

    @Autowired
    AnalyseDetailService analyseDetailService;

    @Autowired
    StudentDetailService studentDetailService;

    @Autowired
    StudentService studentService;

    @ApiOperation("获取列表")
    @RequestMapping(value = "getList", method = RequestMethod.POST)
    public List<Analyse> getList(){
        List<Analyse> list = analyseService.select(new Analyse());
        return  list;
    }

    @ApiOperation("创建考试")
    @RequestMapping(value = "createExam", method = RequestMethod.POST)
    public BaseVo createExam(@RequestBody CreateExamReqVo createExamReqVo){
        BaseVo baseVo = new BaseVo();
        Analyse analyse = new Analyse();
        analyse.setCourseName(createExamReqVo.getCourseName());
        analyse.setExamName(createExamReqVo.getExamName());
        analyse.setExamTime(createExamReqVo.getExamTime());
        analyse.setCreateTime(new Date());
        analyseService.insert(analyse);
        baseVo.setMessage(analyse.getId()+"");
        return baseVo;
    }

    @ApiOperation("更新考试信息")
    @RequestMapping(value = "updateExam", method = RequestMethod.POST)
    public BaseVo updateExam(@RequestBody UpdateExamReqVo updateExamReqVo){
        BaseVo baseVo = new BaseVo();
        Analyse analyse = analyseService.selectById(updateExamReqVo.getAnalyseId());
        if(analyse == null){
            baseVo.setMessage("考试不存在");
            baseVo.setSuccess(false);
            return baseVo;
        }
        analyse.setExamTime(updateExamReqVo.getExamTime());
        analyse.setExamName(updateExamReqVo.getExamName());
        analyse.setCourseName(updateExamReqVo.getCourseName());
        return baseVo;
    }

    @ApiOperation("试卷信息导入")
    @RequestMapping(value = "initAnalyse", method = RequestMethod.POST)
    public BaseVo initAnalyse(@RequestBody InitAnalyseReqVo initAnalyseReqVo){
        BaseVo baseVo = new BaseVo();
        analysisExcel(initAnalyseReqVo);
        return baseVo;
    }

    private void analysisExcel(InitAnalyseReqVo initAnalyseReqVo){
        try{
            List<AnalyseDetail> analyseDetails = new ArrayList<>();
            List<AnalyseDimensional> analyseDimensionals = new ArrayList<>();
            Float maxScore = 0f;
            Analyse analyse = analyseService.selectById(initAnalyseReqVo.getAnalyseId());
            String fileUrl = initAnalyseReqVo.getUrl();
            File excelFile = new File(fileUrl);
            // 获得工作簿
            String file = excelFile.getName();
            Workbook workbook = null;
            if (file.endsWith("xls")) {
                workbook = new HSSFWorkbook(new FileInputStream(excelFile));
            } else {
                workbook = new XSSFWorkbook(new FileInputStream(excelFile));
            }
            // 获得工作表
            Sheet sheet = workbook.getSheetAt(0);
            Date date = new Date();
            int rows = sheet.getPhysicalNumberOfRows();
            for (int i = 0; i < rows; i++) {
                // 获取第i行数据
                Row sheetRow = sheet.getRow(i);
                if (i == 0) {
                    //获取标题
                    String title = sheetRow.getCell(0).getStringCellValue().trim();
                }else if(i == 1){
                    //获取表头
                } else {
                    ExamExcelVo examExcelVo = new ExamExcelVo(sheetRow);
                    maxScore = maxScore + new Float(examExcelVo.getScore());
                    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 Double(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);
            analyse.setMaxScore(new Double(maxScore));
            analyseService.update(analyse);
        }catch (Exception e){
            System.out.println(e);
        }
    }

    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 Double(score));
                    analyseDimensional.setCreateTime(new Date());
                    analyseDimensionals.add(analyseDimensional);
                }
            }
        }
    }

    @ApiOperation("考生成绩导入")
    @RequestMapping(value = "initScore", method = RequestMethod.POST)
    public BaseVo initScore(@RequestBody InitAnalyseReqVo initAnalyseReqVo){
        BaseVo baseVo = new BaseVo();
        analysisScoreExcel(initAnalyseReqVo);
        return baseVo;
    }

    private void analysisScoreExcel(InitAnalyseReqVo initAnalyseReqVo){
        try{
            Analyse analyse = analyseService.selectById(initAnalyseReqVo.getAnalyseId());
            String fileUrl = initAnalyseReqVo.getUrl();
            File excelFile = new File(fileUrl);
            // 获得工作簿
            String file = excelFile.getName();
            Workbook workbook = null;
            if (file.endsWith("xls")) {
                workbook = new HSSFWorkbook(new FileInputStream(excelFile));
            } else {
                workbook = new XSSFWorkbook(new FileInputStream(excelFile));
            }
            // 获得工作表
            for(int number = 0 ; number < workbook.getNumberOfSheets() ; number++){
                Sheet sheet = workbook.getSheetAt(number);
                List<StudentDetail> studentDetails = new ArrayList<>();
                List<Student> students = new ArrayList<>();
                Date date = new Date();
                int rows = sheet.getPhysicalNumberOfRows();
                Map<Integer , String> map = new HashMap<>();
                for (int i = 0; i < rows; i++) {
                    // 获取第i行数据
                    Row sheetRow = sheet.getRow(i);
                    if (i == 0) {
                        //获取标题
                    }else if(i == 1){
                        //获取表头
                        int j = 7 ;
                        while (sheetRow.getCell(j) != null){
                            Cell cell = sheetRow.getCell(j);
                            cell.setCellType(CellType.STRING);
                            map.put(j,cell.getStringCellValue().trim());
                            j++;
                        }
                    } else {
                        ScoreExcelVo scoreExcelVo = new ScoreExcelVo(sheetRow);
                       if(StringUtils.isNotBlank(scoreExcelVo.getStudentName())){
                           Student student = new Student(scoreExcelVo);
                           student.setAnalyseId(analyse.getId());
                           student.setCreateTime(date);
                           students.add(student);
                           int j = 7 ;
                           while (sheetRow.getCell(j) != null){
                               Cell cell = sheetRow.getCell(j);
                               StudentDetail studentDetail = new StudentDetail(scoreExcelVo);
                               studentDetail.setAnalyseId(analyse.getId());
                               studentDetail.setExamNumber(map.get(j));
                               studentDetail.setScore(new Double(cell.getNumericCellValue()));
                               studentDetail.setCreateTime(date);
                               studentDetails.add(studentDetail);
                               j++;
                           }
                       }
                    }
                }
                studentService.insertBatch(students);
                studentDetailService.insertBatch(studentDetails);
            }
        }catch (Exception e){
            e.printStackTrace();
            System.out.println(e.toString());
        }
    }
}