LearnController.java 6.7 KB
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;
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;

    @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<>();
            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);
                    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);
        }
    }

    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);
                }
            }
        }
    }


}