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 getList(){ List 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()); int id = analyseService.insert(analyse); baseVo.setMessage(id+""); 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 analyseDetails = new ArrayList<>(); List 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 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); analyse.setMaxScore(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 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); } } } } @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{ List studentDetails = new ArrayList<>(); List students = 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(); Map 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); 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 Float(cell.getNumericCellValue())); studentDetail.setCreateTime(date); studentDetails.add(studentDetail); j++; } } } studentService.insertBatch(students); studentDetailService.insertBatch(studentDetails); }catch (Exception e){ System.out.println(e); } } }